mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-13 03:41:19 +08:00
更新1个系统界面Hooker
This commit is contained in:
@@ -2,12 +2,23 @@ package com.lt2333.simplicitytools.hooks.apps
|
|||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
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() {
|
object SystemUIHooker : YukiBaseHooker() {
|
||||||
override fun onHook() {
|
override fun onHook() {
|
||||||
when (Build.VERSION.SDK_INT) {
|
when (Build.VERSION.SDK_INT) {
|
||||||
Build.VERSION_CODES.TIRAMISU -> {
|
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 -> {
|
Build.VERSION_CODES.S -> {
|
||||||
|
|||||||
@@ -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<TextView>()
|
||||||
|
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<TextView>()
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user