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

Commit 922e19de authored by Michael Mikhail's avatar Michael Mikhail Committed by Android (Google) Code Review
Browse files

Merge "[Media TTT] Adding Haptics" into tm-qpr-dev

parents 92d7e332 d6b482bd
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -159,7 +159,8 @@ constructor(
                            null
                        }
                    }
                }
                },
            vibrationEffect = chipStateSender.transferStatus.vibrationEffect,
        )
    }

+25 −5
Original line number Diff line number Diff line
@@ -16,16 +16,36 @@

package com.android.systemui.media.taptotransfer.sender

/** Represents the different possible transfer states that we could be in. */
enum class TransferStatus {
import android.os.VibrationEffect

/**
 * Represents the different possible transfer states that we could be in and the vibration effects
 * that come with updating transfer states.
 *
 * @property vibrationEffect an optional vibration effect when the transfer status is changed.
 */
enum class TransferStatus(
    val vibrationEffect: VibrationEffect? = null,
) {
    /** The transfer hasn't started yet. */
    NOT_STARTED,
    NOT_STARTED(
        vibrationEffect =
            VibrationEffect.startComposition()
                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1.0f, 0)
                .compose()
    ),
    /** The transfer is currently ongoing but hasn't completed yet. */
    IN_PROGRESS,
    IN_PROGRESS(
        vibrationEffect =
            VibrationEffect.startComposition()
                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE, 1.0f, 0)
                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, 70)
                .compose(),
    ),
    /** The transfer has completed successfully. */
    SUCCEEDED,
    /** The transfer has completed with a failure. */
    FAILED,
    FAILED(vibrationEffect = VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK)),
    /** The device is too far away to do a transfer. */
    TOO_FAR,
}
+7 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.media.taptotransfer.common.MediaTttLogger
import com.android.systemui.media.taptotransfer.common.MediaTttUtils
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogger
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.statusbar.VibratorHelper
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
import com.android.systemui.util.concurrency.DelayableExecutor
@@ -79,6 +80,7 @@ open class ChipbarCoordinator @Inject constructor(
        private val falsingManager: FalsingManager,
        private val falsingCollector: FalsingCollector,
        private val viewUtil: ViewUtil,
        private val vibratorHelper: VibratorHelper,
) : TemporaryViewDisplayController<ChipbarInfo, MediaTttLogger>(
        context,
        logger,
@@ -154,6 +156,11 @@ open class ChipbarCoordinator @Inject constructor(
        ).contentDescription =
            "${newInfo.startIcon.contentDescription.loadContentDescription(context)} " +
                "${newInfo.text.loadText(context)}"

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

    override fun animateViewIn(view: ViewGroup) {
+3 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.temporarydisplay.chipbar

import android.os.VibrationEffect
import android.view.View
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
@@ -29,11 +30,13 @@ import com.android.systemui.temporarydisplay.TemporaryViewInfo
 * @property text the text to display.
 * @property endItem an optional end item to display at the end of the chipbar (on the right in LTR
 * locales; on the left in RTL locales).
 * @property vibrationEffect an optional vibration effect when the chipbar is displayed
 */
data class ChipbarInfo(
    val startIcon: Icon,
    val text: Text,
    val endItem: ChipbarEndItem?,
    val vibrationEffect: VibrationEffect? = null,
) : TemporaryViewInfo

/** The possible items to display at the end of the chipbar. */
+12 −9
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import android.media.MediaRoute2Info
import android.os.PowerManager
import android.os.VibrationEffect
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.View
@@ -41,6 +42,7 @@ import com.android.systemui.media.taptotransfer.MediaTttFlags
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.VibratorHelper
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
import com.android.systemui.temporarydisplay.chipbar.FakeChipbarCoordinator
@@ -81,10 +83,10 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
    @Mock private lateinit var logger: MediaTttLogger
    @Mock private lateinit var mediaTttFlags: MediaTttFlags
    @Mock private lateinit var packageManager: PackageManager

    @Mock private lateinit var powerManager: PowerManager
    @Mock private lateinit var viewUtil: ViewUtil
    @Mock private lateinit var windowManager: WindowManager
    @Mock private lateinit var vibratorHelper: VibratorHelper
    private lateinit var chipbarCoordinator: ChipbarCoordinator
    private lateinit var commandQueueCallback: CommandQueue.Callbacks
    private lateinit var fakeAppIconDrawable: Drawable
@@ -129,6 +131,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
                falsingManager,
                falsingCollector,
                viewUtil,
                vibratorHelper,
            )
        chipbarCoordinator.start()

@@ -182,9 +185,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getErrorIcon().visibility).isEqualTo(View.GONE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_ALMOST_CLOSE_TO_START_CAST.id)
        verify(vibratorHelper).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -203,9 +206,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getErrorIcon().visibility).isEqualTo(View.GONE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_ALMOST_CLOSE_TO_END_CAST.id)
        verify(vibratorHelper).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -224,9 +227,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.VISIBLE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getErrorIcon().visibility).isEqualTo(View.GONE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_TRANSFER_TO_RECEIVER_TRIGGERED.id)
        verify(vibratorHelper).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -245,9 +248,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.VISIBLE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getErrorIcon().visibility).isEqualTo(View.GONE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_TRANSFER_TO_THIS_DEVICE_TRIGGERED.id)
        verify(vibratorHelper).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -265,9 +268,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
            .isEqualTo(ChipStateSender.TRANSFER_TO_RECEIVER_SUCCEEDED.getExpectedStateText())
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_TRANSFER_TO_RECEIVER_SUCCEEDED.id)
        verify(vibratorHelper, never()).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -335,9 +338,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
            .isEqualTo(ChipStateSender.TRANSFER_TO_THIS_DEVICE_SUCCEEDED.getExpectedStateText())
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_TRANSFER_TO_THIS_DEVICE_SUCCEEDED.id)
        verify(vibratorHelper, never()).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -408,9 +411,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getErrorIcon().visibility).isEqualTo(View.VISIBLE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_TRANSFER_TO_RECEIVER_FAILED.id)
        verify(vibratorHelper).vibrate(any<VibrationEffect>())
    }

    @Test
@@ -429,9 +432,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
        assertThat(chipbarView.getLoadingIcon().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getUndoButton().visibility).isEqualTo(View.GONE)
        assertThat(chipbarView.getErrorIcon().visibility).isEqualTo(View.VISIBLE)

        assertThat(uiEventLoggerFake.eventId(0))
            .isEqualTo(MediaTttSenderUiEvents.MEDIA_TTT_SENDER_TRANSFER_TO_THIS_DEVICE_FAILED.id)
        verify(vibratorHelper).vibrate(any<VibrationEffect>())
    }

    @Test
Loading