From a1ae08cd1ed7e9f1a317d9203edc723c2fe80068 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 22 Aug 2016 19:58:13 +0200 Subject: [PATCH 1/5] fix bug in cache cleanup on 21+ introduced in cbd6da5 !379 was merged without the emulator tests passing. This fixes that. --- app/src/main/java/org/fdroid/fdroid/CleanCacheService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From aa848b2617634edc03d41050592785a597f8f41c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 22 Aug 2016 21:36:03 +0200 Subject: [PATCH 2/5] gitlab-ci: require emulator tests pass on android-24 --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) 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: From 91cac9fed45e37fbee86f254cbaaab62e9bfa874 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 18 Aug 2016 01:04:55 +0200 Subject: [PATCH 3/5] only show "install Priv Ext" in Prefs when its supported The root install method that is available via the "Expert" preferences does not work on newer than android-19. So when that's the case, this hides that item from the preferences screen entirely. --- .../views/fragments/PreferencesFragment.java | 20 +++++++++++++------ app/src/main/res/xml/preferences.xml | 3 ++- 2 files changed, 16 insertions(+), 7 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 4660ec344..e5fe86a05 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 @@ -4,11 +4,13 @@ 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; @@ -50,6 +52,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 +61,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) { @@ -260,11 +264,15 @@ public class PreferencesFragment extends PreferenceFragment }); } - 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 +300,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..15812238f 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" /> - + Date: Mon, 22 Aug 2016 22:06:30 +0200 Subject: [PATCH 4/5] 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 --- .../java/org/fdroid/fdroid/Preferences.java | 18 +++-- .../InstallExtensionDialogActivity.java | 4 -- .../views/fragments/PreferencesFragment.java | 69 +++---------------- app/src/main/res/xml/preferences.xml | 1 + 4 files changed, 23 insertions(+), 69 deletions(-) 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 e5fe86a05..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,7 +1,6 @@ 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; @@ -12,8 +11,6 @@ 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; @@ -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 */ 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; } }); diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 15812238f..2cccd9eb3 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -91,6 +91,7 @@ Date: Mon, 22 Aug 2016 22:17:38 +0200 Subject: [PATCH 5/5] update changelog closes #752 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) 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