diff --git a/app/src/main/java/org/fdroid/fdroid/IndexUpdater.java b/app/src/main/java/org/fdroid/fdroid/IndexUpdater.java index dabb03a1c..f425a0c07 100644 --- a/app/src/main/java/org/fdroid/fdroid/IndexUpdater.java +++ b/app/src/main/java/org/fdroid/fdroid/IndexUpdater.java @@ -481,7 +481,7 @@ public class IndexUpdater { } int versionCode; if (repoPushRequest.versionCode == null) { - versionCode = app.suggestedVersionCode; + versionCode = app.autoInstallVersionCode; } else { versionCode = repoPushRequest.versionCode; } diff --git a/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java b/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java index 4a6135a59..0d8157ba7 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java @@ -92,7 +92,7 @@ public class ApkProvider extends FDroidProvider { @Nullable public static Apk findSuggestedApk(Context context, App app) { String mostAppropriateSignature = app.getMostAppropriateSignature(); - Apk apk = findApkFromAnyRepo(context, app.packageName, app.suggestedVersionCode, + Apk apk = findApkFromAnyRepo(context, app.packageName, app.autoInstallVersionCode, mostAppropriateSignature); if (apk == null && (mostAppropriateSignature == null || !app.isInstalled(context))) { List apks = findByPackageName(context, app.packageName); diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java index c13b53990..a0975bfa7 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -182,7 +182,11 @@ public class App extends ValueObject implements Comparable, Parcelable { */ private String suggestedVersionName; - public int suggestedVersionCode; + /** + * The version that will be automatically installed if the user does not + * choose a specific version. + */ + public int autoInstallVersionCode; public Date added; public Date lastUpdated; @@ -305,8 +309,8 @@ public class App extends ValueObject implements Comparable, Parcelable { case Cols.PREFERRED_SIGNER: preferredSigner = cursor.getString(i); break; - case Cols.SUGGESTED_VERSION_CODE: - suggestedVersionCode = cursor.getInt(i); + case Cols.AUTO_INSTALL_VERSION_CODE: + autoInstallVersionCode = cursor.getInt(i); break; case Cols.UPSTREAM_VERSION_CODE: upstreamVersionCode = cursor.getInt(i); @@ -955,7 +959,7 @@ public class App extends ValueObject implements Comparable, Parcelable { values.put(Cols.ADDED, Utils.formatDate(added, "")); values.put(Cols.LAST_UPDATED, Utils.formatDate(lastUpdated, "")); values.put(Cols.PREFERRED_SIGNER, preferredSigner); - values.put(Cols.SUGGESTED_VERSION_CODE, suggestedVersionCode); + values.put(Cols.AUTO_INSTALL_VERSION_CODE, autoInstallVersionCode); values.put(Cols.UPSTREAM_VERSION_NAME, upstreamVersionName); values.put(Cols.UPSTREAM_VERSION_CODE, upstreamVersionCode); values.put(Cols.ForWriting.Categories.CATEGORIES, Utils.serializeCommaSeparatedString(categories)); @@ -1021,8 +1025,8 @@ public class App extends ValueObject implements Comparable, Parcelable { */ public boolean hasUpdates() { boolean updates = false; - if (suggestedVersionCode > 0) { - updates = installedVersionCode > 0 && installedVersionCode < suggestedVersionCode; + if (autoInstallVersionCode > 0) { + updates = installedVersionCode > 0 && installedVersionCode < autoInstallVersionCode; } return updates; } @@ -1041,7 +1045,7 @@ public class App extends ValueObject implements Comparable, Parcelable { public boolean canAndWantToUpdate(Context context) { boolean canUpdate = hasUpdates(); AppPrefs prefs = getPrefs(context); - boolean wantsUpdate = !prefs.ignoreAllUpdates && prefs.ignoreThisUpdate < suggestedVersionCode; + boolean wantsUpdate = !prefs.ignoreAllUpdates && prefs.ignoreThisUpdate < autoInstallVersionCode; return canUpdate && wantsUpdate && !isDisabledByAntiFeatures(); } @@ -1185,7 +1189,7 @@ public class App extends ValueObject implements Comparable, Parcelable { dest.writeString(this.upstreamVersionName); dest.writeInt(this.upstreamVersionCode); dest.writeString(this.suggestedVersionName); - dest.writeInt(this.suggestedVersionCode); + dest.writeInt(this.autoInstallVersionCode); dest.writeLong(this.added != null ? this.added.getTime() : -1); dest.writeLong(this.lastUpdated != null ? this.lastUpdated.getTime() : -1); dest.writeStringArray(this.categories); @@ -1236,7 +1240,7 @@ public class App extends ValueObject implements Comparable, Parcelable { this.upstreamVersionName = in.readString(); this.upstreamVersionCode = in.readInt(); this.suggestedVersionName = in.readString(); - this.suggestedVersionCode = in.readInt(); + this.autoInstallVersionCode = in.readInt(); long tmpAdded = in.readLong(); this.added = tmpAdded == -1 ? null : new Date(tmpAdded); long tmpLastUpdated = in.readLong(); diff --git a/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java b/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java index f5e31d7e1..dc3f5190b 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java @@ -399,7 +399,7 @@ public class AppProvider extends FDroidProvider { leftJoin( getApkTableName(), "suggestedApk", - getTableName() + "." + Cols.SUGGESTED_VERSION_CODE + " = suggestedApk." + ApkTable.Cols.VERSION_CODE + " AND " + getTableName() + "." + Cols.ROW_ID + " = suggestedApk." + ApkTable.Cols.APP_ID); + getTableName() + "." + Cols.AUTO_INSTALL_VERSION_CODE + " = suggestedApk." + ApkTable.Cols.VERSION_CODE + " AND " + getTableName() + "." + Cols.ROW_ID + " = suggestedApk." + ApkTable.Cols.APP_ID); } appendField(fieldName, "suggestedApk", alias); } @@ -615,11 +615,11 @@ public class AppProvider extends FDroidProvider { // Need to use COALESCE because the prefs join may not resolve any rows, which means the // ignore* fields will be NULL. In that case, we want to instead use a default value of 0. - final String ignoreCurrent = " COALESCE(prefs." + AppPrefsTable.Cols.IGNORE_THIS_UPDATE + ", 0) != " + app + "." + Cols.SUGGESTED_VERSION_CODE; + final String ignoreCurrent = " COALESCE(prefs." + AppPrefsTable.Cols.IGNORE_THIS_UPDATE + ", 0) != " + app + "." + Cols.AUTO_INSTALL_VERSION_CODE; final String ignoreAll = "COALESCE(prefs." + AppPrefsTable.Cols.IGNORE_ALL_UPDATES + ", 0) != 1"; final String ignore = " (" + ignoreCurrent + " AND " + ignoreAll + ") "; - final String where = ignore + " AND " + app + "." + Cols.SUGGESTED_VERSION_CODE + " > installed." + InstalledAppTable.Cols.VERSION_CODE; + final String where = ignore + " AND " + app + "." + Cols.AUTO_INSTALL_VERSION_CODE + " > installed." + InstalledAppTable.Cols.VERSION_CODE; return new AppQuerySelection(where).requireNaturalInstalledTable().requireLeftJoinPrefs(); } @@ -1118,7 +1118,7 @@ public class AppProvider extends FDroidProvider { // installed table (this is impossible), but rather because the subselect above returned // zero rows. String updateSql = - "UPDATE " + app + " SET " + Cols.SUGGESTED_VERSION_CODE + " = ( " + + "UPDATE " + app + " SET " + Cols.AUTO_INSTALL_VERSION_CODE + " = ( " + " SELECT MAX( " + apk + "." + ApkTable.Cols.VERSION_CODE + " ) " + " FROM " + apk + " JOIN " + app + " AS appForThisApk ON (appForThisApk." + Cols.ROW_ID + " = " + apk + "." + ApkTable.Cols.APP_ID + ") " + @@ -1154,7 +1154,7 @@ public class AppProvider extends FDroidProvider { final String[] args; if (packageName == null) { - restrictToApps = " COALESCE(" + Cols.UPSTREAM_VERSION_CODE + ", 0) = 0 OR " + Cols.SUGGESTED_VERSION_CODE + " IS NULL "; + restrictToApps = " COALESCE(" + Cols.UPSTREAM_VERSION_CODE + ", 0) = 0 OR " + Cols.AUTO_INSTALL_VERSION_CODE + " IS NULL "; args = null; } else { // Don't update an app with an upstream version code, because that would have been updated @@ -1164,7 +1164,7 @@ public class AppProvider extends FDroidProvider { } String updateSql = - "UPDATE " + app + " SET " + Cols.SUGGESTED_VERSION_CODE + " = ( " + + "UPDATE " + app + " SET " + Cols.AUTO_INSTALL_VERSION_CODE + " = ( " + " SELECT MAX( " + apk + "." + ApkTable.Cols.VERSION_CODE + " ) " + " FROM " + apk + " JOIN " + app + " AS appForThisApk ON (appForThisApk." + Cols.ROW_ID + " = " + apk + "." + ApkTable.Cols.APP_ID + ") " + diff --git a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java index 0a411e211..f90795006 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -147,7 +147,7 @@ public class DBHelper extends SQLiteOpenHelper { + AppMetadataTable.Cols.VIDEO + " string, " + AppMetadataTable.Cols.CHANGELOG + " text, " + AppMetadataTable.Cols.PREFERRED_SIGNER + " text," - + AppMetadataTable.Cols.SUGGESTED_VERSION_CODE + " text," + + AppMetadataTable.Cols.AUTO_INSTALL_VERSION_CODE + " text," + AppMetadataTable.Cols.UPSTREAM_VERSION_NAME + " text," + AppMetadataTable.Cols.UPSTREAM_VERSION_CODE + " integer," + AppMetadataTable.Cols.ANTI_FEATURES + " string," diff --git a/app/src/main/java/org/fdroid/fdroid/data/Schema.java b/app/src/main/java/org/fdroid/fdroid/data/Schema.java index 7fecd916e..875f3bb50 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Schema.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Schema.java @@ -191,7 +191,7 @@ public interface Schema { String FLATTR_ID = "flattrID"; String LIBERAPAY_ID = "liberapayID"; String PREFERRED_SIGNER = "preferredSigner"; - String SUGGESTED_VERSION_CODE = "suggestedVercode"; + String AUTO_INSTALL_VERSION_CODE = "suggestedVercode"; // name mismatch from issue #1063 String UPSTREAM_VERSION_NAME = "upstreamVersion"; String UPSTREAM_VERSION_CODE = "upstreamVercode"; String ADDED = "added"; @@ -248,7 +248,7 @@ public interface Schema { ANTI_FEATURES, REQUIREMENTS, ICON_URL, FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS, SEVEN_INCH_SCREENSHOTS, TEN_INCH_SCREENSHOTS, TV_SCREENSHOTS, WEAR_SCREENSHOTS, - PREFERRED_SIGNER, SUGGESTED_VERSION_CODE, IS_APK, IS_LOCALIZED, + PREFERRED_SIGNER, AUTO_INSTALL_VERSION_CODE, IS_APK, IS_LOCALIZED, }; /** @@ -265,7 +265,7 @@ public interface Schema { ANTI_FEATURES, REQUIREMENTS, ICON_URL, FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS, SEVEN_INCH_SCREENSHOTS, TEN_INCH_SCREENSHOTS, TV_SCREENSHOTS, WEAR_SCREENSHOTS, - PREFERRED_SIGNER, SUGGESTED_VERSION_CODE, IS_APK, IS_LOCALIZED, SuggestedApk.VERSION_NAME, + PREFERRED_SIGNER, AUTO_INSTALL_VERSION_CODE, IS_APK, IS_LOCALIZED, SuggestedApk.VERSION_NAME, InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME, InstalledApp.SIGNATURE, Package.PACKAGE_NAME, }; diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java index 8f2b95bd2..669b73a6c 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java @@ -250,7 +250,7 @@ public class AppDetailsActivity extends AppCompatActivity MenuItem itemIgnoreThis = menu.findItem(R.id.action_ignore_this); if (itemIgnoreThis != null) { itemIgnoreThis.setVisible(app.hasUpdates()); - itemIgnoreThis.setChecked(app.getPrefs(this).ignoreThisUpdate >= app.suggestedVersionCode); + itemIgnoreThis.setChecked(app.getPrefs(this).ignoreThisUpdate >= app.autoInstallVersionCode); } return true; } @@ -274,10 +274,10 @@ public class AppDetailsActivity extends AppCompatActivity AppPrefsProvider.Helper.update(this, app, app.getPrefs(this)); return true; } else if (item.getItemId() == R.id.action_ignore_this) { - if (app.getPrefs(this).ignoreThisUpdate >= app.suggestedVersionCode) { + if (app.getPrefs(this).ignoreThisUpdate >= app.autoInstallVersionCode) { app.getPrefs(this).ignoreThisUpdate = 0; } else { - app.getPrefs(this).ignoreThisUpdate = app.suggestedVersionCode; + app.getPrefs(this).ignoreThisUpdate = app.autoInstallVersionCode; } item.setChecked(app.getPrefs(this).ignoreThisUpdate > 0); AppPrefsProvider.Helper.update(this, app, app.getPrefs(this)); diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 81832ddb0..6c8b24cb8 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -239,7 +239,7 @@ public class AppDetailsRecyclerViewAdapter String appropriateSig = app.getMostAppropriateSignature(); for (int i = 0; i < versions.size(); i++) { final Apk apk = versions.get(i); - if (apk.versionCode == app.suggestedVersionCode && TextUtils.equals(apk.sig, appropriateSig)) { + if (apk.versionCode == app.autoInstallVersionCode && TextUtils.equals(apk.sig, appropriateSig)) { curApk = apk; break; } @@ -1104,7 +1104,7 @@ public class AppDetailsRecyclerViewAdapter boolean isAppInstalled = app.isInstalled(context); boolean isApkInstalled = apk.versionCode == app.installedVersionCode && TextUtils.equals(apk.sig, app.installedSig); - boolean isApkSuggested = apk.versionCode == app.suggestedVersionCode && + boolean isApkSuggested = apk.versionCode == app.autoInstallVersionCode && TextUtils.equals(apk.sig, app.getMostAppropriateSignature()); boolean isApkDownloading = callbacks.isAppDownloading() && downloadedApk != null && downloadedApk.compareTo(apk) == 0 && TextUtils.equals(apk.apkName, downloadedApk.apkName); diff --git a/app/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppListItemController.java index 4f960bc80..a77dc1aa0 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppListItemController.java @@ -35,7 +35,7 @@ public class InstalledAppListItemController extends AppListItemController { * Either "Version X" or "Version Y (Recommended)", depending on the installed version. */ private CharSequence getInstalledVersion(@NonNull App app) { - int statusStringRes = (app.suggestedVersionCode == app.installedVersionCode) + int statusStringRes = (app.autoInstallVersionCode == app.installedVersionCode) ? R.string.app_recommended_version_installed : R.string.app_version_x_installed; @@ -51,7 +51,7 @@ public class InstalledAppListItemController extends AppListItemController { AppPrefs prefs = app.getPrefs(activity); if (prefs.ignoreAllUpdates) { return activity.getString(R.string.installed_app__updates_ignored); - } else if (prefs.ignoreThisUpdate > 0 && prefs.ignoreThisUpdate == app.suggestedVersionCode) { + } else if (prefs.ignoreThisUpdate > 0 && prefs.ignoreThisUpdate == app.autoInstallVersionCode) { return activity.getString( R.string.installed_app__updates_ignored_for_suggested_version, app.getSuggestedVersionName()); diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppListItemController.java index 34c3bc6df..33ae7ddf3 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppListItemController.java @@ -42,7 +42,7 @@ public class UpdateableAppListItemController extends AppListItemController { @Override protected void onDismissApp(@NonNull final App app, UpdatesAdapter adapter) { final AppPrefs prefs = app.getPrefs(activity); - prefs.ignoreThisUpdate = app.suggestedVersionCode; + prefs.ignoreThisUpdate = app.autoInstallVersionCode; Snackbar.make( itemView, diff --git a/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java b/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java index c4dd49d40..0b6e4b1ca 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/PreferredSignatureTest.java @@ -273,7 +273,7 @@ public class PreferredSignatureTest extends FDroidProviderTest { private void assertSuggested(Context context, int suggestedVersion, String suggestedSig) { App suggestedApp = AppProvider.Helper.findHighestPriorityMetadata(context.getContentResolver(), PACKAGE_NAME); - assertEquals("Suggested version on App", suggestedVersion, suggestedApp.suggestedVersionCode); + assertEquals("Suggested version on App", suggestedVersion, suggestedApp.autoInstallVersionCode); Apk suggestedApk = ApkProvider.Helper.findSuggestedApk(context, suggestedApp); assertEquals("Version on suggested Apk", suggestedVersion, suggestedApk.versionCode); diff --git a/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java b/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java index 5fe3ad3a2..027cbd16d 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java @@ -195,7 +195,7 @@ public class SuggestedVersionTest extends FDroidProviderTest { */ public void assertSuggested(String packageName, int suggestedVersion, String installedSig, int installedVersion) { App suggestedApp = AppProvider.Helper.findHighestPriorityMetadata(context.getContentResolver(), packageName); - assertEquals("Suggested version on App", suggestedVersion, suggestedApp.suggestedVersionCode); + assertEquals("Suggested version on App", suggestedVersion, suggestedApp.autoInstallVersionCode); assertEquals("Installed signature on App", installedSig, suggestedApp.installedSig); Apk suggestedApk = ApkProvider.Helper.findSuggestedApk(context, suggestedApp); @@ -212,7 +212,7 @@ public class SuggestedVersionTest extends FDroidProviderTest { App canUpdateApp = appsToUpdate.get(0); assertEquals("Package name of updatable app", packageName, canUpdateApp.packageName); assertEquals("Installed version of updatable app", installedVersion, canUpdateApp.installedVersionCode); - assertEquals("Suggested version to update to", suggestedVersion, canUpdateApp.suggestedVersionCode); + assertEquals("Suggested version to update to", suggestedVersion, canUpdateApp.autoInstallVersionCode); assertEquals("Installed signature of updatable app", installedSig, canUpdateApp.installedSig); } } diff --git a/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java b/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java index cd1267787..b789ba749 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java @@ -303,6 +303,7 @@ public class IndexV1UpdaterTest extends FDroidProviderTest { "antiFeatures", "authorEmail", "authorName", + "autoInstallVersionCode", "bitcoin", "categories", "changelog", @@ -333,11 +334,10 @@ public class IndexV1UpdaterTest extends FDroidProviderTest { "tvBanner", "tvScreenshots", "upstreamVersionCode", - "upstreamVersionName", "video", - "whatsNew", "wearScreenshots", "webSite", + "whatsNew", }; String[] ignoredInApp = new String[]{ "compatible", diff --git a/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiIndexUpdaterTest.java b/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiIndexUpdaterTest.java index eab73ed39..11ea182fc 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiIndexUpdaterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/ProperMultiIndexUpdaterTest.java @@ -252,7 +252,7 @@ public class ProperMultiIndexUpdaterTest extends MultiIndexUpdaterTest { List appsToUpdate = AppProvider.Helper.findCanUpdate(context, AppMetadataTable.Cols.ALL); assertEquals(1, appsToUpdate.size()); assertEquals(installedVersion, appsToUpdate.get(0).installedVersionCode); - assertEquals(expectedUpdateVersion, appsToUpdate.get(0).suggestedVersionCode); + assertEquals(expectedUpdateVersion, appsToUpdate.get(0).autoInstallVersionCode); } private void assertMainRepo() {