Merge "Fix issue where the dnd mode remains on after a call terminates." into nyc-mr2-dev
diff --git a/src/com/android/server/telecom/Log.java b/src/com/android/server/telecom/Log.java
index 2282ff0..9903eec 100644
--- a/src/com/android/server/telecom/Log.java
+++ b/src/com/android/server/telecom/Log.java
@@ -125,6 +125,9 @@
public static final String STOP_DTMF = "STOP_DTMF";
public static final String START_RINGER = "START_RINGER";
public static final String STOP_RINGER = "STOP_RINGER";
+ public static final String START_VIBRATOR = "START_VIBRATOR";
+ public static final String STOP_VIBRATOR = "STOP_VIBRATOR";
+ public static final String SKIP_VIBRATION = "SKIP_VIBRATION";
public static final String SKIP_RINGING = "SKIP_RINGING";
public static final String START_CALL_WAITING_TONE = "START_CALL_WAITING_TONE";
public static final String STOP_CALL_WAITING_TONE = "STOP_CALL_WAITING_TONE";
diff --git a/src/com/android/server/telecom/Ringer.java b/src/com/android/server/telecom/Ringer.java
index 262f437..ca40801 100644
--- a/src/com/android/server/telecom/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -62,9 +62,11 @@
private RingtoneFactory mRingtoneFactory;
/**
- * Call objects that are ringing or call-waiting. These are used only for logging purposes.
+ * Call objects that are ringing, vibrating or call-waiting. These are used only for logging
+ * purposes.
*/
private Call mRingingCall;
+ private Call mVibratingCall;
private Call mCallWaitingCall;
/**
@@ -131,10 +133,13 @@
Log.i(this, "startRingingOrCallWaiting, skipping because volume is 0");
}
- if (shouldVibrate(mContext) && !mIsVibrating) {
+ if (shouldVibrate(mContext, foregroundCall) && !mIsVibrating) {
+ mVibratingCall = foregroundCall;
mVibrator.vibrate(VIBRATION_PATTERN, VIBRATION_PATTERN_REPEAT,
VIBRATION_ATTRIBUTES);
mIsVibrating = true;
+ } else if (mIsVibrating) {
+ Log.event(foregroundCall, Log.Events.SKIP_VIBRATION, "already vibrating");
}
return isRingerAudible;
@@ -172,8 +177,10 @@
mRingtonePlayer.stop();
if (mIsVibrating) {
+ Log.event(mVibratingCall, Log.Events.STOP_VIBRATOR);
mVibrator.cancel();
mIsVibrating = false;
+ mVibratingCall = null;
}
}
@@ -200,14 +207,31 @@
return manager.matchesCallFilter(extras);
}
- private boolean shouldVibrate(Context context) {
+ private boolean shouldVibrate(Context context, Call call) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int ringerMode = audioManager.getRingerModeInternal();
+ boolean shouldVibrate;
if (getVibrateWhenRinging(context)) {
- return ringerMode != AudioManager.RINGER_MODE_SILENT;
+ shouldVibrate = ringerMode != AudioManager.RINGER_MODE_SILENT;
} else {
- return ringerMode == AudioManager.RINGER_MODE_VIBRATE;
+ shouldVibrate = ringerMode == AudioManager.RINGER_MODE_VIBRATE;
}
+
+ // Technically this should be in the calling method, but it seemed a little odd to pass
+ // around a whole bunch of state just for logging purposes.
+ if (shouldVibrate) {
+ Log.event(call, Log.Events.START_VIBRATOR,
+ "hasVibrator=%b, userRequestsVibrate=%b, ringerMode=%d, isVibrating=%b",
+ mVibrator.hasVibrator(), mSystemSettingsUtil.canVibrateWhenRinging(context),
+ ringerMode, mIsVibrating);
+ } else {
+ Log.event(call, Log.Events.SKIP_VIBRATION,
+ "hasVibrator=%b, userRequestsVibrate=%b, ringerMode=%d, isVibrating=%b",
+ mVibrator.hasVibrator(), mSystemSettingsUtil.canVibrateWhenRinging(context),
+ ringerMode, mIsVibrating);
+ }
+
+ return shouldVibrate;
}
private boolean getVibrateWhenRinging(Context context) {