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

Commit e9405a0d authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Automerger Merge Worker
Browse files

Merge changes I373d54df,I3f839257 into tm-qpr-dev am: 5011c1a0 am: 87fd86c5

parents 0e29e36a 87fd86c5
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -485,7 +485,6 @@
-packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowStateController.kt
-packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewInfo.kt
-packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt
-packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt
-packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarRootView.kt
-packages/SystemUI/src/com/android/systemui/toast/ToastDefaultAnimation.kt
-packages/SystemUI/src/com/android/systemui/toast/ToastLogger.kt
+2 −0
Original line number Diff line number Diff line
@@ -2466,6 +2466,8 @@
    <string name="media_transfer_playing_different_device">Playing on <xliff:g id="deviceName" example="My Tablet">%1$s</xliff:g></string>
    <!-- Text informing the user that the media transfer has failed because something went wrong. [CHAR LIsMIT=50] -->
    <string name="media_transfer_failed">Something went wrong. Try again.</string>
    <!-- Text to indicate that a media transfer is currently in-progress, aka loading. [CHAR LIMIT=NONE] -->
    <string name="media_transfer_loading">Loading</string>

    <!-- Error message indicating that a control timed out while waiting for an update [CHAR_LIMIT=30] -->
    <string name="controls_error_timeout">Inactive, check app</string>
+50 −44
Original line number Diff line number Diff line
@@ -65,11 +65,11 @@ import javax.inject.Inject
 * in the list of notifications until the user dismisses them.
 *
 * Only one chipbar may be shown at a time.
 * TODO(b/245610654): Should we just display whichever chipbar was most recently requested, or do we
 *   need to maintain a priority ordering?
 */
@SysUISingleton
open class ChipbarCoordinator @Inject constructor(
open class ChipbarCoordinator
@Inject
constructor(
    context: Context,
    logger: ChipbarLogger,
    windowManager: WindowManager,
@@ -84,7 +84,8 @@ open class ChipbarCoordinator @Inject constructor(
    private val vibratorHelper: VibratorHelper,
    wakeLockBuilder: WakeLock.Builder,
    systemClock: SystemClock,
) : TemporaryViewDisplayController<ChipbarInfo, ChipbarLogger>(
) :
    TemporaryViewDisplayController<ChipbarInfo, ChipbarLogger>(
        context,
        logger,
        windowManager,
@@ -100,14 +101,10 @@ open class ChipbarCoordinator @Inject constructor(

    private lateinit var parent: ChipbarRootView

    override val windowLayoutParams = commonWindowLayoutParams.apply {
        gravity = Gravity.TOP.or(Gravity.CENTER_HORIZONTAL)
    }
    override val windowLayoutParams =
        commonWindowLayoutParams.apply { gravity = Gravity.TOP.or(Gravity.CENTER_HORIZONTAL) }

    override fun updateView(
        newInfo: ChipbarInfo,
        currentView: ViewGroup
    ) {
    override fun updateView(newInfo: ChipbarInfo, currentView: ViewGroup) {
        logger.logViewUpdate(
            newInfo.windowTitle,
            newInfo.text.loadText(context),
@@ -123,7 +120,8 @@ open class ChipbarCoordinator @Inject constructor(

        // Detect falsing touches on the chip.
        parent = currentView.requireViewById(R.id.chipbar_root_view)
        parent.touchHandler = object : Gefingerpoken {
        parent.touchHandler =
            object : Gefingerpoken {
                override fun onTouchEvent(ev: MotionEvent?): Boolean {
                    falsingCollector.onTouchEvent(ev)
                    return false
@@ -155,8 +153,10 @@ open class ChipbarCoordinator @Inject constructor(
        if (newInfo.endItem is ChipbarEndItem.Button) {
            TextViewBinder.bind(buttonView, newInfo.endItem.text)

            val onClickListener = View.OnClickListener { clickedView ->
                if (falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) return@OnClickListener
            val onClickListener =
                View.OnClickListener { clickedView ->
                    if (falsingManager.isFalseTap(FalsingManager.LOW_PENALTY))
                        return@OnClickListener
                    newInfo.endItem.onClickListener.onClick(clickedView)
                }

@@ -168,21 +168,27 @@ open class ChipbarCoordinator @Inject constructor(

        // ---- Overall accessibility ----
        val iconDesc = newInfo.startIcon.icon.contentDescription
        val loadedIconDesc = if (iconDesc != null) {
        val loadedIconDesc =
            if (iconDesc != null) {
                "${iconDesc.loadContentDescription(context)} "
            } else {
                ""
            }
        val endItemDesc =
            if (newInfo.endItem is ChipbarEndItem.Loading) {
                ". ${context.resources.getString(R.string.media_transfer_loading)}."
            } else {
                ""
            }

        val chipInnerView = currentView.getInnerView()
        chipInnerView.contentDescription = "$loadedIconDesc${newInfo.text.loadText(context)}"
        chipInnerView.contentDescription =
            "$loadedIconDesc${newInfo.text.loadText(context)}$endItemDesc"
        chipInnerView.accessibilityLiveRegion = ACCESSIBILITY_LIVE_REGION_ASSERTIVE
        maybeGetAccessibilityFocus(newInfo, currentView)

        // ---- Haptics ----
        newInfo.vibrationEffect?.let {
            vibratorHelper.vibrate(it)
        }
        newInfo.vibrationEffect?.let { vibratorHelper.vibrate(it) }
    }

    private fun maybeGetAccessibilityFocus(info: ChipbarInfo?, view: ViewGroup) {
+36 −2
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ class ChipbarCoordinatorTest : SysuiTestCase() {
            )
        )

        val contentDescView = getChipbarView().requireViewById<ViewGroup>(R.id.chipbar_inner)
        val contentDescView = getChipbarView().getInnerView()
        assertThat(contentDescView.contentDescription.toString()).contains("loadedCD")
        assertThat(contentDescView.contentDescription.toString()).contains("text")
    }
@@ -139,10 +139,42 @@ class ChipbarCoordinatorTest : SysuiTestCase() {
            )
        )

        val contentDescView = getChipbarView().requireViewById<ViewGroup>(R.id.chipbar_inner)
        val contentDescView = getChipbarView().getInnerView()
        assertThat(contentDescView.contentDescription.toString()).isEqualTo("text")
    }

    @Test
    fun displayView_contentDescription_endIsLoading() {
        underTest.displayView(
            createChipbarInfo(
                Icon.Resource(R.drawable.ic_cake, ContentDescription.Loaded("loadedCD")),
                Text.Loaded("text"),
                endItem = ChipbarEndItem.Loading,
            )
        )

        val contentDescView = getChipbarView().getInnerView()
        val loadingDesc = context.resources.getString(R.string.media_transfer_loading)
        assertThat(contentDescView.contentDescription.toString()).contains("text")
        assertThat(contentDescView.contentDescription.toString()).contains(loadingDesc)
    }

    @Test
    fun displayView_contentDescription_endNotLoading() {
        underTest.displayView(
            createChipbarInfo(
                Icon.Resource(R.drawable.ic_cake, ContentDescription.Loaded("loadedCD")),
                Text.Loaded("text"),
                endItem = ChipbarEndItem.Error,
            )
        )

        val contentDescView = getChipbarView().getInnerView()
        val loadingDesc = context.resources.getString(R.string.media_transfer_loading)
        assertThat(contentDescView.contentDescription.toString()).contains("text")
        assertThat(contentDescView.contentDescription.toString()).doesNotContain(loadingDesc)
    }

    @Test
    fun displayView_loadedIcon_correctlyRendered() {
        val drawable = context.getDrawable(R.drawable.ic_celebration)!!
@@ -417,6 +449,8 @@ class ChipbarCoordinatorTest : SysuiTestCase() {
        )
    }

    private fun ViewGroup.getInnerView() = this.requireViewById<ViewGroup>(R.id.chipbar_inner)

    private fun ViewGroup.getStartIconView() = this.requireViewById<ImageView>(R.id.start_icon)

    private fun ViewGroup.getChipText(): String =