diff --git a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt index e152348d..d086c629 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt @@ -520,7 +520,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett sw(PrefB.bpDisableEmojiAnimation, R.string.disable_custom_emoji_animation) } - section(R.string.emoji){ + section(R.string.emoji) { sw(PrefB.bpUseTwemoji, R.string.use_twemoji_emoji) @@ -570,6 +570,10 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett R.string.emoji_texture_pixels, InputTypeEx.number ) + sw( + PrefB.bpCollapseEmojiPickerCategory, + R.string.emoji_picker_category_collapse + ) } section(R.string.appearance) { @@ -1073,7 +1077,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett section(R.string.developer_options) { sw(PrefB.bpCheckBetaVersion, R.string.check_beta_release) - sw(PrefB.bpEnableDeprecatedSomething,R.string.enable_deprecated_something) + sw(PrefB.bpEnableDeprecatedSomething, R.string.enable_deprecated_something) action(R.string.drawable_list) { action = { startActivity(Intent(this, ActDrawableList::class.java)) } @@ -1116,7 +1120,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett } - section(R.string.bug_report){ + section(R.string.bug_report) { spinnerSimple( PrefI.ipLogSaveLevel, R.string.log_save_level, // name @@ -1128,7 +1132,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett R.string.log_warn, //5 R.string.log_error, //6 R.string.log_assert, //7 - ){ + ) { desc = R.string.log_save_level_desc } diff --git a/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt b/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt index ee0672f9..38f1b56b 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt @@ -10,13 +10,12 @@ import android.view.* import android.widget.FrameLayout import android.widget.ImageButton import android.widget.ImageView -import android.widget.LinearLayout import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatButton -import androidx.appcompat.widget.AppCompatImageButton import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatTextView import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.children import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide @@ -38,7 +37,6 @@ import jp.juggler.util.coroutine.launchAndShowError import jp.juggler.util.data.* import jp.juggler.util.log.* import jp.juggler.util.ui.* -import org.jetbrains.anko.image import org.jetbrains.anko.wrapContent import kotlin.math.abs import kotlin.math.sign @@ -199,20 +197,22 @@ private class EmojiPicker( abstract fun bind(item: PickerItem) } - private var lastExpandCategory: PickerItemCategory? = null - private var canCollapse = true - private inner class VhCategory( - view: LinearLayout = LinearLayout(activity), + view: FrameLayout = FrameLayout(activity), ) : ViewHolderBase(view) { var lastItem: PickerItemCategory? = null - val ibExpand = AppCompatImageButton(activity).apply { - layoutParams = LinearLayout.LayoutParams(gridSize, matchParent) + val tv = AppCompatTextView(activity).apply { + layoutParams = FrameLayout.LayoutParams(headerWidth, wrapContent) + minHeightCompat = (density * 48f + 0.5f).toInt() + gravity = Gravity.START or Gravity.CENTER_VERTICAL + includeFontPadding = false background = ContextCompat.getDrawable( this@EmojiPicker.activity, R.drawable.btn_bg_transparent_round6dp ) + compoundDrawablePadding = (density * 4f + 0.5f).toInt() + setOnClickListener { val orig = lastItem?.original ?: return@setOnClickListener @@ -227,36 +227,29 @@ private class EmojiPicker( } } - val tv = AppCompatTextView(activity).apply { - layoutParams = LinearLayout.LayoutParams(0, wrapContent).apply { - weight = 1f - } - minHeightCompat = (density * 48f + 0.5f).toInt() - gravity = Gravity.START or Gravity.CENTER_VERTICAL - includeFontPadding = false - } - init { view.layoutParams = RecyclerView.LayoutParams(headerWidth, wrapContent) view.setPadding(cellMargin, cellMargin, cellMargin, cellMargin) - view.isBaselineAligned = false - view.gravity = Gravity.START or Gravity.CENTER_VERTICAL - view.addView(ibExpand) view.addView(tv) } override fun bind(item: PickerItem) { - if (item is PickerItemCategory) { - lastItem = item - tv.text = item.name - ibExpand.vg(canCollapse)?.let { - val drawableId = when (lastExpandCategory == item.original) { - true -> R.drawable.ic_arrow_drop_down - else -> R.drawable.ic_arrow_drop_up - } - it.image = ContextCompat.getDrawable(activity, drawableId) + if (item !is PickerItemCategory) return + lastItem = item + tv.text = item.name + + val drawable = when { + !canCollapse -> null + lastExpandCategory == item.original -> R.drawable.ic_arrow_drop_down + else -> R.drawable.ic_arrow_drop_up + }?.let { + ContextCompat.getDrawable(activity, it) + }?.let { + DrawableCompat.wrap(it).also { d -> + DrawableCompat.setTint(d, activity.attrColor(R.attr.colorTextContent)) } } + tv.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, null, null, null) } } @@ -447,6 +440,9 @@ private class EmojiPicker( private var recentCategory: PickerItemCategoryRecent? = null + private var lastExpandCategory: PickerItemCategory? = null + private var canCollapse = true + private val density = activity.resources.displayMetrics.density val cellMargin = (density * 1f + 0.5f).toInt() val gridSize = (density * 48f + 0.5f).toInt() @@ -615,8 +611,9 @@ private class EmojiPicker( lastSelectedCategory = selectedCategory lastSelectedKeyword = selectedKeyword val keywordLower = selectedKeyword?.lowercase()?.trim() - this.canCollapse = - keywordLower.isNullOrEmpty() && (selectedCategory == null || selectedCategory == EmojiCategory.Custom) + this.canCollapse = PrefB.bpCollapseEmojiPickerCategory.value && + keywordLower.isNullOrEmpty() && + (selectedCategory == null || selectedCategory == EmojiCategory.Custom) adapter.list = buildList { val filteredCategories = pickerCategries.filter { diff --git a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt index 94484425..ef765610 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt @@ -364,4 +364,8 @@ object PrefB { "EnableDeprecatedSomething", false ) + val bpCollapseEmojiPickerCategory = BooleanPref( + "CollapseEmojiPickerCategory", + true + ) } diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e23a8d18..11051ad5 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1269,4 +1269,5 @@ 有効 無効 絵文字テクスチャの最大ピクセル数(単位:ピクセル、デフォルト: 128。 タスクキルが必要。端末のRAMが少ない場合は64程度まで下げることをお勧めします) + 絵文字ピッカーのカテゴリを折りたたむ(サーバーに多くの絵文字がある場合はオフにすると非常に遅くなります) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3baf237..ec83bff3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1277,4 +1277,5 @@ Enabled Disabled Emoji texture max pixels(Unix:pixels, default: 128. task kill required. reduce to 64 if your device\'s RAM is not enough) + Collapse emoji picker categories (turning off it will very slow if your servers has a lot of emojis)