diff --git a/manager/src/main/AndroidManifest.xml b/manager/src/main/AndroidManifest.xml
index 1ba125d..9ff9eba 100644
--- a/manager/src/main/AndroidManifest.xml
+++ b/manager/src/main/AndroidManifest.xml
@@ -7,6 +7,7 @@
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
+
R.string.settings_keep_alive to R.string.off
+ Configs.KeepAlive.FOREGROUND -> R.string.settings_keep_alive_foreground to R.string.settings_keep_alive_foreground_desc
+ }
+ SettingsItem(
+ icon = Icons.Outlined.HourglassEmpty,
+ title = stringResource(title),
+ desc = stringResource(desc)
+ )
+ }
+ ) {
+ DropdownMenuItem(
+ text = { Text(stringResource(R.string.off)) },
+ onClick = { Configs.keepAlive = Configs.KeepAlive.OFF }
+ )
+ DropdownMenuItem(
+ text = { Text(stringResource(R.string.settings_keep_alive_foreground)) },
+ onClick = { Configs.keepAlive = Configs.KeepAlive.FOREGROUND }
+ )
+ }
+}
diff --git a/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt b/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt
index 09efbff..7aedd3c 100644
--- a/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/util/LSPPackageManager.kt
@@ -83,8 +83,7 @@ object LSPPackageManager {
var message: String? = null
withContext(Dispatchers.IO) {
runCatching {
- val params = PackageInstaller.SessionParams::class.java.getConstructor(Int::class.javaPrimitiveType)
- .newInstance(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
+ val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
var flags = HiddenApiBridge.PackageInstaller_SessionParams_installFlags(params)
flags = flags or 0x00000004 /* PackageManager.INSTALL_ALLOW_TEST */ or 0x00000002 /* PackageManager.INSTALL_REPLACE_EXISTING */
HiddenApiBridge.PackageInstaller_SessionParams_installFlags(params, flags)
diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml
index d71ae10..4571138 100644
--- a/manager/src/main/res/values/strings.xml
+++ b/manager/src/main/res/values/strings.xml
@@ -11,6 +11,7 @@
Shizuku service not connected
Repo
Logs
+ Off
Some functions unavailable
@@ -87,4 +88,7 @@
Wrong alias name
Wrong alias password
Detail patch logs
+ Keep alive
+ Foreground
+ Create a notification to keep manager alive
diff --git a/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java b/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java
index e080de6..44f4626 100644
--- a/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java
+++ b/patch-loader/src/main/java/org/lsposed/lspatch/service/RemoteApplicationService.java
@@ -60,7 +60,6 @@ public class RemoteApplicationService implements ILSPApplicationService {
}
};
Log.i(TAG, "Request manager binder");
- context.startService(intent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
context.bindService(intent, Context.BIND_AUTO_CREATE, Executors.newSingleThreadExecutor(), conn);
} else {
@@ -74,7 +73,7 @@ public class RemoteApplicationService implements ILSPApplicationService {
var userHandle = (UserHandle) getUserMethod.invoke(context);
bindServiceAsUserMethod.invoke(context, intent, conn, Context.BIND_AUTO_CREATE, handler, userHandle);
}
- boolean success = latch.await(5, TimeUnit.SECONDS);
+ boolean success = latch.await(1, TimeUnit.SECONDS);
if (!success) throw new TimeoutException("Bind service timeout");
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InterruptedException | TimeoutException e) {
Toast.makeText(context, "Manager died", Toast.LENGTH_SHORT).show();