summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/VibratorService.java27
1 files changed, 26 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index ba562610c7b8..64bcaa0b4077 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -113,6 +113,7 @@ public class VibratorService extends IVibratorService.Stub
private final SparseArray<ScaleLevel> mScaleLevels;
private final LinkedList<VibrationInfo> mPreviousRingVibrations;
private final LinkedList<VibrationInfo> mPreviousNotificationVibrations;
+ private final LinkedList<VibrationInfo> mPreviousAlarmVibrations;
private final LinkedList<VibrationInfo> mPreviousVibrations;
private final int mPreviousVibrationsLimit;
private final boolean mAllowPriorityVibrationsInLowPowerMode;
@@ -259,6 +260,10 @@ public class VibratorService extends IVibratorService.Stub
return VibratorService.this.isRingtone(usageHint);
}
+ public boolean isAlarm() {
+ return VibratorService.this.isAlarm(usageHint);
+ }
+
public boolean isFromSystem() {
return uid == Process.SYSTEM_UID || uid == 0 || SYSTEM_UI_PACKAGE.equals(opPkg);
}
@@ -359,6 +364,7 @@ public class VibratorService extends IVibratorService.Stub
mPreviousRingVibrations = new LinkedList<>();
mPreviousNotificationVibrations = new LinkedList<>();
+ mPreviousAlarmVibrations = new LinkedList<>();
mPreviousVibrations = new LinkedList<>();
IntentFilter filter = new IntentFilter();
@@ -601,7 +607,7 @@ public class VibratorService extends IVibratorService.Stub
Vibration vib = new Vibration(token, effect, usageHint, uid, opPkg, reason);
if (mProcStatesCache.get(uid, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND)
> ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND
- && !vib.isNotification() && !vib.isRingtone()) {
+ && !vib.isNotification() && !vib.isRingtone() && !vib.isAlarm()) {
Slog.e(TAG, "Ignoring incoming vibration as process with"
+ " uid = " + uid + " is background,"
+ " usage = " + AudioAttributes.usageToString(vib.usageHint));
@@ -633,6 +639,8 @@ public class VibratorService extends IVibratorService.Stub
previousVibrations = mPreviousRingVibrations;
} else if (vib.isNotification()) {
previousVibrations = mPreviousNotificationVibrations;
+ } else if (vib.isAlarm()) {
+ previousVibrations = mPreviousAlarmVibrations;
} else {
previousVibrations = mPreviousVibrations;
}
@@ -797,6 +805,8 @@ public class VibratorService extends IVibratorService.Stub
return mNotificationIntensity;
} else if (vib.isHapticFeedback()) {
return mHapticFeedbackIntensity;
+ } else if (vib.isAlarm()) {
+ return Vibrator.VIBRATION_INTENSITY_HIGH;
} else {
return Vibrator.VIBRATION_INTENSITY_MEDIUM;
}
@@ -821,6 +831,8 @@ public class VibratorService extends IVibratorService.Stub
defaultIntensity = mVibrator.getDefaultNotificationVibrationIntensity();
} else if (vib.isHapticFeedback()) {
defaultIntensity = mVibrator.getDefaultHapticFeedbackIntensity();
+ } else if (vib.isAlarm()) {
+ defaultIntensity = Vibrator.VIBRATION_INTENSITY_HIGH;
} else {
// If we don't know what kind of vibration we're playing then just skip scaling for
// now.
@@ -1153,6 +1165,10 @@ public class VibratorService extends IVibratorService.Stub
return usageHint == AudioAttributes.USAGE_ASSISTANCE_SONIFICATION;
}
+ private static boolean isAlarm(int usageHint) {
+ return usageHint == AudioAttributes.USAGE_ALARM;
+ }
+
private void noteVibratorOnLocked(int uid, long millis) {
try {
mBatteryStatsService.noteVibratorOn(uid, millis);
@@ -1384,6 +1400,12 @@ public class VibratorService extends IVibratorService.Stub
pw.println(info.toString());
}
+ pw.println(" Previous alarm vibrations:");
+ for (VibrationInfo info : mPreviousAlarmVibrations) {
+ pw.print(" ");
+ pw.println(info.toString());
+ }
+
pw.println(" Previous vibrations:");
for (VibrationInfo info : mPreviousVibrations) {
pw.print(" ");
@@ -1449,6 +1471,9 @@ public class VibratorService extends IVibratorService.Stub
} else if (isHapticFeedback(usage)) {
defaultIntensity = mVibrator.getDefaultHapticFeedbackIntensity();
currentIntensity = mHapticFeedbackIntensity;
+ } else if (isAlarm(usage)) {
+ defaultIntensity = Vibrator.VIBRATION_INTENSITY_HIGH;
+ currentIntensity = Vibrator.VIBRATION_INTENSITY_HIGH;
} else {
defaultIntensity = 0;
currentIntensity = 0;