diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 359f17111..0bae0da65 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -72,7 +72,6 @@ connected24:
- rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
- rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/
- exit $EXITVALUE
- allow_failure: true # remove once install it runs reliably
pmd:
script:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34f4f66ed..01e5c93ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
* 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)
* Fix background crash after installing or updating apps
diff --git a/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java b/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java
index a1befc144..c61785248 100644
--- a/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java
+++ b/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java
@@ -167,7 +167,7 @@ public class CleanCacheService extends IntentService {
f.delete();
}
} else {
- CleanCacheService21.deleteIfOld(f, millisAgo);
+ CleanCacheService21.deleteIfOld(f, olderThan);
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java
index 626b44182..a85b4a552 100644
--- a/app/src/main/java/org/fdroid/fdroid/Preferences.java
+++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java
@@ -38,8 +38,8 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
preferences.registerOnSharedPreferenceChangeListener(this);
if (preferences.getString(PREF_LOCAL_REPO_NAME, null) == null) {
preferences.edit()
- .putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName())
- .apply();
+ .putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName())
+ .apply();
}
}
@@ -69,7 +69,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
private static final boolean DEFAULT_ROOTED = true;
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 long DEFAULT_KEEP_CACHE_TIME = TimeUnit.DAYS.toMillis(1);
private static final boolean DEFAULT_UNSTABLE_UPDATES = false;
@@ -113,14 +113,18 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
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() {
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() {
return preferences.getBoolean(PREF_POST_PRIVILEGED_INSTALL, DEFAULT_POST_PRIVILEGED_INSTALL);
}
diff --git a/app/src/main/java/org/fdroid/fdroid/privileged/install/InstallExtensionDialogActivity.java b/app/src/main/java/org/fdroid/fdroid/privileged/install/InstallExtensionDialogActivity.java
index 7260a4d55..1354a789c 100644
--- a/app/src/main/java/org/fdroid/fdroid/privileged/install/InstallExtensionDialogActivity.java
+++ b/app/src/main/java/org/fdroid/fdroid/privileged/install/InstallExtensionDialogActivity.java
@@ -34,7 +34,6 @@ import android.view.ContextThemeWrapper;
import org.fdroid.fdroid.FDroid;
import org.fdroid.fdroid.FDroidApp;
-import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.installer.PrivilegedInstaller;
@@ -233,9 +232,6 @@ public class InstallExtensionDialogActivity extends FragmentActivity {
title = getString(R.string.system_install_post_success);
message = getString(R.string.system_install_post_success_message);
result = Activity.RESULT_OK;
-
- // enable system installer on installation success
- Preferences.get().setPrivilegedInstallerEnabled(true);
break;
case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
title = getString(R.string.system_install_post_fail);
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 4660ec344..02c9c86c6 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
@@ -1,17 +1,16 @@
package org.fdroid.fdroid.views.fragments;
import android.app.Activity;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
+import android.preference.PreferenceCategory;
import android.support.v4.preference.PreferenceFragment;
-import android.support.v7.app.AlertDialog;
-import android.text.Html;
import android.text.TextUtils;
import org.fdroid.fdroid.AppDetails;
@@ -50,6 +49,7 @@ public class PreferencesFragment extends PreferenceFragment
private static final int REQUEST_INSTALL_ORBOT = 0x1234;
private CheckBoxPreference enableProxyCheckPref;
private CheckBoxPreference useTorCheckPref;
+ private Preference updatePrivilegedExtensionPref;
private long currentKeepCacheTime;
@Override
@@ -58,6 +58,7 @@ public class PreferencesFragment extends PreferenceFragment
addPreferencesFromResource(R.xml.preferences);
useTorCheckPref = (CheckBoxPreference) findPreference(Preferences.PREF_USE_TOR);
enableProxyCheckPref = (CheckBoxPreference) findPreference(Preferences.PREF_ENABLE_PROXY);
+ updatePrivilegedExtensionPref = findPreference(Preferences.PREF_UNINSTALL_PRIVILEGED_APP);
}
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
*/
private void initPrivilegedInstallerPreference() {
- CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_PRIVILEGED_INSTALLER);
-
- // we are handling persistence ourself!
- pref.setPersistent(false);
+ final CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_PRIVILEGED_INSTALLER);
+ Preferences p = Preferences.get();
+ 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) {
- final CheckBoxPreference pref = (CheckBoxPreference) preference;
-
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
if (pref.isChecked()) {
- int isInstalledCorrectly =
- 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) +
- "
" + 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();
- }
+ editor.remove(Preferences.PREF_PRIVILEGED_INSTALLER);
} else {
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
- editor.apply();
- pref.setChecked(false);
}
-
+ editor.apply();
return true;
}
});
}
- private void initManagePrivilegedAppPreference() {
- Preference pref = findPreference(Preferences.PREF_UNINSTALL_PRIVILEGED_APP);
- pref.setPersistent(false);
-
- pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ private void initUpdatePrivilegedExtensionPreference() {
+ if (Build.VERSION.SDK_INT > 19) {
+ // this will never work on newer Android versions, so hide it
+ PreferenceCategory other = (PreferenceCategory) findPreference("pref_category_other");
+ other.removePreference(updatePrivilegedExtensionPref);
+ return;
+ }
+ updatePrivilegedExtensionPref.setPersistent(false);
+ updatePrivilegedExtensionPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
@@ -292,7 +253,7 @@ public class PreferencesFragment extends PreferenceFragment
currentKeepCacheTime = Preferences.get().getKeepCacheTime();
initPrivilegedInstallerPreference();
- initManagePrivilegedAppPreference();
+ initUpdatePrivilegedExtensionPreference();
// this pref's default is dynamically set based on whether Orbot is installed
boolean useTor = Preferences.get().isTorEnabled();
useTorCheckPref.setDefaultValue(useTor);
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 6f5b404f3..2cccd9eb3 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -72,7 +72,8 @@
android:summary="@string/proxy_port_summary"
android:dependency="enableProxy" />
-
+