新增状态栏DT2S

This commit is contained in:
乌堆小透明
2022-03-17 19:34:29 +08:00
parent d431798808
commit dfd1c660f5
3 changed files with 77 additions and 1 deletions

View File

@ -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(

View File

@ -52,6 +52,8 @@ class SystemUI : IXposedHookLoadPackage {
LockScreenCurrent().handleLoadPackage(lpparam)
//锁屏下双击锁屏
LockScreenDoubleTapToSleep().handleLoadPackage(lpparam)
//双击状态栏锁屏
StatusBarDoubleTapToSleep().handleLoadPackage(lpparam)
}
}

View File

@ -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
})
}
}
}
}