Snap for 4821244 from 8c892903f8eac55db45cdbf232ec7c2bc697ff48 to pi-release

Change-Id: Ib5920f8b5e1cbb9012b5cbb82c6cd6123da4ca37
diff --git a/src/com/android/providers/contacts/DbModifierWithNotification.java b/src/com/android/providers/contacts/DbModifierWithNotification.java
index 0580339..852301d 100644
--- a/src/com/android/providers/contacts/DbModifierWithNotification.java
+++ b/src/com/android/providers/contacts/DbModifierWithNotification.java
@@ -167,7 +167,8 @@
         Set<String> 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 @@
             } 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 @@
             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 9f9ef00..d20b9b3 100644
--- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
+++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
@@ -21,8 +21,10 @@
 
 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 @@
         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);