summaryrefslogtreecommitdiff
path: root/java/com/android/incallui
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2017-10-04 16:48:55 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-10-04 16:48:55 +0000
commitbc07ed7f31845b0565990999e90510c90e8dad9b (patch)
treeade09fe638ed0dc2bf65bd64fa6d68a4e51a0b82 /java/com/android/incallui
parent69ff7c1717c363027a79a454da91e1ca59c1dd3e (diff)
parent5ee0b1e574ed93c7000e355e4a6b03fb9ed8aaba (diff)
Merge changes Ibf79b70e,Iab1415b0
* changes: Only show the most recent call type icon in the new call log, instead of the last 3. Make incoming and ongoing call notification foreground and highest priority.
Diffstat (limited to 'java/com/android/incallui')
-rw-r--r--java/com/android/incallui/NotificationBroadcastReceiver.java28
-rw-r--r--java/com/android/incallui/StatusBarNotifier.java40
-rw-r--r--java/com/android/incallui/call/TelecomAdapter.java22
3 files changed, 48 insertions, 42 deletions
diff --git a/java/com/android/incallui/NotificationBroadcastReceiver.java b/java/com/android/incallui/NotificationBroadcastReceiver.java
index f83f84dbb..52d01f5c4 100644
--- a/java/com/android/incallui/NotificationBroadcastReceiver.java
+++ b/java/com/android/incallui/NotificationBroadcastReceiver.java
@@ -72,19 +72,19 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
// TODO: Commands of this nature should exist in the CallList.
if (action.equals(ACTION_ANSWER_VIDEO_INCOMING_CALL)) {
- answerIncomingCall(context, VideoProfile.STATE_BIDIRECTIONAL);
+ answerIncomingCall(VideoProfile.STATE_BIDIRECTIONAL);
} else if (action.equals(ACTION_ANSWER_VOICE_INCOMING_CALL)) {
- answerIncomingCall(context, VideoProfile.STATE_AUDIO_ONLY);
+ answerIncomingCall(VideoProfile.STATE_AUDIO_ONLY);
} else if (action.equals(ACTION_DECLINE_INCOMING_CALL)) {
Logger.get(context)
.logImpression(DialerImpression.Type.REJECT_INCOMING_CALL_FROM_NOTIFICATION);
- declineIncomingCall(context);
+ declineIncomingCall();
} else if (action.equals(ACTION_HANG_UP_ONGOING_CALL)) {
- hangUpOngoingCall(context);
+ hangUpOngoingCall();
} else if (action.equals(ACTION_ACCEPT_VIDEO_UPGRADE_REQUEST)) {
acceptUpgradeRequest(context);
} else if (action.equals(ACTION_DECLINE_VIDEO_UPGRADE_REQUEST)) {
- declineUpgradeRequest(context);
+ declineUpgradeRequest();
} else if (action.equals(ACTION_PULL_EXTERNAL_CALL)) {
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
int notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1);
@@ -99,7 +99,7 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
private void acceptUpgradeRequest(Context context) {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList == null) {
- StatusBarNotifier.clearAllCallNotifications(context);
+ StatusBarNotifier.clearAllCallNotifications();
LogUtil.e("NotificationBroadcastReceiver.acceptUpgradeRequest", "call list is empty");
} else {
DialerCall call = callList.getVideoUpgradeRequestCall();
@@ -109,10 +109,10 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
}
}
- private void declineUpgradeRequest(Context context) {
+ private void declineUpgradeRequest() {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList == null) {
- StatusBarNotifier.clearAllCallNotifications(context);
+ StatusBarNotifier.clearAllCallNotifications();
LogUtil.e("NotificationBroadcastReceiver.declineUpgradeRequest", "call list is empty");
} else {
DialerCall call = callList.getVideoUpgradeRequestCall();
@@ -122,10 +122,10 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
}
}
- private void hangUpOngoingCall(Context context) {
+ private void hangUpOngoingCall() {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList == null) {
- StatusBarNotifier.clearAllCallNotifications(context);
+ StatusBarNotifier.clearAllCallNotifications();
LogUtil.e("NotificationBroadcastReceiver.hangUpOngoingCall", "call list is empty");
} else {
DialerCall call = callList.getOutgoingCall();
@@ -140,10 +140,10 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
}
}
- private void answerIncomingCall(Context context, int videoState) {
+ private void answerIncomingCall(int videoState) {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList == null) {
- StatusBarNotifier.clearAllCallNotifications(context);
+ StatusBarNotifier.clearAllCallNotifications();
LogUtil.e("NotificationBroadcastReceiver.answerIncomingCall", "call list is empty");
} else {
DialerCall call = callList.getIncomingCall();
@@ -155,10 +155,10 @@ public class NotificationBroadcastReceiver extends BroadcastReceiver {
}
}
- private void declineIncomingCall(Context context) {
+ private void declineIncomingCall() {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList == null) {
- StatusBarNotifier.clearAllCallNotifications(context);
+ StatusBarNotifier.clearAllCallNotifications();
LogUtil.e("NotificationBroadcastReceiver.declineIncomingCall", "call list is empty");
} else {
DialerCall call = callList.getIncomingCall();
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index becfad4ab..86ad9ffe5 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -28,7 +28,6 @@ import static com.android.incallui.NotificationBroadcastReceiver.ACTION_TURN_OFF
import static com.android.incallui.NotificationBroadcastReceiver.ACTION_TURN_ON_SPEAKER;
import android.Manifest;
-import android.app.ActivityManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
@@ -74,7 +73,6 @@ import com.android.dialer.enrichedcall.Session;
import com.android.dialer.lettertile.LetterTileDrawable;
import com.android.dialer.lettertile.LetterTileDrawable.ContactType;
import com.android.dialer.multimedia.MultimediaData;
-import com.android.dialer.notification.DialerNotificationManager;
import com.android.dialer.notification.NotificationChannelId;
import com.android.dialer.oem.MotorolaUtils;
import com.android.dialer.util.DrawableConverter;
@@ -86,12 +84,12 @@ import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCallListener;
+import com.android.incallui.call.TelecomAdapter;
import com.android.incallui.ringtone.DialerRingtoneManager;
import com.android.incallui.ringtone.InCallTonePlayer;
import com.android.incallui.ringtone.ToneGeneratorFactory;
import com.android.incallui.videotech.utils.SessionModificationState;
import java.util.List;
-import java.util.Locale;
import java.util.Objects;
/** This class adds Notifications to the status bar for the in-call experience. */
@@ -100,7 +98,6 @@ public class StatusBarNotifier
EnrichedCallManager.StateChangedListener,
AudioModeProvider.AudioModeListener {
- private static final String NOTIFICATION_TAG = "STATUS_BAR_NOTIFIER";
private static final int NOTIFICATION_ID = 1;
// Notification types
@@ -146,12 +143,12 @@ public class StatusBarNotifier
* Should only be called from a irrecoverable state where it is necessary to dismiss all
* notifications.
*/
- static void clearAllCallNotifications(Context context) {
+ static void clearAllCallNotifications() {
LogUtil.e(
"StatusBarNotifier.clearAllCallNotifications",
"something terrible happened, clear all InCall notifications");
- DialerNotificationManager.cancel(context, NOTIFICATION_TAG, NOTIFICATION_ID);
+ TelecomAdapter.getInstance().stopForegroundNotification();
}
private static int getWorkStringFromPersonalString(int resId) {
@@ -219,10 +216,9 @@ public class StatusBarNotifier
setStatusBarCallListener(null);
}
if (mCurrentNotification != NOTIFICATION_NONE) {
- LogUtil.i("StatusBarNotifier.cancelNotification", "cancel");
- DialerNotificationManager.cancel(mContext, NOTIFICATION_TAG, NOTIFICATION_ID);
+ TelecomAdapter.getInstance().stopForegroundNotification();
+ mCurrentNotification = NOTIFICATION_NONE;
}
- mCurrentNotification = NOTIFICATION_NONE;
}
/**
@@ -390,7 +386,7 @@ public class StatusBarNotifier
"Canceling old notification so this one can be noisy");
// Moving from a non-interuptive notification (or none) to a noisy one. Cancel the old
// notification (if there is one) so the fullScreenIntent or HUN will show
- DialerNotificationManager.cancel(mContext, NOTIFICATION_TAG, NOTIFICATION_ID);
+ TelecomAdapter.getInstance().stopForegroundNotification();
}
break;
case NOTIFICATION_INCOMING_CALL_QUIET:
@@ -404,6 +400,8 @@ public class StatusBarNotifier
builder.setColorized(true);
builder.setChannelId(NotificationChannelId.ONGOING_CALL);
}
+ // This will be ignored on O+ and handled by the channel
+ builder.setPriority(Notification.PRIORITY_MAX);
break;
default:
break;
@@ -414,8 +412,7 @@ public class StatusBarNotifier
builder.setSmallIcon(iconResId);
builder.setContentTitle(contentTitle);
builder.setLargeIcon(largeIcon);
- builder.setColor(
- mContext.getResources().getColor(R.color.dialer_theme_color, mContext.getTheme()));
+ builder.setColor(InCallPresenter.getInstance().getThemeColorManager().getPrimaryColor());
if (isVideoUpgradeRequest) {
builder.setUsesChronometer(false);
@@ -451,22 +448,9 @@ public class StatusBarNotifier
"StatusBarNotifier.buildAndSendNotification",
"displaying notification for " + notificationType);
- try {
- DialerNotificationManager.notify(mContext, NOTIFICATION_TAG, NOTIFICATION_ID, notification);
- } catch (RuntimeException e) {
- // TODO(b/34744003): Move the memory stats into silent feedback PSD.
- ActivityManager activityManager = mContext.getSystemService(ActivityManager.class);
- ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
- activityManager.getMemoryInfo(memoryInfo);
- throw new RuntimeException(
- String.format(
- Locale.US,
- "Error displaying notification with photo type: %d (low memory? %b, availMem: %d)",
- contactInfo.photoType,
- memoryInfo.lowMemory,
- memoryInfo.availMem),
- e);
- }
+ // If a notification exists, this will only update it.
+ TelecomAdapter.getInstance().startForegroundNotification(NOTIFICATION_ID, notification);
+
Trace.endSection();
call.getLatencyReport().onNotificationShown();
mCurrentNotification = notificationType;
diff --git a/java/com/android/incallui/call/TelecomAdapter.java b/java/com/android/incallui/call/TelecomAdapter.java
index 005278bff..0c0bbd473 100644
--- a/java/com/android/incallui/call/TelecomAdapter.java
+++ b/java/com/android/incallui/call/TelecomAdapter.java
@@ -16,12 +16,14 @@
package com.android.incallui.call;
+import android.app.Notification;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Looper;
import android.support.annotation.MainThread;
import android.support.annotation.VisibleForTesting;
import android.telecom.InCallService;
+import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import java.util.List;
@@ -167,4 +169,24 @@ public class TelecomAdapter implements InCallServiceListener {
}
return false;
}
+
+ /**
+ * Start a foreground notification. Calling it multiple times with the same id only updates the
+ * existing notification. Whoever called this function are responsible for calling {@link
+ * #stopForegroundNotification()} to remove the notification.
+ */
+ public void startForegroundNotification(int id, Notification notification) {
+ Assert.isNotNull(
+ mInCallService, "No inCallService available for starting foreground notification");
+ mInCallService.startForeground(id, notification);
+ }
+
+ /**
+ * Stop a started foreground notification. This does not stop {@code mInCallService} from running.
+ */
+ public void stopForegroundNotification() {
+ Assert.isNotNull(
+ mInCallService, "No inCallService available for stopping foreground notification");
+ mInCallService.stopForeground(true /*removeNotification*/);
+ }
}