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

Commit f9e13dbf authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB][Screen Chips] Don't use DialogTransitionAnimator to launch dialogs

We were previously using the DialogTransitionAnimator to make a
beautiful animate-in animation when you tap on the chip -- the chip
gracefully turns into the dialog. But, this created some problems (see
linked bugs). This CL updates us to use the basic `dialog.show` instead.

Fixes: 350891338
Fixes: 347985465
Bug: 332662551
Flag: com.android.systemui.status_bar_screen_sharing_chips

Test: Start screen recording then stop -> verify that the chip doesn't
start using the wrong icon

Change-Id: I09deb7be96bf55a6e01315a7ede6a0b5623c7c41
parent d4a7ac67
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.chips.casttootherdevice.ui.viewmodel

import android.content.Context
import androidx.annotation.DrawableRes
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.dagger.SysUISingleton
@@ -58,7 +57,6 @@ constructor(
    private val mediaProjectionChipInteractor: MediaProjectionChipInteractor,
    private val mediaRouterChipInteractor: MediaRouterChipInteractor,
    private val systemClock: SystemClock,
    private val dialogTransitionAnimator: DialogTransitionAnimator,
    private val endMediaProjectionDialogHelper: EndMediaProjectionDialogHelper,
) : OngoingActivityChipViewModel {
    /**
@@ -175,7 +173,6 @@ constructor(
            startTimeMs = systemClock.elapsedRealtime(),
            createDialogLaunchOnClickListener(
                createCastScreenToOtherDeviceDialogDelegate(state),
                dialogTransitionAnimator,
            ),
        )
    }
@@ -191,7 +188,6 @@ constructor(
            colors = ColorsModel.Red,
            createDialogLaunchOnClickListener(
                createGenericCastToOtherDeviceDialogDelegate(deviceName),
                dialogTransitionAnimator,
            ),
        )
    }
+0 −3
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.chips.screenrecord.ui.viewmodel
import android.app.ActivityManager
import android.content.Context
import androidx.annotation.DrawableRes
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.dagger.SysUISingleton
@@ -52,7 +51,6 @@ constructor(
    private val interactor: ScreenRecordChipInteractor,
    private val systemClock: SystemClock,
    private val endMediaProjectionDialogHelper: EndMediaProjectionDialogHelper,
    private val dialogTransitionAnimator: DialogTransitionAnimator,
) : OngoingActivityChipViewModel {
    override val chip: StateFlow<OngoingActivityChipModel> =
        interactor.screenRecordState
@@ -78,7 +76,6 @@ constructor(
                            startTimeMs = systemClock.elapsedRealtime(),
                            createDialogLaunchOnClickListener(
                                createDelegate(state.recordedTask),
                                dialogTransitionAnimator,
                            ),
                        )
                    }
+1 −6
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.chips.sharetoapp.ui.viewmodel

import android.content.Context
import androidx.annotation.DrawableRes
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.dagger.SysUISingleton
@@ -52,7 +51,6 @@ constructor(
    private val context: Context,
    private val mediaProjectionChipInteractor: MediaProjectionChipInteractor,
    private val systemClock: SystemClock,
    private val dialogTransitionAnimator: DialogTransitionAnimator,
    private val endMediaProjectionDialogHelper: EndMediaProjectionDialogHelper,
) : OngoingActivityChipViewModel {
    override val chip: StateFlow<OngoingActivityChipModel> =
@@ -89,10 +87,7 @@ constructor(
            colors = ColorsModel.Red,
            // TODO(b/332662551): Maybe use a MediaProjection API to fetch this time.
            startTimeMs = systemClock.elapsedRealtime(),
            createDialogLaunchOnClickListener(
                createShareToAppDialogDelegate(state),
                dialogTransitionAnimator
            ),
            createDialogLaunchOnClickListener(createShareToAppDialogDelegate(state)),
        )
    }

+1 −13
Original line number Diff line number Diff line
@@ -17,10 +17,7 @@
package com.android.systemui.statusbar.chips.ui.viewmodel

import android.view.View
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.res.R
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.view.ChipBackgroundContainer
import com.android.systemui.statusbar.phone.SystemUIDialog
import kotlinx.coroutines.flow.StateFlow

@@ -36,19 +33,10 @@ interface OngoingActivityChipViewModel {
        /** Creates a chip click listener that launches a dialog created by [dialogDelegate]. */
        fun createDialogLaunchOnClickListener(
            dialogDelegate: SystemUIDialog.Delegate,
            dialogTransitionAnimator: DialogTransitionAnimator,
        ): View.OnClickListener {
            return View.OnClickListener { view ->
                val dialog = dialogDelegate.createDialog()
                val launchableView =
                    view.requireViewById<ChipBackgroundContainer>(
                        R.id.ongoing_activity_chip_background
                    )
                // TODO(b/343699052): This makes a beautiful animate-in, but the
                //  animate-out looks odd because the dialog animates back into the chip
                //  but then the chip disappears. If we aren't able to address
                //  b/343699052 in time for launch, we should just use `dialog.show`.
                dialogTransitionAnimator.showFromView(dialog, launchableView)
                dialog.show()
            }
        }
    }
+6 −39
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.chips.casttootherdevice.ui.viewmodel
import android.view.View
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.mockDialogTransitionAnimator
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.coroutines.collectLastValue
@@ -38,7 +37,6 @@ import com.android.systemui.statusbar.chips.mediaprojection.domain.interactor.Me
import com.android.systemui.statusbar.chips.mediaprojection.domain.interactor.MediaProjectionChipInteractorTest.Companion.setUpPackageManagerForMediaProjection
import com.android.systemui.statusbar.chips.ui.model.ColorsModel
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.view.ChipBackgroundContainer
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.phone.mockSystemUIDialogFactory
import com.android.systemui.statusbar.policy.CastDevice
@@ -47,9 +45,7 @@ import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.mockito.ArgumentMatchers
import org.mockito.kotlin.any
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
@@ -65,17 +61,6 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {
    private val mockScreenCastDialog = mock<SystemUIDialog>()
    private val mockGenericCastDialog = mock<SystemUIDialog>()

    private val chipBackgroundView = mock<ChipBackgroundContainer>()
    private val chipView =
        mock<View>().apply {
            whenever(
                    this.requireViewById<ChipBackgroundContainer>(
                        R.id.ongoing_activity_chip_background
                    )
                )
                .thenReturn(chipBackgroundView)
        }

    private val underTest = kosmos.castToOtherDeviceChipViewModel

    @Before
@@ -306,14 +291,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {
            val clickListener = ((latest as OngoingActivityChipModel.Shown).onClickListener)
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)
            verify(kosmos.mockDialogTransitionAnimator)
                .showFromView(
                    eq(mockScreenCastDialog),
                    eq(chipBackgroundView),
                    eq(null),
                    ArgumentMatchers.anyBoolean(),
                )
            clickListener!!.onClick(mock<View>())
            verify(mockScreenCastDialog).show()
        }

    @Test
@@ -330,14 +309,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {
            val clickListener = ((latest as OngoingActivityChipModel.Shown).onClickListener)
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)
            verify(kosmos.mockDialogTransitionAnimator)
                .showFromView(
                    eq(mockScreenCastDialog),
                    eq(chipBackgroundView),
                    eq(null),
                    ArgumentMatchers.anyBoolean(),
                )
            clickListener!!.onClick(mock<View>())
            verify(mockScreenCastDialog).show()
        }

    @Test
@@ -359,13 +332,7 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {
            val clickListener = ((latest as OngoingActivityChipModel.Shown).onClickListener)
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)
            verify(kosmos.mockDialogTransitionAnimator)
                .showFromView(
                    eq(mockGenericCastDialog),
                    eq(chipBackgroundView),
                    eq(null),
                    ArgumentMatchers.anyBoolean(),
                )
            clickListener!!.onClick(mock<View>())
            verify(mockGenericCastDialog).show()
        }
}
Loading