From d66eaa6b88d7fecf42ee4777f7676429e6233ec4 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Tue, 28 Jan 2025 17:36:55 +0800 Subject: [PATCH] refactor: simplify the setup of PageCandidatesUi's listeners --- .../ime/candidates/popup/PagedCandidatesUi.kt | 23 ++++++------------- .../trime/ime/composition/CandidatesView.kt | 22 ++++++------------ 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/osfans/trime/ime/candidates/popup/PagedCandidatesUi.kt b/app/src/main/java/com/osfans/trime/ime/candidates/popup/PagedCandidatesUi.kt index 7b3bdc9ce3..622a58f6e6 100644 --- a/app/src/main/java/com/osfans/trime/ime/candidates/popup/PagedCandidatesUi.kt +++ b/app/src/main/java/com/osfans/trime/ime/candidates/popup/PagedCandidatesUi.kt @@ -23,6 +23,9 @@ import splitties.views.dsl.recyclerview.recyclerView class PagedCandidatesUi( override val ctx: Context, val theme: Theme, + private val onCandidateClick: (Int) -> Unit, + private val onPrevPage: () -> Unit, + private val onNextPage: () -> Unit, ) : Ui { private var menu = RimeProto.Context.Menu() @@ -40,19 +43,7 @@ class PagedCandidatesUi( ) : UiHolder(ui) } - enum class ClickType { - CANDIDATE, - PREV_PAGE, - NEXT_PAGE, - } - - private var clickListener: ((type: ClickType, position: Int) -> Unit)? = null - - fun setOnClickListener(listener: (type: ClickType, position: Int) -> Unit) { - clickListener = listener - } - - val candidatesAdapter = + private val candidatesAdapter = object : BaseQuickAdapter() { override fun getItemCount(items: List) = items.size + (if (menu.pageNumber != 0 || !menu.isLastPage) 1 else 0) @@ -89,7 +80,7 @@ class PagedCandidatesUi( val candidate = item ?: return holder.ui.update(candidate, position == menu.highlightedCandidateIndex) holder.ui.root.setOnClickListener { - clickListener?.invoke(ClickType.CANDIDATE, position) + onCandidateClick.invoke(position) } } is UiHolder.Pagination -> { @@ -99,10 +90,10 @@ class PagedCandidatesUi( alignSelf = if (isHorizontal) AlignItems.CENTER else AlignItems.STRETCH } holder.ui.prevIcon.setOnClickListener { - clickListener?.invoke(ClickType.PREV_PAGE, menu.pageNumber) + onPrevPage.invoke() } holder.ui.nextIcon.setOnClickListener { - clickListener?.invoke(ClickType.NEXT_PAGE, menu.pageNumber) + onNextPage.invoke() } } } diff --git a/app/src/main/java/com/osfans/trime/ime/composition/CandidatesView.kt b/app/src/main/java/com/osfans/trime/ime/composition/CandidatesView.kt index e3fa22f92a..0ffa2789d2 100644 --- a/app/src/main/java/com/osfans/trime/ime/composition/CandidatesView.kt +++ b/app/src/main/java/com/osfans/trime/ime/composition/CandidatesView.kt @@ -82,21 +82,13 @@ class CandidatesView( } private val candidatesUi = - PagedCandidatesUi(ctx, theme).apply { - setOnClickListener { type, position -> - when (type) { - PagedCandidatesUi.ClickType.CANDIDATE -> { - rime.launchOnReady { it.selectPagedCandidate(position) } - } - PagedCandidatesUi.ClickType.PREV_PAGE -> { - rime.launchOnReady { it.changeCandidatePage(true) } - } - PagedCandidatesUi.ClickType.NEXT_PAGE -> { - rime.launchOnReady { it.changeCandidatePage(false) } - } - } - } - } + PagedCandidatesUi( + ctx, + theme, + onCandidateClick = { index -> rime.launchOnReady { it.selectPagedCandidate(index) } }, + onPrevPage = { rime.launchOnReady { it.changeCandidatePage(true) } }, + onNextPage = { rime.launchOnReady { it.changeCandidatePage(false) } }, + ) private val touchEventReceiverWindow = TouchEventReceiverWindow(this)