Skip to content

Commit 19b5a35

Browse files
committed
refactor(symbol): merge TabTag, TabManager and SymbolBoardType as LiquidData
1 parent db31be5 commit 19b5a35

File tree

15 files changed

+130
-286
lines changed

15 files changed

+130
-286
lines changed

app/src/main/java/com/osfans/trime/data/theme/ThemeManager.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ package com.osfans.trime.data.theme
77
import android.content.res.Configuration
88
import com.osfans.trime.data.base.DataManager
99
import com.osfans.trime.data.prefs.AppPrefs
10-
import com.osfans.trime.ime.symbol.TabManager
10+
import com.osfans.trime.ime.symbol.LiquidData
1111
import com.osfans.trime.util.WeakHashSet
1212

1313
object ThemeManager {
@@ -52,7 +52,7 @@ object ThemeManager {
5252
KeyActionManager.resetCache()
5353
FontManager.resetCache(newTheme)
5454
ColorManager.switchTheme(newTheme)
55-
TabManager.resetCache(newTheme)
55+
LiquidData.init(newTheme)
5656
return newTheme
5757
}
5858

@@ -66,7 +66,7 @@ object ThemeManager {
6666
KeyActionManager.resetCache()
6767
FontManager.resetCache(theme)
6868
ColorManager.switchTheme(theme)
69-
TabManager.resetCache(theme)
69+
LiquidData.init(theme)
7070
activeTheme = theme
7171
prefs.selectedTheme.setValue(theme.configId)
7272
}

app/src/main/java/com/osfans/trime/data/theme/mapper/LiquidKeyboardMapper.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import com.charleskorn.kaml.YamlScalar
1212
import com.charleskorn.kaml.yamlList
1313
import com.charleskorn.kaml.yamlScalar
1414
import com.osfans.trime.data.theme.model.LiquidKeyboard
15-
import com.osfans.trime.ime.symbol.SymbolBoardType
15+
import com.osfans.trime.ime.symbol.LiquidData
1616
import com.osfans.trime.util.getEnum
1717
import com.osfans.trime.util.getString
1818
import com.osfans.trime.util.splitWithSurrogates
@@ -33,7 +33,7 @@ class LiquidKeyboardMapper(
3333
getStringList("keyboards").mapNotNull decode@{ id ->
3434
try {
3535
val keyboardNode = node.get<YamlMap>(id)
36-
val type = keyboardNode?.getEnum<SymbolBoardType>("type")
36+
val type = keyboardNode?.getEnum<LiquidData.Type>("type")
3737
?: return@decode null
3838
val name = keyboardNode.getString("name", id)
3939
val keysNode = keyboardNode.get<YamlNode>("keys")
@@ -58,7 +58,7 @@ class LiquidKeyboardMapper(
5858
}
5959
} else {
6060
val value = keysNode?.yamlScalar?.content ?: ""
61-
if (type == SymbolBoardType.SINGLE) { // single data
61+
if (type == LiquidData.Type.SINGLE) { // single data
6262
value.splitWithSurrogates().forEach {
6363
keys.add(LiquidKeyboard.KeyItem(it))
6464
}

app/src/main/java/com/osfans/trime/data/theme/model/LiquidKeyboard.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
package com.osfans.trime.data.theme.model
77

88
import android.os.Parcelable
9-
import com.osfans.trime.ime.symbol.SymbolBoardType
9+
import com.osfans.trime.ime.symbol.LiquidData
1010
import kotlinx.parcelize.Parcelize
1111

1212
@Parcelize
@@ -33,7 +33,7 @@ data class LiquidKeyboard(
3333
@Parcelize
3434
data class Keyboard(
3535
val id: String,
36-
val type: SymbolBoardType,
36+
val type: LiquidData.Type,
3737
val name: String,
3838
val keys: List<KeyItem>,
3939
) : Parcelable

app/src/main/java/com/osfans/trime/ime/core/InputView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ class InputView(
290290
if (it.data.option == "_liquid_keyboard") {
291291
ContextCompat.getMainExecutor(service).execute {
292292
windowManager.attachWindow(LiquidWindow)
293-
liquidWindow.select(0)
293+
liquidWindow.setDataByIndex(0)
294294
}
295295
}
296296
}

app/src/main/java/com/osfans/trime/ime/enums/KeyCommandType.kt

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/src/main/java/com/osfans/trime/ime/keyboard/CommonKeyboardActionListener.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ package com.osfans.trime.ime.keyboard
88
import android.app.Dialog
99
import android.content.Context
1010
import android.content.Intent
11+
import android.text.TextUtils
1112
import android.view.KeyEvent
13+
import androidx.core.text.TextUtilsCompat
1214
import androidx.lifecycle.lifecycleScope
1315
import com.osfans.trime.R
1416
import com.osfans.trime.core.KeyModifier
@@ -29,9 +31,8 @@ import com.osfans.trime.ime.dependency.InputScope
2931
import com.osfans.trime.ime.dialog.EnabledSchemaPickerDialog
3032
import com.osfans.trime.ime.enums.Keycode
3133
import com.osfans.trime.ime.option.SwitchOptionWindow
34+
import com.osfans.trime.ime.symbol.LiquidData
3235
import com.osfans.trime.ime.symbol.LiquidWindow
33-
import com.osfans.trime.ime.symbol.SymbolBoardType
34-
import com.osfans.trime.ime.symbol.TabManager
3536
import com.osfans.trime.ime.window.BoardWindowManager
3637
import com.osfans.trime.ui.main.settings.ColorPickerDialog
3738
import com.osfans.trime.ui.main.settings.SoundEffectPickerDialog
@@ -186,18 +187,18 @@ class CommonKeyboardActionListener(
186187
val arg = expandActiveText(action.option)
187188
when (action.command) {
188189
"liquid_keyboard" -> {
189-
val target =
190-
when {
191-
arg.matches("-?\\d+".toRegex()) -> arg.toInt()
192-
arg.matches("[A-Z]+".toRegex()) -> {
193-
val type = SymbolBoardType.valueOf(arg)
194-
TabManager.tabTags.indexOfFirst { it.type == type }
195-
}
196-
else -> TabManager.tabTags.indexOfFirst { it.text == arg }
197-
}
190+
val liquidTagList = LiquidData.getTagList()
191+
val target = if (arg.matches("[a-zA-Z]+".toRegex())) {
192+
val type = runCatching {
193+
LiquidData.Type.valueOf(arg)
194+
}.getOrNull() ?: return
195+
liquidTagList.indexOfFirst { it.type == type }
196+
} else {
197+
liquidTagList.indexOfFirst { it.label == arg }
198+
}
198199
if (target >= 0) {
199200
windowManager.attachWindow(LiquidWindow)
200-
liquidWindow.select(target)
201+
liquidWindow.setDataByIndex(target)
201202
} else {
202203
windowManager.attachWindow(KeyboardWindow)
203204
}

app/src/main/java/com/osfans/trime/ime/symbol/DbAdapter.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package com.osfans.trime.ime.symbol
66

77
import android.app.AlertDialog
8-
import android.content.Context
98
import androidx.lifecycle.lifecycleScope
109
import com.osfans.trime.R
1110
import com.osfans.trime.data.db.ClipboardHelper
@@ -18,11 +17,12 @@ import com.osfans.trime.util.AppUtils
1817
import kotlinx.coroutines.launch
1918

2019
class DbAdapter(
21-
private val ctx: Context,
2220
private val service: TrimeInputMethodService,
23-
theme: Theme,
21+
private val theme: Theme,
22+
private val liquidWindow: LiquidWindow,
2423
) : FlexibleAdapter(theme) {
25-
var type = SymbolBoardType.CLIPBOARD
24+
private val type: LiquidData.Type
25+
get() = liquidWindow.currentDataType
2626

2727
override fun onPaste(bean: DatabaseBean) {
2828
service.commitText(bean.text ?: "")
@@ -31,9 +31,9 @@ class DbAdapter(
3131
override fun onPin(bean: DatabaseBean) {
3232
service.lifecycleScope.launch {
3333
when (type) {
34-
SymbolBoardType.CLIPBOARD -> ClipboardHelper.pin(bean.id)
35-
SymbolBoardType.COLLECTION -> CollectionHelper.pin(bean.id)
36-
SymbolBoardType.DRAFT -> DraftHelper.pin(bean.id)
34+
LiquidData.Type.CLIPBOARD -> ClipboardHelper.pin(bean.id)
35+
LiquidData.Type.COLLECTION -> CollectionHelper.pin(bean.id)
36+
LiquidData.Type.DRAFT -> DraftHelper.pin(bean.id)
3737
else -> {}
3838
}
3939
refresh()
@@ -43,9 +43,9 @@ class DbAdapter(
4343
override fun onUnpin(bean: DatabaseBean) {
4444
service.lifecycleScope.launch {
4545
when (type) {
46-
SymbolBoardType.CLIPBOARD -> ClipboardHelper.unpin(bean.id)
47-
SymbolBoardType.COLLECTION -> CollectionHelper.unpin(bean.id)
48-
SymbolBoardType.DRAFT -> DraftHelper.unpin(bean.id)
46+
LiquidData.Type.CLIPBOARD -> ClipboardHelper.unpin(bean.id)
47+
LiquidData.Type.COLLECTION -> CollectionHelper.unpin(bean.id)
48+
LiquidData.Type.DRAFT -> DraftHelper.unpin(bean.id)
4949
else -> {}
5050
}
5151
refresh()
@@ -55,17 +55,17 @@ class DbAdapter(
5555
override fun onDelete(bean: DatabaseBean) {
5656
service.lifecycleScope.launch {
5757
when (type) {
58-
SymbolBoardType.CLIPBOARD -> ClipboardHelper.delete(bean.id)
59-
SymbolBoardType.COLLECTION -> CollectionHelper.delete(bean.id)
60-
SymbolBoardType.DRAFT -> DraftHelper.delete(bean.id)
58+
LiquidData.Type.CLIPBOARD -> ClipboardHelper.delete(bean.id)
59+
LiquidData.Type.COLLECTION -> CollectionHelper.delete(bean.id)
60+
LiquidData.Type.DRAFT -> DraftHelper.delete(bean.id)
6161
else -> {}
6262
}
6363
refresh()
6464
}
6565
}
6666

6767
override fun onEdit(bean: DatabaseBean) {
68-
bean.text?.let { AppUtils.launchLiquidKeyboardEdit(ctx, type, bean.id, it) }
68+
bean.text?.let { AppUtils.launchLiquidEdit(service, type, bean.id, it) }
6969
}
7070

7171
override fun onCollect(bean: DatabaseBean) {
@@ -82,9 +82,9 @@ class DbAdapter(
8282
.setPositiveButton(R.string.ok) { _, _ ->
8383
service.lifecycleScope.launch {
8484
when (type) {
85-
SymbolBoardType.CLIPBOARD -> ClipboardHelper.deleteAll(ClipboardHelper.haveUnpinned())
86-
SymbolBoardType.COLLECTION -> CollectionHelper.deleteAll(CollectionHelper.haveUnpinned())
87-
SymbolBoardType.DRAFT -> DraftHelper.deleteAll(DraftHelper.haveUnpinned())
85+
LiquidData.Type.CLIPBOARD -> ClipboardHelper.deleteAll(ClipboardHelper.haveUnpinned())
86+
LiquidData.Type.COLLECTION -> CollectionHelper.deleteAll(CollectionHelper.haveUnpinned())
87+
LiquidData.Type.DRAFT -> DraftHelper.deleteAll(DraftHelper.haveUnpinned())
8888
else -> {}
8989
}
9090
refresh()
@@ -94,13 +94,13 @@ class DbAdapter(
9494
service.showDialog(confirm)
9595
}
9696

97-
override val showCollectButton: Boolean = type != SymbolBoardType.COLLECTION
97+
override val showCollectButton: Boolean = type != LiquidData.Type.COLLECTION
9898

9999
private suspend fun refresh() {
100100
when (type) {
101-
SymbolBoardType.CLIPBOARD -> submitList(ClipboardHelper.getAll())
102-
SymbolBoardType.COLLECTION -> submitList(CollectionHelper.getAll())
103-
SymbolBoardType.DRAFT -> submitList(DraftHelper.getAll())
101+
LiquidData.Type.CLIPBOARD -> submitList(ClipboardHelper.getAll())
102+
LiquidData.Type.COLLECTION -> submitList(CollectionHelper.getAll())
103+
LiquidData.Type.DRAFT -> submitList(DraftHelper.getAll())
104104
else -> {}
105105
}
106106
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2015 - 2025 Rime community
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package com.osfans.trime.ime.symbol
7+
8+
import com.osfans.trime.data.theme.Theme
9+
import com.osfans.trime.data.theme.model.LiquidKeyboard
10+
11+
object LiquidData {
12+
enum class Type {
13+
SINGLE,
14+
SYMBOL,
15+
TABS,
16+
CLIPBOARD,
17+
COLLECTION,
18+
DRAFT,
19+
HISTORY,
20+
}
21+
22+
data class Tag(val label: String = "", val type: Type)
23+
24+
private val data = arrayListOf<Pair<Tag, Array<LiquidKeyboard.KeyItem>>>()
25+
26+
fun init(theme: Theme) {
27+
data.clear()
28+
29+
val transformed = theme.liquidKeyboard.keyboards.map {
30+
Tag(it.name, it.type) to
31+
it.keys.toTypedArray()
32+
}
33+
data.addAll(transformed)
34+
}
35+
36+
fun getTagList() = data.map { it.first }
37+
38+
fun getDataByIndex(index: Int): List<LiquidKeyboard.KeyItem> {
39+
val item = data[index]
40+
val tag = item.first
41+
return if (tag.type == Type.TABS) {
42+
data.map { LiquidKeyboard.KeyItem(it.first.label) }
43+
} else {
44+
item.second.toList()
45+
}
46+
}
47+
}

app/src/main/java/com/osfans/trime/ime/symbol/LiquidTabsUi.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,11 @@ class LiquidTabsUi(
8080
private var onTabClick: ((Int) -> Unit)? = null
8181

8282
private class TabUiHolder(
83-
val ui: LiquidTabsUi.TabUi,
83+
val ui: TabUi,
8484
) : RecyclerView.ViewHolder(ui.root)
8585

8686
private val adapter by lazy {
87-
object : BaseQuickAdapter<TabTag, TabUiHolder>() {
87+
object : BaseQuickAdapter<LiquidData.Tag, TabUiHolder>() {
8888
private var selected = -1
8989

9090
override fun onCreateViewHolder(
@@ -96,18 +96,18 @@ class LiquidTabsUi(
9696
override fun onBindViewHolder(
9797
holder: TabUiHolder,
9898
position: Int,
99-
item: TabTag?,
99+
item: LiquidData.Tag?,
100100
) {
101101
holder.ui.apply {
102-
setText(item!!.text)
102+
setText(item!!.label)
103103
setActive(position == selected)
104104
root.run {
105105
layoutParams = ViewGroup.LayoutParams(wrapContent, matchParent)
106106
}
107107
}
108108
}
109109

110-
override fun submitList(list: List<TabTag>?) {
110+
override fun submitList(list: List<LiquidData.Tag>?) {
111111
selected = -1
112112
super.submitList(list)
113113
}
@@ -133,7 +133,7 @@ class LiquidTabsUi(
133133
isHorizontalScrollBarEnabled = false
134134
}
135135

136-
fun setTabs(tags: List<TabTag>) {
136+
fun setTags(tags: List<LiquidData.Tag>) {
137137
adapter.submitList(tags)
138138
}
139139

0 commit comments

Comments
 (0)