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 int mTargetSdkVersion;
|
||||||
|
|
||||||
|
private final Object mLock = new Object();
|
||||||
|
|
||||||
Phone(InCallAdapter adapter, String callingPackage, int targetSdkVersion) {
|
Phone(InCallAdapter adapter, String callingPackage, int targetSdkVersion) {
|
||||||
mInCallAdapter = adapter;
|
mInCallAdapter = adapter;
|
||||||
mCallingPackage = callingPackage;
|
mCallingPackage = callingPackage;
|
||||||
@@ -156,8 +158,12 @@ public final class Phone {
|
|||||||
if (call == null) {
|
if (call == null) {
|
||||||
call = new Call(this, parcelableCall.getId(), mInCallAdapter,
|
call = new Call(this, parcelableCall.getId(), mInCallAdapter,
|
||||||
parcelableCall.getState(), mCallingPackage, mTargetSdkVersion);
|
parcelableCall.getState(), mCallingPackage, mTargetSdkVersion);
|
||||||
mCallByTelecomCallId.put(parcelableCall.getId(), call);
|
|
||||||
mCalls.add(call);
|
synchronized (mLock) {
|
||||||
|
mCallByTelecomCallId.put(parcelableCall.getId(), call);
|
||||||
|
mCalls.add(call);
|
||||||
|
}
|
||||||
|
|
||||||
checkCallTree(parcelableCall);
|
checkCallTree(parcelableCall);
|
||||||
call.internalUpdate(parcelableCall, mCallByTelecomCallId);
|
call.internalUpdate(parcelableCall, mCallByTelecomCallId);
|
||||||
fireCallAdded(call);
|
fireCallAdded(call);
|
||||||
@@ -169,8 +175,10 @@ public final class Phone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final void internalRemoveCall(Call call) {
|
final void internalRemoveCall(Call call) {
|
||||||
mCallByTelecomCallId.remove(call.internalGetCallId());
|
synchronized (mLock) {
|
||||||
mCalls.remove(call);
|
mCallByTelecomCallId.remove(call.internalGetCallId());
|
||||||
|
mCalls.remove(call);
|
||||||
|
}
|
||||||
|
|
||||||
InCallService.VideoCall videoCall = call.getVideoCall();
|
InCallService.VideoCall videoCall = call.getVideoCall();
|
||||||
if (videoCall != null) {
|
if (videoCall != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user