Loading services/core/java/com/android/server/display/DisplayManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -5271,5 +5271,13 @@ public final class DisplayManagerService extends SystemService { public ExternalDisplayStatsService getExternalDisplayStatsService() { return mExternalDisplayStatsService; } /** * Called on external display is ready to be enabled. */ @Override public void onExternalDisplayReadyToBeEnabled(int displayId) { mDisplayModeDirector.onExternalDisplayReadyToBeEnabled(displayId); } } } services/core/java/com/android/server/display/ExternalDisplayPolicy.java +7 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,8 @@ class ExternalDisplayPolicy { @NonNull ExternalDisplayStatsService getExternalDisplayStatsService(); void onExternalDisplayReadyToBeEnabled(int displayId); } @NonNull Loading Loading @@ -185,6 +187,10 @@ class ExternalDisplayPolicy { return; } if (enabled) { mInjector.onExternalDisplayReadyToBeEnabled(logicalDisplay.getDisplayIdLocked()); } mLogicalDisplayMapper.setDisplayEnabledLocked(logicalDisplay, enabled); } Loading Loading @@ -217,6 +223,7 @@ class ExternalDisplayPolicy { if ((Build.IS_ENG || Build.IS_USERDEBUG) && SystemProperties.getBoolean(ENABLE_ON_CONNECT, false)) { Slog.w(TAG, "External display is enabled by default, bypassing user consent."); mInjector.onExternalDisplayReadyToBeEnabled(logicalDisplay.getDisplayIdLocked()); mInjector.sendExternalDisplayEventLocked(logicalDisplay, EVENT_DISPLAY_CONNECTED); return; } else { Loading services/core/java/com/android/server/display/mode/DisplayModeDirector.java +14 −2 Original line number Diff line number Diff line Loading @@ -693,6 +693,13 @@ public class DisplayModeDirector { } } /** * Called when external display is ready to be enabled. */ public void onExternalDisplayReadyToBeEnabled(int displayId) { mDisplayObserver.onExternalDisplayReadyToBeEnabled(displayId); } /** * Listens for changes refresh rate coordination. */ Loading Loading @@ -1379,6 +1386,13 @@ public class DisplayModeDirector { } } void onExternalDisplayReadyToBeEnabled(int displayId) { DisplayInfo displayInfo = getDisplayInfo(displayId); updateDisplaysPeakRefreshRateAndResolution(displayInfo); addDisplaysSynchronizedPeakRefreshRate(displayInfo); } @Override public void onDisplayAdded(int displayId) { updateVrrStatus(displayId); Loading @@ -1386,8 +1400,6 @@ public class DisplayModeDirector { updateDisplayModes(displayId, displayInfo); updateLayoutLimitedFrameRate(displayId, displayInfo); updateUserSettingDisplayPreferredSize(displayInfo); updateDisplaysPeakRefreshRateAndResolution(displayInfo); addDisplaysSynchronizedPeakRefreshRate(displayInfo); } @Override Loading services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,7 @@ public class ExternalDisplayPolicyTest { verify(mMockedLogicalDisplayMapper, never()).setDisplayEnabledLocked(any(), anyBoolean()); verify(mMockedDisplayNotificationManager, times(2)) .onHighTemperatureExternalDisplayNotAllowed(); verify(mMockedInjector, never()).onExternalDisplayReadyToBeEnabled(anyInt()); } @Test Loading @@ -167,6 +168,7 @@ public class ExternalDisplayPolicyTest { verify(mMockedLogicalDisplayMapper, never()).setDisplayEnabledLocked(any(), anyBoolean()); verify(mMockedDisplayNotificationManager, never()) .onHighTemperatureExternalDisplayNotAllowed(); verify(mMockedInjector, never()).onExternalDisplayReadyToBeEnabled(anyInt()); } @Test Loading @@ -184,6 +186,7 @@ public class ExternalDisplayPolicyTest { // Expected only 1 invocation, upon critical temperature. verify(mMockedDisplayNotificationManager).onHighTemperatureExternalDisplayNotAllowed(); verify(mMockedExternalDisplayStatsService).onDisplayDisabled(eq(EXTERNAL_DISPLAY_ID)); verify(mMockedInjector, never()).onExternalDisplayReadyToBeEnabled(anyInt()); } @Test Loading @@ -191,6 +194,7 @@ public class ExternalDisplayPolicyTest { mExternalDisplayPolicy.setExternalDisplayEnabledLocked(mMockedLogicalDisplay, /*enabled=*/ true); assertDisplaySetEnabled(/*enabled=*/ true); verify(mMockedInjector).onExternalDisplayReadyToBeEnabled(eq(EXTERNAL_DISPLAY_ID)); } @Test Loading services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -1945,7 +1945,7 @@ public class DisplayModeDirectorTest { SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>(); votesByDisplay.put(DISPLAY_ID_2, votes); director.getDisplayObserver().onDisplayAdded(DISPLAY_ID_2); director.getDisplayObserver().onExternalDisplayReadyToBeEnabled(DISPLAY_ID_2); director.injectVotesByDisplay(votesByDisplay); var desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID_2); Loading Loading
services/core/java/com/android/server/display/DisplayManagerService.java +8 −0 Original line number Diff line number Diff line Loading @@ -5271,5 +5271,13 @@ public final class DisplayManagerService extends SystemService { public ExternalDisplayStatsService getExternalDisplayStatsService() { return mExternalDisplayStatsService; } /** * Called on external display is ready to be enabled. */ @Override public void onExternalDisplayReadyToBeEnabled(int displayId) { mDisplayModeDirector.onExternalDisplayReadyToBeEnabled(displayId); } } }
services/core/java/com/android/server/display/ExternalDisplayPolicy.java +7 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,8 @@ class ExternalDisplayPolicy { @NonNull ExternalDisplayStatsService getExternalDisplayStatsService(); void onExternalDisplayReadyToBeEnabled(int displayId); } @NonNull Loading Loading @@ -185,6 +187,10 @@ class ExternalDisplayPolicy { return; } if (enabled) { mInjector.onExternalDisplayReadyToBeEnabled(logicalDisplay.getDisplayIdLocked()); } mLogicalDisplayMapper.setDisplayEnabledLocked(logicalDisplay, enabled); } Loading Loading @@ -217,6 +223,7 @@ class ExternalDisplayPolicy { if ((Build.IS_ENG || Build.IS_USERDEBUG) && SystemProperties.getBoolean(ENABLE_ON_CONNECT, false)) { Slog.w(TAG, "External display is enabled by default, bypassing user consent."); mInjector.onExternalDisplayReadyToBeEnabled(logicalDisplay.getDisplayIdLocked()); mInjector.sendExternalDisplayEventLocked(logicalDisplay, EVENT_DISPLAY_CONNECTED); return; } else { Loading
services/core/java/com/android/server/display/mode/DisplayModeDirector.java +14 −2 Original line number Diff line number Diff line Loading @@ -693,6 +693,13 @@ public class DisplayModeDirector { } } /** * Called when external display is ready to be enabled. */ public void onExternalDisplayReadyToBeEnabled(int displayId) { mDisplayObserver.onExternalDisplayReadyToBeEnabled(displayId); } /** * Listens for changes refresh rate coordination. */ Loading Loading @@ -1379,6 +1386,13 @@ public class DisplayModeDirector { } } void onExternalDisplayReadyToBeEnabled(int displayId) { DisplayInfo displayInfo = getDisplayInfo(displayId); updateDisplaysPeakRefreshRateAndResolution(displayInfo); addDisplaysSynchronizedPeakRefreshRate(displayInfo); } @Override public void onDisplayAdded(int displayId) { updateVrrStatus(displayId); Loading @@ -1386,8 +1400,6 @@ public class DisplayModeDirector { updateDisplayModes(displayId, displayInfo); updateLayoutLimitedFrameRate(displayId, displayInfo); updateUserSettingDisplayPreferredSize(displayInfo); updateDisplaysPeakRefreshRateAndResolution(displayInfo); addDisplaysSynchronizedPeakRefreshRate(displayInfo); } @Override Loading
services/tests/displayservicetests/src/com/android/server/display/ExternalDisplayPolicyTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,7 @@ public class ExternalDisplayPolicyTest { verify(mMockedLogicalDisplayMapper, never()).setDisplayEnabledLocked(any(), anyBoolean()); verify(mMockedDisplayNotificationManager, times(2)) .onHighTemperatureExternalDisplayNotAllowed(); verify(mMockedInjector, never()).onExternalDisplayReadyToBeEnabled(anyInt()); } @Test Loading @@ -167,6 +168,7 @@ public class ExternalDisplayPolicyTest { verify(mMockedLogicalDisplayMapper, never()).setDisplayEnabledLocked(any(), anyBoolean()); verify(mMockedDisplayNotificationManager, never()) .onHighTemperatureExternalDisplayNotAllowed(); verify(mMockedInjector, never()).onExternalDisplayReadyToBeEnabled(anyInt()); } @Test Loading @@ -184,6 +186,7 @@ public class ExternalDisplayPolicyTest { // Expected only 1 invocation, upon critical temperature. verify(mMockedDisplayNotificationManager).onHighTemperatureExternalDisplayNotAllowed(); verify(mMockedExternalDisplayStatsService).onDisplayDisabled(eq(EXTERNAL_DISPLAY_ID)); verify(mMockedInjector, never()).onExternalDisplayReadyToBeEnabled(anyInt()); } @Test Loading @@ -191,6 +194,7 @@ public class ExternalDisplayPolicyTest { mExternalDisplayPolicy.setExternalDisplayEnabledLocked(mMockedLogicalDisplay, /*enabled=*/ true); assertDisplaySetEnabled(/*enabled=*/ true); verify(mMockedInjector).onExternalDisplayReadyToBeEnabled(eq(EXTERNAL_DISPLAY_ID)); } @Test Loading
services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -1945,7 +1945,7 @@ public class DisplayModeDirectorTest { SparseArray<SparseArray<Vote>> votesByDisplay = new SparseArray<>(); votesByDisplay.put(DISPLAY_ID_2, votes); director.getDisplayObserver().onDisplayAdded(DISPLAY_ID_2); director.getDisplayObserver().onExternalDisplayReadyToBeEnabled(DISPLAY_ID_2); director.injectVotesByDisplay(votesByDisplay); var desiredSpecs = director.getDesiredDisplayModeSpecs(DISPLAY_ID_2); Loading