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

Commit 8b603deb authored by Liran Binyamin's avatar Liran Binyamin
Browse files

Move bubble drag zone dimensions to xml

Change-Id: I3b71591c8a3d0517872569e3e81f2968aeabf7c2
Flag: EXEMPT not wired
Bug: 393172431
Test: atest DragZoneFactoryTest
parent e579b0d6
Loading
Loading
Loading
Loading
+19 −0
Original line number Original line Diff line number Diff line
@@ -17,4 +17,23 @@
<resources>
<resources>
    <dimen name="floating_dismiss_icon_size">32dp</dimen>
    <dimen name="floating_dismiss_icon_size">32dp</dimen>
    <dimen name="floating_dismiss_background_size">96dp</dimen>
    <dimen name="floating_dismiss_background_size">96dp</dimen>

    <!-- Bubble drag zone dimensions -->
    <dimen name="drag_zone_dismiss_fold">140dp</dimen>
    <dimen name="drag_zone_dismiss_tablet">200dp</dimen>
    <dimen name="drag_zone_bubble_fold">140dp</dimen>
    <dimen name="drag_zone_bubble_tablet">200dp</dimen>
    <dimen name="drag_zone_full_screen_width">512dp</dimen>
    <dimen name="drag_zone_full_screen_height">44dp</dimen>
    <dimen name="drag_zone_desktop_window_width">880dp</dimen>
    <dimen name="drag_zone_desktop_window_height">300dp</dimen>
    <dimen name="drag_zone_desktop_window_expanded_view_width">200dp</dimen>
    <dimen name="drag_zone_desktop_window_expanded_view_height">350dp</dimen>
    <dimen name="drag_zone_split_from_bubble_height">100dp</dimen>
    <dimen name="drag_zone_split_from_bubble_width">60dp</dimen>
    <dimen name="drag_zone_h_split_from_expanded_view_width">60dp</dimen>
    <dimen name="drag_zone_v_split_from_expanded_view_width">200dp</dimen>
    <dimen name="drag_zone_v_split_from_expanded_view_height_tablet">285dp</dimen>
    <dimen name="drag_zone_v_split_from_expanded_view_height_fold_tall">150dp</dimen>
    <dimen name="drag_zone_v_split_from_expanded_view_height_fold_short">100dp</dimen>
</resources>
</resources>
 No newline at end of file
+63 −17
Original line number Original line Diff line number Diff line
@@ -16,11 +16,15 @@


package com.android.wm.shell.shared.bubbles
package com.android.wm.shell.shared.bubbles


import android.content.Context
import android.graphics.Rect
import android.graphics.Rect
import androidx.annotation.DimenRes
import com.android.wm.shell.shared.R
import com.android.wm.shell.shared.bubbles.DragZoneFactory.SplitScreenModeChecker.SplitScreenMode
import com.android.wm.shell.shared.bubbles.DragZoneFactory.SplitScreenModeChecker.SplitScreenMode


/** A class for creating drag zones for dragging bubble objects or dragging into bubbles. */
/** A class for creating drag zones for dragging bubble objects or dragging into bubbles. */
class DragZoneFactory(
class DragZoneFactory(
    private val context: Context,
    private val deviceConfig: DeviceConfig,
    private val deviceConfig: DeviceConfig,
    private val splitScreenModeChecker: SplitScreenModeChecker,
    private val splitScreenModeChecker: SplitScreenModeChecker,
    private val desktopWindowModeChecker: DesktopWindowModeChecker,
    private val desktopWindowModeChecker: DesktopWindowModeChecker,
@@ -29,23 +33,65 @@ class DragZoneFactory(
    private val windowBounds: Rect
    private val windowBounds: Rect
        get() = deviceConfig.windowBounds
        get() = deviceConfig.windowBounds


    // TODO b/393172431: move these to xml
    private var dismissDragZoneSize = 0
    private val dismissDragZoneSize = if (deviceConfig.isSmallTablet) 140 else 200
    private var bubbleDragZoneTabletSize = 0
    private val bubbleDragZoneTabletSize = 200
    private var bubbleDragZoneFoldableSize = 0
    private val bubbleDragZoneFoldableSize = 140
    private var fullScreenDragZoneWidth = 0
    private val fullScreenDragZoneWidth = 512
    private var fullScreenDragZoneHeight = 0
    private val fullScreenDragZoneHeight = 44
    private var desktopWindowDragZoneWidth = 0
    private val desktopWindowDragZoneWidth = 880
    private var desktopWindowDragZoneHeight = 0
    private val desktopWindowDragZoneHeight = 300
    private var desktopWindowFromExpandedViewDragZoneWidth = 0
    private val desktopWindowFromExpandedViewDragZoneWidth = 200
    private var desktopWindowFromExpandedViewDragZoneHeight = 0
    private val desktopWindowFromExpandedViewDragZoneHeight = 350
    private var splitFromBubbleDragZoneHeight = 0
    private val splitFromBubbleDragZoneHeight = 100
    private var splitFromBubbleDragZoneWidth = 0
    private val splitFromBubbleDragZoneWidth = 60
    private var hSplitFromExpandedViewDragZoneWidth = 0
    private val hSplitFromExpandedViewDragZoneWidth = 60
    private var vSplitFromExpandedViewDragZoneWidth = 0
    private val vSplitFromExpandedViewDragZoneWidth = 200
    private var vSplitFromExpandedViewDragZoneHeightTablet = 0
    private val vSplitFromExpandedViewDragZoneHeightTablet = 285
    private var vSplitFromExpandedViewDragZoneHeightFoldTall = 0
    private val vSplitFromExpandedViewDragZoneHeightFoldTall = 150
    private var vSplitFromExpandedViewDragZoneHeightFoldShort = 0
    private val vSplitFromExpandedViewDragZoneHeightFoldShort = 100

    init {
        onConfigurationUpdated()
    }

    /** Updates all dimensions after a configuration change. */
    fun onConfigurationUpdated() {
        dismissDragZoneSize =
            if (deviceConfig.isSmallTablet) {
                context.resolveDimension(R.dimen.drag_zone_dismiss_fold)
            } else {
                context.resolveDimension(R.dimen.drag_zone_dismiss_tablet)
            }
        bubbleDragZoneTabletSize = context.resolveDimension(R.dimen.drag_zone_bubble_tablet)
        bubbleDragZoneFoldableSize = context.resolveDimension(R.dimen.drag_zone_bubble_fold)
        fullScreenDragZoneWidth = context.resolveDimension(R.dimen.drag_zone_full_screen_width)
        fullScreenDragZoneHeight = context.resolveDimension(R.dimen.drag_zone_full_screen_height)
        desktopWindowDragZoneWidth =
            context.resolveDimension(R.dimen.drag_zone_desktop_window_width)
        desktopWindowDragZoneHeight =
            context.resolveDimension(R.dimen.drag_zone_desktop_window_height)
        desktopWindowFromExpandedViewDragZoneWidth =
            context.resolveDimension(R.dimen.drag_zone_desktop_window_expanded_view_width)
        desktopWindowFromExpandedViewDragZoneHeight =
            context.resolveDimension(R.dimen.drag_zone_desktop_window_expanded_view_height)
        splitFromBubbleDragZoneHeight =
            context.resolveDimension(R.dimen.drag_zone_split_from_bubble_height)
        splitFromBubbleDragZoneWidth =
            context.resolveDimension(R.dimen.drag_zone_split_from_bubble_width)
        hSplitFromExpandedViewDragZoneWidth =
            context.resolveDimension(R.dimen.drag_zone_h_split_from_expanded_view_width)
        vSplitFromExpandedViewDragZoneWidth =
            context.resolveDimension(R.dimen.drag_zone_v_split_from_expanded_view_width)
        vSplitFromExpandedViewDragZoneHeightTablet =
            context.resolveDimension(R.dimen.drag_zone_v_split_from_expanded_view_height_tablet)
        vSplitFromExpandedViewDragZoneHeightFoldTall =
            context.resolveDimension(R.dimen.drag_zone_v_split_from_expanded_view_height_fold_tall)
        vSplitFromExpandedViewDragZoneHeightFoldShort =
            context.resolveDimension(R.dimen.drag_zone_v_split_from_expanded_view_height_fold_short)
    }

    private fun Context.resolveDimension(@DimenRes dimension: Int) =
        resources.getDimensionPixelSize(dimension)


    /**
    /**
     * Creates the list of drag zones for the dragged object.
     * Creates the list of drag zones for the dragged object.
+89 −15
Original line number Original line Diff line number Diff line
@@ -16,8 +16,10 @@


package com.android.wm.shell.shared.bubbles
package com.android.wm.shell.shared.bubbles


import android.content.Context
import android.graphics.Insets
import android.graphics.Insets
import android.graphics.Rect
import android.graphics.Rect
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.filters.SmallTest
import com.android.wm.shell.shared.bubbles.DragZoneFactory.DesktopWindowModeChecker
import com.android.wm.shell.shared.bubbles.DragZoneFactory.DesktopWindowModeChecker
@@ -34,6 +36,7 @@ private typealias DragZoneVerifier = (dragZone: DragZone) -> Unit
/** Unit tests for [DragZoneFactory]. */
/** Unit tests for [DragZoneFactory]. */
class DragZoneFactoryTest {
class DragZoneFactoryTest {


    private val context = getApplicationContext<Context>()
    private lateinit var dragZoneFactory: DragZoneFactory
    private lateinit var dragZoneFactory: DragZoneFactory
    private val tabletPortrait =
    private val tabletPortrait =
        DeviceConfig(
        DeviceConfig(
@@ -57,7 +60,12 @@ class DragZoneFactoryTest {
    @Test
    @Test
    fun dragZonesForBubbleBar_tablet() {
    fun dragZonesForBubbleBar_tablet() {
        dragZoneFactory =
        dragZoneFactory =
            DragZoneFactory(tabletPortrait, splitScreenModeChecker, desktopWindowModeChecker)
            DragZoneFactory(
                context,
                tabletPortrait,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.BubbleBar(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(DraggedObject.BubbleBar(BubbleBarLocation.LEFT))
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
@@ -73,7 +81,12 @@ class DragZoneFactoryTest {
    @Test
    @Test
    fun dragZonesForBubble_tablet_portrait() {
    fun dragZonesForBubble_tablet_portrait() {
        dragZoneFactory =
        dragZoneFactory =
            DragZoneFactory(tabletPortrait, splitScreenModeChecker, desktopWindowModeChecker)
            DragZoneFactory(
                context,
                tabletPortrait,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
@@ -92,7 +105,13 @@ class DragZoneFactoryTest {


    @Test
    @Test
    fun dragZonesForBubble_tablet_landscape() {
    fun dragZonesForBubble_tablet_landscape() {
        dragZoneFactory = DragZoneFactory(tabletLandscape, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                tabletLandscape,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
@@ -111,7 +130,13 @@ class DragZoneFactoryTest {


    @Test
    @Test
    fun dragZonesForBubble_foldable_portrait() {
    fun dragZonesForBubble_foldable_portrait() {
        dragZoneFactory = DragZoneFactory(foldablePortrait, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                foldablePortrait,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
@@ -129,7 +154,13 @@ class DragZoneFactoryTest {


    @Test
    @Test
    fun dragZonesForBubble_foldable_landscape() {
    fun dragZonesForBubble_foldable_landscape() {
        dragZoneFactory = DragZoneFactory(foldableLandscape, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                foldableLandscape,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
@@ -148,7 +179,12 @@ class DragZoneFactoryTest {
    @Test
    @Test
    fun dragZonesForExpandedView_tablet_portrait() {
    fun dragZonesForExpandedView_tablet_portrait() {
        dragZoneFactory =
        dragZoneFactory =
            DragZoneFactory(tabletPortrait, splitScreenModeChecker, desktopWindowModeChecker)
            DragZoneFactory(
                context,
                tabletPortrait,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(
            dragZoneFactory.createSortedDragZones(
                DraggedObject.ExpandedView(BubbleBarLocation.LEFT)
                DraggedObject.ExpandedView(BubbleBarLocation.LEFT)
@@ -169,9 +205,17 @@ class DragZoneFactoryTest {


    @Test
    @Test
    fun dragZonesForExpandedView_tablet_landscape() {
    fun dragZonesForExpandedView_tablet_landscape() {
        dragZoneFactory = DragZoneFactory(tabletLandscape, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                tabletLandscape,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.ExpandedView(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(
                DraggedObject.ExpandedView(BubbleBarLocation.LEFT)
            )
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
            listOf(
            listOf(
                verifyInstance<DragZone.Dismiss>(),
                verifyInstance<DragZone.Dismiss>(),
@@ -188,9 +232,17 @@ class DragZoneFactoryTest {


    @Test
    @Test
    fun dragZonesForExpandedView_foldable_portrait() {
    fun dragZonesForExpandedView_foldable_portrait() {
        dragZoneFactory = DragZoneFactory(foldablePortrait, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                foldablePortrait,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.ExpandedView(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(
                DraggedObject.ExpandedView(BubbleBarLocation.LEFT)
            )
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
            listOf(
            listOf(
                verifyInstance<DragZone.Dismiss>(),
                verifyInstance<DragZone.Dismiss>(),
@@ -206,9 +258,17 @@ class DragZoneFactoryTest {


    @Test
    @Test
    fun dragZonesForExpandedView_foldable_landscape() {
    fun dragZonesForExpandedView_foldable_landscape() {
        dragZoneFactory = DragZoneFactory(foldableLandscape, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                foldableLandscape,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.ExpandedView(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(
                DraggedObject.ExpandedView(BubbleBarLocation.LEFT)
            )
        val expectedZones: List<DragZoneVerifier> =
        val expectedZones: List<DragZoneVerifier> =
            listOf(
            listOf(
                verifyInstance<DragZone.Dismiss>(),
                verifyInstance<DragZone.Dismiss>(),
@@ -225,7 +285,13 @@ class DragZoneFactoryTest {
    @Test
    @Test
    fun dragZonesForBubble_tablet_desktopModeDisabled() {
    fun dragZonesForBubble_tablet_desktopModeDisabled() {
        isDesktopWindowModeSupported = false
        isDesktopWindowModeSupported = false
        dragZoneFactory = DragZoneFactory(foldableLandscape, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                foldableLandscape,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(DraggedObject.Bubble(BubbleBarLocation.LEFT))
        assertThat(dragZones.filterIsInstance<DragZone.DesktopWindow>()).isEmpty()
        assertThat(dragZones.filterIsInstance<DragZone.DesktopWindow>()).isEmpty()
@@ -234,9 +300,17 @@ class DragZoneFactoryTest {
    @Test
    @Test
    fun dragZonesForExpandedView_tablet_desktopModeDisabled() {
    fun dragZonesForExpandedView_tablet_desktopModeDisabled() {
        isDesktopWindowModeSupported = false
        isDesktopWindowModeSupported = false
        dragZoneFactory = DragZoneFactory(foldableLandscape, splitScreenModeChecker, desktopWindowModeChecker)
        dragZoneFactory =
            DragZoneFactory(
                context,
                foldableLandscape,
                splitScreenModeChecker,
                desktopWindowModeChecker
            )
        val dragZones =
        val dragZones =
            dragZoneFactory.createSortedDragZones(DraggedObject.ExpandedView(BubbleBarLocation.LEFT))
            dragZoneFactory.createSortedDragZones(
                DraggedObject.ExpandedView(BubbleBarLocation.LEFT)
            )
        assertThat(dragZones.filterIsInstance<DragZone.DesktopWindow>()).isEmpty()
        assertThat(dragZones.filterIsInstance<DragZone.DesktopWindow>()).isEmpty()
    }
    }