Merge "Fix unexpected crashed in IncomingCallNotifier"
diff --git a/src/com/android/server/telecom/ui/IncomingCallNotifier.java b/src/com/android/server/telecom/ui/IncomingCallNotifier.java
index 6e203aa..edea89b 100644
--- a/src/com/android/server/telecom/ui/IncomingCallNotifier.java
+++ b/src/com/android/server/telecom/ui/IncomingCallNotifier.java
@@ -41,6 +41,7 @@
import com.android.server.telecom.TelecomBroadcastIntentProcessor;
import com.android.server.telecom.components.TelecomBroadcastReceiver;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -68,7 +69,7 @@
public static final int NOTIFICATION_INCOMING_CALL = 1;
@VisibleForTesting
public static final String NOTIFICATION_TAG = IncomingCallNotifier.class.getSimpleName();
-
+ private final Object mLock = new Object();
public final Call.ListenerBase mCallListener = new Call.ListenerBase() {
@Override
@@ -104,8 +105,10 @@
@Override
public void onCallAdded(Call call) {
- if (!mCalls.contains(call)) {
- mCalls.add(call);
+ synchronized (mLock) {
+ if (!mCalls.contains(call)) {
+ mCalls.add(call);
+ }
}
updateIncomingCall();
@@ -113,10 +116,11 @@
@Override
public void onCallRemoved(Call call) {
- if (mCalls.contains(call)) {
- mCalls.remove(call);
+ synchronized (mLock) {
+ if (mCalls.contains(call)) {
+ mCalls.remove(call);
+ }
}
-
updateIncomingCall();
}
@@ -130,11 +134,16 @@
* UI.
*/
private void updateIncomingCall() {
- Optional<Call> incomingCallOp = mCalls.stream()
- .filter(call -> call.isSelfManaged() && call.isIncoming() &&
- call.getState() == CallState.RINGING &&
- call.getHandoverState() == HandoverState.HANDOVER_NONE)
- .findFirst();
+ Optional<Call> incomingCallOp;
+ synchronized (mLock) {
+ incomingCallOp = mCalls.stream()
+ .filter(Objects::nonNull)
+ .filter(call -> call.isSelfManaged() && call.isIncoming() &&
+ call.getState() == CallState.RINGING &&
+ call.getHandoverState() == HandoverState.HANDOVER_NONE)
+ .findFirst();
+ }
+
Call incomingCall = incomingCallOp.orElse(null);
if (incomingCall != null && mCallsManagerProxy != null &&
!mCallsManagerProxy.hasUnholdableCallsForOtherConnectionService(