From e32718eedfc033f576def6e31bcd8587b81fcddc Mon Sep 17 00:00:00 2001 From: LinW_ <59436976+LinWhite2333@users.noreply.github.com> Date: Tue, 5 Apr 2022 19:23:54 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=81=E5=B1=8F=E6=97=B6=E9=92=9F=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E7=A7=92=E6=95=B0=20(#132)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 锁屏时钟显示秒数 * 锁屏时钟显示秒数 * 锁屏时钟显示秒数 --- .../activity/SettingsActivity.kt | 9 ++ .../simplicitytools/hook/app/SystemUI.kt | 1 + .../systemui/LockScreenClockDisplaySeconds.kt | 112 ++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 123 insertions(+) create mode 100644 app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenClockDisplaySeconds.kt diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt index d80b9ea9..f66664ca 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -1315,6 +1315,15 @@ class SettingsActivity : MIUIActivity() { add(LineV()) add(TitleTextV(resId = R.string.lock_screen)) + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.lock_screen_clock_display_seconds, + tipsId = R.string.only_official_default_themes_are_supported + ), + SwitchV("lock_screen_clock_display_seconds") + ) + ) add( TextSummaryWithSwitchV( TextSummaryV( 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 f0fddaca..53387bf4 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 @@ -41,6 +41,7 @@ object SystemUI: AppRegister() { StatusBarBigMobileTypeIcon, //大移动类型 BatteryPercentage, //电量百分比 CustomMobileTypeText, //自定义移动类型文本 + LockScreenClockDisplaySeconds, // 锁屏时钟显示秒 ) } } \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenClockDisplaySeconds.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenClockDisplaySeconds.kt new file mode 100644 index 00000000..019f32af --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenClockDisplaySeconds.kt @@ -0,0 +1,112 @@ +package com.lt2333.simplicitytools.hook.app.systemui + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Handler +import android.provider.Settings +import android.util.AttributeSet +import android.util.Log +import android.widget.LinearLayout +import android.widget.TextView +import com.lt2333.simplicitytools.util.* +import com.lt2333.simplicitytools.util.xposed.base.HookRegister +import de.robv.android.xposed.XC_MethodHook +import java.lang.reflect.Method +import java.text.SimpleDateFormat +import java.util.* + +object LockScreenClockDisplaySeconds : HookRegister() { + + private var nowTime: Date = Calendar.getInstance().time + + override fun init() { + hasEnable("lock_screen_clock_display_seconds") { + "com.miui.clock.MiuiBaseClock".findClass(getDefaultClassLoader()) + .hookAfterConstructor( + Context::class.java, + AttributeSet::class.java + ) { + try { + val viewGroup = it.thisObject as LinearLayout + + val d: Method = viewGroup.javaClass.getDeclaredMethod("updateTime") + val r = Runnable { + d.isAccessible = true + d.invoke(viewGroup) + } + + class T : TimerTask() { + override fun run() { + Handler(viewGroup.context.mainLooper).post(r) + } + } + Timer().scheduleAtFixedRate( + T(), + 1000 - System.currentTimeMillis() % 1000, + 1000 + ) + } catch (e: java.lang.Exception) { + } + } + "com.miui.clock.MiuiLeftTopClock".hookAfterMethod( + getDefaultClassLoader(), + "updateTime" + ) { + updateTime(it, false) + } + + "com.miui.clock.MiuiLeftTopLargeClock".hookAfterMethod( + getDefaultClassLoader(), + "updateTime" + ) { + updateTime(it, false) + } + + "com.miui.clock.MiuiCenterHorizontalClock".hookAfterMethod( + getDefaultClassLoader(), + "updateTime" + ) { + updateTime(it, false) + } + + "com.miui.clock.MiuiVerticalClock".hookAfterMethod( + getDefaultClassLoader(), + "updateTime" + ) { + updateTime(it, true) + } + } + } + + private fun updateTime(it: XC_MethodHook.MethodHookParam, isVertical: Boolean) { + val textV = it.thisObject.getObjectField("mTimeText") as TextView + val c: Context = textV.context + + Log.d( + "lock_screen_clock_display_seconds", + "updateTime: " + it.thisObject.javaClass.simpleName + ) + val is24 = Settings.System.getString( + c.contentResolver, + Settings.System.TIME_12_24 + ) == "24" + + nowTime = Calendar.getInstance().time + + textV.text = getTime(is24, isVertical) + + } + + + @SuppressLint("SimpleDateFormat") + private fun getTime(is24: Boolean, isVertical: Boolean): String { + var timePattern = "" + if (isVertical) { //垂直 + timePattern += if (is24) "HH\nmm\nss" else "hh\nmm\nss" + } else { //水平 + timePattern += if (is24) "HH:mm:ss" else "h:mm:ss" + } + timePattern = SimpleDateFormat(timePattern).format(nowTime) + return timePattern + } +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b93d290..0c94969d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -213,4 +213,5 @@ Enhanced Mode Pass some validation in the application Rear Display (11Ultra) + Lock screen clock display seconds