Merge "Add a lock for call read/write operations to avoid ConcurrentModificationException." into sc-qpr1-dev am: 6ba0239947 am: b037c05dbe

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15662454

Change-Id: Idab288af72e2fb6677241103e245ff9d1054dfae
This commit is contained in:
TreeHugger Robot
2021-08-31 22:40:30 +00:00
committed by Automerger Merge Worker

View File

@@ -23,6 +23,8 @@ import android.os.Build;
import android.os.Bundle;
import android.util.ArrayMap;
import com.android.internal.annotations.GuardedBy;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -115,6 +117,7 @@ public final class Phone {
public static final int SDK_VERSION_R = 30;
// A Map allows us to track each Call by its Telecom-specified call ID
@GuardedBy("mLock")
private final Map<String, Call> mCallByTelecomCallId = new ArrayMap<>();
// A List allows us to keep the Calls in a stable iteration order so that casually developed
@@ -154,7 +157,7 @@ public final class Phone {
return;
}
Call call = mCallByTelecomCallId.get(parcelableCall.getId());
Call call = getCallById(parcelableCall.getId());
if (call == null) {
call = new Call(this, parcelableCall.getId(), mInCallAdapter,
parcelableCall.getState(), mCallingPackage, mTargetSdkVersion);
@@ -191,14 +194,14 @@ public final class Phone {
if (mTargetSdkVersion < SDK_VERSION_R
&& parcelableCall.getState() == Call.STATE_AUDIO_PROCESSING) {
Log.i(this, "removing audio processing call during update for sdk compatibility");
Call call = mCallByTelecomCallId.get(parcelableCall.getId());
Call call = getCallById(parcelableCall.getId());
if (call != null) {
internalRemoveCall(call);
}
return;
}
Call call = mCallByTelecomCallId.get(parcelableCall.getId());
Call call = getCallById(parcelableCall.getId());
if (call != null) {
checkCallTree(parcelableCall);
call.internalUpdate(parcelableCall, mCallByTelecomCallId);
@@ -215,8 +218,14 @@ public final class Phone {
}
}
Call getCallById(String callId) {
synchronized (mLock) {
return mCallByTelecomCallId.get(callId);
}
}
final void internalSetPostDialWait(String telecomId, String remaining) {
Call call = mCallByTelecomCallId.get(telecomId);
Call call = getCallById(telecomId);
if (call != null) {
call.internalSetPostDialWait(remaining);
}
@@ -230,7 +239,7 @@ public final class Phone {
}
final Call internalGetCallByTelecomId(String telecomId) {
return mCallByTelecomCallId.get(telecomId);
return getCallById(telecomId);
}
final void internalBringToForeground(boolean showDialpad) {
@@ -249,35 +258,35 @@ public final class Phone {
}
final void internalOnConnectionEvent(String telecomId, String event, Bundle extras) {
Call call = mCallByTelecomCallId.get(telecomId);
Call call = getCallById(telecomId);
if (call != null) {
call.internalOnConnectionEvent(event, extras);
}
}
final void internalOnRttUpgradeRequest(String callId, int requestId) {
Call call = mCallByTelecomCallId.get(callId);
Call call = getCallById(callId);
if (call != null) {
call.internalOnRttUpgradeRequest(requestId);
}
}
final void internalOnRttInitiationFailure(String callId, int reason) {
Call call = mCallByTelecomCallId.get(callId);
Call call = getCallById(callId);
if (call != null) {
call.internalOnRttInitiationFailure(reason);
}
}
final void internalOnHandoverFailed(String callId, int error) {
Call call = mCallByTelecomCallId.get(callId);
Call call = getCallById(callId);
if (call != null) {
call.internalOnHandoverFailed(error);
}
}
final void internalOnHandoverComplete(String callId) {
Call call = mCallByTelecomCallId.get(callId);
Call call = getCallById(callId);
if (call != null) {
call.internalOnHandoverComplete();
}