Skip to content

Commit 23236f4

Browse files
committed
1.10
test
1 parent db5ac13 commit 23236f4

File tree

5 files changed

+87
-123
lines changed

5 files changed

+87
-123
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ local.properties
1111
.idea
1212
.project
1313
.settings
14+
*.log

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ android {
1111
applicationId "com.xposed.miuiime"
1212
minSdkVersion 28
1313
targetSdkVersion 30
14-
versionCode 9
15-
versionName '1.09'
14+
versionCode 10
15+
versionName '1.10'
1616
}
1717

1818
buildTypes {

app/src/androidTest/java/com/xposed/miuiime/ExampleInstrumentedTest.java

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 84 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,76 @@
11
package com.xposed.miuiime
22

3-
import android.annotation.TargetApi
4-
import android.os.Build
53
import android.view.inputmethod.InputMethodManager
64
import de.robv.android.xposed.*
75
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
86

97
class MainHook : IXposedHookLoadPackage {
10-
private var isA10 = false
11-
private var isA11 = false
128
override fun handleLoadPackage(lpparam: LoadPackageParam) {
139
//检查是否支持全面屏优化
1410
if (PropertyUtils["ro.miui.support_miui_ime_bottom", "0"] != "1") return
15-
checkVersion()
1611
//检查是否为小米定制输入法
1712
val isNonCustomize = !miuiImeList.contains(lpparam.packageName)
1813
if (isNonCustomize) {
19-
val clazz = XposedHelpers.findClass(
14+
findClass(
2015
"android.inputmethodservice.InputMethodServiceInjector",
2116
lpparam.classLoader
22-
)
23-
hookSIsImeSupport(clazz)
24-
XposedBridge.log("Hooked ServiceInjector: " + lpparam.packageName)
25-
if (isA10) {
26-
hookIsXiaoAiEnable(clazz)
27-
XposedBridge.log("Hooked IsXiaoAiEnable: " + lpparam.packageName)
28-
} else //将导航栏颜色赋值给输入法优化的底图
29-
XposedHelpers.findAndHookMethod("com.android.internal.policy.PhoneWindow",
17+
)?.let {
18+
hookSIsImeSupport(it)
19+
hookIsXiaoAiEnable(it)
20+
21+
//将导航栏颜色赋值给输入法优化的底图
22+
findAndHookMethod("com.android.internal.policy.PhoneWindow",
3023
lpparam.classLoader, "setNavigationBarColor",
3124
Int::class.javaPrimitiveType, object : XC_MethodHook() {
3225
override fun afterHookedMethod(param: MethodHookParam) {
33-
// 0xff747474, 0x66747474
3426
val color = -0x1 - param.args[0] as Int
3527
XposedHelpers.callStaticMethod(
36-
clazz, "customizeBottomViewColor",
28+
it, "customizeBottomViewColor",
3729
true, param.args[0], color or -0x1000000, color or 0x66000000
3830
)
3931
}
4032
})
41-
XposedBridge.log("Hooked customizeBottomViewColor: " + lpparam.packageName)
33+
}
4234
}
43-
if (isA10) {
44-
//针对A10的修复切换输入法列表
45-
XposedHelpers.findAndHookMethod(
46-
"android.inputmethodservice.InputMethodServiceInjector\$MiuiSwitchInputMethodListener",
47-
lpparam.classLoader, "deleteNotSupportIme",
48-
XC_MethodReplacement.returnConstant(null)
49-
)
50-
XposedBridge.log("Hooked deleteNotSupportIme: " + lpparam.packageName)
51-
} else {
52-
//获取常用语的ClassLoader
53-
XposedHelpers.findAndHookMethod("android.inputmethodservice.InputMethodModuleManager",
54-
lpparam.classLoader, "loadDex",
55-
ClassLoader::class.java, String::class.java,
56-
object : XC_MethodHook() {
57-
override fun afterHookedMethod(param: MethodHookParam) {
58-
val clazz = XposedHelpers.findClass(
59-
"com.miui.inputmethod.InputMethodBottomManager",
60-
param.args[0] as ClassLoader
61-
)
35+
//针对A10的修复切换输入法列表
36+
findAndHookMethod(
37+
"android.inputmethodservice.InputMethodServiceInjector\$MiuiSwitchInputMethodListener",
38+
lpparam.classLoader, "deleteNotSupportIme",
39+
XC_MethodReplacement.returnConstant(null)
40+
)
41+
42+
//获取常用语的ClassLoader
43+
findAndHookMethod("android.inputmethodservice.InputMethodModuleManager",
44+
lpparam.classLoader, "loadDex",
45+
ClassLoader::class.java, String::class.java,
46+
object : XC_MethodHook() {
47+
override fun afterHookedMethod(param: MethodHookParam) {
48+
findClass(
49+
"com.miui.inputmethod.InputMethodBottomManager",
50+
param.args[0] as ClassLoader
51+
)?.let {
6252
if (isNonCustomize) {
63-
hookSIsImeSupport(clazz)
64-
hookIsXiaoAiEnable(clazz)
65-
XposedBridge.log("Hooked MiuiBottomView: " + lpparam.packageName)
53+
hookSIsImeSupport(it)
54+
hookIsXiaoAiEnable(it)
6655
}
56+
6757
//针对A11的修复切换输入法列表
68-
XposedHelpers.findAndHookMethod(clazz, "getSupportIme",
58+
findAndHookMethod(
59+
it, "getSupportIme",
6960
object : XC_MethodReplacement() {
70-
@TargetApi(Build.VERSION_CODES.CUPCAKE)
7161
override fun replaceHookedMethod(param: MethodHookParam): Any {
7262
return (XposedHelpers.getObjectField(
7363
XposedHelpers.getStaticObjectField(
74-
clazz,
75-
"sBottomViewHelper"
64+
it, "sBottomViewHelper"
7665
),
7766
"mImm"
7867
) as InputMethodManager).enabledInputMethodList
7968
}
8069
})
81-
XposedBridge.log("Hooked getSupportIme Method: " + lpparam.packageName)
8270
}
83-
})
84-
}
71+
}
72+
})
73+
XposedBridge.log("Hook MIUI IME Success")
8574
}
8675

8776
/**
@@ -90,11 +79,7 @@ class MainHook : IXposedHookLoadPackage {
9079
* @param clazz 声明或继承字段的类
9180
*/
9281
private fun hookSIsImeSupport(clazz: Class<*>) {
93-
try {
94-
XposedHelpers.setStaticIntField(clazz, "sIsImeSupport", 1)
95-
} catch (e: Exception) {
96-
XposedBridge.log(e)
97-
}
82+
XposedHelpers.setStaticIntField(clazz, "sIsImeSupport", 1)
9883
}
9984

10085
/**
@@ -103,40 +88,61 @@ class MainHook : IXposedHookLoadPackage {
10388
* @param clazz 声明或继承方法的类
10489
*/
10590
private fun hookIsXiaoAiEnable(clazz: Class<*>) {
106-
try {
91+
findAndHookMethod(
92+
clazz, "isXiaoAiEnable",
93+
XC_MethodReplacement.returnConstant(false)
94+
)
95+
}
96+
97+
fun findAndHookMethod(
98+
clazz: Class<*>,
99+
methodName: String,
100+
vararg parameterTypesAndCallback: Any?
101+
): XC_MethodHook.Unhook? {
102+
return try {
103+
XposedBridge.log("Hook method $methodName")
104+
XposedHelpers.findAndHookMethod(clazz, methodName, *parameterTypesAndCallback)
105+
} catch (e: IllegalArgumentException) {
106+
XposedBridge.log("Hook method $methodName failed")
107+
XposedBridge.log(e)
108+
null
109+
}
110+
}
111+
112+
private fun findAndHookMethod(
113+
className: String,
114+
classLoader: ClassLoader,
115+
methodName: String,
116+
vararg parameterTypesAndCallback: Any?
117+
): XC_MethodHook.Unhook? {
118+
return try {
119+
XposedBridge.log("Hook method $methodName")
107120
XposedHelpers.findAndHookMethod(
108-
clazz, "isXiaoAiEnable",
109-
XC_MethodReplacement.returnConstant(false)
121+
XposedHelpers.findClass(className, classLoader),
122+
methodName,
123+
*parameterTypesAndCallback
110124
)
111-
} catch (e: Exception) {
125+
} catch (e: IllegalArgumentException) {
126+
XposedBridge.log("Hook method $methodName failed")
112127
XposedBridge.log(e)
128+
null
113129
}
114130
}
115131

116-
/**
117-
* 检查Android版本
118-
*/
119-
private fun checkVersion() {
120-
when (Build.VERSION.SDK_INT) {
121-
30 -> {
122-
isA10 = false
123-
isA11 = true
124-
}
125-
29, 28 -> {
126-
isA10 = true
127-
isA11 = false
128-
}
129-
else -> {
130-
isA10 = false
131-
isA11 = false
132-
}
132+
fun findClass(className: String, classLoader: ClassLoader): Class<*>? {
133+
return try {
134+
XposedBridge.log("Find class $className")
135+
XposedHelpers.findClass(className, classLoader)
136+
} catch (e: ClassNotFoundException) {
137+
XposedBridge.log("Find class $className failed")
138+
XposedBridge.log(e)
139+
null
133140
}
134141
}
135142

136-
companion object {
137-
val miuiImeList: List<String> = listOf(
138-
"com.iflytek.inputmethod.miui",
139-
"com.sohu.inputmethod.sogou.xiaomi", "com.baidu.input_mi", "com.miui.catcherpatch"
140-
)
141-
}
143+
private val miuiImeList: List<String> = listOf(
144+
"com.iflytek.inputmethod.miui",
145+
"com.sohu.inputmethod.sogou.xiaomi", "com.baidu.input_mi", "com.miui.catcherpatch"
146+
)
147+
142148
}

app/src/test/java/com/xposed/miuiime/ExampleUnitTest.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)