From 987f33b584bbfe021392ad90909c7ba10e3769ce 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: Wed, 16 Mar 2022 16:18:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A1=8C=E9=9D=A2=E5=8F=8C?= =?UTF-8?q?=E5=87=BB=E9=94=81=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/SettingsActivity.kt | 58 +++++++++++++------ .../simplicitytools/hook/app/MiuiHome.kt | 3 + .../hook/app/miuihome/DoubleTapController.kt | 50 ++++++++++++++++ .../hook/app/miuihome/DoubleTapToSleep.kt | 53 +++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 5 files changed, 148 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapController.kt create mode 100644 app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapToSleep.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 2b175ed2..8eb04730 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -455,25 +455,39 @@ class SettingsActivity : MIUIActivity() { SwitchV("remove_small_window_restrictions") ) ) - add(TextSummaryArrowV(TextSummaryV(textId = R.string.max_wallpaper_scale, onClickListener = { - MIUIDialog(activity).apply { - setTitle(R.string.max_wallpaper_scale) - setEditText("", "${activity.getString(R.string.def)}1.1, ${activity.getString(R.string.current)}${OwnSP.ownSP.getFloat("max_wallpaper_scale", 1.1f)}") - setLButton(textId = R.string.cancel) { - dismiss() - } - setRButton(textId = R.string.Done) { - if (getEditText() != "") { - OwnSP.ownSP.edit().run { - putFloat("max_wallpaper_scale", getEditText().toFloat()) - apply() + add( + TextSummaryArrowV( + TextSummaryV( + textId = R.string.max_wallpaper_scale, + onClickListener = { + MIUIDialog(activity).apply { + setTitle(R.string.max_wallpaper_scale) + setEditText( + "", + "${activity.getString(R.string.def)}1.1, ${activity.getString(R.string.current)}${ + OwnSP.ownSP.getFloat( + "max_wallpaper_scale", + 1.1f + ) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + OwnSP.ownSP.edit().run { + putFloat("max_wallpaper_scale", getEditText().toFloat()) + apply() + } + } + dismiss() + } + show() } - } - dismiss() - } - show() - } - }))) + }) + ) + ) } } @@ -840,6 +854,14 @@ class SettingsActivity : MIUIActivity() { ), SwitchV("home_time") ) ) + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.double_tap_to_sleep, + tipsId = R.string.home_double_tap_to_sleep_summary + ), SwitchV("double_tap_to_sleep") + ) + ) add(LineV()) add(TitleTextV(resId = R.string.scope_powerkeeper)) add( diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt index 2f05a0b5..b70d56a3 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/MiuiHome.kt @@ -1,6 +1,7 @@ package com.lt2333.simplicitytools.hook.app import com.lt2333.simplicitytools.hook.app.miuihome.AlwaysDisplayTime +import com.lt2333.simplicitytools.hook.app.miuihome.DoubleTapToSleep import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam @@ -10,5 +11,7 @@ class MiuiHome : IXposedHookLoadPackage { XposedBridge.log("Simplicitytools: 成功 Hook "+javaClass.simpleName) //时钟显示时钟 AlwaysDisplayTime().handleLoadPackage(lpparam) + //双击锁屏 + DoubleTapToSleep().handleLoadPackage(lpparam) } } \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapController.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapController.kt new file mode 100644 index 00000000..d5dfe31e --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapController.kt @@ -0,0 +1,50 @@ +package com.yuk.miuihome.module + +import android.content.Context +import android.os.SystemClock +import android.view.MotionEvent +import android.view.ViewConfiguration +import kotlin.math.abs + +class DoubleTapController internal constructor(mContext: Context) { + + private val maxDuration: Long = 500 + private var mActionDownRawX: Float = 0f + private var mActionDownRawY: Float = 0f + private var mClickCount: Int = 0 + private var mFirstClickRawX: Float = 0f + private var mFirstClickRawY: Float = 0f + private var mLastClickTime: Long = 0 + private val mTouchSlop: Int = ViewConfiguration.get(mContext).scaledTouchSlop * 2 + fun isDoubleTapEvent(motionEvent: MotionEvent): Boolean { + val action = motionEvent.actionMasked + return when { + action == MotionEvent.ACTION_DOWN -> { + mActionDownRawX = motionEvent.rawX + mActionDownRawY = motionEvent.rawY + false + } + action != MotionEvent.ACTION_UP -> false + else -> { + val rawX = motionEvent.rawX + val rawY = motionEvent.rawY + if (abs(rawX - mActionDownRawX) <= mTouchSlop.toFloat() && abs(rawY - mActionDownRawY) <= mTouchSlop.toFloat()) { + if (SystemClock.elapsedRealtime() - mLastClickTime > maxDuration || rawY - mFirstClickRawY > mTouchSlop.toFloat() || rawX - mFirstClickRawX > mTouchSlop.toFloat()) mClickCount = 0 + mClickCount++ + if (mClickCount == 1) { + mFirstClickRawX = rawX + mFirstClickRawY = rawY + mLastClickTime = SystemClock.elapsedRealtime() + return false + } else if (abs(rawY - mFirstClickRawY) <= mTouchSlop.toFloat() && abs(rawX - mFirstClickRawX) <= mTouchSlop.toFloat() && SystemClock.elapsedRealtime() - mLastClickTime <= maxDuration + ) { + mClickCount = 0 + return true + } + } + mClickCount = 0 + false + } + } + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapToSleep.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapToSleep.kt new file mode 100644 index 00000000..58c27a56 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/miuihome/DoubleTapToSleep.kt @@ -0,0 +1,53 @@ +package com.lt2333.simplicitytools.hook.app.miuihome + +import android.content.Context +import android.content.Intent +import android.view.MotionEvent +import com.lt2333.simplicitytools.util.* +import com.yuk.miuihome.module.DoubleTapController +import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XposedHelpers +import de.robv.android.xposed.callbacks.XC_LoadPackage + +class DoubleTapToSleep : IXposedHookLoadPackage { + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + hasEnable("double_tap_to_sleep") { + "com.miui.home.launcher.Workspace".findClass(lpparam.classLoader) + .hookAfterAllConstructors { + var mDoubleTapControllerEx = + XposedHelpers.getAdditionalInstanceField( + it.thisObject, + "mDoubleTapControllerEx" + ) + if (mDoubleTapControllerEx != null) return@hookAfterAllConstructors + mDoubleTapControllerEx = DoubleTapController((it.args[0] as Context)) + XposedHelpers.setAdditionalInstanceField( + it.thisObject, + "mDoubleTapControllerEx", + mDoubleTapControllerEx + ) + } + + "com.miui.home.launcher.Workspace".findClass(lpparam.classLoader).hookBeforeMethod( + "dispatchTouchEvent", MotionEvent::class.java + ) { + val mDoubleTapControllerEx = XposedHelpers.getAdditionalInstanceField( + it.thisObject, + "mDoubleTapControllerEx" + ) as DoubleTapController + if (!mDoubleTapControllerEx.isDoubleTapEvent(it.args[0] as MotionEvent)) return@hookBeforeMethod + val mCurrentScreenIndex = it.thisObject.getIntField("mCurrentScreenIndex") + val cellLayout = it.thisObject.callMethod("getCellLayout", mCurrentScreenIndex) + if (cellLayout != null) if (cellLayout.callMethod("lastDownOnOccupiedCell") as Boolean) return@hookBeforeMethod + if (it.thisObject.callMethod("isInNormalEditingMode") as Boolean) return@hookBeforeMethod + val context = it.thisObject.callMethod("getContext") as Context + context.sendBroadcast( + Intent("com.miui.app.ExtraStatusBarManager.action_TRIGGER_TOGGLE").putExtra( + "com.miui.app.ExtraStatusBarManager.extra_TOGGLE_ID", + 10 + ) + ) + } + } + } +} \ 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 1f34eff3..98854764 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -163,4 +163,6 @@ Hide Volume icon Hide ZEN icon Hide Icon + Double tap to sleep + Double-tap on an empty space on the home to sleep