From 76de4343ca1c23f28ba1dd9c58ad4ca257454ee0 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Wed, 31 Jan 2024 00:38:19 +0800 Subject: [PATCH] refactor: handle option notifications about input view in InputView --- .../com/osfans/trime/ime/core/InputView.kt | 35 +++++++++++++++++++ .../java/com/osfans/trime/ime/core/Trime.kt | 2 +- .../osfans/trime/ime/text/TextInputManager.kt | 19 ---------- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/osfans/trime/ime/core/InputView.kt b/app/src/main/java/com/osfans/trime/ime/core/InputView.kt index e99db7642e..140717c83c 100644 --- a/app/src/main/java/com/osfans/trime/ime/core/InputView.kt +++ b/app/src/main/java/com/osfans/trime/ime/core/InputView.kt @@ -8,11 +8,16 @@ import android.view.WindowManager import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat import androidx.core.view.updateLayoutParams +import androidx.lifecycle.lifecycleScope +import com.osfans.trime.core.Rime +import com.osfans.trime.core.RimeNotification import com.osfans.trime.data.theme.Theme import com.osfans.trime.ime.bar.QuickBar import com.osfans.trime.ime.keyboard.KeyboardWindow import com.osfans.trime.ime.symbol.LiquidKeyboard import com.osfans.trime.util.styledFloat +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch import org.koin.core.context.loadKoinModules import org.koin.core.context.unloadKoinModules import org.koin.dsl.module @@ -40,6 +45,7 @@ import splitties.views.dsl.core.wrapContent @SuppressLint("ViewConstructor") class InputView( val service: Trime, + val rime: Rime, val theme: Theme, ) : ConstraintLayout(service) { private val placeholderListener = OnClickListener { } @@ -59,6 +65,8 @@ class InputView( setOnClickListener { placeholderListener } } + private val notificationHandlerJob: Job + private val themedContext = context.withTheme(android.R.style.Theme_DeviceDefault_Settings) val quickBar = QuickBar() val keyboardWindow = KeyboardWindow() @@ -106,6 +114,13 @@ class InputView( // MUST call before any other operations loadKoinModules(module) + notificationHandlerJob = + service.lifecycleScope.launch { + rime.notificationFlow.collect { + handleRimeNotification(it) + } + } + liquidKeyboard.setKeyboardView(keyboardWindow.oldSymbolInputView.liquidKeyboardView) keyboardView = @@ -198,6 +213,26 @@ class InputView( quickBar.view.setPadding(sidePadding, 0, sidePadding, 0) } + private fun handleRimeNotification(it: RimeNotification) { + when (it) { + is RimeNotification.OptionNotification -> { + when (it.option) { + "_hide_comment" -> { + quickBar.oldCandidateBar.candidates.setShowComment(!it.value) + } + "_hide_candidate" -> { + quickBar.oldCandidateBar.root.visibility = + if (it.value) View.GONE else View.VISIBLE + } + "_hide_key_hint" -> keyboardWindow.oldMainInputView.mainKeyboardView.setShowHint(!it.value) + "_hide_key_symbol" -> keyboardWindow.oldMainInputView.mainKeyboardView.setShowSymbol(!it.value) + } + keyboardWindow.oldMainInputView.mainKeyboardView.invalidateAllKeys() + } + else -> {} + } + } + fun switchUiByState(state: KeyboardWindow.State) { keyboardWindow.switchUiByState(state) quickBar.switchUiByState(QuickBar.State.entries[state.ordinal]) diff --git a/app/src/main/java/com/osfans/trime/ime/core/Trime.kt b/app/src/main/java/com/osfans/trime/ime/core/Trime.kt index 5ea5b4f9ca..e1476d2088 100644 --- a/app/src/main/java/com/osfans/trime/ime/core/Trime.kt +++ b/app/src/main/java/com/osfans/trime/ime/core/Trime.kt @@ -501,7 +501,7 @@ open class Trime : LifecycleInputMethodService() { override fun onCreateInputView(): View { Timber.d("onCreateInputView()") RimeWrapper.runAfterStarted { - inputView = InputView(this, ThemeManager.activeTheme) + inputView = InputView(this, Rime.getInstance(false), ThemeManager.activeTheme) mainKeyboardView = inputView!!.keyboardWindow.oldMainInputView.mainKeyboardView // 初始化候选栏 mCandidateRoot = inputView!!.quickBar.oldCandidateBar.root diff --git a/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt b/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt index a290e6ac22..1e08d3d031 100644 --- a/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt +++ b/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt @@ -3,7 +3,6 @@ package com.osfans.trime.ime.text import android.content.DialogInterface import android.text.InputType import android.view.KeyEvent -import android.view.View import android.view.inputmethod.EditorInfo import androidx.appcompat.R.style.Theme_AppCompat_DayNight_Dialog_Alert import androidx.appcompat.app.AlertDialog @@ -17,7 +16,6 @@ import com.osfans.trime.data.schema.SchemaManager import com.osfans.trime.data.theme.ThemeManager import com.osfans.trime.ime.broadcast.IntentReceiver import com.osfans.trime.ime.core.EditorInstance -import com.osfans.trime.ime.core.InputView import com.osfans.trime.ime.core.Speech import com.osfans.trime.ime.core.Trime import com.osfans.trime.ime.enums.Keycode @@ -64,7 +62,6 @@ class TextInputManager private constructor() : private var rimeNotiHandlerJob: Job? = null private var mainKeyboardView: KeyboardView? = null - private var candidateRoot: ScrollView? = null val locales = Array(2) { Locale.getDefault() } @@ -132,12 +129,6 @@ class TextInputManager private constructor() : trime.loadConfig() } - override fun onInitializeInputUi(inputView: InputView) { - super.onInitializeInputUi(inputView) - // Initialize main keyboard view - mainKeyboardView = inputView.keyboardWindow.oldMainInputView.mainKeyboardView - } - /** * Cancels all coroutines and cleans up. */ @@ -145,11 +136,6 @@ class TextInputManager private constructor() : intentReceiver?.unregisterReceiver(trime) intentReceiver = null - candidateRoot = null - - mainKeyboardView?.setOnKeyboardActionListener(null) - mainKeyboardView = null - rimeNotiHandlerJob?.cancel() rimeNotiHandlerJob = null instance = null @@ -246,14 +232,10 @@ class TextInputManager private constructor() : trime.inputFeedbackManager?.ttsLanguage = locales[if (value) 1 else 0] } - "_hide_comment" -> trime.setShowComment(!value) "_hide_candidate" -> { - candidateRoot?.visibility = if (!value) View.VISIBLE else View.GONE trime.setCandidatesViewShown(isComposable && !value) } "_liquid_keyboard" -> trime.selectLiquidKeyboard(0) - "_hide_key_hint" -> mainKeyboardView?.setShowHint(!value) - "_hide_key_symbol" -> mainKeyboardView?.setShowSymbol(!value) else -> if (option.startsWith("_keyboard_") && option.length > 10 && value @@ -268,7 +250,6 @@ class TextInputManager private constructor() : shouldUpdateRimeOption = true } } - mainKeyboardView?.invalidateAllKeys() } }