From fad2cf306470f9e071c4394ec421868b73106df8 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Wed, 24 Feb 2021 20:21:26 +0800 Subject: [PATCH] [app] Add force stop and reboot --- .../github/lsposed/manager/ConfigManager.java | 20 +++++++++++++++++++ .../manager/adapters/ScopeAdapter.java | 15 ++++++++++++++ .../LSPosedManagerServiceClient.java | 10 ++++++++++ .../manager/ui/activity/AppListActivity.java | 2 +- app/src/main/res/menu/menu_app_item.xml | 6 ++++-- app/src/main/res/values-zh-rCN/strings.xml | 5 +++++ app/src/main/res/values/strings.xml | 5 +++++ .../lspd/service/ActivityManagerService.java | 6 ++++++ 8 files changed, 66 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/github/lsposed/manager/ConfigManager.java b/app/src/main/java/io/github/lsposed/manager/ConfigManager.java index 536b9f7b..7120f117 100644 --- a/app/src/main/java/io/github/lsposed/manager/ConfigManager.java +++ b/app/src/main/java/io/github/lsposed/manager/ConfigManager.java @@ -229,4 +229,24 @@ public class ConfigManager { throw new PackageManager.NameNotFoundException(); } } + + public static boolean forceStopPackage(String packageName, int userId) { + try { + LSPosedManagerServiceClient.forceStopPackage(packageName, userId); + return true; + } catch (RemoteException | NullPointerException e) { + Log.e(App.TAG, Log.getStackTraceString(e)); + return false; + } + } + + public static boolean reboot(boolean confirm, String reason, boolean wait) { + try { + LSPosedManagerServiceClient.reboot(confirm, reason, wait); + return true; + } catch (RemoteException | NullPointerException e) { + Log.e(App.TAG, Log.getStackTraceString(e)); + return false; + } + } } diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java index 3dcf5411..2e7e3255 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java @@ -327,6 +327,17 @@ public class ScopeAdapter extends RecyclerView.Adapter } } else if (itemId == R.id.menu_app_info) { activity.startActivity(new Intent(ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", info.packageName, null))); + } else if (itemId == R.id.menu_force_stop) { + if (info.packageName.equals("android")) { + ConfigManager.reboot(false, null, false); + } else { + new AlertDialog.Builder(activity) + .setTitle(R.string.force_stop_dlg_title) + .setMessage(R.string.force_stop_dlg_text) + .setPositiveButton(android.R.string.ok, (dialog, which) -> ConfigManager.forceStopPackage(info.packageName, info.uid / 100000)) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } } else { return false; } @@ -488,6 +499,10 @@ public class ScopeAdapter extends RecyclerView.Adapter checkedList.remove(appInfo.application); } buttonView.setChecked(!isChecked); + } else if (appInfo.packageName.equals("android")) { + Snackbar.make(activity.binding.snackbar, R.string.reboot_required, Snackbar.LENGTH_SHORT) + .setAction(R.string.reboot, v -> ConfigManager.reboot(false, null, false)) + .show(); } } diff --git a/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java b/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java index fc451088..423e834e 100644 --- a/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java +++ b/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java @@ -130,4 +130,14 @@ public class LSPosedManagerServiceClient { ensureService(); return service.getPackageInfo(packageName, flags, uid); } + + public static void forceStopPackage(String packageName, int userId) throws RemoteException, NullPointerException { + ensureService(); + service.forceStopPackage(packageName, userId); + } + + public static void reboot(boolean confirm, String reason, boolean wait) throws RemoteException, NullPointerException { + ensureService(); + service.reboot(confirm, reason, wait); + } } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java index 9cca48f4..234350b6 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java @@ -53,7 +53,7 @@ public class AppListActivity extends BaseActivity { private ScopeAdapter scopeAdapter; private SearchView.OnQueryTextListener searchListener; - private ActivityAppListBinding binding; + public ActivityAppListBinding binding; private final Handler handler = new Handler(Looper.getMainLooper()); public ActivityResultLauncher backupLauncher; public ActivityResultLauncher restoreLauncher; diff --git a/app/src/main/res/menu/menu_app_item.xml b/app/src/main/res/menu/menu_app_item.xml index 01a532c9..aa7fe364 100644 --- a/app/src/main/res/menu/menu_app_item.xml +++ b/app/src/main/res/menu/menu_app_item.xml @@ -1,5 +1,4 @@ - -