mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-12 11:21:18 +08:00
新增时钟显秒
This commit is contained in:
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user