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