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
This commit is contained in:
mincheli
2020-09-10 17:42:35 +08:00
parent 3276cbc1d0
commit c58ce9a867

View File

@@ -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);
mContext.registerReceiver(mScreenStateReceiver, intentFilter);
if (!mReceiverRegistered) {
mContext.registerReceiver(mScreenStateReceiver, intentFilter);
mReceiverRegistered = true;
}
} else {
disableAllWindowMagnifiers();
mContext.unregisterReceiver(mScreenStateReceiver);
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);