Merge "Fix concurrent modification crash" into main
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
index 3063aed..77f3706 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -54,13 +54,13 @@
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import com.android.systemui.util.Assert;
+import com.android.systemui.util.CopyOnLoopListenerSet;
+import com.android.systemui.util.IListenerSet;
import dagger.Lazy;
import kotlinx.coroutines.ExperimentalCoroutinesApi;
-import java.util.ArrayList;
-
import javax.inject.Inject;
/**
@@ -69,7 +69,7 @@
@ExperimentalCoroutinesApi @SysUISingleton
public final class DozeServiceHost implements DozeHost {
private static final String TAG = "DozeServiceHost";
- private final ArrayList<Callback> mCallbacks = new ArrayList<>();
+ private final IListenerSet<Callback> mCallbacks = new CopyOnLoopListenerSet<>();
private final DozeLog mDozeLog;
private final PowerManager mPowerManager;
private boolean mAnimateWakeup;
@@ -178,8 +178,8 @@
*/
public void fireSideFpsAcquisitionStarted() {
Assert.isMainThread();
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onSideFingerprintAcquisitionStarted();
+ for (Callback callback : mCallbacks) {
+ callback.onSideFingerprintAcquisitionStarted();
}
}
@@ -211,7 +211,7 @@
@Override
public void addCallback(@NonNull Callback callback) {
Assert.isMainThread();
- mCallbacks.add(callback);
+ mCallbacks.addIfAbsent(callback);
}
@Override