From 8c892903f8eac55db45cdbf232ec7c2bc697ff48 Mon Sep 17 00:00:00 2001 From: Ta-wei Yen Date: Fri, 1 Jun 2018 16:03:01 -0700 Subject: Fix VoicemailContentProvider not notifying status changes In ag/3423779 the VoicemailContentProvider is changed to only notify changes that touches columns in the voicemail content table, and voicemail status changes are no longer notified. Change-Id: Iff71b4de7dc050a6928a73feafccee9699b61dec Fixes: 80102094 Test: tradefed ContactsProviderTests --- .../contacts/DbModifierWithNotification.java | 7 ++++--- .../providers/contacts/VoicemailProviderTest.java | 24 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/com/android/providers/contacts/DbModifierWithNotification.java b/src/com/android/providers/contacts/DbModifierWithNotification.java index 05803391..852301d3 100644 --- a/src/com/android/providers/contacts/DbModifierWithNotification.java +++ b/src/com/android/providers/contacts/DbModifierWithNotification.java @@ -167,7 +167,8 @@ public class DbModifierWithNotification implements DatabaseModifier { Set packagesModified = getModifiedPackages(whereClause, whereArgs); packagesModified.addAll(getModifiedPackages(values)); - boolean isVoicemail = packagesModified.size() != 0 && isUpdatingVoicemailColumns(values); + boolean isVoicemailContent = + packagesModified.size() != 0 && isUpdatingVoicemailColumns(values); boolean hasMarkedRead = false; if (mIsCallsTable) { @@ -177,7 +178,7 @@ public class DbModifierWithNotification implements DatabaseModifier { } else { updateLastModified(table, whereClause, whereArgs); } - if (isVoicemail) { + if (isVoicemailContent) { if (updateDirtyFlag(values, packagesModified)) { if (values.containsKey(Calls.IS_READ) && getAsBoolean(values, @@ -196,7 +197,7 @@ public class DbModifierWithNotification implements DatabaseModifier { return 0; } int count = mDb.update(table, values, whereClause, whereArgs); - if (count > 0 && isVoicemail) { + if (count > 0 && isVoicemailContent || Tables.VOICEMAIL_STATUS.equals(table)) { notifyVoicemailChange(mBaseUri, packagesModified); } if (count > 0 && mIsCallsTable) { diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java index 9f9ef002..d20b9b3c 100644 --- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java +++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java @@ -21,8 +21,10 @@ import static org.mockito.Mockito.verify; import android.content.ContentUris; import android.content.ContentValues; +import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; +import android.os.Handler; import android.os.ParcelFileDescriptor; import android.os.Process; import android.provider.CallLog; @@ -739,6 +741,28 @@ public class VoicemailProviderTest extends BaseVoicemailProviderTest { assertStoredValues(uri, values); } + public void testStatusUpdate_observerNotified() throws Exception { + Uri uri = insertTestStatusEntry(); + ContentValues values = getTestStatusValues(); + values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_NO_CONNECTION); + values.put(Status.NOTIFICATION_CHANNEL_STATE, + Status.NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING); + values.put(Status.SOURCE_TYPE, + "vvm_type_test2"); + Boolean[] observerTriggered = new Boolean[]{false}; + mResolver.registerContentObserver(Status.CONTENT_URI, true, + new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange, Uri uri) { + observerTriggered[0] = true; + } + }); + + mResolver.update(uri, values, null, null); + + assertTrue(observerTriggered[0]); + } + public void testStatusUpsert() throws Exception { ContentValues values = getTestStatusValues(); mResolver.insert(statusUri(), values); -- cgit v1.2.3