mirror of
https://github.com/topjohnwu/Magisk
synced 2024-11-14 22:28:37 +01:00
WIP Tile stuff
This commit is contained in:
parent
6a40e18193
commit
8176fb7bad
@ -32,11 +32,16 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
compile 'com.android.support:recyclerview-v7:24.2.0'
|
compile 'com.android.support:recyclerview-v7:24.2.1'
|
||||||
compile 'com.android.support:cardview-v7:24.2.0'
|
compile 'com.android.support:cardview-v7:24.2.1'
|
||||||
compile 'com.android.support:design:24.2.0'
|
compile 'com.android.support:design:24.2.1'
|
||||||
|
compile 'com.github.d8ahazard:BroadcastTileSupportUpdate:master'
|
||||||
compile 'com.jakewharton:butterknife:8.4.0'
|
compile 'com.jakewharton:butterknife:8.4.0'
|
||||||
compile 'com.github.michalis-vitos:aFileChooser:master'
|
compile 'com.github.michalis-vitos:aFileChooser:master'
|
||||||
compile 'com.github.kcoppock:BroadcastTileSupport:master'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
|
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,9 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".receivers.PrivateBroadcastReceiver"
|
android:name=".tile.PrivateBroadcastReceiver"
|
||||||
android:exported="false">
|
android:enabled="true"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="com.topjohnwu.magisk.CUSTOMTILE_ACTION_AUTOROOT"/>
|
<action android:name="com.topjohnwu.magisk.CUSTOMTILE_ACTION_AUTOROOT"/>
|
||||||
<action android:name="com.topjohnwu.magisk.CUSTOMTILE_ACTION_DISABLEROOT"/>
|
<action android:name="com.topjohnwu.magisk.CUSTOMTILE_ACTION_DISABLEROOT"/>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.topjohnwu.magisk.utils;
|
package com.topjohnwu.magisk;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
@ -24,7 +24,6 @@ import android.view.MenuItem;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.topjohnwu.magisk.module.RepoHelper;
|
import com.topjohnwu.magisk.module.RepoHelper;
|
||||||
import com.topjohnwu.magisk.utils.LogFragment;
|
|
||||||
import com.topjohnwu.magisk.services.MonitorService;
|
import com.topjohnwu.magisk.services.MonitorService;
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ public class QuickSettingTileService extends TileService {
|
|||||||
Icon iconAuto = Icon.createWithResource(getApplicationContext(), R.drawable.ic_autoroot);
|
Icon iconAuto = Icon.createWithResource(getApplicationContext(), R.drawable.ic_autoroot);
|
||||||
Tile tile = this.getQsTile();
|
Tile tile = this.getQsTile();
|
||||||
boolean autoRootStatus = Utils.autoRootEnabled(getApplicationContext());
|
boolean autoRootStatus = Utils.autoRootEnabled(getApplicationContext());
|
||||||
boolean rootStatus = Utils.rootStatus();
|
boolean rootStatus = Utils.rootEnabled();
|
||||||
Log.d("Magisk", "QST: Auto and root are " + autoRootStatus + " and " + rootStatus);
|
Log.d("Magisk", "QST: Auto and root are " + autoRootStatus + " and " + rootStatus);
|
||||||
if (autoRootStatus) {
|
if (autoRootStatus) {
|
||||||
tile.setLabel("Auto-root");
|
tile.setLabel("Auto-root");
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,9 @@
|
|||||||
package com.topjohnwu.magisk.receivers;
|
package com.topjohnwu.magisk.tile;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ public final class PrivateBroadcastReceiver extends BroadcastReceiver {
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
final String action = intent.getAction();
|
final String action = intent.getAction();
|
||||||
|
Log.d("Magisk","Broadcast Receiver, Made it this far!");
|
||||||
if (ACTION_AUTOROOT.equals(action)) {
|
if (ACTION_AUTOROOT.equals(action)) {
|
||||||
Utils.toggleAutoRoot(true, context);
|
Utils.toggleAutoRoot(true, context);
|
||||||
}
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -35,9 +35,10 @@ import com.topjohnwu.magisk.ReposFragment;
|
|||||||
import com.topjohnwu.magisk.module.Module;
|
import com.topjohnwu.magisk.module.Module;
|
||||||
import com.topjohnwu.magisk.module.Repo;
|
import com.topjohnwu.magisk.module.Repo;
|
||||||
import com.topjohnwu.magisk.module.RepoHelper;
|
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.MonitorService;
|
||||||
import com.topjohnwu.magisk.services.QuickSettingTileService;
|
import com.topjohnwu.magisk.services.QuickSettingTileService;
|
||||||
|
import com.topjohnwu.magisk.tile.CustomTileHelper;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -69,12 +70,12 @@ import javax.crypto.spec.DESKeySpec;
|
|||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
public static int magiskVersion, remoteMagiskVersion = -1, remoteAppVersion = -1;
|
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 TAG = "Magisk";
|
||||||
|
|
||||||
private static final String MAGISK_PATH = "/magisk";
|
public static final String MAGISK_PATH = "/magisk";
|
||||||
private static final String MAGISK_CACHE_PATH = "/cache/magisk";
|
public 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 UPDATE_JSON = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/updates/magisk_update.json";
|
||||||
|
|
||||||
public static boolean fileExist(String path) {
|
public static boolean fileExist(String path) {
|
||||||
List<String> ret;
|
List<String> ret;
|
||||||
@ -195,15 +196,18 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void SetupQuickSettingsTile(Context mContext) {
|
public static void SetupQuickSettingsTile(Context mContext) {
|
||||||
|
Log.d("Magisk","Utils: SetupQuickSettings called");
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
Intent serviceIntent = new Intent(mContext, QuickSettingTileService.class);
|
Intent serviceIntent = new Intent(mContext, QuickSettingTileService.class);
|
||||||
mContext.startService(serviceIntent);
|
mContext.startService(serviceIntent);
|
||||||
}
|
}
|
||||||
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
|
||||||
|
Log.d("Magisk","Utils: Marshmallow build detected");
|
||||||
String mLabelString;
|
String mLabelString;
|
||||||
int mRootIcon = R.drawable.root;
|
int mRootIcon = R.drawable.root;
|
||||||
int mAutoRootIcon = R.drawable.ic_autoroot;
|
int mAutoRootIcon = R.drawable.ic_autoroot;
|
||||||
int mRootsState = CheckRootsState(mContext);
|
int mRootsState = CheckRootsState(mContext);
|
||||||
|
Log.d("Magisk","Utils: Root State returned as " + mRootsState);
|
||||||
final Intent enableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_ENABLEROOT);
|
final Intent enableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_ENABLEROOT);
|
||||||
final Intent disableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_DISABLEROOT);
|
final Intent disableBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_DISABLEROOT);
|
||||||
final Intent autoBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_AUTOROOT);
|
final Intent autoBroadcast = new Intent(PrivateBroadcastReceiver.ACTION_AUTOROOT);
|
||||||
@ -232,12 +236,13 @@ public class Utils {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Intent tileConfigurationIntent = new BroadcastTileIntentBuilder(mContext, "com.magisk.ROOT_TILE")
|
Intent tileConfigurationIntent = new BroadcastTileIntentBuilder(mContext, "ROOT")
|
||||||
.setLabel(mLabelString)
|
.setLabel(mLabelString)
|
||||||
.setIconResource(mIcon)
|
.setIconResource(mIcon)
|
||||||
.setOnClickBroadcast(intent)
|
.setOnClickBroadcast(intent)
|
||||||
.build();
|
.build();
|
||||||
mContext.sendBroadcast(tileConfigurationIntent);
|
mContext.sendBroadcast(tileConfigurationIntent);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +253,7 @@ public class Utils {
|
|||||||
if (autoRootEnabled(mContext)) {
|
if (autoRootEnabled(mContext)) {
|
||||||
return 2;
|
return 2;
|
||||||
} else {
|
} else {
|
||||||
if (rootStatus()) {
|
if (rootEnabled()) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
} else {
|
} 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) {
|
public static boolean isMyServiceRunning(Class<?> serviceClass, Context context) {
|
||||||
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
|
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
|
||||||
|
Loading…
Reference in New Issue
Block a user