Handle MagiskHide at boot

This commit is contained in:
topjohnwu
2017-02-01 23:54:32 +08:00
parent 0efb4da0ee
commit 99ef0b8cb4
17 changed files with 49 additions and 73 deletions

View File

@ -56,6 +56,7 @@ public class Global {
public static boolean isDarkTheme;
public static boolean shellLogging;
public static boolean devLogging;
public static boolean magiskHide;
public static int suRequestTimeout;
public static int suLogTimeout = 14;
public static int suAccessState;
@ -68,13 +69,14 @@ public class Global {
Configs.isDarkTheme = prefs.getBoolean("dark_theme", false);
Configs.devLogging = prefs.getBoolean("developer_logging", false);
Configs.shellLogging = prefs.getBoolean("shell_logging", false);
Configs.magiskHide = prefs.getBoolean("magiskhide", false);
updateMagiskInfo();
initSuAccess();
initSuConfigs(context);
// Initialize prefs
prefs.edit()
.putBoolean("dark_theme", Configs.isDarkTheme)
.putBoolean("magiskhide", Utils.itemExist(false, "/magisk/.core/magiskhide/enable"))
.putBoolean("magiskhide", Configs.magiskHide)
.putBoolean("busybox", Utils.commandExists("busybox"))
.putBoolean("hosts", Utils.itemExist(false, "/magisk/.core/hosts"))
.putString("su_request_timeout", String.valueOf(Configs.suRequestTimeout))

View File

@ -95,10 +95,6 @@ public class SettingsActivity extends AppCompatActivity {
setSummary();
CheckBoxPreference busyboxPreference = (CheckBoxPreference) findPreference("busybox");
CheckBoxPreference magiskhidePreference = (CheckBoxPreference) findPreference("magiskhide");
SwitchPreference hostsPreference = (SwitchPreference) findPreference("hosts");
findPreference("clear").setOnPreferenceClickListener((pref) -> {
ModuleHelper.clearRepoCache(getActivity());
return true;
@ -108,16 +104,10 @@ public class SettingsActivity extends AppCompatActivity {
prefScreen.removePreference(magiskCategory);
prefScreen.removePreference(suCategory);
} else {
if (!Global.Info.isSuClient) {
if (!Global.Info.isSuClient)
prefScreen.removePreference(suCategory);
}
if (Global.Info.magiskVersion < 9) {
hostsPreference.setEnabled(false);
busyboxPreference.setEnabled(false);
}
if (Global.Info.magiskVersion < 8) {
magiskhidePreference.setEnabled(false);
}
if (Global.Info.magiskVersion < 11)
prefScreen.removePreference(magiskCategory);
}
}
@ -149,20 +139,10 @@ public class SettingsActivity extends AppCompatActivity {
break;
case "magiskhide":
enabled = prefs.getBoolean("magiskhide", false);
new Async.RootTask<Void, Void, Void>() {
private boolean enable = enabled;
@Override
protected Void doInBackground(Void... params) {
if (enable) {
Utils.createFile("/magisk/.core/magiskhide/enable");
} else {
Utils.removeItem("/magisk/.core/magiskhide/enable");
}
return null;
}
}.exec();
Toast.makeText(getActivity(), R.string.settings_reboot_toast, Toast.LENGTH_LONG).show();
if (enabled)
new Async.MagiskHide().enable();
else
new Async.MagiskHide().disable();
break;
case "busybox":
enabled = prefs.getBoolean("busybox", false);
@ -170,11 +150,10 @@ public class SettingsActivity extends AppCompatActivity {
private boolean enable = enabled;
@Override
protected Void doInBackground(Void... params) {
if (enable) {
if (enable)
Utils.createFile("/magisk/.core/busybox/enable");
} else {
else
Utils.removeItem("/magisk/.core/busybox/enable");
}
return null;
}
}.exec();

View File

@ -76,8 +76,11 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
if (SNLIST.contains(info.packageName)) {
holder.checkBox.setChecked(true);
holder.checkBox.setEnabled(false);
holder.itemView.setOnClickListener(v ->
Snackbar.make(holder.itemView, R.string.safetyNet_hide_notice, Snackbar.LENGTH_LONG).show());
holder.itemView.setOnClickListener(v -> {
Snackbar snackbar = Snackbar.make(holder.itemView, R.string.safetyNet_hide_notice, Snackbar.LENGTH_LONG);
((TextView) snackbar.getView().findViewById(android.support.design.R.id.snackbar_text)).setMaxLines(2);
snackbar.show();
});
} else {
holder.checkBox.setEnabled(true);
holder.checkBox.setChecked(mHideList.contains(info.packageName));

View File

@ -3,12 +3,22 @@ package com.topjohnwu.magisk.receivers;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.widget.Toast;
import com.topjohnwu.magisk.Global;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Async;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Global.initSuAccess();
if (prefs.getBoolean("magiskhide", false)) {
Toast.makeText(context, R.string.start_magiskhide, Toast.LENGTH_SHORT).show();
new Async.MagiskHide().enable();
}
}
}

View File

@ -12,13 +12,13 @@ public class RequestActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Global.initSuConfigs(this);
Intent intent = getIntent();
if (intent == null) {
finish();
return;
}
Global.initSuConfigs(this);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(this, SuRequestActivity.class);
startActivity(intent);

View File

@ -293,18 +293,25 @@ public class Async {
public static class MagiskHide extends RootTask<Object, Void, Void> {
@Override
protected Void doInBackground(Object... params) {
boolean add = (boolean) params[0];
String packageName = (String) params[1];
Shell.su(MAGISK_HIDE_PATH + (add ? "add " : "rm ") + packageName);
String command = (String) params[0];
Shell.su(MAGISK_HIDE_PATH + command);
return null;
}
public void add(CharSequence packageName) {
exec(true, packageName);
exec("add " + packageName);
}
public void rm(CharSequence packageName) {
exec(false, packageName);
exec("rm " + packageName);
}
public void enable() {
exec("enable");
}
public void disable() {
exec("disable");
}
}