diff --git a/opentasks-provider/src/main/java/org/dmfs/provider/tasks/TaskProvider.java b/opentasks-provider/src/main/java/org/dmfs/provider/tasks/TaskProvider.java index 27e7c8c15..22f1e555e 100644 --- a/opentasks-provider/src/main/java/org/dmfs/provider/tasks/TaskProvider.java +++ b/opentasks-provider/src/main/java/org/dmfs/provider/tasks/TaskProvider.java @@ -1013,6 +1013,7 @@ public int updateInTransaction(final SQLiteDatabase db, Uri uri, final ContentVa final boolean isSyncAdapter) { int count = 0; + boolean dataChanged = !TASK_LIST_SYNC_COLUMNS.containsAll(values.keySet()); switch (mUriMatcher.match(uri)) { case SYNCSTATE_ID: @@ -1097,7 +1098,7 @@ public int updateInTransaction(final SQLiteDatabase db, Uri uri, final ContentVa final TaskAdapter task = new CursorContentValuesTaskAdapter(cursor, cursor.getCount() > 1 ? new ContentValues(values) : values); mTaskProcessorChain.update(db, task, isSyncAdapter); - if (task.hasUpdates()) + if (dataChanged && task.hasUpdates()) { mChanged = true; } @@ -1109,7 +1110,7 @@ public int updateInTransaction(final SQLiteDatabase db, Uri uri, final ContentVa cursor.close(); } - if (count > 0) + if (dataChanged) { postNotifyUri(Instances.getContentUri(mAuthority)); postNotifyUri(Tasks.getContentUri(mAuthority)); @@ -1139,7 +1140,7 @@ public int updateInTransaction(final SQLiteDatabase db, Uri uri, final ContentVa } } - if (count > 0) + if (dataChanged) { postNotifyUri(Instances.getContentUri(mAuthority)); postNotifyUri(Tasks.getContentUri(mAuthority)); @@ -1213,7 +1214,7 @@ public int updateInTransaction(final SQLiteDatabase db, Uri uri, final ContentVa operation.run(getContext(), mAsyncHandler, uri, db, values); } - if (!TASK_LIST_SYNC_COLUMNS.containsAll(values.keySet())) + if (dataChanged) { // send notifications, because non-sync columns have been updated postNotifyUri(uri); @@ -1312,19 +1313,19 @@ public String getType(Uri uri) protected void onEndTransaction(boolean callerIsSyncAdapter) { super.onEndTransaction(callerIsSyncAdapter); - Intent providerChangedIntent = new Intent(Intent.ACTION_PROVIDER_CHANGED, TaskContract.getContentUri(mAuthority)); if (mChanged) { + Intent providerChangedIntent = new Intent(Intent.ACTION_PROVIDER_CHANGED, TaskContract.getContentUri(mAuthority)); updateNotifications(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + { + // for now we only notify our own package + // we'll have to figure out how to do this correctly on Android 8+, e.g. how is it done by CalendarProvider and ContactsProvider + providerChangedIntent.setPackage(getContext().getPackageName()); + } + getContext().sendBroadcast(providerChangedIntent); mChanged = false; } - if (Build.VERSION.SDK_INT >= 26) - { - // for now we only notify our own package - // we'll have to figure out how to do this correctly on Android 8+, e.g. how is it done by CalendarProvider and ContactsProvider - providerChangedIntent.setPackage(getContext().getPackageName()); - } - getContext().sendBroadcast(providerChangedIntent); if (Boolean.TRUE.equals(mStaleListCreated.get())) {