Loading src/com/android/server/telecom/Ringer.java +9 −34 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,9 @@ public class Ringer { private static final int[] PULSE_AMPLITUDE; private static final int[] PULSE_AMPLITUDE; private static final int RAMPING_RINGER_VIBRATION_DURATION = 5000; private static final int RAMPING_RINGER_DURATION = 10000; static { static { // construct complete pulse pattern // construct complete pulse pattern PULSE_PATTERN = new long[PULSE_PRIMING_PATTERN.length + PULSE_RAMPING_PATTERN.length]; PULSE_PATTERN = new long[PULSE_PRIMING_PATTERN.length + PULSE_RAMPING_PATTERN.length]; Loading Loading @@ -111,13 +114,6 @@ public class Ringer { private static final int REPEAT_SIMPLE_VIBRATION_AT = 1; private static final int REPEAT_SIMPLE_VIBRATION_AT = 1; private static final int DEFAULT_RAMPING_RINGER_DURATION = 10000; // 10 seconds private int mRampingRingerDuration = -1; // ramping ringer duration in millisecond // vibration duration before ramping ringer in second private int mRampingRingerVibrationDuration = 0; private static final float EPSILON = 1e-6f; private static final float EPSILON = 1e-6f; private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder() private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder() Loading Loading @@ -287,36 +283,18 @@ public class Ringer { // call (for the purposes of direct-to-voicemail), the information about custom // call (for the purposes of direct-to-voicemail), the information about custom // ringtones should be available by the time this code executes. We can safely // ringtones should be available by the time this code executes. We can safely // request the custom ringtone from the call and expect it to be current. // request the custom ringtone from the call and expect it to be current. if (mSystemSettingsUtil.applyRampingRinger(mContext) if (mSystemSettingsUtil.applyRampingRinger(mContext)) { && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()) { Log.i(this, "start ramping ringer."); Log.i(this, "start ramping ringer."); // configure vibration effect for ramping ringer. int previousRampingRingerVibrationDuration = mRampingRingerVibrationDuration; // get vibration duration in millisecond and round down to second. mRampingRingerVibrationDuration = mSystemSettingsUtil.getRampingRingerVibrationDuration() >= 0 ? mSystemSettingsUtil.getRampingRingerVibrationDuration() / 1000 : 0; if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall); effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall); } else { } else { effect = mDefaultVibrationEffect; effect = mDefaultVibrationEffect; } } if (mVolumeShaperConfig == null) { // configure volume shaper for ramping ringer float silencePoint = (float) (RAMPING_RINGER_VIBRATION_DURATION) int previousRampingRingerDuration = mRampingRingerDuration; / (float) (RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION); mRampingRingerDuration = mSystemSettingsUtil.getRampingRingerDuration() > 0 ? mSystemSettingsUtil.getRampingRingerDuration() : DEFAULT_RAMPING_RINGER_DURATION; if (mRampingRingerDuration != previousRampingRingerDuration || mRampingRingerVibrationDuration != previousRampingRingerVibrationDuration || mVolumeShaperConfig == null) { float silencePoint = (float) (mRampingRingerVibrationDuration * 1000) / (float) (mRampingRingerVibrationDuration * 1000 + mRampingRingerDuration); mVolumeShaperConfig = new VolumeShaper.Configuration.Builder() mVolumeShaperConfig = new VolumeShaper.Configuration.Builder() .setDuration(mRampingRingerVibrationDuration * 1000 .setDuration(RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION) + mRampingRingerDuration) .setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/, .setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/, 1.f}, new float[] {0.f, 0.f, 1.f}) 1.f}, new float[] {0.f, 0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) Loading Loading @@ -347,7 +325,6 @@ public class Ringer { maybeStartVibration(foregroundCall, shouldRingForContact, effect, maybeStartVibration(foregroundCall, shouldRingForContact, effect, isVibratorEnabled, isRingerAudible); isVibratorEnabled, isRingerAudible); } else if (mSystemSettingsUtil.applyRampingRinger(mContext) } else if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { Log.i(this, "startRinging: apply ramping ringer vibration"); Log.i(this, "startRinging: apply ramping ringer vibration"); maybeStartVibration(foregroundCall, shouldRingForContact, effect, maybeStartVibration(foregroundCall, shouldRingForContact, effect, Loading Loading @@ -377,7 +354,6 @@ public class Ringer { if (isVibrationEnabled if (isVibrationEnabled && !mIsVibrating && shouldRingForContact) { && !mIsVibrating && shouldRingForContact) { if (mSystemSettingsUtil.applyRampingRinger(mContext) if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && isRingerAudible) { && isRingerAudible) { Log.i(this, "start vibration for ramping ringer."); Log.i(this, "start vibration for ramping ringer."); mIsVibrating = true; mIsVibrating = true; Loading Loading @@ -535,7 +511,6 @@ public class Ringer { return false; return false; } } return mSystemSettingsUtil.canVibrateWhenRinging(context) return mSystemSettingsUtil.canVibrateWhenRinging(context) || (mSystemSettingsUtil.applyRampingRinger(context) || mSystemSettingsUtil.applyRampingRinger(context); && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()); } } } } src/com/android/server/telecom/SystemSettingsUtil.java +0 −25 Original line number Original line Diff line number Diff line Loading @@ -30,16 +30,6 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting @VisibleForTesting public class SystemSettingsUtil { public class SystemSettingsUtil { /** Flag for ringer ramping time in milliseconds. */ private static final String RAMPING_RINGER_DURATION_MILLIS = "ramping_ringer_duration"; /** Flag for vibration time in milliseconds before ramping ringer starts. */ private static final String RAMPING_RINGER_VIBRATION_DURATION = "ramping_ringer_vibration_duration"; /** Flag for whether or not to apply ramping ringer on incoming phone calls. */ private static final String RAMPING_RINGER_ENABLED = "ramping_ringer_enabled"; /** Flag for whether or not to support audio coupled haptics in ramping ringer. */ /** Flag for whether or not to support audio coupled haptics in ramping ringer. */ private static final String RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED = private static final String RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED = "ramping_ringer_audio_coupled_vibration_enabled"; "ramping_ringer_audio_coupled_vibration_enabled"; Loading Loading @@ -69,26 +59,11 @@ public class SystemSettingsUtil { Settings.Global.APPLY_RAMPING_RINGER, 0) == 1; Settings.Global.APPLY_RAMPING_RINGER, 0) == 1; } } public boolean enableRampingRingerFromDeviceConfig() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false); } public boolean enableAudioCoupledVibrationForRampingRinger() { public boolean enableAudioCoupledVibrationForRampingRinger() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED, false); RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED, false); } } public int getRampingRingerDuration() { return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_DURATION_MILLIS, -1); } public int getRampingRingerVibrationDuration() { return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_VIBRATION_DURATION, 0); } public boolean isHapticPlaybackSupported(Context context) { public boolean isHapticPlaybackSupported(Context context) { return context.getSystemService(AudioManager.class).isHapticPlaybackSupported(); return context.getSystemService(AudioManager.class).isHapticPlaybackSupported(); } } Loading tests/src/com/android/server/telecom/tests/RingerTest.java +0 −5 Original line number Original line Diff line number Diff line Loading @@ -374,7 +374,6 @@ public class RingerTest extends TelecomTestCase { mRingerUnderTest.startCallWaiting(mockCall1); mRingerUnderTest.startCallWaiting(mockCall1); ensureRingerIsAudible(); ensureRingerIsAudible(); enableRampingRinger(); enableRampingRinger(); enableRampingRingerFromDeviceConfig(); mFuture.complete(false); // not using audio coupled haptics mFuture.complete(false); // not using audio coupled haptics enableVibrationWhenRinging(); enableVibrationWhenRinging(); assertTrue(mRingerUnderTest.startRinging(mockCall2, false)); assertTrue(mRingerUnderTest.startRinging(mockCall2, false)); Loading Loading @@ -442,8 +441,4 @@ public class RingerTest extends TelecomTestCase { private void enableRampingRinger() { private void enableRampingRinger() { when(mockSystemSettingsUtil.applyRampingRinger(any(Context.class))).thenReturn(true); when(mockSystemSettingsUtil.applyRampingRinger(any(Context.class))).thenReturn(true); } } private void enableRampingRingerFromDeviceConfig() { when(mockSystemSettingsUtil.enableRampingRingerFromDeviceConfig()).thenReturn(true); } } } Loading
src/com/android/server/telecom/Ringer.java +9 −34 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,9 @@ public class Ringer { private static final int[] PULSE_AMPLITUDE; private static final int[] PULSE_AMPLITUDE; private static final int RAMPING_RINGER_VIBRATION_DURATION = 5000; private static final int RAMPING_RINGER_DURATION = 10000; static { static { // construct complete pulse pattern // construct complete pulse pattern PULSE_PATTERN = new long[PULSE_PRIMING_PATTERN.length + PULSE_RAMPING_PATTERN.length]; PULSE_PATTERN = new long[PULSE_PRIMING_PATTERN.length + PULSE_RAMPING_PATTERN.length]; Loading Loading @@ -111,13 +114,6 @@ public class Ringer { private static final int REPEAT_SIMPLE_VIBRATION_AT = 1; private static final int REPEAT_SIMPLE_VIBRATION_AT = 1; private static final int DEFAULT_RAMPING_RINGER_DURATION = 10000; // 10 seconds private int mRampingRingerDuration = -1; // ramping ringer duration in millisecond // vibration duration before ramping ringer in second private int mRampingRingerVibrationDuration = 0; private static final float EPSILON = 1e-6f; private static final float EPSILON = 1e-6f; private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder() private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder() Loading Loading @@ -287,36 +283,18 @@ public class Ringer { // call (for the purposes of direct-to-voicemail), the information about custom // call (for the purposes of direct-to-voicemail), the information about custom // ringtones should be available by the time this code executes. We can safely // ringtones should be available by the time this code executes. We can safely // request the custom ringtone from the call and expect it to be current. // request the custom ringtone from the call and expect it to be current. if (mSystemSettingsUtil.applyRampingRinger(mContext) if (mSystemSettingsUtil.applyRampingRinger(mContext)) { && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()) { Log.i(this, "start ramping ringer."); Log.i(this, "start ramping ringer."); // configure vibration effect for ramping ringer. int previousRampingRingerVibrationDuration = mRampingRingerVibrationDuration; // get vibration duration in millisecond and round down to second. mRampingRingerVibrationDuration = mSystemSettingsUtil.getRampingRingerVibrationDuration() >= 0 ? mSystemSettingsUtil.getRampingRingerVibrationDuration() / 1000 : 0; if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall); effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall); } else { } else { effect = mDefaultVibrationEffect; effect = mDefaultVibrationEffect; } } if (mVolumeShaperConfig == null) { // configure volume shaper for ramping ringer float silencePoint = (float) (RAMPING_RINGER_VIBRATION_DURATION) int previousRampingRingerDuration = mRampingRingerDuration; / (float) (RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION); mRampingRingerDuration = mSystemSettingsUtil.getRampingRingerDuration() > 0 ? mSystemSettingsUtil.getRampingRingerDuration() : DEFAULT_RAMPING_RINGER_DURATION; if (mRampingRingerDuration != previousRampingRingerDuration || mRampingRingerVibrationDuration != previousRampingRingerVibrationDuration || mVolumeShaperConfig == null) { float silencePoint = (float) (mRampingRingerVibrationDuration * 1000) / (float) (mRampingRingerVibrationDuration * 1000 + mRampingRingerDuration); mVolumeShaperConfig = new VolumeShaper.Configuration.Builder() mVolumeShaperConfig = new VolumeShaper.Configuration.Builder() .setDuration(mRampingRingerVibrationDuration * 1000 .setDuration(RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION) + mRampingRingerDuration) .setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/, .setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/, 1.f}, new float[] {0.f, 0.f, 1.f}) 1.f}, new float[] {0.f, 0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) Loading Loading @@ -347,7 +325,6 @@ public class Ringer { maybeStartVibration(foregroundCall, shouldRingForContact, effect, maybeStartVibration(foregroundCall, shouldRingForContact, effect, isVibratorEnabled, isRingerAudible); isVibratorEnabled, isRingerAudible); } else if (mSystemSettingsUtil.applyRampingRinger(mContext) } else if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { Log.i(this, "startRinging: apply ramping ringer vibration"); Log.i(this, "startRinging: apply ramping ringer vibration"); maybeStartVibration(foregroundCall, shouldRingForContact, effect, maybeStartVibration(foregroundCall, shouldRingForContact, effect, Loading Loading @@ -377,7 +354,6 @@ public class Ringer { if (isVibrationEnabled if (isVibrationEnabled && !mIsVibrating && shouldRingForContact) { && !mIsVibrating && shouldRingForContact) { if (mSystemSettingsUtil.applyRampingRinger(mContext) if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && isRingerAudible) { && isRingerAudible) { Log.i(this, "start vibration for ramping ringer."); Log.i(this, "start vibration for ramping ringer."); mIsVibrating = true; mIsVibrating = true; Loading Loading @@ -535,7 +511,6 @@ public class Ringer { return false; return false; } } return mSystemSettingsUtil.canVibrateWhenRinging(context) return mSystemSettingsUtil.canVibrateWhenRinging(context) || (mSystemSettingsUtil.applyRampingRinger(context) || mSystemSettingsUtil.applyRampingRinger(context); && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()); } } } }
src/com/android/server/telecom/SystemSettingsUtil.java +0 −25 Original line number Original line Diff line number Diff line Loading @@ -30,16 +30,6 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting @VisibleForTesting public class SystemSettingsUtil { public class SystemSettingsUtil { /** Flag for ringer ramping time in milliseconds. */ private static final String RAMPING_RINGER_DURATION_MILLIS = "ramping_ringer_duration"; /** Flag for vibration time in milliseconds before ramping ringer starts. */ private static final String RAMPING_RINGER_VIBRATION_DURATION = "ramping_ringer_vibration_duration"; /** Flag for whether or not to apply ramping ringer on incoming phone calls. */ private static final String RAMPING_RINGER_ENABLED = "ramping_ringer_enabled"; /** Flag for whether or not to support audio coupled haptics in ramping ringer. */ /** Flag for whether or not to support audio coupled haptics in ramping ringer. */ private static final String RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED = private static final String RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED = "ramping_ringer_audio_coupled_vibration_enabled"; "ramping_ringer_audio_coupled_vibration_enabled"; Loading Loading @@ -69,26 +59,11 @@ public class SystemSettingsUtil { Settings.Global.APPLY_RAMPING_RINGER, 0) == 1; Settings.Global.APPLY_RAMPING_RINGER, 0) == 1; } } public boolean enableRampingRingerFromDeviceConfig() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false); } public boolean enableAudioCoupledVibrationForRampingRinger() { public boolean enableAudioCoupledVibrationForRampingRinger() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED, false); RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED, false); } } public int getRampingRingerDuration() { return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_DURATION_MILLIS, -1); } public int getRampingRingerVibrationDuration() { return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_VIBRATION_DURATION, 0); } public boolean isHapticPlaybackSupported(Context context) { public boolean isHapticPlaybackSupported(Context context) { return context.getSystemService(AudioManager.class).isHapticPlaybackSupported(); return context.getSystemService(AudioManager.class).isHapticPlaybackSupported(); } } Loading
tests/src/com/android/server/telecom/tests/RingerTest.java +0 −5 Original line number Original line Diff line number Diff line Loading @@ -374,7 +374,6 @@ public class RingerTest extends TelecomTestCase { mRingerUnderTest.startCallWaiting(mockCall1); mRingerUnderTest.startCallWaiting(mockCall1); ensureRingerIsAudible(); ensureRingerIsAudible(); enableRampingRinger(); enableRampingRinger(); enableRampingRingerFromDeviceConfig(); mFuture.complete(false); // not using audio coupled haptics mFuture.complete(false); // not using audio coupled haptics enableVibrationWhenRinging(); enableVibrationWhenRinging(); assertTrue(mRingerUnderTest.startRinging(mockCall2, false)); assertTrue(mRingerUnderTest.startRinging(mockCall2, false)); Loading Loading @@ -442,8 +441,4 @@ public class RingerTest extends TelecomTestCase { private void enableRampingRinger() { private void enableRampingRinger() { when(mockSystemSettingsUtil.applyRampingRinger(any(Context.class))).thenReturn(true); when(mockSystemSettingsUtil.applyRampingRinger(any(Context.class))).thenReturn(true); } } private void enableRampingRingerFromDeviceConfig() { when(mockSystemSettingsUtil.enableRampingRingerFromDeviceConfig()).thenReturn(true); } } }