diff --git a/README.md b/README.md index ccdc8200..aebad7b6 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Xposed仓库下载:[点击此处下载最新发行版](https://github.com/Xpos ##### GNU General Public License v3.0 [qqlittleice/MiuiHome](https://github.com/qqlittleice/MiuiHome) [yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming) +[Mikanoshi/CustoMIUIzer](https://code.highspec.ru/Mikanoshi/CustoMIUIzer) ##### GNU General Public License v2.0 [LSPosed/CorePatch](https://github.com/LSPosed/CorePatch) ##### GNU Lesser General Public License v2.1 diff --git a/README_EN.md b/README_EN.md index 6dc50956..b09ed8a1 100644 --- a/README_EN.md +++ b/README_EN.md @@ -40,11 +40,12 @@ Xposed Repo:[Click here to download the latest release](https://github.com/Xpo ## Third party open source references ##### GNU General Public License v3.0 [qqlittleice/MiuiHome](https://github.com/qqlittleice/MiuiHome) -[yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming) +[yujincheng08/BiliRoaming](https://github.com/yujincheng08/BiliRoaming) +[Mikanoshi/CustoMIUIzer](https://code.highspec.ru/Mikanoshi/CustoMIUIzer) ##### GNU General Public License v2.0 -[LSPosed/CorePatch](https://github.com/LSPosed/CorePatch) +[LSPosed/CorePatch](https://github.com/LSPosed/CorePatch) ##### GNU Lesser General Public License v2.1 -[577fkj/blockmiui](https://github.com/577fkj/blockmiui) +[577fkj/blockmiui](https://github.com/577fkj/blockmiui) --- 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 10e6b7f5..bde6dfa0 100644 --- a/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/SettingsActivity.kt @@ -803,7 +803,6 @@ class SettingsActivity : MIUIActivity() { add(LineV()) add(TitleTextV(resId = R.string.lock_screen)) - add( TextSummaryWithSwitchV( TextSummaryV( @@ -839,6 +838,14 @@ class SettingsActivity : MIUIActivity() { SwitchV("lock_screen_charging_current") ) ) + add( + TextSummaryWithSwitchV( + TextSummaryV( + textId = R.string.double_tap_to_sleep, + tipsId = R.string.home_double_tap_to_sleep_summary + ), SwitchV("lock_screen_double_tap_to_sleep") + ) + ) } } 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 9a184ac0..45a0c1e9 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 @@ -50,6 +50,8 @@ class SystemUI : IXposedHookLoadPackage { WaveCharge().handleLoadPackage(lpparam) //锁屏电流 LockScreenCurrent().handleLoadPackage(lpparam) + //锁屏下双击锁屏 + LockScreenDoubleTapToSleep().handleLoadPackage(lpparam) } } 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 index d5dfe31e..96e361a3 100644 --- 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 @@ -29,7 +29,8 @@ class DoubleTapController internal constructor(mContext: Context) { 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 + if (SystemClock.elapsedRealtime() - mLastClickTime > maxDuration || rawY - mFirstClickRawY > mTouchSlop.toFloat() || rawX - mFirstClickRawX > mTouchSlop.toFloat()) mClickCount = + 0 mClickCount++ if (mClickCount == 1) { mFirstClickRawX = rawX diff --git a/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenDoubleTapToSleep.kt b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenDoubleTapToSleep.kt new file mode 100644 index 00000000..163d6337 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hook/app/systemui/LockScreenDoubleTapToSleep.kt @@ -0,0 +1,71 @@ +package com.lt2333.simplicitytools.hook.app.systemui + +import android.annotation.SuppressLint +import android.app.KeyguardManager +import android.content.Context +import android.os.SystemClock +import android.view.MotionEvent +import android.view.View +import android.view.View.OnTouchListener +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 LockScreenDoubleTapToSleep : IXposedHookLoadPackage { + @SuppressLint("ClickableViewAccessibility") + override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + hasEnable("lock_screen_double_tap_to_sleep") { + "com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer".findClass( + lpparam.classLoader + ).hookBeforeMethod("onFinishInflate") { + val view = it.thisObject as View + 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 + ) { + val keyguardMgr = + v.context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + if (keyguardMgr.isKeyguardLocked) { + 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