5
5
package org.fcitx.fcitx5.android.input.picker
6
6
7
7
import android.annotation.SuppressLint
8
- import android.view.Gravity
9
8
import androidx.core.content.ContextCompat
10
- import androidx.transition.Slide
11
9
import androidx.transition.Transition
12
10
import androidx.viewpager2.widget.ViewPager2
13
11
import org.fcitx.fcitx5.android.data.prefs.AppPrefs
14
12
import org.fcitx.fcitx5.android.data.prefs.ManagedPreference
15
13
import org.fcitx.fcitx5.android.data.theme.ThemeManager
16
14
import org.fcitx.fcitx5.android.input.broadcast.ReturnKeyDrawableComponent
17
- import org.fcitx.fcitx5.android.input.dependency.inputMethodService
18
15
import org.fcitx.fcitx5.android.input.dependency.theme
19
16
import org.fcitx.fcitx5.android.input.keyboard.CommonKeyActionListener
20
17
import org.fcitx.fcitx5.android.input.keyboard.KeyAction
@@ -44,7 +41,6 @@ class PickerWindow(
44
41
Emoticon
45
42
}
46
43
47
- private val service by manager.inputMethodService()
48
44
private val theme by manager.theme()
49
45
private val windowManager: InputWindowManager by manager.must()
50
46
private val commonKeyActionListener: CommonKeyActionListener by manager.must()
@@ -56,19 +52,9 @@ class PickerWindow(
56
52
private lateinit var pickerLayout: PickerLayout
57
53
private lateinit var pickerPagesAdapter: PickerPagesAdapter
58
54
59
- override fun enterAnimation (lastWindow : InputWindow ): Transition ? {
60
- // disable animation switching between keyboard
61
- return if (lastWindow !is KeyboardWindow && lastWindow !is PickerWindow )
62
- Slide ().apply { slideEdge = Gravity .BOTTOM }
63
- else null
64
- }
55
+ override fun enterAnimation (lastWindow : InputWindow ): Transition ? = null
65
56
66
- override fun exitAnimation (nextWindow : InputWindow ): Transition ? {
67
- // disable animation switching between keyboard
68
- return if (nextWindow !is KeyboardWindow && nextWindow !is PickerWindow )
69
- super .exitAnimation(nextWindow)
70
- else null
71
- }
57
+ override fun exitAnimation (nextWindow : InputWindow ): Transition ? = null
72
58
73
59
private val keyActionListener = KeyActionListener { it, source ->
74
60
when (it) {
@@ -118,10 +104,11 @@ class PickerWindow(
118
104
}
119
105
}
120
106
107
+ private val isEmoji = key == = Key .Emoji
108
+
121
109
override fun onCreateView () = PickerLayout (context, theme, switchKey).apply {
122
110
pickerLayout = this
123
111
val bordered = followKeyBorder && keyBorder
124
- val isEmoji = key == = Key .Emoji
125
112
pickerPagesAdapter = PickerPagesAdapter (
126
113
theme, keyActionListener, popupActionListener, data,
127
114
density, key.name, bordered, isEmoji
@@ -162,7 +149,15 @@ class PickerWindow(
162
149
163
150
override fun onCreateBarExtension () = pickerLayout.tabsUi.root
164
151
165
- private val skinTonePreference = AppPrefs .getInstance().symbols.defaultEmojiSkinTone
152
+ val symbolPrefs = AppPrefs .getInstance().symbols
153
+ private val hideUnsupportedEmojisPrefs = symbolPrefs.hideUnsupportedEmojis
154
+ private val defaultEmojiSkinTonePrefs = symbolPrefs.defaultEmojiSkinTone
155
+
156
+ @SuppressLint(" NotifyDataSetChanged" )
157
+ private val initDataListener = ManagedPreference .OnChangeListener <Any > { _, _ ->
158
+ pickerPagesAdapter.rebuildCategories(hideUnsupportedEmojisPrefs.getValue())
159
+ pickerPagesAdapter.notifyDataSetChanged()
160
+ }.takeIf { isEmoji }
166
161
167
162
@SuppressLint(" NotifyDataSetChanged" )
168
163
private val refreshPagesListener = ManagedPreference .OnChangeListener <Any > { _, _ ->
@@ -174,16 +169,18 @@ class PickerWindow(
174
169
it.onReturnDrawableUpdate(returnKeyDrawable.resourceId)
175
170
it.keyActionListener = keyActionListener
176
171
}
177
- if (key == = Key .Emoji ) {
178
- skinTonePreference.registerOnChangeListener(refreshPagesListener)
172
+ if (isEmoji) {
173
+ hideUnsupportedEmojisPrefs.registerOnChangeListener(initDataListener!! )
174
+ defaultEmojiSkinTonePrefs.registerOnChangeListener(refreshPagesListener)
179
175
}
180
176
}
181
177
182
178
override fun onDetached () {
183
179
popup.dismissAll()
184
180
pickerLayout.embeddedKeyboard.keyActionListener = null
185
- if (key == = Key .Emoji ) {
186
- skinTonePreference.unregisterOnChangeListener(refreshPagesListener)
181
+ if (isEmoji) {
182
+ hideUnsupportedEmojisPrefs.unregisterOnChangeListener(initDataListener!! )
183
+ defaultEmojiSkinTonePrefs.unregisterOnChangeListener(refreshPagesListener)
187
184
}
188
185
}
189
186
0 commit comments