diff --git a/res/values/strings.xml b/res/values/strings.xml index 6720fb625..f48bba028 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -88,7 +88,8 @@ Share Install Uninstall - Ignore Updates + Ignore All Updates + Ignore This Update Website Issues Source Code diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java index 264f39b42..ce1dc3c7e 100644 --- a/src/org/fdroid/fdroid/AppDetails.java +++ b/src/org/fdroid/fdroid/AppDetails.java @@ -162,17 +162,18 @@ public class AppDetails extends ListActivity { private static final int INSTALL = Menu.FIRST; private static final int UNINSTALL = Menu.FIRST + 1; - private static final int IGNORE = Menu.FIRST + 2; - private static final int WEBSITE = Menu.FIRST + 3; - private static final int ISSUES = Menu.FIRST + 4; - private static final int SOURCE = Menu.FIRST + 5; - private static final int LAUNCH = Menu.FIRST + 6; - private static final int SHARE = Menu.FIRST + 7; - private static final int DONATE = Menu.FIRST + 8; - private static final int BITCOIN = Menu.FIRST + 9; - private static final int LITECOIN = Menu.FIRST + 10; - private static final int FLATTR = Menu.FIRST + 11; - private static final int DONATE_URL = Menu.FIRST + 12; + private static final int IGNOREALL = Menu.FIRST + 2; + private static final int IGNORETHIS = Menu.FIRST + 3; + private static final int WEBSITE = Menu.FIRST + 4; + private static final int ISSUES = Menu.FIRST + 5; + private static final int SOURCE = Menu.FIRST + 6; + private static final int LAUNCH = Menu.FIRST + 7; + private static final int SHARE = Menu.FIRST + 8; + private static final int DONATE = Menu.FIRST + 9; + private static final int BITCOIN = Menu.FIRST + 10; + private static final int LITECOIN = Menu.FIRST + 11; + private static final int FLATTR = Menu.FIRST + 12; + private static final int DONATE_URL = Menu.FIRST + 13; private DB.App app; private int app_currentvercode; @@ -181,7 +182,9 @@ public class AppDetails extends ListActivity { private PackageManager mPm; private DownloadHandler downloadHandler; private boolean stateRetained; - private boolean ignoreToggled; + + private boolean ignoreAllToggled; + private boolean ignoreThisToggled; LinearLayout headerView; View infoView; @@ -252,7 +255,8 @@ public class AppDetails extends ListActivity { pref_antiNonFreeNet = prefs.getBoolean("antiNonFreeNet", false); pref_antiNonFreeDep = prefs.getBoolean("antiNonFreeDep", false); - ignoreToggled = false; + ignoreAllToggled = false; + ignoreThisToggled = false; startViews(); @@ -662,11 +666,17 @@ public class AppDetails extends ListActivity { MenuItemCompat.SHOW_AS_ACTION_IF_ROOM | MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT); - menu.add(Menu.NONE, IGNORE, 2, R.string.menu_ignore) - .setIcon(android.R.drawable.ic_menu_add) + menu.add(Menu.NONE, IGNOREALL, 2, R.string.menu_ignore_all) + .setIcon(android.R.drawable.ic_menu_close_clear_cancel) .setCheckable(true) - .setChecked(app.ignoreUpdates); + .setChecked(app.ignoreAllUpdates); + if (app.hasUpdates) { + menu.add(Menu.NONE, IGNORETHIS, 2, R.string.menu_ignore_this) + .setIcon(android.R.drawable.ic_menu_close_clear_cancel) + .setCheckable(true) + .setChecked(app.ignoreThisUpdate); + } if (app.detail_webURL.length() > 0) { menu.add(Menu.NONE, WEBSITE, 3, R.string.menu_website).setIcon( android.R.drawable.ic_menu_view); @@ -733,10 +743,16 @@ public class AppDetails extends ListActivity { removeApk(app.id); return true; - case IGNORE: - app.ignoreUpdates ^= true; - item.setChecked(app.ignoreUpdates); - ignoreToggled ^= true; + case IGNOREALL: + app.ignoreAllUpdates ^= true; + item.setChecked(app.ignoreAllUpdates); + ignoreAllToggled ^= true; + return true; + + case IGNORETHIS: + app.ignoreThisUpdate ^= true; + item.setChecked(app.ignoreThisUpdate); + ignoreThisToggled ^= true; return true; case WEBSITE: @@ -1015,10 +1031,11 @@ public class AppDetails extends ListActivity { @Override public void finish() { - if (ignoreToggled) { + if (ignoreAllToggled || ignoreThisToggled) { try { DB db = DB.getDB(); - db.toggleIgnoreUpdates(app.id); + db.toggleIgnoreUpdates(app.id, + ignoreAllToggled, ignoreThisToggled); } finally { DB.releaseDB(); } diff --git a/src/org/fdroid/fdroid/DB.java b/src/org/fdroid/fdroid/DB.java index 6bb4808d1..b931a8c57 100644 --- a/src/org/fdroid/fdroid/DB.java +++ b/src/org/fdroid/fdroid/DB.java @@ -98,7 +98,9 @@ public class DB { + "flattrID string," + "requirements string," + "category string," + "added string," + "lastUpdated string," + "compatible int not null," - + "ignoreUpdates int not null," + "primary key(id));"; + + "ignoreAllUpdates int not null," + + "ignoreThisUpdate int not null," + + "primary key(id));"; public static class App implements Comparable { @@ -125,7 +127,8 @@ public class DB { apks = new ArrayList(); detail_Populated = false; compatible = false; - ignoreUpdates = false; + ignoreAllUpdates = false; + ignoreThisUpdate = false; filtered = false; iconUrl = null; } @@ -204,9 +207,11 @@ public class DB { // 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; + // True if all updates for this app are to be ignored + public boolean ignoreAllUpdates; + + // True if the current update for this app is to be ignored + public boolean ignoreThisUpdate; // The name of the version that would be updated to. public String updateVersion; @@ -436,7 +441,7 @@ public class DB { public String lastetag; // last etag we updated from, null forces update } - private final int DBVersion = 25; + private final int DBVersion = 26; private static void createAppApk(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_APP); @@ -758,7 +763,7 @@ public class DB { String cols[] = new String[] { "antiFeatures", "requirements", "id", "name", "summary", "icon", "license", "category", "curVersion", "curVercode", "added", "lastUpdated", - "compatible", "ignoreUpdates" }; + "compatible", "ignoreAllUpdates", "ignoreThisUpdate" }; c = db.query(TABLE_APP, cols, null, null, null, null, null); c.moveToFirst(); while (!c.isAfterLast()) { @@ -782,7 +787,8 @@ public class DB { .length() == 0) ? null : mDateFormat .parse(sLastUpdated); app.compatible = c.getInt(12) == 1; - app.ignoreUpdates = c.getInt(13) == 1; + app.ignoreAllUpdates = c.getInt(13) == 1; + app.ignoreThisUpdate = c.getInt(14) == 1; app.hasUpdates = false; if (getinstalledinfo && systemApks.containsKey(app.id)) { @@ -1147,9 +1153,14 @@ public class DB { // Values to keep if already present if (oldapp == null) { - values.put("ignoreUpdates", upapp.ignoreUpdates ? 1 : 0); + values.put("ignoreAllUpdates", upapp.ignoreAllUpdates ? 1 : 0); + values.put("ignoreThisUpdate", upapp.ignoreThisUpdate ? 1 : 0); } else { - values.put("ignoreUpdates", oldapp.ignoreUpdates ? 1 : 0); + values.put("ignoreAllUpdates", oldapp.ignoreAllUpdates ? 1 : 0); + if (upapp.curVercode > oldapp.curVercode) + values.put("ignoreThisUpdate", upapp.ignoreThisUpdate ? 1 : 0); + else + values.put("ignoreThisUpdate", oldapp.ignoreThisUpdate ? 1 : 0); } if (oldapp != null) { @@ -1257,10 +1268,11 @@ public class DB { new String[] { address }); } - public void toggleIgnoreUpdates(String appid) { - db.execSQL("update " + TABLE_APP - + " set ignoreUpdates=1-ignoreUpdates where id = ?", - new String[] { appid }); + public void toggleIgnoreUpdates(String appid, boolean All, boolean This) { + db.execSQL("update " + TABLE_APP + " set " + + (All ? "ignoreAllUpdates=1-ignoreAllUpdates " : "") + + (This ? "ignoreThisUpdate=1-ignoreThisUpdate " : "") + + "where id = ?", new String[] { appid }); } public void updateRepoByAddress(Repo repo) { diff --git a/src/org/fdroid/fdroid/FDroidApp.java b/src/org/fdroid/fdroid/FDroidApp.java index 7c7a52505..a198e2bf1 100644 --- a/src/org/fdroid/fdroid/FDroidApp.java +++ b/src/org/fdroid/fdroid/FDroidApp.java @@ -198,9 +198,9 @@ public class FDroidApp extends Application { for (DB.App app : apps) { app.filtered = appFilter.filter(app); - app.toUpdate = ( - !app.ignoreUpdates - && app.hasUpdates + app.toUpdate = (app.hasUpdates + && !app.ignoreAllUpdates + && !app.ignoreThisUpdate && !app.filtered && (showIncompatible || app.compatible)); }