summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java7
-rw-r--r--services/foldables/devicestateprovider/tests/src/com/android/server/policy/FoldableDeviceStateProviderTest.java14
2 files changed, 19 insertions, 2 deletions
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
index 4c487a70390d..ba7297790dc9 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
@@ -367,8 +367,11 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider,
// TODO(b/312397262): consider virtual displays cases
synchronized (mLock) {
if (mIsDualDisplayBlockingEnabled
- && !mExternalDisplaysConnected.get(displayId, false)
- && mDisplayManager.getDisplay(displayId).getType() == TYPE_EXTERNAL) {
+ && !mExternalDisplaysConnected.get(displayId, false)) {
+ var display = mDisplayManager.getDisplay(displayId);
+ if (display == null || display.getType() != TYPE_EXTERNAL) {
+ return;
+ }
mExternalDisplaysConnected.put(displayId, true);
// Only update the supported state when going from 0 external display to 1
diff --git a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/FoldableDeviceStateProviderTest.java b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/FoldableDeviceStateProviderTest.java
index ddf4a089e76e..04cebab107ee 100644
--- a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/FoldableDeviceStateProviderTest.java
+++ b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/FoldableDeviceStateProviderTest.java
@@ -591,6 +591,20 @@ public final class FoldableDeviceStateProviderTest {
}
@Test
+ public void testOnDisplayAddedWithNullDisplayDoesNotThrowNPE() {
+ createProvider(
+ createConfig(
+ /* identifier= */ 1, /* name= */ "ONE",
+ /* flags= */0, (c) -> true,
+ FoldableDeviceStateProvider::hasNoConnectedExternalDisplay)
+ );
+
+ when(mDisplayManager.getDisplay(1)).thenReturn(null);
+ // This call should not throw NPE.
+ mProvider.onDisplayAdded(1);
+ }
+
+ @Test
public void hasNoConnectedDisplay_afterExternalDisplayAddedAndRemoved_returnsTrue() {
createProvider(
createConfig(