diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
index 3998e883f..c4a9369c2 100644
--- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
+++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java
@@ -301,8 +301,9 @@ public class FDroidApp extends Application {
configureTor(Preferences.get().isTorEnabled());
- // TODO enable this based on a preference
- InstallHistoryService.register(this);
+ if (Preferences.get().isKeepingInstallHistory()) {
+ InstallHistoryService.register(this);
+ }
String packageName = getString(R.string.install_history_reader_packageName);
String unset = getString(R.string.install_history_reader_packageName_UNSET);
diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java
index 1973d4dd0..7a5b91bed 100644
--- a/app/src/main/java/org/fdroid/fdroid/Preferences.java
+++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java
@@ -55,6 +55,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
public static final String PREF_IGN_TOUCH = "ignoreTouchscreen";
public static final String PREF_KEEP_CACHE_TIME = "keepCacheFor";
public static final String PREF_UNSTABLE_UPDATES = "unstableUpdates";
+ public static final String PREF_KEEP_INSTALL_HISTORY = "keepInstallHistory";
public static final String PREF_EXPERT = "expert";
public static final String PREF_PRIVILEGED_INSTALLER = "privilegedInstaller";
public static final String PREF_UNINSTALL_PRIVILEGED_APP = "uninstallPrivilegedApp";
@@ -75,6 +76,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
//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;
+ private static final boolean DEFAULT_KEEP_INSTALL_HISTORY = false;
//private static final boolean DEFAULT_LOCAL_REPO_HTTPS = false;
private static final boolean DEFAULT_INCOMP_VER = false;
private static final boolean DEFAULT_EXPERT = false;
@@ -184,6 +186,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
return preferences.getBoolean(PREF_UNSTABLE_UPDATES, DEFAULT_UNSTABLE_UPDATES);
}
+ public boolean isKeepingInstallHistory() {
+ return preferences.getBoolean(PREF_KEEP_INSTALL_HISTORY, DEFAULT_KEEP_INSTALL_HISTORY);
+ }
+
public boolean showIncompatibleVersions() {
return preferences.getBoolean(PREF_INCOMP_VER, DEFAULT_INCOMP_VER);
}
diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java
index e111b15df..6d930c850 100644
--- a/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java
+++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java
@@ -52,6 +52,9 @@ public class InstallHistoryService extends IntentService {
private static BroadcastReceiver broadcastReceiver;
public static void register(Context context) {
+ if (broadcastReceiver != null) {
+ return; // already registered
+ }
IntentFilter intentFilter = new IntentFilter();
intentFilter.addDataScheme("http");
intentFilter.addDataScheme("https");
@@ -78,6 +81,7 @@ public class InstallHistoryService extends IntentService {
public static void unregister(Context context) {
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
localBroadcastManager.unregisterReceiver(broadcastReceiver);
+ broadcastReceiver = null;
}
public static void queue(Context context, Intent intent) {
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 4304b87c6..c1355b5ad 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
@@ -19,6 +19,7 @@ import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.PreferencesActivity;
import org.fdroid.fdroid.R;
+import org.fdroid.fdroid.installer.InstallHistoryService;
import org.fdroid.fdroid.installer.PrivilegedInstaller;
import info.guardianproject.netcipher.NetCipher;
@@ -193,6 +194,14 @@ public class PreferencesFragment extends PreferenceFragment
}
break;
+ case Preferences.PREF_KEEP_INSTALL_HISTORY:
+ CheckBoxPreference p = (CheckBoxPreference) findPreference(key);
+ if (p.isChecked()) {
+ InstallHistoryService.register(getContext());
+ } else {
+ InstallHistoryService.unregister(getContext());
+ }
+ break;
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a3a30b88f..d23295a97 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,6 +14,8 @@
Updates
Unstable updates
Suggest updates to unstable versions
+ Keep install history
+ Store a log of all installs and uninstalls inside F-Droid
Other
Automatic update interval
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index aa80594bd..96ae03aaa 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -91,6 +91,12 @@
android:summary="@string/unstable_updates_summary"
android:defaultValue="false"
android:dependency="expert" />
+