From 60f5a1441c1bbd0808df2d0cbfdd3ee7c79dc99d Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 8 May 2014 05:52:29 +0930 Subject: [PATCH] Installed apps by application label by default, and sort order can be chosen. Also prevented crash due to lack of applicationLabel field. --- src/org/fdroid/fdroid/data/DBHelper.java | 18 ++++++++++-------- .../fdroid/data/InstalledAppProvider.java | 6 +++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/org/fdroid/fdroid/data/DBHelper.java b/src/org/fdroid/fdroid/data/DBHelper.java index 229900d4b..f0e8ab00d 100644 --- a/src/org/fdroid/fdroid/data/DBHelper.java +++ b/src/org/fdroid/fdroid/data/DBHelper.java @@ -97,7 +97,7 @@ public class DBHelper extends SQLiteOpenHelper { + InstalledAppProvider.DataColumns.APPLICATION_LABEL + " TEXT NOT NULL " + " );"; - private static final int DB_VERSION = 45; + private static final int DB_VERSION = 46; private Context context; @@ -250,12 +250,11 @@ public class DBHelper extends SQLiteOpenHelper { addLastUpdatedToRepo(db, oldVersion); renameRepoId(db, oldVersion); populateRepoNames(db, oldVersion); - upgradeInstalledApp(db, oldVersion); - if (oldVersion < 43) createInstalledApp(db); + addAppLabelToInstalledCache(db, oldVersion); } - /** + /** * Migrate repo list to new structure. (No way to change primary * key in sqlite - table must be recreated). */ @@ -400,11 +399,14 @@ public class DBHelper extends SQLiteOpenHelper { db.execSQL(CREATE_TABLE_INSTALLED_APP); } - private void upgradeInstalledApp(SQLiteDatabase db, int oldVersion) { + private void addAppLabelToInstalledCache(SQLiteDatabase db, int oldVersion) { if (oldVersion < 45) { - Log.i(TAG, "upgradeInstalledApp"); - // just wipe it out, so it'll get rebuilt from scratch - db.execSQL("DELETE FROM fdroid_installedApp;"); + Log.i(TAG, "Adding applicationLabel to installed app table. " + + "Turns out we will need to repopulate the cache after doing this, " + + "so just dropping and recreating the table (instead of altering and adding a column). " + + "This will force the entire cache to be rebuilt, including app names."); + db.execSQL("DROP TABLE fdroid_installedApp;"); + createInstalledApp(db); } } diff --git a/src/org/fdroid/fdroid/data/InstalledAppProvider.java b/src/org/fdroid/fdroid/data/InstalledAppProvider.java index 640a1948b..fea0abe00 100644 --- a/src/org/fdroid/fdroid/data/InstalledAppProvider.java +++ b/src/org/fdroid/fdroid/data/InstalledAppProvider.java @@ -118,6 +118,10 @@ public class InstalledAppProvider extends FDroidProvider { @Override public Cursor query(Uri uri, String[] projection, String customSelection, String[] selectionArgs, String sortOrder) { + if (sortOrder == null) { + sortOrder = DataColumns.APPLICATION_LABEL; + } + QuerySelection selection = new QuerySelection(customSelection, selectionArgs); switch (matcher.match(uri)) { case CODE_LIST: @@ -133,7 +137,7 @@ public class InstalledAppProvider extends FDroidProvider { throw new UnsupportedOperationException(message); } - Cursor cursor = read().query(getTableName(), projection, selection.getSelection(), selection.getArgs(), null, null, null); + Cursor cursor = read().query(getTableName(), projection, selection.getSelection(), selection.getArgs(), null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; }