Add SleepMethodSystem SleepGestureHandler

This commit is contained in:
Yasan Ghaffarian
2022-12-19 15:42:42 +03:30
parent aabd4b2162
commit db5d280df9
@@ -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)