Create WM Shell Flicker helper library
So that Flicker tests in other places can make use of the Splitscreen utils and avoid copying the utils all over the place. Test: atest WMShellFlickerServiceTests WMShellFlickerTestsSplitScreen Change-Id: I5db19729c3968aba66dc3dfce1f3eafe9f1a0972
This commit is contained in:
@@ -23,6 +23,11 @@ package {
|
||||
default_applicable_licenses: ["frameworks_base_license"],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "WMShellFlickerTestsUtils-src",
|
||||
srcs: ["src/com/android/wm/shell/flicker/utils/*.kt"],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "WMShellFlickerTestsBase-src",
|
||||
srcs: ["src/com/android/wm/shell/flicker/*.kt"],
|
||||
@@ -53,6 +58,28 @@ filegroup {
|
||||
],
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "wm-shell-flicker-utils",
|
||||
platform_apis: true,
|
||||
optimize: {
|
||||
enabled: false,
|
||||
},
|
||||
srcs: [
|
||||
":WMShellFlickerTestsUtils-src",
|
||||
],
|
||||
static_libs: [
|
||||
"androidx.test.ext.junit",
|
||||
"flickertestapplib",
|
||||
"flickerlib",
|
||||
"flickerlib-helpers",
|
||||
"platform-test-annotations",
|
||||
"wm-flicker-common-app-helpers",
|
||||
"wm-flicker-common-assertions",
|
||||
"launcher-helper-lib",
|
||||
"launcher-aosp-tapl",
|
||||
],
|
||||
}
|
||||
|
||||
java_defaults {
|
||||
name: "WMShellFlickerTestsDefault",
|
||||
manifest: "manifests/AndroidManifest.xml",
|
||||
@@ -65,6 +92,7 @@ java_defaults {
|
||||
test_suites: ["device-tests"],
|
||||
libs: ["android.test.runner"],
|
||||
static_libs: [
|
||||
"wm-shell-flicker-utils",
|
||||
"androidx.test.ext.junit",
|
||||
"flickertestapplib",
|
||||
"flickerlib",
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.tools.common.traces.component.ComponentNameMatcher
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
|
||||
/**
|
||||
* Base test class containing common assertions for [ComponentNameMatcher.NAV_BAR],
|
||||
|
||||
@@ -24,10 +24,10 @@ import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import com.android.server.wm.flicker.helpers.LetterboxAppHelper
|
||||
import com.android.server.wm.flicker.helpers.setRotation
|
||||
import com.android.wm.shell.flicker.BaseTest
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtStart
|
||||
import com.android.wm.shell.flicker.appWindowKeepVisible
|
||||
import com.android.wm.shell.flicker.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtStart
|
||||
import com.android.wm.shell.flicker.utils.appWindowKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.layerKeepVisible
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
|
||||
@@ -28,7 +28,7 @@ import android.tools.device.traces.parsers.toFlickerComponent
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.server.wm.flicker.helpers.SimpleAppHelper
|
||||
import com.android.server.wm.flicker.testapp.ActivityOptions
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.Assume
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
|
||||
@@ -21,7 +21,7 @@ import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
|
||||
import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.Direction
|
||||
import com.android.wm.shell.flicker.utils.Direction
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -22,7 +22,7 @@ import android.tools.common.flicker.subject.region.RegionSubject
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import com.android.server.wm.flicker.helpers.FixedOrientationAppHelper
|
||||
import com.android.wm.shell.flicker.Direction
|
||||
import com.android.wm.shell.flicker.utils.Direction
|
||||
import org.junit.Test
|
||||
import org.junit.runners.Parameterized
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
|
||||
import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.Direction
|
||||
import com.android.wm.shell.flicker.utils.Direction
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -20,8 +20,8 @@ import android.graphics.Rect
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import androidx.test.uiautomator.UiObject2
|
||||
import com.android.server.wm.flicker.testapp.ActivityOptions
|
||||
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
|
||||
import com.android.wm.shell.flicker.wait
|
||||
import com.android.wm.shell.flicker.utils.SYSTEM_UI_PACKAGE_NAME
|
||||
import com.android.wm.shell.flicker.utils.wait
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
|
||||
@@ -21,11 +21,11 @@ import android.app.PendingIntent
|
||||
import android.os.Bundle
|
||||
import android.service.notification.StatusBarNotification
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.NotificationListener.Companion.findNotification
|
||||
import com.android.wm.shell.flicker.NotificationListener.Companion.startNotificationListener
|
||||
import com.android.wm.shell.flicker.NotificationListener.Companion.stopNotificationListener
|
||||
import com.android.wm.shell.flicker.NotificationListener.Companion.waitForNotificationToAppear
|
||||
import com.android.wm.shell.flicker.NotificationListener.Companion.waitForNotificationToDisappear
|
||||
import com.android.wm.shell.flicker.utils.NotificationListener.Companion.findNotification
|
||||
import com.android.wm.shell.flicker.utils.NotificationListener.Companion.startNotificationListener
|
||||
import com.android.wm.shell.flicker.utils.NotificationListener.Companion.stopNotificationListener
|
||||
import com.android.wm.shell.flicker.utils.NotificationListener.Companion.waitForNotificationToAppear
|
||||
import com.android.wm.shell.flicker.utils.NotificationListener.Companion.waitForNotificationToDisappear
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertNotNull
|
||||
import org.junit.Assert.assertNull
|
||||
|
||||
@@ -24,7 +24,7 @@ import android.tools.device.helpers.wakeUpAndGoToHomeScreen
|
||||
import android.tools.device.traces.parsers.WindowManagerStateHelper
|
||||
import android.view.Surface.ROTATION_0
|
||||
import android.view.Surface.rotationToString
|
||||
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
|
||||
import com.android.wm.shell.flicker.utils.SYSTEM_UI_PACKAGE_NAME
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assume.assumeTrue
|
||||
|
||||
@@ -22,7 +22,7 @@ import androidx.test.uiautomator.BySelector
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import androidx.test.uiautomator.UiObject2
|
||||
import androidx.test.uiautomator.Until
|
||||
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
|
||||
import com.android.wm.shell.flicker.utils.SYSTEM_UI_PACKAGE_NAME
|
||||
|
||||
/** Id of the root view in the com.android.wm.shell.pip.tv.PipMenuActivity */
|
||||
private const val TV_PIP_MENU_ROOT_ID = "tv_pip_menu"
|
||||
|
||||
@@ -1,387 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.service.splitscreen
|
||||
|
||||
import android.app.Instrumentation
|
||||
import android.graphics.Point
|
||||
import android.os.SystemClock
|
||||
import android.tools.common.traces.component.ComponentNameMatcher
|
||||
import android.tools.common.traces.component.IComponentMatcher
|
||||
import android.tools.common.traces.component.IComponentNameMatcher
|
||||
import android.tools.device.apphelpers.StandardAppHelper
|
||||
import android.tools.device.traces.parsers.WindowManagerStateHelper
|
||||
import android.tools.device.traces.parsers.toFlickerComponent
|
||||
import android.view.InputDevice
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewConfiguration
|
||||
import androidx.test.uiautomator.By
|
||||
import androidx.test.uiautomator.BySelector
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import androidx.test.uiautomator.UiObject2
|
||||
import androidx.test.uiautomator.Until
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.server.wm.flicker.helpers.ImeAppHelper
|
||||
import com.android.server.wm.flicker.helpers.NonResizeableAppHelper
|
||||
import com.android.server.wm.flicker.helpers.NotificationAppHelper
|
||||
import com.android.server.wm.flicker.helpers.SimpleAppHelper
|
||||
import com.android.server.wm.flicker.testapp.ActivityOptions
|
||||
import com.android.wm.shell.flicker.LAUNCHER_UI_PACKAGE_NAME
|
||||
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
|
||||
import org.junit.Assert.assertNotNull
|
||||
|
||||
object SplitScreenUtils {
|
||||
private const val TIMEOUT_MS = 3_000L
|
||||
private const val DRAG_DURATION_MS = 1_000L
|
||||
private const val NOTIFICATION_SCROLLER = "notification_stack_scroller"
|
||||
private const val DIVIDER_BAR = "docked_divider_handle"
|
||||
private const val OVERVIEW_SNAPSHOT = "snapshot"
|
||||
private const val GESTURE_STEP_MS = 16L
|
||||
private val LONG_PRESS_TIME_MS = ViewConfiguration.getLongPressTimeout() * 2L
|
||||
private val SPLIT_DECOR_MANAGER = ComponentNameMatcher("", "SplitDecorManager#")
|
||||
|
||||
private val notificationScrollerSelector: BySelector
|
||||
get() = By.res(SYSTEM_UI_PACKAGE_NAME, NOTIFICATION_SCROLLER)
|
||||
private val notificationContentSelector: BySelector
|
||||
get() = By.text("Flicker Test Notification")
|
||||
private val dividerBarSelector: BySelector
|
||||
get() = By.res(SYSTEM_UI_PACKAGE_NAME, DIVIDER_BAR)
|
||||
private val overviewSnapshotSelector: BySelector
|
||||
get() = By.res(LAUNCHER_UI_PACKAGE_NAME, OVERVIEW_SNAPSHOT)
|
||||
|
||||
fun getPrimary(instrumentation: Instrumentation): StandardAppHelper =
|
||||
SimpleAppHelper(
|
||||
instrumentation,
|
||||
ActivityOptions.SplitScreen.Primary.LABEL,
|
||||
ActivityOptions.SplitScreen.Primary.COMPONENT.toFlickerComponent()
|
||||
)
|
||||
|
||||
fun getSecondary(instrumentation: Instrumentation): StandardAppHelper =
|
||||
SimpleAppHelper(
|
||||
instrumentation,
|
||||
ActivityOptions.SplitScreen.Secondary.LABEL,
|
||||
ActivityOptions.SplitScreen.Secondary.COMPONENT.toFlickerComponent()
|
||||
)
|
||||
|
||||
fun getNonResizeable(instrumentation: Instrumentation): NonResizeableAppHelper =
|
||||
NonResizeableAppHelper(instrumentation)
|
||||
|
||||
fun getSendNotification(instrumentation: Instrumentation): NotificationAppHelper =
|
||||
NotificationAppHelper(instrumentation)
|
||||
|
||||
fun getIme(instrumentation: Instrumentation): ImeAppHelper = ImeAppHelper(instrumentation)
|
||||
|
||||
fun waitForSplitComplete(
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
primaryApp: IComponentMatcher,
|
||||
secondaryApp: IComponentMatcher,
|
||||
) {
|
||||
wmHelper
|
||||
.StateSyncBuilder()
|
||||
.withWindowSurfaceAppeared(primaryApp)
|
||||
.withWindowSurfaceAppeared(secondaryApp)
|
||||
.withSplitDividerVisible()
|
||||
.waitForAndVerify()
|
||||
}
|
||||
|
||||
fun enterSplit(
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
tapl: LauncherInstrumentation,
|
||||
device: UiDevice,
|
||||
primaryApp: StandardAppHelper,
|
||||
secondaryApp: StandardAppHelper
|
||||
) {
|
||||
primaryApp.launchViaIntent(wmHelper)
|
||||
secondaryApp.launchViaIntent(wmHelper)
|
||||
tapl.goHome()
|
||||
wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify()
|
||||
splitFromOverview(tapl, device)
|
||||
waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
|
||||
}
|
||||
|
||||
fun splitFromOverview(tapl: LauncherInstrumentation, device: UiDevice) {
|
||||
// Note: The initial split position in landscape is different between tablet and phone.
|
||||
// In landscape, tablet will let the first app split to right side, and phone will
|
||||
// split to left side.
|
||||
if (tapl.isTablet) {
|
||||
// TAPL's currentTask on tablet is sometimes not what we expected if the overview
|
||||
// contains more than 3 task views. We need to use uiautomator directly to find the
|
||||
// second task to split.
|
||||
tapl.workspace.switchToOverview().overviewActions.clickSplit()
|
||||
val snapshots = device.wait(Until.findObjects(overviewSnapshotSelector), TIMEOUT_MS)
|
||||
if (snapshots == null || snapshots.size < 1) {
|
||||
error("Fail to find a overview snapshot to split.")
|
||||
}
|
||||
|
||||
// Find the second task in the upper right corner in split select mode by sorting
|
||||
// 'left' in descending order and 'top' in ascending order.
|
||||
snapshots.sortWith { t1: UiObject2, t2: UiObject2 ->
|
||||
t2.getVisibleBounds().left - t1.getVisibleBounds().left
|
||||
}
|
||||
snapshots.sortWith { t1: UiObject2, t2: UiObject2 ->
|
||||
t1.getVisibleBounds().top - t2.getVisibleBounds().top
|
||||
}
|
||||
snapshots[0].click()
|
||||
} else {
|
||||
tapl.workspace
|
||||
.switchToOverview()
|
||||
.currentTask
|
||||
.tapMenu()
|
||||
.tapSplitMenuItem()
|
||||
.currentTask
|
||||
.open()
|
||||
}
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
}
|
||||
|
||||
fun enterSplitViaIntent(
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
primaryApp: StandardAppHelper,
|
||||
secondaryApp: StandardAppHelper
|
||||
) {
|
||||
val stringExtras =
|
||||
mapOf(ActivityOptions.SplitScreen.Primary.EXTRA_LAUNCH_ADJACENT to "true")
|
||||
primaryApp.launchViaIntent(wmHelper, null, null, stringExtras)
|
||||
SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
|
||||
}
|
||||
|
||||
fun dragFromNotificationToSplit(
|
||||
instrumentation: Instrumentation,
|
||||
device: UiDevice,
|
||||
wmHelper: WindowManagerStateHelper
|
||||
) {
|
||||
val displayBounds =
|
||||
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
|
||||
?: error("Display not found")
|
||||
|
||||
// Pull down the notifications
|
||||
device.swipe(
|
||||
displayBounds.centerX(),
|
||||
5,
|
||||
displayBounds.centerX(),
|
||||
displayBounds.bottom,
|
||||
50 /* steps */
|
||||
)
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
|
||||
// Find the target notification
|
||||
val notificationScroller =
|
||||
device.wait(Until.findObject(notificationScrollerSelector), TIMEOUT_MS)
|
||||
?: error("Unable to find view $notificationScrollerSelector")
|
||||
var notificationContent = notificationScroller.findObject(notificationContentSelector)
|
||||
|
||||
while (notificationContent == null) {
|
||||
device.swipe(
|
||||
displayBounds.centerX(),
|
||||
displayBounds.centerY(),
|
||||
displayBounds.centerX(),
|
||||
displayBounds.centerY() - 150,
|
||||
20 /* steps */
|
||||
)
|
||||
notificationContent = notificationScroller.findObject(notificationContentSelector)
|
||||
}
|
||||
|
||||
// Drag to split
|
||||
val dragStart = notificationContent.visibleCenter
|
||||
val dragMiddle = Point(dragStart.x + 50, dragStart.y)
|
||||
val dragEnd = Point(displayBounds.width / 4, displayBounds.width / 4)
|
||||
val downTime = SystemClock.uptimeMillis()
|
||||
|
||||
touch(instrumentation, MotionEvent.ACTION_DOWN, downTime, downTime, TIMEOUT_MS, dragStart)
|
||||
// It needs a horizontal movement to trigger the drag
|
||||
touchMove(
|
||||
instrumentation,
|
||||
downTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
DRAG_DURATION_MS,
|
||||
dragStart,
|
||||
dragMiddle
|
||||
)
|
||||
touchMove(
|
||||
instrumentation,
|
||||
downTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
DRAG_DURATION_MS,
|
||||
dragMiddle,
|
||||
dragEnd
|
||||
)
|
||||
// Wait for a while to start splitting
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
touch(
|
||||
instrumentation,
|
||||
MotionEvent.ACTION_UP,
|
||||
downTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
GESTURE_STEP_MS,
|
||||
dragEnd
|
||||
)
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
}
|
||||
|
||||
fun touch(
|
||||
instrumentation: Instrumentation,
|
||||
action: Int,
|
||||
downTime: Long,
|
||||
eventTime: Long,
|
||||
duration: Long,
|
||||
point: Point
|
||||
) {
|
||||
val motionEvent =
|
||||
MotionEvent.obtain(downTime, eventTime, action, point.x.toFloat(), point.y.toFloat(), 0)
|
||||
motionEvent.source = InputDevice.SOURCE_TOUCHSCREEN
|
||||
instrumentation.uiAutomation.injectInputEvent(motionEvent, true)
|
||||
motionEvent.recycle()
|
||||
SystemClock.sleep(duration)
|
||||
}
|
||||
|
||||
fun touchMove(
|
||||
instrumentation: Instrumentation,
|
||||
downTime: Long,
|
||||
eventTime: Long,
|
||||
duration: Long,
|
||||
from: Point,
|
||||
to: Point
|
||||
) {
|
||||
val steps: Long = duration / GESTURE_STEP_MS
|
||||
var currentTime = eventTime
|
||||
var currentX = from.x.toFloat()
|
||||
var currentY = from.y.toFloat()
|
||||
val stepX = (to.x.toFloat() - from.x.toFloat()) / steps.toFloat()
|
||||
val stepY = (to.y.toFloat() - from.y.toFloat()) / steps.toFloat()
|
||||
|
||||
for (i in 1..steps) {
|
||||
val motionMove =
|
||||
MotionEvent.obtain(
|
||||
downTime,
|
||||
currentTime,
|
||||
MotionEvent.ACTION_MOVE,
|
||||
currentX,
|
||||
currentY,
|
||||
0
|
||||
)
|
||||
motionMove.source = InputDevice.SOURCE_TOUCHSCREEN
|
||||
instrumentation.uiAutomation.injectInputEvent(motionMove, true)
|
||||
motionMove.recycle()
|
||||
|
||||
currentTime += GESTURE_STEP_MS
|
||||
if (i == steps - 1) {
|
||||
currentX = to.x.toFloat()
|
||||
currentY = to.y.toFloat()
|
||||
} else {
|
||||
currentX += stepX
|
||||
currentY += stepY
|
||||
}
|
||||
SystemClock.sleep(GESTURE_STEP_MS)
|
||||
}
|
||||
}
|
||||
|
||||
fun createShortcutOnHotseatIfNotExist(tapl: LauncherInstrumentation, appName: String) {
|
||||
tapl.workspace.deleteAppIcon(tapl.workspace.getHotseatAppIcon(0))
|
||||
val allApps = tapl.workspace.switchToAllApps()
|
||||
allApps.freeze()
|
||||
try {
|
||||
allApps.getAppIcon(appName).dragToHotseat(0)
|
||||
} finally {
|
||||
allApps.unfreeze()
|
||||
}
|
||||
}
|
||||
|
||||
fun dragDividerToResizeAndWait(device: UiDevice, wmHelper: WindowManagerStateHelper) {
|
||||
val displayBounds =
|
||||
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
|
||||
?: error("Display not found")
|
||||
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
|
||||
dividerBar.drag(Point(displayBounds.width * 1 / 3, displayBounds.height * 2 / 3), 200)
|
||||
|
||||
wmHelper
|
||||
.StateSyncBuilder()
|
||||
.withWindowSurfaceDisappeared(SPLIT_DECOR_MANAGER)
|
||||
.waitForAndVerify()
|
||||
}
|
||||
|
||||
fun dragDividerToDismissSplit(
|
||||
device: UiDevice,
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
dragToRight: Boolean,
|
||||
dragToBottom: Boolean
|
||||
) {
|
||||
val displayBounds =
|
||||
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
|
||||
?: error("Display not found")
|
||||
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
|
||||
dividerBar.drag(
|
||||
Point(
|
||||
if (dragToRight) {
|
||||
displayBounds.width * 4 / 5
|
||||
} else {
|
||||
displayBounds.width * 1 / 5
|
||||
},
|
||||
if (dragToBottom) {
|
||||
displayBounds.height * 4 / 5
|
||||
} else {
|
||||
displayBounds.height * 1 / 5
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun doubleTapDividerToSwitch(device: UiDevice) {
|
||||
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
|
||||
val interval =
|
||||
(ViewConfiguration.getDoubleTapTimeout() + ViewConfiguration.getDoubleTapMinTime()) / 2
|
||||
dividerBar.click()
|
||||
SystemClock.sleep(interval.toLong())
|
||||
dividerBar.click()
|
||||
}
|
||||
|
||||
fun copyContentInSplit(
|
||||
instrumentation: Instrumentation,
|
||||
device: UiDevice,
|
||||
sourceApp: IComponentNameMatcher,
|
||||
destinationApp: IComponentNameMatcher,
|
||||
) {
|
||||
// Copy text from sourceApp
|
||||
val textView =
|
||||
device.wait(
|
||||
Until.findObject(By.res(sourceApp.packageName, "SplitScreenTest")),
|
||||
TIMEOUT_MS
|
||||
)
|
||||
assertNotNull("Unable to find the TextView", textView)
|
||||
textView.click(LONG_PRESS_TIME_MS)
|
||||
|
||||
val copyBtn = device.wait(Until.findObject(By.text("Copy")), TIMEOUT_MS)
|
||||
assertNotNull("Unable to find the copy button", copyBtn)
|
||||
copyBtn.click()
|
||||
|
||||
// Paste text to destinationApp
|
||||
val editText =
|
||||
device.wait(
|
||||
Until.findObject(By.res(destinationApp.packageName, "plain_text_input")),
|
||||
TIMEOUT_MS
|
||||
)
|
||||
assertNotNull("Unable to find the EditText", editText)
|
||||
editText.click(LONG_PRESS_TIME_MS)
|
||||
|
||||
val pasteBtn = device.wait(Until.findObject(By.text("Paste")), TIMEOUT_MS)
|
||||
assertNotNull("Unable to find the paste button", pasteBtn)
|
||||
pasteBtn.click()
|
||||
|
||||
// Verify text
|
||||
if (!textView.text.contentEquals(editText.text)) {
|
||||
error("Fail to copy content in split")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -1,387 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.service.splitscreen.scenarios
|
||||
|
||||
import android.app.Instrumentation
|
||||
import android.graphics.Point
|
||||
import android.os.SystemClock
|
||||
import android.tools.common.traces.component.ComponentNameMatcher
|
||||
import android.tools.common.traces.component.IComponentMatcher
|
||||
import android.tools.common.traces.component.IComponentNameMatcher
|
||||
import android.tools.device.apphelpers.StandardAppHelper
|
||||
import android.tools.device.traces.parsers.WindowManagerStateHelper
|
||||
import android.tools.device.traces.parsers.toFlickerComponent
|
||||
import android.view.InputDevice
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewConfiguration
|
||||
import androidx.test.uiautomator.By
|
||||
import androidx.test.uiautomator.BySelector
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import androidx.test.uiautomator.UiObject2
|
||||
import androidx.test.uiautomator.Until
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.server.wm.flicker.helpers.ImeAppHelper
|
||||
import com.android.server.wm.flicker.helpers.NonResizeableAppHelper
|
||||
import com.android.server.wm.flicker.helpers.NotificationAppHelper
|
||||
import com.android.server.wm.flicker.helpers.SimpleAppHelper
|
||||
import com.android.server.wm.flicker.testapp.ActivityOptions
|
||||
import com.android.wm.shell.flicker.LAUNCHER_UI_PACKAGE_NAME
|
||||
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
|
||||
import org.junit.Assert.assertNotNull
|
||||
|
||||
object SplitScreenUtils {
|
||||
private const val TIMEOUT_MS = 3_000L
|
||||
private const val DRAG_DURATION_MS = 1_000L
|
||||
private const val NOTIFICATION_SCROLLER = "notification_stack_scroller"
|
||||
private const val DIVIDER_BAR = "docked_divider_handle"
|
||||
private const val OVERVIEW_SNAPSHOT = "snapshot"
|
||||
private const val GESTURE_STEP_MS = 16L
|
||||
private val LONG_PRESS_TIME_MS = ViewConfiguration.getLongPressTimeout() * 2L
|
||||
private val SPLIT_DECOR_MANAGER = ComponentNameMatcher("", "SplitDecorManager#")
|
||||
|
||||
private val notificationScrollerSelector: BySelector
|
||||
get() = By.res(SYSTEM_UI_PACKAGE_NAME, NOTIFICATION_SCROLLER)
|
||||
private val notificationContentSelector: BySelector
|
||||
get() = By.text("Flicker Test Notification")
|
||||
private val dividerBarSelector: BySelector
|
||||
get() = By.res(SYSTEM_UI_PACKAGE_NAME, DIVIDER_BAR)
|
||||
private val overviewSnapshotSelector: BySelector
|
||||
get() = By.res(LAUNCHER_UI_PACKAGE_NAME, OVERVIEW_SNAPSHOT)
|
||||
|
||||
fun getPrimary(instrumentation: Instrumentation): StandardAppHelper =
|
||||
SimpleAppHelper(
|
||||
instrumentation,
|
||||
ActivityOptions.SplitScreen.Primary.LABEL,
|
||||
ActivityOptions.SplitScreen.Primary.COMPONENT.toFlickerComponent()
|
||||
)
|
||||
|
||||
fun getSecondary(instrumentation: Instrumentation): StandardAppHelper =
|
||||
SimpleAppHelper(
|
||||
instrumentation,
|
||||
ActivityOptions.SplitScreen.Secondary.LABEL,
|
||||
ActivityOptions.SplitScreen.Secondary.COMPONENT.toFlickerComponent()
|
||||
)
|
||||
|
||||
fun getNonResizeable(instrumentation: Instrumentation): NonResizeableAppHelper =
|
||||
NonResizeableAppHelper(instrumentation)
|
||||
|
||||
fun getSendNotification(instrumentation: Instrumentation): NotificationAppHelper =
|
||||
NotificationAppHelper(instrumentation)
|
||||
|
||||
fun getIme(instrumentation: Instrumentation): ImeAppHelper = ImeAppHelper(instrumentation)
|
||||
|
||||
fun waitForSplitComplete(
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
primaryApp: IComponentMatcher,
|
||||
secondaryApp: IComponentMatcher,
|
||||
) {
|
||||
wmHelper
|
||||
.StateSyncBuilder()
|
||||
.withWindowSurfaceAppeared(primaryApp)
|
||||
.withWindowSurfaceAppeared(secondaryApp)
|
||||
.withSplitDividerVisible()
|
||||
.waitForAndVerify()
|
||||
}
|
||||
|
||||
fun enterSplit(
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
tapl: LauncherInstrumentation,
|
||||
device: UiDevice,
|
||||
primaryApp: StandardAppHelper,
|
||||
secondaryApp: StandardAppHelper
|
||||
) {
|
||||
primaryApp.launchViaIntent(wmHelper)
|
||||
secondaryApp.launchViaIntent(wmHelper)
|
||||
tapl.goHome()
|
||||
wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify()
|
||||
splitFromOverview(tapl, device)
|
||||
waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
|
||||
}
|
||||
|
||||
fun splitFromOverview(tapl: LauncherInstrumentation, device: UiDevice) {
|
||||
// Note: The initial split position in landscape is different between tablet and phone.
|
||||
// In landscape, tablet will let the first app split to right side, and phone will
|
||||
// split to left side.
|
||||
if (tapl.isTablet) {
|
||||
// TAPL's currentTask on tablet is sometimes not what we expected if the overview
|
||||
// contains more than 3 task views. We need to use uiautomator directly to find the
|
||||
// second task to split.
|
||||
tapl.workspace.switchToOverview().overviewActions.clickSplit()
|
||||
val snapshots = device.wait(Until.findObjects(overviewSnapshotSelector), TIMEOUT_MS)
|
||||
if (snapshots == null || snapshots.size < 1) {
|
||||
error("Fail to find a overview snapshot to split.")
|
||||
}
|
||||
|
||||
// Find the second task in the upper right corner in split select mode by sorting
|
||||
// 'left' in descending order and 'top' in ascending order.
|
||||
snapshots.sortWith { t1: UiObject2, t2: UiObject2 ->
|
||||
t2.getVisibleBounds().left - t1.getVisibleBounds().left
|
||||
}
|
||||
snapshots.sortWith { t1: UiObject2, t2: UiObject2 ->
|
||||
t1.getVisibleBounds().top - t2.getVisibleBounds().top
|
||||
}
|
||||
snapshots[0].click()
|
||||
} else {
|
||||
tapl.workspace
|
||||
.switchToOverview()
|
||||
.currentTask
|
||||
.tapMenu()
|
||||
.tapSplitMenuItem()
|
||||
.currentTask
|
||||
.open()
|
||||
}
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
}
|
||||
|
||||
fun enterSplitViaIntent(
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
primaryApp: StandardAppHelper,
|
||||
secondaryApp: StandardAppHelper
|
||||
) {
|
||||
val stringExtras =
|
||||
mapOf(ActivityOptions.SplitScreen.Primary.EXTRA_LAUNCH_ADJACENT to "true")
|
||||
primaryApp.launchViaIntent(wmHelper, null, null, stringExtras)
|
||||
SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
|
||||
}
|
||||
|
||||
fun dragFromNotificationToSplit(
|
||||
instrumentation: Instrumentation,
|
||||
device: UiDevice,
|
||||
wmHelper: WindowManagerStateHelper
|
||||
) {
|
||||
val displayBounds =
|
||||
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
|
||||
?: error("Display not found")
|
||||
|
||||
// Pull down the notifications
|
||||
device.swipe(
|
||||
displayBounds.centerX(),
|
||||
5,
|
||||
displayBounds.centerX(),
|
||||
displayBounds.bottom,
|
||||
50 /* steps */
|
||||
)
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
|
||||
// Find the target notification
|
||||
val notificationScroller =
|
||||
device.wait(Until.findObject(notificationScrollerSelector), TIMEOUT_MS)
|
||||
?: error("Unable to find view $notificationScrollerSelector")
|
||||
var notificationContent = notificationScroller.findObject(notificationContentSelector)
|
||||
|
||||
while (notificationContent == null) {
|
||||
device.swipe(
|
||||
displayBounds.centerX(),
|
||||
displayBounds.centerY(),
|
||||
displayBounds.centerX(),
|
||||
displayBounds.centerY() - 150,
|
||||
20 /* steps */
|
||||
)
|
||||
notificationContent = notificationScroller.findObject(notificationContentSelector)
|
||||
}
|
||||
|
||||
// Drag to split
|
||||
val dragStart = notificationContent.visibleCenter
|
||||
val dragMiddle = Point(dragStart.x + 50, dragStart.y)
|
||||
val dragEnd = Point(displayBounds.width / 4, displayBounds.width / 4)
|
||||
val downTime = SystemClock.uptimeMillis()
|
||||
|
||||
touch(instrumentation, MotionEvent.ACTION_DOWN, downTime, downTime, TIMEOUT_MS, dragStart)
|
||||
// It needs a horizontal movement to trigger the drag
|
||||
touchMove(
|
||||
instrumentation,
|
||||
downTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
DRAG_DURATION_MS,
|
||||
dragStart,
|
||||
dragMiddle
|
||||
)
|
||||
touchMove(
|
||||
instrumentation,
|
||||
downTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
DRAG_DURATION_MS,
|
||||
dragMiddle,
|
||||
dragEnd
|
||||
)
|
||||
// Wait for a while to start splitting
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
touch(
|
||||
instrumentation,
|
||||
MotionEvent.ACTION_UP,
|
||||
downTime,
|
||||
SystemClock.uptimeMillis(),
|
||||
GESTURE_STEP_MS,
|
||||
dragEnd
|
||||
)
|
||||
SystemClock.sleep(TIMEOUT_MS)
|
||||
}
|
||||
|
||||
fun touch(
|
||||
instrumentation: Instrumentation,
|
||||
action: Int,
|
||||
downTime: Long,
|
||||
eventTime: Long,
|
||||
duration: Long,
|
||||
point: Point
|
||||
) {
|
||||
val motionEvent =
|
||||
MotionEvent.obtain(downTime, eventTime, action, point.x.toFloat(), point.y.toFloat(), 0)
|
||||
motionEvent.source = InputDevice.SOURCE_TOUCHSCREEN
|
||||
instrumentation.uiAutomation.injectInputEvent(motionEvent, true)
|
||||
motionEvent.recycle()
|
||||
SystemClock.sleep(duration)
|
||||
}
|
||||
|
||||
fun touchMove(
|
||||
instrumentation: Instrumentation,
|
||||
downTime: Long,
|
||||
eventTime: Long,
|
||||
duration: Long,
|
||||
from: Point,
|
||||
to: Point
|
||||
) {
|
||||
val steps: Long = duration / GESTURE_STEP_MS
|
||||
var currentTime = eventTime
|
||||
var currentX = from.x.toFloat()
|
||||
var currentY = from.y.toFloat()
|
||||
val stepX = (to.x.toFloat() - from.x.toFloat()) / steps.toFloat()
|
||||
val stepY = (to.y.toFloat() - from.y.toFloat()) / steps.toFloat()
|
||||
|
||||
for (i in 1..steps) {
|
||||
val motionMove =
|
||||
MotionEvent.obtain(
|
||||
downTime,
|
||||
currentTime,
|
||||
MotionEvent.ACTION_MOVE,
|
||||
currentX,
|
||||
currentY,
|
||||
0
|
||||
)
|
||||
motionMove.source = InputDevice.SOURCE_TOUCHSCREEN
|
||||
instrumentation.uiAutomation.injectInputEvent(motionMove, true)
|
||||
motionMove.recycle()
|
||||
|
||||
currentTime += GESTURE_STEP_MS
|
||||
if (i == steps - 1) {
|
||||
currentX = to.x.toFloat()
|
||||
currentY = to.y.toFloat()
|
||||
} else {
|
||||
currentX += stepX
|
||||
currentY += stepY
|
||||
}
|
||||
SystemClock.sleep(GESTURE_STEP_MS)
|
||||
}
|
||||
}
|
||||
|
||||
fun createShortcutOnHotseatIfNotExist(tapl: LauncherInstrumentation, appName: String) {
|
||||
tapl.workspace.deleteAppIcon(tapl.workspace.getHotseatAppIcon(0))
|
||||
val allApps = tapl.workspace.switchToAllApps()
|
||||
allApps.freeze()
|
||||
try {
|
||||
allApps.getAppIcon(appName).dragToHotseat(0)
|
||||
} finally {
|
||||
allApps.unfreeze()
|
||||
}
|
||||
}
|
||||
|
||||
fun dragDividerToResizeAndWait(device: UiDevice, wmHelper: WindowManagerStateHelper) {
|
||||
val displayBounds =
|
||||
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
|
||||
?: error("Display not found")
|
||||
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
|
||||
dividerBar.drag(Point(displayBounds.width * 1 / 3, displayBounds.height * 2 / 3), 200)
|
||||
|
||||
wmHelper
|
||||
.StateSyncBuilder()
|
||||
.withWindowSurfaceDisappeared(SPLIT_DECOR_MANAGER)
|
||||
.waitForAndVerify()
|
||||
}
|
||||
|
||||
fun dragDividerToDismissSplit(
|
||||
device: UiDevice,
|
||||
wmHelper: WindowManagerStateHelper,
|
||||
dragToRight: Boolean,
|
||||
dragToBottom: Boolean
|
||||
) {
|
||||
val displayBounds =
|
||||
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
|
||||
?: error("Display not found")
|
||||
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
|
||||
dividerBar.drag(
|
||||
Point(
|
||||
if (dragToRight) {
|
||||
displayBounds.width * 4 / 5
|
||||
} else {
|
||||
displayBounds.width * 1 / 5
|
||||
},
|
||||
if (dragToBottom) {
|
||||
displayBounds.height * 4 / 5
|
||||
} else {
|
||||
displayBounds.height * 1 / 5
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun doubleTapDividerToSwitch(device: UiDevice) {
|
||||
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
|
||||
val interval =
|
||||
(ViewConfiguration.getDoubleTapTimeout() + ViewConfiguration.getDoubleTapMinTime()) / 2
|
||||
dividerBar.click()
|
||||
SystemClock.sleep(interval.toLong())
|
||||
dividerBar.click()
|
||||
}
|
||||
|
||||
fun copyContentInSplit(
|
||||
instrumentation: Instrumentation,
|
||||
device: UiDevice,
|
||||
sourceApp: IComponentNameMatcher,
|
||||
destinationApp: IComponentNameMatcher,
|
||||
) {
|
||||
// Copy text from sourceApp
|
||||
val textView =
|
||||
device.wait(
|
||||
Until.findObject(By.res(sourceApp.packageName, "SplitScreenTest")),
|
||||
TIMEOUT_MS
|
||||
)
|
||||
assertNotNull("Unable to find the TextView", textView)
|
||||
textView.click(LONG_PRESS_TIME_MS)
|
||||
|
||||
val copyBtn = device.wait(Until.findObject(By.text("Copy")), TIMEOUT_MS)
|
||||
assertNotNull("Unable to find the copy button", copyBtn)
|
||||
copyBtn.click()
|
||||
|
||||
// Paste text to destinationApp
|
||||
val editText =
|
||||
device.wait(
|
||||
Until.findObject(By.res(destinationApp.packageName, "plain_text_input")),
|
||||
TIMEOUT_MS
|
||||
)
|
||||
assertNotNull("Unable to find the EditText", editText)
|
||||
editText.click(LONG_PRESS_TIME_MS)
|
||||
|
||||
val pasteBtn = device.wait(Until.findObject(By.text("Paste")), TIMEOUT_MS)
|
||||
assertNotNull("Unable to find the paste button", pasteBtn)
|
||||
pasteBtn.click()
|
||||
|
||||
// Verify text
|
||||
if (!textView.text.contentEquals(editText.text)) {
|
||||
error("Fail to copy content in split")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -24,6 +24,7 @@ import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.UiDevice
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation
|
||||
import com.android.wm.shell.flicker.service.Utils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
|
||||
@@ -25,12 +25,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowKeepVisible
|
||||
import com.android.wm.shell.flicker.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsKeepVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.CopyContentInSplitBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsKeepVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -24,14 +24,14 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.helpers.WindowUtils
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowBecomesInvisible
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesInvisible
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.DismissSplitScreenByDividerBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesInvisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -23,12 +23,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowBecomesInvisible
|
||||
import com.android.wm.shell.flicker.layerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesInvisible
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.DismissSplitScreenByGoHomeBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesInvisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -23,12 +23,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowKeepVisible
|
||||
import com.android.wm.shell.flicker.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsChanges
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.DragDividerToResizeBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsChanges
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -25,16 +25,16 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.EnterSplitScreenByDragFromAllAppsBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -25,15 +25,15 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.EnterSplitScreenByDragFromNotificationBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -24,14 +24,14 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.EnterSplitScreenByDragFromShortcutBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -25,16 +25,16 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.EnterSplitScreenByDragFromTaskbarBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesVisibleByDrag
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -23,14 +23,14 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.EnterSplitScreenFromOverviewBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -21,7 +21,7 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import com.android.server.wm.flicker.helpers.setRotation
|
||||
import com.android.wm.shell.flicker.BaseBenchmarkTest
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
|
||||
abstract class SplitScreenBase(flicker: LegacyFlickerTest) : BaseBenchmarkTest(flicker) {
|
||||
protected val context: Context = instrumentation.context
|
||||
|
||||
@@ -24,13 +24,13 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.SwitchAppByDoubleTapDividerBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerKeepVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -24,12 +24,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.SwitchBackToSplitFromAnotherAppBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -24,12 +24,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.SwitchBackToSplitFromHomeBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -24,12 +24,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.SwitchBackToSplitFromRecentBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitScreenDividerBecomesVisible
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -23,15 +23,15 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowBecomesInvisible
|
||||
import com.android.wm.shell.flicker.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.layerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsSnapToDivider
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.SwitchBetweenSplitPairsBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.appWindowBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesInvisible
|
||||
import com.android.wm.shell.flicker.utils.layerBecomesVisible
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsSnapToDivider
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -24,12 +24,12 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.splitscreen.benchmark.UnlockKeyguardToSplitScreenBenchmark
|
||||
import com.android.wm.shell.flicker.utils.ICommonAssertions
|
||||
import com.android.wm.shell.flicker.utils.SPLIT_SCREEN_DIVIDER_COMPONENT
|
||||
import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.layerIsVisibleAtEnd
|
||||
import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -21,8 +21,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -21,8 +21,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -21,8 +21,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
import org.junit.FixMethodOrder
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
import org.junit.FixMethodOrder
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
import org.junit.FixMethodOrder
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
import org.junit.FixMethodOrder
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.Assume
|
||||
import org.junit.Before
|
||||
import org.junit.FixMethodOrder
|
||||
|
||||
@@ -21,8 +21,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -25,8 +25,8 @@ import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import android.tools.device.helpers.WindowUtils
|
||||
import android.tools.device.traces.parsers.WindowManagerStateHelper
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -21,8 +21,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -22,8 +22,8 @@ import android.tools.device.flicker.legacy.FlickerBuilder
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTest
|
||||
import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
|
||||
import androidx.test.filters.RequiresDevice
|
||||
import com.android.wm.shell.flicker.SplitScreenUtils
|
||||
import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
|
||||
import com.android.wm.shell.flicker.utils.SplitScreenUtils
|
||||
import org.junit.FixMethodOrder
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.MethodSorters
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
@file:JvmName("CommonAssertions")
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.tools.common.Rotation
|
||||
import android.tools.common.datatypes.Region
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
@file:JvmName("CommonConstants")
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.tools.common.traces.component.ComponentNameMatcher
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.platform.test.annotations.Presubmit
|
||||
import android.tools.common.traces.component.ComponentNameMatcher
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.app.Instrumentation
|
||||
import android.content.Context
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.service.notification.NotificationListenerService
|
||||
import android.service.notification.StatusBarNotification
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.app.Instrumentation
|
||||
import android.graphics.Point
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
@file:JvmName("WaitUtils")
|
||||
|
||||
package com.android.wm.shell.flicker
|
||||
package com.android.wm.shell.flicker.utils
|
||||
|
||||
import android.os.SystemClock
|
||||
|
||||
Reference in New Issue
Block a user