Loading services/core/java/com/android/server/vibrator/VibratorManagerService.java +8 −14 Original line number Diff line number Diff line Loading @@ -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 Loading services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java +38 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); } Loading Loading
services/core/java/com/android/server/vibrator/VibratorManagerService.java +8 −14 Original line number Diff line number Diff line Loading @@ -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 Loading
services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java +38 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); } Loading