From 78ba64c2ec6d119fb42db23c0893ea37a594e47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Tue, 8 Oct 2013 12:57:58 +0200 Subject: [PATCH] Add App.toUpdate as the filter result of App.hasUpdates (fixes #372) --- src/org/fdroid/fdroid/AppDetails.java | 2 +- src/org/fdroid/fdroid/AppListManager.java | 3 +-- src/org/fdroid/fdroid/DB.java | 10 +++++++--- src/org/fdroid/fdroid/FDroidApp.java | 13 +++++++++++-- src/org/fdroid/fdroid/ManageRepo.java | 8 ++++---- src/org/fdroid/fdroid/RepoXMLHandler.java | 12 ++++++------ src/org/fdroid/fdroid/UpdateService.java | 2 +- src/org/fdroid/fdroid/views/AppListAdapter.java | 4 ++-- 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java index 59d57948d..7a0235d0e 100644 --- a/src/org/fdroid/fdroid/AppDetails.java +++ b/src/org/fdroid/fdroid/AppDetails.java @@ -583,7 +583,7 @@ public class AppDetails extends ListActivity { if (app == null) return true; DB.Apk curver = app.getCurrentVersion(); - if (app.hasUpdates == true) { + if (app.toUpdate) { MenuItemCompat.setShowAsAction(menu.add( Menu.NONE, INSTALL, 0, R.string.menu_update) .setIcon(R.drawable.ic_menu_refresh), diff --git a/src/org/fdroid/fdroid/AppListManager.java b/src/org/fdroid/fdroid/AppListManager.java index f0a41de5d..4e37bc9c4 100644 --- a/src/org/fdroid/fdroid/AppListManager.java +++ b/src/org/fdroid/fdroid/AppListManager.java @@ -203,8 +203,7 @@ public class AppListManager { } if (app.installedVersion != null) { installedApps.addItem(app); - if (!app.ignoreUpdates && app.hasUpdates && !app.filtered - && (showIncompatible || app.compatible)) + if (app.toUpdate) canUpgradeApps.addItem(app); } } diff --git a/src/org/fdroid/fdroid/DB.java b/src/org/fdroid/fdroid/DB.java index 0700ca947..28d45f64c 100644 --- a/src/org/fdroid/fdroid/DB.java +++ b/src/org/fdroid/fdroid/DB.java @@ -116,6 +116,7 @@ public class DB { antiFeatures = null; requirements = null; hasUpdates = false; + toUpdate = false; updated = false; added = null; lastUpdated = null; @@ -189,11 +190,14 @@ public class DB { // permission (set in the Settings page) public boolean filtered; - // True if there are new versions (apks) that the user hasn't - // explicitly ignored. (We're currently not using the database - // field for this - we make the decision on the fly in getApps(). + // True if there are new versions (apks) available, regardless of + // any filtering public boolean hasUpdates; + // True if there are new versions (apks) available and the user wants + // to be notified about them + public boolean toUpdate; + // True if updates should not show up in the Updates tab for this // application public boolean ignoreUpdates; diff --git a/src/org/fdroid/fdroid/FDroidApp.java b/src/org/fdroid/fdroid/FDroidApp.java index 9d2b128dc..03d22d2d1 100644 --- a/src/org/fdroid/fdroid/FDroidApp.java +++ b/src/org/fdroid/fdroid/FDroidApp.java @@ -54,6 +54,7 @@ public class FDroidApp extends Application { // because the install intent says it's finished when it hasn't. SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); + showIncompatible = prefs.getBoolean("showIncompatible", false); if (!prefs.getBoolean("cacheDownloaded", false)) { File local_path = DB.getDataPath(this); @@ -100,6 +101,8 @@ public class FDroidApp extends Application { // Global list of all known applications. private List apps; + private boolean showIncompatible; + // Set when something has changed (database or installed apps) so we know // we should invalidate the apps. private volatile boolean appsAllInvalid = false; @@ -154,7 +157,7 @@ public class FDroidApp extends Application { for (DB.Repo repo : repos) { DB.Apk bestApk = app.apks.get(0); if (repo.id == bestApk.repo) { - app.iconUrl = repo.address + "/icons/" + app.icon; + app.iconUrl = repo.address + "/icons/" + app.icon; break; } } @@ -174,7 +177,7 @@ public class FDroidApp extends Application { for (DB.Repo repo : repos) { DB.Apk bestApk = app.apks.get(0); if (repo.id == bestApk.repo) { - app.iconUrl = repo.address + "/icons/" + app.icon; + app.iconUrl = repo.address + "/icons/" + app.icon; break; } } @@ -195,6 +198,12 @@ public class FDroidApp extends Application { AppFilter appFilter = new AppFilter(ctx); for (DB.App app : apps) { app.filtered = appFilter.filter(app); + + app.toUpdate = ( + !app.ignoreUpdates + && app.hasUpdates + && !app.filtered + && (showIncompatible || app.compatible)); } } diff --git a/src/org/fdroid/fdroid/ManageRepo.java b/src/org/fdroid/fdroid/ManageRepo.java index 20ef64f78..c55491570 100644 --- a/src/org/fdroid/fdroid/ManageRepo.java +++ b/src/org/fdroid/fdroid/ManageRepo.java @@ -87,11 +87,11 @@ public class ManageRepo extends ListActivity { long lastUpdate = prefs.getLong("lastUpdateCheck", 0); String s_lastUpdateCheck = ""; if (lastUpdate == 0) { - s_lastUpdateCheck = getString(R.string.never); + s_lastUpdateCheck = getString(R.string.never); } else { - Date d = new Date(lastUpdate); - s_lastUpdateCheck = DateFormat.getDateFormat(this).format(d) + - " " + DateFormat.getTimeFormat(this).format(d); + Date d = new Date(lastUpdate); + s_lastUpdateCheck = DateFormat.getDateFormat(this).format(d) + + " " + DateFormat.getTimeFormat(this).format(d); } tv_lastCheck.setText(getString(R.string.last_update_check,s_lastUpdateCheck)); diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java index 0716da2e8..0d0729d58 100644 --- a/src/org/fdroid/fdroid/RepoXMLHandler.java +++ b/src/org/fdroid/fdroid/RepoXMLHandler.java @@ -75,7 +75,7 @@ public class RepoXMLHandler extends DefaultHandler { public static final int PROGRESS_TYPE_DOWNLOAD = 1; public static final int PROGRESS_TYPE_PROCESS_XML = 2; - public static final String PROGRESS_DATA_REPO = "repo"; + public static final String PROGRESS_DATA_REPO = "repo"; // The date format used in the repo XML file. private SimpleDateFormat mXMLDateFormat = new SimpleDateFormat("yyyy-MM-dd"); @@ -242,11 +242,11 @@ public class RepoXMLHandler extends DefaultHandler { } } - private static Bundle createProgressData(String repoAddress) { - Bundle data = new Bundle(); - data.putString(PROGRESS_DATA_REPO, repoAddress); - return data; - } + private static Bundle createProgressData(String repoAddress) { + Bundle data = new Bundle(); + data.putString(PROGRESS_DATA_REPO, repoAddress); + return data; + } @Override public void startElement(String uri, String localName, String qName, diff --git a/src/org/fdroid/fdroid/UpdateService.java b/src/org/fdroid/fdroid/UpdateService.java index 64aa88c5f..cc96a90e3 100644 --- a/src/org/fdroid/fdroid/UpdateService.java +++ b/src/org/fdroid/fdroid/UpdateService.java @@ -104,7 +104,7 @@ public class UpdateService extends IntentService implements ProgressListener { public int getNumUpdates(List apps) { int count = 0; for (DB.App app : apps) { - if (!app.ignoreUpdates && app.hasUpdates) + if (!app.toUpdate) count++; } return count; diff --git a/src/org/fdroid/fdroid/views/AppListAdapter.java b/src/org/fdroid/fdroid/views/AppListAdapter.java index 8b174793a..a508bcc95 100644 --- a/src/org/fdroid/fdroid/views/AppListAdapter.java +++ b/src/org/fdroid/fdroid/views/AppListAdapter.java @@ -94,7 +94,7 @@ abstract public class AppListAdapter extends BaseAdapter { iconInstalled.setImageResource(R.drawable.ic_cab_done_holo_dark); iconUpdates.setImageResource(R.drawable.ic_menu_refresh); - if (app.hasUpdates && showStatusUpdate()) { + if (app.toUpdate && showStatusUpdate()) { iconUpdates.setVisibility(View.VISIBLE); } else { iconUpdates.setVisibility(View.GONE); @@ -152,7 +152,7 @@ abstract public class AppListAdapter extends BaseAdapter { StringBuilder version = new StringBuilder(); if (app.installedVersion != null) { version.append(app.installedVersion); - if (app.hasUpdates) { + if (app.toUpdate) { version.append(" -> "); version.append(app.updateVersion); }