Apply ringer mode settings to external vibrations
Fix external vibrations to apply ringer mode settings. Fix: 201506862 Test: VibratorManagerServiceTest Change-Id: If13412edcb11b2d109e4ab4735e109d5b5aafc2d
This commit is contained in:
@@ -1319,24 +1319,18 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
|
||||
return IExternalVibratorService.SCALE_MUTE;
|
||||
}
|
||||
|
||||
int mode = checkAppOpModeLocked(vib.getUid(), vib.getPackage(),
|
||||
vib.getVibrationAttributes());
|
||||
if (mode != AppOpsManager.MODE_ALLOWED) {
|
||||
ExternalVibrationHolder vibHolder = new ExternalVibrationHolder(vib);
|
||||
vibHolder.scale = IExternalVibratorService.SCALE_MUTE;
|
||||
if (mode == AppOpsManager.MODE_ERRORED) {
|
||||
Slog.w(TAG, "Would be an error: external vibrate from uid " + vib.getUid());
|
||||
endVibrationLocked(vibHolder, Vibration.Status.IGNORED_ERROR_APP_OPS);
|
||||
} else {
|
||||
endVibrationLocked(vibHolder, Vibration.Status.IGNORED_APP_OPS);
|
||||
}
|
||||
return vibHolder.scale;
|
||||
}
|
||||
|
||||
ExternalVibrationHolder cancelingExternalVibration = null;
|
||||
VibrationThread cancelingVibration = null;
|
||||
int scale;
|
||||
synchronized (mLock) {
|
||||
Vibration.Status ignoreStatus = shouldIgnoreVibrationLocked(
|
||||
vib.getUid(), vib.getPackage(), vib.getVibrationAttributes());
|
||||
if (ignoreStatus != null) {
|
||||
ExternalVibrationHolder vibHolder = new ExternalVibrationHolder(vib);
|
||||
vibHolder.scale = IExternalVibratorService.SCALE_MUTE;
|
||||
endVibrationLocked(vibHolder, ignoreStatus);
|
||||
return vibHolder.scale;
|
||||
}
|
||||
if (mCurrentExternalVibration != null
|
||||
&& mCurrentExternalVibration.externalVibration.equals(vib)) {
|
||||
// We are already playing this external vibration, so we can return the same
|
||||
|
||||
@@ -998,6 +998,8 @@ public class VibratorManagerServiceTest {
|
||||
throws Exception {
|
||||
mockVibrators(1);
|
||||
mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
|
||||
setRingerMode(AudioManager.RINGER_MODE_NORMAL);
|
||||
setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
|
||||
createSystemReadyService();
|
||||
|
||||
IExternalVibrationController firstController = mock(IExternalVibrationController.class);
|
||||
@@ -1006,8 +1008,11 @@ public class VibratorManagerServiceTest {
|
||||
firstController);
|
||||
int firstScale = mExternalVibratorService.onExternalVibrationStart(firstVibration);
|
||||
|
||||
ExternalVibration secondVibration = new ExternalVibration(UID, PACKAGE_NAME, AUDIO_ATTRS,
|
||||
secondController);
|
||||
AudioAttributes ringtoneAudioAttrs = new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
|
||||
.build();
|
||||
ExternalVibration secondVibration = new ExternalVibration(UID, PACKAGE_NAME,
|
||||
ringtoneAudioAttrs, secondController);
|
||||
int secondScale = mExternalVibratorService.onExternalVibrationStart(secondVibration);
|
||||
|
||||
assertEquals(IExternalVibratorService.SCALE_NONE, firstScale);
|
||||
@@ -1040,6 +1045,37 @@ public class VibratorManagerServiceTest {
|
||||
assertEquals(Arrays.asList(true), mVibratorProviders.get(1).getExternalControlStates());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onExternalVibration_withRingtone_usesRingerModeSettings() {
|
||||
mockVibrators(1);
|
||||
mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
|
||||
mVibrator.setDefaultRingVibrationIntensity(Vibrator.VIBRATION_INTENSITY_MEDIUM);
|
||||
AudioAttributes audioAttrs = new AudioAttributes.Builder()
|
||||
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
|
||||
.build();
|
||||
ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
|
||||
mock(IExternalVibrationController.class));
|
||||
|
||||
setRingerMode(AudioManager.RINGER_MODE_NORMAL);
|
||||
setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 0);
|
||||
setGlobalSetting(Settings.Global.APPLY_RAMPING_RINGER, 0);
|
||||
createSystemReadyService();
|
||||
int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
|
||||
assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
|
||||
|
||||
setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 0);
|
||||
setGlobalSetting(Settings.Global.APPLY_RAMPING_RINGER, 1);
|
||||
createSystemReadyService();
|
||||
scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
|
||||
assertEquals(IExternalVibratorService.SCALE_NONE, scale);
|
||||
|
||||
setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
|
||||
setGlobalSetting(Settings.Global.APPLY_RAMPING_RINGER, 0);
|
||||
createSystemReadyService();
|
||||
scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
|
||||
assertEquals(IExternalVibratorService.SCALE_NONE, scale);
|
||||
}
|
||||
|
||||
private VibrationEffectSegment expectedPrebaked(int effectId) {
|
||||
return new PrebakedSegment(effectId, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user