From 6a40e18193711e6737a66bfb54f00cbd0880de51 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Tue, 20 Sep 2016 11:36:33 -0500 Subject: [PATCH 1/2] More work on Quick Settings, refactoring --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 21 +++-- .../com/topjohnwu/magisk/RootFragment.java | 1 + .../com/topjohnwu/magisk/WelcomeActivity.java | 8 +- .../AutoStartReceiver.java} | 8 +- .../receivers/PrivateBroadcastReceiver.java | 35 +++++++++ .../magisk/{ => services}/MonitorService.java | 4 +- .../QuickSettingTileService.java | 3 +- .../magisk/{ => utils}/LogFragment.java | 3 +- .../com/topjohnwu/magisk/utils/Utils.java | 78 +++++++++++++++++-- build.gradle | 2 +- 11 files changed, 144 insertions(+), 20 deletions(-) rename app/src/main/java/com/topjohnwu/magisk/{AutoStart.java => receivers/AutoStartReceiver.java} (62%) create mode 100644 app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java rename app/src/main/java/com/topjohnwu/magisk/{ => services}/MonitorService.java (98%) rename app/src/main/java/com/topjohnwu/magisk/{ => services}/QuickSettingTileService.java (96%) rename app/src/main/java/com/topjohnwu/magisk/{ => utils}/LogFragment.java (99%) diff --git a/app/build.gradle b/app/build.gradle index f0fe1579d..d03c4cdde 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,5 +37,6 @@ dependencies { compile 'com.android.support:design:24.2.0' compile 'com.jakewharton:butterknife:8.4.0' compile 'com.github.michalis-vitos:aFileChooser:master' + compile 'com.github.kcoppock:BroadcastTileSupport:master' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c75618436..fec9ccd77 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,9 @@ + package="com.topjohnwu.magisk"> + @@ -20,7 +21,7 @@ android:theme="@style/AppTheme" tools:ignore="AllowBackup,GoogleAppIndexingWarning"> @@ -31,7 +32,7 @@ android:resource="@xml/accessibilityservice"/> @@ -40,6 +41,16 @@ + + + + + + + + @@ -90,7 +101,7 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> - + diff --git a/app/src/main/java/com/topjohnwu/magisk/RootFragment.java b/app/src/main/java/com/topjohnwu/magisk/RootFragment.java index 8e1b11a87..0fe3edcd8 100644 --- a/app/src/main/java/com/topjohnwu/magisk/RootFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/RootFragment.java @@ -22,6 +22,7 @@ import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; +import com.topjohnwu.magisk.services.MonitorService; import com.topjohnwu.magisk.utils.Shell; import com.topjohnwu.magisk.utils.Utils; diff --git a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java index e2da03e0a..cb198cda3 100644 --- a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java @@ -24,6 +24,8 @@ import android.view.MenuItem; import android.view.View; import com.topjohnwu.magisk.module.RepoHelper; +import com.topjohnwu.magisk.utils.LogFragment; +import com.topjohnwu.magisk.services.MonitorService; import com.topjohnwu.magisk.utils.Utils; import butterknife.BindView; @@ -62,10 +64,8 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView } } } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - Intent serviceIntent = new Intent(this, QuickSettingTileService.class); - startService(serviceIntent); - } + Utils.SetupQuickSettingsTile(getApplicationContext()); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); diff --git a/app/src/main/java/com/topjohnwu/magisk/AutoStart.java b/app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java similarity index 62% rename from app/src/main/java/com/topjohnwu/magisk/AutoStart.java rename to app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java index 5cd7f141e..3a88e2d92 100644 --- a/app/src/main/java/com/topjohnwu/magisk/AutoStart.java +++ b/app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java @@ -1,16 +1,20 @@ -package com.topjohnwu.magisk; +package com.topjohnwu.magisk.receivers; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; -public class AutoStart extends BroadcastReceiver { +import com.topjohnwu.magisk.services.MonitorService; +import com.topjohnwu.magisk.utils.Utils; + +public class AutoStartReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("Magisk", "Received Boot call, attempting to start service"); Intent myIntent = new Intent(context, MonitorService.class); context.startService(myIntent); + Utils.SetupQuickSettingsTile(context); } } \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java b/app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java new file mode 100644 index 000000000..db8939d0d --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java @@ -0,0 +1,35 @@ +package com.topjohnwu.magisk.receivers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.topjohnwu.magisk.utils.Utils; + +/** + * Receiver for click events on the custom M Quick Settings tile + */ +public final class PrivateBroadcastReceiver extends BroadcastReceiver { + public static final String ACTION_AUTOROOT = "com.topjohnwu.magisk.CUSTOMTILE_ACTION_AUTOROOT"; + public static final String ACTION_DISABLEROOT = "com.topjohnwu.magisk.CUSTOMTILE_ACTION_DISABLEROOT"; + public static final String ACTION_ENABLEROOT = "com.topjohnwu.magisk.CUSTOMTILE_ACTION_ENABLEROOT"; + + + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + + if (ACTION_AUTOROOT.equals(action)) { + Utils.toggleAutoRoot(true, context); + } + if (ACTION_ENABLEROOT.equals(action)) { + Utils.toggleAutoRoot(false, context); + Utils.toggleRoot(true); + } + if (ACTION_DISABLEROOT.equals(action)) { + Utils.toggleRoot(false); + } + + Utils.SetupQuickSettingsTile(context); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/MonitorService.java b/app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java similarity index 98% rename from app/src/main/java/com/topjohnwu/magisk/MonitorService.java rename to app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java index 476e34250..64f6cee71 100644 --- a/app/src/main/java/com/topjohnwu/magisk/MonitorService.java +++ b/app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk; +package com.topjohnwu.magisk.services; import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityServiceInfo; @@ -16,6 +16,8 @@ import android.support.v4.app.NotificationCompat; import android.util.Log; import android.view.accessibility.AccessibilityEvent; +import com.topjohnwu.magisk.R; +import com.topjohnwu.magisk.WelcomeActivity; import com.topjohnwu.magisk.utils.Utils; import java.util.Set; diff --git a/app/src/main/java/com/topjohnwu/magisk/QuickSettingTileService.java b/app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java similarity index 96% rename from app/src/main/java/com/topjohnwu/magisk/QuickSettingTileService.java rename to app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java index 02b820412..b2d953003 100644 --- a/app/src/main/java/com/topjohnwu/magisk/QuickSettingTileService.java +++ b/app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk; +package com.topjohnwu.magisk.services; import android.annotation.SuppressLint; import android.graphics.drawable.Icon; @@ -6,6 +6,7 @@ import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.util.Log; +import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.utils.Utils; @SuppressLint("NewApi") diff --git a/app/src/main/java/com/topjohnwu/magisk/LogFragment.java b/app/src/main/java/com/topjohnwu/magisk/utils/LogFragment.java similarity index 99% rename from app/src/main/java/com/topjohnwu/magisk/LogFragment.java rename to app/src/main/java/com/topjohnwu/magisk/utils/LogFragment.java index 27d232c6a..ee5833bda 100644 --- a/app/src/main/java/com/topjohnwu/magisk/LogFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/LogFragment.java @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk; +package com.topjohnwu.magisk.utils; import android.Manifest; import android.annotation.SuppressLint; @@ -25,6 +25,7 @@ import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; +import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.utils.Utils; import java.io.File; diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java index 2fba7801d..fea498f63 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java @@ -14,6 +14,7 @@ import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.Environment; import android.preference.PreferenceManager; import android.provider.DocumentsContract; @@ -27,13 +28,16 @@ import android.util.Log; import android.view.View; import android.widget.Toast; +import com.kcoppock.broadcasttilesupport.BroadcastTileIntentBuilder; import com.topjohnwu.magisk.ModulesFragment; -import com.topjohnwu.magisk.MonitorService; import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.ReposFragment; import com.topjohnwu.magisk.module.Module; import com.topjohnwu.magisk.module.Repo; import com.topjohnwu.magisk.module.RepoHelper; +import com.topjohnwu.magisk.receivers.PrivateBroadcastReceiver; +import com.topjohnwu.magisk.services.MonitorService; +import com.topjohnwu.magisk.services.QuickSettingTileService; import org.json.JSONException; import org.json.JSONObject; @@ -65,12 +69,12 @@ import javax.crypto.spec.DESKeySpec; public class Utils { public static int magiskVersion, remoteMagiskVersion = -1, remoteAppVersion = -1; - public static String magiskLink, magiskChangelog, appChangelog, appLink, phhLink, supersuLink; + private static String magiskLink, magiskChangelog, appChangelog, appLink, phhLink, supersuLink; private static final String TAG = "Magisk"; - public static final String MAGISK_PATH = "/magisk"; - public static final String MAGISK_CACHE_PATH = "/cache/magisk"; - public static final String UPDATE_JSON = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/updates/magisk_update.json"; + private static final String MAGISK_PATH = "/magisk"; + private static final String MAGISK_CACHE_PATH = "/cache/magisk"; + private static final String UPDATE_JSON = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/updates/magisk_update.json"; public static boolean fileExist(String path) { List ret; @@ -190,6 +194,70 @@ public class Utils { return value; } + public static void SetupQuickSettingsTile(Context mContext) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Intent serviceIntent = new Intent(mContext, QuickSettingTileService.class); + mContext.startService(serviceIntent); + } + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { + String mLabelString; + int mRootIcon = R.drawable.root; + int mAutoRootIcon = R.drawable.ic_autoroot; + int mRootsState = CheckRootsState(mContext); + final Intent enableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_ENABLEROOT); + final Intent disableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_DISABLEROOT); + final Intent autoBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_AUTOROOT); + Intent intent; + int mIcon; + switch (mRootsState) { + case 2: + mLabelString = "Auto-root"; + mIcon = mAutoRootIcon; + intent = autoBroadcast; + break; + case 1: + mLabelString = "Root enabled"; + mIcon = mRootIcon; + intent = enableBroadcast; + break; + case 0: + mLabelString = "Root disabled"; + mIcon = mRootIcon; + intent = disableBroadcast; + break; + default: + mLabelString = "Root enabled"; + mIcon = mRootIcon; + intent = enableBroadcast; + break; + } + + Intent tileConfigurationIntent = new BroadcastTileIntentBuilder(mContext, "com.magisk.ROOT_TILE") + .setLabel(mLabelString) + .setIconResource(mIcon) + .setOnClickBroadcast(intent) + .build(); + mContext.sendBroadcast(tileConfigurationIntent); + } + } + + // Gets an overall state for the quick settings tile + // 0 for root disabled, 1 for root enabled (no auto), 2 for auto-root + + public static int CheckRootsState(Context mContext) { + if (autoRootEnabled(mContext)) { + return 2; + } else { + if (rootStatus()) { + return 1; + + } else { + return 0; + + } + } + } + // To check if service is enabled public static boolean hasServicePermission(Context mContext) { int accessibilityEnabled = 0; diff --git a/build.gradle b/build.gradle index 24cf38d8a..1729a631c 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0-rc1' + classpath 'com.android.tools.build:gradle:2.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 8176fb7bad234dd90d1b924173eebea56a49f3fe Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Tue, 20 Sep 2016 17:01:20 -0500 Subject: [PATCH 2/2] WIP Tile stuff --- app/build.gradle | 13 ++-- app/src/main/AndroidManifest.xml | 5 +- .../magisk/{utils => }/LogFragment.java | 2 +- .../com/topjohnwu/magisk/WelcomeActivity.java | 1 - .../services/QuickSettingTileService.java | 2 +- .../magisk/tile/CustomTileHelper.java | 59 +++++++++++++++++++ .../PrivateBroadcastReceiver.java | 5 +- .../magisk/tile/PublicBroadcastReceiver.java | 29 +++++++++ .../magisk/tile/TilePreferenceHelper.java | 26 ++++++++ .../com/topjohnwu/magisk/utils/Utils.java | 35 ++++------- 10 files changed, 144 insertions(+), 33 deletions(-) rename app/src/main/java/com/topjohnwu/magisk/{utils => }/LogFragment.java (99%) create mode 100644 app/src/main/java/com/topjohnwu/magisk/tile/CustomTileHelper.java rename app/src/main/java/com/topjohnwu/magisk/{receivers => tile}/PrivateBroadcastReceiver.java (90%) create mode 100644 app/src/main/java/com/topjohnwu/magisk/tile/PublicBroadcastReceiver.java create mode 100644 app/src/main/java/com/topjohnwu/magisk/tile/TilePreferenceHelper.java diff --git a/app/build.gradle b/app/build.gradle index d03c4cdde..9721feb82 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,11 +32,16 @@ repositories { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:recyclerview-v7:24.2.0' - compile 'com.android.support:cardview-v7:24.2.0' - compile 'com.android.support:design:24.2.0' + compile 'com.android.support:recyclerview-v7:24.2.1' + compile 'com.android.support:cardview-v7:24.2.1' + compile 'com.android.support:design:24.2.1' + compile 'com.github.d8ahazard:BroadcastTileSupportUpdate:master' compile 'com.jakewharton:butterknife:8.4.0' compile 'com.github.michalis-vitos:aFileChooser:master' - compile 'com.github.kcoppock:BroadcastTileSupport:master' + + + + + annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fec9ccd77..96f10d257 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,8 +42,9 @@ + android:name=".tile.PrivateBroadcastReceiver" + android:enabled="true" + android:exported="true"> diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/LogFragment.java b/app/src/main/java/com/topjohnwu/magisk/LogFragment.java similarity index 99% rename from app/src/main/java/com/topjohnwu/magisk/utils/LogFragment.java rename to app/src/main/java/com/topjohnwu/magisk/LogFragment.java index ee5833bda..80d0c75b9 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/LogFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/LogFragment.java @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.utils; +package com.topjohnwu.magisk; import android.Manifest; import android.annotation.SuppressLint; diff --git a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java index cb198cda3..eca29df52 100644 --- a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java @@ -24,7 +24,6 @@ import android.view.MenuItem; import android.view.View; import com.topjohnwu.magisk.module.RepoHelper; -import com.topjohnwu.magisk.utils.LogFragment; import com.topjohnwu.magisk.services.MonitorService; import com.topjohnwu.magisk.utils.Utils; diff --git a/app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java b/app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java index b2d953003..c6cfaf864 100644 --- a/app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java +++ b/app/src/main/java/com/topjohnwu/magisk/services/QuickSettingTileService.java @@ -33,7 +33,7 @@ public class QuickSettingTileService extends TileService { Icon iconAuto = Icon.createWithResource(getApplicationContext(), R.drawable.ic_autoroot); Tile tile = this.getQsTile(); boolean autoRootStatus = Utils.autoRootEnabled(getApplicationContext()); - boolean rootStatus = Utils.rootStatus(); + boolean rootStatus = Utils.rootEnabled(); Log.d("Magisk", "QST: Auto and root are " + autoRootStatus + " and " + rootStatus); if (autoRootStatus) { tile.setLabel("Auto-root"); diff --git a/app/src/main/java/com/topjohnwu/magisk/tile/CustomTileHelper.java b/app/src/main/java/com/topjohnwu/magisk/tile/CustomTileHelper.java new file mode 100644 index 000000000..94a889f13 --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/tile/CustomTileHelper.java @@ -0,0 +1,59 @@ +package com.topjohnwu.magisk.tile; + +import android.content.Context; +import android.content.Intent; +import android.support.annotation.NonNull; + +import com.kcoppock.broadcasttilesupport.BroadcastTileIntentBuilder; +import com.topjohnwu.magisk.R; + +final public class CustomTileHelper { + /** + * This is the identifier of the custom Broadcast Tile. Whatever action you configured the tile + * for must be used when configuring the tile. For Broadcast tiles, only alphanumeric characters + * (and periods) are allowed. Keep in mind that this excludes underscores. + */ + private static final String BROADCAST_TILE_IDENTIFIER = "com.kcoppock.CUSTOMTILE"; + + /** + * Keeps track of the last known state of the Quick Settings custom tile. There doesn't seem to + * be a way to query the state of the tile. + */ + private static final String PREF_TILE_SHOWN = "com.kcoppock.CUSTOMTILE_SHOWN"; + + private final Context mContext; + private final TilePreferenceHelper mTilePreferenceHelper; + + CustomTileHelper(@NonNull Context context) { + mContext = context.getApplicationContext(); + mTilePreferenceHelper = new TilePreferenceHelper(mContext); + } + + void showTile() { + mTilePreferenceHelper.setBoolean(PREF_TILE_SHOWN, true); + + // Set up an Intent that will be broadcast by the system, and received by the exported + // PublicBroadcastReceiver. + + + + + // Send the update event to the Broadcast Tile. Custom tiles are hidden by default until + // enabled with this broadcast Intent. + mContext.sendBroadcast(new BroadcastTileIntentBuilder(mContext, BROADCAST_TILE_IDENTIFIER) + .setVisible(true) + .build()); + } + + void hideTile() { + mTilePreferenceHelper.setBoolean(PREF_TILE_SHOWN, false); + + mContext.sendBroadcast(new BroadcastTileIntentBuilder(mContext, BROADCAST_TILE_IDENTIFIER) + .setVisible(false) + .build()); + } + + boolean isLastTileStateShown() { + return mTilePreferenceHelper.getBoolean(PREF_TILE_SHOWN); + } +} diff --git a/app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java b/app/src/main/java/com/topjohnwu/magisk/tile/PrivateBroadcastReceiver.java similarity index 90% rename from app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java rename to app/src/main/java/com/topjohnwu/magisk/tile/PrivateBroadcastReceiver.java index db8939d0d..036d66c49 100644 --- a/app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java +++ b/app/src/main/java/com/topjohnwu/magisk/tile/PrivateBroadcastReceiver.java @@ -1,8 +1,9 @@ -package com.topjohnwu.magisk.receivers; +package com.topjohnwu.magisk.tile; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.util.Log; import com.topjohnwu.magisk.utils.Utils; @@ -18,7 +19,7 @@ public final class PrivateBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); - + Log.d("Magisk","Broadcast Receiver, Made it this far!"); if (ACTION_AUTOROOT.equals(action)) { Utils.toggleAutoRoot(true, context); } diff --git a/app/src/main/java/com/topjohnwu/magisk/tile/PublicBroadcastReceiver.java b/app/src/main/java/com/topjohnwu/magisk/tile/PublicBroadcastReceiver.java new file mode 100644 index 000000000..1e6f3255c --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/tile/PublicBroadcastReceiver.java @@ -0,0 +1,29 @@ +package com.topjohnwu.magisk.tile; + +import android.content.*; +import android.widget.Toast; + +/** + * Exported receiver for the custom event on the custom Quick Settings tile + */ +public final class PublicBroadcastReceiver extends BroadcastReceiver { + /** + * The action broadcast from the Quick Settings tile when clicked + */ + public static final String ACTION_TOAST = "com.kcoppock.CUSTOMTILE_ACTION_TOAST"; + + /** + * Constant for the String extra to be displayed in the Toast + */ + public static final String EXTRA_MESSAGE = "com.kcoppock.CUSTOMTILE_EXTRA_MESSAGE"; + + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + + if (ACTION_TOAST.equals(action)) { + final String message = intent.getStringExtra(EXTRA_MESSAGE); + Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/tile/TilePreferenceHelper.java b/app/src/main/java/com/topjohnwu/magisk/tile/TilePreferenceHelper.java new file mode 100644 index 000000000..b64adb57b --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/tile/TilePreferenceHelper.java @@ -0,0 +1,26 @@ +package com.topjohnwu.magisk.tile; + +import android.content.Context; +import android.content.SharedPreferences; +import android.support.annotation.NonNull; + +/** + * Helper class for tracking preference values to keep track of the state of the custom tile + */ +final public class TilePreferenceHelper { + private static final String PREFS_NAME = "tile_prefs"; + + private final SharedPreferences mSharedPreferences; + + TilePreferenceHelper(@NonNull Context context) { + mSharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + } + + void setBoolean(@NonNull String key, boolean value) { + mSharedPreferences.edit().putBoolean(key, value).apply(); + } + + boolean getBoolean(@NonNull String key) { + return mSharedPreferences.getBoolean(key, false); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java index fea498f63..d286b439b 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java @@ -35,9 +35,10 @@ import com.topjohnwu.magisk.ReposFragment; import com.topjohnwu.magisk.module.Module; import com.topjohnwu.magisk.module.Repo; import com.topjohnwu.magisk.module.RepoHelper; -import com.topjohnwu.magisk.receivers.PrivateBroadcastReceiver; +import com.topjohnwu.magisk.tile.PrivateBroadcastReceiver; import com.topjohnwu.magisk.services.MonitorService; import com.topjohnwu.magisk.services.QuickSettingTileService; +import com.topjohnwu.magisk.tile.CustomTileHelper; import org.json.JSONException; import org.json.JSONObject; @@ -69,12 +70,12 @@ import javax.crypto.spec.DESKeySpec; public class Utils { public static int magiskVersion, remoteMagiskVersion = -1, remoteAppVersion = -1; - private static String magiskLink, magiskChangelog, appChangelog, appLink, phhLink, supersuLink; + public static String magiskLink, magiskChangelog, appChangelog, appLink, phhLink, supersuLink; private static final String TAG = "Magisk"; - private static final String MAGISK_PATH = "/magisk"; - private static final String MAGISK_CACHE_PATH = "/cache/magisk"; - private static final String UPDATE_JSON = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/updates/magisk_update.json"; + public static final String MAGISK_PATH = "/magisk"; + public static final String MAGISK_CACHE_PATH = "/cache/magisk"; + public static final String UPDATE_JSON = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/updates/magisk_update.json"; public static boolean fileExist(String path) { List ret; @@ -195,15 +196,18 @@ public class Utils { } public static void SetupQuickSettingsTile(Context mContext) { + Log.d("Magisk","Utils: SetupQuickSettings called"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Intent serviceIntent = new Intent(mContext, QuickSettingTileService.class); mContext.startService(serviceIntent); } if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { + Log.d("Magisk","Utils: Marshmallow build detected"); String mLabelString; int mRootIcon = R.drawable.root; int mAutoRootIcon = R.drawable.ic_autoroot; int mRootsState = CheckRootsState(mContext); + Log.d("Magisk","Utils: Root State returned as " + mRootsState); final Intent enableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_ENABLEROOT); final Intent disableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_DISABLEROOT); final Intent autoBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_AUTOROOT); @@ -232,12 +236,13 @@ public class Utils { break; } - Intent tileConfigurationIntent = new BroadcastTileIntentBuilder(mContext, "com.magisk.ROOT_TILE") + Intent tileConfigurationIntent = new BroadcastTileIntentBuilder(mContext, "ROOT") .setLabel(mLabelString) .setIconResource(mIcon) .setOnClickBroadcast(intent) .build(); mContext.sendBroadcast(tileConfigurationIntent); + } } @@ -248,7 +253,7 @@ public class Utils { if (autoRootEnabled(mContext)) { return 2; } else { - if (rootStatus()) { + if (rootEnabled()) { return 1; } else { @@ -557,21 +562,7 @@ public class Utils { } } - public static boolean rootStatus() { - try { - String rootStatus = Shell.su("getprop magisk.root").toString(); - String fuckyeah = Shell.sh("which su").toString(); - Log.d("Magisk", "Utils: Rootstatus Checked, " + rootStatus + " and " + fuckyeah); - if (rootStatus.contains("0") && !fuckyeah.contains("su")) { - return false; - } else { - return true; - } - } catch (NullPointerException e) { - e.printStackTrace(); - return false; - } - } + public static boolean isMyServiceRunning(Class serviceClass, Context context) { ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);