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

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

Merge changes I8950ba4d,If0a39652 into main

* changes:
  Stop using DesktopModeStatus in DisplayController
  Stop using DesktopModeStatus in App to Web
parents 25ebc356 c15a5ff8
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import com.android.internal.annotations.VisibleForTesting
import com.android.wm.shell.R
import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.useAppToWebBuildTimeGenericLinks
import com.android.wm.shell.shared.desktopmode.DesktopConfig

/**
 * Retrieves the build-time or server-side generic links list and parses and stores the
@@ -31,13 +31,14 @@ import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.useAppToWebBuil
 */
class AppToWebGenericLinksParser(
    private val context: Context,
    @ShellMainThread private val mainExecutor: ShellExecutor
    @ShellMainThread private val mainExecutor: ShellExecutor,
    private val desktopConfig: DesktopConfig,
) {
    private val genericLinksMap: MutableMap<String, String> = mutableMapOf()

    init {
        // If using the server-side generic links list, register a listener
        if (!useAppToWebBuildTimeGenericLinks()) {
        if (!desktopConfig.useAppToWebBuildTimeGenericLinks) {
            DeviceConfigListener()
        }

@@ -49,7 +50,7 @@ class AppToWebGenericLinksParser(

    private fun updateGenericLinksMap() {
        val genericLinksList =
            if (useAppToWebBuildTimeGenericLinks()) {
            if (desktopConfig.useAppToWebBuildTimeGenericLinks) {
                context.resources.getString(R.string.generic_links_list)
            } else {
                DeviceConfig.getString(NAMESPACE, FLAG_GENERIC_LINKS, /* defaultValue= */ "")
+6 −3
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ import androidx.annotation.BinderThread;

import com.android.wm.shell.common.DisplayChangeController.OnDisplayChangingListener;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.sysui.ShellInit;

import java.util.ArrayList;
@@ -63,6 +63,7 @@ public class DisplayController {
    private final DisplayManager mDisplayManager;
    private final DisplayChangeController mChangeController;
    private final IDisplayWindowListener mDisplayContainerListener;
    private final DesktopState mDesktopState;

    private final SparseArray<DisplayRecord> mDisplays = new SparseArray<>();
    private final ArrayList<OnDisplaysChangedListener> mDisplayChangedListeners = new ArrayList<>();
@@ -70,11 +71,13 @@ public class DisplayController {
    private DisplayTopology mDisplayTopology;

    public DisplayController(Context context, IWindowManager wmService, ShellInit shellInit,
            ShellExecutor mainExecutor, DisplayManager displayManager) {
            ShellExecutor mainExecutor, DisplayManager displayManager,
            DesktopState desktopState) {
        mMainExecutor = mainExecutor;
        mContext = context;
        mWmService = wmService;
        mDisplayManager = displayManager;
        mDesktopState = desktopState;
        // TODO: Inject this instead
        mChangeController = new DisplayChangeController(mWmService, shellInit, mainExecutor);
        mDisplayContainerListener = new DisplayWindowListenerImpl();
@@ -94,7 +97,7 @@ public class DisplayController {
            }

            if (DesktopExperienceFlags.ENABLE_CONNECTED_DISPLAYS_WINDOW_DRAG.isTrue()
                    && DesktopModeStatus.canEnterDesktopMode(mContext)) {
                    && mDesktopState.canEnterDesktopMode()) {
                mDisplayManager.registerTopologyListener(mMainExecutor,
                        this::onDisplayTopologyChanged);
                onDisplayTopologyChanged(mDisplayManager.getDisplayTopology());
+10 −7
Original line number Diff line number Diff line
@@ -120,7 +120,6 @@ import com.android.wm.shell.shared.annotations.ShellSplashscreenThread;
import com.android.wm.shell.shared.desktopmode.DesktopConfig;
import com.android.wm.shell.shared.desktopmode.DesktopConfigImpl;
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.shared.desktopmode.DesktopStateImpl;
import com.android.wm.shell.splitscreen.SplitScreen;
@@ -185,8 +184,10 @@ public abstract class WMShellBaseModule {
            IWindowManager wmService,
            ShellInit shellInit,
            @ShellMainThread ShellExecutor mainExecutor,
            DisplayManager displayManager) {
        return new DisplayController(context, wmService, shellInit, mainExecutor, displayManager);
            DisplayManager displayManager,
            DesktopState desktopState) {
        return new DisplayController(context, wmService, shellInit, mainExecutor, displayManager,
                desktopState);
    }

    @WMSingleton
@@ -1043,13 +1044,14 @@ public abstract class WMShellBaseModule {

    @WMSingleton
    @Provides
    static Optional<DesktopTasksController> providesDesktopTasksController(Context context,
    static Optional<DesktopTasksController> providesDesktopTasksController(
            DesktopState desktopState,
            @DynamicOverride Optional<Lazy<DesktopTasksController>> desktopTasksController) {
        // Use optional-of-lazy for the dependency that this provider relies on.
        // Lazy ensures that this provider will not be the cause the dependency is created
        // when it will not be returned due to the condition below.
        return desktopTasksController.flatMap((lazy) -> {
            if (DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(context)) {
            if (desktopState.canEnterDesktopModeOrShowAppHandle()) {
                return Optional.of(lazy.get());
            }
            return Optional.empty();
@@ -1062,13 +1064,14 @@ public abstract class WMShellBaseModule {

    @WMSingleton
    @Provides
    static Optional<DesktopUserRepositories> provideDesktopUserRepositories(Context context,
    static Optional<DesktopUserRepositories> provideDesktopUserRepositories(
            DesktopState desktopState,
            @DynamicOverride Optional<Lazy<DesktopUserRepositories>> desktopUserRepositories) {
        // Use optional-of-lazy for the dependency that this provider relies on.
        // Lazy ensures that this provider will not be the cause the dependency is created
        // when it will not be returned due to the condition below.
        return desktopUserRepositories.flatMap((lazy) -> {
            if (DesktopModeStatus.canEnterDesktopMode(context)) {
            if (desktopState.canEnterDesktopMode()) {
                return Optional.of(lazy.get());
            }
            return Optional.empty();
+3 −2
Original line number Diff line number Diff line
@@ -388,8 +388,9 @@ public abstract class WMShellModule {
    @WMSingleton
    @Provides
    static AppToWebGenericLinksParser provideGenericLinksParser(
            Context context, @ShellMainThread ShellExecutor mainExecutor) {
        return new AppToWebGenericLinksParser(context, mainExecutor);
            Context context, @ShellMainThread ShellExecutor mainExecutor,
            DesktopConfig desktopConfig) {
        return new AppToWebGenericLinksParser(context, mainExecutor, desktopConfig);
    }

    @Provides
+16 −21
Original line number Diff line number Diff line
@@ -21,14 +21,11 @@ import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.testing.TestableResources
import androidx.test.filters.SmallTest
import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn
import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.dx.mockito.inline.extended.StaticMockitoSession
import com.android.wm.shell.R
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import com.android.wm.shell.apptoweb.AppToWebGenericLinksParser.Companion.FLAG_GENERIC_LINKS
import com.android.wm.shell.shared.desktopmode.FakeDesktopConfig
import junit.framework.TestCase.assertEquals
import junit.framework.TestCase.assertNull
import org.junit.After
@@ -37,7 +34,6 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.mockito.quality.Strictness

/**
 * Tests for [AppToWebGenericLinksParser].
@@ -51,18 +47,13 @@ class AppToWebGenericLinksParserTests : ShellTestCase() {
    @Mock private lateinit var mockExecutor: ShellExecutor

    private lateinit var genericLinksParser: AppToWebGenericLinksParser
    private lateinit var mockitoSession: StaticMockitoSession
    private lateinit var resources: TestableResources
    private lateinit var mocksInit: AutoCloseable

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        mocksInit = MockitoAnnotations.openMocks(this)

        mockitoSession =
            mockitoSession()
                .strictness(Strictness.LENIENT)
                .spyStatic(DesktopModeStatus::class.java)
                .startMocking()
        resources = mContext.getOrCreateTestableResources()
        resources.addOverride(R.string.generic_links_list, BUILD_TIME_LIST)
        DeviceConfig.setProperty(
@@ -75,33 +66,36 @@ class AppToWebGenericLinksParserTests : ShellTestCase() {

    @After
    fun tearDown() {
        mockitoSession.finishMocking()
        mocksInit.close()
    }

    @Test
    fun init_usingBuildTimeList() {
        doReturn(true).`when` { DesktopModeStatus.useAppToWebBuildTimeGenericLinks() }
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor)
        val desktopConfig = FakeDesktopConfig()
        desktopConfig.useAppToWebBuildTimeGenericLinks = true
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor, desktopConfig)
        // Assert build-time list correctly parsed
        assertEquals(URL_B, genericLinksParser.getGenericLink(PACKAGE_NAME_1))
    }

    @Test
    fun init_usingServerSideList() {
        doReturn(false).`when` { DesktopModeStatus.useAppToWebBuildTimeGenericLinks() }
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor)
        val desktopConfig = FakeDesktopConfig()
        desktopConfig.useAppToWebBuildTimeGenericLinks = false
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor, desktopConfig)
        // Assert server side list correctly parsed
        assertEquals(URL_S, genericLinksParser.getGenericLink(PACKAGE_NAME_1))
    }

    @Test
    fun init_ignoresMalformedPair() {
        doReturn(true).`when` { DesktopModeStatus.useAppToWebBuildTimeGenericLinks() }
        val desktopConfig = FakeDesktopConfig()
        desktopConfig.useAppToWebBuildTimeGenericLinks = true
        val packageName2 = "com.google.android.slides"
        val url2 = "https://docs.google.com"
        resources.addOverride(R.string.generic_links_list,
                "$PACKAGE_NAME_1:$URL_B error $packageName2:$url2")
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor)
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor, desktopConfig)
        // Assert generics links list correctly parsed
        assertEquals(URL_B, genericLinksParser.getGenericLink(PACKAGE_NAME_1))
        assertEquals(url2, genericLinksParser.getGenericLink(packageName2))
@@ -110,9 +104,10 @@ class AppToWebGenericLinksParserTests : ShellTestCase() {

    @Test
    fun onlySavesValidPackageToUrlMaps() {
        doReturn(true).`when` { DesktopModeStatus.useAppToWebBuildTimeGenericLinks() }
        val desktopConfig = FakeDesktopConfig()
        desktopConfig.useAppToWebBuildTimeGenericLinks = true
        resources.addOverride(R.string.generic_links_list, "$PACKAGE_NAME_1:www.yout")
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor)
        genericLinksParser = AppToWebGenericLinksParser(mContext, mockExecutor, desktopConfig)
        // Verify map with invalid url not saved
        assertNull(genericLinksParser.getGenericLink(PACKAGE_NAME_1))
    }
Loading