Merge branch 'enable-priv-ext-by-default' into 'master'

use Privileged Extension by default, when installed

Now that the 0.2 release of Privileged Extension is tagged, it is starting to be integrated into ROMS, and is easy to flash to ROMed devices, it is time to make F-Droid use the Privileged Extension by default, if it is installed.

See merge request !382
This commit is contained in:
Daniel Martí 2016-08-23 07:55:20 +00:00
commit fa112ed303
7 changed files with 44 additions and 78 deletions

View File

@ -72,7 +72,6 @@ connected24:
- rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock - rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
- rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/ - rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/
- exit $EXITVALUE - exit $EXITVALUE
allow_failure: true # remove once install it runs reliably
pmd: pmd:
script: script:

View File

@ -2,6 +2,10 @@
* Support for Android 2.2 is dropped, 2.3.3 or later is now required * Support for Android 2.2 is dropped, 2.3.3 or later is now required
* Fixed APK Cache bugs, requiring the cache time be reset to 1 day
* Uses Privileged Extension by default, when its installed
### 0.100.1 (2016-06-21) ### 0.100.1 (2016-06-21)
* Fix background crash after installing or updating apps * Fix background crash after installing or updating apps

View File

@ -167,7 +167,7 @@ public class CleanCacheService extends IntentService {
f.delete(); f.delete();
} }
} else { } else {
CleanCacheService21.deleteIfOld(f, millisAgo); CleanCacheService21.deleteIfOld(f, olderThan);
} }
} }
} }

View File

@ -38,8 +38,8 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
preferences.registerOnSharedPreferenceChangeListener(this); preferences.registerOnSharedPreferenceChangeListener(this);
if (preferences.getString(PREF_LOCAL_REPO_NAME, null) == null) { if (preferences.getString(PREF_LOCAL_REPO_NAME, null) == null) {
preferences.edit() preferences.edit()
.putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName()) .putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName())
.apply(); .apply();
} }
} }
@ -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);
} }

View File

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

View File

@ -1,17 +1,16 @@
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.Bundle; import android.os.Bundle;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference; import android.preference.EditTextPreference;
import android.preference.ListPreference; import android.preference.ListPreference;
import android.preference.Preference; import android.preference.Preference;
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;
@ -50,6 +49,7 @@ public class PreferencesFragment extends PreferenceFragment
private static final int REQUEST_INSTALL_ORBOT = 0x1234; private static final int REQUEST_INSTALL_ORBOT = 0x1234;
private CheckBoxPreference enableProxyCheckPref; private CheckBoxPreference enableProxyCheckPref;
private CheckBoxPreference useTorCheckPref; private CheckBoxPreference useTorCheckPref;
private Preference updatePrivilegedExtensionPref;
private long currentKeepCacheTime; private long currentKeepCacheTime;
@Override @Override
@ -58,6 +58,7 @@ public class PreferencesFragment extends PreferenceFragment
addPreferencesFromResource(R.xml.preferences); addPreferencesFromResource(R.xml.preferences);
useTorCheckPref = (CheckBoxPreference) findPreference(Preferences.PREF_USE_TOR); useTorCheckPref = (CheckBoxPreference) findPreference(Preferences.PREF_USE_TOR);
enableProxyCheckPref = (CheckBoxPreference) findPreference(Preferences.PREF_ENABLE_PROXY); enableProxyCheckPref = (CheckBoxPreference) findPreference(Preferences.PREF_ENABLE_PROXY);
updatePrivilegedExtensionPref = findPreference(Preferences.PREF_UNINSTALL_PRIVILEGED_APP);
} }
private void checkSummary(String key, int resId) { private void checkSummary(String key, int resId) {
@ -192,79 +193,39 @@ 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 {
// privileged permission not available
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
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 { } else {
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false); editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
editor.apply();
pref.setChecked(false);
} }
editor.apply();
return true; return true;
} }
}); });
} }
private void initManagePrivilegedAppPreference() { private void initUpdatePrivilegedExtensionPreference() {
Preference pref = findPreference(Preferences.PREF_UNINSTALL_PRIVILEGED_APP); if (Build.VERSION.SDK_INT > 19) {
pref.setPersistent(false); // this will never work on newer Android versions, so hide it
PreferenceCategory other = (PreferenceCategory) findPreference("pref_category_other");
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { other.removePreference(updatePrivilegedExtensionPref);
return;
}
updatePrivilegedExtensionPref.setPersistent(false);
updatePrivilegedExtensionPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override @Override
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
@ -292,7 +253,7 @@ public class PreferencesFragment extends PreferenceFragment
currentKeepCacheTime = Preferences.get().getKeepCacheTime(); currentKeepCacheTime = Preferences.get().getKeepCacheTime();
initPrivilegedInstallerPreference(); initPrivilegedInstallerPreference();
initManagePrivilegedAppPreference(); initUpdatePrivilegedExtensionPreference();
// this pref's default is dynamically set based on whether Orbot is installed // this pref's default is dynamically set based on whether Orbot is installed
boolean useTor = Preferences.get().isTorEnabled(); boolean useTor = Preferences.get().isTorEnabled();
useTorCheckPref.setDefaultValue(useTor); useTorCheckPref.setDefaultValue(useTor);

View File

@ -72,7 +72,8 @@
android:summary="@string/proxy_port_summary" android:summary="@string/proxy_port_summary"
android:dependency="enableProxy" /> android:dependency="enableProxy" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/other"> <PreferenceCategory android:title="@string/other"
android:key="pref_category_other">
<ListPreference android:title="@string/cache_downloaded" <ListPreference android:title="@string/cache_downloaded"
android:key="keepCacheFor" android:key="keepCacheFor"
android:defaultValue="86400000" android:defaultValue="86400000"
@ -90,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"