Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6504cbee authored by Xiaowen Lei's avatar Xiaowen Lei Committed by Android (Google) Code Review
Browse files

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

parents c4293b56 87598eb1
Loading
Loading
Loading
Loading
+19 −17
Original line number Diff line number Diff line
@@ -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<>();

    /**
@@ -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();
            }
@@ -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);
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -3035,7 +3035,7 @@ public class WindowManagerService extends IWindowManager.Stub
    @Override
    public void onKeyguardShowingAndNotOccludedChanged() {
        mH.sendEmptyMessage(H.RECOMPUTE_FOCUS);
        dispatchKeyguardLockedStateState();
        dispatchKeyguardLockedState();
    }

    @Override
@@ -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) {