Skip to content

Commit 4559365

Browse files
committed
feat: restore vertical layout in candidate window
refactor: update rime options on start input view
1 parent d9408de commit 4559365

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

app/src/main/java/com/osfans/trime/ime/candidates/popup/PagedCandidatesUi.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class PagedCandidatesUi(
2626
) : Ui {
2727
private var menu = RimeProto.Context.Menu()
2828

29+
private var isHorizontal = true
30+
2931
sealed class UiHolder(
3032
open val ui: Ui,
3133
) : RecyclerView.ViewHolder(ui.root) {
@@ -78,7 +80,7 @@ class PagedCandidatesUi(
7880
is UiHolder.Pagination -> {
7981
holder.ui.update(menu)
8082
holder.ui.root.updateLayoutParams<FlexboxLayoutManager.LayoutParams> {
81-
alignSelf = AlignItems.CENTER
83+
alignSelf = if (isHorizontal) AlignItems.CENTER else AlignItems.STRETCH
8284
}
8385
}
8486
}
@@ -92,8 +94,6 @@ class PagedCandidatesUi(
9294
private val candidatesLayoutManager =
9395
FlexboxLayoutManager(ctx).apply {
9496
flexWrap = FlexWrap.WRAP
95-
flexDirection = FlexDirection.ROW
96-
alignItems = AlignItems.BASELINE
9797
}
9898

9999
override val root =
@@ -106,8 +106,21 @@ class PagedCandidatesUi(
106106
layoutManager = candidatesLayoutManager
107107
}
108108

109-
fun update(menu: RimeProto.Context.Menu) {
109+
fun update(
110+
menu: RimeProto.Context.Menu,
111+
isHorizontal: Boolean,
112+
) {
110113
this.menu = menu
114+
this.isHorizontal = isHorizontal
115+
candidatesLayoutManager.apply {
116+
if (isHorizontal) {
117+
flexDirection = FlexDirection.ROW
118+
alignItems = AlignItems.BASELINE
119+
} else {
120+
flexDirection = FlexDirection.COLUMN
121+
alignItems = AlignItems.STRETCH
122+
}
123+
}
111124
candidatesAdapter.submitList(menu.candidates.toList())
112125
}
113126
}

app/src/main/java/com/osfans/trime/ime/composition/CandidatesView.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,21 +66,24 @@ class CandidatesView(
6666
private fun updateUi() {
6767
if (evaluateVisibility()) {
6868
preeditUi.update(inputComposition)
69+
// if CandidatesView can be shown, rime engine is ready most of the time,
70+
// so it should be safety to get option immediately
71+
val isHorizontalLayout = rime.run { getRuntimeOption("_horizontal") }
6972
when (candidatesMode) {
7073
PopupCandidatesMode.CURRENT_PAGE -> {
7174
candidatesUi.root.let {
7275
if (it.visibility == View.GONE) {
7376
it.visibility = View.VISIBLE
7477
}
7578
}
76-
candidatesUi.update(menu)
79+
candidatesUi.update(menu, isHorizontalLayout)
7780
}
7881

7982
PopupCandidatesMode.PREEDIT_ONLY -> {
8083
candidatesUi.root.let {
8184
if (it.visibility != View.GONE) {
8285
it.visibility = View.GONE
83-
candidatesUi.update(RimeProto.Context.Menu())
86+
candidatesUi.update(RimeProto.Context.Menu(), isHorizontalLayout)
8487
}
8588
}
8689
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,6 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
202202
2 -> Locale(latinLocale[0], latinLocale[1])
203203
else -> Locale.US
204204
}
205-
updateRimeOption(this)
206205
Timber.d("Trime.onCreate completed")
207206
}
208207
} catch (e: Exception) {
@@ -428,6 +427,7 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
428427
) {
429428
Timber.d("onStartInputView: restarting=%s", restarting)
430429
postRimeJob {
430+
updateRimeOption(this)
431431
InputFeedbackManager.loadSoundEffects(this@TrimeInputMethodService)
432432
InputFeedbackManager.resetPlayProgress()
433433
isComposable =

0 commit comments

Comments
 (0)