diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ea3d526ac..f003aa173 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ - + @@ -61,6 +61,14 @@ + + + + + + + + ret = Shell.sh("su -v"); if (Utils.isValidShellResponse(ret)) { diff --git a/app/src/main/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java b/app/src/main/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java index 63aaff337..524a2faf5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java +++ b/app/src/main/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java @@ -72,7 +72,7 @@ public class PolicyAdapter extends RecyclerView.Adapter { @@ -82,7 +82,7 @@ public class PolicyAdapter extends RecyclerView.Adapter { @@ -92,7 +92,7 @@ public class PolicyAdapter extends RecyclerView.Adapter new AlertDialogBuilder(v.getContext()) @@ -104,7 +104,7 @@ public class PolicyAdapter extends RecyclerView.Adapter getPolicyList(PackageManager pm) { List ret = new ArrayList<>(); SQLiteDatabase db = getWritableDatabase(); Policy policy; // Clear outdated policies - db.delete(TABLE_NAME, "until > 0 and until < ?", new String[] { String.valueOf(System.currentTimeMillis()) }); + db.delete(TABLE_NAME, "until > 0 AND until < ?", + new String[] { String.valueOf(System.currentTimeMillis()) }); try (Cursor c = db.query(TABLE_NAME, null, null, null, null, null, "app_name ASC")) { while (c.moveToNext()) { policy = new Policy(c); - // Package is uninstalled - if (pm.getPackagesForUid(policy.uid) == null) { - deletePolicy(policy.uid); - } else { - ret.add(policy); - } + ret.add(policy); } } db.close(); diff --git a/app/src/main/java/com/topjohnwu/magisk/receivers/PackageReceiver.java b/app/src/main/java/com/topjohnwu/magisk/receivers/PackageReceiver.java new file mode 100644 index 000000000..d31e6344e --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/receivers/PackageReceiver.java @@ -0,0 +1,42 @@ +package com.topjohnwu.magisk.receivers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.topjohnwu.magisk.MagiskManager; +import com.topjohnwu.magisk.database.SuDatabaseHelper; +import com.topjohnwu.magisk.superuser.Policy; +import com.topjohnwu.magisk.utils.Logger; +import com.topjohnwu.magisk.utils.Utils; + +public class PackageReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + SuDatabaseHelper suDB = new SuDatabaseHelper(context); + String pkg = intent.getData().getEncodedSchemeSpecificPart(); + Policy policy = suDB.getPolicy(pkg); + if (policy == null) + return; + + MagiskManager magiskManager = Utils.getMagiskManager(context); + magiskManager.initSUConfig(); + + switch (intent.getAction()) { + case Intent.ACTION_PACKAGE_ADDED: + int uid = intent.getIntExtra(Intent.EXTRA_UID, -1); + // Update the UID if available + if (uid > 0) { + policy.uid = uid % 100000; + } + suDB.updatePolicy(policy); + return; + case Intent.ACTION_PACKAGE_REMOVED: + boolean isUpdate = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); + if (!isUpdate || magiskManager.suReauth) { + suDB.deletePolicy(policy); + } + break; + } + } +} diff --git a/app/src/main/java/com/topjohnwu/magisk/superuser/RequestActivity.java b/app/src/main/java/com/topjohnwu/magisk/superuser/RequestActivity.java index 0267e573f..c8bc6a578 100644 --- a/app/src/main/java/com/topjohnwu/magisk/superuser/RequestActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/superuser/RequestActivity.java @@ -17,7 +17,7 @@ public class RequestActivity extends Activity { return; } - getApplicationContext().initSU(); + getApplicationContext().initSUConfig(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).setClass(this, SuRequestActivity.class); startActivity(intent); finish(); 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 fbd72f03d..d6d1752c7 100644 --- a/app/src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java +++ b/app/src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java @@ -56,7 +56,7 @@ public class SuReceiver extends BroadcastReceiver { } } - magiskManager.initSU(); + magiskManager.initSUConfig(); SuLogEntry log = new SuLogEntry(policy); 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 d0946fa1b..a11358f5d 100644 --- a/app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java @@ -89,9 +89,6 @@ public class SuRequestActivity extends Activity { } private void showRequest() { - - Logger.debug("Show request"); - switch (magiskManager.suResponseType) { case AUTO_DENY: handleAction(Policy.DENY, 0); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 936757d9a..309e99117 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -161,6 +161,8 @@ Request Timeout Superuser Notification %1$s seconds + Re-authenticate after upgrade + Re-authenticate superuser permissions after an application upgrades Multiuser Mode Device Owner Only diff --git a/app/src/main/res/xml/app_settings.xml b/app/src/main/res/xml/app_settings.xml index bfc8e395c..182f2def9 100644 --- a/app/src/main/res/xml/app_settings.xml +++ b/app/src/main/res/xml/app_settings.xml @@ -5,15 +5,14 @@ android:title="@string/settings_general_category"> + android:summary="@string/settings_dark_theme_summary" /> + android:summary="@string/settings_notification_summary" /> @@ -79,6 +76,11 @@ android:entries="@array/su_notification" android:entryValues="@array/value_array" /> + +