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.
This commit is contained in:
parent
2837a235b4
commit
626f55b43b
@ -416,7 +416,7 @@ public class UpdateService extends IntentService {
|
|||||||
private void performUpdateNotification() {
|
private void performUpdateNotification() {
|
||||||
Cursor cursor = getContentResolver().query(
|
Cursor cursor = getContentResolver().query(
|
||||||
AppProvider.getCanUpdateUri(),
|
AppProvider.getCanUpdateUri(),
|
||||||
Schema.AppTable.Cols.ALL,
|
Schema.AppMetadataTable.Cols.ALL,
|
||||||
null, null, null);
|
null, null, null);
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
if (cursor.getCount() > 0) {
|
if (cursor.getCount() > 0) {
|
||||||
@ -462,7 +462,7 @@ public class UpdateService extends IntentService {
|
|||||||
private void autoDownloadUpdates() {
|
private void autoDownloadUpdates() {
|
||||||
Cursor cursor = getContentResolver().query(
|
Cursor cursor = getContentResolver().query(
|
||||||
AppProvider.getCanUpdateUri(),
|
AppProvider.getCanUpdateUri(),
|
||||||
Schema.AppTable.Cols.ALL,
|
Schema.AppMetadataTable.Cols.ALL,
|
||||||
null, null, null);
|
null, null, null);
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
|
@ -10,7 +10,7 @@ import android.util.Log;
|
|||||||
|
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
import org.fdroid.fdroid.data.Schema.ApkTable;
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable.Cols;
|
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 org.fdroid.fdroid.data.Schema.RepoTable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -213,7 +213,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
static {
|
static {
|
||||||
REPO_FIELDS.put(Cols.Repo.VERSION, RepoTable.Cols.VERSION);
|
REPO_FIELDS.put(Cols.Repo.VERSION, RepoTable.Cols.VERSION);
|
||||||
REPO_FIELDS.put(Cols.Repo.ADDRESS, RepoTable.Cols.ADDRESS);
|
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_REPO + "/#", CODE_REPO);
|
||||||
MATCHER.addURI(getAuthority(), PATH_APK + "/#/*", CODE_SINGLE);
|
MATCHER.addURI(getAuthority(), PATH_APK + "/#/*", CODE_SINGLE);
|
||||||
@ -320,7 +320,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected String getAppTableName() {
|
protected String getAppTableName() {
|
||||||
return AppTable.NAME;
|
return AppMetadataTable.NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -343,7 +343,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
final String app = getAppTableName();
|
final String app = getAppTableName();
|
||||||
|
|
||||||
return apk + " AS apk " +
|
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
|
@Override
|
||||||
@ -427,7 +427,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private QuerySelection queryRepoApps(long repoId, String packageNames) {
|
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) {
|
protected QuerySelection queryApks(String apkKeys) {
|
||||||
@ -467,7 +467,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getAppIdFromPackageNameQuery() {
|
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
|
@Override
|
||||||
|
@ -33,7 +33,7 @@ import java.util.jar.JarFile;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
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<App>, Parcelable {
|
public class App extends ValueObject implements Comparable<App>, Parcelable {
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@ import org.fdroid.fdroid.R;
|
|||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
import org.fdroid.fdroid.data.Schema.ApkTable;
|
||||||
import org.fdroid.fdroid.data.Schema.AppPrefsTable;
|
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.AppTable.Cols;
|
import org.fdroid.fdroid.data.Schema.AppMetadataTable.Cols;
|
||||||
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
|
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
|
||||||
import org.fdroid.fdroid.data.Schema.RepoTable;
|
import org.fdroid.fdroid.data.Schema.RepoTable;
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ public class AppProvider extends FDroidProvider {
|
|||||||
static final class UpgradeHelper {
|
static final class UpgradeHelper {
|
||||||
|
|
||||||
public static void updateIconUrls(Context context, SQLiteDatabase db) {
|
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
|
@Override
|
||||||
protected String getTableName() {
|
protected String getTableName() {
|
||||||
return AppTable.NAME;
|
return AppMetadataTable.NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getApkTableName() {
|
protected String getApkTableName() {
|
||||||
|
@ -12,7 +12,7 @@ import org.fdroid.fdroid.R;
|
|||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
import org.fdroid.fdroid.data.Schema.ApkTable;
|
||||||
import org.fdroid.fdroid.data.Schema.AppPrefsTable;
|
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.InstalledAppTable;
|
||||||
import org.fdroid.fdroid.data.Schema.RepoTable;
|
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 + ")"
|
+ "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, "
|
+ AppMetadataTable.Cols.PACKAGE_NAME + " text not null, "
|
||||||
+ AppTable.Cols.NAME + " text not null, "
|
+ AppMetadataTable.Cols.NAME + " text not null, "
|
||||||
+ AppTable.Cols.SUMMARY + " text not null, "
|
+ AppMetadataTable.Cols.SUMMARY + " text not null, "
|
||||||
+ AppTable.Cols.ICON + " text, "
|
+ AppMetadataTable.Cols.ICON + " text, "
|
||||||
+ AppTable.Cols.DESCRIPTION + " text not null, "
|
+ AppMetadataTable.Cols.DESCRIPTION + " text not null, "
|
||||||
+ AppTable.Cols.LICENSE + " text not null, "
|
+ AppMetadataTable.Cols.LICENSE + " text not null, "
|
||||||
+ AppTable.Cols.AUTHOR + " text, "
|
+ AppMetadataTable.Cols.AUTHOR + " text, "
|
||||||
+ AppTable.Cols.EMAIL + " text, "
|
+ AppMetadataTable.Cols.EMAIL + " text, "
|
||||||
+ AppTable.Cols.WEB_URL + " text, "
|
+ AppMetadataTable.Cols.WEB_URL + " text, "
|
||||||
+ AppTable.Cols.TRACKER_URL + " text, "
|
+ AppMetadataTable.Cols.TRACKER_URL + " text, "
|
||||||
+ AppTable.Cols.SOURCE_URL + " text, "
|
+ AppMetadataTable.Cols.SOURCE_URL + " text, "
|
||||||
+ AppTable.Cols.CHANGELOG_URL + " text, "
|
+ AppMetadataTable.Cols.CHANGELOG_URL + " text, "
|
||||||
+ AppTable.Cols.SUGGESTED_VERSION_CODE + " text,"
|
+ AppMetadataTable.Cols.SUGGESTED_VERSION_CODE + " text,"
|
||||||
+ AppTable.Cols.UPSTREAM_VERSION_NAME + " text,"
|
+ AppMetadataTable.Cols.UPSTREAM_VERSION_NAME + " text,"
|
||||||
+ AppTable.Cols.UPSTREAM_VERSION_CODE + " integer,"
|
+ AppMetadataTable.Cols.UPSTREAM_VERSION_CODE + " integer,"
|
||||||
+ AppTable.Cols.ANTI_FEATURES + " string,"
|
+ AppMetadataTable.Cols.ANTI_FEATURES + " string,"
|
||||||
+ AppTable.Cols.DONATE_URL + " string,"
|
+ AppMetadataTable.Cols.DONATE_URL + " string,"
|
||||||
+ AppTable.Cols.BITCOIN_ADDR + " string,"
|
+ AppMetadataTable.Cols.BITCOIN_ADDR + " string,"
|
||||||
+ AppTable.Cols.LITECOIN_ADDR + " string,"
|
+ AppMetadataTable.Cols.LITECOIN_ADDR + " string,"
|
||||||
+ AppTable.Cols.FLATTR_ID + " string,"
|
+ AppMetadataTable.Cols.FLATTR_ID + " string,"
|
||||||
+ AppTable.Cols.REQUIREMENTS + " string,"
|
+ AppMetadataTable.Cols.REQUIREMENTS + " string,"
|
||||||
+ AppTable.Cols.CATEGORIES + " string,"
|
+ AppMetadataTable.Cols.CATEGORIES + " string,"
|
||||||
+ AppTable.Cols.ADDED + " string,"
|
+ AppMetadataTable.Cols.ADDED + " string,"
|
||||||
+ AppTable.Cols.LAST_UPDATED + " string,"
|
+ AppMetadataTable.Cols.LAST_UPDATED + " string,"
|
||||||
+ AppTable.Cols.IS_COMPATIBLE + " int not null,"
|
+ AppMetadataTable.Cols.IS_COMPATIBLE + " int not null,"
|
||||||
+ AppTable.Cols.ICON_URL + " text, "
|
+ AppMetadataTable.Cols.ICON_URL + " text, "
|
||||||
+ AppTable.Cols.ICON_URL_LARGE + " text, "
|
+ AppMetadataTable.Cols.ICON_URL_LARGE + " text, "
|
||||||
+ "primary key(" + AppTable.Cols.PACKAGE_NAME + "));";
|
+ "primary key(" + AppMetadataTable.Cols.PACKAGE_NAME + "));";
|
||||||
|
|
||||||
private static final String CREATE_TABLE_APP_PREFS = "CREATE TABLE " + AppPrefsTable.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_THIS_UPDATE + ", "
|
||||||
+ AppPrefsTable.Cols.IGNORE_ALL_UPDATES
|
+ AppPrefsTable.Cols.IGNORE_ALL_UPDATES
|
||||||
+ ") SELECT "
|
+ ") SELECT "
|
||||||
+ AppTable.Cols.PACKAGE_NAME + ", "
|
+ AppMetadataTable.Cols.PACKAGE_NAME + ", "
|
||||||
+ "ignoreThisUpdate, "
|
+ "ignoreThisUpdate, "
|
||||||
+ "ignoreAllUpdates "
|
+ "ignoreAllUpdates "
|
||||||
+ "FROM " + AppTable.NAME + " "
|
+ "FROM " + AppMetadataTable.NAME + " "
|
||||||
+ "WHERE ignoreThisUpdate > 0 OR ignoreAllUpdates > 0"
|
+ "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
|
// Hard coded the string literal ".id" as ApkTable.Cols.PACKAGE_NAME was removed in
|
||||||
// the subsequent migration (DB_VERSION 59)
|
// the subsequent migration (DB_VERSION 59)
|
||||||
final String update = "UPDATE " + ApkTable.NAME + " SET " + ApkTable.Cols.APP_ID + " = ( " +
|
final String update = "UPDATE " + ApkTable.NAME + " SET " + ApkTable.Cols.APP_ID + " = ( " +
|
||||||
"SELECT app." + AppTable.Cols.ROW_ID + " " +
|
"SELECT app." + AppMetadataTable.Cols.ROW_ID + " " +
|
||||||
"FROM " + AppTable.NAME + " AS app " +
|
"FROM " + AppMetadataTable.NAME + " AS app " +
|
||||||
"WHERE " + ApkTable.NAME + ".id = app." + AppTable.Cols.PACKAGE_NAME + ")";
|
"WHERE " + ApkTable.NAME + ".id = app." + AppMetadataTable.Cols.PACKAGE_NAME + ")";
|
||||||
Log.i(TAG, "Updating foreign key from " + ApkTable.NAME + " to " + AppTable.NAME + " to use numeric foreign key.");
|
Log.i(TAG, "Updating foreign key from " + ApkTable.NAME + " to " + AppMetadataTable.NAME + " to use numeric foreign key.");
|
||||||
Utils.debugLog(TAG, update);
|
Utils.debugLog(TAG, update);
|
||||||
db.execSQL(update);
|
db.execSQL(update);
|
||||||
ensureIndexes(db);
|
ensureIndexes(db);
|
||||||
@ -624,19 +624,19 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addChangelogToApp(SQLiteDatabase db, int oldVersion) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
Utils.debugLog(TAG, "Adding " + AppTable.Cols.CHANGELOG_URL + " column to " + AppTable.NAME);
|
Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.CHANGELOG_URL + " column to " + AppMetadataTable.NAME);
|
||||||
db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.CHANGELOG_URL + " text");
|
db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.CHANGELOG_URL + " text");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addIconUrlLargeToApp(SQLiteDatabase db, int oldVersion) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
Utils.debugLog(TAG, "Adding " + AppTable.Cols.ICON_URL_LARGE + " columns to " + AppTable.NAME);
|
Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.ICON_URL_LARGE + " columns to " + AppMetadataTable.NAME);
|
||||||
db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.ICON_URL_LARGE + " text");
|
db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.ICON_URL_LARGE + " text");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateIconUrlLarge(SQLiteDatabase db, int oldVersion) {
|
private void updateIconUrlLarge(SQLiteDatabase db, int oldVersion) {
|
||||||
@ -652,13 +652,13 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
if (oldVersion >= 53) {
|
if (oldVersion >= 53) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!columnExists(db, AppTable.NAME, AppTable.Cols.AUTHOR)) {
|
if (!columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.AUTHOR)) {
|
||||||
Utils.debugLog(TAG, "Adding " + AppTable.Cols.AUTHOR + " column to " + AppTable.NAME);
|
Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.AUTHOR + " column to " + AppMetadataTable.NAME);
|
||||||
db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.AUTHOR + " text");
|
db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.AUTHOR + " text");
|
||||||
}
|
}
|
||||||
if (!columnExists(db, AppTable.NAME, AppTable.Cols.EMAIL)) {
|
if (!columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.EMAIL)) {
|
||||||
Utils.debugLog(TAG, "Adding " + AppTable.Cols.EMAIL + " column to " + AppTable.NAME);
|
Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.EMAIL + " column to " + AppMetadataTable.NAME);
|
||||||
db.execSQL("alter table " + AppTable.NAME + " add column " + AppTable.Cols.EMAIL + " text");
|
db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + AppMetadataTable.Cols.EMAIL + " text");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -704,7 +704,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
.putBoolean("triedEmptyUpdate", false)
|
.putBoolean("triedEmptyUpdate", false)
|
||||||
.apply();
|
.apply();
|
||||||
|
|
||||||
db.execSQL("DROP TABLE " + AppTable.NAME);
|
db.execSQL("DROP TABLE " + AppMetadataTable.NAME);
|
||||||
db.execSQL("DROP TABLE " + ApkTable.NAME);
|
db.execSQL("DROP TABLE " + ApkTable.NAME);
|
||||||
db.execSQL(CREATE_TABLE_APP);
|
db.execSQL(CREATE_TABLE_APP);
|
||||||
db.execSQL(CREATE_TABLE_APK);
|
db.execSQL(CREATE_TABLE_APK);
|
||||||
@ -723,7 +723,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
context.getSharedPreferences("FDroid", Context.MODE_PRIVATE).edit()
|
context.getSharedPreferences("FDroid", Context.MODE_PRIVATE).edit()
|
||||||
.putBoolean("triedEmptyUpdate", false).apply();
|
.putBoolean("triedEmptyUpdate", false).apply();
|
||||||
db.execSQL("drop table " + AppTable.NAME);
|
db.execSQL("drop table " + AppMetadataTable.NAME);
|
||||||
db.execSQL("drop table " + ApkTable.NAME);
|
db.execSQL("drop table " + ApkTable.NAME);
|
||||||
clearRepoEtags(db);
|
clearRepoEtags(db);
|
||||||
db.execSQL(CREATE_TABLE_APP);
|
db.execSQL(CREATE_TABLE_APP);
|
||||||
@ -732,10 +732,10 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void ensureIndexes(SQLiteDatabase db) {
|
private static void ensureIndexes(SQLiteDatabase db) {
|
||||||
Utils.debugLog(TAG, "Ensuring indexes exist for " + AppTable.NAME);
|
Utils.debugLog(TAG, "Ensuring indexes exist for " + AppMetadataTable.NAME);
|
||||||
db.execSQL("CREATE INDEX IF NOT EXISTS app_id on " + AppTable.NAME + " (" + AppTable.Cols.PACKAGE_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 " + AppTable.NAME + " (" + AppTable.Cols.NAME + ");"); // Used for sorting most lists
|
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 " + AppTable.NAME + " (" + AppTable.Cols.ADDED + ");"); // Used for sorting "newly added"
|
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);
|
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 + ");");
|
db.execSQL("CREATE INDEX IF NOT EXISTS apk_vercode on " + ApkTable.NAME + " (" + ApkTable.Cols.VERSION_CODE + ");");
|
||||||
|
@ -143,7 +143,7 @@ public class RepoPersister {
|
|||||||
for (App app : apps) {
|
for (App app : apps) {
|
||||||
packageNames.add(app.packageName);
|
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<App> fromDb = TempAppProvider.Helper.findByPackageNames(context, packageNames, projection);
|
List<App> fromDb = TempAppProvider.Helper.findByPackageNames(context, packageNames, projection);
|
||||||
|
|
||||||
Map<String, Long> ids = new HashMap<>(fromDb.size());
|
Map<String, Long> ids = new HashMap<>(fromDb.size());
|
||||||
@ -224,7 +224,7 @@ public class RepoPersister {
|
|||||||
* array.
|
* array.
|
||||||
*/
|
*/
|
||||||
private boolean isAppInDatabase(App app) {
|
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);
|
App found = AppProvider.Helper.findByPackageName(context.getContentResolver(), app.packageName, fields);
|
||||||
return found != null;
|
return found != null;
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ public interface Schema {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface AppTable {
|
interface AppMetadataTable {
|
||||||
|
|
||||||
String NAME = "fdroid_app";
|
String NAME = "fdroid_app";
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ public interface Schema {
|
|||||||
String _COUNT_DISTINCT = "countDistinct";
|
String _COUNT_DISTINCT = "countDistinct";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Foreign key to the {@link AppTable}.
|
* Foreign key to the {@link AppMetadataTable}.
|
||||||
*/
|
*/
|
||||||
String APP_ID = "appId";
|
String APP_ID = "appId";
|
||||||
String ROW_ID = "rowid";
|
String ROW_ID = "rowid";
|
||||||
|
@ -12,7 +12,7 @@ import android.text.TextUtils;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
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.
|
* 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";
|
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_INIT = "init";
|
||||||
private static final String PATH_COMMIT = "commit";
|
private static final String PATH_COMMIT = "commit";
|
||||||
@ -165,10 +165,10 @@ public class TempAppProvider extends AppProvider {
|
|||||||
final SQLiteDatabase db = db();
|
final SQLiteDatabase db = db();
|
||||||
ensureTempTableDetached(db);
|
ensureTempTableDetached(db);
|
||||||
db.execSQL("ATTACH DATABASE ':memory:' AS " + DB);
|
db.execSQL("ATTACH DATABASE ':memory:' AS " + DB);
|
||||||
db.execSQL("CREATE TABLE " + DB + "." + getTableName() + " AS SELECT * FROM main." + AppTable.NAME);
|
db.execSQL("CREATE TABLE " + DB + "." + getTableName() + " AS SELECT * FROM main." + AppMetadataTable.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_id ON " + getTableName() + " (" + AppMetadataTable.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_upstreamVercode ON " + getTableName() + " (" + AppMetadataTable.Cols.UPSTREAM_VERSION_CODE + ");");
|
||||||
db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_compatible ON " + getTableName() + " (" + AppTable.Cols.IS_COMPATIBLE + ");");
|
db.execSQL("CREATE INDEX IF NOT EXISTS " + DB + ".app_compatible ON " + getTableName() + " (" + AppMetadataTable.Cols.IS_COMPATIBLE + ");");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void commitTable() {
|
private void commitTable() {
|
||||||
@ -179,8 +179,8 @@ public class TempAppProvider extends AppProvider {
|
|||||||
final String tempApp = DB + "." + TempAppProvider.TABLE_TEMP_APP;
|
final String tempApp = DB + "." + TempAppProvider.TABLE_TEMP_APP;
|
||||||
final String tempApk = DB + "." + TempApkProvider.TABLE_TEMP_APK;
|
final String tempApk = DB + "." + TempApkProvider.TABLE_TEMP_APK;
|
||||||
|
|
||||||
db.execSQL("DELETE FROM " + AppTable.NAME + " WHERE 1");
|
db.execSQL("DELETE FROM " + AppMetadataTable.NAME + " WHERE 1");
|
||||||
db.execSQL("INSERT INTO " + AppTable.NAME + " SELECT * FROM " + tempApp);
|
db.execSQL("INSERT INTO " + AppMetadataTable.NAME + " SELECT * FROM " + tempApp);
|
||||||
|
|
||||||
db.execSQL("DELETE FROM " + ApkTable.NAME + " WHERE 1");
|
db.execSQL("DELETE FROM " + ApkTable.NAME + " WHERE 1");
|
||||||
db.execSQL("INSERT INTO " + ApkTable.NAME + " SELECT * FROM " + tempApk);
|
db.execSQL("INSERT INTO " + ApkTable.NAME + " SELECT * FROM " + tempApk);
|
||||||
|
@ -25,7 +25,7 @@ import org.fdroid.fdroid.R;
|
|||||||
import org.fdroid.fdroid.UpdateService;
|
import org.fdroid.fdroid.UpdateService;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.data.App;
|
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;
|
import org.fdroid.fdroid.views.AppListAdapter;
|
||||||
|
|
||||||
public abstract class AppListFragment extends ListFragment implements
|
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 int REQUEST_APPDETAILS = 0;
|
||||||
|
|
||||||
private static final String[] APP_PROJECTION = {
|
private static final String[] APP_PROJECTION = {
|
||||||
AppTable.Cols._ID, // Required for cursor loader to work.
|
AppMetadataTable.Cols._ID, // Required for cursor loader to work.
|
||||||
AppTable.Cols.PACKAGE_NAME,
|
AppMetadataTable.Cols.PACKAGE_NAME,
|
||||||
AppTable.Cols.NAME,
|
AppMetadataTable.Cols.NAME,
|
||||||
AppTable.Cols.SUMMARY,
|
AppMetadataTable.Cols.SUMMARY,
|
||||||
AppTable.Cols.IS_COMPATIBLE,
|
AppMetadataTable.Cols.IS_COMPATIBLE,
|
||||||
AppTable.Cols.LICENSE,
|
AppMetadataTable.Cols.LICENSE,
|
||||||
AppTable.Cols.ICON,
|
AppMetadataTable.Cols.ICON,
|
||||||
AppTable.Cols.ICON_URL,
|
AppMetadataTable.Cols.ICON_URL,
|
||||||
AppTable.Cols.InstalledApp.VERSION_CODE,
|
AppMetadataTable.Cols.InstalledApp.VERSION_CODE,
|
||||||
AppTable.Cols.InstalledApp.VERSION_NAME,
|
AppMetadataTable.Cols.InstalledApp.VERSION_NAME,
|
||||||
AppTable.Cols.SuggestedApk.VERSION_NAME,
|
AppMetadataTable.Cols.SuggestedApk.VERSION_NAME,
|
||||||
AppTable.Cols.SUGGESTED_VERSION_CODE,
|
AppMetadataTable.Cols.SUGGESTED_VERSION_CODE,
|
||||||
AppTable.Cols.REQUIREMENTS, // Needed for filtering apps that require root.
|
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;
|
private AppListAdapter appAdapter;
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public class SwapAppsView extends ListView implements
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
adapter = new AppListAdapter(getContext(), getContext().getContentResolver().query(
|
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);
|
setAdapter(adapter);
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ public class SwapAppsView extends ListView implements
|
|||||||
? AppProvider.getRepoUri(repo)
|
? AppProvider.getRepoUri(repo)
|
||||||
: AppProvider.getSearchUri(repo, mCurrentFilterString);
|
: 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
|
@Override
|
||||||
|
@ -12,7 +12,7 @@ import org.fdroid.fdroid.data.App;
|
|||||||
import org.fdroid.fdroid.data.AppProvider;
|
import org.fdroid.fdroid.data.AppProvider;
|
||||||
import org.fdroid.fdroid.data.InstalledAppProvider;
|
import org.fdroid.fdroid.data.InstalledAppProvider;
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
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.fdroid.fdroid.data.Schema.InstalledAppTable;
|
||||||
import org.robolectric.shadows.ShadowContentResolver;
|
import org.robolectric.shadows.ShadowContentResolver;
|
||||||
|
|
||||||
@ -183,14 +183,14 @@ public class Assert {
|
|||||||
public static App insertApp(Context context, String packageName, String name, ContentValues additionalValues) {
|
public static App insertApp(Context context, String packageName, String name, ContentValues additionalValues) {
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(AppTable.Cols.PACKAGE_NAME, packageName);
|
values.put(AppMetadataTable.Cols.PACKAGE_NAME, packageName);
|
||||||
values.put(AppTable.Cols.NAME, name);
|
values.put(AppMetadataTable.Cols.NAME, name);
|
||||||
|
|
||||||
// Required fields (NOT NULL in the database).
|
// Required fields (NOT NULL in the database).
|
||||||
values.put(AppTable.Cols.SUMMARY, "test summary");
|
values.put(AppMetadataTable.Cols.SUMMARY, "test summary");
|
||||||
values.put(AppTable.Cols.DESCRIPTION, "test description");
|
values.put(AppMetadataTable.Cols.DESCRIPTION, "test description");
|
||||||
values.put(AppTable.Cols.LICENSE, "GPL?");
|
values.put(AppMetadataTable.Cols.LICENSE, "GPL?");
|
||||||
values.put(AppTable.Cols.IS_COMPATIBLE, 1);
|
values.put(AppMetadataTable.Cols.IS_COMPATIBLE, 1);
|
||||||
|
|
||||||
values.putAll(additionalValues);
|
values.putAll(additionalValues);
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import android.net.Uri;
|
|||||||
|
|
||||||
import org.fdroid.fdroid.BuildConfig;
|
import org.fdroid.fdroid.BuildConfig;
|
||||||
import org.fdroid.fdroid.R;
|
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.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
@ -82,7 +82,7 @@ public class ProviderUriTests {
|
|||||||
@Test
|
@Test
|
||||||
public void validAppProviderUris() {
|
public void validAppProviderUris() {
|
||||||
ShadowContentResolver.registerProvider(AppProvider.getAuthority(), new AppProvider());
|
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.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("'searching!'"), "content://org.fdroid.fdroid.data.AppProvider/search/'searching!'", projection);
|
||||||
assertValidUri(resolver, AppProvider.getSearchUri("/"), "content://org.fdroid.fdroid.data.AppProvider/search/%2F", projection);
|
assertValidUri(resolver, AppProvider.getSearchUri("/"), "content://org.fdroid.fdroid.data.AppProvider/search/%2F", projection);
|
||||||
@ -102,7 +102,7 @@ public class ProviderUriTests {
|
|||||||
@Test
|
@Test
|
||||||
public void validTempAppProviderUris() {
|
public void validTempAppProviderUris() {
|
||||||
ShadowContentResolver.registerProvider(TempAppProvider.getAuthority(), new TempAppProvider());
|
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
|
// Required so that the `assertValidUri` calls below will indeed have a real temp_fdroid_app
|
||||||
// table to query.
|
// table to query.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user