Merge "Add a lock for call add/remove operations to avoid ConcurrentModificationException." am: 584003dd0d am: cb477fc498
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1768612 Change-Id: Icf9b0cbb36422f725a8808f771dca7a45df68e0d
This commit is contained in:
@@ -139,6 +139,8 @@ public final class Phone {
|
||||
*/
|
||||
private final int mTargetSdkVersion;
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
Phone(InCallAdapter adapter, String callingPackage, int targetSdkVersion) {
|
||||
mInCallAdapter = adapter;
|
||||
mCallingPackage = callingPackage;
|
||||
@@ -156,8 +158,12 @@ public final class Phone {
|
||||
if (call == null) {
|
||||
call = new Call(this, parcelableCall.getId(), mInCallAdapter,
|
||||
parcelableCall.getState(), mCallingPackage, mTargetSdkVersion);
|
||||
mCallByTelecomCallId.put(parcelableCall.getId(), call);
|
||||
mCalls.add(call);
|
||||
|
||||
synchronized (mLock) {
|
||||
mCallByTelecomCallId.put(parcelableCall.getId(), call);
|
||||
mCalls.add(call);
|
||||
}
|
||||
|
||||
checkCallTree(parcelableCall);
|
||||
call.internalUpdate(parcelableCall, mCallByTelecomCallId);
|
||||
fireCallAdded(call);
|
||||
@@ -169,8 +175,10 @@ public final class Phone {
|
||||
}
|
||||
|
||||
final void internalRemoveCall(Call call) {
|
||||
mCallByTelecomCallId.remove(call.internalGetCallId());
|
||||
mCalls.remove(call);
|
||||
synchronized (mLock) {
|
||||
mCallByTelecomCallId.remove(call.internalGetCallId());
|
||||
mCalls.remove(call);
|
||||
}
|
||||
|
||||
InCallService.VideoCall videoCall = call.getVideoCall();
|
||||
if (videoCall != null) {
|
||||
|
||||
Reference in New Issue
Block a user