diff options
author | 2025-02-14 18:17:45 -0500 | |
---|---|---|
committer | 2025-02-14 18:17:45 -0500 | |
commit | 10dbeba07426ebc7c9a80e68d8608fd19ce5497e (patch) | |
tree | 7d3e66732b6f999cac99a8697d8dfd7976f780c3 | |
parent | b04e0f116a05ff080bcb2cb5338b1ee72ca24fcb (diff) |
Add screen test for DragZoneFactory
Flag: EXEMPT test only
Fix: 394133104
Test: atest DragZoneFactoryScreenshotTest
Change-Id: I23ea100bf428b020dc7ea4d69e810f1940057951
19 files changed, 170 insertions, 0 deletions
diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble.png Binary files differnew file mode 100644 index 000000000000..15198748eea5 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubbleBar.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubbleBar.png Binary files differnew file mode 100644 index 000000000000..99673f6400e9 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubbleBar.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble_split_10_90.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble_split_10_90.png Binary files differnew file mode 100644 index 000000000000..ba4ebab75a7e --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble_split_10_90.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble_split_90_10.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble_split_90_10.png Binary files differnew file mode 100644 index 000000000000..b3ff64401a96 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_bubble_split_90_10.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView.png Binary files differnew file mode 100644 index 000000000000..534e320a0596 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView_split_10_90.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView_split_10_90.png Binary files differnew file mode 100644 index 000000000000..67c9f49171ba --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView_split_10_90.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView_split_90_10.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView_split_90_10.png Binary files differnew file mode 100644 index 000000000000..a0fb4902a6f3 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_landscape_dragZones_expandedView_split_90_10.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble.png Binary files differnew file mode 100644 index 000000000000..27b35d447868 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubbleBar.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubbleBar.png Binary files differnew file mode 100644 index 000000000000..11528a028a8f --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubbleBar.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble_split_10_90.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble_split_10_90.png Binary files differnew file mode 100644 index 000000000000..ef9937700c08 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble_split_10_90.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble_split_90_10.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble_split_90_10.png Binary files differnew file mode 100644 index 000000000000..f0cf08bfcf4e --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_bubble_split_90_10.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_expandedView.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_expandedView.png Binary files differnew file mode 100644 index 000000000000..bbaafb39845a --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/foldable_inner/light_portrait_dragZones_expandedView.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_bubble.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_bubble.png Binary files differnew file mode 100644 index 000000000000..38ebf3f3201a --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_bubble.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_bubbleBar.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_bubbleBar.png Binary files differnew file mode 100644 index 000000000000..2e4fd51e3932 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_bubbleBar.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_expandedView.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_expandedView.png Binary files differnew file mode 100644 index 000000000000..a1ba9fb50d6a --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_landscape_dragZones_expandedView.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_bubble.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_bubble.png Binary files differnew file mode 100644 index 000000000000..51bb15e10d30 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_bubble.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_bubbleBar.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_bubbleBar.png Binary files differnew file mode 100644 index 000000000000..b643e2a69b2c --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_bubbleBar.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_expandedView.png b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_expandedView.png Binary files differnew file mode 100644 index 000000000000..e6eeab7129be --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/goldens/onDevice/tablet/light_portrait_dragZones_expandedView.png diff --git a/libs/WindowManager/Shell/multivalentScreenshotTests/src/com/android/wm/shell/shared/bubbles/DragZoneFactoryScreenshotTest.kt b/libs/WindowManager/Shell/multivalentScreenshotTests/src/com/android/wm/shell/shared/bubbles/DragZoneFactoryScreenshotTest.kt new file mode 100644 index 000000000000..24f43d347163 --- /dev/null +++ b/libs/WindowManager/Shell/multivalentScreenshotTests/src/com/android/wm/shell/shared/bubbles/DragZoneFactoryScreenshotTest.kt @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2025 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.shared.bubbles + +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.Drawable +import android.graphics.drawable.GradientDrawable +import android.view.View +import android.view.WindowManager +import android.widget.FrameLayout +import androidx.annotation.ColorInt +import androidx.core.graphics.blue +import androidx.core.graphics.green +import androidx.core.graphics.red +import androidx.core.graphics.toColorInt +import androidx.test.core.app.ApplicationProvider.getApplicationContext +import com.android.wm.shell.shared.bubbles.DragZoneFactory.DesktopWindowModeChecker +import com.android.wm.shell.shared.bubbles.DragZoneFactory.SplitScreenModeChecker +import com.android.wm.shell.shared.bubbles.DragZoneFactory.SplitScreenModeChecker.SplitScreenMode +import com.android.wm.shell.testing.goldenpathmanager.WMShellGoldenPathManager +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import platform.test.runner.parameterized.ParameterizedAndroidJunit4 +import platform.test.runner.parameterized.Parameters +import platform.test.screenshot.DeviceEmulationSpec +import platform.test.screenshot.Displays +import platform.test.screenshot.ViewScreenshotTestRule +import platform.test.screenshot.ViewScreenshotTestRule.Mode +import platform.test.screenshot.getEmulatedDevicePathConfig + +@RunWith(ParameterizedAndroidJunit4::class) +class DragZoneFactoryScreenshotTest(private val param: Param) { + companion object { + @Parameters(name = "{0}") + @JvmStatic + fun getTestSpecs(): List<Param> { + val params = mutableListOf<Param>() + val draggedObjects = + listOf( + DraggedObject.Bubble(BubbleBarLocation.LEFT), + DraggedObject.BubbleBar(BubbleBarLocation.LEFT), + DraggedObject.ExpandedView(BubbleBarLocation.LEFT), + ) + DeviceEmulationSpec.forDisplays(Displays.Tablet, isDarkTheme = false).forEach { tablet + -> + draggedObjects.forEach { draggedObject -> + params.add(Param(tablet, draggedObject, SplitScreenMode.NONE)) + } + } + DeviceEmulationSpec.forDisplays(Displays.FoldableInner, isDarkTheme = false).forEach { + foldable -> + draggedObjects.forEach { draggedObject -> + params.add(Param(foldable, draggedObject, SplitScreenMode.NONE)) + val isBubble = draggedObject is DraggedObject.Bubble + val isExpandedView = draggedObject is DraggedObject.ExpandedView + val addMoreSplitModes = isBubble || (isExpandedView && foldable.isLandscape) + if (addMoreSplitModes) { + params.add(Param(foldable, draggedObject, SplitScreenMode.SPLIT_10_90)) + params.add(Param(foldable, draggedObject, SplitScreenMode.SPLIT_90_10)) + } + } + } + return params + } + } + + class Param( + val emulationSpec: DeviceEmulationSpec, + val draggedObject: DraggedObject, + val splitScreenMode: SplitScreenMode + ) { + private val draggedObjectName = + when (draggedObject) { + is DraggedObject.Bubble -> "bubble" + is DraggedObject.BubbleBar -> "bubbleBar" + is DraggedObject.ExpandedView -> "expandedView" + } + + private val splitScreenModeName = + when (splitScreenMode) { + SplitScreenMode.NONE -> "" + SplitScreenMode.SPLIT_50_50 -> "_split_50_50" + SplitScreenMode.SPLIT_10_90 -> "_split_10_90" + SplitScreenMode.SPLIT_90_10 -> "_split_90_10" + } + + val testName = "$draggedObjectName$splitScreenModeName" + + override fun toString() = "${emulationSpec}_$testName" + } + + @get:Rule + val screenshotRule = + ViewScreenshotTestRule( + param.emulationSpec, + WMShellGoldenPathManager(getEmulatedDevicePathConfig(param.emulationSpec)) + ) + + private val context = getApplicationContext<Context>() + + @Test + fun dragZones() { + screenshotRule.screenshotTest("dragZones_${param.testName}", mode = Mode.MatchSize) { + activity -> + activity.actionBar?.hide() + val dragZoneFactory = createDragZoneFactory() + val dragZones = dragZoneFactory.createSortedDragZones(param.draggedObject) + val container = FrameLayout(context) + dragZones.forEach { zone -> container.addZoneView(zone) } + container + } + } + + private fun createDragZoneFactory(): DragZoneFactory { + val deviceConfig = + DeviceConfig.create(context, context.getSystemService(WindowManager::class.java)!!) + val splitScreenModeChecker = SplitScreenModeChecker { param.splitScreenMode } + val desktopWindowModeChecker = DesktopWindowModeChecker { true } + return DragZoneFactory( + context, + deviceConfig, + splitScreenModeChecker, + desktopWindowModeChecker + ) + } + + private fun FrameLayout.addZoneView(zone: DragZone) { + val view = View(context) + this.addView(view, 0) + view.layoutParams = FrameLayout.LayoutParams(zone.bounds.width(), zone.bounds.height()) + view.background = createZoneDrawable(zone.color) + view.x = zone.bounds.left.toFloat() + view.y = zone.bounds.top.toFloat() + } + + private fun createZoneDrawable(@ColorInt color: Int): Drawable { + val shape = GradientDrawable() + shape.shape = GradientDrawable.RECTANGLE + shape.setColor(Color.argb(128, color.red, color.green, color.blue)) + shape.setStroke(2, color) + return shape + } + + private val DragZone.color: Int + @ColorInt + get() = + when (this) { + is DragZone.Bubble -> "#3F5C8B".toColorInt() + is DragZone.Dismiss -> "#8B3F3F".toColorInt() + is DragZone.Split -> "#89B675".toColorInt() + is DragZone.FullScreen -> "#4ED075".toColorInt() + is DragZone.DesktopWindow -> "#EC928E".toColorInt() + } +} |