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:
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user