From 21429cb0a312beb35e2ec40098775fed50795147 Mon Sep 17 00:00:00 2001 From: WhiredPlanck Date: Wed, 24 Jan 2024 15:57:00 +0800 Subject: [PATCH] chore,refactor: introduce Koin dependency injection library Use Koin to inject dependencies for the UI components, which make it easier to manage those stuffs and avoid the complex templates and long construct arguments. --- app/build.gradle.kts | 1 + .../java/com/osfans/trime/ime/bar/QuickBar.kt | 7 +++++- .../com/osfans/trime/ime/core/InputView.kt | 23 +++++++++++++++++-- .../trime/ime/keyboard/KeyboardWindow.kt | 7 +++++- .../osfans/trime/ime/text/TextInputManager.kt | 2 +- gradle/libs.versions.toml | 1 + 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ef9ea6bb7f..b9e3e015a4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -126,6 +126,7 @@ dependencies { implementation(libs.androidx.viewpager2) implementation(libs.flexbox) implementation(libs.kaml) + implementation(libs.koin.android) implementation(libs.timber) implementation(libs.utilcode) implementation(libs.xxpermissions) diff --git a/app/src/main/java/com/osfans/trime/ime/bar/QuickBar.kt b/app/src/main/java/com/osfans/trime/ime/bar/QuickBar.kt index 16a08b1910..59482a6070 100644 --- a/app/src/main/java/com/osfans/trime/ime/bar/QuickBar.kt +++ b/app/src/main/java/com/osfans/trime/ime/bar/QuickBar.kt @@ -10,11 +10,16 @@ import com.osfans.trime.databinding.CandidateBarBinding import com.osfans.trime.databinding.TabBarBinding import com.osfans.trime.ime.core.Trime import com.osfans.trime.ime.enums.SymbolKeyboardType +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject import splitties.views.dsl.core.add import splitties.views.dsl.core.lParams import splitties.views.dsl.core.matchParent -class QuickBar(private val context: Context, private val service: Trime) { +class QuickBar : KoinComponent { + private val context: Context by inject() + private val service: Trime by inject() + val oldCandidateBar by lazy { CandidateBarBinding.inflate(LayoutInflater.from(context)).apply { with(root) { 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 656385115e..f9f8e39c6e 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,6 +8,10 @@ import androidx.constraintlayout.widget.ConstraintLayout import com.osfans.trime.ime.bar.QuickBar import com.osfans.trime.ime.keyboard.KeyboardWindow import com.osfans.trime.util.styledFloat +import org.koin.android.ext.koin.androidContext +import org.koin.android.ext.koin.androidLogger +import org.koin.core.context.startKoin +import org.koin.dsl.module import splitties.views.dsl.constraintlayout.below import splitties.views.dsl.constraintlayout.bottomOfParent import splitties.views.dsl.constraintlayout.centerHorizontally @@ -27,12 +31,27 @@ class InputView( val service: Trime, ) : ConstraintLayout(service) { private val themedContext = context.withTheme(android.R.style.Theme_DeviceDefault_Settings) - val quickBar = QuickBar(context, service) - val keyboardWindow = KeyboardWindow(context, service) + val quickBar = QuickBar() + val keyboardWindow = KeyboardWindow() + + private val module = + module { + single { this@InputView } + single { themedContext } + single { service } + single { keyboardWindow } + single { quickBar } + } val keyboardView: View init { + startKoin { + androidLogger() + androidContext(context) + modules(module) + } + keyboardView = constraintLayout { isMotionEventSplittingEnabled = true diff --git a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt b/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt index d659d837d0..39d21dbb83 100644 --- a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt +++ b/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt @@ -7,11 +7,16 @@ import com.osfans.trime.core.Rime import com.osfans.trime.databinding.MainInputLayoutBinding import com.osfans.trime.databinding.SymbolInputLayoutBinding import com.osfans.trime.ime.core.Trime +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject import splitties.views.dsl.core.add import splitties.views.dsl.core.lParams import splitties.views.dsl.core.matchParent -class KeyboardWindow(private val context: Context, private val service: Trime) { +class KeyboardWindow : KoinComponent { + private val context: Context by inject() + private val service: Trime by inject() + val oldMainInputView by lazy { MainInputLayoutBinding.inflate(LayoutInflater.from(context)).apply { with(mainKeyboardView) { 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 3733083b79..cf36c0d580 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 @@ -160,7 +160,7 @@ class TextInputManager private constructor(private val isDarkMode: Boolean) : restarting: Boolean, ) { super.onStartInputView(instance, restarting) - Trime.getService().selectLiquidKeyboard(-1) + trime.selectLiquidKeyboard(-1) if (restarting) { trime.performEscape() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 98f990f2b5..f6edc27d7f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,6 +27,7 @@ androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } androidx-viewpager2 = { module = "androidx.viewpager2:viewpager2", version = "1.1.0-beta02" } flexbox = { module = "com.google.android.flexbox:flexbox", version = "3.0.0" } kaml = { module = "com.charleskorn.kaml:kaml", version = "0.56.0" } +koin-android = { module = "io.insert-koin:koin-android", version = "3.5.3" } timber = { module = "com.jakewharton.timber:timber", version = "5.0.1" } utilcode = { module = "com.blankj:utilcodex", version = "1.31.1" } xxpermissions = { module = "com.github.getActivity:XXPermissions", version = "18.5" }