Create FakeVibrator to be used in service tests
This fake vibrator allows setting configurations like default touch,
ring and notification vibration intensities.
Bug: 131311651
Test: VibratorServiceTest, VibratorSettingsTest, VibratorScalerTest
Change-Id: I2f663dae26f736c0d18f4f7ff915491102273fb4
diff --git a/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java b/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java
index 92256e2..5c1e021 100644
--- a/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java
@@ -64,6 +64,7 @@
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.internal.util.test.FakeSettingsProviderRule;
+import com.android.server.vibrator.FakeVibrator;
import com.android.server.vibrator.FakeVibratorControllerProvider;
import com.android.server.vibrator.VibratorController;
@@ -114,8 +115,6 @@
@Mock private PackageManagerInternal mPackageManagerInternalMock;
@Mock private PowerManagerInternal mPowerManagerInternalMock;
- // TODO(b/131311651): replace with a FakeVibrator instead.
- @Mock private Vibrator mVibratorMock;
@Mock private AppOpsManager mAppOpsManagerMock;
@Mock private IVibratorStateListener mVibratorStateListenerMock;
@Mock private IInputManager mIInputManagerMock;
@@ -124,26 +123,22 @@
private TestLooper mTestLooper;
private ContextWrapper mContextSpy;
private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
+ private FakeVibrator mFakeVibrator;
private FakeVibratorControllerProvider mVibratorProvider;
@Before
public void setUp() throws Exception {
mTestLooper = new TestLooper();
+ mFakeVibrator = new FakeVibrator();
mVibratorProvider = new FakeVibratorControllerProvider(mTestLooper.getLooper());
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
InputManager inputManager = InputManager.resetInstance(mIInputManagerMock);
ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
- when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mVibratorMock);
+ when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mFakeVibrator);
when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager);
when(mContextSpy.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManagerMock);
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
- when(mVibratorMock.getDefaultRingVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
when(mVibratorStateListenerMock.asBinder()).thenReturn(mVibratorStateListenerBinderMock);
when(mPackageManagerInternalMock.getSystemUiServiceComponent())
.thenReturn(new ComponentName("", ""));
@@ -586,8 +581,7 @@
@Test
public void scale_withOneShotAndWaveform_usesScaleLevelOnAmplitude() throws Exception {
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultNotificationVibrationIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_HIGH);
setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
@@ -617,8 +611,7 @@
@Test
public void scale_withComposed_usesScaleLevelOnPrimitiveScaleValues() throws Exception {
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultNotificationVibrationIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_HIGH);
setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
new file mode 100644
index 0000000..72c40ea
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+
+import androidx.annotation.NonNull;
+
+/** Fake implementation of {@link Vibrator} for service tests. */
+public final class FakeVibrator extends Vibrator {
+
+ private int mDefaultHapticFeedbackIntensity = Vibrator.VIBRATION_INTENSITY_MEDIUM;
+ private int mDefaultNotificationIntensity = Vibrator.VIBRATION_INTENSITY_MEDIUM;
+ private int mDefaultRingIntensity = Vibrator.VIBRATION_INTENSITY_MEDIUM;
+
+ @Override
+ public int getDefaultHapticFeedbackIntensity() {
+ return mDefaultHapticFeedbackIntensity;
+ }
+
+ @Override
+ public int getDefaultNotificationVibrationIntensity() {
+ return mDefaultNotificationIntensity;
+ }
+
+ @Override
+ public int getDefaultRingVibrationIntensity() {
+ return mDefaultRingIntensity;
+ }
+
+ public void setDefaultHapticFeedbackIntensity(
+ @VibrationIntensity int defaultHapticFeedbackIntensity) {
+ mDefaultHapticFeedbackIntensity = defaultHapticFeedbackIntensity;
+ }
+
+ public void setDefaultNotificationVibrationIntensity(
+ @VibrationIntensity int defaultNotificationIntensity) {
+ mDefaultNotificationIntensity = defaultNotificationIntensity;
+ }
+
+ public void setDefaultRingVibrationIntensity(@VibrationIntensity int defaultRingIntensity) {
+ mDefaultRingIntensity = defaultRingIntensity;
+ }
+
+ @Override
+ public boolean hasVibrator() {
+ return true;
+ }
+
+ @Override
+ public boolean hasAmplitudeControl() {
+ return true;
+ }
+
+ @Override
+ public void vibrate(int uid, String opPkg, @NonNull VibrationEffect vibe, String reason,
+ @NonNull VibrationAttributes attributes) {
+ }
+
+ @Override
+ public void cancel() {
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java
index 82a6937..1e6ef91 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java
@@ -64,23 +64,23 @@
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
- // TODO(b/131311651): replace with a FakeVibrator instead.
- @Mock private Vibrator mVibratorMock;
@Mock private PowerManagerInternal mPowerManagerInternalMock;
private TestLooper mTestLooper;
private ContextWrapper mContextSpy;
+ private FakeVibrator mFakeVibrator;
private VibrationSettings mVibrationSettings;
private VibrationScaler mVibrationScaler;
@Before
public void setUp() throws Exception {
mTestLooper = new TestLooper();
+ mFakeVibrator = new FakeVibrator();
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
- when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mVibratorMock);
+ when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mFakeVibrator);
LocalServices.removeServiceForTest(PowerManagerInternal.class);
LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
@@ -97,8 +97,7 @@
@Test
public void testGetExternalVibrationScale() {
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
Vibrator.VIBRATION_INTENSITY_HIGH);
assertEquals(IExternalVibratorService.SCALE_VERY_HIGH,
@@ -114,13 +113,11 @@
assertEquals(IExternalVibratorService.SCALE_NONE,
mVibrationScaler.getExternalVibrationScale(VibrationAttributes.USAGE_TOUCH));
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_MEDIUM);
assertEquals(IExternalVibratorService.SCALE_LOW,
mVibrationScaler.getExternalVibrationScale(VibrationAttributes.USAGE_TOUCH));
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_HIGH);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_HIGH);
assertEquals(IExternalVibratorService.SCALE_VERY_LOW,
mVibrationScaler.getExternalVibrationScale(VibrationAttributes.USAGE_TOUCH));
@@ -222,8 +219,7 @@
@Test
public void scale_withOneShotAndWaveform_resolvesAmplitude() {
// No scale, default amplitude still resolved
- when(mVibratorMock.getDefaultRingVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultRingVibrationIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_LOW);
@@ -241,16 +237,13 @@
@Test
public void scale_withOneShotWaveform_scalesAmplitude() {
- when(mVibratorMock.getDefaultRingVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultRingVibrationIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_HIGH);
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_HIGH);
+ mFakeVibrator.setDefaultNotificationVibrationIntensity(Vibrator.VIBRATION_INTENSITY_HIGH);
setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_LOW);
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_MEDIUM);
setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
Vibrator.VIBRATION_INTENSITY_MEDIUM);
@@ -273,16 +266,13 @@
@Test
public void scale_withComposed_scalesPrimitives() {
- when(mVibratorMock.getDefaultRingVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultRingVibrationIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_HIGH);
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_HIGH);
+ mFakeVibrator.setDefaultNotificationVibrationIntensity(Vibrator.VIBRATION_INTENSITY_HIGH);
setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_LOW);
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_MEDIUM);
setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
Vibrator.VIBRATION_INTENSITY_MEDIUM);
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
index ecdb8bc..e9f21d06 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
@@ -76,26 +76,25 @@
@Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
- // TODO(b/131311651): replace with a FakeVibrator instead.
- @Mock private Vibrator mVibratorMock;
@Mock private VibrationSettings.OnVibratorSettingsChanged mListenerMock;
@Mock private PowerManagerInternal mPowerManagerInternalMock;
private TestLooper mTestLooper;
private ContextWrapper mContextSpy;
private AudioManager mAudioManager;
+ private FakeVibrator mFakeVibrator;
private VibrationSettings mVibrationSettings;
private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
@Before
public void setUp() throws Exception {
mTestLooper = new TestLooper();
+ mFakeVibrator = new FakeVibrator();
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
- when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mVibratorMock);
- when(mVibratorMock.hasVibrator()).thenReturn(true);
+ when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mFakeVibrator);
doAnswer(invocation -> {
mRegisteredPowerModeListener = invocation.getArgument(0);
return null;
@@ -291,12 +290,9 @@
@Test
public void getDefaultIntensity_returnsIntensityFromVibratorService() {
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_HIGH);
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
- when(mVibratorMock.getDefaultRingVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_LOW);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_HIGH);
+ mFakeVibrator.setDefaultNotificationVibrationIntensity(Vibrator.VIBRATION_INTENSITY_MEDIUM);
+ mFakeVibrator.setDefaultRingVibrationIntensity(Vibrator.VIBRATION_INTENSITY_LOW);
setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
Vibrator.VIBRATION_INTENSITY_OFF);
@@ -322,12 +318,9 @@
@Test
public void getCurrentIntensity_returnsIntensityFromSettings() {
- when(mVibratorMock.getDefaultHapticFeedbackIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_OFF);
- when(mVibratorMock.getDefaultNotificationVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_OFF);
- when(mVibratorMock.getDefaultRingVibrationIntensity())
- .thenReturn(Vibrator.VIBRATION_INTENSITY_OFF);
+ mFakeVibrator.setDefaultHapticFeedbackIntensity(Vibrator.VIBRATION_INTENSITY_OFF);
+ mFakeVibrator.setDefaultNotificationVibrationIntensity(Vibrator.VIBRATION_INTENSITY_OFF);
+ mFakeVibrator.setDefaultRingVibrationIntensity(Vibrator.VIBRATION_INTENSITY_OFF);
setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
Vibrator.VIBRATION_INTENSITY_HIGH);