summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--InCallUI/src/com/android/incallui/InCallPresenter.java2
-rw-r--r--InCallUI/src/com/android/incallui/StatusBarNotifier.java21
2 files changed, 16 insertions, 7 deletions
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index bfb4a5019..80c47395f 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -94,7 +94,7 @@ public class InCallPresenter implements CallList.Listener {
mContactInfoCache = ContactInfoCache.getInstance(context);
- mStatusBarNotifier = new StatusBarNotifier(context, mContactInfoCache, mCallList);
+ mStatusBarNotifier = new StatusBarNotifier(context, mContactInfoCache);
addListener(mStatusBarNotifier);
mAudioModeProvider = audioModeProvider;
diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
index 89c9ff41e..6d9fd600c 100644
--- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java
+++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
@@ -96,8 +96,7 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener {
private Bitmap mSavedLargeIcon;
private String mSavedContentTitle;
- public StatusBarNotifier(Context context, ContactInfoCache contactInfoCache,
- CallList callList) {
+ public StatusBarNotifier(Context context, ContactInfoCache contactInfoCache) {
Preconditions.checkNotNull(context);
mContext = context;
@@ -254,12 +253,15 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener {
}
private void showNotification(final Call call, final boolean allowFullScreenIntent) {
+ final boolean isIncoming = (call.getState() == Call.State.INCOMING ||
+ call.getState() == Call.State.CALL_WAITING);
+
// we make a call to the contact info cache to query for supplemental data to what the
// call provides. This includes the contact name and photo.
// This callback will always get called immediately and synchronously with whatever data
// it has available, and may make a subsequent call later (same thread) if it had to
// call into the contacts provider for more data.
- mContactInfoCache.findInfo(call.getIdentification(), call.getState() == Call.State.INCOMING,
+ mContactInfoCache.findInfo(call.getIdentification(), isIncoming,
new ContactInfoCacheCallback() {
private boolean mAllowFullScreenIntent = allowFullScreenIntent;
@@ -457,12 +459,12 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener {
}
/**
- * Returns the message to use with the notificaiton.
+ * Returns the message to use with the notification.
*/
private int getContentString(Call call) {
int resId = R.string.notification_ongoing_call;
- if (call.getState() == Call.State.INCOMING) {
+ if (call.getState() == Call.State.INCOMING || call.getState() == Call.State.CALL_WAITING) {
resId = R.string.notification_incoming_call;
} else if (call.getState() == Call.State.ONHOLD) {
@@ -535,7 +537,14 @@ public class StatusBarNotifier implements InCallPresenter.InCallStateListener {
// TODO: there should be a cleaner way of avoiding this
// problem (see discussion in bug 3184149.)
- if (call.getState() == Call.State.CALL_WAITING) {
+ // If a call is onhold during an incoming call, the call actually comes in as
+ // INCOMING. For that case *and* traditional call-waiting, we want to
+ // cancel the notification.
+ boolean isCallWaiting = (call.getState() == Call.State.CALL_WAITING ||
+ (call.getState() == Call.State.INCOMING &&
+ CallList.getInstance().getBackgroundCall() != null));
+
+ if (isCallWaiting) {
Log.i(this, "updateInCallNotification: call-waiting! force relaunch...");
// Cancel the IN_CALL_NOTIFICATION immediately before
// (re)posting it; this seems to force the