DO NOT MERGE ANYWHERE Vibrator: Allow priority vibrations in low-power mode for accessibility.

This is mainly for Wear devices that don't have speakers.

Bug: 37543478
Bug: 37257715

Merged-In: Ia6dffa7e528886e7c84390dbb33b44f298c7afa4
Change-Id: Ia6dffa7e528886e7c84390dbb33b44f298c7afa4
This commit is contained in:
Tyler Freeman
2017-05-04 17:23:35 -07:00
committed by Chris Manton
parent 21caf4aee4
commit 79613777df
3 changed files with 27 additions and 2 deletions

View File

@@ -2520,6 +2520,10 @@
<!-- How long history of previous vibrations should be kept for the dumpsys. -->
<integer name="config_previousVibrationsDumpLimit">20</integer>
<!-- If the device should still vibrate even in low power mode, for certain priority vibrations
(e.g. accessibility, alarms). This is mainly for Wear devices that don't have speakers. -->
<bool name="config_allowPriorityVibrationsInLowPowerMode">false</bool>
<!-- Number of retries Cell Data should attempt for a given error code before
restarting the modem.
Error codes not listed will not lead to modem restarts.

View File

@@ -1735,6 +1735,7 @@
<java-symbol type="fraction" name="config_dimBehindFadeDuration" />
<java-symbol type="dimen" name="default_minimal_size_resizable_task" />
<java-symbol type="fraction" name="config_screenAutoBrightnessDozeScaleFactor" />
<java-symbol type="bool" name="config_allowPriorityVibrationsInLowPowerMode" />
<java-symbol type="fraction" name="config_autoBrightnessAdjustmentMaxGamma" />
<java-symbol type="fraction" name="config_autoBrightnessDarkHorizonThresholdFactor" />
<java-symbol type="integer" name="config_autoBrightnessAmbientLightHorizon"/>

View File

@@ -86,6 +86,7 @@ public class VibratorService extends IVibratorService.Stub
private int mCurVibUid = -1;
private boolean mLowPowerMode;
private boolean mAllowPriorityVibrationsInLowPowerMode;
private SettingsObserver mSettingObserver;
native static boolean vibratorExists();
@@ -215,6 +216,9 @@ public class VibratorService extends IVibratorService.Stub
mPreviousVibrationsLimit = mContext.getResources().getInteger(
com.android.internal.R.integer.config_previousVibrationsDumpLimit);
mAllowPriorityVibrationsInLowPowerMode = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_allowPriorityVibrationsInLowPowerMode);
mVibrations = new LinkedList<>();
mPreviousVibrations = new LinkedList<>();
@@ -447,8 +451,7 @@ public class VibratorService extends IVibratorService.Stub
// Lock held on mVibrations
private void startVibrationLocked(final Vibration vib) {
try {
if (mLowPowerMode
&& vib.mUsageHint != AudioAttributes.USAGE_NOTIFICATION_RINGTONE) {
if (!isAllowedToVibrate(vib)) {
return;
}
@@ -485,6 +488,23 @@ public class VibratorService extends IVibratorService.Stub
}
}
private boolean isAllowedToVibrate(Vibration vib) {
if (mLowPowerMode) {
if (vib.mUsageHint == AudioAttributes.USAGE_NOTIFICATION_RINGTONE) {
return true;
} else if (mAllowPriorityVibrationsInLowPowerMode) {
if (vib.mUsageHint == AudioAttributes.USAGE_ALARM ||
vib.mUsageHint == AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY ||
vib.mUsageHint == AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST) {
return true;
}
}
return false;
} else {
return true;
}
}
private boolean shouldVibrateForRingtone() {
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
int ringerMode = audioManager.getRingerModeInternal();