絵文字ピッカーのカテゴリ開閉のタッチ範囲の改善。カテゴリを畳まない設定の追加。

This commit is contained in:
tateisu 2023-03-01 21:26:42 +09:00
parent 8184ad5693
commit 1e0c9e0bdd
5 changed files with 43 additions and 36 deletions

View File

@ -520,7 +520,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett
sw(PrefB.bpDisableEmojiAnimation, R.string.disable_custom_emoji_animation) 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) 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, R.string.emoji_texture_pixels,
InputTypeEx.number InputTypeEx.number
) )
sw(
PrefB.bpCollapseEmojiPickerCategory,
R.string.emoji_picker_category_collapse
)
} }
section(R.string.appearance) { section(R.string.appearance) {
@ -1073,7 +1077,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett
section(R.string.developer_options) { section(R.string.developer_options) {
sw(PrefB.bpCheckBetaVersion, R.string.check_beta_release) 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(R.string.drawable_list) {
action = { startActivity(Intent(this, ActDrawableList::class.java)) } 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( spinnerSimple(
PrefI.ipLogSaveLevel, PrefI.ipLogSaveLevel,
R.string.log_save_level, // name 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_warn, //5
R.string.log_error, //6 R.string.log_error, //6
R.string.log_assert, //7 R.string.log_assert, //7
){ ) {
desc = R.string.log_save_level_desc desc = R.string.log_save_level_desc
} }

View File

@ -10,13 +10,12 @@ import android.view.*
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatButton import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatImageButton
import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatImageView
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.children import androidx.core.view.children
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@ -38,7 +37,6 @@ import jp.juggler.util.coroutine.launchAndShowError
import jp.juggler.util.data.* import jp.juggler.util.data.*
import jp.juggler.util.log.* import jp.juggler.util.log.*
import jp.juggler.util.ui.* import jp.juggler.util.ui.*
import org.jetbrains.anko.image
import org.jetbrains.anko.wrapContent import org.jetbrains.anko.wrapContent
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.sign import kotlin.math.sign
@ -199,20 +197,22 @@ private class EmojiPicker(
abstract fun bind(item: PickerItem) abstract fun bind(item: PickerItem)
} }
private var lastExpandCategory: PickerItemCategory? = null
private var canCollapse = true
private inner class VhCategory( private inner class VhCategory(
view: LinearLayout = LinearLayout(activity), view: FrameLayout = FrameLayout(activity),
) : ViewHolderBase(view) { ) : ViewHolderBase(view) {
var lastItem: PickerItemCategory? = null var lastItem: PickerItemCategory? = null
val ibExpand = AppCompatImageButton(activity).apply { val tv = AppCompatTextView(activity).apply {
layoutParams = LinearLayout.LayoutParams(gridSize, matchParent) layoutParams = FrameLayout.LayoutParams(headerWidth, wrapContent)
minHeightCompat = (density * 48f + 0.5f).toInt()
gravity = Gravity.START or Gravity.CENTER_VERTICAL
includeFontPadding = false
background = ContextCompat.getDrawable( background = ContextCompat.getDrawable(
this@EmojiPicker.activity, this@EmojiPicker.activity,
R.drawable.btn_bg_transparent_round6dp R.drawable.btn_bg_transparent_round6dp
) )
compoundDrawablePadding = (density * 4f + 0.5f).toInt()
setOnClickListener { setOnClickListener {
val orig = lastItem?.original val orig = lastItem?.original
?: return@setOnClickListener ?: 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 { init {
view.layoutParams = RecyclerView.LayoutParams(headerWidth, wrapContent) view.layoutParams = RecyclerView.LayoutParams(headerWidth, wrapContent)
view.setPadding(cellMargin, cellMargin, cellMargin, cellMargin) view.setPadding(cellMargin, cellMargin, cellMargin, cellMargin)
view.isBaselineAligned = false
view.gravity = Gravity.START or Gravity.CENTER_VERTICAL
view.addView(ibExpand)
view.addView(tv) view.addView(tv)
} }
override fun bind(item: PickerItem) { override fun bind(item: PickerItem) {
if (item is PickerItemCategory) { if (item !is PickerItemCategory) return
lastItem = item lastItem = item
tv.text = item.name tv.text = item.name
ibExpand.vg(canCollapse)?.let {
val drawableId = when (lastExpandCategory == item.original) { val drawable = when {
true -> R.drawable.ic_arrow_drop_down !canCollapse -> null
else -> R.drawable.ic_arrow_drop_up lastExpandCategory == item.original -> R.drawable.ic_arrow_drop_down
} else -> R.drawable.ic_arrow_drop_up
it.image = ContextCompat.getDrawable(activity, drawableId) }?.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 recentCategory: PickerItemCategoryRecent? = null
private var lastExpandCategory: PickerItemCategory? = null
private var canCollapse = true
private val density = activity.resources.displayMetrics.density private val density = activity.resources.displayMetrics.density
val cellMargin = (density * 1f + 0.5f).toInt() val cellMargin = (density * 1f + 0.5f).toInt()
val gridSize = (density * 48f + 0.5f).toInt() val gridSize = (density * 48f + 0.5f).toInt()
@ -615,8 +611,9 @@ private class EmojiPicker(
lastSelectedCategory = selectedCategory lastSelectedCategory = selectedCategory
lastSelectedKeyword = selectedKeyword lastSelectedKeyword = selectedKeyword
val keywordLower = selectedKeyword?.lowercase()?.trim() val keywordLower = selectedKeyword?.lowercase()?.trim()
this.canCollapse = this.canCollapse = PrefB.bpCollapseEmojiPickerCategory.value &&
keywordLower.isNullOrEmpty() && (selectedCategory == null || selectedCategory == EmojiCategory.Custom) keywordLower.isNullOrEmpty() &&
(selectedCategory == null || selectedCategory == EmojiCategory.Custom)
adapter.list = buildList { adapter.list = buildList {
val filteredCategories = pickerCategries.filter { val filteredCategories = pickerCategries.filter {

View File

@ -364,4 +364,8 @@ object PrefB {
"EnableDeprecatedSomething", "EnableDeprecatedSomething",
false false
) )
val bpCollapseEmojiPickerCategory = BooleanPref(
"CollapseEmojiPickerCategory",
true
)
} }

View File

@ -1269,4 +1269,5 @@
<string name="enabled">有効</string> <string name="enabled">有効</string>
<string name="disabled">無効</string> <string name="disabled">無効</string>
<string name="emoji_texture_pixels">絵文字テクスチャの最大ピクセル数(単位:ピクセル、デフォルト: 128。 タスクキルが必要。端末のRAMが少ない場合は64程度まで下げることをお勧めします)</string> <string name="emoji_texture_pixels">絵文字テクスチャの最大ピクセル数(単位:ピクセル、デフォルト: 128。 タスクキルが必要。端末のRAMが少ない場合は64程度まで下げることをお勧めします)</string>
<string name="emoji_picker_category_collapse">絵文字ピッカーのカテゴリを折りたたむ(サーバーに多くの絵文字がある場合はオフにすると非常に遅くなります)</string>
</resources> </resources>

View File

@ -1277,4 +1277,5 @@
<string name="enabled">Enabled</string> <string name="enabled">Enabled</string>
<string name="disabled">Disabled</string> <string name="disabled">Disabled</string>
<string name="emoji_texture_pixels">Emoji texture max pixels(Unix:pixels, default: 128. task kill required. reduce to 64 if your device\'s RAM is not enough)</string> <string name="emoji_texture_pixels">Emoji texture max pixels(Unix:pixels, default: 128. task kill required. reduce to 64 if your device\'s RAM is not enough)</string>
<string name="emoji_picker_category_collapse">Collapse emoji picker categories (turning off it will very slow if your servers has a lot of emojis)</string>
</resources> </resources>