Merge "Camera: Address device state listener delay" into udc-qpr-dev am: 41fc44e370

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

Change-Id: I78ba236e3c5a540c5728fec46309c8240382daa8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-06-28 17:18:33 +00:00
committed by Automerger Merge Worker

View File

@@ -67,6 +67,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -178,22 +179,20 @@ public final class CameraManager {
boolean folded = ArrayUtils.contains(mFoldedDeviceStates, state); boolean folded = ArrayUtils.contains(mFoldedDeviceStates, state);
mFoldedDeviceState = folded; mFoldedDeviceState = folded;
ArrayList<WeakReference<DeviceStateListener>> invalidListeners = new ArrayList<>(); Iterator<WeakReference<DeviceStateListener>> it = mDeviceStateListeners.iterator();
for (WeakReference<DeviceStateListener> listener : mDeviceStateListeners) { while(it.hasNext()) {
DeviceStateListener callback = listener.get(); DeviceStateListener callback = it.next().get();
if (callback != null) { if (callback != null) {
callback.onDeviceStateChanged(folded); callback.onDeviceStateChanged(folded);
} else { } else {
invalidListeners.add(listener); it.remove();
} }
} }
if (!invalidListeners.isEmpty()) {
mDeviceStateListeners.removeAll(invalidListeners);
}
} }
public synchronized void addDeviceStateListener(DeviceStateListener listener) { public synchronized void addDeviceStateListener(DeviceStateListener listener) {
listener.onDeviceStateChanged(mFoldedDeviceState); listener.onDeviceStateChanged(mFoldedDeviceState);
mDeviceStateListeners.removeIf(l -> l.get() == null);
mDeviceStateListeners.add(new WeakReference<>(listener)); mDeviceStateListeners.add(new WeakReference<>(listener));
} }