Send Intent when CallerInfoCache should be updated
The cache should be updated when:
- custom ringtone is set,
- send-to-voicemail is set,
- a contact is edited and the change is submitted
(discard shouldn't cause cache update)
- contacts are joined, or separated
Bug: 1735194
Change-Id: Icd4fea5fd09cc3adcffc5364705ab40e92f4e6e4
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 6de361d..3fbca54 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -21,6 +21,7 @@
import com.android.contacts.model.EntityDelta;
import com.android.contacts.model.EntityDeltaList;
import com.android.contacts.model.EntityModifier;
+import com.android.contacts.util.CallerInfoCacheUtils;
import com.google.android.collect.Lists;
import com.google.android.collect.Sets;
@@ -177,11 +178,15 @@
@Override
protected void onHandleIntent(Intent intent) {
+ // Call an appropriate method. If we're sure it affects how incoming phone calls are
+ // handled, then notify the fact to in-call screen.
String action = intent.getAction();
if (ACTION_NEW_RAW_CONTACT.equals(action)) {
createRawContact(intent);
+ CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
} else if (ACTION_SAVE_CONTACT.equals(action)) {
saveContact(intent);
+ CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
} else if (ACTION_CREATE_GROUP.equals(action)) {
createGroup(intent);
} else if (ACTION_RENAME_GROUP.equals(action)) {
@@ -198,12 +203,16 @@
clearPrimary(intent);
} else if (ACTION_DELETE_CONTACT.equals(action)) {
deleteContact(intent);
+ CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
} else if (ACTION_JOIN_CONTACTS.equals(action)) {
joinContacts(intent);
+ CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
} else if (ACTION_SET_SEND_TO_VOICEMAIL.equals(action)) {
setSendToVoicemail(intent);
+ CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
} else if (ACTION_SET_RINGTONE.equals(action)) {
setRingtone(intent);
+ CallerInfoCacheUtils.sendUpdateCallerInfoCacheIntent(this);
}
}
diff --git a/src/com/android/contacts/util/CallerInfoCacheUtils.java b/src/com/android/contacts/util/CallerInfoCacheUtils.java
new file mode 100644
index 0000000..9e53159
--- /dev/null
+++ b/src/com/android/contacts/util/CallerInfoCacheUtils.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * Utilities for managing CallerInfoCache.
+ *
+ * The cache lives in Phone package and is used as fallback storage when database lookup is slower
+ * than expected. It remembers some information necessary for responding to incoming calls
+ * (e.g. custom ringtone settings, send-to-voicemail).
+ *
+ * Even though the cache will be updated periodically, Contacts app can request the cache update
+ * via broadcast Intent. This class provides that mechanism, and possibly other misc utilities
+ * for the update mechanism.
+ */
+public final class CallerInfoCacheUtils {
+ private static final String UPDATE_CALLER_INFO_CACHE =
+ "com.android.phone.UPDATE_CALLER_INFO_CACHE";
+
+ private CallerInfoCacheUtils() {
+ }
+
+ /**
+ * Sends an Intent, notifying CallerInfo cache should be updated.
+ *
+ * Note: CallerInfo is *not* part of public API, and no guarantee is available around its
+ * specific behavior. In practice this will only be used by Phone package, but may change
+ * in the future.
+ *
+ * See also CallerInfoCache in Phone package for more information.
+ */
+ public static void sendUpdateCallerInfoCacheIntent(Context context) {
+ context.sendBroadcast(new Intent(UPDATE_CALLER_INFO_CACHE));
+ }
+}
\ No newline at end of file