Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 597c80a7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "WM callback to add/remove display in topology[2/2]" into main

parents 46b7af02 0285d509
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -674,9 +674,9 @@ public final class DisplayManagerService extends SystemService {
        mConfigParameterProvider = new DeviceConfigParameterProvider(DeviceConfigInterface.REAL);
        mExtraDisplayLoggingPackageName = DisplayProperties.debug_vri_package().orElse(null);
        mExtraDisplayEventLogging = !TextUtils.isEmpty(mExtraDisplayLoggingPackageName);

        // TODO(b/400384229): stats service needs to react to mirror-extended switch
        mExternalDisplayStatsService = new ExternalDisplayStatsService(mContext, mHandler,
                this::isExtendedDisplayEnabled);
                this::isExtendedDisplayAllowed);
        mDisplayNotificationManager = new DisplayNotificationManager(mFlags, mContext,
                mExternalDisplayStatsService);
        mExternalDisplayPolicy = new ExternalDisplayPolicy(new ExternalDisplayPolicyInjector());
@@ -690,7 +690,7 @@ public final class DisplayManagerService extends SystemService {
                        deliverTopologyUpdate(update.first);
                    };
            mDisplayTopologyCoordinator = new DisplayTopologyCoordinator(
                    this::isExtendedDisplayEnabled, topologyChangedCallback,
                    this::isExtendedDisplayAllowed, topologyChangedCallback,
                    new HandlerExecutor(mHandler), mSyncRoot, backupManager::dataChanged);
        } else {
            mDisplayTopologyCoordinator = null;
@@ -2411,7 +2411,10 @@ public final class DisplayManagerService extends SystemService {
        updateLogicalDisplayState(display);
    }

    private boolean isExtendedDisplayEnabled() {
    private boolean isExtendedDisplayAllowed() {
        if (mFlags.isDisplayContentModeManagementEnabled()) {
            return true;
        }
        try {
            return 0 != Settings.Global.getInt(
                    mContext.getContentResolver(),
@@ -6045,7 +6048,13 @@ public final class DisplayManagerService extends SystemService {
                return;
            }
            if (inTopology) {
                mDisplayTopologyCoordinator.onDisplayAdded(getDisplayInfo(displayId));
                var info = getDisplayInfo(displayId);
                if (info == null) {
                    Slog.w(TAG, "onDisplayBelongToTopologyChanged: cancelled displayId="
                            + displayId + " info=null");
                    return;
                }
                mDisplayTopologyCoordinator.onDisplayAdded(info);
            } else {
                mDisplayTopologyCoordinator.onDisplayRemoved(displayId);
            }
+8 −8
Original line number Diff line number Diff line
@@ -69,9 +69,9 @@ class DisplayTopologyCoordinator {
    private final SparseArray<String> mDisplayIdToUniqueIdMapping = new SparseArray<>();

    /**
     * Check if extended displays are enabled. If not, a topology is not needed.
     * Check if extended displays are allowed. If not, a topology is not needed.
     */
    private final BooleanSupplier mIsExtendedDisplayEnabled;
    private final BooleanSupplier mIsExtendedDisplayAllowed;

    /**
     * Callback used to send topology updates.
@@ -83,21 +83,21 @@ class DisplayTopologyCoordinator {
    private final DisplayManagerService.SyncRoot mSyncRoot;
    private final Runnable mTopologySavedCallback;

    DisplayTopologyCoordinator(BooleanSupplier isExtendedDisplayEnabled,
    DisplayTopologyCoordinator(BooleanSupplier isExtendedDisplayAllowed,
            Consumer<Pair<DisplayTopology, DisplayTopologyGraph>> onTopologyChangedCallback,
            Executor topologyChangeExecutor, DisplayManagerService.SyncRoot syncRoot,
            Runnable topologySavedCallback) {
        this(new Injector(), isExtendedDisplayEnabled, onTopologyChangedCallback,
        this(new Injector(), isExtendedDisplayAllowed, onTopologyChangedCallback,
                topologyChangeExecutor, syncRoot, topologySavedCallback);
    }

    @VisibleForTesting
    DisplayTopologyCoordinator(Injector injector, BooleanSupplier isExtendedDisplayEnabled,
    DisplayTopologyCoordinator(Injector injector, BooleanSupplier isExtendedDisplayAllowed,
            Consumer<Pair<DisplayTopology, DisplayTopologyGraph>> onTopologyChangedCallback,
            Executor topologyChangeExecutor, DisplayManagerService.SyncRoot syncRoot,
            Runnable topologySavedCallback) {
        mTopology = injector.getTopology();
        mIsExtendedDisplayEnabled = isExtendedDisplayEnabled;
        mIsExtendedDisplayAllowed = isExtendedDisplayAllowed;
        mOnTopologyChangedCallback = onTopologyChangedCallback;
        mTopologyChangeExecutor = topologyChangeExecutor;
        mSyncRoot = syncRoot;
@@ -262,9 +262,9 @@ class DisplayTopologyCoordinator {
            return false;
        }
        if ((info.type == Display.TYPE_EXTERNAL || info.type == Display.TYPE_OVERLAY)
                && !mIsExtendedDisplayEnabled.getAsBoolean()) {
                && !mIsExtendedDisplayAllowed.getAsBoolean()) {
            Slog.d(TAG, "Display " + info.displayId + " not allowed in topology because "
                    + "type is EXTERNAL or OVERLAY and !mIsExtendedDisplayEnabled");
                    + "type is EXTERNAL or OVERLAY and !mIsExtendedDisplayAllowed");
            return false;
        }
        return true;
+7 −7
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ class DisplayTopologyCoordinatorTest {
    private val mockTopology = mock<DisplayTopology>()
    private val mockTopologyCopy = mock<DisplayTopology>()
    private val mockTopologyGraph = mock<DisplayTopologyGraph>()
    private val mockIsExtendedDisplayEnabled = mock<() -> Boolean>()
    private val mockIsExtendedDisplayAllowed = mock<() -> Boolean>()
    private val mockTopologySavedCallback = mock<() -> Unit>()
    private val mockTopologyChangedCallback =
        mock<(android.util.Pair<DisplayTopology, DisplayTopologyGraph>) -> Unit>()
@@ -73,10 +73,10 @@ class DisplayTopologyCoordinatorTest {
            ) =
                mockTopologyStore
        }
        whenever(mockIsExtendedDisplayEnabled()).thenReturn(true)
        whenever(mockIsExtendedDisplayAllowed()).thenReturn(true)
        whenever(mockTopology.copy()).thenReturn(mockTopologyCopy)
        whenever(mockTopologyCopy.getGraph(any())).thenReturn(mockTopologyGraph)
        coordinator = DisplayTopologyCoordinator(injector, mockIsExtendedDisplayEnabled,
        coordinator = DisplayTopologyCoordinator(injector, mockIsExtendedDisplayAllowed,
            mockTopologyChangedCallback, topologyChangeExecutor, DisplayManagerService.SyncRoot(),
            mockTopologySavedCallback)
    }
@@ -195,7 +195,7 @@ class DisplayTopologyCoordinatorTest {

    @Test
    fun addDisplay_external_extendedDisplaysDisabled() {
        whenever(mockIsExtendedDisplayEnabled()).thenReturn(false)
        whenever(mockIsExtendedDisplayAllowed()).thenReturn(false)

        for (displayInfo in displayInfos) {
            coordinator.onDisplayAdded(displayInfo)
@@ -208,7 +208,7 @@ class DisplayTopologyCoordinatorTest {
    @Test
    fun addDisplay_overlay_extendedDisplaysDisabled() {
        displayInfos[0].type = Display.TYPE_OVERLAY
        whenever(mockIsExtendedDisplayEnabled()).thenReturn(false)
        whenever(mockIsExtendedDisplayAllowed()).thenReturn(false)

        for (displayInfo in displayInfos) {
            coordinator.onDisplayAdded(displayInfo)
@@ -314,7 +314,7 @@ class DisplayTopologyCoordinatorTest {

    @Test
    fun updateDisplay_external_extendedDisplaysDisabled() {
        whenever(mockIsExtendedDisplayEnabled()).thenReturn(false)
        whenever(mockIsExtendedDisplayAllowed()).thenReturn(false)

        for (displayInfo in displayInfos) {
            coordinator.onDisplayChanged(displayInfo)
@@ -328,7 +328,7 @@ class DisplayTopologyCoordinatorTest {
    @Test
    fun updateDisplay_overlay_extendedDisplaysDisabled() {
        displayInfos[0].type = Display.TYPE_OVERLAY
        whenever(mockIsExtendedDisplayEnabled()).thenReturn(false)
        whenever(mockIsExtendedDisplayAllowed()).thenReturn(false)

        coordinator.onDisplayChanged(displayInfos[0])