From 13424a9cb5247848d786bf9a93c53e46ca4e7bad Mon Sep 17 00:00:00 2001 From: Peiyong Lin Date: Wed, 2 Jun 2021 02:38:03 +0000 Subject: [PATCH] Use CopyOnWriteArrayList in RecordingController. Previously there's nothing preventing recording callback to be removed when it is called. This creates cocurrent problems and would crashes system ui. This patch replaces the ArrayList with CopyOnWriteArrayList to avoid this issue. Bug: b/189216310 Test: test by triggering screen record in quick settings Test: test by quickly toggling screen record Change-Id: I6e82f92689b45c92cdad6a811e3e5ddc96a10530 --- .../android/systemui/screenrecord/RecordingController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java index 7ca82774f7374..060d7b1a8ab88 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java @@ -33,7 +33,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.statusbar.policy.CallbackController; -import java.util.ArrayList; +import java.util.concurrent.CopyOnWriteArrayList; import javax.inject.Inject; @@ -58,7 +58,8 @@ public class RecordingController "com.android.systemui.screenrecord.UPDATE_STATE"; protected static final String EXTRA_STATE = "extra_state"; - private ArrayList mListeners = new ArrayList<>(); + private CopyOnWriteArrayList mListeners = + new CopyOnWriteArrayList<>(); @VisibleForTesting protected final BroadcastReceiver mUserChangeReceiver = new BroadcastReceiver() {