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

Commit c58ce9a8 authored by mincheli's avatar mincheli
Browse files

Prevents the broadcastReceiver unregistered when it's not registerd

WindowMagnificationManager monitors the screen state.
And when requestConnection(false) is called before
requestConnection(true), the broadcastReceiver would be unregistered
even it is not registered yet. And it may lead to crash.

Bug: 167804868
Test: atest WindowMagnificationManagerTest
Change-Id: Ib61b00afe79d21a5e944affe8c5492aef90f0399
parent 3276cbc1
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ public class WindowMagnificationManager implements
    private SparseArray<WindowMagnifier> mWindowMagnifiers = new SparseArray<>();
    private int mUserId;

    private boolean mReceiverRegistered = false;
    @VisibleForTesting
    protected final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
        @Override
@@ -150,10 +151,16 @@ public class WindowMagnificationManager implements
            }
            if (connect) {
                final IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
                if (!mReceiverRegistered) {
                    mContext.registerReceiver(mScreenStateReceiver, intentFilter);
                    mReceiverRegistered = true;
                }
            } else {
                disableAllWindowMagnifiers();
                if (mReceiverRegistered) {
                    mContext.unregisterReceiver(mScreenStateReceiver);
                    mReceiverRegistered = false;
                }
            }
        }

@@ -240,6 +247,9 @@ public class WindowMagnificationManager implements
    void enableWindowMagnification(int displayId, float scale, float centerX, float centerY,
            @Nullable Runnable endCallback) {
        synchronized (mLock) {
            if (mConnectionWrapper == null) {
                return;
            }
            WindowMagnifier magnifier = mWindowMagnifiers.get(displayId);
            if (magnifier == null) {
                magnifier = createWindowMagnifier(displayId);
@@ -269,7 +279,7 @@ public class WindowMagnificationManager implements
    void disableWindowMagnification(int displayId, boolean clear, Runnable endCallback) {
        synchronized (mLock) {
            WindowMagnifier magnifier = mWindowMagnifiers.get(displayId);
            if (magnifier == null) {
            if (magnifier == null || mConnectionWrapper == null) {
                return;
            }
            magnifier.disableWindowMagnificationInternal(endCallback);