From 44e36feb09dc1d07c2c6c0637c32b67a2f88cbdc Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sun, 28 May 2017 00:16:10 +0800 Subject: [PATCH] Improve multiuser settings and notification --- .../topjohnwu/magisk/SettingsActivity.java | 6 +++++ .../magisk/superuser/SuReceiver.java | 21 +++++++++++---- .../magisk/superuser/SuRequestActivity.java | 27 +++++++++++-------- app/src/main/res/values/strings.xml | 17 ++++++------ 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java b/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java index 36ac81c56..fd345455f 100644 --- a/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/SettingsActivity.java @@ -83,6 +83,12 @@ public class SettingsActivity extends Activity { setSummary(); + // Disable dangerous settings in user mode if selected owner manage + if (getActivity().getApplicationInfo().uid > 99999) { + prefScreen.removePreference(magiskCategory); + prefScreen.removePreference(suCategory); + } + findPreference("clear").setOnPreferenceClickListener((pref) -> { Utils.clearRepoCache(getActivity()); return true; diff --git a/app/src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java b/app/src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java index 66ed3649a..0374f74aa 100644 --- a/app/src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java +++ b/app/src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java @@ -17,11 +17,13 @@ public class SuReceiver extends BroadcastReceiver { private static final int NO_NOTIFICATION = 0; private static final int TOAST = 1; - + private static final int NOTIFY_NORMAL_LOG = 0; + private static final int NOTIFY_USER_TOASTS = 1; + private static final int NOTIFY_USER_TO_OWNER = 2; @Override public void onReceive(Context context, Intent intent) { - int fromUid, toUid, pid; + int fromUid, toUid, pid, mode; String command, action; Policy policy; @@ -29,6 +31,14 @@ public class SuReceiver extends BroadcastReceiver { if (intent == null) return; + mode = intent.getIntExtra("mode", -1); + if (mode < 0) return; + + if (mode == NOTIFY_USER_TO_OWNER) { + magiskManager.toast(R.string.multiuser_hint_owner_request, Toast.LENGTH_LONG); + return; + } + fromUid = intent.getIntExtra("from.uid", -1); if (fromUid < 0) return; if (fromUid == Process.myUid()) return; // Don't show anything if it's Magisk Manager @@ -64,10 +74,11 @@ public class SuReceiver extends BroadcastReceiver { return; } - if (policy.notification && magiskManager.suNotificationType == TOAST) - Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); + if (policy.notification && magiskManager.suNotificationType == TOAST) { + magiskManager.toast(message, Toast.LENGTH_SHORT); + } - if (policy.logging) { + if (mode == NOTIFY_NORMAL_LOG && policy.logging) { toUid = intent.getIntExtra("to.uid", -1); if (toUid < 0) return; pid = intent.getIntExtra("pid", -1); diff --git a/app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java b/app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java index 7d71b2ebd..702e7ce07 100644 --- a/app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java @@ -55,6 +55,7 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene private MagiskManager magiskManager; private int uid; + private boolean hasTimeout; private Policy policy; private CountDownTimer timer; private CallbackEvent.Listener self; @@ -70,6 +71,7 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene Intent intent = getIntent(); socketPath = intent.getStringExtra("socket"); + hasTimeout = intent.getBooleanExtra("timeout", true); self = this; new FileObserver(socketPath) { @@ -87,7 +89,13 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene new SocketManager(this).exec(); } - void showRequest() { + private boolean cancelTimeout() { + timer.cancel(); + deny_btn.setText(getString(R.string.deny)); + return false; + } + + private void showRequest() { switch (magiskManager.suResponseType) { case AUTO_DENY: @@ -126,17 +134,14 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene grant_btn.setOnClickListener(v -> handleAction(Policy.ALLOW)); deny_btn.setOnClickListener(v -> handleAction(Policy.DENY)); - suPopup.setOnClickListener((v) -> { - timer.cancel(); - deny_btn.setText(getString(R.string.deny)); - }); - timeout.setOnTouchListener((v, event) -> { - timer.cancel(); - deny_btn.setText(getString(R.string.deny)); - return false; - }); + suPopup.setOnClickListener((v) -> cancelTimeout()); + timeout.setOnTouchListener((v, event) -> cancelTimeout()); - timer.start(); + if (hasTimeout) { + timer.start(); + } else { + cancelTimeout(); + } } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 365bad46b..936757d9a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -162,6 +162,15 @@ Superuser Notification %1$s seconds + Multiuser Mode + Device Owner Only + Device Owner Managed + User Independent + Only owner has root access + Only owner can manage root access and receive request prompts + Each user has its own separate root rules + A request has been sent to the device owner. Please switch to the owner and grant the permission + App Development Enable advanced debug logging Check this to enable verbose logging @@ -201,12 +210,4 @@ Target UID:\u0020 Command:\u0020 - Multiuser Mode - Device Owner Only - Device Owner Managed - User Independent - Only owner has root access - Only owner can manage root access and receive request prompts - Each user has its own separate root rules -