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