Loading packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt +15 −8 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ import com.android.systemui.common.ui.binder.TintedIconViewBinder import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.VibratorHelper import com.android.systemui.statusbar.policy.ConfigurationController Loading Loading @@ -94,6 +96,7 @@ constructor( wakeLockBuilder: WakeLock.Builder, systemClock: SystemClock, tempViewUiEventLogger: TemporaryViewUiEventLogger, private val featureFlags: FeatureFlags, ) : TemporaryViewDisplayController<ChipbarInfo, ChipbarLogger>( context, Loading Loading @@ -231,6 +234,9 @@ constructor( maybeGetAccessibilityFocus(newInfo, currentView) // ---- Haptics ---- if (featureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) { vibratorHelper.performHapticFeedback(parent, newInfo.vibrationConstant) } else { newInfo.vibrationEffect?.let { vibratorHelper.vibrate( Process.myUid(), Loading @@ -241,6 +247,7 @@ constructor( ) } } } private fun maybeGetAccessibilityFocus(info: ChipbarInfo?, view: ViewGroup) { // Don't steal focus unless the chipbar has something interactable. Loading packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.temporarydisplay.chipbar import android.os.VibrationEffect import android.view.HapticFeedbackConstants import android.view.View import androidx.annotation.AttrRes import com.android.internal.logging.InstanceId Loading @@ -42,6 +43,7 @@ data class ChipbarInfo( val text: Text, val endItem: ChipbarEndItem?, val vibrationEffect: VibrationEffect? = null, val vibrationConstant: Int = HapticFeedbackConstants.NO_HAPTICS, val allowSwipeToDismiss: Boolean = false, override val windowTitle: String, override val wakeReason: String, Loading packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +5 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.common.shared.model.Text.Companion.loadText import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.media.taptotransfer.MediaTttFlags import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.CommandQueue Loading Loading @@ -111,6 +113,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { private lateinit var uiEventLogger: MediaTttSenderUiEventLogger private lateinit var tempViewUiEventLogger: TemporaryViewUiEventLogger private val defaultTimeout = context.resources.getInteger(R.integer.heads_up_notification_decay) private val featureFlags = FakeFeatureFlags() @Before fun setUp() { Loading Loading @@ -160,7 +163,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { fakeWakeLockBuilder, fakeClock, tempViewUiEventLogger, featureFlags ) featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false) chipbarCoordinator.start() underTest = Loading packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinatorTest.kt +25 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.os.VibrationAttributes import android.os.VibrationEffect import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.HapticFeedbackConstants import android.view.MotionEvent import android.view.View import android.view.ViewGroup Loading @@ -41,6 +42,8 @@ import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.shared.model.Text import com.android.systemui.common.shared.model.TintedIcon import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.VibratorHelper import com.android.systemui.statusbar.policy.ConfigurationController Loading Loading @@ -91,6 +94,7 @@ class ChipbarCoordinatorTest : SysuiTestCase() { private lateinit var fakeExecutor: FakeExecutor private lateinit var uiEventLoggerFake: UiEventLoggerFake private lateinit var uiEventLogger: TemporaryViewUiEventLogger private val featureFlags = FakeFeatureFlags() @Before fun setUp() { Loading Loading @@ -127,8 +131,10 @@ class ChipbarCoordinatorTest : SysuiTestCase() { fakeWakeLockBuilder, fakeClock, uiEventLogger, featureFlags ) underTest.start() featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false) } @Test Loading Loading @@ -488,6 +494,23 @@ class ChipbarCoordinatorTest : SysuiTestCase() { ) } @Test fun displayView_oneWayHapticsEnabled_usesPerformHapticFeedback() { featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true) val constant: Int = HapticFeedbackConstants.CONFIRM underTest.displayView( createChipbarInfo( Icon.Resource(R.id.check_box, null), Text.Loaded("text"), endItem = null, vibrationEffect = null, vibrationConstant = constant ) ) verify(vibratorHelper).performHapticFeedback(any(), eq(constant)) } /** Regression test for b/266119467. */ @Test fun displayView_animationFailure_viewsStillBecomeVisible() { Loading Loading @@ -706,12 +729,14 @@ class ChipbarCoordinatorTest : SysuiTestCase() { endItem: ChipbarEndItem?, vibrationEffect: VibrationEffect? = null, allowSwipeToDismiss: Boolean = false, vibrationConstant: Int = HapticFeedbackConstants.NO_HAPTICS, ): ChipbarInfo { return ChipbarInfo( TintedIcon(startIcon, tint = null), text, endItem, vibrationEffect, vibrationConstant, allowSwipeToDismiss, windowTitle = WINDOW_TITLE, wakeReason = WAKE_REASON, Loading Loading
packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinator.kt +15 −8 Original line number Diff line number Diff line Loading @@ -48,6 +48,8 @@ import com.android.systemui.common.ui.binder.TintedIconViewBinder import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.VibratorHelper import com.android.systemui.statusbar.policy.ConfigurationController Loading Loading @@ -94,6 +96,7 @@ constructor( wakeLockBuilder: WakeLock.Builder, systemClock: SystemClock, tempViewUiEventLogger: TemporaryViewUiEventLogger, private val featureFlags: FeatureFlags, ) : TemporaryViewDisplayController<ChipbarInfo, ChipbarLogger>( context, Loading Loading @@ -231,6 +234,9 @@ constructor( maybeGetAccessibilityFocus(newInfo, currentView) // ---- Haptics ---- if (featureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) { vibratorHelper.performHapticFeedback(parent, newInfo.vibrationConstant) } else { newInfo.vibrationEffect?.let { vibratorHelper.vibrate( Process.myUid(), Loading @@ -241,6 +247,7 @@ constructor( ) } } } private fun maybeGetAccessibilityFocus(info: ChipbarInfo?, view: ViewGroup) { // Don't steal focus unless the chipbar has something interactable. Loading
packages/SystemUI/src/com/android/systemui/temporarydisplay/chipbar/ChipbarInfo.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.temporarydisplay.chipbar import android.os.VibrationEffect import android.view.HapticFeedbackConstants import android.view.View import androidx.annotation.AttrRes import com.android.internal.logging.InstanceId Loading @@ -42,6 +43,7 @@ data class ChipbarInfo( val text: Text, val endItem: ChipbarEndItem?, val vibrationEffect: VibrationEffect? = null, val vibrationConstant: Int = HapticFeedbackConstants.NO_HAPTICS, val allowSwipeToDismiss: Boolean = false, override val windowTitle: String, override val wakeReason: String, Loading
packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +5 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,8 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.common.shared.model.Text.Companion.loadText import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.media.taptotransfer.MediaTttFlags import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.CommandQueue Loading Loading @@ -111,6 +113,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { private lateinit var uiEventLogger: MediaTttSenderUiEventLogger private lateinit var tempViewUiEventLogger: TemporaryViewUiEventLogger private val defaultTimeout = context.resources.getInteger(R.integer.heads_up_notification_decay) private val featureFlags = FakeFeatureFlags() @Before fun setUp() { Loading Loading @@ -160,7 +163,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { fakeWakeLockBuilder, fakeClock, tempViewUiEventLogger, featureFlags ) featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false) chipbarCoordinator.start() underTest = Loading
packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/chipbar/ChipbarCoordinatorTest.kt +25 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.os.VibrationAttributes import android.os.VibrationEffect import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.HapticFeedbackConstants import android.view.MotionEvent import android.view.View import android.view.ViewGroup Loading @@ -41,6 +42,8 @@ import com.android.systemui.common.shared.model.Icon import com.android.systemui.common.shared.model.Text import com.android.systemui.common.shared.model.TintedIcon import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.plugins.FalsingManager import com.android.systemui.statusbar.VibratorHelper import com.android.systemui.statusbar.policy.ConfigurationController Loading Loading @@ -91,6 +94,7 @@ class ChipbarCoordinatorTest : SysuiTestCase() { private lateinit var fakeExecutor: FakeExecutor private lateinit var uiEventLoggerFake: UiEventLoggerFake private lateinit var uiEventLogger: TemporaryViewUiEventLogger private val featureFlags = FakeFeatureFlags() @Before fun setUp() { Loading Loading @@ -127,8 +131,10 @@ class ChipbarCoordinatorTest : SysuiTestCase() { fakeWakeLockBuilder, fakeClock, uiEventLogger, featureFlags ) underTest.start() featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false) } @Test Loading Loading @@ -488,6 +494,23 @@ class ChipbarCoordinatorTest : SysuiTestCase() { ) } @Test fun displayView_oneWayHapticsEnabled_usesPerformHapticFeedback() { featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, true) val constant: Int = HapticFeedbackConstants.CONFIRM underTest.displayView( createChipbarInfo( Icon.Resource(R.id.check_box, null), Text.Loaded("text"), endItem = null, vibrationEffect = null, vibrationConstant = constant ) ) verify(vibratorHelper).performHapticFeedback(any(), eq(constant)) } /** Regression test for b/266119467. */ @Test fun displayView_animationFailure_viewsStillBecomeVisible() { Loading Loading @@ -706,12 +729,14 @@ class ChipbarCoordinatorTest : SysuiTestCase() { endItem: ChipbarEndItem?, vibrationEffect: VibrationEffect? = null, allowSwipeToDismiss: Boolean = false, vibrationConstant: Int = HapticFeedbackConstants.NO_HAPTICS, ): ChipbarInfo { return ChipbarInfo( TintedIcon(startIcon, tint = null), text, endItem, vibrationEffect, vibrationConstant, allowSwipeToDismiss, windowTitle = WINDOW_TITLE, wakeReason = WAKE_REASON, Loading