Loading core/java/android/app/KeyguardManager.java +19 −17 Original line number Diff line number Diff line Loading @@ -184,8 +184,17 @@ public class KeyguardManager { }) @interface LockTypes {} // TODO(b/220379118): register only one binder listener and keep a map of listener to executor. private final ArrayMap<KeyguardLockedStateListener, IKeyguardLockedStateListener> private final IKeyguardLockedStateListener mIKeyguardLockedStateListener = 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<>(); /** Loading Loading @@ -1102,17 +1111,12 @@ public class KeyguardManager { public void addKeyguardLockedStateListener(@NonNull @CallbackExecutor Executor executor, @NonNull KeyguardLockedStateListener listener) { synchronized (mKeyguardLockedStateListeners) { try { final IKeyguardLockedStateListener innerListener = new IKeyguardLockedStateListener.Stub() { @Override public void onKeyguardLockedStateChanged(boolean isKeyguardLocked) { executor.execute( () -> listener.onKeyguardLockedStateChanged(isKeyguardLocked)); mKeyguardLockedStateListeners.put(listener, executor); if (mKeyguardLockedStateListeners.size() > 1) { return; } }; mWM.addKeyguardLockedStateListener(innerListener); mKeyguardLockedStateListeners.put(listener, innerListener); try { mWM.addKeyguardLockedStateListener(mIKeyguardLockedStateListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading @@ -1125,17 +1129,15 @@ public class KeyguardManager { @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) public void removeKeyguardLockedStateListener(@NonNull KeyguardLockedStateListener listener) { synchronized (mKeyguardLockedStateListeners) { IKeyguardLockedStateListener innerListener = mKeyguardLockedStateListeners.get( listener); if (innerListener == null) { mKeyguardLockedStateListeners.remove(listener); if (!mKeyguardLockedStateListeners.isEmpty()) { return; } try { mWM.removeKeyguardLockedStateListener(innerListener); mWM.removeKeyguardLockedStateListener(mIKeyguardLockedStateListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } mKeyguardLockedStateListeners.remove(listener); } } } services/core/java/com/android/server/wm/WindowManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -3035,7 +3035,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void onKeyguardShowingAndNotOccludedChanged() { mH.sendEmptyMessage(H.RECOMPUTE_FOCUS); dispatchKeyguardLockedStateState(); dispatchKeyguardLockedState(); } @Override Loading Loading @@ -3249,7 +3249,7 @@ public class WindowManagerService extends IWindowManager.Stub + " permission required to read keyguard visibility"); } private void dispatchKeyguardLockedStateState() { private void dispatchKeyguardLockedState() { mH.post(() -> { final boolean isKeyguardLocked = mPolicy.isKeyguardShowing(); if (mDispatchedKeyguardLockedState == isKeyguardLocked) { Loading Loading
core/java/android/app/KeyguardManager.java +19 −17 Original line number Diff line number Diff line Loading @@ -184,8 +184,17 @@ public class KeyguardManager { }) @interface LockTypes {} // TODO(b/220379118): register only one binder listener and keep a map of listener to executor. private final ArrayMap<KeyguardLockedStateListener, IKeyguardLockedStateListener> private final IKeyguardLockedStateListener mIKeyguardLockedStateListener = 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<>(); /** Loading Loading @@ -1102,17 +1111,12 @@ public class KeyguardManager { public void addKeyguardLockedStateListener(@NonNull @CallbackExecutor Executor executor, @NonNull KeyguardLockedStateListener listener) { synchronized (mKeyguardLockedStateListeners) { try { final IKeyguardLockedStateListener innerListener = new IKeyguardLockedStateListener.Stub() { @Override public void onKeyguardLockedStateChanged(boolean isKeyguardLocked) { executor.execute( () -> listener.onKeyguardLockedStateChanged(isKeyguardLocked)); mKeyguardLockedStateListeners.put(listener, executor); if (mKeyguardLockedStateListeners.size() > 1) { return; } }; mWM.addKeyguardLockedStateListener(innerListener); mKeyguardLockedStateListeners.put(listener, innerListener); try { mWM.addKeyguardLockedStateListener(mIKeyguardLockedStateListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading @@ -1125,17 +1129,15 @@ public class KeyguardManager { @RequiresPermission(Manifest.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE) public void removeKeyguardLockedStateListener(@NonNull KeyguardLockedStateListener listener) { synchronized (mKeyguardLockedStateListeners) { IKeyguardLockedStateListener innerListener = mKeyguardLockedStateListeners.get( listener); if (innerListener == null) { mKeyguardLockedStateListeners.remove(listener); if (!mKeyguardLockedStateListeners.isEmpty()) { return; } try { mWM.removeKeyguardLockedStateListener(innerListener); mWM.removeKeyguardLockedStateListener(mIKeyguardLockedStateListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } mKeyguardLockedStateListeners.remove(listener); } } }
services/core/java/com/android/server/wm/WindowManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -3035,7 +3035,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void onKeyguardShowingAndNotOccludedChanged() { mH.sendEmptyMessage(H.RECOMPUTE_FOCUS); dispatchKeyguardLockedStateState(); dispatchKeyguardLockedState(); } @Override Loading Loading @@ -3249,7 +3249,7 @@ public class WindowManagerService extends IWindowManager.Stub + " permission required to read keyguard visibility"); } private void dispatchKeyguardLockedStateState() { private void dispatchKeyguardLockedState() { mH.post(() -> { final boolean isKeyguardLocked = mPolicy.isKeyguardShowing(); if (mDispatchedKeyguardLockedState == isKeyguardLocked) { Loading