From 383c97c30374ba7e02dc7b4d7836e648394cd30c Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sat, 7 Apr 2018 00:45:10 +0800 Subject: [PATCH] Add app shortcuts for Android 7.1+ --- src/main/AndroidManifest.xml | 5 ++ .../com/topjohnwu/magisk/MagiskManager.java | 2 +- .../com/topjohnwu/magisk/MainActivity.java | 7 +- .../com/topjohnwu/magisk/SplashActivity.java | 4 + .../magisk/adapters/ApplicationAdapter.java | 2 - .../magisk/receivers/ShortcutReceiver.java | 83 +++++++++++++++++++ .../res/drawable-v26/sc_cloud_download.xml | 9 ++ src/main/res/drawable-v26/sc_extension.xml | 9 ++ src/main/res/drawable-v26/sc_magiskhide.xml | 9 ++ src/main/res/drawable-v26/sc_superuser.xml | 9 ++ src/main/res/drawable/ic_autoroot.xml | 4 - src/main/res/drawable/ic_cloud_download.xml | 2 +- src/main/res/drawable/ic_extension.xml | 2 +- src/main/res/drawable/ic_magiskhide.xml | 10 +++ src/main/res/drawable/ic_superuser.xml | 4 +- src/main/res/drawable/sc_cloud_download.xml | 13 +++ src/main/res/drawable/sc_extension.xml | 13 +++ src/main/res/drawable/sc_magiskhide.xml | 13 +++ src/main/res/drawable/sc_superuser.xml | 13 +++ src/main/res/menu/drawer.xml | 2 +- 20 files changed, 199 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/topjohnwu/magisk/receivers/ShortcutReceiver.java create mode 100644 src/main/res/drawable-v26/sc_cloud_download.xml create mode 100644 src/main/res/drawable-v26/sc_extension.xml create mode 100644 src/main/res/drawable-v26/sc_magiskhide.xml create mode 100644 src/main/res/drawable-v26/sc_superuser.xml delete mode 100644 src/main/res/drawable/ic_autoroot.xml create mode 100644 src/main/res/drawable/ic_magiskhide.xml create mode 100644 src/main/res/drawable/sc_cloud_download.xml create mode 100644 src/main/res/drawable/sc_extension.xml create mode 100644 src/main/res/drawable/sc_magiskhide.xml create mode 100644 src/main/res/drawable/sc_superuser.xml diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index f2bb203cb..274cbacc2 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -71,6 +71,11 @@ + + + + + = 1300 - && prefs.getBoolean(Const.Key.MAGISKHIDE, false)); + && mm.prefs.getBoolean(Const.Key.MAGISKHIDE, false)); menu.findItem(R.id.modules).setVisible(!mm.prefs.getBoolean(Const.Key.COREONLY, false) && Shell.rootAccess() && mm.magiskVersionCode >= 0); menu.findItem(R.id.downloads).setVisible(!mm.prefs.getBoolean(Const.Key.COREONLY, false) diff --git a/src/main/java/com/topjohnwu/magisk/SplashActivity.java b/src/main/java/com/topjohnwu/magisk/SplashActivity.java index fa5fb0555..43e54b61e 100644 --- a/src/main/java/com/topjohnwu/magisk/SplashActivity.java +++ b/src/main/java/com/topjohnwu/magisk/SplashActivity.java @@ -11,6 +11,7 @@ import com.topjohnwu.magisk.asyncs.LoadModules; import com.topjohnwu.magisk.asyncs.ParallelTask; import com.topjohnwu.magisk.asyncs.UpdateRepos; import com.topjohnwu.magisk.components.Activity; +import com.topjohnwu.magisk.receivers.ShortcutReceiver; import com.topjohnwu.magisk.utils.Const; import com.topjohnwu.magisk.utils.Utils; import com.topjohnwu.superuser.Shell; @@ -37,6 +38,9 @@ public class SplashActivity extends Activity { getSystemService(NotificationManager.class).createNotificationChannel(channel); } + // Setup shortcuts + sendBroadcast(new Intent(this, ShortcutReceiver.class)); + LoadModules loadModuleTask = new LoadModules(); if (Utils.checkNetworkStatus()) { diff --git a/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java b/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java index 4745fb1ed..f9efe1777 100644 --- a/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java +++ b/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java @@ -3,7 +3,6 @@ package com.topjohnwu.magisk.adapters; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.support.design.widget.Snackbar; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; @@ -16,7 +15,6 @@ import android.widget.TextView; import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.asyncs.ParallelTask; -import com.topjohnwu.magisk.components.SnackbarMaker; import com.topjohnwu.magisk.utils.Const; import com.topjohnwu.magisk.utils.Topic; import com.topjohnwu.magisk.utils.Utils; diff --git a/src/main/java/com/topjohnwu/magisk/receivers/ShortcutReceiver.java b/src/main/java/com/topjohnwu/magisk/receivers/ShortcutReceiver.java new file mode 100644 index 000000000..8dba2d7b3 --- /dev/null +++ b/src/main/java/com/topjohnwu/magisk/receivers/ShortcutReceiver.java @@ -0,0 +1,83 @@ +package com.topjohnwu.magisk.receivers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; +import android.graphics.drawable.Icon; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.text.TextUtils; + +import com.topjohnwu.magisk.MagiskManager; +import com.topjohnwu.magisk.R; +import com.topjohnwu.magisk.SplashActivity; +import com.topjohnwu.magisk.utils.Const; +import com.topjohnwu.magisk.utils.Utils; +import com.topjohnwu.superuser.Shell; + +import java.util.ArrayList; + +public class ShortcutReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + MagiskManager mm = Utils.getMagiskManager(context); + ShortcutManager manager = context.getSystemService(ShortcutManager.class); + if (TextUtils.equals(intent.getAction(), Intent.ACTION_LOCALE_CHANGED)) { + // It is triggered with locale change, manual load Magisk info + mm.loadMagiskInfo(); + } + manager.setDynamicShortcuts(getShortCuts(mm)); + } + } + + @RequiresApi(api = Build.VERSION_CODES.N_MR1) + private ArrayList getShortCuts(MagiskManager mm) { + ArrayList shortCuts = new ArrayList<>(); + if (Shell.rootAccess() && + !(Const.USER_ID > 0 && + mm.multiuserMode == Const.Value.MULTIUSER_MODE_OWNER_MANAGED)) { + shortCuts.add(new ShortcutInfo.Builder(mm, "superuser") + .setShortLabel(mm.getString(R.string.superuser)) + .setIntent(new Intent(mm, SplashActivity.class) + .putExtra(Const.Key.OPEN_SECTION, "superuser") + .setAction(Intent.ACTION_VIEW) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)) + .setIcon(Icon.createWithResource(mm, R.drawable.sc_superuser)) + .build()); + } + if (Shell.rootAccess() && mm.magiskVersionCode >= 1300 + && mm.prefs.getBoolean(Const.Key.MAGISKHIDE, false)) { + shortCuts.add(new ShortcutInfo.Builder(mm, "magiskhide") + .setShortLabel(mm.getString(R.string.magiskhide)) + .setIntent(new Intent(mm, SplashActivity.class) + .putExtra(Const.Key.OPEN_SECTION, "magiskhide") + .setAction(Intent.ACTION_VIEW) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)) + .setIcon(Icon.createWithResource(mm, R.drawable.sc_magiskhide)) + .build()); + } + if (!mm.prefs.getBoolean(Const.Key.COREONLY, false) && + Shell.rootAccess() && mm.magiskVersionCode >= 0) { + shortCuts.add(new ShortcutInfo.Builder(mm, "modules") + .setShortLabel(mm.getString(R.string.modules)) + .setIntent(new Intent(mm, SplashActivity.class) + .putExtra(Const.Key.OPEN_SECTION, "modules") + .setAction(Intent.ACTION_VIEW) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)) + .setIcon(Icon.createWithResource(mm, R.drawable.sc_extension)) + .build()); + shortCuts.add(new ShortcutInfo.Builder(mm, "downloads") + .setShortLabel(mm.getString(R.string.download)) + .setIntent(new Intent(mm, SplashActivity.class) + .putExtra(Const.Key.OPEN_SECTION, "downloads") + .setAction(Intent.ACTION_VIEW) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)) + .setIcon(Icon.createWithResource(mm, R.drawable.sc_cloud_download)) + .build()); + } + return shortCuts; + } +} diff --git a/src/main/res/drawable-v26/sc_cloud_download.xml b/src/main/res/drawable-v26/sc_cloud_download.xml new file mode 100644 index 000000000..734f23865 --- /dev/null +++ b/src/main/res/drawable-v26/sc_cloud_download.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable-v26/sc_extension.xml b/src/main/res/drawable-v26/sc_extension.xml new file mode 100644 index 000000000..a7a98ef76 --- /dev/null +++ b/src/main/res/drawable-v26/sc_extension.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable-v26/sc_magiskhide.xml b/src/main/res/drawable-v26/sc_magiskhide.xml new file mode 100644 index 000000000..02a59ce4e --- /dev/null +++ b/src/main/res/drawable-v26/sc_magiskhide.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable-v26/sc_superuser.xml b/src/main/res/drawable-v26/sc_superuser.xml new file mode 100644 index 000000000..505088495 --- /dev/null +++ b/src/main/res/drawable-v26/sc_superuser.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/ic_autoroot.xml b/src/main/res/drawable/ic_autoroot.xml deleted file mode 100644 index a8f96a803..000000000 --- a/src/main/res/drawable/ic_autoroot.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/src/main/res/drawable/ic_cloud_download.xml b/src/main/res/drawable/ic_cloud_download.xml index 261c31217..4aaf5ebc1 100644 --- a/src/main/res/drawable/ic_cloud_download.xml +++ b/src/main/res/drawable/ic_cloud_download.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> diff --git a/src/main/res/drawable/ic_extension.xml b/src/main/res/drawable/ic_extension.xml index 80d25de23..549fdce23 100644 --- a/src/main/res/drawable/ic_extension.xml +++ b/src/main/res/drawable/ic_extension.xml @@ -4,6 +4,6 @@ android:viewportHeight="24.0" android:viewportWidth="24.0"> diff --git a/src/main/res/drawable/ic_magiskhide.xml b/src/main/res/drawable/ic_magiskhide.xml new file mode 100644 index 000000000..6a3ce181d --- /dev/null +++ b/src/main/res/drawable/ic_magiskhide.xml @@ -0,0 +1,10 @@ + + + diff --git a/src/main/res/drawable/ic_superuser.xml b/src/main/res/drawable/ic_superuser.xml index c7a3bc010..01fb6a803 100644 --- a/src/main/res/drawable/ic_superuser.xml +++ b/src/main/res/drawable/ic_superuser.xml @@ -3,5 +3,7 @@ android:width="24dp" android:viewportWidth="24" android:viewportHeight="24"> - + \ No newline at end of file diff --git a/src/main/res/drawable/sc_cloud_download.xml b/src/main/res/drawable/sc_cloud_download.xml new file mode 100644 index 000000000..1a7dae048 --- /dev/null +++ b/src/main/res/drawable/sc_cloud_download.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/sc_extension.xml b/src/main/res/drawable/sc_extension.xml new file mode 100644 index 000000000..21e823a39 --- /dev/null +++ b/src/main/res/drawable/sc_extension.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/sc_magiskhide.xml b/src/main/res/drawable/sc_magiskhide.xml new file mode 100644 index 000000000..b388a2f3f --- /dev/null +++ b/src/main/res/drawable/sc_magiskhide.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/sc_superuser.xml b/src/main/res/drawable/sc_superuser.xml new file mode 100644 index 000000000..0e6c58937 --- /dev/null +++ b/src/main/res/drawable/sc_superuser.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/menu/drawer.xml b/src/main/res/menu/drawer.xml index 847612d5a..654f0937c 100644 --- a/src/main/res/menu/drawer.xml +++ b/src/main/res/menu/drawer.xml @@ -17,7 +17,7 @@ android:visible="false"/>