diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt b/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt index fc469ffb..8bfed95b 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt @@ -58,7 +58,6 @@ import java.io.File import java.io.FileOutputStream import java.io.InputStream import java.io.OutputStreamWriter -import java.lang.ref.WeakReference import java.text.NumberFormat import java.util.* import java.util.concurrent.ConcurrentHashMap @@ -368,10 +367,14 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli else -> newColor or Color.BLACK } ip.value = c - findItemViewHolder(colorTarget)?.showColor() + val vh = findItemViewHolder(colorTarget) + vh?.showColor() colorTarget.changed(this) } + private val settingHolderList = + ConcurrentHashMap() + inner class MyAdapter : RecyclerView.Adapter() { var items: List = emptyList() set(newItems) { @@ -396,9 +399,6 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli }, true).dispatchUpdatesTo(this) } - private val settingHolderList = - ConcurrentHashMap>() - override fun getItemCount() = items.size override fun getItemViewType(position: Int) = @@ -416,6 +416,17 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli else -> VhSettingItem(this@ActAppSetting, parent) } + override fun onViewRecycled(holder: RecyclerView.ViewHolder) { + super.onViewRecycled(holder) + // 古い紐付けを削除 + settingHolderList.entries.filter { + when (it.value) { + holder -> true + else -> false + } + }.forEach { settingHolderList.remove(it.key) } + } + override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) { when (val item = items.elementAtOrNull(position)) { divider -> viewHolder.cast() @@ -424,18 +435,19 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli viewHolder.bind(item) // 古い紐付けを削除 settingHolderList.entries.filter { - when (it.value.get()) { - null, viewHolder -> true + when (it.value) { + viewHolder -> true else -> false } }.forEach { settingHolderList.remove(it.key) } // 新しい紐付けを覚える - settingHolderList[item] = WeakReference(viewHolder) + settingHolderList[item.id] = viewHolder } } } - fun findVhSetting(item: AppSettingItem) = settingHolderList[item]?.get() + fun findVhSetting(item: AppSettingItem) = + settingHolderList[item.id] } private inner class VhDivider( @@ -887,12 +899,8 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli finish() } - fun findItemViewHolder(item: AppSettingItem?): VhSettingItem? { - if (item != null) { - adapter.findVhSetting(item) - } - return null - } + fun findItemViewHolder(item: AppSettingItem?) = + item?.let { adapter.findVhSetting(it) } fun showSample(item: AppSettingItem?) { item ?: error("showSample: missing item…") 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 ee71085b..b2f66dc7 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt @@ -840,6 +840,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett ) colorAlpha(PrefI.ipEventBgColorGap, R.string.gap) + colorAlpha(PrefI.ipEventBgColorFiltered, R.string.filtered) } group(R.string.button_accent_color) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt index c47f904e..d1cb7391 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderShowStatus.kt @@ -58,6 +58,9 @@ fun ItemViewHolder.showStatus( val filteredWord = status.filteredWord if (filteredWord != null) { + PrefI.ipEventBgColorFiltered.value.notZero()?.let{ + viewRoot.backgroundColor = it + } showMessageHolder( TootMessageHolder( if (PrefB.bpShowFilteredWord.value) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefI.kt b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefI.kt index 3b3f4d0c..6e1f544c 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefI.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefI.kt @@ -101,6 +101,7 @@ object PrefI { val ipEventBgColorReport = IntPref("EventBgColorReport", 0) val ipEventBgColorGap = IntPref("EventBgColorGap", 0) + val ipEventBgColorFiltered = IntPref("EventBgColorFiltered", 0) val ipCcdHeaderBg = IntPref("ipCcdHeaderBg", 0) val ipCcdHeaderFg = IntPref("ipCcdHeaderFg", 0)