From bdde162f56eb59b2e4aa83d41965121641da2a96 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Mon, 19 Dec 2016 12:56:07 +1100 Subject: [PATCH] Notify when new categories are available, old ones are no longer available. Whether a category is "available" or not is not a function of whether it is in the category table or not. Rather, it is a function of whether there are any active apps/apks which are in that category. Thus, don't notify after inserting a category (the notification was wrong anyway as it was trying to notify the AppProvider Uri instead of the ContentProvider one). Instead, do it after a repo update is complete. --- .../main/java/org/fdroid/fdroid/data/CategoryProvider.java | 6 ++++-- .../main/java/org/fdroid/fdroid/data/TempAppProvider.java | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/CategoryProvider.java b/app/src/main/java/org/fdroid/fdroid/data/CategoryProvider.java index 900237533..74e3209be 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/CategoryProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/CategoryProvider.java @@ -134,7 +134,7 @@ public class CategoryProvider extends FDroidProvider { MATCHER.addURI(getAuthority(), PATH_ALL_CATEGORIES, CODE_LIST); } - private static Uri getContentUri() { + static Uri getContentUri() { return Uri.parse("content://" + getAuthority()); } @@ -239,7 +239,9 @@ public class CategoryProvider extends FDroidProvider { @Override public Uri insert(@NonNull Uri uri, ContentValues values) { long rowId = db().insertOrThrow(getTableName(), null, values); - getContext().getContentResolver().notifyChange(AppProvider.getCanUpdateUri(), null); + // Don't try and notify listeners here, because it will instead happen when the TempAppProvider + // is committed (when the AppProvider and ApkProviders notify their listeners). There is no + // other time where categories get added (at time of writing) so this should be okay. return getCategoryIdUri(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 a1a339bda..296861008 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/TempAppProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/TempAppProvider.java @@ -253,6 +253,7 @@ public class TempAppProvider extends AppProvider { getContext().getContentResolver().notifyChange(AppProvider.getContentUri(), null); getContext().getContentResolver().notifyChange(ApkProvider.getContentUri(), null); + getContext().getContentResolver().notifyChange(CategoryProvider.getContentUri(), null); } finally { db.endTransaction(); db.execSQL("DETACH DATABASE " + DB); // Can't be done in a transaction.