From b58552c9903cbe6f6917e154d228e43ee347ed6a Mon Sep 17 00:00:00 2001 From: tateisu Date: Thu, 16 Aug 2018 17:02:55 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=81=AB=E3=80=8C=E8=BF=94=E4=BF=A1=E3=81=AE=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jp/juggler/subwaytooter/ActAppSetting.kt | 132 +++++++++--------- .../jp/juggler/subwaytooter/ItemViewHolder.kt | 31 ++-- .../main/java/jp/juggler/subwaytooter/Pref.kt | 5 + .../jp/juggler/subwaytooter/StatusButtons.kt | 49 +++++-- .../subwaytooter/api/entity/TootStatus.kt | 13 +- .../jp/juggler/subwaytooter/util/Utils.kt | 1 - app/src/main/res/layout/act_app_setting.xml | 16 +++ app/src/main/res/layout/list_item_popup.xml | 13 +- app/src/main/res/values-fr/strings.xml | 6 +- app/src/main/res/values-ja/strings.xml | 4 + app/src/main/res/values/strings.xml | 4 + 11 files changed, 168 insertions(+), 106 deletions(-) diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt b/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt index df77909c..aebeaf79 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt @@ -9,6 +9,7 @@ import android.os.AsyncTask import android.os.Build import android.os.Bundle import android.support.annotation.ColorInt +import android.support.annotation.IdRes import android.support.v4.content.FileProvider import android.support.v4.view.ViewCompat import android.support.v7.app.AlertDialog @@ -103,6 +104,7 @@ class ActAppSetting : AppCompatActivity() private lateinit var spResizeImage : Spinner private lateinit var spRefreshAfterToot : Spinner private lateinit var spDefaultAccount : Spinner + private lateinit var spRepliesCount : Spinner private var footer_button_bg_color : Int = 0 private var footer_button_fg_color : Int = 0 @@ -193,66 +195,49 @@ class ActAppSetting : AppCompatActivity() } } - run { - val caption_list = arrayOf( - getString(R.string.ask_always), - getString(R.string.close_column), - getString(R.string.open_column_list), - getString(R.string.app_exit) - ) - val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, caption_list) - adapter.setDropDownViewResource(R.layout.lv_spinner_dropdown) - spBackButtonAction = findViewById(R.id.spBackButtonAction) - spBackButtonAction.adapter = adapter - spBackButtonAction.onItemSelectedListener = this + spBackButtonAction = initSpinner( + R.id.spBackButtonAction + , getString(R.string.ask_always) + , getString(R.string.close_column) + , getString(R.string.open_column_list) + , getString(R.string.app_exit) + ) + + spRepliesCount = initSpinner( + R.id.spRepliesCount + , getString(R.string.replies_count_simple) + , getString(R.string.replies_count_actual) + , getString(R.string.replies_count_none) + ) + + spUITheme = initSpinner( + R.id.spUITheme + , getString(R.string.theme_light) + , getString(R.string.theme_dark) + ) + + spResizeImage = initSpinner( + R.id.spResizeImage + , getString(R.string.dont_resize) + , getString(R.string.long_side_pixel, 640) + , getString(R.string.long_side_pixel, 800) + , getString(R.string.long_side_pixel, 1024) + , getString(R.string.long_side_pixel, 1280) + // サーバ側でさらに縮小されるようなので、1280より上は用意しない + ) + + spRefreshAfterToot = initSpinner( + R.id.spRefreshAfterToot + , getString(R.string.refresh_scroll_to_toot) + , getString(R.string.refresh_no_scroll) + , getString(R.string.dont_refresh) + ) + + spDefaultAccount = findViewById(R.id.spDefaultAccount).also { + it.adapter = AccountAdapter() + it.onItemSelectedListener = this@ActAppSetting } - run { - val caption_list = - arrayOf(getString(R.string.theme_light), getString(R.string.theme_dark)) - val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, caption_list) - adapter.setDropDownViewResource(R.layout.lv_spinner_dropdown) - spUITheme = findViewById(R.id.spUITheme) - spUITheme.adapter = adapter - spUITheme.onItemSelectedListener = this - } - run { - val caption_list = arrayOf( - getString(R.string.dont_resize), - getString(R.string.long_side_pixel, 640), - getString(R.string.long_side_pixel, 800), - getString(R.string.long_side_pixel, 1024), - getString(R.string.long_side_pixel, 1280) - ) //// サーバ側でさらに縮小されるようなので、1280より上は用意しない - // Integer.toString( 1600 ), - // Integer.toString( 2048 ), - val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, caption_list) - adapter.setDropDownViewResource(R.layout.lv_spinner_dropdown) - spResizeImage = findViewById(R.id.spResizeImage) - spResizeImage.adapter = adapter - spResizeImage.onItemSelectedListener = this - } - - run { - val caption_list = arrayOf( - getString(R.string.refresh_scroll_to_toot), - getString(R.string.refresh_no_scroll), - getString(R.string.dont_refresh) - ) - val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, caption_list) - adapter.setDropDownViewResource(R.layout.lv_spinner_dropdown) - spRefreshAfterToot = findViewById(R.id.spRefreshAfterToot) - spRefreshAfterToot.adapter = adapter - spRefreshAfterToot.onItemSelectedListener = this - } - - run { - - val adapter = AccountAdapter() - spDefaultAccount = findViewById(R.id.spDefaultAccount) - spDefaultAccount.adapter = adapter - spDefaultAccount.onItemSelectedListener = this - } findViewById(R.id.btnFooterBackgroundEdit).setOnClickListener(this) findViewById(R.id.btnFooterBackgroundReset).setOnClickListener(this) @@ -349,6 +334,16 @@ class ActAppSetting : AppCompatActivity() tvUserAgentError = findViewById(R.id.tvUserAgentError) } + private fun initSpinner(@IdRes viewId : Int, vararg captions : String) : Spinner { + val caption_list : Array = arrayOf(*captions) + val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, caption_list) + adapter.setDropDownViewResource(R.layout.lv_spinner_dropdown) + val sp : Spinner = findViewById(viewId) + sp.adapter = adapter + sp.onItemSelectedListener = this + return sp + } + private fun loadUIFromData() { load_busy = true @@ -357,6 +352,7 @@ class ActAppSetting : AppCompatActivity() } spBackButtonAction.setSelection(Pref.ipBackButtonAction(pref)) + spRepliesCount.setSelection(Pref.ipRepliesCount(pref)) spUITheme.setSelection(Pref.ipUiTheme(pref)) spResizeImage.setSelection(Pref.ipResizeImage(pref)) spRefreshAfterToot.setSelection(Pref.ipRefreshAfterToot(pref)) @@ -395,7 +391,7 @@ class ActAppSetting : AppCompatActivity() etTimelineFontSize.setText(formatFontSize(Pref.fpTimelineFontSize(pref))) etAcctFontSize.setText(formatFontSize(Pref.fpAcctFontSize(pref))) etNotificationTlFontSize.setText(formatFontSize(Pref.fpNotificationTlFontSize(pref))) - + etUserAgent.hint = App1.userAgentDefault load_busy = false @@ -406,7 +402,11 @@ class ActAppSetting : AppCompatActivity() showFontSize(tvTimelineFontSize, etTimelineFontSize, default_timeline_font_size) showFontSize(tvAcctFontSize, etAcctFontSize, default_acct_font_size) - showFontSize(tvNotificationTlFontSize, etNotificationTlFontSize, default_notification_tl_font_size) + showFontSize( + tvNotificationTlFontSize, + etNotificationTlFontSize, + default_notification_tl_font_size + ) showUserAgentError() } @@ -449,7 +449,9 @@ class ActAppSetting : AppCompatActivity() .put(Pref.spQuoteNameFormat, etQuoteNameFormat.text.toString()) // not trimmed .put(Pref.spAutoCWLines, etAutoCWLines.text.toString().trim { it <= ' ' }) .put(Pref.spAvatarIconSize, etAvatarIconSize.text.toString().trim { it <= ' ' }) - .put(Pref.spNotificationTlIconSize, etNotificationTlIconSize.text.toString().trim { it <= ' ' }) + .put( + Pref.spNotificationTlIconSize, + etNotificationTlIconSize.text.toString().trim { it <= ' ' }) .put( Pref.spPullNotificationCheckInterval, etPullNotificationCheckInterval.text.toString().trim { it <= ' ' }) @@ -460,6 +462,7 @@ class ActAppSetting : AppCompatActivity() .put(Pref.spTimelineFontBold, timeline_font_bold ?: "") .put(Pref.ipBackButtonAction, spBackButtonAction.selectedItemPosition) + .put(Pref.ipRepliesCount, spRepliesCount.selectedItemPosition) .put(Pref.ipUiTheme, spUITheme.selectedItemPosition) .put(Pref.ipResizeImage, spResizeImage.selectedItemPosition) .put(Pref.ipRefreshAfterToot, spRefreshAfterToot.selectedItemPosition) @@ -473,7 +476,6 @@ class ActAppSetting : AppCompatActivity() .apply() showUserAgentError() - } private fun showUserAgentError() { @@ -557,7 +559,7 @@ class ActAppSetting : AppCompatActivity() saveUIToData() showFooterColor() } - + R.id.btnListDividerColorEdit -> openColorPicker( COLOR_DIALOG_ID_LIST_DIVIDER, list_divider_color, @@ -568,7 +570,7 @@ class ActAppSetting : AppCompatActivity() list_divider_color = 0 saveUIToData() } - + R.id.btnTimelineFontReset -> { timeline_font = "" saveUIToData() @@ -691,7 +693,7 @@ class ActAppSetting : AppCompatActivity() showFooterColor() } - COLOR_DIALOG_ID_LIST_DIVIDER ->{ + COLOR_DIALOG_ID_LIST_DIVIDER -> { list_divider_color = if(colorSelected == 0) 0x01000000 else colorSelected saveUIToData() } diff --git a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt index 194b1ed4..077ece4f 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt @@ -94,7 +94,7 @@ internal class ItemViewHolder( private lateinit var llButtonBar : View private lateinit var btnConversation : ImageButton - private lateinit var btnReply : ImageButton + private lateinit var btnReply : Button private lateinit var btnBoost : Button private lateinit var btnFavourite : Button private lateinit var llFollow2 : View @@ -1891,6 +1891,9 @@ internal class ItemViewHolder( topMargin = dip(3) } + val marginBetween = dip(2) + val compoundPadding= dip(0.5f) + btnConversation = imageButton { background = ContextCompat.getDrawable( @@ -1903,19 +1906,18 @@ internal class ItemViewHolder( Styler.getAttributeResourceId(context, R.attr.ic_conversation) }.lparams(wrapContent, matchParent) - btnReply = imageButton { + btnReply = button { background = ContextCompat.getDrawable( context, R.drawable.btn_bg_transparent ) - contentDescription = context.getString(R.string.reply) - minimumWidth = dip(40) - imageResource = - Styler.getAttributeResourceId(context, R.attr.btn_reply) - + compoundDrawablePadding = compoundPadding + minWidthCompat = dip(48) + setPaddingStartEnd(dip(4), dip(4)) + // imageResource = Styler.getAttributeResourceId(context, R.attr.btn_reply) }.lparams(wrapContent, matchParent) { - startMargin = dip(2) + startMargin = marginBetween } btnBoost = button { @@ -1924,12 +1926,12 @@ internal class ItemViewHolder( context, R.drawable.btn_bg_transparent ) - compoundDrawablePadding = dip(4) + compoundDrawablePadding = compoundPadding minWidthCompat = dip(48) setPaddingStartEnd(dip(4), dip(4)) }.lparams(wrapContent, matchParent) { - startMargin = dip(2) + startMargin = marginBetween } btnFavourite = button { @@ -1937,17 +1939,17 @@ internal class ItemViewHolder( context, R.drawable.btn_bg_transparent ) - compoundDrawablePadding = dip(4) + compoundDrawablePadding = compoundPadding minWidthCompat = dip(48) setPaddingStartEnd(dip(4), dip(4)) }.lparams(wrapContent, matchParent) { - startMargin = dip(2) + startMargin = marginBetween } llFollow2 = frameLayout { lparams(dip(40), dip(40)) { - startMargin = dip(2) + startMargin = marginBetween } btnFollow2 = imageButton { @@ -1984,9 +1986,8 @@ internal class ItemViewHolder( Styler.getAttributeResourceId(context, R.attr.btn_more) minimumWidth = dip(40) }.lparams(wrapContent, matchParent) { - startMargin = dip(2) + startMargin = marginBetween } - } tvApplication = textView { diff --git a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt index 46e55d05..01a118ef 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt @@ -312,11 +312,16 @@ object Pref { R.id.swScrollTopFromColumnStrip ) + // int val ipBackButtonAction = IntPref("back_button_action", 0) val ipUiTheme = IntPref("ui_theme", 0) val ipResizeImage = IntPref("resize_image", 4) + val ipRepliesCount = IntPref("RepliesCount",0) + const val RC_SIMPLE = 0 + const val RC_ACTUAL = 1 + const val RC_NONE = 2 val ipRefreshAfterToot = IntPref("refresh_after_toot", 0) const val RAT_REFRESH_SCROLL = 0 diff --git a/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt b/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt index 7ab2abf4..8be6ea47 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/StatusButtons.kt @@ -22,7 +22,7 @@ internal class StatusButtons( private val bSimpleList : Boolean, private val btnConversation : ImageButton, - private val btnReply : ImageButton, + private val btnReply : Button, private val btnBoost : Button, private val btnFavourite : Button, private val llFollow2 : View, @@ -69,6 +69,25 @@ internal class StatusButtons( val fav_icon_attr = if(access_info.isNicoru(status.account)) R.attr.ic_nicoru else R.attr.btn_favourite + val replies_count = status.replies_count + setButton( + btnReply, + true, + color_normal, + R.attr.btn_reply, + when{ + replies_count == null || status.visibility == TootStatus.VISIBILITY_DIRECT -> "" + else->when(Pref.ipRepliesCount(activity.pref)){ + Pref.RC_SIMPLE -> when{ + replies_count >= 1 -> "1+" + else -> replies_count.toString() + } + Pref.RC_ACTUAL -> replies_count.toString() + else->"" + } + } + ) + // ブーストボタン when { TootStatus.VISIBILITY_DIRECT == status.visibility -> setButton( @@ -78,14 +97,14 @@ internal class StatusButtons( R.attr.ic_mail, "" ) -// マストドン2.4.0から非公開トゥートもブーストできるようになった -// TootStatus.VISIBILITY_PRIVATE == status.visibility -> setButton( -// btnBoost, -// false, -// color_accent, -// R.attr.ic_lock, -// "" -// ) + // マストドン2.4.0から非公開トゥートもブーストできるようになった + // TootStatus.VISIBILITY_PRIVATE == status.visibility -> setButton( + // btnBoost, + // false, + // color_accent, + // R.attr.ic_lock, + // "" + // ) activity.app_state.isBusyBoost(access_info, status) -> setButton( btnBoost, false, @@ -192,7 +211,7 @@ internal class StatusButtons( NOT_CROSS_ACCOUNT, when { ! bSimpleList -> null - // 簡略表示なら結果をトースト表示 + // 簡略表示なら結果をトースト表示 bSet -> activity.boost_complete_callback else -> activity.unboost_complete_callback }, @@ -216,7 +235,7 @@ internal class StatusButtons( NOT_CROSS_ACCOUNT, when { ! bSimpleList -> null - // 簡略表示なら結果をトースト表示 + // 簡略表示なら結果をトースト表示 bSet -> activity.favourite_complete_callback else -> activity.unfavourite_complete_callback }, @@ -271,7 +290,13 @@ internal class StatusButtons( } } - btnMore -> DlgContextMenu(activity, column, status.accountRef, status, notification).show() + btnMore -> DlgContextMenu( + activity, + column, + status.accountRef, + status, + notification + ).show() } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatus.kt b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatus.kt index ef00a1d1..1d7de830 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatus.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/api/entity/TootStatus.kt @@ -125,6 +125,9 @@ class TootStatus(parser : TootParser, src : JSONObject) : var enquete : NicoEnquete? = null + // + var replies_count :Long? = null + /////////////////////////////////////////////////////////////////// // 以下はentityから取得したデータではなく、アプリ内部で使う @@ -166,14 +169,16 @@ class TootStatus(parser : TootParser, src : JSONObject) : this.accountRef = TootAccountRef(parser, who) + this.reblogs_count = src.parseLong("reblogs_count") + this.favourites_count = src.parseLong("favourites_count") + this.replies_count = src.parseLong("replies_count") + when(parser.serviceType) { ServiceType.MASTODON -> { this.host_access = parser.linkHelper.host this.id = src.parseLong("id") ?: INVALID_ID - this.reblogs_count = src.parseLong("reblogs_count") - this.favourites_count = src.parseLong("favourites_count") this.reblogged = src.optBoolean("reblogged") this.favourited = src.optBoolean("favourited") @@ -191,10 +196,6 @@ class TootStatus(parser : TootParser, src : JSONObject) : // 投稿元タンスでのIDを調べる。失敗するかもしれない this.id = findStatusIdFromUri(uri, url) - - this.reblogs_count = src.parseLong("reblogs_count") - this.favourites_count = src.parseLong("favourites_count") - this.time_created_at = TootStatus.parseTime(this.created_at) this.media_attachments = parseListOrNull(::TootAttachment, src.optJSONArray("media_attachments"), log) diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/Utils.kt b/app/src/main/java/jp/juggler/subwaytooter/util/Utils.kt index c4385c85..9c85f080 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/Utils.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/Utils.kt @@ -651,7 +651,6 @@ fun JSONObject.parseInt(key : String) : Int? { } } - //////////////////////////////////////////////////////////////////// // Bundle diff --git a/app/src/main/res/layout/act_app_setting.xml b/app/src/main/res/layout/act_app_setting.xml index 769c5dfc..d257436a 100644 --- a/app/src/main/res/layout/act_app_setting.xml +++ b/app/src/main/res/layout/act_app_setting.xml @@ -872,6 +872,22 @@ /> + + + + + + + + + + diff --git a/app/src/main/res/layout/list_item_popup.xml b/app/src/main/res/layout/list_item_popup.xml index fa670f27..8f61e844 100644 --- a/app/src/main/res/layout/list_item_popup.xml +++ b/app/src/main/res/layout/list_item_popup.xml @@ -33,15 +33,16 @@ android:src="?attr/ic_conversation" /> -