From 626f55b43b6393c1947f96cb59e977bc66f1f580 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Sun, 24 Jul 2016 20:28:00 +1000 Subject: [PATCH] Renamed AppTable to AppMetadataTable See #511 for details. This is in prepration for having an even more normalized `fdroid_package` table. That table will be the authoritative reference of what "packages" are known about in the client. The "app" table (now thought of as "app metadata") will be specific to each repository which provides different metadata about that app. --- .../java/org/fdroid/fdroid/UpdateService.java | 4 +- .../org/fdroid/fdroid/data/ApkProvider.java | 12 +- .../main/java/org/fdroid/fdroid/data/App.java | 2 +- .../org/fdroid/fdroid/data/AppProvider.java | 8 +- .../java/org/fdroid/fdroid/data/DBHelper.java | 108 +++++++++--------- .../org/fdroid/fdroid/data/RepoPersister.java | 4 +- .../java/org/fdroid/fdroid/data/Schema.java | 4 +- .../fdroid/fdroid/data/TempAppProvider.java | 16 +-- .../views/fragments/AppListFragment.java | 30 ++--- .../fdroid/views/swap/SwapAppsView.java | 4 +- .../test/java/org/fdroid/fdroid/Assert.java | 14 +-- .../fdroid/fdroid/data/AppProviderTest.java | 2 +- .../fdroid/fdroid/data/ProviderUriTests.java | 4 +- 13 files changed, 106 insertions(+), 106 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index fb05924b2..37dc52f4a 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -416,7 +416,7 @@ public class UpdateService extends IntentService { private void performUpdateNotification() { Cursor cursor = getContentResolver().query( AppProvider.getCanUpdateUri(), - Schema.AppTable.Cols.ALL, + Schema.AppMetadataTable.Cols.ALL, null, null, null); if (cursor != null) { if (cursor.getCount() > 0) { @@ -462,7 +462,7 @@ public class UpdateService extends IntentService { private void autoDownloadUpdates() { Cursor cursor = getContentResolver().query( AppProvider.getCanUpdateUri(), - Schema.AppTable.Cols.ALL, + Schema.AppMetadataTable.Cols.ALL, null, null, null); if (cursor != null) { cursor.moveToFirst(); 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 82f7ee8f1..d3ebecc6f 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/ApkProvider.java @@ -10,7 +10,7 @@ import android.util.Log; import org.fdroid.fdroid.data.Schema.ApkTable; import org.fdroid.fdroid.data.Schema.ApkTable.Cols; -import org.fdroid.fdroid.data.Schema.AppTable; +import org.fdroid.fdroid.data.Schema.AppMetadataTable; import org.fdroid.fdroid.data.Schema.RepoTable; import java.util.ArrayList; @@ -213,7 +213,7 @@ public class ApkProvider extends FDroidProvider { static { REPO_FIELDS.put(Cols.Repo.VERSION, RepoTable.Cols.VERSION); REPO_FIELDS.put(Cols.Repo.ADDRESS, RepoTable.Cols.ADDRESS); - APP_FIELDS.put(Cols.App.PACKAGE_NAME, AppTable.Cols.PACKAGE_NAME); + APP_FIELDS.put(Cols.App.PACKAGE_NAME, AppMetadataTable.Cols.PACKAGE_NAME); MATCHER.addURI(getAuthority(), PATH_REPO + "/#", CODE_REPO); MATCHER.addURI(getAuthority(), PATH_APK + "/#/*", CODE_SINGLE); @@ -320,7 +320,7 @@ public class ApkProvider extends FDroidProvider { } protected String getAppTableName() { - return AppTable.NAME; + return AppMetadataTable.NAME; } @Override @@ -343,7 +343,7 @@ public class ApkProvider extends FDroidProvider { final String app = getAppTableName(); return apk + " AS apk " + - " LEFT JOIN " + app + " AS app ON (app." + AppTable.Cols.ROW_ID + " = apk." + Cols.APP_ID + ")"; + " LEFT JOIN " + app + " AS app ON (app." + AppMetadataTable.Cols.ROW_ID + " = apk." + Cols.APP_ID + ")"; } @Override @@ -427,7 +427,7 @@ public class ApkProvider extends FDroidProvider { } private QuerySelection queryRepoApps(long repoId, String packageNames) { - return queryRepo(repoId).add(AppProvider.queryApps(packageNames, "app." + AppTable.Cols.PACKAGE_NAME)); + return queryRepo(repoId).add(AppProvider.queryApps(packageNames, "app." + AppMetadataTable.Cols.PACKAGE_NAME)); } protected QuerySelection queryApks(String apkKeys) { @@ -467,7 +467,7 @@ public class ApkProvider extends FDroidProvider { } private String getAppIdFromPackageNameQuery() { - return "SELECT " + AppTable.Cols.ROW_ID + " FROM " + getAppTableName() + " WHERE " + AppTable.Cols.PACKAGE_NAME + " = ?"; + return "SELECT " + AppMetadataTable.Cols.ROW_ID + " FROM " + getAppTableName() + " WHERE " + AppMetadataTable.Cols.PACKAGE_NAME + " = ?"; } @Override 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 35f94fd84..cfd6c7c74 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -33,7 +33,7 @@ import java.util.jar.JarFile; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.fdroid.fdroid.data.Schema.AppTable.Cols; +import org.fdroid.fdroid.data.Schema.AppMetadataTable.Cols; public class App extends ValueObject implements Comparable, Parcelable { 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 4e90d4550..6b7707192 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/AppProvider.java @@ -15,8 +15,8 @@ import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Schema.ApkTable; import org.fdroid.fdroid.data.Schema.AppPrefsTable; -import org.fdroid.fdroid.data.Schema.AppTable; -import org.fdroid.fdroid.data.Schema.AppTable.Cols; +import org.fdroid.fdroid.data.Schema.AppMetadataTable; +import org.fdroid.fdroid.data.Schema.AppMetadataTable.Cols; import org.fdroid.fdroid.data.Schema.InstalledAppTable; import org.fdroid.fdroid.data.Schema.RepoTable; @@ -165,7 +165,7 @@ public class AppProvider extends FDroidProvider { static final class UpgradeHelper { public static void updateIconUrls(Context context, SQLiteDatabase db) { - AppProvider.updateIconUrls(context, db, AppTable.NAME, ApkTable.NAME); + AppProvider.updateIconUrls(context, db, AppMetadataTable.NAME, ApkTable.NAME); } } @@ -524,7 +524,7 @@ public class AppProvider extends FDroidProvider { @Override protected String getTableName() { - return AppTable.NAME; + return AppMetadataTable.NAME; } protected String getApkTableName() { 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 2c0fcb24c..8310a9a66 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -12,7 +12,7 @@ import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Schema.ApkTable; import org.fdroid.fdroid.data.Schema.AppPrefsTable; -import org.fdroid.fdroid.data.Schema.AppTable; +import org.fdroid.fdroid.data.Schema.AppMetadataTable; import org.fdroid.fdroid.data.Schema.InstalledAppTable; import org.fdroid.fdroid.data.Schema.RepoTable; @@ -69,36 +69,36 @@ class DBHelper extends SQLiteOpenHelper { + "PRIMARY KEY (" + ApkTable.Cols.APP_ID + ", " + ApkTable.Cols.VERSION_CODE + ", " + ApkTable.Cols.REPO_ID + ")" + ");"; - private static final String CREATE_TABLE_APP = "CREATE TABLE " + AppTable.NAME + private static final String CREATE_TABLE_APP = "CREATE TABLE " + AppMetadataTable.NAME + " ( " - + AppTable.Cols.PACKAGE_NAME + " text not null, " - + AppTable.Cols.NAME + " text not null, " - + AppTable.Cols.SUMMARY + " text not null, " - + AppTable.Cols.ICON + " text, " - + AppTable.Cols.DESCRIPTION + " text not null, " - + AppTable.Cols.LICENSE + " text not null, " - + AppTable.Cols.AUTHOR + " text, " - + AppTable.Cols.EMAIL + " text, " - + AppTable.Cols.WEB_URL + " text, " - + AppTable.Cols.TRACKER_URL + " text, " - + AppTable.Cols.SOURCE_URL + " text, " - + AppTable.Cols.CHANGELOG_URL + " text, " - + AppTable.Cols.SUGGESTED_VERSION_CODE + " text," - + AppTable.Cols.UPSTREAM_VERSION_NAME + " text," - + AppTable.Cols.UPSTREAM_VERSION_CODE + " integer," - + AppTable.Cols.ANTI_FEATURES + " string," - + AppTable.Cols.DONATE_URL + " string," - + AppTable.Cols.BITCOIN_ADDR + " string," - + AppTable.Cols.LITECOIN_ADDR + " string," - + AppTable.Cols.FLATTR_ID + " string," - + AppTable.Cols.REQUIREMENTS + " string," - + AppTable.Cols.CATEGORIES + " string," - + AppTable.Cols.ADDED + " string," - + AppTable.Cols.LAST_UPDATED + " string," - + AppTable.Cols.IS_COMPATIBLE + " int not null," - + AppTable.Cols.ICON_URL + " text, " - + AppTable.Cols.ICON_URL_LARGE + " text, " - + "primary key(" + AppTable.Cols.PACKAGE_NAME + "));"; + + AppMetadataTable.Cols.PACKAGE_NAME + " text not null, " + + AppMetadataTable.Cols.NAME + " text not null, " + + AppMetadataTable.Cols.SUMMARY + " text not null, " + + AppMetadataTable.Cols.ICON + " text, " + + AppMetadataTable.Cols.DESCRIPTION + " text not null, " + + AppMetadataTable.Cols.LICENSE + " text not null, " + + AppMetadataTable.Cols.AUTHOR + " text, " + + AppMetadataTable.Cols.EMAIL + " text, " + + AppMetadataTable.Cols.WEB_URL + " text, " + + AppMetadataTable.Cols.TRACKER_URL + " text, " + + AppMetadataTable.Cols.SOURCE_URL + " text, " + + AppMetadataTable.Cols.CHANGELOG_URL + " text, " + + AppMetadataTable.Cols.SUGGESTED_VERSION_CODE + " text," + + AppMetadataTable.Cols.UPSTREAM_VERSION_NAME + " text," + + AppMetadataTable.Cols.UPSTREAM_VERSION_CODE + " integer," + + AppMetadataTable.Cols.ANTI_FEATURES + " string," + + AppMetadataTable.Cols.DONATE_URL + " string," + + AppMetadataTable.Cols.BITCOIN_ADDR + " string," + + AppMetadataTable.Cols.LITECOIN_ADDR + " string," + + AppMetadataTable.Cols.FLATTR_ID + " string," + + AppMetadataTable.Cols.REQUIREMENTS + " string," + + AppMetadataTable.Cols.CATEGORIES + " string," + + AppMetadataTable.Cols.ADDED + " string," + + AppMetadataTable.Cols.LAST_UPDATED + " string," + + AppMetadataTable.Cols.IS_COMPATIBLE + " int not null," + + AppMetadataTable.Cols.ICON_URL + " text, " + + AppMetadataTable.Cols.ICON_URL_LARGE + " text, " + + "primary key(" + AppMetadataTable.Cols.PACKAGE_NAME + "));"; private static final String CREATE_TABLE_APP_PREFS = "CREATE TABLE " + AppPrefsTable.NAME + " ( " @@ -344,10 +344,10 @@ class DBHelper extends SQLiteOpenHelper { + AppPrefsTable.Cols.IGNORE_THIS_UPDATE + ", " + AppPrefsTable.Cols.IGNORE_ALL_UPDATES + ") SELECT " - + AppTable.Cols.PACKAGE_NAME + ", " + + AppMetadataTable.Cols.PACKAGE_NAME + ", " + "ignoreThisUpdate, " + "ignoreAllUpdates " - + "FROM " + AppTable.NAME + " " + + "FROM " + AppMetadataTable.NAME + " " + "WHERE ignoreThisUpdate > 0 OR ignoreAllUpdates > 0" ); @@ -451,10 +451,10 @@ class DBHelper extends SQLiteOpenHelper { // Hard coded the string literal ".id" as ApkTable.Cols.PACKAGE_NAME was removed in // the subsequent migration (DB_VERSION 59) final String update = "UPDATE " + ApkTable.NAME + " SET " + ApkTable.Cols.APP_ID + " = ( " + - "SELECT app." + AppTable.Cols.ROW_ID + " " + - "FROM " + AppTable.NAME + " AS app " + - "WHERE " + ApkTable.NAME + ".id = app." + AppTable.Cols.PACKAGE_NAME + ")"; - Log.i(TAG, "Updating foreign key from " + ApkTable.NAME + " to " + AppTable.NAME + " to use numeric foreign key."); + "SELECT app." + AppMetadataTable.Cols.ROW_ID + " " + + "FROM " + AppMetadataTable.NAME + " AS app " + + "WHERE " + ApkTable.NAME + ".id = app." + AppMetadataTable.Cols.PACKAGE_NAME + ")"; + Log.i(TAG, "Updating foreign key from " + ApkTable.NAME + " to " + AppMetadataTable.NAME + " to use numeric foreign key."); Utils.debugLog(TAG, update); db.execSQL(update); ensureIndexes(db); @@ -624,19 +624,19 @@ class DBHelper extends SQLiteOpenHelper { } private void addChangelogToApp(SQLiteDatabase db, int oldVersion) { - if (oldVersion >= 48 || columnExists(db, AppTable.NAME, AppTable.Cols.CHANGELOG_URL)) { + if (oldVersion >= 48 || columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.CHANGELOG_URL)) { return; } - Utils.debugLog(TAG, "Adding " + AppTable.Cols.CHANGELOG_URL + " column to " + AppTable.NAME); - db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.CHANGELOG_URL + " text"); + Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.CHANGELOG_URL + " column to " + AppMetadataTable.NAME); + db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.CHANGELOG_URL + " text"); } private void addIconUrlLargeToApp(SQLiteDatabase db, int oldVersion) { - if (oldVersion >= 49 || columnExists(db, AppTable.NAME, AppTable.Cols.ICON_URL_LARGE)) { + if (oldVersion >= 49 || columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.ICON_URL_LARGE)) { return; } - Utils.debugLog(TAG, "Adding " + AppTable.Cols.ICON_URL_LARGE + " columns to " + AppTable.NAME); - db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.ICON_URL_LARGE + " text"); + Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.ICON_URL_LARGE + " columns to " + AppMetadataTable.NAME); + db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.ICON_URL_LARGE + " text"); } private void updateIconUrlLarge(SQLiteDatabase db, int oldVersion) { @@ -652,13 +652,13 @@ class DBHelper extends SQLiteOpenHelper { if (oldVersion >= 53) { return; } - if (!columnExists(db, AppTable.NAME, AppTable.Cols.AUTHOR)) { - Utils.debugLog(TAG, "Adding " + AppTable.Cols.AUTHOR + " column to " + AppTable.NAME); - db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.AUTHOR + " text"); + if (!columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.AUTHOR)) { + Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.AUTHOR + " column to " + AppMetadataTable.NAME); + db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.AUTHOR + " text"); } - if (!columnExists(db, AppTable.NAME, AppTable.Cols.EMAIL)) { - Utils.debugLog(TAG, "Adding " + AppTable.Cols.EMAIL + " column to " + AppTable.NAME); - db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.EMAIL + " text"); + if (!columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.EMAIL)) { + Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.EMAIL + " column to " + AppMetadataTable.NAME); + db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.EMAIL + " text"); } } @@ -704,7 +704,7 @@ class DBHelper extends SQLiteOpenHelper { .putBoolean("triedEmptyUpdate", false) .apply(); - db.execSQL("DROP TABLE " + AppTable.NAME); + db.execSQL("DROP TABLE " + AppMetadataTable.NAME); db.execSQL("DROP TABLE " + ApkTable.NAME); db.execSQL(CREATE_TABLE_APP); db.execSQL(CREATE_TABLE_APK); @@ -723,7 +723,7 @@ class DBHelper extends SQLiteOpenHelper { } context.getSharedPreferences("FDroid", Context.MODE_PRIVATE).edit() .putBoolean("triedEmptyUpdate", false).apply(); - db.execSQL("drop table " + AppTable.NAME); + db.execSQL("drop table " + AppMetadataTable.NAME); db.execSQL("drop table " + ApkTable.NAME); clearRepoEtags(db); db.execSQL(CREATE_TABLE_APP); @@ -732,10 +732,10 @@ class DBHelper extends SQLiteOpenHelper { } private static void ensureIndexes(SQLiteDatabase db) { - Utils.debugLog(TAG, "Ensuring indexes exist for " + AppTable.NAME); - db.execSQL("CREATE INDEX IF NOT EXISTS app_id on " + AppTable.NAME + " (" + AppTable.Cols.PACKAGE_NAME + ");"); - db.execSQL("CREATE INDEX IF NOT EXISTS name on " + AppTable.NAME + " (" + AppTable.Cols.NAME + ");"); // Used for sorting most lists - db.execSQL("CREATE INDEX IF NOT EXISTS added on " + AppTable.NAME + " (" + AppTable.Cols.ADDED + ");"); // Used for sorting "newly added" + Utils.debugLog(TAG, "Ensuring indexes exist for " + AppMetadataTable.NAME); + db.execSQL("CREATE INDEX IF NOT EXISTS app_id on " + AppMetadataTable.NAME + " (" + AppMetadataTable.Cols.PACKAGE_NAME + ");"); + db.execSQL("CREATE INDEX IF NOT EXISTS name on " + AppMetadataTable.NAME + " (" + AppMetadataTable.Cols.NAME + ");"); // Used for sorting most lists + db.execSQL("CREATE INDEX IF NOT EXISTS added on " + AppMetadataTable.NAME + " (" + AppMetadataTable.Cols.ADDED + ");"); // Used for sorting "newly added" Utils.debugLog(TAG, "Ensuring indexes exist for " + ApkTable.NAME); db.execSQL("CREATE INDEX IF NOT EXISTS apk_vercode on " + ApkTable.NAME + " (" + ApkTable.Cols.VERSION_CODE + ");"); diff --git a/app/src/main/java/org/fdroid/fdroid/data/RepoPersister.java b/app/src/main/java/org/fdroid/fdroid/data/RepoPersister.java index fb7df077e..68e2912fc 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoPersister.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoPersister.java @@ -143,7 +143,7 @@ public class RepoPersister { for (App app : apps) { packageNames.add(app.packageName); } - String[] projection = {Schema.AppTable.Cols.ROW_ID, Schema.AppTable.Cols.PACKAGE_NAME}; + String[] projection = {Schema.AppMetadataTable.Cols.ROW_ID, Schema.AppMetadataTable.Cols.PACKAGE_NAME}; List fromDb = TempAppProvider.Helper.findByPackageNames(context, packageNames, projection); Map ids = new HashMap<>(fromDb.size()); @@ -224,7 +224,7 @@ public class RepoPersister { * array. */ private boolean isAppInDatabase(App app) { - String[] fields = {Schema.AppTable.Cols.PACKAGE_NAME}; + String[] fields = {Schema.AppMetadataTable.Cols.PACKAGE_NAME}; App found = AppProvider.Helper.findByPackageName(context.getContentResolver(), app.packageName, fields); return found != null; } 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 dfef154c0..07eb59d30 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Schema.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Schema.java @@ -26,7 +26,7 @@ public interface Schema { } } - interface AppTable { + interface AppMetadataTable { String NAME = "fdroid_app"; @@ -102,7 +102,7 @@ public interface Schema { String _COUNT_DISTINCT = "countDistinct"; /** - * Foreign key to the {@link AppTable}. + * Foreign key to the {@link AppMetadataTable}. */ String APP_ID = "appId"; String ROW_ID = "rowid"; diff --git a/app/src/main/java/org/fdroid/fdroid/data/TempAppProvider.java b/app/src/main/java/org/fdroid/fdroid/data/TempAppProvider.java index e3907c480..d9d1f455b 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/TempAppProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/TempAppProvider.java @@ -12,7 +12,7 @@ import android.text.TextUtils; import java.util.List; import org.fdroid.fdroid.data.Schema.ApkTable; -import org.fdroid.fdroid.data.Schema.AppTable; +import org.fdroid.fdroid.data.Schema.AppMetadataTable; /** * This class does all of its operations in a temporary sqlite table. @@ -26,7 +26,7 @@ public class TempAppProvider extends AppProvider { private static final String PROVIDER_NAME = "TempAppProvider"; - static final String TABLE_TEMP_APP = "temp_" + AppTable.NAME; + static final String TABLE_TEMP_APP = "temp_" + AppMetadataTable.NAME; private static final String PATH_INIT = "init"; private static final String PATH_COMMIT = "commit"; @@ -165,10 +165,10 @@ public class TempAppProvider extends AppProvider { final SQLiteDatabase db = db(); ensureTempTableDetached(db); db.execSQL("ATTACH DATABASE ':memory:' AS " + DB); - db.execSQL("CREATE TABLE " + DB + "." + getTableName() + " AS SELECT * FROM main." + AppTable.NAME); - db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_id ON " + getTableName() + " (" + AppTable.Cols.PACKAGE_NAME + ");"); - db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_upstreamVercode ON " + getTableName() + " (" + AppTable.Cols.UPSTREAM_VERSION_CODE + ");"); - db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_compatible ON " + getTableName() + " (" + AppTable.Cols.IS_COMPATIBLE + ");"); + db.execSQL("CREATE TABLE " + DB + "." + getTableName() + " AS SELECT * FROM main." + AppMetadataTable.NAME); + db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_id ON " + getTableName() + " (" + AppMetadataTable.Cols.PACKAGE_NAME + ");"); + db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_upstreamVercode ON " + getTableName() + " (" + AppMetadataTable.Cols.UPSTREAM_VERSION_CODE + ");"); + db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_compatible ON " + getTableName() + " (" + AppMetadataTable.Cols.IS_COMPATIBLE + ");"); } private void commitTable() { @@ -179,8 +179,8 @@ public class TempAppProvider extends AppProvider { final String tempApp = DB + "." + TempAppProvider.TABLE_TEMP_APP; final String tempApk = DB + "." + TempApkProvider.TABLE_TEMP_APK; - db.execSQL("DELETE FROM " + AppTable.NAME + " WHERE 1"); - db.execSQL("INSERT INTO " + AppTable.NAME + " SELECT * FROM " + tempApp); + db.execSQL("DELETE FROM " + AppMetadataTable.NAME + " WHERE 1"); + db.execSQL("INSERT INTO " + AppMetadataTable.NAME + " SELECT * FROM " + tempApp); db.execSQL("DELETE FROM " + ApkTable.NAME + " WHERE 1"); db.execSQL("INSERT INTO " + ApkTable.NAME + " SELECT * FROM " + tempApk); diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java index 67e267288..3487ee72e 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java @@ -25,7 +25,7 @@ import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.App; -import org.fdroid.fdroid.data.Schema.AppTable; +import org.fdroid.fdroid.data.Schema.AppMetadataTable; import org.fdroid.fdroid.views.AppListAdapter; public abstract class AppListFragment extends ListFragment implements @@ -38,22 +38,22 @@ public abstract class AppListFragment extends ListFragment implements private static final int REQUEST_APPDETAILS = 0; private static final String[] APP_PROJECTION = { - AppTable.Cols._ID, // Required for cursor loader to work. - AppTable.Cols.PACKAGE_NAME, - AppTable.Cols.NAME, - AppTable.Cols.SUMMARY, - AppTable.Cols.IS_COMPATIBLE, - AppTable.Cols.LICENSE, - AppTable.Cols.ICON, - AppTable.Cols.ICON_URL, - AppTable.Cols.InstalledApp.VERSION_CODE, - AppTable.Cols.InstalledApp.VERSION_NAME, - AppTable.Cols.SuggestedApk.VERSION_NAME, - AppTable.Cols.SUGGESTED_VERSION_CODE, - AppTable.Cols.REQUIREMENTS, // Needed for filtering apps that require root. + AppMetadataTable.Cols._ID, // Required for cursor loader to work. + AppMetadataTable.Cols.PACKAGE_NAME, + AppMetadataTable.Cols.NAME, + AppMetadataTable.Cols.SUMMARY, + AppMetadataTable.Cols.IS_COMPATIBLE, + AppMetadataTable.Cols.LICENSE, + AppMetadataTable.Cols.ICON, + AppMetadataTable.Cols.ICON_URL, + AppMetadataTable.Cols.InstalledApp.VERSION_CODE, + AppMetadataTable.Cols.InstalledApp.VERSION_NAME, + AppMetadataTable.Cols.SuggestedApk.VERSION_NAME, + AppMetadataTable.Cols.SUGGESTED_VERSION_CODE, + AppMetadataTable.Cols.REQUIREMENTS, // Needed for filtering apps that require root. }; - private static final String APP_SORT = AppTable.Cols.NAME; + private static final String APP_SORT = AppMetadataTable.Cols.NAME; private AppListAdapter appAdapter; diff --git a/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java b/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java index 9c431146c..00de67ab5 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java +++ b/app/src/main/java/org/fdroid/fdroid/views/swap/SwapAppsView.java @@ -104,7 +104,7 @@ public class SwapAppsView extends ListView implements */ adapter = new AppListAdapter(getContext(), getContext().getContentResolver().query( - AppProvider.getRepoUri(repo), Schema.AppTable.Cols.ALL, null, null, null)); + AppProvider.getRepoUri(repo), Schema.AppMetadataTable.Cols.ALL, null, null, null)); setAdapter(adapter); @@ -194,7 +194,7 @@ public class SwapAppsView extends ListView implements ? AppProvider.getRepoUri(repo) : AppProvider.getSearchUri(repo, mCurrentFilterString); - return new CursorLoader(getActivity(), uri, Schema.AppTable.Cols.ALL, null, null, Schema.AppTable.Cols.NAME); + return new CursorLoader(getActivity(), uri, Schema.AppMetadataTable.Cols.ALL, null, null, Schema.AppMetadataTable.Cols.NAME); } @Override diff --git a/app/src/test/java/org/fdroid/fdroid/Assert.java b/app/src/test/java/org/fdroid/fdroid/Assert.java index 459a8f9ba..61f6fe223 100644 --- a/app/src/test/java/org/fdroid/fdroid/Assert.java +++ b/app/src/test/java/org/fdroid/fdroid/Assert.java @@ -12,7 +12,7 @@ import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.InstalledAppProvider; import org.fdroid.fdroid.data.Schema.ApkTable; -import org.fdroid.fdroid.data.Schema.AppTable; +import org.fdroid.fdroid.data.Schema.AppMetadataTable; import org.fdroid.fdroid.data.Schema.InstalledAppTable; import org.robolectric.shadows.ShadowContentResolver; @@ -183,14 +183,14 @@ public class Assert { public static App insertApp(Context context, String packageName, String name, ContentValues additionalValues) { ContentValues values = new ContentValues(); - values.put(AppTable.Cols.PACKAGE_NAME, packageName); - values.put(AppTable.Cols.NAME, name); + values.put(AppMetadataTable.Cols.PACKAGE_NAME, packageName); + values.put(AppMetadataTable.Cols.NAME, name); // Required fields (NOT NULL in the database). - values.put(AppTable.Cols.SUMMARY, "test summary"); - values.put(AppTable.Cols.DESCRIPTION, "test description"); - values.put(AppTable.Cols.LICENSE, "GPL?"); - values.put(AppTable.Cols.IS_COMPATIBLE, 1); + values.put(AppMetadataTable.Cols.SUMMARY, "test summary"); + values.put(AppMetadataTable.Cols.DESCRIPTION, "test description"); + values.put(AppMetadataTable.Cols.LICENSE, "GPL?"); + values.put(AppMetadataTable.Cols.IS_COMPATIBLE, 1); values.putAll(additionalValues); diff --git a/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java b/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java index f4cb5e01b..f6dd4995a 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java +++ b/app/src/test/java/org/fdroid/fdroid/data/AppProviderTest.java @@ -8,7 +8,7 @@ import android.net.Uri; import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.R; -import org.fdroid.fdroid.data.Schema.AppTable.Cols; +import org.fdroid.fdroid.data.Schema.AppMetadataTable.Cols; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java b/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java index 5534a72bd..a9a55bd8a 100644 --- a/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java +++ b/app/src/test/java/org/fdroid/fdroid/data/ProviderUriTests.java @@ -82,7 +82,7 @@ public class ProviderUriTests { @Test public void validAppProviderUris() { ShadowContentResolver.registerProvider(AppProvider.getAuthority(), new AppProvider()); - String[] projection = new String[] {Schema.AppTable.Cols._ID}; + String[] projection = new String[] {Schema.AppMetadataTable.Cols._ID}; assertValidUri(resolver, AppProvider.getContentUri(), "content://org.fdroid.fdroid.data.AppProvider", projection); assertValidUri(resolver, AppProvider.getSearchUri("'searching!'"), "content://org.fdroid.fdroid.data.AppProvider/search/'searching!'", projection); assertValidUri(resolver, AppProvider.getSearchUri("/"), "content://org.fdroid.fdroid.data.AppProvider/search/%2F", projection); @@ -102,7 +102,7 @@ public class ProviderUriTests { @Test public void validTempAppProviderUris() { ShadowContentResolver.registerProvider(TempAppProvider.getAuthority(), new TempAppProvider()); - String[] projection = new String[]{Schema.AppTable.Cols._ID}; + String[] projection = new String[]{Schema.AppMetadataTable.Cols._ID}; // Required so that the `assertValidUri` calls below will indeed have a real temp_fdroid_app // table to query.