From dfd1c660f522cf627fa2691c3bbd1304c6fb5405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=8C=E5=A0=86=E5=B0=8F=E9=80=8F=E6=98=8E?= Date: Thu, 17 Mar 2022 19:34:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=8A=B6=E6=80=81=E6=A0=8FDT?= =?UTF-8?q?2S?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/SettingsActivity.kt | 8 ++- .../simplicitytools/hook/app/SystemUI.kt | 2 + .../app/systemui/StatusBarDoubleTapToSleep.kt | 68 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarDoubleTapToSleep.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 bde6dfa0..8cea75e1 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -532,7 +532,13 @@ class SettingsActivity : MIUIActivity() { SwitchV("remove_the_maximum_number_of_notification_icons") ) ) - + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.double_tap_to_sleep + ), SwitchV("status_bar_double_tap_to_sleep") + ) + ) add(LineV()) add(TitleTextV(resId = R.string.status_bar_layout)) add( 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 45a0c1e9..74208192 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 @@ -52,6 +52,8 @@ class SystemUI : IXposedHookLoadPackage { LockScreenCurrent().handleLoadPackage(lpparam) //锁屏下双击锁屏 LockScreenDoubleTapToSleep().handleLoadPackage(lpparam) + //双击状态栏锁屏 + StatusBarDoubleTapToSleep().handleLoadPackage(lpparam) } } diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarDoubleTapToSleep.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarDoubleTapToSleep.kt new file mode 100644 index 00000000..8ea39374 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/StatusBarDoubleTapToSleep.kt @@ -0,0 +1,68 @@ +package com.lt2333.simplicitytools.hook.app.systemui + +import android.annotation.SuppressLint +import android.content.Context +import android.os.SystemClock +import android.view.MotionEvent +import android.view.View.OnTouchListener +import android.view.ViewGroup +import com.lt2333.simplicitytools.util.findClass +import com.lt2333.simplicitytools.util.hasEnable +import com.lt2333.simplicitytools.util.hookBeforeMethod +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LoadPackage + +class StatusBarDoubleTapToSleep : IXposedHookLoadPackage { + @SuppressLint("ClickableViewAccessibility") + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + hasEnable("status_bar_double_tap_to_sleep") { + "com.android.systemui.statusbar.phone.MiuiPhoneStatusBarView".findClass( + lpparam.classLoader + ).hookBeforeMethod( + "onFinishInflate" + ) { + val view = it.thisObject as ViewGroup + XposedHelpers.setAdditionalInstanceField(view, "currentTouchTime", 0L) + XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", 0f) + XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", 0f) + view.setOnTouchListener(OnTouchListener { v, event -> + if (event.action != MotionEvent.ACTION_DOWN) return@OnTouchListener false + var currentTouchTime = + XposedHelpers.getAdditionalInstanceField(view, "currentTouchTime") as Long + var currentTouchX = + XposedHelpers.getAdditionalInstanceField(view, "currentTouchX") as Float + var currentTouchY = + XposedHelpers.getAdditionalInstanceField(view, "currentTouchY") as Float + val lastTouchTime = currentTouchTime + val lastTouchX = currentTouchX + val lastTouchY = currentTouchY + currentTouchTime = System.currentTimeMillis() + currentTouchX = event.x + currentTouchY = event.y + if (currentTouchTime - lastTouchTime < 250L && Math.abs(currentTouchX - lastTouchX) < 100f && Math.abs( + currentTouchY - lastTouchY + ) < 100f + ) { + XposedHelpers.callMethod( + v.context.getSystemService(Context.POWER_SERVICE), + "goToSleep", + SystemClock.uptimeMillis() + ) + currentTouchTime = 0L + currentTouchX = 0f + currentTouchY = 0f + } + XposedHelpers.setAdditionalInstanceField( + view, + "currentTouchTime", + currentTouchTime + ) + XposedHelpers.setAdditionalInstanceField(view, "currentTouchX", currentTouchX) + XposedHelpers.setAdditionalInstanceField(view, "currentTouchY", currentTouchY) + false + }) + } + } + } +} \ No newline at end of file