Merge "Register only one binder listener and keep a map of listener to executor." into tm-dev

This commit is contained in:
Xiaowen Lei
2022-03-01 17:24:25 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 19 deletions

View File

@@ -184,8 +184,17 @@ public class KeyguardManager {
}) })
@interface LockTypes {} @interface LockTypes {}
// TODO(b/220379118): register only one binder listener and keep a map of listener to executor. private final IKeyguardLockedStateListener mIKeyguardLockedStateListener =
private final ArrayMap<KeyguardLockedStateListener, IKeyguardLockedStateListener> new IKeyguardLockedStateListener.Stub() {
@Override
public void onKeyguardLockedStateChanged(boolean isKeyguardLocked) {
mKeyguardLockedStateListeners.forEach((listener, executor) -> {
executor.execute(
() -> listener.onKeyguardLockedStateChanged(isKeyguardLocked));
});
}
};
private final ArrayMap<KeyguardLockedStateListener, Executor>
mKeyguardLockedStateListeners = new ArrayMap<>(); mKeyguardLockedStateListeners = new ArrayMap<>();
/** /**
@@ -1102,17 +1111,12 @@ public class KeyguardManager {
public void addKeyguardLockedStateListener(@NonNull @CallbackExecutor Executor executor, public void addKeyguardLockedStateListener(@NonNull @CallbackExecutor Executor executor,
@NonNull KeyguardLockedStateListener listener) { @NonNull KeyguardLockedStateListener listener) {
synchronized (mKeyguardLockedStateListeners) { synchronized (mKeyguardLockedStateListeners) {
mKeyguardLockedStateListeners.put(listener, executor);
if (mKeyguardLockedStateListeners.size() > 1) {
return;
}
try { try {
final IKeyguardLockedStateListener innerListener = mWM.addKeyguardLockedStateListener(mIKeyguardLockedStateListener);
new IKeyguardLockedStateListener.Stub() {
@Override
public void onKeyguardLockedStateChanged(boolean isKeyguardLocked) {
executor.execute(
() -> listener.onKeyguardLockedStateChanged(isKeyguardLocked));
}
};
mWM.addKeyguardLockedStateListener(innerListener);
mKeyguardLockedStateListeners.put(listener, innerListener);
} catch (RemoteException e) { } catch (RemoteException e) {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }
@@ -1125,17 +1129,15 @@ public class KeyguardManager {
@RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE)
public void removeKeyguardLockedStateListener(@NonNull KeyguardLockedStateListener listener) { public void removeKeyguardLockedStateListener(@NonNull KeyguardLockedStateListener listener) {
synchronized (mKeyguardLockedStateListeners) { synchronized (mKeyguardLockedStateListeners) {
IKeyguardLockedStateListener innerListener = mKeyguardLockedStateListeners.get( mKeyguardLockedStateListeners.remove(listener);
listener); if (!mKeyguardLockedStateListeners.isEmpty()) {
if (innerListener == null) {
return; return;
} }
try { try {
mWM.removeKeyguardLockedStateListener(innerListener); mWM.removeKeyguardLockedStateListener(mIKeyguardLockedStateListener);
} catch (RemoteException e) { } catch (RemoteException e) {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }
mKeyguardLockedStateListeners.remove(listener);
} }
} }
} }

View File

@@ -3035,7 +3035,7 @@ public class WindowManagerService extends IWindowManager.Stub
@Override @Override
public void onKeyguardShowingAndNotOccludedChanged() { public void onKeyguardShowingAndNotOccludedChanged() {
mH.sendEmptyMessage(H.RECOMPUTE_FOCUS); mH.sendEmptyMessage(H.RECOMPUTE_FOCUS);
dispatchKeyguardLockedStateState(); dispatchKeyguardLockedState();
} }
@Override @Override
@@ -3249,7 +3249,7 @@ public class WindowManagerService extends IWindowManager.Stub
+ " permission required to read keyguard visibility"); + " permission required to read keyguard visibility");
} }
private void dispatchKeyguardLockedStateState() { private void dispatchKeyguardLockedState() {
mH.post(() -> { mH.post(() -> {
final boolean isKeyguardLocked = mPolicy.isKeyguardShowing(); final boolean isKeyguardLocked = mPolicy.isKeyguardShowing();
if (mDispatchedKeyguardLockedState == isKeyguardLocked) { if (mDispatchedKeyguardLockedState == isKeyguardLocked) {