Skip to content

Commit 5c2dfc3

Browse files
committed
fix: Prompt about restarting a scope without root privileges
1 parent 812d502 commit 5c2dfc3

3 files changed

Lines changed: 27 additions & 9 deletions

File tree

library/common-ui/java/main/src/com/sevtinge/hyperceiler/common/utils/DialogHelper.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,19 @@
2020

2121
import static com.sevtinge.hyperceiler.common.utils.CtaUtils.setCtaValue;
2222
import static com.sevtinge.hyperceiler.hook.utils.log.LogManager.LOGGER_CHECKER_ERR_CODE;
23+
import static com.sevtinge.hyperceiler.hook.utils.shell.ShellUtils.checkRootPermission;
2324

2425
import android.app.Activity;
2526
import android.content.Context;
2627
import android.content.DialogInterface;
2728
import android.content.Intent;
28-
import android.graphics.Color;
2929
import android.net.Uri;
30-
import android.text.Html;
3130
import android.text.SpannableString;
3231
import android.text.Spanned;
3332
import android.text.TextPaint;
3433
import android.text.style.ClickableSpan;
3534
import android.text.style.ForegroundColorSpan;
3635
import android.view.View;
37-
import android.widget.Button;
38-
import android.widget.LinearLayout;
3936
import android.widget.TextView;
4037

4138
import androidx.core.content.ContextCompat;
@@ -282,16 +279,20 @@ public static void doRestart(Context context, String[] packageName, boolean isRe
282279
if (isRestartSystem) {
283280
result = ShellInit.getShell().run("reboot").sync().isResult();
284281
} else {
285-
result = AppsTool.killApps(packageName);
286-
pid = result;
282+
if (checkRootPermission() != 0) {
283+
result = false;
284+
} else {
285+
result = AppsTool.killApps(packageName);
286+
pid = result;
287+
}
287288
}
288289

289290
if (!result) {
290291
showAlertDialog(context, isRestartSystem, pid);
291292
}
292293
}
293294

294-
private static void showAlertDialog(Context context, boolean isRestartSystem, boolean pid) {
295+
public static void showAlertDialog(Context context, boolean isRestartSystem, boolean pid) {
295296
new AlertDialog.Builder(context)
296297
.setCancelable(false)
297298
.setTitle(R.string.tip)

library/common-ui/java/main/src/com/sevtinge/hyperceiler/common/view/RestartAlertDialog.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
*/
1919
package com.sevtinge.hyperceiler.common.view;
2020

21+
import static com.sevtinge.hyperceiler.common.utils.DialogHelper.showAlertDialog;
22+
import static com.sevtinge.hyperceiler.hook.utils.shell.ShellUtils.checkRootPermission;
23+
2124
import android.content.Context;
2225
import android.content.Intent;
2326
import android.content.res.Resources;
@@ -52,6 +55,10 @@ private MultipleChoiceView createMultipleChoiceView(Context context) {
5255
view.setOnCheckedListener(sparseBooleanArray -> {
5356
dismiss();
5457
int size = sparseBooleanArray.size();
58+
if (checkRootPermission() != 0) {
59+
showAlertDialog(context, false, true);
60+
return;
61+
}
5562
for (int i = 0; i < size; i++) {
5663
if (sparseBooleanArray.get(i)) {
5764
// ShellUtils.execCommand("pkill -l 9 -f " + mAppPackageNameList.get(i), true, false);

library/hook/src/main/java/com/sevtinge/hyperceiler/hook/module/base/tool/AppsTool.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,13 @@ public static boolean killApps(String[] packageNames, int signal) {
241241
.add("if [[ $pids != \"\" ]]; then")
242242
.add(" pid=$pids")
243243
.add("fi")
244+
.add("killed=0")
244245
.add("if [[ $pid != \"\" ]]; then")
245246
.add(" for i in $pid; do")
246247
.add(" kill -s " + signal + " $i &>/dev/null")
248+
.add(" if [[ $? -eq 0 ]]; then killed=1; fi")
247249
.add(" done")
250+
.add(" if [[ $killed -eq 0 ]]; then echo \"No Permission!\"; fi")
248251
.add("else")
249252
.add(" echo \"No Find Pid!\"")
250253
.add("fi").over().sync().isResult();
@@ -255,8 +258,15 @@ public static boolean killApps(String[] packageNames, int signal) {
255258
ArrayList<String> outPut = ShellInit.getShell().getOutPut();
256259
ArrayList<String> error = ShellInit.getShell().getError();
257260
if (shellResult) {
258-
if (outPut != null && !outPut.isEmpty() && "No Find Pid!".equals(outPut.get(0))) {
259-
AndroidLogUtils.logW(TAG, "Didn't find a pid that can kill: " + pkg);
261+
if (outPut != null && !outPut.isEmpty()) {
262+
String firstLine = outPut.get(0);
263+
if ("No Find Pid!".equals(firstLine)) {
264+
AndroidLogUtils.logW(TAG, "Didn't find a pid that can kill: " + pkg);
265+
} else if ("No Permission!".equals(firstLine)) {
266+
AndroidLogUtils.logW(TAG, "No permission to kill process: " + pkg);
267+
} else {
268+
hasSuccess = true;
269+
}
260270
} else {
261271
hasSuccess = true;
262272
}

0 commit comments

Comments
 (0)