Loading packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt +2 −1 Original line number Diff line number Diff line Loading @@ -159,7 +159,8 @@ constructor( null } } } }, vibrationEffect = chipStateSender.transferStatus.vibrationEffect, ) } Loading packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/TransferStatus.kt +25 −5 Original line number Diff line number Diff line Loading @@ -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, } packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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. */ Loading packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +12 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -129,6 +131,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { falsingManager, falsingCollector, viewUtil, vibratorHelper, ) chipbarCoordinator.start() Loading Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt +2 −1 Original line number Diff line number Diff line Loading @@ -159,7 +159,8 @@ constructor( null } } } }, vibrationEffect = chipStateSender.transferStatus.vibrationEffect, ) } Loading
packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/TransferStatus.kt +25 −5 Original line number Diff line number Diff line Loading @@ -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, }
packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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. */ Loading
packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +12 −9 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -129,6 +131,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { falsingManager, falsingCollector, viewUtil, vibratorHelper, ) chipbarCoordinator.start() Loading Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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