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

Commit 7bbda01b authored by Liran Binyamin's avatar Liran Binyamin Committed by Android (Google) Code Review
Browse files

Merge "Move bubble drag zone dimensions to xml" into main

parents 4a35902d 8b603deb
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -17,4 +17,23 @@
<resources>
    <dimen name="floating_dismiss_icon_size">32dp</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>
 No newline at end of file
+63 −17
Original line number Diff line number Diff line
@@ -16,11 +16,15 @@

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

import android.content.Context
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

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

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

    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.
+89 −15
Original line number Diff line number Diff line
@@ -16,8 +16,10 @@

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

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

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

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

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

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

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

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

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