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

Commit 1dea65a1 authored by Ats Jenk's avatar Ats Jenk
Browse files

Skip expanded view layout updates while animating

Do not modify bubble bar expanded view layout properties while it is
animating.
This was causing problems when converting a task to a bubble.
After ag/31701472 we immediately start the animation to convert a task
to bubble. And have launcher show the bubble bar in parallel.
After launcher has shown the bubble bar, it will attempt to update the
expanded view with the latest bubble bar top coordinate.
If this happens while the convert to bubble animation is running, it
will interrupt the animation progress.
Previously it was not a problem as we were waiting for launcher to
complete its work. Before starting the convert to bubble animation.
Added a check to not update the bubble bar expanded view layout while an
animation is playing.
There is still a jump-cut at the end of animation where the size of the
expanded view gets adjusted. That will be addressed as part of animation
improvements.

Bug: 396449031
Test: atest WMShellMultivalentTestsOnDevice:com.android.wm.shell.bubbles.bar.BubbleBarLayerViewTest
Test: atest WMShellRobolectricTests:com.android.wm.shell.bubbles.bar.BubbleBarLayerViewTest
Flag: com.android.wm.shell.enable_bubble_bar
Change-Id: Ibacd56459de0b7fc0897bacc7a00f927c4590e91
parent 0f6a9165
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -19,7 +19,9 @@ package com.android.wm.shell.bubbles.bar
import android.animation.AnimatorTestRule
import android.content.Context
import android.content.pm.LauncherApps
import android.graphics.Insets
import android.graphics.PointF
import android.graphics.Rect
import android.os.Handler
import android.os.UserManager
import android.view.IWindowManager
@@ -61,6 +63,7 @@ import com.android.wm.shell.common.TestShellExecutor
import com.android.wm.shell.shared.TransactionPool
import com.android.wm.shell.shared.animation.PhysicsAnimatorTestUtils
import com.android.wm.shell.shared.bubbles.BubbleBarLocation
import com.android.wm.shell.shared.bubbles.DeviceConfig
import com.android.wm.shell.sysui.ShellCommandHandler
import com.android.wm.shell.sysui.ShellController
import com.android.wm.shell.sysui.ShellInit
@@ -80,6 +83,10 @@ import org.mockito.kotlin.whenever
@SmallTest
@RunWith(AndroidJUnit4::class)
class BubbleBarLayerViewTest {
    companion object {
        const val SCREEN_WIDTH = 2000
        const val SCREEN_HEIGHT = 1000
    }

    @get:Rule val animatorTestRule: AnimatorTestRule = AnimatorTestRule(this)

@@ -111,6 +118,16 @@ class BubbleBarLayerViewTest {

        bubblePositioner = BubblePositioner(context, windowManager)
        bubblePositioner.setShowingInBubbleBar(true)
        val deviceConfig =
            DeviceConfig(
                windowBounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
                isLargeScreen = true,
                isSmallTablet = false,
                isLandscape = true,
                isRtl = false,
                insets = Insets.of(10, 20, 30, 40)
            )
        bubblePositioner.update(deviceConfig)

        testBubblesList = mutableListOf()
        val bubbleData = mock<BubbleData>()
@@ -313,6 +330,48 @@ class BubbleBarLayerViewTest {
        assertThat(uiEventLoggerFake.logs[0]).hasBubbleInfo(bubble)
    }

    @Test
    fun testUpdateExpandedView_updateLocation() {
        bubblePositioner.bubbleBarLocation = BubbleBarLocation.RIGHT
        val bubble = createBubble("first")

        getInstrumentation().runOnMainSync {
            bubbleBarLayerView.showExpandedView(bubble)
        }
        waitForExpandedViewAnimation()

        val previousX = bubble.bubbleBarExpandedView!!.x

        bubblePositioner.bubbleBarLocation = BubbleBarLocation.LEFT
        getInstrumentation().runOnMainSync {
            bubbleBarLayerView.updateExpandedView()
        }

        assertThat(bubble.bubbleBarExpandedView!!.x).isNotEqualTo(previousX)
    }

    @Test
    fun testUpdatedExpandedView_updateLocation_skipWhileAnimating() {
        bubblePositioner.bubbleBarLocation = BubbleBarLocation.RIGHT
        val bubble = createBubble("first")

        getInstrumentation().runOnMainSync {
            bubbleBarLayerView.showExpandedView(bubble)
        }
        waitForExpandedViewAnimation()

        val previousX = bubble.bubbleBarExpandedView!!.x
        bubble.bubbleBarExpandedView!!.isAnimating = true

        bubblePositioner.bubbleBarLocation = BubbleBarLocation.LEFT
        getInstrumentation().runOnMainSync {
            bubbleBarLayerView.updateExpandedView()
        }

        // Expanded view is not updated while animating
        assertThat(bubble.bubbleBarExpandedView!!.x).isEqualTo(previousX)
    }

    private fun createBubble(key: String): Bubble {
        val bubbleTaskView = FakeBubbleTaskViewFactory(context, mainExecutor).create()
        val bubbleBarExpandedView =
+1 −1
Original line number Diff line number Diff line
@@ -472,7 +472,7 @@ public class BubbleBarLayerView extends FrameLayout

    /** Updates the expanded view size and position. */
    public void updateExpandedView() {
        if (mExpandedView == null || mExpandedBubble == null) return;
        if (mExpandedView == null || mExpandedBubble == null || mExpandedView.isAnimating()) return;
        boolean isOverflowExpanded = mExpandedBubble.getKey().equals(BubbleOverflow.KEY);
        mPositioner.getBubbleBarExpandedViewBounds(mPositioner.isBubbleBarOnLeft(),
                isOverflowExpanded, mTempRect);