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

Commit 43d99647 authored by Chris Li's avatar Chris Li
Browse files

Determine whether to support activities in multi window (5/n)

Update Task/ActivityRecord to use the new elgibility check and update
tests

Bug: 176061101
Test: pass existing
Change-Id: Ibb78a43d5901a604b02904be0a0bfdc6da0eb421
parent 81e85863
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.wm.shell.flicker.apppairs

import android.os.SystemClock
import android.platform.test.annotations.Presubmit
import android.provider.Settings
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
@@ -27,6 +26,8 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
import com.android.wm.shell.flicker.appPairsDividerIsInvisible
import com.android.wm.shell.flicker.helpers.AppPairsHelper
import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
import org.junit.After
import org.junit.Before
import org.junit.FixMethodOrder
@@ -49,7 +50,6 @@ import org.junit.runners.Parameterized
class AppPairsTestCannotPairNonResizeableApps(
    testSpec: FlickerTestParameter
) : AppPairsTransition(testSpec) {
    var prevSupportNonResizableInMultiWindow = 0

    override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit
        get() = {
@@ -64,21 +64,15 @@ class AppPairsTestCannotPairNonResizeableApps(
        }

    @Before
    fun setup() {
        prevSupportNonResizableInMultiWindow = Settings.Global.getInt(context.contentResolver,
            Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW)
        if (prevSupportNonResizableInMultiWindow == 1) {
            // Not support non-resizable in multi window
            Settings.Global.putInt(context.contentResolver,
                    Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, 0)
        }
    override fun setup() {
        super.setup()
        setSupportsNonResizableMultiWindow(instrumentation, -1)
    }

    @After
    fun teardown() {
        Settings.Global.putInt(context.contentResolver,
                Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW,
                prevSupportNonResizableInMultiWindow)
    override fun teardown() {
        super.teardown()
        resetMultiWindowConfig(instrumentation)
    }

    @FlakyTest
+8 −14
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.wm.shell.flicker.apppairs

import android.os.SystemClock
import android.platform.test.annotations.Presubmit
import android.provider.Settings
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
@@ -27,6 +26,8 @@ import com.android.server.wm.flicker.FlickerTestParameterFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
import com.android.wm.shell.flicker.appPairsDividerIsVisible
import com.android.wm.shell.flicker.helpers.AppPairsHelper
import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
import org.junit.After
import org.junit.Before
import org.junit.FixMethodOrder
@@ -49,7 +50,6 @@ import org.junit.runners.Parameterized
class AppPairsTestSupportPairNonResizeableApps(
    testSpec: FlickerTestParameter
) : AppPairsTransition(testSpec) {
    var prevSupportNonResizableInMultiWindow = 0

    override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit
        get() = {
@@ -64,21 +64,15 @@ class AppPairsTestSupportPairNonResizeableApps(
        }

    @Before
    fun setup() {
        prevSupportNonResizableInMultiWindow = Settings.Global.getInt(context.contentResolver,
                Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW)
        if (prevSupportNonResizableInMultiWindow == 0) {
            // Support non-resizable in multi window
            Settings.Global.putInt(context.contentResolver,
                    Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, 1)
        }
    override fun setup() {
        super.setup()
        setSupportsNonResizableMultiWindow(instrumentation, 1)
    }

    @After
    fun teardown() {
        Settings.Global.putInt(context.contentResolver,
                Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW,
                prevSupportNonResizableInMultiWindow)
    override fun teardown() {
        super.teardown()
        resetMultiWindowConfig(instrumentation)
    }

    @FlakyTest
+21 −8
Original line number Diff line number Diff line
@@ -20,11 +20,9 @@ import android.app.Instrumentation
import android.content.Context
import android.platform.test.annotations.Presubmit
import android.system.helpers.ActivityHelper
import android.util.Log
import android.view.Surface
import androidx.test.filters.FlakyTest
import androidx.test.platform.app.InstrumentationRegistry
import com.android.compatibility.common.util.SystemUtil
import com.android.server.wm.flicker.FlickerBuilderProvider
import com.android.server.wm.flicker.FlickerTestParameter
import com.android.server.wm.flicker.dsl.FlickerBuilder
@@ -41,10 +39,14 @@ import com.android.server.wm.flicker.statusBarLayerIsAlwaysVisible
import com.android.server.wm.flicker.statusBarLayerRotatesScales
import com.android.server.wm.flicker.statusBarWindowIsAlwaysVisible
import com.android.wm.shell.flicker.helpers.AppPairsHelper
import com.android.wm.shell.flicker.helpers.BaseAppHelper
import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.getDevEnableNonResizableMultiWindow
import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setDevEnableNonResizableMultiWindow
import com.android.wm.shell.flicker.helpers.SplitScreenHelper
import com.android.wm.shell.flicker.testapp.Components
import org.junit.After
import org.junit.Before
import org.junit.Test
import java.io.IOException

abstract class AppPairsTransition(protected val testSpec: FlickerTestParameter) {
    protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
@@ -62,6 +64,21 @@ abstract class AppPairsTransition(protected val testSpec: FlickerTestParameter)
    protected var primaryTaskId = ""
    protected var secondaryTaskId = ""
    protected var nonResizeableTaskId = ""
    private var prevDevEnableNonResizableMultiWindow = 0

    @Before
    open fun setup() {
        prevDevEnableNonResizableMultiWindow = getDevEnableNonResizableMultiWindow(context)
        if (prevDevEnableNonResizableMultiWindow != 0) {
            // Turn off the development option
            setDevEnableNonResizableMultiWindow(context, 0)
        }
    }

    @After
    open fun teardown() {
        setDevEnableNonResizableMultiWindow(context, prevDevEnableNonResizableMultiWindow)
    }

    @FlickerBuilderProvider
    fun buildFlicker(): FlickerBuilder {
@@ -117,11 +134,7 @@ abstract class AppPairsTransition(protected val testSpec: FlickerTestParameter)
    }

    internal fun executeShellCommand(cmd: String) {
        try {
            SystemUtil.runShellCommand(instrumentation, cmd)
        } catch (e: IOException) {
            Log.d("AppPairsTest", "executeShellCommand error! $e")
        }
        BaseAppHelper.executeShellCommand(instrumentation, cmd)
    }

    internal fun composePairsCommand(
+11 −0
Original line number Diff line number Diff line
@@ -21,11 +21,14 @@ import android.content.ComponentName
import android.content.pm.PackageManager.FEATURE_LEANBACK
import android.content.pm.PackageManager.FEATURE_LEANBACK_ONLY
import android.support.test.launcherhelper.LauncherStrategyFactory
import android.util.Log
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.SystemUtil
import com.android.server.wm.flicker.helpers.StandardAppHelper
import com.android.server.wm.traces.parser.toWindowName
import java.io.IOException

abstract class BaseAppHelper(
    instrumentation: Instrumentation,
@@ -56,5 +59,13 @@ abstract class BaseAppHelper(

    companion object {
        private const val APP_CLOSE_WAIT_TIME_MS = 3_000L

        fun executeShellCommand(instrumentation: Instrumentation, cmd: String) {
            try {
                SystemUtil.runShellCommand(instrumentation, cmd)
            } catch (e: IOException) {
                Log.e("BaseAppHelper", "executeShellCommand error! $e")
            }
        }
    }
}
+52 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.wm.shell.flicker.helpers

import android.app.Instrumentation
import android.content.ComponentName
import android.content.Context
import android.provider.Settings

class MultiWindowHelper(
    instrumentation: Instrumentation,
    activityLabel: String,
    componentsInfo: ComponentName
) : BaseAppHelper(instrumentation, activityLabel, componentsInfo) {

    companion object {
        fun getDevEnableNonResizableMultiWindow(context: Context): Int =
                Settings.Global.getInt(context.contentResolver,
                        Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW)

        fun setDevEnableNonResizableMultiWindow(context: Context, configValue: Int) =
                Settings.Global.putInt(context.contentResolver,
                        Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW, configValue)

        fun setSupportsNonResizableMultiWindow(instrumentation: Instrumentation, configValue: Int) =
            executeShellCommand(
                    instrumentation,
                    createConfigSupportsNonResizableMultiWindowCommand(configValue))

        fun resetMultiWindowConfig(instrumentation: Instrumentation) =
            executeShellCommand(instrumentation, resetMultiWindowConfigCommand)

        private fun createConfigSupportsNonResizableMultiWindowCommand(configValue: Int): String =
                "wm set-multi-window-config --supportsNonResizable $configValue"

        private const val resetMultiWindowConfigCommand: String = "wm reset-multi-window-config"
    }
}
Loading