Add SleepMethodSystem SleepGestureHandler
This commit is contained in:
@@ -24,6 +24,8 @@ import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.PowerManager
|
||||
import android.os.SystemClock
|
||||
import android.provider.Settings
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.requiredWidth
|
||||
@@ -43,6 +45,8 @@ import app.lawnchair.util.requireSystemService
|
||||
import app.lawnchair.views.ComposeBottomSheet
|
||||
import com.android.launcher3.R
|
||||
import com.android.launcher3.Utilities
|
||||
import com.android.launcher3.util.PackageManagerHelper
|
||||
import java.lang.reflect.InvocationTargetException
|
||||
|
||||
class SleepGestureHandler(context: Context) : GestureHandler(context) {
|
||||
|
||||
@@ -51,6 +55,7 @@ class SleepGestureHandler(context: Context) : GestureHandler(context) {
|
||||
}
|
||||
|
||||
private val methods = listOf(
|
||||
SleepMethodSystem(context),
|
||||
SleepMethodRoot(context),
|
||||
SleepMethodPieAccessibility(context),
|
||||
SleepMethodDeviceAdmin(context)
|
||||
@@ -62,6 +67,29 @@ class SleepGestureHandler(context: Context) : GestureHandler(context) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows Lawnchair to sleep the device without any extra permissions when it is installed as a system app.
|
||||
*/
|
||||
class SleepMethodSystem(context: Context) : SleepGestureHandler.SleepMethod(context) {
|
||||
override suspend fun isSupported() = PackageManagerHelper.isSystemApp(context, context.packageName)
|
||||
|
||||
override suspend fun sleep(launcher: LawnchairLauncher) {
|
||||
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
try {
|
||||
powerManager.javaClass.getMethod(
|
||||
"goToSleep",
|
||||
*arrayOf<Class<*>?>(Long::class.javaPrimitiveType)
|
||||
).invoke(powerManager, SystemClock.uptimeMillis())
|
||||
} catch (e: IllegalAccessException) {
|
||||
e.printStackTrace()
|
||||
} catch (e: InvocationTargetException) {
|
||||
e.printStackTrace()
|
||||
} catch (e: NoSuchMethodException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SleepMethodRoot(context: Context) : SleepGestureHandler.SleepMethod(context) {
|
||||
private val rootHelperManager = RootHelperManager.INSTANCE.get(context)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user