summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java21
1 files changed, 16 insertions, 5 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
index 658d92cc7489..ff423c2c6e39 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
@@ -342,11 +342,22 @@ public class WindowAreaComponentImpl implements WindowAreaComponent,
mRearDisplayPresentationController);
DeviceStateRequest concurrentDisplayStateRequest = DeviceStateRequest.newBuilder(
mConcurrentDisplayState).build();
- mDeviceStateManager.requestState(
- concurrentDisplayStateRequest,
- mExecutor,
- deviceStateCallback
- );
+
+ try {
+ mDeviceStateManager.requestState(
+ concurrentDisplayStateRequest,
+ mExecutor,
+ deviceStateCallback
+ );
+ } catch (SecurityException e) {
+ // If a SecurityException occurs when invoking DeviceStateManager#requestState
+ // (e.g. if the caller is not in the foreground, or if it does not have the required
+ // permissions), we should first clean up our local state before re-throwing the
+ // SecurityException to the caller. Otherwise, subsequent attempts to
+ // startRearDisplayPresentationSession will always fail.
+ mRearDisplayPresentationController = null;
+ throw e;
+ }
}
}