From 282fec5f0d62a4005c9fe4fabe64ad899f44ed19 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:22:12 +0800 Subject: [PATCH 01/38] use EzXHelper --- app/build.gradle.kts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b7e6927f..db38abd8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -65,4 +65,7 @@ implementation("androidx.constraintlayout:constraintlayout:2.1.3") val appCenterSdkVersion = "4.3.1" implementation("com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}") implementation("com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}") + + implementation("com.github.kyuubiran:EzXHelper:0.7.3") + } \ No newline at end of file From 42560bb28a6e4eeb163f4d4340a4e508573c19fd Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:22:24 +0800 Subject: [PATCH 02/38] add KotlinXposedHelper --- .../util/KotlinXposedHelper.kt | 500 ++++++++++++++++++ 1 file changed, 500 insertions(+) create mode 100644 app/src/main/java/com/lt2333/simplicitytools/util/KotlinXposedHelper.kt diff --git a/app/src/main/java/com/lt2333/simplicitytools/util/KotlinXposedHelper.kt b/app/src/main/java/com/lt2333/simplicitytools/util/KotlinXposedHelper.kt new file mode 100644 index 00000000..ff33ca8b --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/util/KotlinXposedHelper.kt @@ -0,0 +1,500 @@ +package com.lt2333.simplicitytools.util + +import android.content.Context +import android.content.res.XResources +import android.util.Log +import dalvik.system.BaseDexClassLoader +import de.robv.android.xposed.XC_MethodHook +import de.robv.android.xposed.XC_MethodReplacement +import de.robv.android.xposed.XposedBridge +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LayoutInflated +import de.robv.android.xposed.callbacks.XC_LoadPackage +import java.lang.reflect.Field +import java.lang.reflect.Member +import java.util.* + +const val TAG = "SimplicityTools" + +fun log(any: Any?, online: Boolean = false) { + val msg: String = if (any is Throwable) Log.getStackTraceString(any) else any.toString() +// Log.d(TAG, msg) + XposedBridge.log("$TAG: $msg") +} + +typealias MethodHookParam = XC_MethodHook.MethodHookParam +typealias Replacer = (XC_MethodHook.MethodHookParam) -> Any? +typealias Hooker = (XC_MethodHook.MethodHookParam) -> Unit + +fun Class<*>.hookMethod(method: String?, vararg args: Any?) = try { + XposedHelpers.findAndHookMethod(this, method, *args) +} catch (e: NoSuchMethodError) { + log(e) + null +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + null +} catch (e: ClassNotFoundException) { + log(e) + null +} + +fun Member.hookMethod(callback: XC_MethodHook) = try { + XposedBridge.hookMethod(this, callback) +} catch (e: Throwable) { + log(e) + null +} + +inline fun XC_MethodHook.MethodHookParam.callHooker(crossinline hooker: Hooker) = try { + hooker(this) +} catch (e: Throwable) { + log("Error occurred calling hooker on ${this.method}") + log(e) +} + +inline fun XC_MethodHook.MethodHookParam.callReplacer(crossinline replacer: Replacer) = try { + replacer(this) +} catch (e: Throwable) { + log("Error occurred calling replacer on ${this.method}") + log(e) + null +} + +inline fun Member.replaceMethod(crossinline replacer: Replacer) = + hookMethod(object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer) + }) + +inline fun Member.hookAfterMethod(crossinline hooker: Hooker) = + hookMethod(object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Member.hookBeforeMethod(crossinline hooker: (XC_MethodHook.MethodHookParam) -> Unit) = + hookMethod(object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Class<*>.hookBeforeMethod( + method: String?, + vararg args: Any?, + crossinline hooker: Hooker +) = hookMethod(method, *args, object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker) +}) + +inline fun Class<*>.hookAfterMethod( + method: String?, + vararg args: Any?, + crossinline hooker: Hooker +) = hookMethod(method, *args, object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker) +}) + +inline fun Class<*>.replaceMethod( + method: String?, + vararg args: Any?, + crossinline replacer: Replacer +) = hookMethod(method, *args, object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer) +}) + +fun Class<*>.hookAllMethods(methodName: String?, hooker: XC_MethodHook): Set = + try { + XposedBridge.hookAllMethods(this, methodName, hooker) + } catch (e: NoSuchMethodError) { + log(e) + emptySet() + } catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + emptySet() + } catch (e: ClassNotFoundException) { + log(e) + emptySet() + } + +inline fun Class<*>.hookBeforeAllMethods(methodName: String?, crossinline hooker: Hooker) = + hookAllMethods(methodName, object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Class<*>.hookAfterAllMethods(methodName: String?, crossinline hooker: Hooker) = + hookAllMethods(methodName, object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + + }) + +inline fun Class<*>.replaceAfterAllMethods(methodName: String?, crossinline replacer: Replacer) = + hookAllMethods(methodName, object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam) = param.callReplacer(replacer) + }) + +fun Class<*>.hookConstructor(vararg args: Any?) = try { + XposedHelpers.findAndHookConstructor(this, *args) +} catch (e: NoSuchMethodError) { + log(e) + null +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + null +} catch (e: ClassNotFoundException) { + log(e) + null +} + +inline fun Class<*>.hookBeforeConstructor(vararg args: Any?, crossinline hooker: Hooker) = + hookConstructor(*args, object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Class<*>.hookAfterConstructor(vararg args: Any?, crossinline hooker: Hooker) = + hookConstructor(*args, object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Class<*>.replaceConstructor(vararg args: Any?, crossinline hooker: Hooker) = + hookConstructor(*args, object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +fun Class<*>.hookAllConstructors(hooker: XC_MethodHook): Set = try { + XposedBridge.hookAllConstructors(this, hooker) +} catch (e: NoSuchMethodError) { + log(e) + emptySet() +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + emptySet() +} catch (e: ClassNotFoundException) { + log(e) + emptySet() +} + +inline fun Class<*>.hookAfterAllConstructors(crossinline hooker: Hooker) = + hookAllConstructors(object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Class<*>.hookBeforeAllConstructors(crossinline hooker: Hooker) = + hookAllConstructors(object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +inline fun Class<*>.replaceAfterAllConstructors(crossinline hooker: Hooker) = + hookAllConstructors(object : XC_MethodReplacement() { + override fun replaceHookedMethod(param: MethodHookParam) = param.callHooker(hooker) + }) + +fun String.hookMethod(classLoader: ClassLoader, method: String?, vararg args: Any?) = try { + findClass(classLoader).hookMethod(method, *args) +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + null +} catch (e: ClassNotFoundException) { + log(e) + null +} + +inline fun String.hookBeforeMethod( + classLoader: ClassLoader, + method: String?, + vararg args: Any?, + crossinline hooker: Hooker +) = try { + findClass(classLoader).hookBeforeMethod(method, *args, hooker = hooker) +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + null +} catch (e: ClassNotFoundException) { + log(e) + null +} + +inline fun String.hookAfterMethod( + classLoader: ClassLoader, + method: String?, + vararg args: Any?, + crossinline hooker: Hooker +) = try { + findClass(classLoader).hookAfterMethod(method, *args, hooker = hooker) +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + null +} catch (e: ClassNotFoundException) { + log(e) + null +} + +inline fun String.replaceMethod( + classLoader: ClassLoader, + method: String?, + vararg args: Any?, + crossinline replacer: Replacer +) = try { + findClass(classLoader).replaceMethod(method, *args, replacer = replacer) +} catch (e: XposedHelpers.ClassNotFoundError) { + log(e) + null +} catch (e: ClassNotFoundException) { + log(e) + null +} + +fun XC_MethodHook.MethodHookParam.invokeOriginalMethod(): Any? = + XposedBridge.invokeOriginalMethod(method, thisObject, args) + +inline fun T.runCatchingOrNull(func: T.() -> R?) = try { + func() +} catch (e: Throwable) { + null +} + +fun Any.getObjectField(field: String?): Any? = XposedHelpers.getObjectField(this, field) + +fun Any.getObjectFieldOrNull(field: String?): Any? = runCatchingOrNull { + XposedHelpers.getObjectField(this, field) +} + +@Suppress("UNCHECKED_CAST") +fun Any.getObjectFieldAs(field: String?) = XposedHelpers.getObjectField(this, field) as T + +@Suppress("UNCHECKED_CAST") +fun Any.getObjectFieldOrNullAs(field: String?) = runCatchingOrNull { + XposedHelpers.getObjectField(this, field) as T +} + +fun Any.getIntField(field: String?) = XposedHelpers.getIntField(this, field) + +fun Any.getIntFieldOrNull(field: String?) = runCatchingOrNull { + XposedHelpers.getIntField(this, field) +} + +fun Any.getLongField(field: String?) = XposedHelpers.getLongField(this, field) + +fun Any.getLongFieldOrNull(field: String?) = runCatchingOrNull { + XposedHelpers.getLongField(this, field) +} + +fun Any.getBooleanFieldOrNull(field: String?) = runCatchingOrNull { + XposedHelpers.getBooleanField(this, field) +} + +fun Any.callMethod(methodName: String?, vararg args: Any?): Any? = + XposedHelpers.callMethod(this, methodName, *args) + +fun Any.callMethodOrNull(methodName: String?, vararg args: Any?): Any? = runCatchingOrNull { + XposedHelpers.callMethod(this, methodName, *args) +} + +fun Class<*>.callStaticMethod(methodName: String?, vararg args: Any?): Any? = + XposedHelpers.callStaticMethod(this, methodName, *args) + +fun Class<*>.callStaticMethodOrNull(methodName: String?, vararg args: Any?): Any? = + runCatchingOrNull { + XposedHelpers.callStaticMethod(this, methodName, *args) + } + +@Suppress("UNCHECKED_CAST") +fun Class<*>.callStaticMethodAs(methodName: String?, vararg args: Any?) = + XposedHelpers.callStaticMethod(this, methodName, *args) as T + +@Suppress("UNCHECKED_CAST") +fun Class<*>.callStaticMethodOrNullAs(methodName: String?, vararg args: Any?) = + runCatchingOrNull { + XposedHelpers.callStaticMethod(this, methodName, *args) as T + } + +@Suppress("UNCHECKED_CAST") +fun Class<*>.getStaticObjectFieldAs(field: String?) = XposedHelpers.getStaticObjectField( + this, + field +) as T + +@Suppress("UNCHECKED_CAST") +fun Class<*>.getStaticObjectFieldOrNullAs(field: String?) = runCatchingOrNull { + XposedHelpers.getStaticObjectField(this, field) as T +} + +fun Class<*>.getStaticObjectField(field: String?): Any? = + XposedHelpers.getStaticObjectField(this, field) + +fun Class<*>.getStaticObjectFieldOrNull(field: String?): Any? = runCatchingOrNull { + XposedHelpers.getStaticObjectField(this, field) +} + +fun Class<*>.setStaticObjectField(field: String?, obj: Any?) = apply { + XposedHelpers.setStaticObjectField(this, field, obj) +} + +fun Class<*>.setStaticObjectFieldIfExist(field: String?, obj: Any?) = apply { + try { + XposedHelpers.setStaticObjectField(this, field, obj) + } catch (ignored: Throwable) { + } +} + +inline fun Class<*>.findFieldByExactType(): Field? = + XposedHelpers.findFirstFieldByExactType(this, T::class.java) + +fun Class<*>.findFieldByExactType(type: Class<*>): Field? = + XposedHelpers.findFirstFieldByExactType(this, type) + +@Suppress("UNCHECKED_CAST") +fun Any.callMethodAs(methodName: String?, vararg args: Any?) = + XposedHelpers.callMethod(this, methodName, *args) as T + +@Suppress("UNCHECKED_CAST") +fun Any.callMethodOrNullAs(methodName: String?, vararg args: Any?) = runCatchingOrNull { + XposedHelpers.callMethod(this, methodName, *args) as T +} + +fun Any.callMethod(methodName: String?, parameterTypes: Array>, vararg args: Any?): Any? = + XposedHelpers.callMethod(this, methodName, parameterTypes, *args) + +fun Any.callMethodOrNull( + methodName: String?, + parameterTypes: Array>, + vararg args: Any? +): Any? = runCatchingOrNull { + XposedHelpers.callMethod(this, methodName, parameterTypes, *args) +} + +fun Class<*>.callStaticMethod( + methodName: String?, + parameterTypes: Array>, + vararg args: Any? +): Any? = XposedHelpers.callStaticMethod(this, methodName, parameterTypes, *args) + +fun Class<*>.callStaticMethodOrNull( + methodName: String?, + parameterTypes: Array>, + vararg args: Any? +): Any? = runCatchingOrNull { + XposedHelpers.callStaticMethod(this, methodName, parameterTypes, *args) +} + +fun String.findClass(classLoader: ClassLoader?): Class<*> = + XposedHelpers.findClass(this, classLoader) + +fun String.findClassOrNull(classLoader: ClassLoader?): Class<*>? = + XposedHelpers.findClassIfExists(this, classLoader) + +fun Class<*>.new(vararg args: Any?): Any = XposedHelpers.newInstance(this, *args) + +fun Class<*>.new(parameterTypes: Array>, vararg args: Any?): Any = + XposedHelpers.newInstance(this, parameterTypes, *args) + +fun Class<*>.findField(field: String?): Field = XposedHelpers.findField(this, field) + +fun Class<*>.findFieldOrNull(field: String?): Field? = XposedHelpers.findFieldIfExists(this, field) + +fun T.setIntField(field: String?, value: Int) = apply { + XposedHelpers.setIntField(this, field, value) +} + +fun T.setLongField(field: String?, value: Long) = apply { + XposedHelpers.setLongField(this, field, value) +} + +fun T.setObjectField(field: String?, value: Any?) = apply { + XposedHelpers.setObjectField(this, field, value) +} + +fun T.setBooleanField(field: String?, value: Boolean) = apply { + XposedHelpers.setBooleanField(this, field, value) +} + +inline fun XResources.hookLayout( + id: Int, + crossinline hooker: (XC_LayoutInflated.LayoutInflatedParam) -> Unit +) { + try { + hookLayout(id, object : XC_LayoutInflated() { + override fun handleLayoutInflated(liparam: LayoutInflatedParam) { + try { + hooker(liparam) + } catch (e: Throwable) { + log(e) + } + } + }) + } catch (e: Throwable) { + log(e) + } +} + +inline fun XResources.hookLayout( + pkg: String, + type: String, + name: String, + crossinline hooker: (XC_LayoutInflated.LayoutInflatedParam) -> Unit +) { + try { + val id = getIdentifier(name, type, pkg) + hookLayout(id, hooker) + } catch (e: Throwable) { + log(e) + } +} + +fun Class<*>.findFirstFieldByExactType(type: Class<*>): Field = + XposedHelpers.findFirstFieldByExactType(this, type) + +fun Class<*>.findFirstFieldByExactTypeOrNull(type: Class<*>?): Field? = runCatchingOrNull { + XposedHelpers.findFirstFieldByExactType(this, type) +} + +fun Any.getFirstFieldByExactType(type: Class<*>): Any? = + javaClass.findFirstFieldByExactType(type).get(this) + +@Suppress("UNCHECKED_CAST") +fun Any.getFirstFieldByExactTypeAs(type: Class<*>) = + javaClass.findFirstFieldByExactType(type).get(this) as? T + +inline fun Any.getFirstFieldByExactType() = + javaClass.findFirstFieldByExactType(T::class.java).get(this) as? T + +fun Any.getFirstFieldByExactTypeOrNull(type: Class<*>?): Any? = runCatchingOrNull { + javaClass.findFirstFieldByExactTypeOrNull(type)?.get(this) +} + +@Suppress("UNCHECKED_CAST") +fun Any.getFirstFieldByExactTypeOrNullAs(type: Class<*>?) = + getFirstFieldByExactTypeOrNull(type) as? T + +inline fun Any.getFirstFieldByExactTypeOrNull() = + getFirstFieldByExactTypeOrNull(T::class.java) as? T + +fun ClassLoader.allClassesList(): List { + var classLoader = this + while (classLoader !is BaseDexClassLoader) { + if (classLoader.parent != null) classLoader = classLoader.parent + else return emptyList() + } + return classLoader.getObjectField("pathList") + ?.getObjectFieldAs>("dexElements") + ?.flatMap { + it.getObjectField("dexFile")?.callMethodAs>("entries")?.toList() + .orEmpty() + }.orEmpty() +} + +inline fun ClassLoader.findDexClassLoader(): BaseDexClassLoader? { + var classLoader = this + while (classLoader !is BaseDexClassLoader) { + if (classLoader.parent != null) classLoader = classLoader.parent + else return null + } + return classLoader +} + +inline fun T?.isNull(crossinline isNull: () -> Unit):T? { + if (this == null) isNull() + return this +} + +inline fun T?.isNonNull(crossinline nonNull: (T) -> Unit): T? { + if (this != null) nonNull(this) + return this +} From bf06b7b69ee12d5873e5039b6ddf833ca2124611 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:25:54 +0800 Subject: [PATCH 03/38] simplify DisableFlagSecure.kt --- .../hook/app/android/DisableFlagSecure.kt | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt index f5042b60..33d83b0f 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt @@ -1,25 +1,15 @@ package com.lt2333.simplicitytools.hook.app.android -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.* import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class DisableFlagSecure :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.server.wm.WindowState", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod(classIfExists, - "isSecureLocked", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("disable_flag_secure",false)) { - param.result = false - } - } - }) + hasEnable("disable_flag_secure") { + "com.android.server.wm.WindowState".hookBeforeMethod(lpparam.classLoader, "isSecureLocked") { + it.result = false + } + } } } \ No newline at end of file From df51e0cb89b694b9da01a3b2cb2665d2cb1ff31a Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:26:33 +0800 Subject: [PATCH 04/38] simplify DeleOnPoseNotification.kt --- .../app/android/DeleteOnPostNotification.kt | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt index b72f07b6..c2b2c684 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt @@ -1,25 +1,16 @@ package com.lt2333.simplicitytools.hook.app.android -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class DeleteOnPostNotification : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.server.wm.AlertWindowNotification", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod(classIfExists, - "onPostNotification", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("delete_on_post_notification", false)) { - param.result = null - } - } - }) + hasEnable("delete_on_post_notification") { + "com.android.server.wm.AlertWindowNotification".hookBeforeMethod(lpparam.classLoader, "onPostNotification") { + it.result = null + } + } } } \ No newline at end of file From 88c2312d8a1569da75644c43c0f83de0839b2af2 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:28:10 +0800 Subject: [PATCH 05/38] restore dynamic hook --- .../hook/app/android/DeleteOnPostNotification.kt | 4 ++-- .../simplicitytools/hook/app/android/DisableFlagSecure.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt index c2b2c684..a72973bb 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DeleteOnPostNotification.kt @@ -7,8 +7,8 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage class DeleteOnPostNotification : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - hasEnable("delete_on_post_notification") { - "com.android.server.wm.AlertWindowNotification".hookBeforeMethod(lpparam.classLoader, "onPostNotification") { + "com.android.server.wm.AlertWindowNotification".hookBeforeMethod(lpparam.classLoader, "onPostNotification") { + hasEnable("delete_on_post_notification") { it.result = null } } diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt index 33d83b0f..234fbee5 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/DisableFlagSecure.kt @@ -6,8 +6,8 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage class DisableFlagSecure :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - hasEnable("disable_flag_secure") { - "com.android.server.wm.WindowState".hookBeforeMethod(lpparam.classLoader, "isSecureLocked") { + "com.android.server.wm.WindowState".hookBeforeMethod(lpparam.classLoader, "isSecureLocked") { + hasEnable("disable_flag_secure") { it.result = false } } From 928ac38aad64e2e96fe33d15976c158da86a41ba Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:28:29 +0800 Subject: [PATCH 06/38] init EzXHelper --- app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt index 7845d21f..b1a24fd5 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/MainHook.kt @@ -1,5 +1,6 @@ package com.lt2333.simplicitytools.hook +import com.github.kyuubiran.ezxhelper.init.EzXHelperInit import com.lt2333.simplicitytools.BuildConfig import com.lt2333.simplicitytools.hook.app.* import de.robv.android.xposed.IXposedHookLoadPackage @@ -10,6 +11,8 @@ class MainHook : IXposedHookLoadPackage { var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config") override fun handleLoadPackage(lpparam: LoadPackageParam) { if (prefs.getBoolean("main_switch", true)) { + EzXHelperInit.initHandleLoadPackage(lpparam) + EzXHelperInit.setEzClassLoader(lpparam.classLoader) when (lpparam.packageName) { //Android "android" -> { From 5b40f07256fe8485e8603c077f5870898460747f Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:28:40 +0800 Subject: [PATCH 07/38] Update XSPUtils.kt --- .../main/java/com/lt2333/simplicitytools/util/XSPUtils.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt b/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt index 4682c752..8d0e4bc2 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt @@ -18,4 +18,10 @@ object XSPUtils { } return prefs.getInt(key, defValue) } -} \ No newline at end of file +} + +inline fun hasEnable(key: String, default: Boolean = false, crossinline block: () -> Unit) { + if (XSPUtils.getBoolean(key, default)) { + block() + } +} From d659ed88a373ee44f254501ce41f4e6d5ed9e874 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:34:41 +0800 Subject: [PATCH 08/38] simplify RemoveSmallWindowRestrictions --- .../android/RemoveSmallWindowRestrictions.kt | 84 +++++-------------- 1 file changed, 23 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt index be788ad3..5cfbd9d3 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt @@ -1,76 +1,38 @@ package com.lt2333.simplicitytools.hook.app.android -import android.content.Context -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class RemoveSmallWindowRestrictions : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { // 强制所有活动设为可以调整大小 - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.server.wm.Task", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "isResizeable", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_small_window_restrictions", false)) { - param.result = true - } - } - }) + "com.android.server.wm.Task".hookBeforeMethod(lpparam.classLoader, "isResizeable") { + hasEnable("remove_small_window_restrictions") { + it.result = true + } + } + "android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackList") { + hasEnable("remove_small_window_restrictions") { + it.result = (it.result as MutableList<*>).clear() + } + } + "android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackListFromCloud") { + hasEnable("remove_small_window_restrictions") { + it.result = (it.result as MutableList<*>).clear() + } + } - val classIfExists2 = XposedHelpers.findClassIfExists( - "android.util.MiuiMultiWindowAdapter", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists2, - "getFreeformBlackList", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_small_window_restrictions", false)) { - val blackList = param.result as MutableList - blackList.clear() - param.result = blackList - } - } - }) - XposedHelpers.findAndHookMethod( - classIfExists2, - "getFreeformBlackListFromCloud", - Context::class.java, - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_small_window_restrictions", false)) { - val blackList = param.result as MutableList - blackList.clear() - param.result = blackList - } - } - }) - val classIfExists3 = XposedHelpers.findClassIfExists( - "android.util.MiuiMultiWindowUtils", - lpparam.classLoader - ) + "android.util.MiuiMultiWindowUtils".hookAfterMethod(lpparam.classLoader, "supportFreeform") { + hasEnable("remove_small_window_restrictions") { + it.result = true + } + } - XposedHelpers.findAndHookMethod( - classIfExists3, - "supportFreeform", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_small_window_restrictions", false)) { - param.result = true - } - } - }) } } \ No newline at end of file From 2ab121fa5ad420aa3154711b6e7d7139d4bb121b Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:37:42 +0800 Subject: [PATCH 09/38] simplify HideAirplaneIcon.kt --- .../hook/app/systemui/HideAirplaneIcon.kt | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt index 1ce533c6..8a295cbb 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt @@ -1,30 +1,18 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.findClass +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideAirplaneIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "setIsAirplaneMode", - XposedHelpers.findClass( - "com.android.systemui.statusbar.policy.NetworkController\$IconState", - lpparam.classLoader - ), - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_airplane_icon", false)) { - param.result = null - } - } - }) + val iconState = "com.android.systemui.statusbar.policy.NetworkController\$IconState".findClass(lpparam.classLoader) + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "setIsAirplaneMode", iconState) { + hasEnable("hide_airplane_icon") { + it.result = null + } + } } } \ No newline at end of file From 309d5742bbd6e3b00d3e3a790a8c12ce35b9ab7c Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:39:52 +0800 Subject: [PATCH 10/38] update EzXHelper --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index db38abd8..c9fc6d67 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -66,6 +66,6 @@ implementation("androidx.constraintlayout:constraintlayout:2.1.3") implementation("com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}") implementation("com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}") - implementation("com.github.kyuubiran:EzXHelper:0.7.3") + implementation("com.github.kyuubiran:EzXHelper:0.7.4") } \ No newline at end of file From cd14f89364e8cd98e463d82d56e64665927a42e6 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:41:35 +0800 Subject: [PATCH 11/38] simplify HideAlarmIcon.kt --- .../hook/app/systemui/HideAlarmIcon.kt | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAlarmIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAlarmIcon.kt index eadce529..519a03de 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAlarmIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAlarmIcon.kt @@ -1,26 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideAlarmIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "onMiuiAlarmChanged", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_alarm_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy".hookBeforeMethod(lpparam.classLoader, "onMiuiAlarmChanged") { + hasEnable("hide_alarm_icon") { + it.result = null + } + } } } \ No newline at end of file From ab01423fa512228594e41175f5505c012045cf1c Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:51:24 +0800 Subject: [PATCH 12/38] simplify HideBatteryIcon.kt --- .../hook/app/systemui/HideBatteryIcon.kt | 95 ++++++------------- 1 file changed, 27 insertions(+), 68 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBatteryIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBatteryIcon.kt index d2717fa4..3a66f813 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBatteryIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBatteryIcon.kt @@ -4,82 +4,41 @@ import android.view.View import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.getObjectField +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideBatteryIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.views.MiuiBatteryMeterView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateResources", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - - //隐藏电池图标 - if (XSPUtils.getBoolean("hide_battery_icon", false)) { - val mBatteryIconView = XposedHelpers.getObjectField( - param.thisObject, - "mBatteryIconView" - ) as ImageView - mBatteryIconView.visibility = View.GONE - - if (XposedHelpers.getObjectField(param.thisObject, "mBatteryStyle") == 1) { - (XposedHelpers.getObjectField( - param.thisObject, - "mBatteryDigitalView" - ) as FrameLayout).visibility = View.GONE - } - - } - //隐藏电池内的百分比 - if (XSPUtils.getBoolean("hide_battery_percentage_icon", false)) { - val mBatteryPercentMarkView = XposedHelpers.getObjectField( - param.thisObject, - "mBatteryPercentMarkView" - ) as TextView - mBatteryPercentMarkView.textSize = 0F - } - - //隐藏电池百分号 - if (XSPUtils.getBoolean("hide_battery_percentage_icon", false)) { - val mBatteryPercentMarkView = XposedHelpers.getObjectField( - param.thisObject, - "mBatteryPercentMarkView" - ) as TextView - mBatteryPercentMarkView.textSize = 0F - } - - - - - XposedHelpers.findAndHookMethod(classIfExists,"updateChargeAndText",object :XC_MethodHook(){ - override fun afterHookedMethod(param: MethodHookParam) { - //隐藏电池充电图标 - if (XSPUtils.getBoolean("hide_battery_charging_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mBatteryChargingInView" - ) as ImageView).visibility = View.GONE - - (XposedHelpers.getObjectField( - param.thisObject, - "mBatteryChargingView" - ) as ImageView).visibility = View.GONE - - } - } - }) + "com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(lpparam.classLoader, "updateResources") { + //隐藏电池图标 + hasEnable("hide_battery_icon") { + (it.thisObject.getObjectField("mBatteryIconView") as ImageView).visibility = View.GONE + if (it.thisObject.getObjectField("mBatteryStyle") == 1) { + (it.thisObject.getObjectField("mBatteryDigitalView") as FrameLayout).visibility = View.GONE } - }) + } + //隐藏电池内的百分比 + hasEnable("hide_battery_percentage_icon") { + (it.thisObject.getObjectField("mBatteryPercentMarkView") as TextView).textSize = 0F + } + //隐藏电池百分号 + hasEnable("hide_battery_percentage_icon") { + (it.thisObject.getObjectField("mBatteryPercentMarkView") as TextView).textSize = 0F + } + + "com.android.systemui.statusbar.views.MiuiBatteryMeterView".hookAfterMethod(lpparam.classLoader, "updateChargeAndText") { + //隐藏电池充电图标 + hasEnable("hide_battery_charging_icon") { + (it.thisObject.getObjectField("mBatteryChargingInView") as ImageView).visibility = View.GONE + (it.thisObject.getObjectField("mBatteryChargingView") as ImageView).visibility = View.GONE + } + } + } } } \ No newline at end of file From 793c04916f97d2fc0e10e1a779dcaa2377e88a1c Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:54:38 +0800 Subject: [PATCH 13/38] simplify HideBluetoothHandsfreeBatteryIcon.kt --- .../HideBluetoothHandsfreeBatteryIcon.kt | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothHandsfreeBatteryIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothHandsfreeBatteryIcon.kt index 3b038dc6..c8be5c9f 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothHandsfreeBatteryIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothHandsfreeBatteryIcon.kt @@ -1,28 +1,17 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.content.Intent -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideBluetoothHandsfreeBatteryIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateBluetoothHandsfreeBattery", - Intent::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_bluetooth_battery_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy".hookBeforeMethod(lpparam.classLoader, "updateBluetoothHandsfreeBattery", Intent::class.java) { + hasEnable("hide_bluetooth_battery_icon") { + it.result = null + } + } } } \ No newline at end of file From 3becebbdce006e69e54313c3083f925bebd6bd28 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:56:14 +0800 Subject: [PATCH 14/38] simplify HideBluetoothIcon.kt --- .../hook/app/systemui/HideBluetoothIcon.kt | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothIcon.kt index 4e51d50c..27149c31 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideBluetoothIcon.kt @@ -1,27 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideBluetoothIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateBluetooth", - String::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_bluetooth_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy".hookBeforeMethod(lpparam.classLoader, "updateBluetooth", String::class.java) { + hasEnable("hide_bluetooth_icon") { + it.result = null + } + } } } \ No newline at end of file From 94f6613735973c44ac533df04ca34261be441f02 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 18:58:04 +0800 Subject: [PATCH 15/38] simplify HideGPSIcon.kt --- .../hook/app/systemui/HideGPSIcon.kt | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideGPSIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideGPSIcon.kt index ab6de7d5..c0d8e6a4 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideGPSIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideGPSIcon.kt @@ -1,26 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideGPSIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateLocationFromController", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_gps_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy".hookBeforeMethod(lpparam.classLoader, "updateLocationFromController") { + hasEnable("hide_gps_icon") { + it.result = null + } + } } } \ No newline at end of file From 97c8307447d3f61ece56ffe0bcaeb40b0eb12e53 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 19:02:01 +0800 Subject: [PATCH 16/38] Update HideAirplaneIcon.kt --- .../simplicitytools/hook/app/systemui/HideAirplaneIcon.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt index 8a295cbb..f514062a 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideAirplaneIcon.kt @@ -1,6 +1,5 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.findClass import com.lt2333.simplicitytools.util.hasEnable import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage @@ -8,7 +7,7 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage class HideAirplaneIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val iconState = "com.android.systemui.statusbar.policy.NetworkController\$IconState".findClass(lpparam.classLoader) + val iconState = "com.android.systemui.statusbar.policy.NetworkController\$IconState" "com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "setIsAirplaneMode", iconState) { hasEnable("hide_airplane_icon") { it.result = null From f39208fdfe9204d83c28fd413890af82b027d429 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 19:06:09 +0800 Subject: [PATCH 17/38] simplify HideHDIcon.kt --- .../hook/app/systemui/HideHDIcon.kt | 91 ++++++------------- 1 file changed, 26 insertions(+), 65 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHDIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHDIcon.kt index 7faf1e9f..73b6101f 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHDIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHDIcon.kt @@ -2,76 +2,37 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.view.View import android.widget.ImageView -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.getObjectField +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideHDIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.StatusBarMobileView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "initViewState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_big_hd_icon", false)) { - val bigHd = XposedHelpers.getObjectField( - param.thisObject, - "mVolte" - ) as ImageView - bigHd.visibility = View.GONE - } - if (XSPUtils.getBoolean("hide_small_hd_icon", false)) { - val smallHd = XposedHelpers.getObjectField( - param.thisObject, - "mSmallHd" - ) as ImageView - smallHd.visibility = View.GONE - } - if (XSPUtils.getBoolean("hide_hd_no_service_icon", false)) { - val volteNoService = XposedHelpers.getObjectField( - param.thisObject, - "mVolteNoService" - ) as ImageView - volteNoService.visibility = View.GONE - } - } - }) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_big_hd_icon", false)) { - val bigHd = XposedHelpers.getObjectField( - param.thisObject, - "mVolte" - ) as ImageView - bigHd.visibility = View.GONE - } - if (XSPUtils.getBoolean("hide_small_hd_icon", false)) { - val smallHd = XposedHelpers.getObjectField( - param.thisObject, - "mSmallHd" - ) as ImageView + val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { + hasEnable("hide_big_hd_icon") { + (it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE + } + hasEnable("hide_small_hd_icon") { + (it.thisObject.getObjectField("mSmallHd") as ImageView).visibility = View.GONE + } + hasEnable("hide_hd_no_service_icon") { + (it.thisObject.getObjectField("mVolteNoService") as ImageView).visibility = View.GONE + } + } - smallHd.visibility = View.GONE - } - if (XSPUtils.getBoolean("hide_hd_no_service_icon", false)) { - val volteNoService = XposedHelpers.getObjectField( - param.thisObject, - "mVolteNoService" - ) as ImageView - volteNoService.visibility = View.GONE - } - } - }) + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { + hasEnable("hide_big_hd_icon") { + (it.thisObject.getObjectField("mVolte") as ImageView).visibility = View.GONE + } + hasEnable("hide_small_hd_icon") { + (it.thisObject.getObjectField("mSmallHd") as ImageView).visibility = View.GONE + } + hasEnable("hide_hd_no_service_icon") { + (it.thisObject.getObjectField("mVolteNoService") as ImageView).visibility = View.GONE + } + } } } \ No newline at end of file From 6ba5a349964e88865c8a4cd0c59ac930e19d28fd Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 19:08:10 +0800 Subject: [PATCH 18/38] simplify HideHeadsetIcon.kt --- .../hook/app/systemui/HideHeadsetIcon.kt | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHeadsetIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHeadsetIcon.kt index 1427b06d..afe73820 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHeadsetIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHeadsetIcon.kt @@ -1,28 +1,17 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.content.Intent -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideHeadsetIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateHeadsetPlug", - Intent::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_headset_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy".hookBeforeMethod(lpparam.classLoader, "updateHeadsetPlug", Intent::class.java) { + hasEnable("hide_headset_icon") { + it.result = null + } + } } } \ No newline at end of file From 6d8f78a99702b042fa2f3e0581c2a8b0997965f9 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 19:10:04 +0800 Subject: [PATCH 19/38] simplify HideHotspotIcon.kt --- .../hook/app/systemui/HideHotspotIcon.kt | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHotspotIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHotspotIcon.kt index 79f16c53..c07837f6 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHotspotIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideHotspotIcon.kt @@ -1,27 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideHotspotIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy\$2", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "onHotspotChanged", - Boolean::class.java, Int::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_hotspot_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.PhoneStatusBarPolicy\$2".hookBeforeMethod(lpparam.classLoader, "onHotspotChanged", Boolean::class.java, Int::class.java) { + hasEnable("hide_hotspot_icon") { + it.result = null + } + } } } \ No newline at end of file From 032d6e54854c24066c9f2a9155dc03513e707b47 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 19:12:32 +0800 Subject: [PATCH 20/38] simplify HideNoSimIcon.kt --- .../hook/app/systemui/HideNoSimIcon.kt | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideNoSimIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideNoSimIcon.kt index d5119918..815e08e4 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideNoSimIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideNoSimIcon.kt @@ -1,28 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideNoSimIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "setNoSims", - Boolean::class.javaPrimitiveType, - Boolean::class.javaPrimitiveType, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_no_sim_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "setNoSims", Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType) { + hasEnable("hide_no_sim_icon") { + it.result = null + } + } } } \ No newline at end of file From 56a308d7c51dce0e7bf0350180e0c3dd2d47490b Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:37:56 +0800 Subject: [PATCH 21/38] Update XSPUtils.kt --- .../main/java/com/lt2333/simplicitytools/util/XSPUtils.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt b/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt index 8d0e4bc2..9b5521e1 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/util/XSPUtils.kt @@ -20,8 +20,9 @@ object XSPUtils { } } -inline fun hasEnable(key: String, default: Boolean = false, crossinline block: () -> Unit) { - if (XSPUtils.getBoolean(key, default)) { +inline fun hasEnable(key: String, default: Boolean = false, noinline extraCondition: (() -> Boolean)? = null, crossinline block: () -> Unit) { + val conditionResult = if (extraCondition != null) extraCondition() else true + if (XSPUtils.getBoolean(key, default) && conditionResult) { block() } } From a38e80978b3d1fb34967e2dd560ead528e42c674 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:41:16 +0800 Subject: [PATCH 22/38] simplify HideSimIcon.kt --- .../hook/app/systemui/HideSimIcon.kt | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSimIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSimIcon.kt index 93449073..f7232b1f 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSimIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSimIcon.kt @@ -1,32 +1,21 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideSimIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "hasCorrectSubs", MutableList::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - val list = param.args[0] as MutableList<*> - val size = list.size - - if (size == 2 && XSPUtils.getBoolean("hide_sim_two_icon", false)) { - list.removeAt(1) - } - if (size >= 1 && XSPUtils.getBoolean("hide_sim_one_icon", false)) { - list.removeAt(0) - } - } - }) + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "hasCorrectSubs", MutableList::class.java) { + val list = it.args[0] as MutableList<*> + val size = list.size + hasEnable("hide_sim_two_icon", extraCondition = { size == 2 }) { + list.removeAt(1) + } + hasEnable("hide_sim_one_icon", extraCondition = { size >= 1 }) { + list.removeAt(0) + } + } } } \ No newline at end of file From a16b8ffbb91006051370f63e00e972c3b4cd3383 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:49:57 +0800 Subject: [PATCH 23/38] simplify HideMobileActivityIcon.kt --- .../app/systemui/HideMobileActivityIcon.kt | 63 +++++-------------- 1 file changed, 16 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileActivityIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileActivityIcon.kt index de1d5fbf..e4bd96f2 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileActivityIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileActivityIcon.kt @@ -2,58 +2,27 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.view.View import android.widget.ImageView -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.getObjectField +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideMobileActivityIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.StatusBarMobileView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "initViewState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_mobile_activity_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mLeftInOut" - ) as ImageView).visibility = View.GONE - - (XposedHelpers.getObjectField( - param.thisObject, - "mRightInOut" - ) as ImageView).visibility = View.GONE - } - } - }) - - XposedHelpers.findAndHookMethod( - classIfExists, - "updateState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_mobile_activity_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mLeftInOut" - ) as ImageView).visibility = View.GONE - - (XposedHelpers.getObjectField( - param.thisObject, - "mRightInOut" - ) as ImageView).visibility = View.GONE - } - } - }) - + val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { + hasEnable("hide_mobile_activity_icon") { + (it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE + (it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE + } + } + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { + hasEnable("hide_mobile_activity_icon") { + (it.thisObject.getObjectField("mLeftInOut") as ImageView).visibility = View.GONE + (it.thisObject.getObjectField("mRightInOut") as ImageView).visibility = View.GONE + } + } } } \ No newline at end of file From 99b1b4fea82f108e3d37c381b8054a5af64ee158 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:53:30 +0800 Subject: [PATCH 24/38] simplify HideMobileTypeIcon.kt --- .../hook/app/systemui/HideMobileTypeIcon.kt | 75 +++++-------------- 1 file changed, 18 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt index 834920ae..43a1da14 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideMobileTypeIcon.kt @@ -3,68 +3,29 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.view.View import android.widget.ImageView import android.widget.TextView -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.getObjectField +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideMobileTypeIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.StatusBarMobileView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "initViewState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_mobile_type_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mMobileType" - ) as TextView).visibility = View.INVISIBLE - - (XposedHelpers.getObjectField( - param.thisObject, - "mMobileTypeImage" - ) as ImageView).visibility = View.INVISIBLE - - (XposedHelpers.getObjectField( - param.thisObject, - "mMobileTypeSingle" - ) as TextView).visibility = View.INVISIBLE - } - } - }) - - XposedHelpers.findAndHookMethod( - classIfExists, - "updateState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_mobile_type_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mMobileType" - ) as TextView).visibility = View.INVISIBLE - - (XposedHelpers.getObjectField( - param.thisObject, - "mMobileTypeImage" - ) as ImageView).visibility = View.INVISIBLE - - (XposedHelpers.getObjectField( - param.thisObject, - "mMobileTypeSingle" - ) as TextView).visibility = View.INVISIBLE - } - } - }) - + val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$MobileIconState" + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { + hasEnable("hide_mobile_type_icon") { + (it.thisObject.getObjectField("mMobileType") as TextView).visibility = View.INVISIBLE + (it.thisObject.getObjectField("mMobileTypeImage") as ImageView).visibility = View.INVISIBLE + (it.thisObject.getObjectField("mMobileTypeSingle") as TextView).visibility = View.INVISIBLE + } + } + "com.android.systemui.statusbar.StatusBarMobileView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { + hasEnable("hide_mobile_type_icon") { + (it.thisObject.getObjectField("mMobileType") as TextView).visibility = View.INVISIBLE + (it.thisObject.getObjectField("mMobileTypeImage") as ImageView).visibility = View.INVISIBLE + (it.thisObject.getObjectField("mMobileTypeSingle") as TextView).visibility = View.INVISIBLE + } + } } } \ No newline at end of file From ea81f68d2a7a7e93fd8d9d062cfe4c880020555a Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:57:36 +0800 Subject: [PATCH 25/38] simplify HideStatusBarNetworkSpeedSecond.kt --- .../HideStatusBarNetworkSpeedSecond.kt | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideStatusBarNetworkSpeedSecond.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideStatusBarNetworkSpeedSecond.kt index 0ff8c068..930beb00 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideStatusBarNetworkSpeedSecond.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideStatusBarNetworkSpeedSecond.kt @@ -1,32 +1,22 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod +import com.lt2333.simplicitytools.util.isNonNull import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideStatusBarNetworkSpeedSecond :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.views.NetworkSpeedView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "setNetworkSpeed", - String::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_status_bar_network_speed_second", false)) { - if (param.args[0] != null) { - param.args[0] = (param.args[0] as String) - .replace("/", "") - .replace("s", "") - .replace("'", "") - } - } + "com.android.systemui.statusbar.views.NetworkSpeedView".hookBeforeMethod(lpparam.classLoader, "setNetworkSpeed", String::class.java) { + hasEnable("hide_status_bar_network_speed_second") { + it.args[0].isNonNull { s -> + it.args[0] = (s as String) + .replace("/", "") + .replace("s", "") + .replace("'", "") } - }) + } + } } } \ No newline at end of file From 71e77733193b189aa6467fed799a42e3429042b8 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:57:45 +0800 Subject: [PATCH 26/38] simplify HideSlaveWifiIcon.kt --- .../hook/app/systemui/HideSlaveWifiIcon.kt | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSlaveWifiIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSlaveWifiIcon.kt index 51830678..c589aaa6 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSlaveWifiIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideSlaveWifiIcon.kt @@ -1,26 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideSlaveWifiIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.policy.SlaveWifiSignalController", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateIconState", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_slave_wifi_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.policy.SlaveWifiSignalController".hookBeforeMethod(lpparam.classLoader, "updateIconState") { + hasEnable("hide_slave_wifi_icon") { + it.result = null + } + } } } \ No newline at end of file From c766de062e51fb6fff9c17dc67b7d476b64c3216 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:59:01 +0800 Subject: [PATCH 27/38] simplify HideVolumeZenIcon.kt --- .../hook/app/systemui/HideVolumeZenIcon.kt | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVolumeZenIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVolumeZenIcon.kt index 8101b1b4..4eef22f5 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVolumeZenIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVolumeZenIcon.kt @@ -1,26 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideVolumeZenIcon :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateVolumeZen", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_volume_zen_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy".hookBeforeMethod(lpparam.classLoader, "updateVolumeZen") { + hasEnable("hide_volume_zen_icon") { + it.result = null + } + } } } \ No newline at end of file From 5e7a70348eca46f06bc9b3341e54e45f021cb331 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 21:59:57 +0800 Subject: [PATCH 28/38] simplify HideVpnIcon.kt --- .../hook/app/systemui/HideVpnIcon.kt | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVpnIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVpnIcon.kt index 266bd10b..5bbf6224 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVpnIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideVpnIcon.kt @@ -1,26 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideVpnIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateVpn", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_vpn_icon", false)) { - param.result = null - } - } - }) + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "updateVpn") { + hasEnable("hide_vpn_icon") { + it.result = null + } + } } } \ No newline at end of file From 395833053bcc4df5103b5e038a224c19d5075f6c Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:01:07 +0800 Subject: [PATCH 29/38] simplify HideWifiIcon.kt --- .../hook/app/systemui/HideWifiIcon.kt | 29 +++++-------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiIcon.kt index 6ca9c89d..fc7aaa88 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiIcon.kt @@ -1,30 +1,17 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideWifiIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "updateWifiIconWithState", - XposedHelpers.findClass( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState", - lpparam.classLoader - ), - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("hide_wifi_icon", false)) { - param.result = null - } - } - }) + val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState" + "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy".hookBeforeMethod(lpparam.classLoader, "updateWifiIconWithState", iconState) { + hasEnable("hide_wifi_icon") { + it.result = null + } + } } } \ No newline at end of file From 4224d57c62475a24cd138dbc6e1b50e98a5a2389 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:05:25 +0800 Subject: [PATCH 30/38] simplify HideWifiActivityIcon.kt --- .../hook/app/systemui/HideWifiActivityIcon.kt | 81 ++++++------------- 1 file changed, 24 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiActivityIcon.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiActivityIcon.kt index 014246a8..8e759c18 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiActivityIcon.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/HideWifiActivityIcon.kt @@ -3,68 +3,35 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.view.View import android.widget.ImageView import android.widget.TextView -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.getObjectField +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class HideWifiActivityIcon : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.StatusBarWifiView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "initViewState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - //隐藏WIFI箭头 - if (XSPUtils.getBoolean("hide_wifi_activity_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mWifiActivityView" - ) as ImageView).visibility = View.INVISIBLE - } - - //隐藏WIFI标准图标 - if (XSPUtils.getBoolean("hide_wifi_standard_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mWifiStandardView" - ) as TextView).visibility = View.INVISIBLE - } - } - }) - - XposedHelpers.findAndHookMethod( - classIfExists, - "updateState", - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - //隐藏WIFI箭头 - if (XSPUtils.getBoolean("hide_wifi_activity_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mWifiActivityView" - ) as ImageView).visibility = View.INVISIBLE - } - - //隐藏WIFI标准图标 - if (XSPUtils.getBoolean("hide_wifi_standard_icon", false)) { - (XposedHelpers.getObjectField( - param.thisObject, - "mWifiStandardView" - ) as TextView).visibility = View.INVISIBLE - } - - } - }) - - + val iconState = "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState" + "com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(lpparam.classLoader, "initViewState", iconState) { + //隐藏WIFI箭头 + hasEnable("hide_wifi_activity_icon") { + (it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE + } + //隐藏WIFI标准图标 + hasEnable("hide_wifi_standard_icon") { + (it.thisObject.getObjectField("mWifiStandardView") as TextView).visibility = View.INVISIBLE + } + } + "com.android.systemui.statusbar.StatusBarWifiView".hookAfterMethod(lpparam.classLoader, "updateState", iconState) { + //隐藏WIFI箭头 + hasEnable("hide_wifi_activity_icon") { + (it.thisObject.getObjectField("mWifiActivityView") as ImageView).visibility = View.INVISIBLE + } + //隐藏WIFI标准图标 + hasEnable("hide_wifi_standard_icon") { + (it.thisObject.getObjectField("mWifiStandardView") as TextView).visibility = View.INVISIBLE + } + } } } \ No newline at end of file From 04245abed4506bae037012dc40887c0b78086cf5 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:09:21 +0800 Subject: [PATCH 31/38] simplify RemoveTheMaximumNumberOfNotificationIcons.kt --- ...moveTheMaximumNumberOfNotificationIcons.kt | 53 ++++++------------- 1 file changed, 17 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheMaximumNumberOfNotificationIcons.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheMaximumNumberOfNotificationIcons.kt index fb8d8d09..33b2b39a 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheMaximumNumberOfNotificationIcons.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheMaximumNumberOfNotificationIcons.kt @@ -1,46 +1,27 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.callMethod +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.replaceMethod +import com.lt2333.simplicitytools.util.setIntField import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodReplacement -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class RemoveTheMaximumNumberOfNotificationIcons : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - if (XSPUtils.getBoolean("remove_the_maximum_number_of_notification_icons", false)) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.NotificationIconContainer", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "miuiShowNotificationIcons", - Boolean::class.java, - object : XC_MethodReplacement() { - override fun replaceHookedMethod(param: MethodHookParam) { - - if (param.args[0] as Boolean) { - XposedHelpers.setIntField(param.thisObject, "MAX_DOTS", 30) - XposedHelpers.setIntField(param.thisObject, "MAX_STATIC_ICONS", 30) - XposedHelpers.setIntField( - param.thisObject, - "MAX_VISIBLE_ICONS_ON_LOCK", - 30 - ) - } else { - XposedHelpers.setIntField(param.thisObject, "MAX_DOTS", 0) - XposedHelpers.setIntField(param.thisObject, "MAX_STATIC_ICONS", 0) - XposedHelpers.setIntField( - param.thisObject, - "MAX_VISIBLE_ICONS_ON_LOCK", - 0 - ) - } - - XposedHelpers.callMethod(param.thisObject, "updateState") - } - }) + hasEnable("remove_the_maximum_number_of_notification_icons") { + "com.android.systemui.statusbar.phone.NotificationIconContainer".replaceMethod(lpparam.classLoader, "miuiShowNotificationIcons", Boolean::class.java) { + if (it.args[0] as Boolean) { + it.thisObject.setIntField("MAX_DOTS", 30) + it.thisObject.setIntField("MAX_STATIC_ICONS", 30) + it.thisObject.setIntField("MAX_VISIBLE_ICONS_ON_LOCK", 30) + } else { + it.thisObject.setIntField("MAX_DOTS", 0) + it.thisObject.setIntField("MAX_STATIC_ICONS", 0) + it.thisObject.setIntField("MAX_VISIBLE_ICONS_ON_LOCK", 0) + } + it.thisObject.callMethod("updateState") + } } } } \ No newline at end of file From d3b022135feea4beb2ff38ba580c60202e84d86d Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:10:39 +0800 Subject: [PATCH 32/38] simplify StatusBarNetworkSpeedRefreshSpeed.kt --- .../StatusBarNetworkSpeedRefreshSpeed.kt | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarNetworkSpeedRefreshSpeed.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarNetworkSpeedRefreshSpeed.kt index 400d57da..7b91bb00 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarNetworkSpeedRefreshSpeed.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarNetworkSpeedRefreshSpeed.kt @@ -1,27 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class StatusBarNetworkSpeedRefreshSpeed :IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.policy.NetworkSpeedController", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "postUpdateNetworkSpeedDelay", - Long::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("status_bar_network_speed_refresh_speed", false)) { - param.args[0] = 1000L - } - } - }) + "com.android.systemui.statusbar.policy.NetworkSpeedController".hookBeforeMethod(lpparam.classLoader, "postUpdateNetworkSpeedDelay", Long::class.java) { + hasEnable("status_bar_network_speed_refresh_speed") { + it.args[0] = 1000L + } + } } } \ No newline at end of file From 76156cbf684d4b49d46dba17bef8add45aa96d7e Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:15:30 +0800 Subject: [PATCH 33/38] simplify RemoveTheLeftSideOfTheLockScreen.kt --- .../RemoveTheLeftSideOfTheLockScreen.kt | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheLeftSideOfTheLockScreen.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheLeftSideOfTheLockScreen.kt index cd146a8e..986e1cf7 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheLeftSideOfTheLockScreen.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveTheLeftSideOfTheLockScreen.kt @@ -1,26 +1,16 @@ package com.lt2333.simplicitytools.hook.app.systemui -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class RemoveTheLeftSideOfTheLockScreen : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists, - "inflateLeftView", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_the_left_side_of_the_lock_screen", false)) { - param.result = null - } - } - }) + "com.android.keyguard.negative.MiuiKeyguardMoveLeftViewContainer".hookBeforeMethod(lpparam.classLoader, "inflateLeftView") { + hasEnable("remove_the_left_side_of_the_lock_screen") { + it.result = null + } + } } } \ No newline at end of file From 72e0cf88d5b632d24a035df9874538601d2de438 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:19:22 +0800 Subject: [PATCH 34/38] simplify RemoveLockScreenCamera.kt --- .../app/systemui/RemoveLockScreenCamera.kt | 68 ++++++------------- 1 file changed, 19 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveLockScreenCamera.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveLockScreenCamera.kt index 7549cdc9..8416d89e 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveLockScreenCamera.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/RemoveLockScreenCamera.kt @@ -2,64 +2,34 @@ package com.lt2333.simplicitytools.hook.app.systemui import android.view.View import android.widget.LinearLayout -import com.lt2333.simplicitytools.util.XSPUtils +import com.lt2333.simplicitytools.util.getObjectField +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookAfterMethod +import com.lt2333.simplicitytools.util.hookBeforeMethod import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class RemoveLockScreenCamera : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { //屏蔽右下角组件显示 - val classIfExists1 = XposedHelpers.findClassIfExists( - "com.android.systemui.statusbar.phone.KeyguardBottomAreaView", - lpparam.classLoader - ) - XposedHelpers.findAndHookMethod( - classIfExists1, - "onFinishInflate", - object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_lock_screen_camera", false)) { - val view = XposedHelpers.getObjectField( - param.thisObject, - "mRightAffordanceViewLayout" - ) as LinearLayout - view.visibility = View.GONE - } - } - }) - + "com.android.systemui.statusbar.phone.KeyguardBottomAreaView".hookAfterMethod(lpparam.classLoader, "onFinishInflate") { + hasEnable("remove_lock_screen_camera") { + (it.thisObject.getObjectField("mRightAffordanceViewLayout") as LinearLayout).visibility = View.GONE + } + } //屏蔽滑动撞墙动画 - val classIfExists2 = XposedHelpers.findClassIfExists( - "com.android.keyguard.KeyguardMoveRightController", - lpparam.classLoader - ) - - XposedHelpers.findAndHookMethod( - classIfExists2, - "onTouchMove", - Float::class.java, - Float::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_lock_screen_camera", false)) { - param.result = false - } - } - }) - XposedHelpers.findAndHookMethod( - classIfExists2, - "reset", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (XSPUtils.getBoolean("remove_lock_screen_camera", false)) { - param.result = null - } - } - }) + "com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(lpparam.classLoader, "onTouchMove", Float::class.java, Float::class.java) { + hasEnable("remove_lock_screen_camera") { + it.result = false + } + } + "com.android.keyguard.KeyguardMoveRightController".hookBeforeMethod(lpparam.classLoader, "reset") { + hasEnable("remove_lock_screen_camera") { + it.result = null + } + } } } From 3dc5170bb809c23f0c88f2fed2a12badd13704b2 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:35:13 +0800 Subject: [PATCH 35/38] simplify NotificationWeather.kt --- .../hook/app/systemui/NotificationWeather.kt | 113 +++++------------- 1 file changed, 31 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/NotificationWeather.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/NotificationWeather.kt index 44b80bdf..d75ea7fa 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/NotificationWeather.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/NotificationWeather.kt @@ -6,110 +6,59 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import android.widget.Toast -import com.lt2333.simplicitytools.util.XSPUtils +import com.github.kyuubiran.ezxhelper.utils.loadClass +import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.view.WeatherView import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class NotificationWeather : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + hasEnable("notification_weather") { + var mWeatherView: TextView? = null + val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) + "com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod(lpparam.classLoader, "onFinishInflate") { + val viewGroup = it.thisObject as ViewGroup + val context = viewGroup.context + val layoutParam = loadClass("androidx.constraintlayout.widget.ConstraintLayout\$LayoutParams") + .getConstructor(Int::class.java, Int::class.java).newInstance( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) as ViewGroup.MarginLayoutParams + layoutParam.setObjectField("bottomToTop", context.resources.getIdentifier("date_time", "id", context.packageName)) + layoutParam.setObjectField("startToEnd", context.resources.getIdentifier("big_time", "id", context.packageName)) - var mWeatherView: TextView? = null - - if (!XSPUtils.getBoolean("notification_weather", false)) return - - val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) - - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.qs.MiuiNotificationHeaderView", - lpparam.classLoader - ) - - XposedHelpers.findAndHookMethod(classIfExists, "onFinishInflate", object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - val viewGroup = param.thisObject as ViewGroup - - val layout = XposedHelpers.findClass( - "androidx.constraintlayout.widget.ConstraintLayout\$LayoutParams", - lpparam.classLoader - ).getConstructor(Int::class.java, Int::class.java).newInstance( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) as ViewGroup.MarginLayoutParams - - XposedHelpers.setObjectField( - layout, - "bottomToTop", - viewGroup.context.resources.getIdentifier( - "date_time", - "id", - viewGroup.context.packageName - ) + layoutParam.marginStart = context.resources.getDimensionPixelSize( + context.resources.getIdentifier("notification_panel_time_date_space", "dimen", context.packageName) ) - XposedHelpers.setObjectField( - layout, - "startToEnd", - viewGroup.context.resources.getIdentifier( - "big_time", - "id", - viewGroup.context.packageName - ) - ) - - layout.marginStart = viewGroup.context.resources.getDimensionPixelSize( - viewGroup.context.resources.getIdentifier( - "notification_panel_time_date_space", - "dimen", - viewGroup.context.packageName - ) - ) - - mWeatherView = WeatherView(viewGroup.context, isDisplayCity).also { - it.setTextAppearance( - viewGroup.context.resources.getIdentifier( - "TextAppearance.QSControl.Date", - "style", - viewGroup.context.packageName - ) - ) - it.layoutParams = layout + mWeatherView = WeatherView(context, isDisplayCity).apply { + setTextAppearance(context.resources.getIdentifier("TextAppearance.QSControl.Date", "style", context.packageName)) + layoutParams = layoutParam } viewGroup.addView(mWeatherView) (mWeatherView as WeatherView).setOnClickListener { try { - val intent = Intent() - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK - intent.component = ComponentName( - "com.miui.weather2", - "com.miui.weather2.ActivityWeatherMain" - ) - viewGroup.context.startActivity(intent) + val intent = Intent().apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK + component = ComponentName("com.miui.weather2", "com.miui.weather2.ActivityWeatherMain") + } + context.startActivity(intent) } catch (e: Exception) { - Toast.makeText(viewGroup.context, "启动失败", Toast.LENGTH_LONG).show() + Toast.makeText(context, "启动失败", Toast.LENGTH_LONG).show() } } } - }) - //解决横屏重叠 - XposedHelpers.findAndHookMethod(classIfExists, "updateLayout", object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - super.afterHookedMethod(param) - val mOrientation = - XposedHelpers.getObjectField(param.thisObject, "mOrientation") as Int + //解决横屏重叠 + "com.android.systemui.qs.MiuiNotificationHeaderView".hookAfterMethod(lpparam.classLoader, "updateLayout") { + val mOrientation = it.thisObject.getObjectField("mOrientation") as Int if (mOrientation == 1) { mWeatherView!!.visibility = View.VISIBLE } else { mWeatherView!!.visibility = View.GONE } } - }) - - + } } - -} - +} \ No newline at end of file From 8587984a88934f46ca0d6463623b88868a850a04 Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 22:48:40 +0800 Subject: [PATCH 36/38] simplify OldNotificationWeather.kt --- .../app/systemui/OldNotificationWeather.kt | 109 +++++------------- 1 file changed, 28 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/OldNotificationWeather.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/OldNotificationWeather.kt index ab0d49af..22c7f0f5 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/OldNotificationWeather.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/OldNotificationWeather.kt @@ -6,108 +6,55 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import android.widget.Toast -import com.lt2333.simplicitytools.util.XSPUtils +import com.github.kyuubiran.ezxhelper.utils.loadClass +import com.lt2333.simplicitytools.util.* import com.lt2333.simplicitytools.view.WeatherView import de.robv.android.xposed.IXposedHookLoadPackage -import de.robv.android.xposed.XC_MethodHook -import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage class OldNotificationWeather : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + hasEnable("notification_weather") { + var mWeatherView: TextView? = null + val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) + "com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod(lpparam.classLoader, "onFinishInflate") { + val viewGroup = it.thisObject as ViewGroup + val context = viewGroup.context + val layoutParam = loadClass("androidx.constraintlayout.widget.ConstraintLayout\$LayoutParams") + .getConstructor(Int::class.java, Int::class.java) + .newInstance(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) as ViewGroup.MarginLayoutParams - var mWeatherView: TextView? = null + layoutParam.setObjectField("engToStart", context.resources.getIdentifier("notification_shade_shortcut", "id", context.packageName)) + layoutParam.setObjectField("topToTop", context.resources.getIdentifier("notification_shade_shortcut", "id", context.packageName)) + layoutParam.setObjectField("bottomToBottom", context.resources.getIdentifier("notification_shade_shortcut", "id", context.packageName)) - if (!XSPUtils.getBoolean("notification_weather", false)) return - - val isDisplayCity = XSPUtils.getBoolean("notification_weather_city", false) - - val classIfExists = XposedHelpers.findClassIfExists( - "com.android.systemui.qs.MiuiQSHeaderView", - lpparam.classLoader - ) - - XposedHelpers.findAndHookMethod(classIfExists, "onFinishInflate", object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - val viewGroup = param.thisObject as ViewGroup - - val layout = XposedHelpers.findClass( - "androidx.constraintlayout.widget.ConstraintLayout\$LayoutParams", - lpparam.classLoader - ).getConstructor(Int::class.java, Int::class.java).newInstance( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT - ) as ViewGroup.MarginLayoutParams - - XposedHelpers.setObjectField( - layout, - "endToStart", - viewGroup.context.resources.getIdentifier( - "notification_shade_shortcut", - "id", - viewGroup.context.packageName - ) - ) - - XposedHelpers.setObjectField( - layout, - "topToTop", - viewGroup.context.resources.getIdentifier( - "notification_shade_shortcut", - "id", - viewGroup.context.packageName - ) - ) - XposedHelpers.setObjectField( - layout, - "bottomToBottom", - viewGroup.context.resources.getIdentifier( - "notification_shade_shortcut", - "id", - viewGroup.context.packageName - ) - ) - - - mWeatherView = WeatherView(viewGroup.context,isDisplayCity).also { - it.setTextAppearance( - viewGroup.context.resources.getIdentifier( - "TextAppearance.StatusBar.Expanded.Clock.QuickSettingDate", - "style", - viewGroup.context.packageName - ) - ) - it.layoutParams = layout + mWeatherView = WeatherView(context, isDisplayCity).apply { + setTextAppearance(context.resources.getIdentifier("TextAppearance.StatusBar.Expanded.Clock.QuickSettingDate", "style", context.packageName)) + layoutParams = layoutParam } viewGroup.addView(mWeatherView) (mWeatherView as WeatherView).setOnClickListener { try { - val intent = Intent() - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK - intent.component = ComponentName( - "com.miui.weather2", - "com.miui.weather2.ActivityWeatherMain" - ) - viewGroup.context.startActivity(intent) + val intent = Intent().apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK + component = ComponentName("com.miui.weather2", "com.miui.weather2.ActivityWeatherMain") + } + context.startActivity(intent) } catch (e: Exception) { - Toast.makeText(viewGroup.context, "启动失败,可能是不支持", Toast.LENGTH_LONG).show() + Toast.makeText(context, "启动失败,可能是不支持", Toast.LENGTH_LONG).show() } } } - }) - //解决横屏重叠 - XposedHelpers.findAndHookMethod(classIfExists, "updateLayout", object : XC_MethodHook() { - override fun afterHookedMethod(param: MethodHookParam) { - super.afterHookedMethod(param) - val mOrientation = - XposedHelpers.getObjectField(param.thisObject, "mOrientation") as Int - if (mOrientation == 1) { + //解决横屏重叠 + "com.android.systemui.qs.MiuiQSHeaderView".hookAfterMethod(lpparam.classLoader, "updateLayout") { + val mOritation = it.thisObject.getObjectField("mOrientation") as Int + if (mOritation == 1) { mWeatherView!!.visibility = View.VISIBLE } else { mWeatherView!!.visibility = View.GONE } } - }) + } } } From 93ea0a5f2ab2e89dc7433bae1f2d82d83dba28da Mon Sep 17 00:00:00 2001 From: QQ littleice <1767523953@qq.com> Date: Thu, 10 Mar 2022 23:21:27 +0800 Subject: [PATCH 37/38] fix RemoveSmallWindowRestrictions.kt --- .../hook/app/android/RemoveSmallWindowRestrictions.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt index 5cfbd9d3..860e5934 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/android/RemoveSmallWindowRestrictions.kt @@ -18,13 +18,13 @@ class RemoveSmallWindowRestrictions : IXposedHookLoadPackage { "android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackList") { hasEnable("remove_small_window_restrictions") { - it.result = (it.result as MutableList<*>).clear() + it.result = (it.result as MutableList<*>).apply { clear() } } } "android.util.MiuiMultiWindowAdapter".hookAfterMethod(lpparam.classLoader, "getFreeformBlackListFromCloud") { hasEnable("remove_small_window_restrictions") { - it.result = (it.result as MutableList<*>).clear() + it.result = (it.result as MutableList<*>).apply { clear() } } } From 9609ab37828b450042d195dba2d38467ff4758ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=8C=E5=A0=86=E5=B0=8F=E9=80=8F=E6=98=8E?= Date: Thu, 10 Mar 2022 23:30:45 +0800 Subject: [PATCH 38/38] Update `app/build.gradle.kts` --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c9fc6d67..5376b8cf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,12 +56,12 @@ android { } dependencies { -implementation("androidx.constraintlayout:constraintlayout:2.1.3") - // implementation("androidx.constraintlayout:constraintlayout:2.1.3") + implementation("androidx.constraintlayout:constraintlayout:2.1.3") //API compileOnly("de.robv.android.xposed:api:82") //UI implementation(project(":blockmiui")) + val appCenterSdkVersion = "4.3.1" implementation("com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}") implementation("com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}")