diff --git a/src/org/fdroid/fdroid/AppListManager.java b/src/org/fdroid/fdroid/AppListManager.java index f2c3d2ea7..e79fa1a84 100644 --- a/src/org/fdroid/fdroid/AppListManager.java +++ b/src/org/fdroid/fdroid/AppListManager.java @@ -88,17 +88,17 @@ public class AppListManager { // Populate the category list with the real categories, and the // locally generated meta-categories for "All", "What's New" and // "Recently Updated"... - categoryAll = fdroidActivity.getString(R.string.category_all); - categoryWhatsNew = fdroidActivity.getString(R.string.category_whatsnew); - categoryRecentlyUpdated = fdroidActivity.getString(R.string.category_recentlyupdated); + categoryAll = fdroidActivity + .getString(R.string.category_all); + categoryWhatsNew = fdroidActivity + .getString(R.string.category_whatsnew); + categoryRecentlyUpdated = fdroidActivity + .getString(R.string.category_recentlyupdated); categories.add(categoryWhatsNew); categories.add(categoryRecentlyUpdated); categories.add(categoryAll); - - for (String s : db.getCategories()) { - categories.add(s); - } + categories.addAll(db.getCategories()); if (currentCategory == null) currentCategory = categoryWhatsNew; diff --git a/src/org/fdroid/fdroid/DB.java b/src/org/fdroid/fdroid/DB.java index 28f99e24f..a542a4b3b 100644 --- a/src/org/fdroid/fdroid/DB.java +++ b/src/org/fdroid/fdroid/DB.java @@ -97,7 +97,7 @@ public class DB { + "antiFeatures string," + "donateURL string," + "bitcoinAddr string," + "litecoinAddr string," + "flattrID string," + "requirements string," - + "category string," + "added string," + + "categories string," + "added string," + "lastUpdated string," + "compatible int not null," + "ignoreAllUpdates int not null," + "ignoreThisUpdate int not null," @@ -111,13 +111,13 @@ public class DB { icon = null; id = "unknown"; license = "Unknown"; - category = "Uncategorized"; detail_trackerURL = null; detail_sourceURL = null; detail_donateURL = null; detail_bitcoinAddr = null; detail_litecoinAddr = null; detail_webURL = null; + categories = null; antiFeatures = null; requirements = null; hasUpdates = false; @@ -149,7 +149,6 @@ public class DB { public String detail_description; public String license; - public String category; // Null when !detail_Populated public String detail_webURL; @@ -189,6 +188,10 @@ public class DB { public int installedVerCode; public boolean userInstalled; + // List of categories (as defined in the metadata + // documentation) or null if there aren't any. + public CommaSeparatedList categories; + // List of anti-features (as defined in the metadata // documentation) or null if there aren't any. public CommaSeparatedList antiFeatures; @@ -440,12 +443,11 @@ public class DB { public String lastetag; // last etag we updated from, null forces update } - private final int DBVersion = 27; + private final int DBVersion = 28; private static void createAppApk(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_APP); db.execSQL("create index app_id on " + TABLE_APP + " (id);"); - db.execSQL("create index app_category on " + TABLE_APP + " (category);"); db.execSQL(CREATE_TABLE_APK); db.execSQL("create index apk_vercode on " + TABLE_APK + " (vercode);"); db.execSQL("create index apk_id on " + TABLE_APK + " (id);"); @@ -628,13 +630,19 @@ public class DB { List result = new ArrayList(); Cursor c = null; try { - c = db.query(true, TABLE_APP, new String[] { "category" }, - null, null, null, null, "category", null); + c = db.query(true, TABLE_APP, new String[] { "categories" }, + null, null, null, null, "categories", null); c.moveToFirst(); while (!c.isAfterLast()) { - String s = c.getString(0); - if (s != null) { - result.add(s); + Log.d("FDroid", "== CATEGS "+c.getString(0)); + CommaSeparatedList categories = CommaSeparatedList + .make(c.getString(0)); + for (String category : categories) { + Log.d("FDroid", "== CATEG "+category); + if (!result.contains(category)) { + Log.d("FDroid", "== CATEG ADDED "+category); + result.add(category); + } } c.moveToNext(); } @@ -760,7 +768,7 @@ public class DB { try { String cols[] = new String[] { "antiFeatures", "requirements", - "id", "name", "summary", "icon", "license", "category", + "categories", "id", "name", "summary", "icon", "license", "curVersion", "curVercode", "added", "lastUpdated", "compatible", "ignoreAllUpdates", "ignoreThisUpdate" }; c = db.query(TABLE_APP, cols, null, null, null, null, null); @@ -770,12 +778,12 @@ public class DB { App app = new App(); app.antiFeatures = DB.CommaSeparatedList.make(c.getString(0)); app.requirements = DB.CommaSeparatedList.make(c.getString(1)); - app.id = c.getString(2); - app.name = c.getString(3); - app.summary = c.getString(4); - app.icon = c.getString(5); - app.license = c.getString(6); - app.category = c.getString(7); + app.categories = DB.CommaSeparatedList.make(c.getString(2)); + app.id = c.getString(3); + app.name = c.getString(4); + app.summary = c.getString(5); + app.icon = c.getString(6); + app.license = c.getString(7); app.curVersion = c.getString(8); app.curVercode = c.getInt(9); String sAdded = c.getString(10); @@ -983,6 +991,15 @@ public class DB { splitter.setString(value); return splitter.iterator(); } + + public boolean contains(String v) { + Iterator it = iterator(); + while (it.hasNext()) { + if (it.next().equals(v)) + return true; + } + return false; + } } private List updateApps = null; @@ -1128,7 +1145,6 @@ public class DB { values.put("icon", upapp.icon); values.put("description", upapp.detail_description); values.put("license", upapp.license); - values.put("category", upapp.category); values.put("webURL", upapp.detail_webURL); values.put("trackerURL", upapp.detail_trackerURL); values.put("sourceURL", upapp.detail_sourceURL); @@ -1144,6 +1160,7 @@ public class DB { .format(upapp.lastUpdated)); values.put("curVersion", upapp.curVersion); values.put("curVercode", upapp.curVercode); + values.put("categories", CommaSeparatedList.str(upapp.categories)); values.put("antiFeatures", CommaSeparatedList.str(upapp.antiFeatures)); values.put("requirements", CommaSeparatedList.str(upapp.requirements)); values.put("compatible", upapp.compatible ? 1 : 0); diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java index f29c7d752..d691f93eb 100644 --- a/src/org/fdroid/fdroid/RepoXMLHandler.java +++ b/src/org/fdroid/fdroid/RepoXMLHandler.java @@ -195,8 +195,6 @@ public class RepoXMLHandler extends DefaultHandler { curapp.summary = str; } else if (curel.equals("license")) { curapp.license = str; - } else if (curel.equals("category")) { - curapp.category = str; } else if (curel.equals("source")) { curapp.detail_sourceURL = str; } else if (curel.equals("donate")) { @@ -233,6 +231,8 @@ public class RepoXMLHandler extends DefaultHandler { } catch (NumberFormatException ex) { curapp.curVercode = -1; } + } else if (curel.equals("category")) { + curapp.categories = DB.CommaSeparatedList.make(str); } else if (curel.equals("antifeatures")) { curapp.antiFeatures = DB.CommaSeparatedList.make(str); } else if (curel.equals("requirements")) {