use Privileged Extension by default when it is installed
This totally changed the logic of the "Use Privileged Extension" preference making it based on whether the Privileged Extension is installed and usable rather than storing the user's selection. This code now only stores when the user manually disables using the Privileged Extension even when it is installed. closes #729
This commit is contained in:
parent
91cac9fed4
commit
ea0700d406
@ -69,7 +69,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
|
|||||||
|
|
||||||
private static final boolean DEFAULT_ROOTED = true;
|
private static final boolean DEFAULT_ROOTED = true;
|
||||||
private static final int DEFAULT_UPD_HISTORY = 14;
|
private static final int DEFAULT_UPD_HISTORY = 14;
|
||||||
private static final boolean DEFAULT_PRIVILEGED_INSTALLER = false;
|
private static final boolean DEFAULT_PRIVILEGED_INSTALLER = true;
|
||||||
//private static final boolean DEFAULT_LOCAL_REPO_BONJOUR = true;
|
//private static final boolean DEFAULT_LOCAL_REPO_BONJOUR = true;
|
||||||
private static final long DEFAULT_KEEP_CACHE_TIME = TimeUnit.DAYS.toMillis(1);
|
private static final long DEFAULT_KEEP_CACHE_TIME = TimeUnit.DAYS.toMillis(1);
|
||||||
private static final boolean DEFAULT_UNSTABLE_UPDATES = false;
|
private static final boolean DEFAULT_UNSTABLE_UPDATES = false;
|
||||||
@ -113,14 +113,18 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
|
|||||||
initialized.put(key, false);
|
initialized.put(key, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to use the Privileged Installer, based on if it is installed. Only the disabled
|
||||||
|
* state is stored as a preference since the enabled state is based entirely on the presence
|
||||||
|
* of the Privileged Extension. The preference provides a way to disable using the
|
||||||
|
* Privileged Extension even though its installed.
|
||||||
|
*
|
||||||
|
* @see org.fdroid.fdroid.views.fragments.PreferencesFragment#initPrivilegedInstallerPreference()
|
||||||
|
*/
|
||||||
public boolean isPrivilegedInstallerEnabled() {
|
public boolean isPrivilegedInstallerEnabled() {
|
||||||
return preferences.getBoolean(PREF_PRIVILEGED_INSTALLER, DEFAULT_PRIVILEGED_INSTALLER);
|
return preferences.getBoolean(PREF_PRIVILEGED_INSTALLER, DEFAULT_PRIVILEGED_INSTALLER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPrivilegedInstallerEnabled(boolean enable) {
|
|
||||||
preferences.edit().putBoolean(PREF_PRIVILEGED_INSTALLER, enable).apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPostPrivilegedInstall() {
|
public boolean isPostPrivilegedInstall() {
|
||||||
return preferences.getBoolean(PREF_POST_PRIVILEGED_INSTALL, DEFAULT_POST_PRIVILEGED_INSTALL);
|
return preferences.getBoolean(PREF_POST_PRIVILEGED_INSTALL, DEFAULT_POST_PRIVILEGED_INSTALL);
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,6 @@ import android.view.ContextThemeWrapper;
|
|||||||
|
|
||||||
import org.fdroid.fdroid.FDroid;
|
import org.fdroid.fdroid.FDroid;
|
||||||
import org.fdroid.fdroid.FDroidApp;
|
import org.fdroid.fdroid.FDroidApp;
|
||||||
import org.fdroid.fdroid.Preferences;
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.installer.PrivilegedInstaller;
|
import org.fdroid.fdroid.installer.PrivilegedInstaller;
|
||||||
|
|
||||||
@ -233,9 +232,6 @@ public class InstallExtensionDialogActivity extends FragmentActivity {
|
|||||||
title = getString(R.string.system_install_post_success);
|
title = getString(R.string.system_install_post_success);
|
||||||
message = getString(R.string.system_install_post_success_message);
|
message = getString(R.string.system_install_post_success_message);
|
||||||
result = Activity.RESULT_OK;
|
result = Activity.RESULT_OK;
|
||||||
|
|
||||||
// enable system installer on installation success
|
|
||||||
Preferences.get().setPrivilegedInstallerEnabled(true);
|
|
||||||
break;
|
break;
|
||||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
|
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
|
||||||
title = getString(R.string.system_install_post_fail);
|
title = getString(R.string.system_install_post_fail);
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package org.fdroid.fdroid.views.fragments;
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@ -12,8 +11,6 @@ import android.preference.ListPreference;
|
|||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.PreferenceCategory;
|
import android.preference.PreferenceCategory;
|
||||||
import android.support.v4.preference.PreferenceFragment;
|
import android.support.v4.preference.PreferenceFragment;
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.text.Html;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import org.fdroid.fdroid.AppDetails;
|
import org.fdroid.fdroid.AppDetails;
|
||||||
@ -196,69 +193,25 @@ public class PreferencesFragment extends PreferenceFragment
|
|||||||
* Initializes SystemInstaller preference, which can only be enabled when F-Droid is installed as a system-app
|
* Initializes SystemInstaller preference, which can only be enabled when F-Droid is installed as a system-app
|
||||||
*/
|
*/
|
||||||
private void initPrivilegedInstallerPreference() {
|
private void initPrivilegedInstallerPreference() {
|
||||||
CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_PRIVILEGED_INSTALLER);
|
final CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_PRIVILEGED_INSTALLER);
|
||||||
|
Preferences p = Preferences.get();
|
||||||
// we are handling persistence ourself!
|
boolean enabled = p.isPrivilegedInstallerEnabled();
|
||||||
pref.setPersistent(false);
|
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() {
|
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
final CheckBoxPreference pref = (CheckBoxPreference) preference;
|
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
|
||||||
|
|
||||||
if (pref.isChecked()) {
|
if (pref.isChecked()) {
|
||||||
int isInstalledCorrectly =
|
editor.remove(Preferences.PREF_PRIVILEGED_INSTALLER);
|
||||||
PrivilegedInstaller.isExtensionInstalledCorrectly(getActivity());
|
|
||||||
if (isInstalledCorrectly == PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES) {
|
|
||||||
// privileged permission are granted, i.e. the extension is installed correctly
|
|
||||||
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
|
|
||||||
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, true);
|
|
||||||
editor.apply();
|
|
||||||
pref.setChecked(true);
|
|
||||||
} else {
|
} else {
|
||||||
// privileged permission not available
|
|
||||||
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
|
|
||||||
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
|
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
|
||||||
|
}
|
||||||
editor.apply();
|
editor.apply();
|
||||||
pref.setChecked(false);
|
|
||||||
|
|
||||||
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
|
|
||||||
alertBuilder.setTitle(R.string.system_install_denied_title);
|
|
||||||
|
|
||||||
String message;
|
|
||||||
switch (isInstalledCorrectly) {
|
|
||||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
|
|
||||||
message = getActivity().getString(R.string.system_install_denied_body) +
|
|
||||||
"<br/><br/>" + getActivity().getString(R.string.system_install_question);
|
|
||||||
break;
|
|
||||||
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM:
|
|
||||||
message = getActivity().getString(R.string.system_install_denied_signature);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new RuntimeException("unhandled return");
|
|
||||||
}
|
|
||||||
alertBuilder.setMessage(Html.fromHtml(message));
|
|
||||||
alertBuilder.setPositiveButton(R.string.system_install_button_open, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
// Open details of F-Droid Privileged
|
|
||||||
Intent intent = new Intent(getActivity(), AppDetails.class);
|
|
||||||
intent.putExtra(AppDetails.EXTRA_APPID,
|
|
||||||
PrivilegedInstaller.PRIVILEGED_EXTENSION_PACKAGE_NAME);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
alertBuilder.setNegativeButton(R.string.cancel, null);
|
|
||||||
alertBuilder.create().show();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
|
|
||||||
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
|
|
||||||
editor.apply();
|
|
||||||
pref.setChecked(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
<CheckBoxPreference android:title="@string/system_installer"
|
<CheckBoxPreference android:title="@string/system_installer"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="privilegedInstaller"
|
android:key="privilegedInstaller"
|
||||||
|
android:persistent="false"
|
||||||
android:dependency="expert" />
|
android:dependency="expert" />
|
||||||
<Preference android:title="@string/uninstall_system"
|
<Preference android:title="@string/uninstall_system"
|
||||||
android:summary="@string/uninstall_system_summary"
|
android:summary="@string/uninstall_system_summary"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user