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

Commit 21d39a1c authored by Juan Sebastian Martinez's avatar Juan Sebastian Martinez
Browse files

Using performHapticFeedback on ChipbarCoordinator.

Moving towards new haptics API that triggers haptics directly from the UI
thread. The ChipbardInfo class has been expanded to include an integer
constant used as a parameter of performHapticFeedback in the VibratorHelper.
The changes are controlled by a feature flag.

Test: A new test was added to ChipbarCoordinatorTest to verify that the new
  method is used when ChipbarInfo contains a constant to be played.
Bug: 245528624
Change-Id: I6d57551dd3941da7695cdb9f32360d6ee0cb726c
parent f966e40a
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -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
@@ -94,6 +96,7 @@ constructor(
    wakeLockBuilder: WakeLock.Builder,
    systemClock: SystemClock,
    tempViewUiEventLogger: TemporaryViewUiEventLogger,
    private val featureFlags: FeatureFlags,
) :
    TemporaryViewDisplayController<ChipbarInfo, ChipbarLogger>(
        context,
@@ -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(),
@@ -241,6 +247,7 @@ constructor(
                )
            }
        }
    }

    private fun maybeGetAccessibilityFocus(info: ChipbarInfo?, view: ViewGroup) {
        // Don't steal focus unless the chipbar has something interactable.
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -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,
+5 −0
Original line number Diff line number Diff line
@@ -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
@@ -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() {
@@ -160,7 +163,9 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
                fakeWakeLockBuilder,
                fakeClock,
                tempViewUiEventLogger,
                featureFlags
            )
        featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false)
        chipbarCoordinator.start()

        underTest =
+25 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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() {
@@ -127,8 +131,10 @@ class ChipbarCoordinatorTest : SysuiTestCase() {
                fakeWakeLockBuilder,
                fakeClock,
                uiEventLogger,
                featureFlags
            )
        underTest.start()
        featureFlags.set(ONE_WAY_HAPTICS_API_MIGRATION, false)
    }

    @Test
@@ -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() {
@@ -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,