Loading quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java +0 −6 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import com.android.internal.jank.Cuj; import com.android.launcher3.LauncherState; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.taskbar.LauncherTaskbarUIController; import com.android.launcher3.uioverrides.QuickstepLauncher; Loading Loading @@ -221,11 +220,6 @@ public class NoButtonNavbarToOverviewTouchController extends PortraitStatesTouch mCancelSplitRunnable.accept(animatorSet, duration); animatorSet.start(); } if (FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get() && ((mFromState == NORMAL && mToState == ALL_APPS) || (mFromState == ALL_APPS && mToState == NORMAL)) && isFling) { mVibratorWrapper.vibrateForDragBump(); } } private void onMotionPauseDetected() { Loading src/com/android/launcher3/allapps/AllAppsTransitionController.java +1 −61 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import static com.android.launcher3.util.SystemUiController.UI_STATE_ALL_APPS; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.util.FloatProperty; import android.view.HapticFeedbackConstants; import android.view.View; Loading @@ -52,7 +51,6 @@ import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.PropertySetter; Loading Loading @@ -359,22 +357,6 @@ public class AllAppsTransitionController }); } if (FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get() && config.isUserControlled() && Utilities.ATLEAST_S) { if (toState == ALL_APPS) { builder.addOnFrameListener( new VibrationAnimatorUpdateListener(this, mVibratorWrapper, SWIPE_DRAG_COMMIT_THRESHOLD, 1)); } else { builder.addOnFrameListener( new VibrationAnimatorUpdateListener(this, mVibratorWrapper, 0, SWIPE_DRAG_COMMIT_THRESHOLD)); } builder.addEndListener((unused) -> { mVibratorWrapper.cancelVibrate(); }); } float targetProgress = toState.getVerticalProgress(mLauncher); if (Float.compare(mProgress, targetProgress) == 0) { setAlphas(toState, config, builder); Loading @@ -391,8 +373,7 @@ public class AllAppsTransitionController setAlphas(toState, config, builder); // This controls both haptics for tapping on QSB and going to all apps. if (ALL_APPS.equals(toState) && mLauncher.isInState(NORMAL) && !FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get()) { if (ALL_APPS.equals(toState) && mLauncher.isInState(NORMAL)) { mLauncher.getAppsView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); } Loading Loading @@ -445,45 +426,4 @@ public class AllAppsTransitionController public void setShiftRange(float shiftRange) { mShiftRange = shiftRange; } /** * This VibrationAnimatorUpdateListener class takes in four parameters, a controller, start * threshold, end threshold, and a Vibrator wrapper. We use the progress given by the controller * as it gives an accurate progress that dictates where the vibrator should vibrate. * Note: once the user begins a gesture and does the commit haptic, there should not be anymore * haptics played for that gesture. */ private static class VibrationAnimatorUpdateListener implements ValueAnimator.AnimatorUpdateListener { private final VibratorWrapper mVibratorWrapper; private final AllAppsTransitionController mController; private final float mStartThreshold; private final float mEndThreshold; private boolean mHasCommitted; VibrationAnimatorUpdateListener(AllAppsTransitionController controller, VibratorWrapper vibratorWrapper, float startThreshold, float endThreshold) { mController = controller; mVibratorWrapper = vibratorWrapper; mStartThreshold = startThreshold; mEndThreshold = endThreshold; } @Override public void onAnimationUpdate(ValueAnimator animation) { if (mHasCommitted) { return; } float currentProgress = AllAppsTransitionController.ALL_APPS_PROGRESS.get(mController); if (currentProgress > mStartThreshold && currentProgress < mEndThreshold) { mVibratorWrapper.vibrateForDragTexture(); } else if (!(currentProgress == 0 || currentProgress == 1)) { // This check guards against committing at the location of the start of the gesture mVibratorWrapper.vibrateForDragCommit(); mHasCommitted = true; } } } } src/com/android/launcher3/config/FeatureFlags.java +0 −12 Original line number Diff line number Diff line Loading @@ -93,18 +93,6 @@ public final class FeatureFlags { 270394468, "ENABLE_SHOW_KEYBOARD_OPTION_IN_ALL_APPS", ENABLED, "Enable option to show keyboard when going to all-apps"); // TODO(Block 5): Clean up flags public static final BooleanFlag ENABLE_TWOLINE_DEVICESEARCH = getDebugFlag(201388851, "ENABLE_TWOLINE_DEVICESEARCH", DISABLED, "Enable two line label for icons with labels on device search."); public static final BooleanFlag ENABLE_ICON_IN_TEXT_HEADER = getDebugFlag(270395143, "ENABLE_ICON_IN_TEXT_HEADER", DISABLED, "Show icon in textheader"); public static final BooleanFlag ENABLE_PREMIUM_HAPTICS_ALL_APPS = getDebugFlag(270396358, "ENABLE_PREMIUM_HAPTICS_ALL_APPS", DISABLED, "Enables haptics opening/closing All apps"); // TODO(Block 6): Clean up flags public static final BooleanFlag ENABLE_ALL_APPS_SEARCH_IN_TASKBAR = getDebugFlag(270393900, "ENABLE_ALL_APPS_SEARCH_IN_TASKBAR", ENABLED, Loading src/com/android/launcher3/util/VibratorWrapper.java +0 −88 Original line number Diff line number Diff line Loading @@ -25,12 +25,10 @@ import android.annotation.SuppressLint; import android.content.Context; import android.media.AudioAttributes; import android.net.Uri; import android.os.SystemClock; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.Utilities; Loading @@ -54,20 +52,6 @@ public class VibratorWrapper implements SafeCloseable { static final Uri HAPTIC_FEEDBACK_URI = Settings.System.getUriFor(HAPTIC_FEEDBACK_ENABLED); @VisibleForTesting static final float LOW_TICK_SCALE = 0.9f; @VisibleForTesting static final float DRAG_TEXTURE_SCALE = 0.03f; @VisibleForTesting static final float DRAG_COMMIT_SCALE = 0.5f; @VisibleForTesting static final float DRAG_BUMP_SCALE = 0.4f; @VisibleForTesting static final int DRAG_TEXTURE_EFFECT_SIZE = 200; @Nullable private final VibrationEffect mDragEffect; @Nullable private final VibrationEffect mCommitEffect; @Nullable private final VibrationEffect mBumpEffect; private long mLastDragTime; private final int mThresholdUntilNextDragCallMillis; /** * Haptic when entering overview. Loading Loading @@ -100,28 +84,6 @@ public class VibratorWrapper implements SafeCloseable { } else { mIsHapticFeedbackEnabled = false; } if (Utilities.ATLEAST_S && mVibrator.areAllPrimitivesSupported( PRIMITIVE_LOW_TICK)) { // Drag texture, Commit, and Bump should only be used for premium phones. // Before using these haptics make sure check if the device can use it mDragEffect = getDragEffect(); mCommitEffect = VibrationEffect.startComposition().addPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, DRAG_COMMIT_SCALE).compose(); mBumpEffect = VibrationEffect.startComposition().addPrimitive( PRIMITIVE_LOW_TICK, DRAG_BUMP_SCALE).compose(); int primitiveDuration = mVibrator.getPrimitiveDurations( PRIMITIVE_LOW_TICK)[0]; mThresholdUntilNextDragCallMillis = DRAG_TEXTURE_EFFECT_SIZE * primitiveDuration + 100; } else { mDragEffect = null; mCommitEffect = null; mBumpEffect = null; mThresholdUntilNextDragCallMillis = 0; } } @Override Loading @@ -131,53 +93,12 @@ public class VibratorWrapper implements SafeCloseable { } } /** * This is called when the user swipes to/from all apps. This is meant to be used in between * long animation progresses so that it gives a dragging texture effect. For a better * experience, this should be used in combination with vibrateForDragCommit(). */ public void vibrateForDragTexture() { if (mDragEffect == null) { return; } long currentTime = SystemClock.elapsedRealtime(); long elapsedTimeSinceDrag = currentTime - mLastDragTime; if (elapsedTimeSinceDrag >= mThresholdUntilNextDragCallMillis) { vibrate(mDragEffect); mLastDragTime = currentTime; } } /** * This is used when user reaches the commit threshold when swiping to/from from all apps. */ public void vibrateForDragCommit() { if (mCommitEffect != null) { vibrate(mCommitEffect); } // resetting dragTexture timestamp to be able to play dragTexture again mLastDragTime = 0; } /** * The bump haptic is used to be called at the end of a swipe and only if it the gesture is a * FLING going to/from all apps. Client can just call this method elsewhere just for the * effect. */ public void vibrateForDragBump() { if (mBumpEffect != null) { vibrate(mBumpEffect); } } /** * This should be used to cancel a haptic in case where the haptic shouldn't be vibrating. For * example, when no animation is happening but a vibrator happens to be vibrating still. */ public void cancelVibrate() { UI_HELPER_EXECUTOR.execute(mVibrator::cancel); // reset dragTexture timestamp to be able to play dragTexture again whenever cancelled mLastDragTime = 0; } /** Vibrates with the given effect if haptic feedback is available and enabled. */ Loading Loading @@ -217,13 +138,4 @@ public class VibratorWrapper implements SafeCloseable { vibrate(primitiveLowTickEffect); } } static VibrationEffect getDragEffect() { VibrationEffect.Composition dragEffect = VibrationEffect.startComposition(); for (int i = 0; i < DRAG_TEXTURE_EFFECT_SIZE; i++) { dragEffect.addPrimitive( PRIMITIVE_LOW_TICK, DRAG_TEXTURE_SCALE); } return dragEffect.compose(); } } tests/multivalentTests/src/com/android/launcher3/util/VibratorWrapperTest.kt +0 −52 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.launcher3.util import android.media.AudioAttributes import android.os.SystemClock import android.os.VibrationEffect import android.os.VibrationEffect.Composition.PRIMITIVE_LOW_TICK import android.os.VibrationEffect.Composition.PRIMITIVE_TICK Loading @@ -35,13 +34,11 @@ import org.mockito.ArgumentCaptor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.any import org.mockito.Mockito.reset import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.mockito.kotlin.never import org.mockito.kotlin.same import org.mockito.kotlin.verifyNoMoreInteractions @SmallTest @RunWith(AndroidJUnit4::class) Loading Loading @@ -117,55 +114,6 @@ class VibratorWrapperTest { assertThat(vibrationEffectCaptor.value).isEqualTo(expectedEffect) } @Test fun vibrate_for_drag_bump() { underTest.vibrateForDragBump() awaitTasksCompleted() verify(vibrator).vibrate(vibrationEffectCaptor.capture(), same(VIBRATION_ATTRS)) val expectedEffect = VibrationEffect.startComposition() .addPrimitive(PRIMITIVE_LOW_TICK, VibratorWrapper.DRAG_BUMP_SCALE) .compose() assertThat(vibrationEffectCaptor.value).isEqualTo(expectedEffect) } @Test fun vibrate_for_drag_commit() { underTest.vibrateForDragCommit() awaitTasksCompleted() verify(vibrator).vibrate(vibrationEffectCaptor.capture(), same(VIBRATION_ATTRS)) val expectedEffect = VibrationEffect.startComposition() .addPrimitive(PRIMITIVE_TICK, VibratorWrapper.DRAG_COMMIT_SCALE) .compose() assertThat(vibrationEffectCaptor.value).isEqualTo(expectedEffect) } @Test fun vibrate_for_drag_texture() { SystemClock.setCurrentTimeMillis(40000) underTest.vibrateForDragTexture() awaitTasksCompleted() verify(vibrator).vibrate(vibrationEffectCaptor.capture(), same(VIBRATION_ATTRS)) assertThat(vibrationEffectCaptor.value).isEqualTo(VibratorWrapper.getDragEffect()) } @Test fun vibrate_for_drag_texture_within_time_window_noOp() { SystemClock.setCurrentTimeMillis(40000) underTest.vibrateForDragTexture() awaitTasksCompleted() reset(vibrator) underTest.vibrateForDragTexture() verifyNoMoreInteractions(vibrator) } @Test fun haptic_feedback_disabled_no_vibrate() { `when`(vibrator.hasVibrator()).thenReturn(false) Loading Loading
quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java +0 −6 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import com.android.internal.jank.Cuj; import com.android.launcher3.LauncherState; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.taskbar.LauncherTaskbarUIController; import com.android.launcher3.uioverrides.QuickstepLauncher; Loading Loading @@ -221,11 +220,6 @@ public class NoButtonNavbarToOverviewTouchController extends PortraitStatesTouch mCancelSplitRunnable.accept(animatorSet, duration); animatorSet.start(); } if (FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get() && ((mFromState == NORMAL && mToState == ALL_APPS) || (mFromState == ALL_APPS && mToState == NORMAL)) && isFling) { mVibratorWrapper.vibrateForDragBump(); } } private void onMotionPauseDetected() { Loading
src/com/android/launcher3/allapps/AllAppsTransitionController.java +1 −61 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import static com.android.launcher3.util.SystemUiController.UI_STATE_ALL_APPS; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.util.FloatProperty; import android.view.HapticFeedbackConstants; import android.view.View; Loading @@ -52,7 +51,6 @@ import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.PropertySetter; Loading Loading @@ -359,22 +357,6 @@ public class AllAppsTransitionController }); } if (FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get() && config.isUserControlled() && Utilities.ATLEAST_S) { if (toState == ALL_APPS) { builder.addOnFrameListener( new VibrationAnimatorUpdateListener(this, mVibratorWrapper, SWIPE_DRAG_COMMIT_THRESHOLD, 1)); } else { builder.addOnFrameListener( new VibrationAnimatorUpdateListener(this, mVibratorWrapper, 0, SWIPE_DRAG_COMMIT_THRESHOLD)); } builder.addEndListener((unused) -> { mVibratorWrapper.cancelVibrate(); }); } float targetProgress = toState.getVerticalProgress(mLauncher); if (Float.compare(mProgress, targetProgress) == 0) { setAlphas(toState, config, builder); Loading @@ -391,8 +373,7 @@ public class AllAppsTransitionController setAlphas(toState, config, builder); // This controls both haptics for tapping on QSB and going to all apps. if (ALL_APPS.equals(toState) && mLauncher.isInState(NORMAL) && !FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get()) { if (ALL_APPS.equals(toState) && mLauncher.isInState(NORMAL)) { mLauncher.getAppsView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); } Loading Loading @@ -445,45 +426,4 @@ public class AllAppsTransitionController public void setShiftRange(float shiftRange) { mShiftRange = shiftRange; } /** * This VibrationAnimatorUpdateListener class takes in four parameters, a controller, start * threshold, end threshold, and a Vibrator wrapper. We use the progress given by the controller * as it gives an accurate progress that dictates where the vibrator should vibrate. * Note: once the user begins a gesture and does the commit haptic, there should not be anymore * haptics played for that gesture. */ private static class VibrationAnimatorUpdateListener implements ValueAnimator.AnimatorUpdateListener { private final VibratorWrapper mVibratorWrapper; private final AllAppsTransitionController mController; private final float mStartThreshold; private final float mEndThreshold; private boolean mHasCommitted; VibrationAnimatorUpdateListener(AllAppsTransitionController controller, VibratorWrapper vibratorWrapper, float startThreshold, float endThreshold) { mController = controller; mVibratorWrapper = vibratorWrapper; mStartThreshold = startThreshold; mEndThreshold = endThreshold; } @Override public void onAnimationUpdate(ValueAnimator animation) { if (mHasCommitted) { return; } float currentProgress = AllAppsTransitionController.ALL_APPS_PROGRESS.get(mController); if (currentProgress > mStartThreshold && currentProgress < mEndThreshold) { mVibratorWrapper.vibrateForDragTexture(); } else if (!(currentProgress == 0 || currentProgress == 1)) { // This check guards against committing at the location of the start of the gesture mVibratorWrapper.vibrateForDragCommit(); mHasCommitted = true; } } } }
src/com/android/launcher3/config/FeatureFlags.java +0 −12 Original line number Diff line number Diff line Loading @@ -93,18 +93,6 @@ public final class FeatureFlags { 270394468, "ENABLE_SHOW_KEYBOARD_OPTION_IN_ALL_APPS", ENABLED, "Enable option to show keyboard when going to all-apps"); // TODO(Block 5): Clean up flags public static final BooleanFlag ENABLE_TWOLINE_DEVICESEARCH = getDebugFlag(201388851, "ENABLE_TWOLINE_DEVICESEARCH", DISABLED, "Enable two line label for icons with labels on device search."); public static final BooleanFlag ENABLE_ICON_IN_TEXT_HEADER = getDebugFlag(270395143, "ENABLE_ICON_IN_TEXT_HEADER", DISABLED, "Show icon in textheader"); public static final BooleanFlag ENABLE_PREMIUM_HAPTICS_ALL_APPS = getDebugFlag(270396358, "ENABLE_PREMIUM_HAPTICS_ALL_APPS", DISABLED, "Enables haptics opening/closing All apps"); // TODO(Block 6): Clean up flags public static final BooleanFlag ENABLE_ALL_APPS_SEARCH_IN_TASKBAR = getDebugFlag(270393900, "ENABLE_ALL_APPS_SEARCH_IN_TASKBAR", ENABLED, Loading
src/com/android/launcher3/util/VibratorWrapper.java +0 −88 Original line number Diff line number Diff line Loading @@ -25,12 +25,10 @@ import android.annotation.SuppressLint; import android.content.Context; import android.media.AudioAttributes; import android.net.Uri; import android.os.SystemClock; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.Utilities; Loading @@ -54,20 +52,6 @@ public class VibratorWrapper implements SafeCloseable { static final Uri HAPTIC_FEEDBACK_URI = Settings.System.getUriFor(HAPTIC_FEEDBACK_ENABLED); @VisibleForTesting static final float LOW_TICK_SCALE = 0.9f; @VisibleForTesting static final float DRAG_TEXTURE_SCALE = 0.03f; @VisibleForTesting static final float DRAG_COMMIT_SCALE = 0.5f; @VisibleForTesting static final float DRAG_BUMP_SCALE = 0.4f; @VisibleForTesting static final int DRAG_TEXTURE_EFFECT_SIZE = 200; @Nullable private final VibrationEffect mDragEffect; @Nullable private final VibrationEffect mCommitEffect; @Nullable private final VibrationEffect mBumpEffect; private long mLastDragTime; private final int mThresholdUntilNextDragCallMillis; /** * Haptic when entering overview. Loading Loading @@ -100,28 +84,6 @@ public class VibratorWrapper implements SafeCloseable { } else { mIsHapticFeedbackEnabled = false; } if (Utilities.ATLEAST_S && mVibrator.areAllPrimitivesSupported( PRIMITIVE_LOW_TICK)) { // Drag texture, Commit, and Bump should only be used for premium phones. // Before using these haptics make sure check if the device can use it mDragEffect = getDragEffect(); mCommitEffect = VibrationEffect.startComposition().addPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, DRAG_COMMIT_SCALE).compose(); mBumpEffect = VibrationEffect.startComposition().addPrimitive( PRIMITIVE_LOW_TICK, DRAG_BUMP_SCALE).compose(); int primitiveDuration = mVibrator.getPrimitiveDurations( PRIMITIVE_LOW_TICK)[0]; mThresholdUntilNextDragCallMillis = DRAG_TEXTURE_EFFECT_SIZE * primitiveDuration + 100; } else { mDragEffect = null; mCommitEffect = null; mBumpEffect = null; mThresholdUntilNextDragCallMillis = 0; } } @Override Loading @@ -131,53 +93,12 @@ public class VibratorWrapper implements SafeCloseable { } } /** * This is called when the user swipes to/from all apps. This is meant to be used in between * long animation progresses so that it gives a dragging texture effect. For a better * experience, this should be used in combination with vibrateForDragCommit(). */ public void vibrateForDragTexture() { if (mDragEffect == null) { return; } long currentTime = SystemClock.elapsedRealtime(); long elapsedTimeSinceDrag = currentTime - mLastDragTime; if (elapsedTimeSinceDrag >= mThresholdUntilNextDragCallMillis) { vibrate(mDragEffect); mLastDragTime = currentTime; } } /** * This is used when user reaches the commit threshold when swiping to/from from all apps. */ public void vibrateForDragCommit() { if (mCommitEffect != null) { vibrate(mCommitEffect); } // resetting dragTexture timestamp to be able to play dragTexture again mLastDragTime = 0; } /** * The bump haptic is used to be called at the end of a swipe and only if it the gesture is a * FLING going to/from all apps. Client can just call this method elsewhere just for the * effect. */ public void vibrateForDragBump() { if (mBumpEffect != null) { vibrate(mBumpEffect); } } /** * This should be used to cancel a haptic in case where the haptic shouldn't be vibrating. For * example, when no animation is happening but a vibrator happens to be vibrating still. */ public void cancelVibrate() { UI_HELPER_EXECUTOR.execute(mVibrator::cancel); // reset dragTexture timestamp to be able to play dragTexture again whenever cancelled mLastDragTime = 0; } /** Vibrates with the given effect if haptic feedback is available and enabled. */ Loading Loading @@ -217,13 +138,4 @@ public class VibratorWrapper implements SafeCloseable { vibrate(primitiveLowTickEffect); } } static VibrationEffect getDragEffect() { VibrationEffect.Composition dragEffect = VibrationEffect.startComposition(); for (int i = 0; i < DRAG_TEXTURE_EFFECT_SIZE; i++) { dragEffect.addPrimitive( PRIMITIVE_LOW_TICK, DRAG_TEXTURE_SCALE); } return dragEffect.compose(); } }
tests/multivalentTests/src/com/android/launcher3/util/VibratorWrapperTest.kt +0 −52 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.launcher3.util import android.media.AudioAttributes import android.os.SystemClock import android.os.VibrationEffect import android.os.VibrationEffect.Composition.PRIMITIVE_LOW_TICK import android.os.VibrationEffect.Composition.PRIMITIVE_TICK Loading @@ -35,13 +34,11 @@ import org.mockito.ArgumentCaptor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.any import org.mockito.Mockito.reset import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.mockito.kotlin.never import org.mockito.kotlin.same import org.mockito.kotlin.verifyNoMoreInteractions @SmallTest @RunWith(AndroidJUnit4::class) Loading Loading @@ -117,55 +114,6 @@ class VibratorWrapperTest { assertThat(vibrationEffectCaptor.value).isEqualTo(expectedEffect) } @Test fun vibrate_for_drag_bump() { underTest.vibrateForDragBump() awaitTasksCompleted() verify(vibrator).vibrate(vibrationEffectCaptor.capture(), same(VIBRATION_ATTRS)) val expectedEffect = VibrationEffect.startComposition() .addPrimitive(PRIMITIVE_LOW_TICK, VibratorWrapper.DRAG_BUMP_SCALE) .compose() assertThat(vibrationEffectCaptor.value).isEqualTo(expectedEffect) } @Test fun vibrate_for_drag_commit() { underTest.vibrateForDragCommit() awaitTasksCompleted() verify(vibrator).vibrate(vibrationEffectCaptor.capture(), same(VIBRATION_ATTRS)) val expectedEffect = VibrationEffect.startComposition() .addPrimitive(PRIMITIVE_TICK, VibratorWrapper.DRAG_COMMIT_SCALE) .compose() assertThat(vibrationEffectCaptor.value).isEqualTo(expectedEffect) } @Test fun vibrate_for_drag_texture() { SystemClock.setCurrentTimeMillis(40000) underTest.vibrateForDragTexture() awaitTasksCompleted() verify(vibrator).vibrate(vibrationEffectCaptor.capture(), same(VIBRATION_ATTRS)) assertThat(vibrationEffectCaptor.value).isEqualTo(VibratorWrapper.getDragEffect()) } @Test fun vibrate_for_drag_texture_within_time_window_noOp() { SystemClock.setCurrentTimeMillis(40000) underTest.vibrateForDragTexture() awaitTasksCompleted() reset(vibrator) underTest.vibrateForDragTexture() verifyNoMoreInteractions(vibrator) } @Test fun haptic_feedback_disabled_no_vibrate() { `when`(vibrator.hasVibrator()).thenReturn(false) Loading