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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user