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);