diff options
| author | 2023-07-25 15:38:36 +0000 | |
|---|---|---|
| committer | 2023-07-25 15:38:36 +0000 | |
| commit | 090040d7d2ee476d1ee18a3ac5fd97aec3725361 (patch) | |
| tree | 6ac513d4b3a87b20c6700e2dc106ec3330f2941b | |
| parent | 80b44f6ef5c7c57adc133ce53f66f3377380ff74 (diff) | |
| parent | f966e40a2ee614f713a5f648f3cc0f3859e4bee4 (diff) | |
Using performHapticFeedback on NotificationPanelViewController am: f966e40a2e
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24167707
Change-Id: I86845676f4059a4f56686f875b5474ed916d97c9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2 files changed, 105 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java index e428976c5ce2..ed7cbffc880b 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java @@ -28,6 +28,7 @@ import static com.android.systemui.classifier.Classifier.BOUNCER_UNLOCK; import static com.android.systemui.classifier.Classifier.GENERIC; import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS; import static com.android.systemui.classifier.Classifier.UNLOCK; +import static com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION; import static com.android.systemui.navigationbar.gestural.Utilities.isTrackpadScroll; import static com.android.systemui.navigationbar.gestural.Utilities.isTrackpadThreeFingerSwipe; import static com.android.systemui.shade.ShadeExpansionStateManagerKt.STATE_CLOSED; @@ -70,6 +71,7 @@ import android.provider.Settings; import android.util.IndentingPrintWriter; import android.util.Log; import android.util.MathUtils; +import android.view.HapticFeedbackConstants; import android.view.InputDevice; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -2632,12 +2634,16 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump } if (!mStatusBarStateController.isDozing()) { - mVibratorHelper.vibrate( - Process.myUid(), - mView.getContext().getPackageName(), - ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT, - "falsing-additional-tap-required", - TOUCH_VIBRATION_ATTRIBUTES); + if (mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) { + mVibratorHelper.performHapticFeedback(mView, HapticFeedbackConstants.REJECT); + } else { + mVibratorHelper.vibrate( + Process.myUid(), + mView.getContext().getPackageName(), + ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT, + "falsing-additional-tap-required", + TOUCH_VIBRATION_ATTRIBUTES); + } } } @@ -3504,7 +3510,14 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private void maybeVibrateOnOpening(boolean openingWithTouch) { if (mVibrateOnOpening && mBarState != KEYGUARD && mBarState != SHADE_LOCKED) { if (!openingWithTouch || !mHasVibratedOnOpen) { - mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK); + if (mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)) { + mVibratorHelper.performHapticFeedback( + mView, + HapticFeedbackConstants.GESTURE_START + ); + } else { + mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK); + } mHasVibratedOnOpen = true; mShadeLog.v("Vibrating on opening, mHasVibratedOnOpen=true"); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt index 0c046e93ee20..c68095ca65a7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerWithCoroutinesTest.kt @@ -16,17 +16,23 @@ package com.android.systemui.shade +import android.os.VibrationEffect import android.testing.AndroidTestingRunner import android.testing.TestableLooper +import android.view.HapticFeedbackConstants import android.view.View import android.view.ViewStub import androidx.test.filters.SmallTest import com.android.internal.util.CollectionUtils import com.android.keyguard.KeyguardClockSwitch.LARGE import com.android.systemui.R +import com.android.systemui.flags.Flags.ONE_WAY_HAPTICS_API_MIGRATION import com.android.systemui.statusbar.StatusBarState.KEYGUARD import com.android.systemui.statusbar.StatusBarState.SHADE import com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED +import com.android.systemui.statusbar.VibratorHelper +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.Dispatchers @@ -55,6 +61,9 @@ class NotificationPanelViewControllerWithCoroutinesTest : override fun getMainDispatcher() = Dispatchers.Main.immediate + private val ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT = + VibrationEffect.get(VibrationEffect.EFFECT_STRENGTH_MEDIUM, false) + @Test fun testDisableUserSwitcherAfterEnabling_returnsViewStubToTheViewHierarchy() = runTest { launch(Dispatchers.Main.immediate) { givenViewAttached() } @@ -148,6 +157,43 @@ class NotificationPanelViewControllerWithCoroutinesTest : } @Test + fun doubleTapRequired_onKeyguard_oneWayHapticsDisabled_usesOldVibrate() = runTest { + launch(Dispatchers.Main.immediate) { + whenever(mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)).thenReturn(false) + val listener = getFalsingTapListener() + mStatusBarStateController.setState(KEYGUARD) + + listener.onAdditionalTapRequired() + val packageName = mView.context.packageName + verify(mKeyguardIndicationController).showTransientIndication(anyInt()) + verify(mVibratorHelper) + .vibrate( + any(), + eq(packageName), + eq(ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT), + eq("falsing-additional-tap-required"), + eq(VibratorHelper.TOUCH_VIBRATION_ATTRIBUTES) + ) + } + advanceUntilIdle() + } + + @Test + fun doubleTapRequired_onKeyguard_oneWayHapticsEnabled_usesPerformHapticFeedback() = runTest { + launch(Dispatchers.Main.immediate) { + whenever(mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)).thenReturn(true) + val listener = getFalsingTapListener() + mStatusBarStateController.setState(KEYGUARD) + + listener.onAdditionalTapRequired() + verify(mKeyguardIndicationController).showTransientIndication(anyInt()) + verify(mVibratorHelper) + .performHapticFeedback(eq(mView), eq(HapticFeedbackConstants.REJECT)) + } + advanceUntilIdle() + } + + @Test fun testDoubleTapRequired_ShadeLocked() = runTest { launch(Dispatchers.Main.immediate) { val listener = getFalsingTapListener() @@ -161,6 +207,45 @@ class NotificationPanelViewControllerWithCoroutinesTest : } @Test + fun doubleTapRequired_shadeLocked_oneWayHapticsDisabled_usesOldVibrate() = runTest { + launch(Dispatchers.Main.immediate) { + whenever(mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)).thenReturn(false) + val listener = getFalsingTapListener() + val packageName = mView.context.packageName + mStatusBarStateController.setState(SHADE_LOCKED) + + listener.onAdditionalTapRequired() + verify(mVibratorHelper) + .vibrate( + any(), + eq(packageName), + eq(ADDITIONAL_TAP_REQUIRED_VIBRATION_EFFECT), + eq("falsing-additional-tap-required"), + eq(VibratorHelper.TOUCH_VIBRATION_ATTRIBUTES) + ) + + verify(mTapAgainViewController).show() + } + advanceUntilIdle() + } + + @Test + fun doubleTapRequired_shadeLocked_oneWayHapticsEnabled_usesPerformHapticFeedback() = runTest { + launch(Dispatchers.Main.immediate) { + whenever(mFeatureFlags.isEnabled(ONE_WAY_HAPTICS_API_MIGRATION)).thenReturn(true) + val listener = getFalsingTapListener() + mStatusBarStateController.setState(SHADE_LOCKED) + + listener.onAdditionalTapRequired() + verify(mVibratorHelper) + .performHapticFeedback(eq(mView), eq(HapticFeedbackConstants.REJECT)) + + verify(mTapAgainViewController).show() + } + advanceUntilIdle() + } + + @Test fun testOnAttachRefreshStatusBarState() = runTest { launch(Dispatchers.Main.immediate) { mStatusBarStateController.setState(KEYGUARD) |