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).
This commit is contained in:
Peter Serwylo 2017-02-15 14:23:27 +11:00
parent 109c795dd1
commit 2101ec4bbc

View File

@ -166,7 +166,11 @@ public class PreferencesFragment extends PreferenceFragment
break; break;
case Preferences.PREF_PRIVILEGED_INSTALLER: 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; break;
case Preferences.PREF_ENABLE_PROXY: case Preferences.PREF_ENABLE_PROXY:
@ -214,23 +218,34 @@ public class PreferencesFragment extends PreferenceFragment
boolean enabled = p.isPrivilegedInstallerEnabled(); boolean enabled = p.isPrivilegedInstallerEnabled();
boolean installed = PrivilegedInstaller.isExtensionInstalledCorrectly(getActivity()) boolean installed = PrivilegedInstaller.isExtensionInstalledCorrectly(getActivity())
== PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES; == PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES;
pref.setEnabled(installed);
pref.setDefaultValue(installed);
pref.setChecked(enabled && installed);
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { // On later versions of Android the privileged installer needs to be installed
@Override // via flashing an update.zip or building into a rom. As such, if it isn't installed
public boolean onPreferenceClick(Preference preference) { // by the time the user boots, opens F-Droid, and views this settings page, then there
SharedPreferences.Editor editor = pref.getSharedPreferences().edit(); // is no benefit showing it to them (it will only be disabled and we can't offer any
if (pref.isChecked()) { // way to easily install from here.
editor.remove(Preferences.PREF_PRIVILEGED_INSTALLER); if (Build.VERSION.SDK_INT > 19 && !installed) {
} else { PreferenceCategory other = (PreferenceCategory) findPreference("pref_category_other");
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false); 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() { private void initUpdatePrivilegedExtensionPreference() {