From eebd64bedbc570535758c56b347eedac6dcb14d5 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Fri, 30 Sep 2016 18:07:08 +0800 Subject: [PATCH] Remove Auto Root Code Revert this commit after things are sorted out --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 55 +---- .../com/topjohnwu/magisk/AboutActivity.java | 2 +- .../topjohnwu/magisk/AutoRootFragment.java | 172 ------------- .../com/topjohnwu/magisk/MainActivity.java | 5 - .../com/topjohnwu/magisk/RootFragment.java | 123 ++-------- .../topjohnwu/magisk/SettingsFragment.java | 91 ++----- .../com/topjohnwu/magisk/SplashActivity.java | 34 +-- .../magisk/receivers/AutoStartReceiver.java | 27 -- .../receivers/PrivateBroadcastReceiver.java | 37 --- .../magisk/services/MonitorService.java | 158 ------------ .../magisk/services/TileServiceCompat.java | 136 ----------- .../magisk/services/TileServiceNewApi.java | 116 --------- .../magisk/utils/ApplicationAdapter.java | 114 --------- .../com/topjohnwu/magisk/utils/Utils.java | 231 +----------------- .../ic_stat_notification_autoroot_off.png | Bin 1029 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 1063 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 1215 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 1052 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 720 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 749 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 749 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 723 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 1620 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 1640 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 1458 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 1512 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 2788 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 2920 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 2599 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 2697 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 4409 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 4512 -> 0 bytes .../ic_stat_notification_autoroot_off.png | Bin 3875 -> 0 bytes .../ic_stat_notification_autoroot_on.png | Bin 4098 -> 0 bytes app/src/main/res/drawable/ic_autoroot.xml | 4 - .../main/res/drawable/ic_autoroot_white.xml | 4 - app/src/main/res/drawable/root_grey.xml | 9 - app/src/main/res/drawable/root_white.xml | 9 - .../main/res/layout/auto_root_fragment.xml | 14 -- app/src/main/res/layout/list_item_app.xml | 89 ------- app/src/main/res/layout/root_fragment.xml | 19 -- app/src/main/res/menu/drawer.xml | 18 -- app/src/main/res/values/dimens.xml | 1 - app/src/main/res/values/strings.xml | 25 +- app/src/main/res/xml/accessibilityservice.xml | 11 - app/src/main/res/xml/uisettings.xml | 28 --- 47 files changed, 68 insertions(+), 1469 deletions(-) delete mode 100644 app/src/main/java/com/topjohnwu/magisk/AutoRootFragment.java delete mode 100644 app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java delete mode 100644 app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java delete mode 100644 app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java delete mode 100644 app/src/main/java/com/topjohnwu/magisk/services/TileServiceCompat.java delete mode 100644 app/src/main/java/com/topjohnwu/magisk/services/TileServiceNewApi.java delete mode 100644 app/src/main/java/com/topjohnwu/magisk/utils/ApplicationAdapter.java delete mode 100644 app/src/main/res/drawable-hdpi-v11/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-hdpi-v11/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-mdpi-v11/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-mdpi-v11/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-xhdpi-v11/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-xhdpi-v11/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-xxhdpi-v11/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-xxhdpi-v11/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-xxxhdpi-v11/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-xxxhdpi-v11/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_stat_notification_autoroot_off.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_stat_notification_autoroot_on.png delete mode 100644 app/src/main/res/drawable/ic_autoroot.xml delete mode 100644 app/src/main/res/drawable/ic_autoroot_white.xml delete mode 100644 app/src/main/res/drawable/root_grey.xml delete mode 100644 app/src/main/res/drawable/root_white.xml delete mode 100644 app/src/main/res/layout/auto_root_fragment.xml delete mode 100644 app/src/main/res/layout/list_item_app.xml delete mode 100644 app/src/main/res/xml/accessibilityservice.xml diff --git a/app/build.gradle b/app/build.gradle index 0b96b8f81..f8e519b2c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,14 +32,13 @@ repositories { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') + 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.getkeepsafe.taptargetview:taptargetview:1.2.0' compile 'com.jakewharton:butterknife:8.4.0' compile 'com.github.michalis-vitos:aFileChooser:master' compile 'com.google.code.gson:gson:2.7' - + compile 'com.android.support:support-v4:24.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d8444dde1..efcf4940c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ @@ -15,62 +14,24 @@ tools:ignore="ProtectedPermissions" /> - - - - - - - - - - - - - - - - - - - - - - - + android:exported="true"/> + android:exported="true" + android:theme="@style/SplashTheme"> + @@ -101,6 +62,7 @@ + @@ -114,14 +76,7 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/AboutActivity.java b/app/src/main/java/com/topjohnwu/magisk/AboutActivity.java index 35da88c57..1ee5ef6cc 100644 --- a/app/src/main/java/com/topjohnwu/magisk/AboutActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/AboutActivity.java @@ -26,7 +26,7 @@ import java.io.InputStream; import butterknife.BindView; import butterknife.ButterKnife; -public class AboutActivity extends AppCompatActivity { +public class AboutActivity extends AppCompatActivity { private static final String SOURCE_CODE_URL = "https://github.com/topjohnwu/MagiskManager"; private static final String XDA_THREAD = "http://forum.xda-developers.com/showthread.php?t=3432382"; diff --git a/app/src/main/java/com/topjohnwu/magisk/AutoRootFragment.java b/app/src/main/java/com/topjohnwu/magisk/AutoRootFragment.java deleted file mode 100644 index ff6691c30..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/AutoRootFragment.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.topjohnwu.magisk; - -import android.app.ListFragment; -import android.app.ProgressDialog; -import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.os.AsyncTask; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.annotation.Nullable; - -import android.util.TypedValue; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ListView; - -import com.topjohnwu.magisk.utils.ApplicationAdapter; -import com.topjohnwu.magisk.utils.Logger; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class AutoRootFragment extends ListFragment { - private PackageManager packageManager = null; - private List applist = null; - private ApplicationAdapter listadaptor = null; - public ListView listView; - public SharedPreferences prefs; - List arrayBlackList; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - View view = inflater.inflate(R.layout.auto_root_fragment, container, false); - int horizontalMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()); - int verticalMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()); - TypedValue tv = new TypedValue(); - int actionBarHeight = 130; - if (getActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { - actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); - } - - view.setPadding(horizontalMargin, actionBarHeight, horizontalMargin, verticalMargin); - - return view; - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - - } - - @Override - public void onResume() { - super.onResume(); - initializeElements(); - super.onResume(); - getActivity().setTitle(R.string.auto_toggle); - - - } - - private void initializeElements() { - listView = getListView(); - packageManager = getActivity().getPackageManager(); - new LoadApplications().execute(); - } - - @Override - public void onListItemClick(ListView l, View v, int position, long id) { - Logger.dev("Click"); - super.onListItemClick(l, v, position, id); - ApplicationInfo app = applist.get(position); - ToggleApp(app.packageName, position, v); - - } - - private void ToggleApp(String appToCheck, int position, View v) { - Logger.dev("Magisk", "AutoRootFragment: ToggleApp called for " + appToCheck); - Set blackListSet = prefs.getStringSet("auto_blacklist", null); - assert blackListSet != null; - arrayBlackList = new ArrayList<>(blackListSet); - - if (!arrayBlackList.contains(appToCheck)) { - arrayBlackList.add(appToCheck); - - } else { - for (int i = 0; i < arrayBlackList.size(); i++) { - if (appToCheck.equals(arrayBlackList.get(i))) { - arrayBlackList.remove(i); - } - } - - } - Logger.dev("Committing set, value is: " + arrayBlackList.toString()); - SharedPreferences.Editor editor = prefs.edit(); - editor.putStringSet("auto_blacklist", new HashSet<>(arrayBlackList)); - editor.apply(); - listadaptor.UpdateRootStatusView(position, v); - - } - - private List checkForLaunchIntent(List list) { - ArrayList applist = new ArrayList<>(); - for (ApplicationInfo info : list) { - try { - if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { - if (!info.packageName.contains("magisk")) { - applist.add(info); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - Collections.sort(applist, new CustomComparator()); - - return applist; - } - - public class CustomComparator implements Comparator { - @Override - public int compare(ApplicationInfo o1, ApplicationInfo o2) { - return o1.loadLabel(packageManager).toString().compareToIgnoreCase(o2.loadLabel(packageManager).toString()); - } - } - - private class LoadApplications extends AsyncTask { - private ProgressDialog progress = null; - - @Override - protected Void doInBackground(Void... params) { - applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); - listadaptor = new ApplicationAdapter(getActivity(), - R.layout.list_item_app, applist); - - return null; - } - - @Override - protected void onCancelled() { - super.onCancelled(); - } - - @Override - protected void onPostExecute(Void result) { - setListAdapter(listadaptor); - progress.dismiss(); - super.onPostExecute(result); - } - - @Override - protected void onPreExecute() { - progress = ProgressDialog.show(getActivity(), null, - "Loading application info..."); - super.onPreExecute(); - } - - @Override - protected void onProgressUpdate(Void... values) { - super.onProgressUpdate(values); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/MainActivity.java b/app/src/main/java/com/topjohnwu/magisk/MainActivity.java index 5a1198b71..3b7f91416 100644 --- a/app/src/main/java/com/topjohnwu/magisk/MainActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/MainActivity.java @@ -150,11 +150,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On tag = "root"; navFragment = new RootFragment(); break; - case R.id.autoroot: - setTitle(R.string.auto_toggle); - tag = "autoroot"; - navFragment = new AutoRootFragment(); - break; case R.id.modules: setTitle(R.string.modules); tag = "modules"; diff --git a/app/src/main/java/com/topjohnwu/magisk/RootFragment.java b/app/src/main/java/com/topjohnwu/magisk/RootFragment.java index 55670eb3c..b5901d625 100644 --- a/app/src/main/java/com/topjohnwu/magisk/RootFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/RootFragment.java @@ -22,7 +22,6 @@ import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; -import com.topjohnwu.magisk.services.MonitorService; import com.topjohnwu.magisk.utils.Logger; import com.topjohnwu.magisk.utils.Shell; import com.topjohnwu.magisk.utils.Utils; @@ -39,13 +38,11 @@ public class RootFragment extends Fragment { @BindView(R.id.progressBar) ProgressBar progressBar; @BindView(R.id.rootSwitchView) View rootToggleView; - @BindView(R.id.autoRootSwitchView) View autoRootToggleView; @BindView(R.id.selinuxSwitchView) View selinuxToggleView; @BindView(R.id.rootStatusView) View rootStatusView; @BindView(R.id.safetynetStatusView) View safetynetStatusView; @BindView(R.id.selinuxStatusView) View selinuxStatusView; @BindView(R.id.root_toggle) Switch rootToggle; - @BindView(R.id.auto_root_toggle) Switch autoRootToggle; @BindView(R.id.selinux_toggle) Switch selinuxToggle; @BindView(R.id.root_status_container) View rootStatusContainer; @BindView(R.id.root_status_icon) ImageView rootStatusIcon; @@ -57,19 +54,17 @@ public class RootFragment extends Fragment { @BindView(R.id.safety_net_icon) ImageView safetyNetStatusIcon; int statusOK = R.drawable.ic_check_circle; - int statusAuto = R.drawable.ic_autoroot; int statusError = R.drawable.ic_error; int statusUnknown = R.drawable.ic_help; private int colorOK, colorFail, colorNeutral, colorWarn; - private boolean autoRootStatus; + //private boolean autoRootStatus; private SharedPreferences.OnSharedPreferenceChangeListener listener; - private View view; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - view = inflater.inflate(R.layout.root_fragment, container, false); + View view = inflater.inflate(R.layout.root_fragment, container, false); ButterKnife.bind(this, view); int[] attrs0 = {R.attr.ColorOK}; int[] attrs1 = {R.attr.ColorFail}; @@ -87,17 +82,9 @@ public class RootFragment extends Fragment { ta1.recycle(); ta2.recycle(); ta3.recycle(); - autoRootStatus = Utils.autoToggleEnabled(getActivity()); prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - if (autoRootStatus) { - if (!Utils.hasServicePermission(getActivity())) { - autoRootStatus = false; - } - } - rootToggle.setEnabled(!autoRootStatus); - autoRootToggle.setChecked(autoRootStatus); updateUI(); rootToggle.setOnClickListener(toggle -> { @@ -111,19 +98,6 @@ public class RootFragment extends Fragment { }); - autoRootToggle.setOnClickListener(toggle -> { - if (!Utils.hasServicePermission(getActivity())) { - Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); - Toast.makeText(getActivity(), "Please enable accessibility access for Magisk's auto-toggle feature to work.", Toast.LENGTH_LONG).show(); - startActivityForResult(intent, 100); - } else { - toggleAutoRoot(autoRootToggle.isChecked()); - - } - } - - ); - selinuxToggle.setOnClickListener(toggle -> { new AsyncTask() { @@ -148,10 +122,8 @@ public class RootFragment extends Fragment { super.onResume(); getActivity().setTitle(R.string.root); listener = (pref, key) -> { - if ((key.contains("autoRootEnable")) || (key.equals("root"))) { Logger.dev("RootFragmnet, keychange detected for " + key); - //new updateUI().execute(); updateUI(); } @@ -166,45 +138,7 @@ public class RootFragment extends Fragment { prefs.unregisterOnSharedPreferenceChangeListener(listener); } - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - // Check which request we're responding to - Log.d("Magisk", "Got result: " + requestCode + " and " + resultCode); - if (requestCode == 100) { - if (Utils.hasServicePermission(getActivity())) { - toggleAutoRoot(true); - Snackbar.make(view, getActivity().getString(R.string.auto_toggle) + " has been enabled.", Snackbar.LENGTH_LONG).show(); - - } else { - autoRootToggle.setChecked(false); - Snackbar.make(view, getActivity().getString(R.string.auto_toggle) + " disabled, permissions required.", Snackbar.LENGTH_LONG).show(); - } - - } - } - - private void toggleAutoRoot(boolean toggleState) { - autoRootStatus = toggleState; - Utils.toggleAutoRoot(toggleState, getActivity()); - if (toggleState) { - Intent myIntent = new Intent(getActivity(), MonitorService.class); - getActivity().startService(myIntent); - rootToggle.setEnabled(false); - boolean boo = Utils.isMyServiceRunning(MonitorService.class, getActivity()); - if (boo) { - Intent myServiceIntent = new Intent(getActivity(), MonitorService.class); - getActivity().startService(myServiceIntent); - } - } else { - Intent myIntent = new Intent(getActivity(), MonitorService.class); - getActivity().stopService(myIntent); - rootToggle.setEnabled(true); - } - - } - private void updateUI() { - autoRootToggle.setChecked(autoRootStatus); progressBar.setVisibility(View.GONE); rootStatusView.setVisibility(View.VISIBLE); safetynetStatusView.setVisibility(View.VISIBLE); @@ -212,7 +146,6 @@ public class RootFragment extends Fragment { if (Shell.rootAccess()) { rootToggleView.setVisibility(View.VISIBLE); - autoRootToggleView.setVisibility(View.VISIBLE); selinuxToggleView.setVisibility(View.VISIBLE); } @@ -268,40 +201,27 @@ public class RootFragment extends Fragment { break; case 1: // Proper root - if (autoRootStatus) { - rootStatusContainer.setBackgroundColor(colorOK); - rootStatusIcon.setImageResource(statusAuto); - rootStatusIcon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); - rootStatus.setTextColor(colorOK); - rootStatus.setText(R.string.root_auto_unmounted); - rootToggle.setEnabled(false); - autoRootToggle.setChecked(true); - safetyNetStatusIcon.setImageResource(statusOK); - safetyNetStatus.setText(R.string.root_auto_unmounted_info); + rootToggle.setEnabled(true); + if (Utils.rootEnabled()) { + // Mounted + rootStatusContainer.setBackgroundColor(colorWarn); + rootStatusIcon.setImageResource(statusError); + rootStatus.setTextColor(colorWarn); + rootStatus.setText(R.string.root_enabled); + rootToggle.setChecked(true); + safetyNetStatusIcon.setImageResource(statusError); + safetyNetStatus.setText(R.string.root_enabled_info); break; } else { - rootToggle.setEnabled(true); - if (Utils.rootEnabled()) { - // Mounted - rootStatusContainer.setBackgroundColor(colorWarn); - rootStatusIcon.setImageResource(statusError); - rootStatus.setTextColor(colorWarn); - rootStatus.setText(R.string.root_enabled); - rootToggle.setChecked(true); - safetyNetStatusIcon.setImageResource(statusError); - safetyNetStatus.setText(R.string.root_enabled_info); - break; - } else { - // Disabled - rootStatusContainer.setBackgroundColor(colorOK); - rootStatusIcon.setImageResource(statusOK); - rootStatus.setTextColor(colorOK); - rootStatus.setText(R.string.root_disabled); - rootToggle.setChecked(false); - safetyNetStatusIcon.setImageResource(statusOK); - safetyNetStatus.setText(R.string.root_disabled_info); - break; - } + // Disabled + rootStatusContainer.setBackgroundColor(colorOK); + rootStatusIcon.setImageResource(statusOK); + rootStatus.setTextColor(colorOK); + rootStatus.setText(R.string.root_disabled); + rootToggle.setChecked(false); + safetyNetStatusIcon.setImageResource(statusOK); + safetyNetStatus.setText(R.string.root_disabled_info); + break; } case 2: // Improper root @@ -312,7 +232,6 @@ public class RootFragment extends Fragment { rootToggle.setChecked(true); safetyNetStatusIcon.setImageResource(statusError); safetyNetStatus.setText(R.string.root_system_info); - autoRootToggleView.setVisibility(View.GONE); rootToggleView.setVisibility(View.GONE); selinuxToggleView.setVisibility(View.GONE); break; diff --git a/app/src/main/java/com/topjohnwu/magisk/SettingsFragment.java b/app/src/main/java/com/topjohnwu/magisk/SettingsFragment.java index 2b2d33972..faaf6321c 100644 --- a/app/src/main/java/com/topjohnwu/magisk/SettingsFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/SettingsFragment.java @@ -51,21 +51,12 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer View view = super.onCreateView(inflater, container, savedInstanceState); themePreference = (ListPreference) findPreference("theme"); CheckBoxPreference busyboxPreference = (CheckBoxPreference) findPreference("busybox"); - CheckBoxPreference quickTilePreference = (CheckBoxPreference) findPreference("enable_quicktile"); busyboxPreference.setChecked(Utils.commandExists("unzip")); PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this); - CheckBoxPreference keepRootOffPreference = (CheckBoxPreference) findPreference("keep_root_off"); - CheckBoxPreference hideRootNotificationPreference = (CheckBoxPreference) findPreference("hide_root_notification"); themePreference.setSummary(themePreference.getValue()); if (MagiskFragment.magiskVersion == -1) { - quickTilePreference.setEnabled(false); - keepRootOffPreference.setEnabled(false); - hideRootNotificationPreference.setEnabled(false); busyboxPreference.setEnabled(false); } else { - quickTilePreference.setEnabled(true); - keepRootOffPreference.setEnabled(true); - hideRootNotificationPreference.setEnabled(true); busyboxPreference.setEnabled(true); } @@ -88,65 +79,35 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Logger.dev("Settings: NewValue is " + key); - if (key.equals("theme")) { - String pref = sharedPreferences.getString(key, ""); + switch (key) { + case "theme": + String pref = sharedPreferences.getString(key, ""); - themePreference.setSummary(pref); - if (pref.equals("Dark")) { - getActivity().getApplication().setTheme(R.style.AppTheme_dh); - } else { - getActivity().getApplication().setTheme(R.style.AppTheme); - } - Intent intent = new Intent(getActivity(), MainActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra("Relaunch", "Settings"); - startActivity(intent); + themePreference.setSummary(pref); + if (pref.equals("Dark")) { + getActivity().getApplication().setTheme(R.style.AppTheme_dh); + } else { + getActivity().getApplication().setTheme(R.style.AppTheme); + } + Intent intent = new Intent(getActivity(), MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("Relaunch", "Settings"); + startActivity(intent); - Logger.dev("SettingsFragment: theme is " + pref); + Logger.dev("SettingsFragment: theme is " + pref); - } else if (key.equals("enable_quicktile")) { - boolean checked = sharedPreferences.getBoolean("enable_quicktile", false); - if (checked) { - new AsyncTask () { - @Override - protected Boolean doInBackground(Void... voids) { - return Utils.installTile(getActivity()); - } - @Override - protected void onPostExecute(Boolean result) { - super.onPostExecute(result); - if (result) { - Toast.makeText(getActivity(), "Tile installed", Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getActivity(), "Tile installation error", Toast.LENGTH_SHORT).show(); - } - } - }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); - } else { - new AsyncTask () { - @Override - protected Boolean doInBackground(Void... voids) { - return Utils.uninstallTile(getActivity()); - } - @Override - protected void onPostExecute(Boolean result) { - super.onPostExecute(result); - if (result) { - Toast.makeText(getActivity(), "Tile uninstalled", Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getActivity(), "Tile uninstallation error", Toast.LENGTH_SHORT).show(); - } - } - }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); - } - } else if (key.equals("busybox")) { - boolean checked = sharedPreferences.getBoolean("busybox", false); - new Async.LinkBusyBox(checked).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); - } else if (key.equals("developer_logging")) { - Logger.devLog = sharedPreferences.getBoolean("developer_logging", false); - } else if (key.equals("shell_logging")) { - Logger.logShell = sharedPreferences.getBoolean("shell_logging", false); + break; + case "busybox": + boolean checked = sharedPreferences.getBoolean("busybox", false); + new Async.LinkBusyBox(checked).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); + break; + case "developer_logging": + Logger.devLog = sharedPreferences.getBoolean("developer_logging", false); + break; + case "shell_logging": + Logger.logShell = sharedPreferences.getBoolean("shell_logging", false); + break; } } diff --git a/app/src/main/java/com/topjohnwu/magisk/SplashActivity.java b/app/src/main/java/com/topjohnwu/magisk/SplashActivity.java index a9fafc004..6e4fd95fb 100644 --- a/app/src/main/java/com/topjohnwu/magisk/SplashActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/SplashActivity.java @@ -7,7 +7,6 @@ import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; -import com.topjohnwu.magisk.services.MonitorService; import com.topjohnwu.magisk.utils.Async; import com.topjohnwu.magisk.utils.Logger; import com.topjohnwu.magisk.utils.Utils; @@ -28,38 +27,6 @@ public class SplashActivity extends AppCompatActivity { Logger.devLog = defaultPrefs.getBoolean("developer_logging", false); Logger.logShell = defaultPrefs.getBoolean("shell_logging", false); - // Set up default preferences,make sure we add "extra" blacklist entries. - if (!defaultPrefs.contains("auto_blacklist")) { - Logger.dev("SplashActivity: Setting default preferences for application"); - SharedPreferences.Editor editor = defaultPrefs.edit(); - Set set = new HashSet<>(); - set.add("com.google.android.apps.walletnfcrel"); - set.add("com.google.android.gms"); - set.add("com.google.commerce.tapandpay"); - editor.putStringSet("auto_blacklist", set); - editor.putBoolean("autoRootEnable", false); - editor.putBoolean("root", Utils.rootEnabled()); - editor.apply(); - } - - // Set up toggle states based on preferences, start services, disable root if set - if (Utils.autoToggleEnabled(getApplicationContext())) { - if (!Utils.hasServicePermission(getApplicationContext())) { - Utils.toggleAutoRoot(false, getApplicationContext()); - } - } - if (Utils.autoToggleEnabled(getApplicationContext())) { - if (!Utils.isMyServiceRunning(MonitorService.class, getApplicationContext())) { - Intent myIntent = new Intent(getApplication(), MonitorService.class); - getApplication().startService(myIntent); - } - } else if (defaultPrefs.getBoolean("keep_root_off", false)) { - Utils.toggleRoot(false, getApplication()); - } - - // Set up quick settings tile - Utils.setupQuickSettingsTile(getApplicationContext()); - // Initialize Utils.init(this); @@ -67,6 +34,7 @@ public class SplashActivity extends AppCompatActivity { .putBoolean("module_done", false) .putBoolean("repo_done", false) .putBoolean("update_check_done", false) + .putBoolean("root", Utils.rootEnabled()) .apply(); new Async.CheckUpdates(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); diff --git a/app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java b/app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java deleted file mode 100644 index 0049e3e7f..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/receivers/AutoStartReceiver.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.topjohnwu.magisk.receivers; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.preference.PreferenceManager; -import android.util.Log; - -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); - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("keep_root_off", false)) { - Utils.toggleRoot(false, context); - } - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("enable_quicktile", false)) { - 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 deleted file mode 100644 index fec1d40a8..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/receivers/PrivateBroadcastReceiver.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.topjohnwu.magisk.receivers; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -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(); - Log.d("Magisk","Broadcast Receiver, Made it this far! We're trying to " + action); - if (ACTION_AUTOROOT.equals(action)) { - Utils.toggleAutoRoot(!Utils.autoToggleEnabled(context),context); - } - if (ACTION_ENABLEROOT.equals(action)) { - Utils.toggleAutoRoot(false, context); - Utils.toggleRoot(true, context); - } - if (ACTION_DISABLEROOT.equals(action)) { - Utils.toggleAutoRoot(false, context); - Utils.toggleRoot(false, context); - } - - Utils.setupQuickSettingsTile(context); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java b/app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java deleted file mode 100644 index c1dfa0782..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/services/MonitorService.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.topjohnwu.magisk.services; - -import android.accessibilityservice.AccessibilityService; -import android.accessibilityservice.AccessibilityServiceInfo; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.ComponentName; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.os.Build; -import android.preference.PreferenceManager; -import android.support.v4.app.NotificationCompat; -import android.util.Log; -import android.view.accessibility.AccessibilityEvent; - -import com.topjohnwu.magisk.MainActivity; -import com.topjohnwu.magisk.R; -import com.topjohnwu.magisk.utils.Logger; -import com.topjohnwu.magisk.utils.Utils; - -import java.util.Set; - -public class MonitorService extends AccessibilityService { - private Boolean disableroot; - - @Override - protected void onServiceConnected() { - super.onServiceConnected(); - - //Configure these here for compatibility with API 13 and below. - AccessibilityServiceInfo config = new AccessibilityServiceInfo(); - config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; - config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; - disableroot = false; - if (Build.VERSION.SDK_INT >= 16) - //Just in case this helps - config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; - - setServiceInfo(config); - - } - - @Override - public void onCreate() { - super.onCreate(); - Log.d("Magisk", "MonitorService: Service created"); - } - - @Override - public void onDestroy() { - super.onDestroy(); - Log.d("Magisk", "MonitorService: Service destroyed"); - } - - @Override - public void onAccessibilityEvent(AccessibilityEvent event) { - if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { - ComponentName componentName = new ComponentName( - event.getPackageName().toString(), - event.getClassName().toString() - ); - ActivityInfo activityInfo = tryGetActivity(componentName); - boolean isActivity = activityInfo != null; - if (isActivity) { - Logger.dev("MonitorService: CurrentActivity: " + event.getPackageName()); - - String mPackage = componentName.getPackageName(); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - if (Utils.autoToggleEnabled(getApplicationContext())) { - Set setBlackList = prefs.getStringSet("auto_blacklist", null); - - if (setBlackList != null) { - disableroot = setBlackList.contains(mPackage); - ForceRoot(!disableroot); - String appFriendly = getAppName(mPackage); - ShowNotification(disableroot, appFriendly); - } - } - } - } - } - - private ActivityInfo tryGetActivity(ComponentName componentName) { - try { - return getPackageManager().getActivityInfo(componentName, 0); - } catch (PackageManager.NameNotFoundException e) { - return null; - } - } - - private String getAppName(String packageName) { - PackageManager pkManager = getPackageManager(); - ApplicationInfo appInfo; - String appName; - try { - appInfo = pkManager.getApplicationInfo(packageName, 0); - appName = (String) ((appInfo != null) ? pkManager.getApplicationLabel(appInfo) : "???"); - return appName; - } catch (final PackageManager.NameNotFoundException e) { - return ""; - } - } - - private void ForceRoot(Boolean rootToggle) { - - String rootString = rootToggle ? "on" : "off"; - if (Utils.rootEnabled() != rootToggle) { - Logger.dev("MonitorService: toggling root " + rootString); - Utils.toggleRoot(rootToggle, getApplicationContext()); - if (Utils.rootEnabled() != rootToggle) { - Utils.toggleRoot(rootToggle, getApplicationContext()); - Logger.dev("MonitorService: FORCING to " + rootString); - } - - } - } - - private void ShowNotification(boolean rootAction, String packageName) { - NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - NotificationCompat.Builder mBuilder; - if (!PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("hide_root_notification", false)) { - if (rootAction) { - - Intent intent = new Intent(getApplication(), MainActivity.class); - intent.putExtra("relaunch", "relaunch"); - String rootMessage; - PendingIntent pendingIntent = PendingIntent.getActivity( - getApplicationContext(), - 0, - intent, - PendingIntent.FLAG_UPDATE_CURRENT); - if (packageName.equals("")) { - rootMessage = "Root has been disabled"; - } else { - rootMessage = "Root has been disabled for " + packageName; - } - mBuilder = - new NotificationCompat.Builder(getApplicationContext()) - .setSmallIcon(disableroot ? R.drawable.ic_stat_notification_autoroot_off : R.drawable.ic_stat_notification_autoroot_on) - .setContentIntent(pendingIntent) - .setContentTitle(getApplicationContext().getString(R.string.auto_toggle) + " status changed") - .setContentText(rootMessage); - int mNotificationId = 1; - mNotifyMgr.notify(mNotificationId, mBuilder.build()); - } else { - mNotifyMgr.cancelAll(); - } - } - - } - - @Override - public void onInterrupt() { - } -} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/services/TileServiceCompat.java b/app/src/main/java/com/topjohnwu/magisk/services/TileServiceCompat.java deleted file mode 100644 index 6cf814d85..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/services/TileServiceCompat.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.topjohnwu.magisk.services; - -import android.app.Service; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.IBinder; - -import com.kcoppock.broadcasttilesupport.BroadcastTileIntentBuilder; -import com.topjohnwu.magisk.R; -import com.topjohnwu.magisk.utils.Utils; - -public class TileServiceCompat extends Service { - private static BroadcastReceiver clickTileReceiver; - - private static boolean root, autoRoot; - - public static final String TILE_ID = "Magisk"; - public static final String ACTION_TILE_CLICK = "magisk.ACTION_TILE_CLICK"; - public static final String EXTRA_CLICK_TYPE = "magisk.EXTRA_CLICK_TYPE"; - public static final int CLICK_TYPE_UNKNOWN = -1; - public static final int CLICK_TYPE_SIMPLE = 0; - public static final int CLICK_TYPE_LONG = 1; - - public TileServiceCompat() { - } - - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - root = true; - registerClickTileReceiver(); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - updateRoots(); - updateTile(); - return super.onStartCommand(intent, flags, startId); - } - - private void updateRoots() { - root = Utils.rootEnabled(); - autoRoot = Utils.autoToggleEnabled(getApplicationContext()); - } - - - private void registerClickTileReceiver() { - clickTileReceiver = new BroadcastReceiver() { - - @Override - public void onReceive(Context context, Intent intent) { - int clickType = intent.getIntExtra(EXTRA_CLICK_TYPE, CLICK_TYPE_UNKNOWN); - switch (clickType) { - case CLICK_TYPE_SIMPLE: - onSimpleClick(); - break; - case CLICK_TYPE_LONG: - onLongClick(); - break; - } - } - }; - registerReceiver(clickTileReceiver, new IntentFilter(ACTION_TILE_CLICK)); - } - - - private void onSimpleClick() { - updateRoots(); - updateTile(); - if (autoRoot) { - - Utils.toggleAutoRoot(false, getApplicationContext()); - if (!Utils.hasServicePermission(getApplicationContext())) { - Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - sendBroadcast(it); - } - } else { - Utils.toggleRoot(!root, getApplicationContext()); - } - } - - private void onLongClick() { - updateRoots(); - updateTile(); - Utils.toggleAutoRoot(!autoRoot,getApplicationContext()); - if (!Utils.hasServicePermission(getApplicationContext())) { - Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - sendBroadcast(it); - } - } - - private void updateTile() { - BroadcastTileIntentBuilder broadcastTileIntentBuilder = new BroadcastTileIntentBuilder(this, TILE_ID); - if (autoRoot) { - broadcastTileIntentBuilder.setLabel(getApplicationContext().getString(R.string.auto_toggle)); - broadcastTileIntentBuilder.setIconResource(R.drawable.ic_autoroot_white); - - } else { - if (root) { - broadcastTileIntentBuilder.setLabel("Root enabled"); - broadcastTileIntentBuilder.setIconResource(R.drawable.root_white); - - } else { - broadcastTileIntentBuilder.setLabel("Root disabled"); - broadcastTileIntentBuilder.setIconResource(R.drawable.root_grey); - - } - } - - Intent simpleClick = new Intent(ACTION_TILE_CLICK); - simpleClick.putExtra(EXTRA_CLICK_TYPE, CLICK_TYPE_SIMPLE); - Intent longClick = new Intent(ACTION_TILE_CLICK); - longClick.putExtra(EXTRA_CLICK_TYPE, CLICK_TYPE_LONG); - - broadcastTileIntentBuilder.setVisible(true); - broadcastTileIntentBuilder.setOnClickBroadcast(simpleClick); - broadcastTileIntentBuilder.setOnLongClickBroadcast(longClick); - this.sendBroadcast(broadcastTileIntentBuilder.build()); - - } - - - @Override - public void onDestroy() { - super.onDestroy(); - unregisterReceiver(clickTileReceiver); - } - -} diff --git a/app/src/main/java/com/topjohnwu/magisk/services/TileServiceNewApi.java b/app/src/main/java/com/topjohnwu/magisk/services/TileServiceNewApi.java deleted file mode 100644 index 5b4475803..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/services/TileServiceNewApi.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.topjohnwu.magisk.services; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.graphics.drawable.Icon; -import android.preference.PreferenceManager; -import android.service.quicksettings.Tile; - -import com.topjohnwu.magisk.R; -import com.topjohnwu.magisk.utils.Logger; -import com.topjohnwu.magisk.utils.Utils; - -@SuppressLint("NewApi") -public class TileServiceNewApi extends android.service.quicksettings.TileService { - private int mRootsState; - - public TileServiceNewApi() { - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Logger.dev("QST (New): Service start"); - return super.onStartCommand(intent, flags, startId); - - } - - @Override - public void onTileAdded() { - super.onTileAdded(); - Logger.dev("QST (New): Tile added"); - setupState(); - this.getQsTile().updateTile(); - } - - @Override - public void onClick() { - mRootsState = Utils.CheckRootsState(getApplicationContext()); - switchState(mRootsState); - Logger.dev("QST (New): Tile clicked"); - } - - - @Override - public void onStartListening() { - super.onStartListening(); - setupState(); - Logger.dev("QST (New): Tile is listening"); - } - - @Override - public void onStopListening() { - super.onStopListening(); - Logger.dev("QST (New): Tile stopped listening"); - } - - private void setupState() { - if (!Utils.hasServicePermission(getApplicationContext())) { - PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putBoolean("autoRootEnable",false).apply(); - } - mRootsState = Utils.CheckRootsState(getApplicationContext()); - Logger.dev("QST (New): SetupState"); - Icon iconRoot = Icon.createWithResource(getApplicationContext(), R.drawable.root); - Icon iconAuto = Icon.createWithResource(getApplicationContext(), R.drawable.ic_autoroot); - Tile tile = getQsTile(); - Logger.dev("QST: State is " + mRootsState); - - switch (mRootsState) { - case 2: - tile.setLabel(getApplicationContext().getString(R.string.auto_toggle)); - tile.setIcon(iconAuto); - tile.setState(Tile.STATE_ACTIVE); - break; - - case 1: - tile.setLabel("Root enabled"); - tile.setIcon(iconRoot); - tile.setState(Tile.STATE_ACTIVE); - break; - - default: - tile.setLabel("Root disabled"); - tile.setIcon(iconRoot); - tile.setState(Tile.STATE_INACTIVE); - break; - } - - tile.updateTile(); - } - - private void switchState(int rootsState) { - - switch (rootsState) { - case 2: - Utils.toggleRoot(true, getApplicationContext()); - if (!Utils.hasServicePermission(getApplicationContext())) { - Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - sendBroadcast(it); - } - Utils.toggleAutoRoot(false, getApplicationContext()); - break; - case 1: - Utils.toggleRoot(false, getApplicationContext()); - break; - case 0: - if (!Utils.hasServicePermission(getApplicationContext())) { - Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - sendBroadcast(it); - } - Utils.toggleAutoRoot(true, getApplicationContext()); - break; - } - this.onStartListening(); - setupState(); - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/ApplicationAdapter.java b/app/src/main/java/com/topjohnwu/magisk/utils/ApplicationAdapter.java deleted file mode 100644 index f55b68d99..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/utils/ApplicationAdapter.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.topjohnwu.magisk.utils; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.preference.PreferenceManager; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.CheckBox; -import android.widget.ImageView; -import android.widget.TextView; - -import com.topjohnwu.magisk.R; - -import java.util.List; -import java.util.Set; - -public class ApplicationAdapter extends ArrayAdapter { - private List appsList = null; - private Context context; - private PackageManager packageManager; - public SharedPreferences prefs; - - public ApplicationAdapter(Context context, int textViewResourceId, - List appsList) { - super(context, textViewResourceId, appsList); - this.context = context; - this.appsList = appsList; - packageManager = context.getPackageManager(); - } - - @Override - public int getCount() { - return ((null != appsList) ? appsList.size() : 0); - } - - @Override - public ApplicationInfo getItem(int position) { - return ((null != appsList) ? appsList.get(position) : null); - } - - @Override - public long getItemId(int position) { - return position; - } - - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view = convertView; - - prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - if (null == view) { - LayoutInflater layoutInflater = (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = layoutInflater.inflate(R.layout.list_item_app, null); - } - - ApplicationInfo applicationInfo = appsList.get(position); - if (null != applicationInfo) { - TextView appName = (TextView) view.findViewById(R.id.app_name); - TextView packageName = (TextView) view.findViewById(R.id.app_paackage); - ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); - CheckBox statusview = (CheckBox) view.findViewById(R.id.checkbox); - appName.setText(applicationInfo.loadLabel(packageManager)); - packageName.setText(applicationInfo.packageName); - iconview.setImageDrawable(applicationInfo.loadIcon(packageManager)); - if (CheckApp(applicationInfo.packageName)) { - statusview.setChecked(true); - } else { - statusview.setChecked(false); - } - } - return view; - } - - public void UpdateRootStatusView(int position, View convertView) { - View view = convertView; - if (null == view) { - LayoutInflater layoutInflater = (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = layoutInflater.inflate(R.layout.list_item_app, null); - } - ApplicationInfo applicationInfo = appsList.get(position); - if (null != applicationInfo) { - CheckBox statusview = (CheckBox) view.findViewById(R.id.checkbox); - if (CheckApp(applicationInfo.packageName)) { - statusview.setChecked(true); - } else { - statusview.setChecked(false); - } - } - - } - - private boolean CheckApp(String appToCheck) { - boolean starter = false; - Set set = prefs.getStringSet("auto_blacklist", null); - if (set != null) { - for (String string : set) { - if (string.equals(appToCheck)) { - starter = true; - } - } - } - - return starter; - - } - -} \ 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 4c411aedb..fc960e6e6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java +++ b/app/src/main/java/com/topjohnwu/magisk/utils/Utils.java @@ -24,10 +24,6 @@ import com.kcoppock.broadcasttilesupport.BroadcastTileIntentBuilder; import com.topjohnwu.magisk.MagiskFragment; import com.topjohnwu.magisk.R; import com.topjohnwu.magisk.receivers.DownloadReceiver; -import com.topjohnwu.magisk.receivers.PrivateBroadcastReceiver; -import com.topjohnwu.magisk.services.MonitorService; -import com.topjohnwu.magisk.services.TileServiceCompat; -import com.topjohnwu.magisk.services.TileServiceNewApi; import java.io.File; import java.io.UnsupportedEncodingException; @@ -88,13 +84,6 @@ public class Utils { return commandExists("su"); } - public static boolean autoToggleEnabled(Context context) { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - Logger.dev("Utils: AutoRootEnableCheck is " + preferences.getBoolean("autoRootEnable", false)); - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("autoRootEnable", false); - - } - public static boolean createFile(String path) { String command = "touch " + path + " 2>/dev/null; if [ -f " + path + " ]; then echo true; else echo false; fi"; return Shell.rootAccess() && Boolean.parseBoolean(Shell.su(command).get(0)); @@ -112,38 +101,13 @@ public class Utils { } else { Shell.su("rm -rf /magisk/.core/bin", "setprop magisk.root 0"); } - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("enable_quicktile", false)) { - setupQuickSettingsTile(context); - } +// if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("enable_quicktile", false)) { +// setupQuickSettingsTile(context); +// } PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("root", b).apply(); } } - public static void toggleAutoRoot(Boolean b, Context context) { - Logger.dev("Utils: toggleAutocalled for " + b ); - if (MagiskFragment.magiskVersion != -1) { - if (!Utils.hasServicePermission(context)) { - Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); - Toast.makeText(context, "Please enable Magisk in accessibility for auto-toggle work.", Toast.LENGTH_LONG).show(); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } else { - Logger.dev("Utils: toggleAuto checks passed, setting" + b ); - PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("autoRootEnable", b).apply(); - Intent myServiceIntent = new Intent(context, MonitorService.class); - myServiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (b) { - context.startService(myServiceIntent); - } else { - context.stopService(myServiceIntent); - } - } - } - if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("enable_quicktile", false)) { - setupQuickSettingsTile(context); - } - } - static List getModList(String path) { List ret; String command = "find " + path + " -type d -maxdepth 1 ! -name \"*.core\" ! -name \"*lost+found\" ! -name \"*magisk\""; @@ -208,195 +172,6 @@ public class Utils { return secret; } - public static void setupQuickSettingsTile(Context mContext) { - Logger.dev("Utils: SetupQuickSettings called"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - Logger.dev("Utils: Starting N quick settings service"); - Intent serviceIntent = new Intent(mContext, TileServiceNewApi.class); - mContext.startService(serviceIntent); - - } - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { - Logger.dev("Utils: Marshmallow build detected"); - String mLabelString; - int mRootIcon = R.drawable.root_white; - int mAutoRootIcon = R.drawable.ic_autoroot_white; - int mRootDisabled = R.drawable.root_grey; - int mRootsState = CheckRootsState(mContext); - Logger.dev("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); - Intent intent; - - int mIcon; - switch (mRootsState) { - case 2: - mLabelString = mContext.getString(R.string.auto_toggle); - mIcon = mAutoRootIcon; - intent = autoBroadcast; - break; - case 1: - mLabelString = "Root enabled"; - mIcon = mRootIcon; - intent = disableBroadcast; - break; - case 0: - mLabelString = "Root disabled"; - mIcon = mRootDisabled; - intent = enableBroadcast; - break; - default: - mLabelString = "Root disabled"; - mIcon = mRootDisabled; - intent = disableBroadcast; - break; - } - - Intent tileConfigurationIntent = new BroadcastTileIntentBuilder(mContext, "Magisk") - .setLabel(mLabelString) - .setIconResource(mIcon) - .setOnClickBroadcast(intent) - .setOnLongClickBroadcast(autoBroadcast) - .setVisible(true) - .build(); - mContext.sendBroadcast(tileConfigurationIntent); - mContext.startService(new Intent(mContext, TileServiceCompat.class)); - - } - } - - public static boolean installTile(Context context) { - String qsTileId; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - qsTileId = "custom(com.topjohnwu.magisk/.services.TileServiceNewApi)"; - } else { - qsTileId = "intent(Magisk)"; - } - - List lines = Shell.su("settings get secure sysui_qs_tiles"); - if (lines != null && lines.size() == 1) { - List tiles = new LinkedList<>(Arrays.asList(lines.get(0).split(","))); - Logger.dev("Utils: Current Tile String is " + tiles); - if (tiles.size() > 1) { - for (String tile : tiles) { - if (tile.equals(qsTileId)) { - return true; - } - } - - tiles.add(Math.round(tiles.size() / 2), qsTileId); - String newTiles = TextUtils.join(",", tiles); - Logger.dev("Utils: NewtilesString is " + newTiles); - Shell.su("settings put secure sysui_qs_tiles \"" + newTiles + "\""); - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { - Utils.refreshService(context); - } - return true; - } - } - return false; - } - - public static boolean uninstallTile(Context context) { - - String qsTileId; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - qsTileId = "custom(com.topjohnwu.magisk/.services.TileServiceNewApi)"; - } else { - qsTileId = "intent(Magisk)"; - } - List lines = Shell.su("settings get secure sysui_qs_tiles"); - if (lines != null && lines.size() == 1) { - List tiles = new LinkedList<>(Arrays.asList(lines.get(0).split(","))); - if (tiles.size() > 1) { - boolean isPresent = false; - for (int i = 0; i < tiles.size(); i++) { - if (tiles.get(i).equals(qsTileId)) { - isPresent = true; - tiles.remove(i); - break; - } - } - if (isPresent) { - String newTiles = TextUtils.join(",", tiles); - Shell.su("settings put secure sysui_qs_tiles \"" + newTiles + "\""); - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { - Utils.refreshService(context); - } - } - return true; - - } - } - return false; - } - - private static void refreshService(Context context) { - context.startService(new Intent(context, TileServiceCompat.class)); - } - - // 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 (autoToggleEnabled(mContext)) { - return 2; - } else { - if (rootEnabled()) { - return 1; - - } else { - return 0; - - } - } - } - - // To check if service is enabled - public static boolean hasServicePermission(Context mContext) { - int accessibilityEnabled = 0; - final String service = mContext.getPackageName() + "/" + MonitorService.class.getCanonicalName(); - try { - accessibilityEnabled = Settings.Secure.getInt( - mContext.getApplicationContext().getContentResolver(), - android.provider.Settings.Secure.ACCESSIBILITY_ENABLED); - } catch (Settings.SettingNotFoundException e) { - Log.e(TAG, "Error finding setting, default accessibility to not found: " - + e.getMessage()); - } - TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':'); - - if (accessibilityEnabled == 1) { - String settingValue = Settings.Secure.getString( - mContext.getApplicationContext().getContentResolver(), - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); - if (settingValue != null) { - mStringColonSplitter.setString(settingValue); - while (mStringColonSplitter.hasNext()) { - String accessibilityService = mStringColonSplitter.next(); - - if (accessibilityService.equalsIgnoreCase(service)) { - return true; - } - } - } - } else { - Log.v(TAG, "***ACCESSIBILITY IS DISABLED***"); - } - - return false; - } - - public static boolean isMyServiceRunning(Class serviceClass, Context context) { - ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); - for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { - if (serviceClass.getName().equals(service.service.getClassName())) { - return true; - } - } - return false; - } - public interface ItemClickListener { void onItemClick(View view, int position); diff --git a/app/src/main/res/drawable-hdpi-v11/ic_stat_notification_autoroot_off.png b/app/src/main/res/drawable-hdpi-v11/ic_stat_notification_autoroot_off.png deleted file mode 100644 index 3b036d552ab589e46dc6c111cc491ecb59183907..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1029 zcmV+g1p51lP)SP!iIHtQ0R;+FFx0L|I6Vo170t z2uZRWrpTc%=dnxIzw2I?XV3Hh-M`=ed9nN5eR!_xdwuWgbU$JT8`{C}FcKg$I|Fzc z*fk9L378^j^F$3C70|iBW5CV{z#QO0U`DL1leDtzo7v&O+L-?ZESB_p(|}O{%>>>C z_Dllr0}%}app2QG>E7GRd7clrV}3HTD&Ckgx>I56ga12ZLk=5sSU3V09L zBle$_w6N`ZM`9?Hd;lEV;WHZ~ElBL#1l%6;e}Ic6J=iy(+kl%p048apBz@C2pxMByEkfN}AD6XSK<@*`chNk-_4Sg@92Su0l~N`qsDHc9S4g_C8jzVy20jJ$ z>KjSOn=Q$saBS3GnP=pDc5lG%J!k47(|zPx;L&8joxmL(25pwKbtphhL1s1=cs|vw z<`K`r7sa9%(uI;HMxww*zEmZvDTb>8kqbYDxDD1L$DjqZCC|T822ZK+=Y4Ky3%jY-%`j33ad9b0v9= z^Pc%qz&pg^TfXeMXg^6_<*P?k9x}5FBD8l2$;%}zD_YFVv-Y+gI%%IK>5FPKHMPvl z9Q1QZp|dhWk|#%J=jf?*mnU`{?6!WUf$B0zYkFfS zB5ob9D1`pz{jsD^f*o(#9BgS#++VVhcT2jiPe4ZkF9C;!P>+uDBzf=b*L6LxB02MS zz(EPXGm_5k6Ocbw?n?r%kTf1VIAms?<^8Fg$3v1z_c%~ouYd+>t2po<5F#ivBnFL<00000NkvXXu0mjfN^#~* diff --git a/app/src/main/res/drawable-hdpi-v11/ic_stat_notification_autoroot_on.png b/app/src/main/res/drawable-hdpi-v11/ic_stat_notification_autoroot_on.png deleted file mode 100644 index 0fdf86afdc1cf27d5f7fc9a6a7f632a6ac50f258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1063 zcmV+?1laqDP)b+cklo93YM?hoKNNuSLWpiRJnr2Gm= zk0wBN?p4W|ACh!UTm0)}C?XC8{2L_)1COVHugdNEGQE4i*E^Zh{I4)K`;-$6 zv~R1Lm6Ggdlbb9eY>p3sLuMG!d`Yi#0%`*h5oZFgrg7gi2RdJA$DaKG=dw9v&d-k0 zl78qqSf^8uQVjCIOb3`K-bd^h0CUF9)gS;|{Wfc0tI;1|_6(}ieUKo0-U11BWKCrWy! zu;W_jnMUNk1Guf4b7(+k19sqAgl&?vux=6&Cjn0Zv&uU=`CLi9sl8+yhKflp1deD~ zZFAJD?kUdlE>)`-(9-10P9cu;O(-8gDl6VTqkr$Ej> z<8Rl!Vud7^v;UJOpkqp8?p8Uy8RtuSp${NOSeFY;hK>bX8CLlO_&Pn$1`bQ9$dP$# zJ>4S9r&XXu#2dgVN%=fUTl^dm_PhH5*EyAON9`3;A+a+KMTAeD%gttqdN}Z6>L`q3 zmZZ#JZ)}qSiin+nXMyvIM(3@YB)J3KDiLu#a9`T-VM$l_M$nkp1<2i~<4jGGZhIF< za?w@+eUVDs-%7{v^5B3l5)2;OC*^ovvYaL>UD}sl8Z<6TYUkxG87RG|4svr zzEvg)sfgI4^jq`O_^oal`{u1tASVNKK}nQ#-4;pnlBrHFS$*H6c($b6ar7l-V%}tc z+*@5%X8r}Z-+Cee@@Exa_v&BkBwaZ+g1$~25oV~iKQ292OZqMWvcq4SI@a5ppH`*< ht}_lzMd@_b{0CxCN;J5q;S~S?002ovPDHLkV1f`(@>c)= diff --git a/app/src/main/res/drawable-hdpi/ic_stat_notification_autoroot_off.png b/app/src/main/res/drawable-hdpi/ic_stat_notification_autoroot_off.png deleted file mode 100644 index 0b2a38c88685e64cb492cf4c82b19c75d981e9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1215 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 diff --git a/app/src/main/res/drawable-mdpi/ic_stat_notification_autoroot_off.png b/app/src/main/res/drawable-mdpi/ic_stat_notification_autoroot_off.png deleted file mode 100644 index 8e96789af39fb4d76b6873ff91919b2a39bda940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmVX1^@s6IQ*`u0008CNkle^6whu>JlhH$QAFa4Ew=o z5k{^m%*aJ;TDWKLh?fCiiimCjzy=~3Hcj(80Gw7z#q;y?!;a%bB{lFouOW(}F(Jf)l#-cw#x%_X zM6`>U?=kbZWmzX$T3X_g0Ius+6VW6yZ$vC?aXLFYFXnQ&;V6ol48v$@Z*RY=7fJ#Q z4i2WmFnofDdjVh$5f7G^m#Z)g$CD)a6h+aYo}QksD*!ytJ0gVGsuzMF$Pm#^!!X`T zDQ_5tQIpT-kC~?VTuS*602W$XTdx%vjE;^Pb8~YOL{z6~$8ikIT=1D?S)i0Ee0ohv zsnZ|Z+S)c30UXCMD=I2Z644d_s7A!hl1m8y-T;7RrgeFt^FoNv-QC^SOKQ;H-+w7d zl5_erW=6v>z9^;EnWov;)z$U*Py4R`@I0?3j^jsh98Uv40s!?(1tY%iH#?4_85N@d zkjv#R0KgtSR!VL1eSe1#Vnzrdk|as%yp(b}l}dfk;xY62Y&QF@*ag>hpCw6BrxRK@ zA}WaWYhKuhsPC=+x^SOu+Zybr4|;ohw+kWGGjk&%o&kV60B{=-v&?){<04`YGr!dC z^nL%8<2d?yzm25L69mD1rBp2dG!W5i(=?wF(KgM>vaGYVZF|e#kD`bJ0|WJ87(Pgn zWU{id@;CrA=kxh1%&bq6mStVFZCkVZD~bTF>kcd~E@q{ar_$;4$n5OwSP%rYh&aW} zb(UpKR8>_S&SWyGWE=bX`gRjhS_m;7MbS4YWj!LMn0W&L+|*quD=XXI(b4h#pFUVl f@qhC*@FxBMaCJQ?2DG*R00000NkvXXu0mjfRNYlA diff --git a/app/src/main/res/drawable-mdpi/ic_stat_notification_autoroot_on.png b/app/src/main/res/drawable-mdpi/ic_stat_notification_autoroot_on.png deleted file mode 100644 index f2a0e20f814811cea857a839426008c5f80b4540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbQBP)X1^@s6IQ*`u0007-Nkl;=^=7fQ8nuWZ+SF2#kPkN@IV@Bv?S`~Tnk79{ zNK3s4f}hyC2SK!mco4*k2r5VrCEc0X*^yl|h_OZJtpmej-Y`FA{{J@*VUq(lc^5b>6j^6}{C=o#C#M^sgv2LLM?jb8WlTUUdrsi_^IP^dvE9Uz2cn$2b@91bs0 zN{2K}J0FY1?rsRE)oMeW^Ccm~Cql>xUDtO}N*{Wj_l9%cZy3h+bpfVnD&cT=(Q%w% z0H~(Z>Db)d+@#|;IRHqe)9IPt_P3v4+jc)9MiCJ_&m)YnBb@V{x~{*{b^Rk_>;Pk| zx4XOh86l)8rTjcLHg>rUs8lKwuIm=0l;A^L*A1dS6-DV-1HfuBnLOAA6pO{ZQp$Y* z&?}{!LBt=P=NWzkfSUlY9{^H__|Ct+5aMe#n|6~@?U(=>f>#|T6;O_TKW^ej7$)32&(WNmHj zX($wW!Z|;rs_M9581{ONCjgYosn6lIWez958Hl~N8C3WX0F0!pRQ zK&#cdfrxfKpRZY#HBKqLrmAW+m&?^RYI|F~rTtIK{|W!$Hz`aHzwH13002ovPDHLk FV1j?_P@4b% diff --git a/app/src/main/res/drawable-xhdpi-v11/ic_stat_notification_autoroot_off.png b/app/src/main/res/drawable-xhdpi-v11/ic_stat_notification_autoroot_off.png deleted file mode 100644 index 9436172df604bf6df2cfa31659b279a5623531fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1620 zcmV-a2CMmrP)AVbp=bx60S?@}~0Ol-c02=_e1N&qf+4z5em6CD0&HzbomtzsJB`^cnJkfj0 z?kDN7b}`he8?f)+1snz}mie*&O!t`%43+eE0$?043Rpgwds_kE`vnfb8$^Ty`AlG$ znyj=lDV8_k1lE&5QY|=u> zZqrYa4J-jT=qCX?mP5dMzz|8VHZiDYE>xW8lfZs0Hui~5kmUUC(_a>FDs}LdapPN> zF3C62NO}$6VxWpTd=6kbIP0s{8q8XEs{RW$2$e!D?cmC*Xf#m1D31U+>e=!^1r3{?Z{KE zU8u@<&zVu>TAc#82{;B=y3zgiR>=VVce{-NM1*zin*(}lSL4;jN%DI!pL7CX9cKt& z&x{&0wxExS10_At7Xaq-CuYpDT+c3LDzIJ~BY!Caz%~WxGyN{bMwy1pl#~W}qYG>7LNx$R0mc`VS36Z#XXf~2b!OcM zO#-V@WD^8^1`rXh!X^MmBt=WBz0L8{ve8A0LES9L|L<6O0bsC8M8FSIDZjRO>|6ts zm6>&2Zu<0J?%48TLZ1Lc#0tRqz?jSc7dLe`Vt+T0yQp2wTL-MK08F881a?g}GTS@| z@S~TyOKyuH6m-J?Tw+#+{5r1#R@8&|UN&2+O&9uCMh;UjwzRe;gW2*sfNTuS9 zy{-%NR^_FG`3Jzko{Qg$DUw{N)k-@6j{*nQuF!i0$IxU+d19#CsT}~HPF;tg_vXWw zMQ}ToYNZlDL~IQFuXw0ktv3oEyA>(PZOK|`1;7Dn=D9`13NBdI%*I^`x|(u9Qi=(l z_0osSznQT84t&wVI+MDSCB0i~eK)i?BFuYk$QF02WK5Y7Bf^#00l+;#S~8XZTpPQ+ zXdr!(j^2TylkhOGZ?dbii8~9^%64Hy_y*mnGuSG5A2=lKk9LcqQvl9N?)k5tY-nF~ z6V|zZo7Q?=QRcp5q@p`x*nO(Vf+5Iz{QgOE5;*YByd$5 z1a_qf^W;-#GTW*GX(Gng}3EAc}%RZ=S#YYeIr0B%^FoAml^ zg!#G80$B^7Xs4KUUY-=~&gCx@?Ludv5~zut`=hD2SaHXC!))An-gMfeu4`!m zz+V_`{D@>1=kM{7JYE{_6ZZ4(0=*Q|5!b-|fc>+tHxA^nlCJOC`X&!qM7Ry&k}-7) zGtT~!{A!i}%slNDX%XWZ_*CHV;sA1PHL=J>RjjlTt|m9&FDJu+J(3k?;51N=*P*$KSEiFO72~eV4Bn5!Oqo!(2C`BEs!R zf3({uoAZpTx4r~&Er4!MCY@KbUfdSkDqHUZ(+x?Fce~F*0nn{+P3A4~0R9Er4Aej( SF{Nt&0000oAxeX&6-1jDkw~<$ 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 SbjmCM0000^ycCsh5_= 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 JPDHLkV1n%{;KKj_ diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_notification_autoroot_on.png b/app/src/main/res/drawable-xxhdpi/ic_stat_notification_autoroot_on.png deleted file mode 100644 index 49c77b52309d74d45410098ea88a94b291941826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2697 zcmV;43U>90P)*;iUnXr(?{8G$kgKA=`$P!Q>$){&Q@&`>~a=wt7>=jEJEHgj^>WRq++3^Td^ z?CibY`M&S>ecw6X<3R8sf8d8)e=rH)gZAL02PQpGrUfQLs7wQvy?oLGWt*@}29q8r z(|~0!pY%Z4CM=Ud#XYcn`}Qj!gc|?=mutEn7DD9Ku3fv?uYYfE@3{z}rvU(GYTr&k z2#lCJ2~ewAcR0l2_S@d(=?xGY;3&F4Fw>ko)B_3=X@pr zLwc3nrfJ?83WW~&0aq-9cI?>=E0oD(9wLNX z4FIt8_ZZ`qQ>ILLu)e zhdAd!pY@*&1OjUt8X8`J5XuPw;5d#|TU#5Ul*WV*N}%#La9{hA}M7XW9)0%MpUQI-wea(XliQOrCUFj z%hhqte@iJ{;G=&NA+&n#+`0Sxo42sOA^--C&M;$azIGJ45W-&o075M-EpHYSa2%(q zwzl>f&+~pNgs?Pvbz1GTEUP^f3cWg9zB}yzy1Kf~wk&It=XoonlmSifKMljkH8(eR z`c9rRIOlh{uDjHyq^mY>e}DgDj^n&<^H$6Q*=+Xfl+p-e>=IoegwSt<5b;PP^1Nn! zqo$_jQpVUm&iV8q=R1T?nx^@!k*u%iPpbzU$Elt*Yt|i{^HrSl*;+XK7h`-kW9;^5 zGU1!jtW3BnVg9+ zz6CNzfj7$6Q%sXUVAVSiF~yrfPoEs86o6hDP@&!qp3|> zsP8BA7h~Mp+S$({T;T-=_H}Kz(QqF@APW64yODW%i5cd1tt2+No z2;s~k{0>0~y?}x+TY)Js435%^;w|)!&@M8eLki-Q5ct!}ZDISmiQs=X6 z+qUzC5Iq2ZCE9xlAv__3SP+ZF`ifPZ!|76XB1@%GA$gkgs44Jh-ogRe9g9Pz3m(|jo>(k)<5*4}UEa6>B$LTMc%JuZ-vr@R%d#T<{r&s& zi9>gHx2jv(2qC8mFztBx2;m*k zX!I|-Lg{pR86hOeIX_oBeJDccpp^0o+qRFD4Iq=roWmIVieVUwgb)BBr0VXXzl^bk zsz;Dg4(VYH!}ybBSuaT`m2#)nLkJDd`FzjwE)qf*+UesVgkGzzu6~wt4vWc?Qtnq} z%y1KlAs$F15~>M_aL%tPWep)jwGcwZ@(>Rqgia!ah7MmLM4WR=2vOzZD~!s z@yo>+|591}PLVE*&z^%>A&3_*afM(ZqlOI%xTud&6umb>)v2FW}k^s88y6Qd8 zQx^_36BQz*&cKrD9r}WI*)6;XcnoLtl^?Nau6Q08u$D`5c6QfnI6kSOGYT6bI2A8|8d#_@q zw|f}lZYgCl9*_U4AV>{sgTY{2U2F&;>NNUe7~}f^08Qm&-Z6(zM@Pq5rfJ?w2)R;M z9wDScX0_|Ozt)GZi9}+d5aKpU=`vq$`=aU*Y}>xClvT&_eMAooOeHSQ=kpJ6&h-{h z$#~2(&2`ae^dGvwWHPyy5E2qXoUgrS5W)vc(~L$Uk=MtfU@6)W0XU8`GZ+lskUrMkO`A5oU0^hjE557RM%A?Fn^#>@KnOS5wtaZQ0I2zm5Tea>-5Y&E z1wv>=AQ0Hs($bRG!e`plsZ)1RO0QE*j<)7i!!Q!IZRaYXyy98Z1BpapKBZJ$lYYY| zSY6aD@+YFrn>W`PhS9?qQ?<|FutU4B+ zlO7n0wJJe7>48dEbu2t5Junt)Rf2ZX1C_AqSa|*)ary6;%VLKc00000NkvXXu0mjf D8D0Q} diff --git a/app/src/main/res/drawable-xxxhdpi-v11/ic_stat_notification_autoroot_off.png b/app/src/main/res/drawable-xxxhdpi-v11/ic_stat_notification_autoroot_off.png deleted file mode 100644 index 1ec7c01d8eeeb16b592055fe415a3e79758e621d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4409 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 diff --git a/app/src/main/res/drawable-xxxhdpi-v11/ic_stat_notification_autoroot_on.png b/app/src/main/res/drawable-xxxhdpi-v11/ic_stat_notification_autoroot_on.png deleted file mode 100644 index 3d296475d7b79307aac368aaa18def78779beba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4512 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 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_stat_notification_autoroot_on.png b/app/src/main/res/drawable-xxxhdpi/ic_stat_notification_autoroot_on.png deleted file mode 100644 index 53cf319fa2e0c060b5acb9ebe3a273a357b8ee4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4098 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 C)zA|F diff --git a/app/src/main/res/drawable/ic_autoroot.xml b/app/src/main/res/drawable/ic_autoroot.xml deleted file mode 100644 index a8f96a803..000000000 --- a/app/src/main/res/drawable/ic_autoroot.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_autoroot_white.xml b/app/src/main/res/drawable/ic_autoroot_white.xml deleted file mode 100644 index ec532328f..000000000 --- a/app/src/main/res/drawable/ic_autoroot_white.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/root_grey.xml b/app/src/main/res/drawable/root_grey.xml deleted file mode 100644 index f6bb38dc2..000000000 --- a/app/src/main/res/drawable/root_grey.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/root_white.xml b/app/src/main/res/drawable/root_white.xml deleted file mode 100644 index c56582098..000000000 --- a/app/src/main/res/drawable/root_white.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout/auto_root_fragment.xml b/app/src/main/res/layout/auto_root_fragment.xml deleted file mode 100644 index a3a15447b..000000000 --- a/app/src/main/res/layout/auto_root_fragment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/list_item_app.xml b/app/src/main/res/layout/list_item_app.xml deleted file mode 100644 index b3402a2fb..000000000 --- a/app/src/main/res/layout/list_item_app.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/root_fragment.xml b/app/src/main/res/layout/root_fragment.xml index 848aaf637..f8460580f 100644 --- a/app/src/main/res/layout/root_fragment.xml +++ b/app/src/main/res/layout/root_fragment.xml @@ -36,25 +36,6 @@ android:text="@string/root_toggle" android:textSize="16sp"/> - - - - - - - - - - - - - - - - - 300dip 3dp 10dp - 50dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7aea07243..44c837780 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,7 +7,6 @@ Open navigation drawer Close navigation drawer Root - Auto-toggle Modules Downloads Log @@ -34,8 +33,6 @@ Root enabled. Safety Net (Android Pay) will NOT work Root disabled Safety Net (Android Pay) should work, but no root temporarily\nYou might need to manually add a card in Android Pay app to refresh the root status of AP - Root set to auto-toggle - Root will auto unmount for selected applications. Safety Net (Android Pay) should work. Magisk Incompatible Root Detected Root improperly installed. Safety Net (Android Pay) will NOT work, and impossible to toggle. @@ -64,7 +61,6 @@ Save to SD Send Reload - SD card not found or not writable Clear log now Log successfully cleared Could not clear the log: @@ -76,7 +72,7 @@ Main developers topjohnwu in collaboration with Digitalhigh and Dvdandroid.]]> App\'s changelog - + App\'s version Source code Donation @@ -87,7 +83,6 @@ This feature will not work without permission to write external storage. No root access, functionality limited No thanks - Accessibility service required for Magisk auto-unroot feature %1$s Update! New version v%2$s of %1$s is available!\nChangelog:\n%3$s Install %1$s @@ -117,20 +112,18 @@ Enable BusyBox Make Magisk\'s built-in BusyBox be visible in PATH - Quick Settings - Enable Quicksettings Tile - Click here to enable or disable the quick settings tile. - - Root - Disable root unless otherwise enabled by auto-toggle or toggle. - Keep root turned off - When checked, auto-toggle notifications will not be displayed. - Hide auto-toggle notifications - Development Enable advanced debug logging Check this to enable more verbose logging. Enable shell command debug logging Check this to enable logging all shell commands and output + + + + + + + + diff --git a/app/src/main/res/xml/accessibilityservice.xml b/app/src/main/res/xml/accessibilityservice.xml deleted file mode 100644 index 08bf96e91..000000000 --- a/app/src/main/res/xml/accessibilityservice.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/xml/uisettings.xml b/app/src/main/res/xml/uisettings.xml index 19157c3b4..c256b37b6 100644 --- a/app/src/main/res/xml/uisettings.xml +++ b/app/src/main/res/xml/uisettings.xml @@ -20,34 +20,6 @@ - - - - - - - - - - - - - -