Skip to content

Commit 98e201b

Browse files
committed
fix: avoid reading ENABLED_INPUT_METHODS on 34+
fix: crash on Android 14 devices
1 parent 97e83c1 commit 98e201b

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

app/src/main/java/com/osfans/trime/util/InputMethodUtils.kt

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,45 @@ package com.osfans.trime.util
33
import android.content.ComponentName
44
import android.content.Context
55
import android.content.Intent
6+
import android.os.Build
67
import android.provider.Settings
8+
import com.osfans.trime.BuildConfig
79
import com.osfans.trime.ime.core.TrimeInputMethodService
810
import splitties.systemservices.inputMethodManager
911
import timber.log.Timber
1012

1113
object InputMethodUtils {
12-
private val serviceName =
14+
private val serviceName = TrimeInputMethodService::class.java.name
15+
private val componentName =
1316
ComponentName(appContext, TrimeInputMethodService::class.java).flattenToShortString()
1417

1518
private fun getSecureSettings(name: String) = Settings.Secure.getString(appContext.contentResolver, name)
1619

1720
fun checkIsTrimeEnabled(): Boolean {
18-
val activeImeIds = getSecureSettings(Settings.Secure.ENABLED_INPUT_METHODS) ?: "(none)"
19-
Timber.i("List of active IMEs: $activeImeIds")
20-
return activeImeIds.split(":").contains(serviceName)
21+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
22+
inputMethodManager.enabledInputMethodList.also {
23+
Timber.i("List of active IMEs: $it")
24+
}.any {
25+
it.packageName == BuildConfig.APPLICATION_ID && it.serviceName == serviceName
26+
}
27+
} else {
28+
val activeImeIds = getSecureSettings(Settings.Secure.ENABLED_INPUT_METHODS) ?: "(none)"
29+
Timber.i("List of active IMEs: $activeImeIds")
30+
activeImeIds.split(":").contains(componentName)
31+
}
2132
}
2233

2334
fun checkIsTrimeSelected(): Boolean {
24-
val selectedImeIds = getSecureSettings(Settings.Secure.DEFAULT_INPUT_METHOD) ?: "(none)"
25-
Timber.i("Selected IME: $selectedImeIds")
26-
return selectedImeIds == serviceName
35+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
36+
inputMethodManager.currentInputMethodInfo?.let {
37+
Timber.i("Selected IME: ${it.serviceName}")
38+
it.packageName == BuildConfig.APPLICATION_ID && it.serviceName == serviceName
39+
} ?: false
40+
} else {
41+
val selectedImeIds = getSecureSettings(Settings.Secure.DEFAULT_INPUT_METHOD) ?: "(none)"
42+
Timber.i("Selected IME: $selectedImeIds")
43+
selectedImeIds == componentName
44+
}
2745
}
2846

2947
fun showImeEnablerActivity(context: Context) = context.startActivity(Intent(Settings.ACTION_INPUT_METHOD_SETTINGS))

0 commit comments

Comments
 (0)