Loading libs/WindowManager/Shell/tests/flicker/Android.bp +7 −1 Original line number Diff line number Diff line Loading @@ -25,11 +25,17 @@ package { android_test { name: "WMShellFlickerTests", srcs: ["src/**/*.java", "src/**/*.kt"], srcs: [ "src/**/*.java", "src/**/*.kt", ], manifest: "AndroidManifest.xml", test_config: "AndroidTest.xml", platform_apis: true, certificate: "platform", optimize: { enabled: false, }, test_suites: ["device-tests"], libs: ["android.test.runner"], static_libs: [ Loading libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt +33 −30 Original line number Diff line number Diff line Loading @@ -16,97 +16,100 @@ package com.android.wm.shell.flicker import android.content.ComponentName import android.graphics.Region import android.view.Surface import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.traces.layers.getVisibleBounds fun FlickerTestParameter.appPairsDividerIsVisible() { fun FlickerTestParameter.appPairsDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(APP_PAIR_SPLIT_DIVIDER) this.isVisible(APP_PAIR_SPLIT_DIVIDER_COMPONENT) } } fun FlickerTestParameter.appPairsDividerIsInvisible() { fun FlickerTestParameter.appPairsDividerIsInvisibleAtEnd() { assertLayersEnd { this.notContains(APP_PAIR_SPLIT_DIVIDER) this.notContains(APP_PAIR_SPLIT_DIVIDER_COMPONENT) } } fun FlickerTestParameter.appPairsDividerBecomesVisible() { assertLayers { this.isInvisible(DOCKED_STACK_DIVIDER) this.isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() .isVisible(DOCKED_STACK_DIVIDER) .isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerIsVisible() { fun FlickerTestParameter.dockedStackDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(DOCKED_STACK_DIVIDER) this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerBecomesVisible() { assertLayers { this.isInvisible(DOCKED_STACK_DIVIDER) this.isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() .isVisible(DOCKED_STACK_DIVIDER) .isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerBecomesInvisible() { assertLayers { this.isVisible(DOCKED_STACK_DIVIDER) this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() .isInvisible(DOCKED_STACK_DIVIDER) .isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerIsInvisible() { fun FlickerTestParameter.dockedStackDividerNotExistsAtEnd() { assertLayersEnd { this.notContains(DOCKED_STACK_DIVIDER) this.notContains(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.appPairsPrimaryBoundsIsVisible(rotation: Int, primaryLayerName: String) { fun FlickerTestParameter.appPairsPrimaryBoundsIsVisibleAtEnd( rotation: Int, primaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER) visibleRegion(primaryLayerName) val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(primaryComponent) .coversExactly(getPrimaryRegion(dividerRegion, rotation)) } } fun FlickerTestParameter.dockedStackPrimaryBoundsIsVisible( fun FlickerTestParameter.dockedStackPrimaryBoundsIsVisibleAtEnd( rotation: Int, primaryLayerName: String primaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(DOCKED_STACK_DIVIDER) visibleRegion(primaryLayerName) val dividerRegion = layer(DOCKED_STACK_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(primaryComponent) .coversExactly(getPrimaryRegion(dividerRegion, rotation)) } } fun FlickerTestParameter.appPairsSecondaryBoundsIsVisible( fun FlickerTestParameter.appPairsSecondaryBoundsIsVisibleAtEnd( rotation: Int, secondaryLayerName: String secondaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER) visibleRegion(secondaryLayerName) val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(secondaryComponent) .coversExactly(getSecondaryRegion(dividerRegion, rotation)) } } fun FlickerTestParameter.dockedStackSecondaryBoundsIsVisible( fun FlickerTestParameter.dockedStackSecondaryBoundsIsVisibleAtEnd( rotation: Int, secondaryLayerName: String secondaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(DOCKED_STACK_DIVIDER) visibleRegion(secondaryLayerName) val dividerRegion = layer(DOCKED_STACK_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(secondaryComponent) .coversExactly(getSecondaryRegion(dividerRegion, rotation)) } } Loading libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt +5 −3 Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ * limitations under the License. */ @file:JvmName("CommonConstants") package com.android.wm.shell.flicker const val IME_WINDOW_NAME = "InputMethod" import android.content.ComponentName const val SYSTEM_UI_PACKAGE_NAME = "com.android.systemui" const val APP_PAIR_SPLIT_DIVIDER = "AppPairSplitDivider" const val DOCKED_STACK_DIVIDER = "DockedStackDivider" No newline at end of file val APP_PAIR_SPLIT_DIVIDER_COMPONENT = ComponentName("", "AppPairSplitDivider#") val DOCKED_STACK_DIVIDER_COMPONENT = ComponentName("", "DockedStackDivider#") No newline at end of file libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestCannotPairNonResizeableApps.kt +7 −10 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.wm.shell.flicker.apppairs import android.os.SystemClock import android.platform.test.annotations.Presubmit import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice Loading @@ -25,7 +24,7 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.wm.shell.flicker.appPairsDividerIsInvisible import com.android.wm.shell.flicker.appPairsDividerIsInvisibleAtEnd 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 Loading Loading @@ -61,7 +60,7 @@ class AppPairsTestCannotPairNonResizeableApps( // TODO pair apps through normal UX flow executeShellCommand( composePairsCommand(primaryTaskId, nonResizeableTaskId, pair = true)) SystemClock.sleep(AppPairsHelper.TIMEOUT_MS) nonResizeableApp?.run { wmHelper.waitForFullScreenApp(nonResizeableApp.component) } } } Loading @@ -85,15 +84,13 @@ class AppPairsTestCannotPairNonResizeableApps( @Test override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales() @FlakyTest @Presubmit @Test override fun navBarLayerIsAlwaysVisible() { super.navBarLayerIsAlwaysVisible() } override fun navBarLayerIsVisible() = super.navBarLayerIsVisible() @Presubmit @Test fun appPairsDividerIsInvisible() = testSpec.appPairsDividerIsInvisible() fun appPairsDividerIsInvisibleAtEnd() = testSpec.appPairsDividerIsInvisibleAtEnd() @Presubmit @Test Loading @@ -103,8 +100,8 @@ class AppPairsTestCannotPairNonResizeableApps( "Non resizeable app not initialized" } testSpec.assertWmEnd { isVisible(nonResizeableApp.defaultWindowName) isInvisible(primaryApp.defaultWindowName) isVisible(nonResizeableApp.component) isInvisible(primaryApp.component) } } Loading libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestPairPrimaryAndSecondaryApps.kt +14 −11 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.wm.shell.flicker.apppairs import android.os.SystemClock import android.platform.test.annotations.Presubmit import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice Loading @@ -25,10 +24,10 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.traces.layers.getVisibleBounds import com.android.wm.shell.flicker.APP_PAIR_SPLIT_DIVIDER import com.android.wm.shell.flicker.appPairsDividerIsVisible import com.android.wm.shell.flicker.APP_PAIR_SPLIT_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd import com.android.wm.shell.flicker.helpers.AppPairsHelper import com.android.wm.shell.flicker.helpers.AppPairsHelper.Companion.waitAppsShown import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith Loading @@ -54,10 +53,14 @@ class AppPairsTestPairPrimaryAndSecondaryApps( // TODO pair apps through normal UX flow executeShellCommand( composePairsCommand(primaryTaskId, secondaryTaskId, pair = true)) SystemClock.sleep(AppPairsHelper.TIMEOUT_MS) waitAppsShown(primaryApp, secondaryApp) } } @Presubmit @Test override fun navBarLayerIsVisible() = super.navBarLayerIsVisible() @FlakyTest @Test override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() Loading @@ -68,14 +71,14 @@ class AppPairsTestPairPrimaryAndSecondaryApps( @Presubmit @Test fun appPairsDividerIsVisible() = testSpec.appPairsDividerIsVisible() fun appPairsDividerIsVisibleAtEnd() = testSpec.appPairsDividerIsVisibleAtEnd() @Presubmit @Test fun bothAppWindowsVisible() { testSpec.assertWmEnd { isVisible(primaryApp.defaultWindowName) isVisible(secondaryApp.defaultWindowName) isVisible(primaryApp.component) isVisible(secondaryApp.component) } } Loading @@ -83,10 +86,10 @@ class AppPairsTestPairPrimaryAndSecondaryApps( @Test fun appsEndingBounds() { testSpec.assertLayersEnd { val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER) visibleRegion(primaryApp.defaultWindowName) val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(primaryApp.component) .coversExactly(appPairsHelper.getPrimaryBounds(dividerRegion)) visibleRegion(secondaryApp.defaultWindowName) visibleRegion(secondaryApp.component) .coversExactly(appPairsHelper.getSecondaryBounds(dividerRegion)) } } Loading Loading
libs/WindowManager/Shell/tests/flicker/Android.bp +7 −1 Original line number Diff line number Diff line Loading @@ -25,11 +25,17 @@ package { android_test { name: "WMShellFlickerTests", srcs: ["src/**/*.java", "src/**/*.kt"], srcs: [ "src/**/*.java", "src/**/*.kt", ], manifest: "AndroidManifest.xml", test_config: "AndroidTest.xml", platform_apis: true, certificate: "platform", optimize: { enabled: false, }, test_suites: ["device-tests"], libs: ["android.test.runner"], static_libs: [ Loading
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt +33 −30 Original line number Diff line number Diff line Loading @@ -16,97 +16,100 @@ package com.android.wm.shell.flicker import android.content.ComponentName import android.graphics.Region import android.view.Surface import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.helpers.WindowUtils import com.android.server.wm.flicker.traces.layers.getVisibleBounds fun FlickerTestParameter.appPairsDividerIsVisible() { fun FlickerTestParameter.appPairsDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(APP_PAIR_SPLIT_DIVIDER) this.isVisible(APP_PAIR_SPLIT_DIVIDER_COMPONENT) } } fun FlickerTestParameter.appPairsDividerIsInvisible() { fun FlickerTestParameter.appPairsDividerIsInvisibleAtEnd() { assertLayersEnd { this.notContains(APP_PAIR_SPLIT_DIVIDER) this.notContains(APP_PAIR_SPLIT_DIVIDER_COMPONENT) } } fun FlickerTestParameter.appPairsDividerBecomesVisible() { assertLayers { this.isInvisible(DOCKED_STACK_DIVIDER) this.isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() .isVisible(DOCKED_STACK_DIVIDER) .isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerIsVisible() { fun FlickerTestParameter.dockedStackDividerIsVisibleAtEnd() { assertLayersEnd { this.isVisible(DOCKED_STACK_DIVIDER) this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerBecomesVisible() { assertLayers { this.isInvisible(DOCKED_STACK_DIVIDER) this.isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() .isVisible(DOCKED_STACK_DIVIDER) .isVisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerBecomesInvisible() { assertLayers { this.isVisible(DOCKED_STACK_DIVIDER) this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT) .then() .isInvisible(DOCKED_STACK_DIVIDER) .isInvisible(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.dockedStackDividerIsInvisible() { fun FlickerTestParameter.dockedStackDividerNotExistsAtEnd() { assertLayersEnd { this.notContains(DOCKED_STACK_DIVIDER) this.notContains(DOCKED_STACK_DIVIDER_COMPONENT) } } fun FlickerTestParameter.appPairsPrimaryBoundsIsVisible(rotation: Int, primaryLayerName: String) { fun FlickerTestParameter.appPairsPrimaryBoundsIsVisibleAtEnd( rotation: Int, primaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER) visibleRegion(primaryLayerName) val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(primaryComponent) .coversExactly(getPrimaryRegion(dividerRegion, rotation)) } } fun FlickerTestParameter.dockedStackPrimaryBoundsIsVisible( fun FlickerTestParameter.dockedStackPrimaryBoundsIsVisibleAtEnd( rotation: Int, primaryLayerName: String primaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(DOCKED_STACK_DIVIDER) visibleRegion(primaryLayerName) val dividerRegion = layer(DOCKED_STACK_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(primaryComponent) .coversExactly(getPrimaryRegion(dividerRegion, rotation)) } } fun FlickerTestParameter.appPairsSecondaryBoundsIsVisible( fun FlickerTestParameter.appPairsSecondaryBoundsIsVisibleAtEnd( rotation: Int, secondaryLayerName: String secondaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER) visibleRegion(secondaryLayerName) val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(secondaryComponent) .coversExactly(getSecondaryRegion(dividerRegion, rotation)) } } fun FlickerTestParameter.dockedStackSecondaryBoundsIsVisible( fun FlickerTestParameter.dockedStackSecondaryBoundsIsVisibleAtEnd( rotation: Int, secondaryLayerName: String secondaryComponent: ComponentName ) { assertLayersEnd { val dividerRegion = entry.getVisibleBounds(DOCKED_STACK_DIVIDER) visibleRegion(secondaryLayerName) val dividerRegion = layer(DOCKED_STACK_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(secondaryComponent) .coversExactly(getSecondaryRegion(dividerRegion, rotation)) } } Loading
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt +5 −3 Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ * limitations under the License. */ @file:JvmName("CommonConstants") package com.android.wm.shell.flicker const val IME_WINDOW_NAME = "InputMethod" import android.content.ComponentName const val SYSTEM_UI_PACKAGE_NAME = "com.android.systemui" const val APP_PAIR_SPLIT_DIVIDER = "AppPairSplitDivider" const val DOCKED_STACK_DIVIDER = "DockedStackDivider" No newline at end of file val APP_PAIR_SPLIT_DIVIDER_COMPONENT = ComponentName("", "AppPairSplitDivider#") val DOCKED_STACK_DIVIDER_COMPONENT = ComponentName("", "DockedStackDivider#") No newline at end of file
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestCannotPairNonResizeableApps.kt +7 −10 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.wm.shell.flicker.apppairs import android.os.SystemClock import android.platform.test.annotations.Presubmit import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice Loading @@ -25,7 +24,7 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.wm.shell.flicker.appPairsDividerIsInvisible import com.android.wm.shell.flicker.appPairsDividerIsInvisibleAtEnd 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 Loading Loading @@ -61,7 +60,7 @@ class AppPairsTestCannotPairNonResizeableApps( // TODO pair apps through normal UX flow executeShellCommand( composePairsCommand(primaryTaskId, nonResizeableTaskId, pair = true)) SystemClock.sleep(AppPairsHelper.TIMEOUT_MS) nonResizeableApp?.run { wmHelper.waitForFullScreenApp(nonResizeableApp.component) } } } Loading @@ -85,15 +84,13 @@ class AppPairsTestCannotPairNonResizeableApps( @Test override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales() @FlakyTest @Presubmit @Test override fun navBarLayerIsAlwaysVisible() { super.navBarLayerIsAlwaysVisible() } override fun navBarLayerIsVisible() = super.navBarLayerIsVisible() @Presubmit @Test fun appPairsDividerIsInvisible() = testSpec.appPairsDividerIsInvisible() fun appPairsDividerIsInvisibleAtEnd() = testSpec.appPairsDividerIsInvisibleAtEnd() @Presubmit @Test Loading @@ -103,8 +100,8 @@ class AppPairsTestCannotPairNonResizeableApps( "Non resizeable app not initialized" } testSpec.assertWmEnd { isVisible(nonResizeableApp.defaultWindowName) isInvisible(primaryApp.defaultWindowName) isVisible(nonResizeableApp.component) isInvisible(primaryApp.component) } } Loading
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestPairPrimaryAndSecondaryApps.kt +14 −11 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.wm.shell.flicker.apppairs import android.os.SystemClock import android.platform.test.annotations.Presubmit import androidx.test.filters.FlakyTest import androidx.test.filters.RequiresDevice Loading @@ -25,10 +24,10 @@ import com.android.server.wm.flicker.FlickerTestParameter import com.android.server.wm.flicker.FlickerTestParameterFactory import com.android.server.wm.flicker.annotation.Group1 import com.android.server.wm.flicker.dsl.FlickerBuilder import com.android.server.wm.flicker.traces.layers.getVisibleBounds import com.android.wm.shell.flicker.APP_PAIR_SPLIT_DIVIDER import com.android.wm.shell.flicker.appPairsDividerIsVisible import com.android.wm.shell.flicker.APP_PAIR_SPLIT_DIVIDER_COMPONENT import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd import com.android.wm.shell.flicker.helpers.AppPairsHelper import com.android.wm.shell.flicker.helpers.AppPairsHelper.Companion.waitAppsShown import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith Loading @@ -54,10 +53,14 @@ class AppPairsTestPairPrimaryAndSecondaryApps( // TODO pair apps through normal UX flow executeShellCommand( composePairsCommand(primaryTaskId, secondaryTaskId, pair = true)) SystemClock.sleep(AppPairsHelper.TIMEOUT_MS) waitAppsShown(primaryApp, secondaryApp) } } @Presubmit @Test override fun navBarLayerIsVisible() = super.navBarLayerIsVisible() @FlakyTest @Test override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales() Loading @@ -68,14 +71,14 @@ class AppPairsTestPairPrimaryAndSecondaryApps( @Presubmit @Test fun appPairsDividerIsVisible() = testSpec.appPairsDividerIsVisible() fun appPairsDividerIsVisibleAtEnd() = testSpec.appPairsDividerIsVisibleAtEnd() @Presubmit @Test fun bothAppWindowsVisible() { testSpec.assertWmEnd { isVisible(primaryApp.defaultWindowName) isVisible(secondaryApp.defaultWindowName) isVisible(primaryApp.component) isVisible(secondaryApp.component) } } Loading @@ -83,10 +86,10 @@ class AppPairsTestPairPrimaryAndSecondaryApps( @Test fun appsEndingBounds() { testSpec.assertLayersEnd { val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER) visibleRegion(primaryApp.defaultWindowName) val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region visibleRegion(primaryApp.component) .coversExactly(appPairsHelper.getPrimaryBounds(dividerRegion)) visibleRegion(secondaryApp.defaultWindowName) visibleRegion(secondaryApp.component) .coversExactly(appPairsHelper.getSecondaryBounds(dividerRegion)) } } Loading