diff --git a/app/build.gradle b/app/build.gradle index 801cd401..776a5c8c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.lt2333.simplicitytools" minSdk 30 targetSdk 32 - versionCode 3 - versionName "1.0.2" + versionCode 4 + versionName "1.0.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt index 4188b891..9568b910 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/SystemUI.kt @@ -1,12 +1,21 @@ package com.lt2333.simplicitytools.hook.app +import android.annotation.SuppressLint +import android.content.Context import android.content.Intent +import android.os.Handler +import android.provider.Settings +import android.util.AttributeSet import android.util.Log +import android.widget.TextView import com.lt2333.simplicitytools.BuildConfig import com.lt2333.simplicitytools.hook.MainHook import de.robv.android.xposed.* import de.robv.android.xposed.XC_MethodHook.MethodHookParam import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam +import java.lang.reflect.Method +import java.text.SimpleDateFormat +import java.util.* class SystemUI : IXposedHookLoadPackage { @@ -16,207 +25,207 @@ class SystemUI : IXposedHookLoadPackage { //隐藏无SIM卡图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", - lpparam.classLoader, - "setNoSims", - Boolean::class.javaPrimitiveType, - Boolean::class.javaPrimitiveType, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_no_sim_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", + lpparam.classLoader, + "setNoSims", + Boolean::class.javaPrimitiveType, + Boolean::class.javaPrimitiveType, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_no_sim_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏VPN图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader, - "updateVpn", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_vpn_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader, + "updateVpn", + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_vpn_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏飞行模式图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", - lpparam.classLoader, - "setIsAirplaneMode", - XposedHelpers.findClass( - "com.android.systemui.statusbar.policy.NetworkController\$IconState", - lpparam.classLoader - ), - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_airplane_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", + lpparam.classLoader, + "setIsAirplaneMode", + XposedHelpers.findClass( + "com.android.systemui.statusbar.policy.NetworkController\$IconState", + lpparam.classLoader + ), + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_airplane_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏WIFI图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", - lpparam.classLoader, - "updateWifiIconWithState", - XposedHelpers.findClass( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState", - lpparam.classLoader - ), - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_wifi_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", + lpparam.classLoader, + "updateWifiIconWithState", + XposedHelpers.findClass( + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState", + lpparam.classLoader + ), + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_wifi_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏蓝牙图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader, - "updateBluetooth", - String::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_bluetooth_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", + lpparam.classLoader, + "updateBluetooth", + String::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_bluetooth_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏 声音、勿扰 图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader, - "updateVolumeZen", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_volume_zen_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", + lpparam.classLoader, + "updateVolumeZen", + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_volume_zen_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏 闹钟 图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader, - "onMiuiAlarmChanged", - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_alarm_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", + lpparam.classLoader, + "onMiuiAlarmChanged", + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_alarm_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏 耳机 图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader, - "updateHeadsetPlug", - Intent::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_headset_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", + lpparam.classLoader, + "updateHeadsetPlug", + Intent::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_headset_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏 蓝牙电量 图标 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", - lpparam.classLoader, - "updateBluetoothHandsfreeBattery", - Intent::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_bluetooth_battery_icon", false)) { - param.result = null - } + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", + lpparam.classLoader, + "updateBluetoothHandsfreeBattery", + Intent::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_bluetooth_battery_icon", false)) { + param.result = null + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } //隐藏卡一卡二 try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader, - "hasCorrectSubs", MutableList::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - val list = param.args[0] as MutableList<*> - val size = list.size - - if (size == 2 && prefs.getBoolean("hide_sim_two_icon", false)) { - list.removeAt(1) - } - if (size >= 1 && prefs.getBoolean("hide_sim_one_icon", false)) { - list.removeAt(0) - } + "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader, + "hasCorrectSubs", MutableList::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + val list = param.args[0] as MutableList<*> + val size = list.size + + if (size == 2 && prefs.getBoolean("hide_sim_two_icon", false)) { + list.removeAt(1) + } + if (size >= 1 && prefs.getBoolean("hide_sim_one_icon", false)) { + list.removeAt(0) + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } @@ -225,21 +234,84 @@ class SystemUI : IXposedHookLoadPackage { //隐藏HD try { XposedHelpers.findAndHookMethod( - "com.android.systemui.statusbar.policy.MobileSignalController", lpparam.classLoader, - "setVolte", Boolean::class.java, - object : XC_MethodHook() { - override fun beforeHookedMethod(param: MethodHookParam) { - if (prefs.hasFileChanged()) { - prefs.reload() - } - if (prefs.getBoolean("hide_hd_icon", false)) { - param.args[0] = false - } + "com.android.systemui.statusbar.policy.MobileSignalController", lpparam.classLoader, + "setVolte", Boolean::class.java, + object : XC_MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + if (prefs.hasFileChanged()) { + prefs.reload() } - }) + if (prefs.getBoolean("hide_hd_icon", false)) { + param.args[0] = false + } + } + }) } catch (e: Exception) { XposedBridge.log(e) } + + //时钟显秒 + if (prefs.hasFileChanged()) { + prefs.reload() + } + if (prefs.getBoolean("statusbar_time_seconds", false)) { + var c: Context? = null + val classIfExists = XposedHelpers.findClassIfExists( + "com.android.systemui.statusbar.views.MiuiClock", + lpparam.classLoader + ) + XposedHelpers.findAndHookConstructor(classIfExists, + Context::class.java, + AttributeSet::class.java, + Integer.TYPE, + object : XC_MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + c = param.args[0] as Context + val textV = param.thisObject as TextView + val d: Method = textV.javaClass.getDeclaredMethod("updateTime") + val r = Runnable { + d.isAccessible = true + d.invoke(textV) + } + + class T : TimerTask() { + override fun run() { + Handler(textV.context.mainLooper).post(r) + } + } + if (textV.resources.getResourceEntryName(textV.id) == "clock") + Timer().scheduleAtFixedRate( + T(), + 1000 - System.currentTimeMillis() % 1000, + 1000 + ) + } + } + ) + XposedHelpers.findAndHookMethod(classIfExists, "updateTime", + object : XC_MethodHook() { + @SuppressLint("SetTextI18n", "SimpleDateFormat") + override fun afterHookedMethod(param: MethodHookParam) { + val textV = param.thisObject as TextView + if (textV.resources.getResourceEntryName(textV.id) == "clock") { + val t = Settings.System.getString( + c!!.contentResolver, + Settings.System.TIME_12_24 + ) + if (t == "24") + textV.text = + SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().time) + else + textV.text = + textV.text.toString() + SimpleDateFormat(":ss").format(Calendar.getInstance().time) + } + } + }) + + } + + } -} \ No newline at end of file + +}