diff options
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( |