新增时钟显秒

This commit is contained in:
LittleTurtle2333
2022-02-17 01:44:52 +08:00
parent c21a82d8ad
commit fa518a0116
2 changed files with 223 additions and 151 deletions

View File

@@ -10,8 +10,8 @@ android {
applicationId "com.lt2333.simplicitytools" applicationId "com.lt2333.simplicitytools"
minSdk 30 minSdk 30
targetSdk 32 targetSdk 32
versionCode 3 versionCode 4
versionName "1.0.2" versionName "1.0.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

View File

@@ -1,12 +1,21 @@
package com.lt2333.simplicitytools.hook.app package com.lt2333.simplicitytools.hook.app
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Handler
import android.provider.Settings
import android.util.AttributeSet
import android.util.Log import android.util.Log
import android.widget.TextView
import com.lt2333.simplicitytools.BuildConfig import com.lt2333.simplicitytools.BuildConfig
import com.lt2333.simplicitytools.hook.MainHook import com.lt2333.simplicitytools.hook.MainHook
import de.robv.android.xposed.* import de.robv.android.xposed.*
import de.robv.android.xposed.XC_MethodHook.MethodHookParam import de.robv.android.xposed.XC_MethodHook.MethodHookParam
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam
import java.lang.reflect.Method
import java.text.SimpleDateFormat
import java.util.*
class SystemUI : IXposedHookLoadPackage { class SystemUI : IXposedHookLoadPackage {
@@ -16,207 +25,207 @@ class SystemUI : IXposedHookLoadPackage {
//隐藏无SIM卡图标 //隐藏无SIM卡图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy",
lpparam.classLoader, lpparam.classLoader,
"setNoSims", "setNoSims",
Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType,
Boolean::class.javaPrimitiveType, Boolean::class.javaPrimitiveType,
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_no_sim_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_no_sim_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏VPN图标 //隐藏VPN图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader, "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"updateVpn", "updateVpn",
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_vpn_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_vpn_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏飞行模式图标 //隐藏飞行模式图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", "com.android.systemui.statusbar.phone.StatusBarSignalPolicy",
lpparam.classLoader, lpparam.classLoader,
"setIsAirplaneMode", "setIsAirplaneMode",
XposedHelpers.findClass( XposedHelpers.findClass(
"com.android.systemui.statusbar.policy.NetworkController\$IconState", "com.android.systemui.statusbar.policy.NetworkController\$IconState",
lpparam.classLoader lpparam.classLoader
), ),
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_airplane_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_airplane_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏WIFI图标 //隐藏WIFI图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy", "com.android.systemui.statusbar.phone.MiuiStatusBarSignalPolicy",
lpparam.classLoader, lpparam.classLoader,
"updateWifiIconWithState", "updateWifiIconWithState",
XposedHelpers.findClass( XposedHelpers.findClass(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState", "com.android.systemui.statusbar.phone.StatusBarSignalPolicy\$WifiIconState",
lpparam.classLoader lpparam.classLoader
), ),
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_wifi_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_wifi_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏蓝牙图标 //隐藏蓝牙图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader, lpparam.classLoader,
"updateBluetooth", "updateBluetooth",
String::class.java, String::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_bluetooth_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_bluetooth_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏 声音、勿扰 图标 //隐藏 声音、勿扰 图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader, lpparam.classLoader,
"updateVolumeZen", "updateVolumeZen",
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_volume_zen_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_volume_zen_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏 闹钟 图标 //隐藏 闹钟 图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader, lpparam.classLoader,
"onMiuiAlarmChanged", "onMiuiAlarmChanged",
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_alarm_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_alarm_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏 耳机 图标 //隐藏 耳机 图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader, lpparam.classLoader,
"updateHeadsetPlug", "updateHeadsetPlug",
Intent::class.java, Intent::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_headset_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_headset_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏 蓝牙电量 图标 //隐藏 蓝牙电量 图标
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy", "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy",
lpparam.classLoader, lpparam.classLoader,
"updateBluetoothHandsfreeBattery", "updateBluetoothHandsfreeBattery",
Intent::class.java, Intent::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_bluetooth_battery_icon", false)) {
param.result = null
}
} }
}) if (prefs.getBoolean("hide_bluetooth_battery_icon", false)) {
param.result = null
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
//隐藏卡一卡二 //隐藏卡一卡二
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader, "com.android.systemui.statusbar.phone.StatusBarSignalPolicy", lpparam.classLoader,
"hasCorrectSubs", MutableList::class.java, "hasCorrectSubs", MutableList::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() 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)
}
} }
}) 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) { } catch (e: Exception) {
XposedBridge.log(e) XposedBridge.log(e)
} }
@@ -225,21 +234,84 @@ class SystemUI : IXposedHookLoadPackage {
//隐藏HD //隐藏HD
try { try {
XposedHelpers.findAndHookMethod( XposedHelpers.findAndHookMethod(
"com.android.systemui.statusbar.policy.MobileSignalController", lpparam.classLoader, "com.android.systemui.statusbar.policy.MobileSignalController", lpparam.classLoader,
"setVolte", Boolean::class.java, "setVolte", Boolean::class.java,
object : XC_MethodHook() { object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) { override fun beforeHookedMethod(param: MethodHookParam) {
if (prefs.hasFileChanged()) { if (prefs.hasFileChanged()) {
prefs.reload() prefs.reload()
}
if (prefs.getBoolean("hide_hd_icon", false)) {
param.args[0] = false
}
} }
}) if (prefs.getBoolean("hide_hd_icon", false)) {
param.args[0] = false
}
}
})
} catch (e: Exception) { } catch (e: Exception) {
XposedBridge.log(e) 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)
}
}
})
}
} }
} }