summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorTom Marshall <tdm@cyngn.com>2016-06-27 14:31:57 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2016-06-29 11:33:41 -0700
commit7534d77b433ffa7223d7fe817f34e3daa306dc06 (patch)
tree7441dd5e26bb79dc1217dd7a5c1be33df5f4dd41 /src/com/android
parent57ca3ae789be986f816514e024e5a0decc764f0e (diff)
downloadpackages_apps_Settings-7534d77b433ffa7223d7fe817f34e3daa306dc06.tar.gz
packages_apps_Settings-7534d77b433ffa7223d7fe817f34e3daa306dc06.tar.bz2
packages_apps_Settings-7534d77b433ffa7223d7fe817f34e3daa306dc06.zip
Settings: Set root access options appropriately
It is possible to be running a user build with a debuggable boot image. In this case, "su" will not be available. So only show none/adb. Jira: BACON-4461 Change-Id: Iaa7df8311b9ea81eabb1566ba6f9159fdc9fab34
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/settings/DevelopmentSettings.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index cfdf921ff..5ae3b1b74 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -85,6 +85,7 @@ import com.android.settings.search.Indexable;
import com.android.settings.widget.SwitchBar;
import cyanogenmod.providers.CMSettings;
+import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -210,6 +211,9 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
private static final int[] MOCK_LOCATION_APP_OPS = new int[] {AppOpsManager.OP_MOCK_LOCATION};
private static final String MULTI_WINDOW_SYSTEM_PROPERTY = "persist.sys.debug.multi_window";
+
+ private static final String SUPERUSER_BINARY_PATH = "/system/xbin/su";
+
private IWindowManager mWindowManager;
private IBackupManager mBackupManager;
private DevicePolicyManager mDpm;
@@ -474,6 +478,13 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
mRootAccess = (ListPreference) findPreference(ROOT_ACCESS_KEY);
mRootAccess.setOnPreferenceChangeListener(this);
if (!removeRootOptionsIfRequired()) {
+ if (isRootForAppsAvailable()) {
+ mRootAccess.setEntries(R.array.root_access_entries);
+ mRootAccess.setEntryValues(R.array.root_access_values);
+ } else {
+ mRootAccess.setEntries(R.array.root_access_entries_adb);
+ mRootAccess.setEntryValues(R.array.root_access_values_adb);
+ }
mAllPrefs.add(mRootAccess);
}
@@ -832,6 +843,17 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
.getStringArray(R.array.root_access_entries)[Integer.valueOf(value)]);
}
+ private boolean isRootForAppsAvailable() {
+ boolean exists = false;
+ try {
+ File f = new File(SUPERUSER_BINARY_PATH);
+ exists = f.exists();
+ } catch (SecurityException e) {
+ // Ignore
+ }
+ return exists;
+ }
+
public static boolean isRootForAppsEnabled() {
int value = SystemProperties.getInt(ROOT_ACCESS_PROPERTY, 0);
boolean daemonState =