From 2bd686dfe8b8cd326a2cb10c9dd0b354cce71fdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 12 May 2014 12:55:17 +0200 Subject: [PATCH] Add preference to opt-out of SystemPermissionInstaller --- res/values/strings.xml | 3 +++ res/xml/preferences.xml | 3 +++ src/org/fdroid/fdroid/Preferences.java | 8 +++++++- src/org/fdroid/fdroid/PreferencesActivity.java | 9 +++++++-- src/org/fdroid/fdroid/installer/Installer.java | 11 ++++++----- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index f342e1faf..e2d07dfc8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -31,6 +31,9 @@ Root access for app installations Root access is used to install/delete/update applications Do not request root access to install/delete/update applications + Use system permissions for app installations + F-Droid tries to use system permissions to install/delete/update applications (only possible when installed as system-app) + F-Droid does not try to use system permissions to install/delete/update applications (only possible when installed as system-app) Search Results App Details diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 0e477cb97..b9571a814 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -53,5 +53,8 @@ + diff --git a/src/org/fdroid/fdroid/Preferences.java b/src/org/fdroid/fdroid/Preferences.java index b625f31fe..29c2c0d39 100644 --- a/src/org/fdroid/fdroid/Preferences.java +++ b/src/org/fdroid/fdroid/Preferences.java @@ -37,11 +37,13 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi public static final String PREF_EXPERT = "expert"; public static final String PREF_UPD_LAST = "lastUpdateCheck"; public static final String PREF_ROOT_INSTALLER = "rootInstaller"; + public static final String PREF_SYSTEM_INSTALLER = "systemInstaller"; private static final boolean DEFAULT_COMPACT_LAYOUT = false; private static final boolean DEFAULT_ROOTED = true; private static final int DEFAULT_UPD_HISTORY = 14; private static final boolean DEFAULT_ROOT_INSTALLER = false; + private static final boolean DEFAULT_SYSTEM_INSTALLER = true; private boolean compactLayout = DEFAULT_COMPACT_LAYOUT; private boolean filterAppsRequiringRoot = DEFAULT_ROOTED; @@ -64,9 +66,13 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi initialized.put(key, false); } - public boolean useRootInstaller() { + public boolean isRootInstallerEnabled() { return preferences.getBoolean(PREF_ROOT_INSTALLER, DEFAULT_ROOT_INSTALLER); } + + public boolean isSystemInstallerEnabled() { + return preferences.getBoolean(PREF_SYSTEM_INSTALLER, DEFAULT_SYSTEM_INSTALLER); + } public boolean hasCompactLayout() { if (!isInitialized(PREF_COMPACT_LAYOUT)) { diff --git a/src/org/fdroid/fdroid/PreferencesActivity.java b/src/org/fdroid/fdroid/PreferencesActivity.java index 7f74c145e..a8013e4ca 100644 --- a/src/org/fdroid/fdroid/PreferencesActivity.java +++ b/src/org/fdroid/fdroid/PreferencesActivity.java @@ -55,7 +55,8 @@ public class PreferencesActivity extends PreferenceActivity implements Preferences.PREF_IGN_TOUCH, Preferences.PREF_CACHE_APK, Preferences.PREF_EXPERT, - Preferences.PREF_ROOT_INSTALLER + Preferences.PREF_ROOT_INSTALLER, + Preferences.PREF_SYSTEM_INSTALLER }; @Override @@ -156,6 +157,10 @@ public class PreferencesActivity extends PreferenceActivity implements onoffSummary(key, R.string.root_installer_on, R.string.root_installer_off); + } else if (key.equals(Preferences.PREF_SYSTEM_INSTALLER)) { + onoffSummary(key, R.string.system_installer_on, + R.string.system_installer_off); + } } @@ -164,7 +169,7 @@ public class PreferencesActivity extends PreferenceActivity implements * when the user grants root access for F-Droid. */ protected void initRootInstallerPreference() { - CheckBoxPreference pref = (CheckBoxPreference)findPreference(Preferences.PREF_ROOT_INSTALLER); + CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_ROOT_INSTALLER); // we are handling persistence ourself! pref.setPersistent(false); diff --git a/src/org/fdroid/fdroid/installer/Installer.java b/src/org/fdroid/fdroid/installer/Installer.java index f87c51604..e2ca27f96 100644 --- a/src/org/fdroid/fdroid/installer/Installer.java +++ b/src/org/fdroid/fdroid/installer/Installer.java @@ -107,8 +107,8 @@ abstract public class Installer { InstallerCallback callback) { // if root installer has been activated in preferences -> RootInstaller - boolean useRootInstaller = Preferences.get().useRootInstaller(); - if (useRootInstaller) { + boolean isRootInstallerEnabled = Preferences.get().isRootInstallerEnabled(); + if (isRootInstallerEnabled) { Log.d(TAG, "root installer preference enabled -> RootInstaller"); try { @@ -118,8 +118,9 @@ abstract public class Installer { } } - // system permissions -> SystemPermissionInstaller - if (hasSystemPermissions(activity, pm)) { + // system permissions and pref enabled -> SystemPermissionInstaller + boolean isSystemInstallerEnabled = Preferences.get().isSystemInstallerEnabled(); + if (isSystemInstallerEnabled && hasSystemPermissions(activity, pm)) { Log.d(TAG, "system permissions -> SystemPermissionInstaller"); try { @@ -158,7 +159,7 @@ abstract public class Installer { InstallerCallback callback) throws AndroidNotCompatibleException { // if root installer has been activated in preferences -> RootInstaller - boolean useRootInstaller = Preferences.get().useRootInstaller(); + boolean useRootInstaller = Preferences.get().isRootInstallerEnabled(); if (useRootInstaller) { try { return new RootInstaller(context, pm, callback);