OSDN Git Service

Settings: Root appops access in developer settings
authorAdrian DC <radian.dc@gmail.com>
Fri, 5 Aug 2016 07:11:44 +0000 (09:11 +0200)
committerSteve Kondik <shade@chemlab.org>
Thu, 11 Aug 2016 17:25:49 +0000 (10:25 -0700)
 * Allow users to directly access the root app settings,
    as the feature is mostly unknown and often a reason
    for users to try using alternatives to CM root

 * Use the appops extra intent to link the su tab,
    introduced in I79d963ecbadc624dc45a398387a348691318b6be

Change-Id: Ia5bc9d56fb11700b19d73336fad13c0a936091ff
Signed-off-by: Adrian DC <radian.dc@gmail.com>
res/values/cm_strings.xml
res/xml/development_prefs.xml
src/com/android/settings/DevelopmentSettings.java

index d05ce40..7f7b290 100644 (file)
     <string name="root_access_adb">ADB only</string>
     <string name="root_access_all">Apps and ADB</string>
 
+    <!-- Preference link for root appops -->
+    <string name="root_appops_title">Manage root accesses</string>
+    <string name="root_appops_summary">View and control the root rules</string>
+
     <!-- NFC PreferenceCategory title -->
     <string name="nfc_title_category">NFC</string>
 
index a332ee5..c95cfb8 100644 (file)
         android:title="@string/root_access"
         android:persistent="false" />
 
+    <Preference
+        android:key="root_appops"
+        android:title="@string/root_appops_title"
+        android:summary="@string/root_appops_summary" />
+
     <SwitchPreference
         android:key="update_recovery"
         android:title="@string/update_recovery_title"
index 5ae3b1b..3666212 100644 (file)
@@ -79,6 +79,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settings.Settings.AppOpsSummaryActivity;
 import com.android.settings.fuelgauge.InactiveApps;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
@@ -178,6 +179,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
     private static final String ROOT_ACCESS_KEY = "root_access";
     private static final String ROOT_ACCESS_PROPERTY = "persist.sys.root_access";
 
+    private static final String ROOT_APPOPS_KEY = "root_appops";
+
     private static final String UPDATE_RECOVERY_KEY = "update_recovery";
     private static final String UPDATE_RECOVERY_PROPERTY = "persist.sys.recovery_update";
 
@@ -292,6 +295,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
     private PreferenceScreen mDevelopmentTools;
     private ColorModePreference mColorModePreference;
 
+    private Preference mRootAppops;
+
     private SwitchPreference mAdvancedReboot;
 
     private SwitchPreference mUpdateRecovery;
@@ -477,6 +482,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
 
         mRootAccess = (ListPreference) findPreference(ROOT_ACCESS_KEY);
         mRootAccess.setOnPreferenceChangeListener(this);
+
+        mRootAppops = (Preference) findPreference(ROOT_APPOPS_KEY);
+        mRootAppops.setOnPreferenceClickListener(this);
+
         if (!removeRootOptionsIfRequired()) {
             if (isRootForAppsAvailable()) {
                 mRootAccess.setEntries(R.array.root_access_entries);
@@ -486,6 +495,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
                 mRootAccess.setEntryValues(R.array.root_access_values_adb);
             }
             mAllPrefs.add(mRootAccess);
+            mAllPrefs.add(mRootAppops);
         }
 
         mDevelopmentTools = (PreferenceScreen) findPreference(DEVELOPMENT_TOOLS);
@@ -841,6 +851,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
         mRootAccess.setValue(value);
         mRootAccess.setSummary(getResources()
                 .getStringArray(R.array.root_access_entries)[Integer.valueOf(value)]);
+
+        if (mRootAppops != null) {
+            mRootAppops.setEnabled(isRootForAppsEnabled());
+        }
     }
 
     private boolean isRootForAppsAvailable() {
@@ -1910,6 +1924,13 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
                 preference == mTransitionAnimationScale ||
                 preference == mAnimatorDurationScale) {
             ((AnimationScalePreference) preference).click();
+        } else if (preference == mRootAppops) {
+            Activity mActivity = getActivity();
+            Intent intent = new Intent(Intent.ACTION_MAIN);
+            intent.putExtra("appops_tab", getString(R.string.app_ops_categories_su));
+            intent.setClass(mActivity, AppOpsSummaryActivity.class);
+            mActivity.startActivity(intent);
+            return true;
         }
         return false;
     }