Skip to content

Commit

Permalink
refactor: try to introduce kotlin-inject
Browse files Browse the repository at this point in the history
  • Loading branch information
WhiredPlanck committed Mar 11, 2024
1 parent 038045b commit a3d9290
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 4 deletions.
2 changes: 2 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ dependencies {
implementation(libs.timber)
implementation(libs.utilcode)
implementation(libs.xxpermissions)
ksp(libs.kotlin.inject.compiler)
implementation(libs.kotlin.inject.runtime)
implementation(libs.splitties.bitflags)
implementation(libs.splitties.systemservices)
implementation(libs.splitties.views.dsl)
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/osfans/trime/ime/bar/QuickBar.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@ import com.osfans.trime.data.theme.ColorManager
import com.osfans.trime.databinding.CandidateBarBinding
import com.osfans.trime.databinding.TabBarBinding
import com.osfans.trime.ime.core.TrimeInputMethodService
import com.osfans.trime.ime.dependency.InputScope
import com.osfans.trime.ime.enums.SymbolKeyboardType
import me.tatarka.inject.annotations.Inject
import splitties.views.dsl.core.add
import splitties.views.dsl.core.lParams
import splitties.views.dsl.core.matchParent

@InputScope
@Inject
class QuickBar(context: Context, service: TrimeInputMethodService) {
val oldCandidateBar by lazy {
CandidateBarBinding.inflate(LayoutInflater.from(context)).apply {
Expand Down
11 changes: 7 additions & 4 deletions app/src/main/java/com/osfans/trime/ime/core/InputView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import com.osfans.trime.core.RimeNotification
import com.osfans.trime.data.theme.ColorManager
import com.osfans.trime.data.theme.ThemeManager
import com.osfans.trime.ime.bar.QuickBar
import com.osfans.trime.ime.dependency.InputComponent
import com.osfans.trime.ime.dependency.create
import com.osfans.trime.ime.keyboard.KeyboardWindow
import com.osfans.trime.ime.symbol.LiquidKeyboard
import com.osfans.trime.util.ColorUtils
Expand Down Expand Up @@ -84,9 +86,10 @@ class InputView(
private val notificationHandlerJob: Job

private val themedContext = context.withTheme(android.R.style.Theme_DeviceDefault_Settings)
val quickBar = QuickBar(themedContext, service)
val keyboardWindow = KeyboardWindow(themedContext, service)
val liquidKeyboard = LiquidKeyboard(themedContext, service, theme)
private val inputComponent = InputComponent::class.create(themedContext, theme, service)
val quickBar: QuickBar = inputComponent.quickBar
val keyboardWindow: KeyboardWindow = inputComponent.keyboardWindow
val liquidKeyboard: LiquidKeyboard = inputComponent.liquidKeyboard

private val keyboardSidePadding = theme.style.getInt("keyboard_padding")
private val keyboardSidePaddingLandscape = theme.style.getInt("keyboard_padding_land")
Expand Down Expand Up @@ -330,7 +333,7 @@ class InputView(
override fun onDetachedFromWindow() {
ViewCompat.setOnApplyWindowInsetsListener(this, null)
showingDialog?.dismiss()
// cancel the notification job and unload the Koin module,
// cancel the notification job,
// implies that InputView should not be attached again after detached.
notificationHandlerJob.cancel()
super.onDetachedFromWindow()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.osfans.trime.ime.dependency

import android.content.Context
import com.osfans.trime.data.theme.Theme
import com.osfans.trime.ime.bar.QuickBar
import com.osfans.trime.ime.core.TrimeInputMethodService
import com.osfans.trime.ime.keyboard.KeyboardWindow
import com.osfans.trime.ime.symbol.LiquidKeyboard
import me.tatarka.inject.annotations.Component
import me.tatarka.inject.annotations.Provides

@InputScope
@Component
abstract class InputComponent(
@get:InputScope @get:Provides protected val themedContext: Context,
@get:InputScope @get:Provides protected val theme: Theme,
@get:InputScope @get:Provides protected val service: TrimeInputMethodService,
) {
abstract val quickBar: QuickBar
abstract val keyboardWindow: KeyboardWindow
abstract val liquidKeyboard: LiquidKeyboard
}
10 changes: 10 additions & 0 deletions app/src/main/java/com/osfans/trime/ime/dependency/InputScope.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.osfans.trime.ime.dependency

import me.tatarka.inject.annotations.Scope
import kotlin.annotation.AnnotationTarget.CLASS
import kotlin.annotation.AnnotationTarget.FUNCTION
import kotlin.annotation.AnnotationTarget.PROPERTY_GETTER

@Scope
@Target(CLASS, FUNCTION, PROPERTY_GETTER)
annotation class InputScope
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ import android.widget.ViewAnimator
import com.osfans.trime.databinding.MainInputLayoutBinding
import com.osfans.trime.databinding.SymbolInputLayoutBinding
import com.osfans.trime.ime.core.TrimeInputMethodService
import com.osfans.trime.ime.dependency.InputScope
import me.tatarka.inject.annotations.Inject
import splitties.views.dsl.core.add
import splitties.views.dsl.core.lParams
import splitties.views.dsl.core.matchParent

@InputScope
@Inject
class KeyboardWindow(context: Context, service: TrimeInputMethodService) {
val oldMainInputView by lazy {
MainInputLayoutBinding.inflate(LayoutInflater.from(context)).apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,18 @@ import com.osfans.trime.data.db.DatabaseBean
import com.osfans.trime.data.db.DraftHelper
import com.osfans.trime.data.theme.Theme
import com.osfans.trime.ime.core.TrimeInputMethodService
import com.osfans.trime.ime.dependency.InputScope
import com.osfans.trime.ime.enums.KeyCommandType
import com.osfans.trime.ime.enums.SymbolKeyboardType
import com.osfans.trime.ime.text.TextInputManager
import com.osfans.trime.util.ShortcutUtils
import kotlinx.coroutines.launch
import me.tatarka.inject.annotations.Inject
import splitties.dimensions.dp
import timber.log.Timber

@InputScope
@Inject
class LiquidKeyboard(
private val context: Context,
private val service: TrimeInputMethodService,
Expand Down
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ room = "2.6.1"
splitties = "3.0.0"
aboutlibraries = "10.9.2"
kotest = "5.8.0"
kotlin-inject = "0.6.3"

[libraries]
android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" }
Expand All @@ -30,6 +31,8 @@ kaml = { module = "com.charleskorn.kaml:kaml", version = "0.56.0" }
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" }
kotlin-inject-compiler = { module = "me.tatarka.inject:kotlin-inject-compiler-ksp", version.ref = "kotlin-inject" }
kotlin-inject-runtime = { module = "me.tatarka.inject:kotlin-inject-runtime", version.ref = "kotlin-inject" }
splitties-bitflags = { module = "com.louiscad.splitties:splitties-bitflags", version.ref = "splitties" }
splitties-systemservices = { module = "com.louiscad.splitties:splitties-systemservices", version.ref = "splitties" }
splitties-views-dsl = { module = "com.louiscad.splitties:splitties-views-dsl", version.ref = "splitties" }
Expand Down

0 comments on commit a3d9290

Please sign in to comment.