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

Commit f3a92ba2 authored by Piotr Wilczyński's avatar Piotr Wilczyński
Browse files

DisplayInfoProvider for DisplayTopologyCoordinator

Bug: 416196787
Flag: EXEMPT bugfix
Test: DisplayManagerServiceTest, DisplayTopologyCoordinatorTest
Change-Id: I46e73d726a5d85f949e47a50b01379fabee8b754
parent fab8de21
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -699,7 +699,8 @@ public final class DisplayManagerService extends SystemService {
            mDisplayTopologyCoordinator = new DisplayTopologyCoordinator(
                    this::isExtendedDisplayAllowed, this::shouldIncludeDefaultDisplayInTopology,
                    topologyChangedCallback, new HandlerExecutor(mHandler), mSyncRoot,
                    backupManager::dataChanged, mFlags);
                    backupManager::dataChanged, mFlags,
                    displayId -> getDisplayInfoInternal(displayId, Process.myUid()));
        } else {
            mDisplayTopologyCoordinator = null;
        }
@@ -6363,4 +6364,9 @@ public final class DisplayManagerService extends SystemService {
        return android.os.Flags.binderFrozenStateChangeCallback()
                && com.android.server.am.Flags.deferDisplayEventsWhenFrozen();
    }

    interface DisplayInfoProvider {
        @Nullable
        DisplayInfo get(int displayId);
    }
}
+8 −19
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.server.display;

import android.annotation.Nullable;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.display.DisplayTopology;
import android.hardware.display.DisplayTopologyGraph;
import android.util.Pair;
@@ -28,7 +26,6 @@ import android.view.DisplayInfo;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.LocalServices;
import com.android.server.display.feature.DisplayManagerFlags;

import java.io.PrintWriter;
@@ -52,8 +49,6 @@ class DisplayTopologyCoordinator {
        return info.uniqueId;
    }

    private final Injector mInjector;

    // Persistent data store for display topologies.
    private final DisplayTopologyStore mTopologyStore;

@@ -88,15 +83,17 @@ class DisplayTopologyCoordinator {
    private final DisplayManagerService.SyncRoot mSyncRoot;
    private final Runnable mTopologySavedCallback;
    private final DisplayManagerFlags mFlags;
    private final DisplayManagerService.DisplayInfoProvider mDisplayInfoProvider;

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

    @VisibleForTesting
@@ -104,8 +101,8 @@ class DisplayTopologyCoordinator {
            BooleanSupplier shouldIncludeDefaultDisplayInTopology,
            Consumer<Pair<DisplayTopology, DisplayTopologyGraph>> onTopologyChangedCallback,
            Executor topologyChangeExecutor, DisplayManagerService.SyncRoot syncRoot,
            Runnable topologySavedCallback, DisplayManagerFlags flags) {
        mInjector = injector;
            Runnable topologySavedCallback, DisplayManagerFlags flags,
            DisplayManagerService.DisplayInfoProvider displayInfoProvider) {
        mTopology = injector.getTopology();
        mIsExtendedDisplayAllowed = isExtendedDisplayAllowed;
        mShouldIncludeDefaultDisplayInTopology = shouldIncludeDefaultDisplayInTopology;
@@ -116,6 +113,7 @@ class DisplayTopologyCoordinator {
                mDisplayIdToUniqueIdMapping, mUniqueIdToDisplayIdMapping);
        mTopologySavedCallback = topologySavedCallback;
        mFlags = flags;
        mDisplayInfoProvider = displayInfoProvider;
    }

    /**
@@ -182,7 +180,7 @@ class DisplayTopologyCoordinator {
            if (displayId != Display.DEFAULT_DISPLAY
                    && !mShouldIncludeDefaultDisplayInTopology.getAsBoolean()
                    && mTopology.isEmpty()) {
                onDisplayAdded(mInjector.getDisplayInfo(Display.DEFAULT_DISPLAY));
                onDisplayAdded(mDisplayInfoProvider.get(Display.DEFAULT_DISPLAY));
            }
        }
    }
@@ -318,9 +316,6 @@ class DisplayTopologyCoordinator {

    @VisibleForTesting
    static class Injector {
        private final DisplayManagerInternal mDisplayManagerInternal
                = LocalServices.getService(DisplayManagerInternal.class);

        DisplayTopology getTopology() {
            return new DisplayTopology();
        }
@@ -340,11 +335,5 @@ class DisplayTopologyCoordinator {
                }
            });
        }

        @Nullable
        DisplayInfo getDisplayInfo(int displayId) {
            return mDisplayManagerInternal == null ? null
                    : mDisplayManagerInternal.getDisplayInfo(displayId);
        }
    }
}
+2 −4
Original line number Diff line number Diff line
@@ -69,9 +69,7 @@ class DisplayTopologyCoordinatorTest {
            override fun createTopologyStore(
                displayIdToUniqueId: SparseArray<String>,
                uniqueIdToDisplayId: MutableMap<String, Int>
            ) =
                mockTopologyStore
            override fun getDisplayInfo(displayId: Int) = displayInfos.get(displayId)
            ) = mockTopologyStore
        }
        whenever(mockIsExtendedDisplayAllowed()).thenReturn(true)
        whenever(mockTopology.copy()).thenReturn(mockTopologyCopy)
@@ -79,7 +77,7 @@ class DisplayTopologyCoordinatorTest {
        coordinator = DisplayTopologyCoordinator(injector, mockIsExtendedDisplayAllowed,
            mockShouldIncludeDefaultDisplayInTopology, mockTopologyChangedCallback,
            topologyChangeExecutor, DisplayManagerService.SyncRoot(), mockTopologySavedCallback,
            mockFlags)
            mockFlags, displayInfos::get)
    }

    @Test