aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTa-wei Yen <twyen@google.com>2018-06-04 12:23:35 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-06-04 12:23:35 -0700
commit8469a0114856c5aae2b7ccc8116714780ff5a47c (patch)
tree29ef3ddff4694603720ece73b4550427feb84351
parent71544f6fb6a1e2a1e86d9e55a840e6eed703b345 (diff)
parent8c892903f8eac55db45cdbf232ec7c2bc697ff48 (diff)
downloadContactsProvider-8469a0114856c5aae2b7ccc8116714780ff5a47c.tar.gz
Fix VoicemailContentProvider not notifying status changes
am: 8c892903f8 Change-Id: I40e893a2f8dae202db1aa5d093bfb204d1cc98db
-rw-r--r--src/com/android/providers/contacts/DbModifierWithNotification.java7
-rw-r--r--tests/src/com/android/providers/contacts/VoicemailProviderTest.java24
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<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 @@ 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);