From 2101ec4bbc0877eccded311de50691d07679b458 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Wed, 15 Feb 2017 14:23:27 +1100 Subject: [PATCH] Remove Privileged Installer preference when appropriate. Fixes #817. As discussed in #817, this preference is not useful on Android >= 5.0. As such, the preference should just be removed. However, it should stay if the privileged installer is already installed (e.g. via update.zip or included as part of the ROM). --- .../views/fragments/PreferencesFragment.java | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java index c1355b5ad..1e9d97a0a 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java @@ -166,7 +166,11 @@ public class PreferencesFragment extends PreferenceFragment break; case Preferences.PREF_PRIVILEGED_INSTALLER: - checkSummary(key, R.string.system_installer_on); + // We may have removed this preference if it is not suitable to show the user. So lets check it is here first. + final CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_PRIVILEGED_INSTALLER); + if (pref != null) { + checkSummary(key, R.string.system_installer_on); + } break; case Preferences.PREF_ENABLE_PROXY: @@ -214,23 +218,34 @@ public class PreferencesFragment extends PreferenceFragment boolean enabled = p.isPrivilegedInstallerEnabled(); boolean installed = PrivilegedInstaller.isExtensionInstalledCorrectly(getActivity()) == PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES; - pref.setEnabled(installed); - pref.setDefaultValue(installed); - pref.setChecked(enabled && installed); - pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - SharedPreferences.Editor editor = pref.getSharedPreferences().edit(); - if (pref.isChecked()) { - editor.remove(Preferences.PREF_PRIVILEGED_INSTALLER); - } else { - editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false); + // On later versions of Android the privileged installer needs to be installed + // via flashing an update.zip or building into a rom. As such, if it isn't installed + // by the time the user boots, opens F-Droid, and views this settings page, then there + // is no benefit showing it to them (it will only be disabled and we can't offer any + // way to easily install from here. + if (Build.VERSION.SDK_INT > 19 && !installed) { + PreferenceCategory other = (PreferenceCategory) findPreference("pref_category_other"); + other.removePreference(pref); + } else { + pref.setEnabled(installed); + pref.setDefaultValue(installed); + pref.setChecked(enabled && installed); + + pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + SharedPreferences.Editor editor = pref.getSharedPreferences().edit(); + if (pref.isChecked()) { + editor.remove(Preferences.PREF_PRIVILEGED_INSTALLER); + } else { + editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false); + } + editor.apply(); + return true; } - editor.apply(); - return true; - } - }); + }); + } } private void initUpdatePrivilegedExtensionPreference() {