From 98876ddbd23ec219618e2e151ab5aa95aed62786 Mon Sep 17 00:00:00 2001 From: LittleTurtle2333 Date: Fri, 24 Feb 2023 16:49:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B01=E4=B8=AA=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=95=8C=E9=9D=A2Hooker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/apps/SystemUIHooker.kt | 13 +- .../StatusBarTimeCustomizationForT.kt | 120 ++++++++++++++++++ 2 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lt2333/simplicitytools/hooks/rules/t/systemui/StatusBarTimeCustomizationForT.kt diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt index ecf936a6..2d39206c 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt @@ -2,12 +2,23 @@ package com.lt2333.simplicitytools.hooks.apps import android.os.Build import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker -import com.lt2333.simplicitytools.hooks.rules.all.android.DisableFlagSecureForAll +import com.lt2333.simplicitytools.hooks.rules.t.systemui.* object SystemUIHooker : YukiBaseHooker() { override fun onHook() { when (Build.VERSION.SDK_INT) { Build.VERSION_CODES.TIRAMISU -> { + loadHooker(HideStatusBarIconForT) //隐藏状态栏图标 + loadHooker(HideBatteryIconForT) //隐藏电池 + loadHooker(HideHDIconForT) //隐藏HD图标 + loadHooker(HideSimIconForT) //隐藏SIM卡图标 + loadHooker(HideMobileActivityIconForT) //隐藏移动箭头图标 + loadHooker(HideMobileTypeIconForT) //隐藏移动类型图标 + loadHooker(HideStatusBarNetworkSpeedSecondForT) //隐藏状态栏网速/s + loadHooker(HideWifiActivityIconForT) //隐藏WIFI活动箭头图标 + loadHooker(MaximumNumberOfNotificationIconsForT) //通知图标上限 + loadHooker(StatusBarNetworkSpeedRefreshSpeedForT) //状态栏网速秒刷新 + loadHooker(StatusBarTimeCustomizationForT) //状态栏时钟自定义 } Build.VERSION_CODES.S -> { diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/t/systemui/StatusBarTimeCustomizationForT.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/t/systemui/StatusBarTimeCustomizationForT.kt new file mode 100644 index 00000000..44c61de3 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/t/systemui/StatusBarTimeCustomizationForT.kt @@ -0,0 +1,120 @@ +package com.lt2333.simplicitytools.hooks.rules.t.systemui + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Handler +import android.util.TypedValue +import android.widget.TextView +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker +import com.highcapable.yukihookapi.hook.factory.current +import com.lt2333.simplicitytools.utils.XSPUtils +import java.lang.reflect.Method +import java.util.Calendar +import java.util.Date +import java.util.Timer +import java.util.TimerTask + +object StatusBarTimeCustomizationForT : YukiBaseHooker() { + + private val getMode = XSPUtils.getInt("custom_clock_mode", 0) + private val getClockSize = XSPUtils.getInt("status_bar_clock_size", 0) + private val getClockDoubleSize = XSPUtils.getInt("status_bar_clock_double_line_size", 0) + private val isYear = XSPUtils.getBoolean("status_bar_time_year", false) + private val isMonth = XSPUtils.getBoolean("status_bar_time_month", false) + private val isDay = XSPUtils.getBoolean("status_bar_time_day", false) + private val isWeek = XSPUtils.getBoolean("status_bar_time_week", false) + private val isHideSpace = XSPUtils.getBoolean("status_bar_time_hide_space", false) + private val isDoubleLine = XSPUtils.getBoolean("status_bar_time_double_line", false) + private val isSecond = XSPUtils.getBoolean("status_bar_time_seconds", false) + private val isDoubleHour = XSPUtils.getBoolean("status_bar_time_double_hour", false) + private val isPeriod = XSPUtils.getBoolean("status_bar_time_period", true) + private val isCenterAlign = XSPUtils.getBoolean("status_bar_time_double_line_center_align", false) + + //极客模式 + private val getGeekClockSize = XSPUtils.getInt("status_bar_clock_size_geek", 0) + private val getGeekFormat = XSPUtils.getString("custom_clock_format_geek", "HH:mm:ss") + private val isGeekCenterAlign = XSPUtils.getBoolean("status_bar_time_center_align_geek", false) + + private lateinit var nowTime: Date + private var str = "" + + @SuppressLint("SetTextI18n") + override fun onHook() { + when (getMode) { + //预设模式 + 1 -> {} + //极客模式 + 2 -> { + var c: Context? = null + "com.android.systemui.statusbar.views.MiuiClock".hook { + injectMember { + constructor { paramCount = 3 } + afterHook { + try { + c = this.args[0] as Context + val textV = instance() + if (textV.resources.getResourceEntryName(textV.id) != "clock") return@afterHook + textV.isSingleLine = false + textV.setLineSpacing(0F, 0.8F) + if (getGeekClockSize != 0) { + val clockSize = getGeekClockSize.toFloat() + textV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, clockSize) + } + + 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) + } + } + Timer().scheduleAtFixedRate( + T(), 1000 - System.currentTimeMillis() % 1000, 1000 + ) + } catch (_: Exception) { + } + } + } + } + + "com.android.systemui.statusbar.views.MiuiClock".hook { + injectMember { + method { name = "updateTime" } + beforeHook { + try { + val textV = instance() + if (textV.resources.getResourceEntryName(textV.id) == "clock") { + val resultSb = StringBuilder() + val formatSb = StringBuilder(getGeekFormat.toString()) + + val mMiuiStatusBarClockController = + textV.current().field { name = "mMiuiStatusBarClockController" } + val mCalendar = + mMiuiStatusBarClockController.current()?.method { name = "getCalendar" }?.call() + mCalendar?.current { + method { + name = "setTimeInMillis" + paramCount = 1 + }.call(System.currentTimeMillis()) + method { + name = "format" + paramCount = 3 + returnType = StringBuilder::class.java + }.call(c, resultSb, formatSb) + } + textV.text = resultSb.toString() + resultNull() + } + } catch (_: Exception) { + } + } + } + } + } + } + } +} \ No newline at end of file