Loading src/com/android/server/telecom/Ringer.java +9 −34 Original line number Diff line number Diff line Loading @@ -74,6 +74,9 @@ public class Ringer { private static final int[] PULSE_AMPLITUDE; private static final int RAMPING_RINGER_VIBRATION_DURATION = 5000; private static final int RAMPING_RINGER_DURATION = 10000; static { // construct complete pulse pattern 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 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 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 // 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. if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()) { if (mSystemSettingsUtil.applyRampingRinger(mContext)) { 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()) { effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall); } else { effect = mDefaultVibrationEffect; } // configure volume shaper for ramping ringer int previousRampingRingerDuration = mRampingRingerDuration; 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); if (mVolumeShaperConfig == null) { float silencePoint = (float) (RAMPING_RINGER_VIBRATION_DURATION) / (float) (RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION); mVolumeShaperConfig = new VolumeShaper.Configuration.Builder() .setDuration(mRampingRingerVibrationDuration * 1000 + mRampingRingerDuration) .setDuration(RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION) .setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/, 1.f}, new float[] {0.f, 0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) Loading Loading @@ -347,7 +325,6 @@ public class Ringer { maybeStartVibration(foregroundCall, shouldRingForContact, effect, isVibratorEnabled, isRingerAudible); } else if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { Log.i(this, "startRinging: apply ramping ringer vibration"); maybeStartVibration(foregroundCall, shouldRingForContact, effect, Loading Loading @@ -377,7 +354,6 @@ public class Ringer { if (isVibrationEnabled && !mIsVibrating && shouldRingForContact) { if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && isRingerAudible) { Log.i(this, "start vibration for ramping ringer."); mIsVibrating = true; Loading Loading @@ -535,7 +511,6 @@ public class Ringer { return false; } return mSystemSettingsUtil.canVibrateWhenRinging(context) || (mSystemSettingsUtil.applyRampingRinger(context) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()); || mSystemSettingsUtil.applyRampingRinger(context); } } src/com/android/server/telecom/SystemSettingsUtil.java +0 −25 Original line number Diff line number Diff line Loading @@ -30,16 +30,6 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting 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. */ private static final String 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; } public boolean enableRampingRingerFromDeviceConfig() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false); } public boolean enableAudioCoupledVibrationForRampingRinger() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, 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) { return context.getSystemService(AudioManager.class).isHapticPlaybackSupported(); } Loading tests/src/com/android/server/telecom/tests/RingerTest.java +0 −5 Original line number Diff line number Diff line Loading @@ -374,7 +374,6 @@ public class RingerTest extends TelecomTestCase { mRingerUnderTest.startCallWaiting(mockCall1); ensureRingerIsAudible(); enableRampingRinger(); enableRampingRingerFromDeviceConfig(); mFuture.complete(false); // not using audio coupled haptics enableVibrationWhenRinging(); assertTrue(mRingerUnderTest.startRinging(mockCall2, false)); Loading Loading @@ -442,8 +441,4 @@ public class RingerTest extends TelecomTestCase { private void enableRampingRinger() { 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 Diff line number Diff line Loading @@ -74,6 +74,9 @@ public class Ringer { private static final int[] PULSE_AMPLITUDE; private static final int RAMPING_RINGER_VIBRATION_DURATION = 5000; private static final int RAMPING_RINGER_DURATION = 10000; static { // construct complete pulse pattern 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 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 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 // 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. if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()) { if (mSystemSettingsUtil.applyRampingRinger(mContext)) { 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()) { effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall); } else { effect = mDefaultVibrationEffect; } // configure volume shaper for ramping ringer int previousRampingRingerDuration = mRampingRingerDuration; 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); if (mVolumeShaperConfig == null) { float silencePoint = (float) (RAMPING_RINGER_VIBRATION_DURATION) / (float) (RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION); mVolumeShaperConfig = new VolumeShaper.Configuration.Builder() .setDuration(mRampingRingerVibrationDuration * 1000 + mRampingRingerDuration) .setDuration(RAMPING_RINGER_VIBRATION_DURATION + RAMPING_RINGER_DURATION) .setCurve(new float[] {0.f, silencePoint + EPSILON /*keep monotonicity*/, 1.f}, new float[] {0.f, 0.f, 1.f}) .setInterpolatorType(VolumeShaper.Configuration.INTERPOLATOR_TYPE_LINEAR) Loading Loading @@ -347,7 +325,6 @@ public class Ringer { maybeStartVibration(foregroundCall, shouldRingForContact, effect, isVibratorEnabled, isRingerAudible); } else if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) { Log.i(this, "startRinging: apply ramping ringer vibration"); maybeStartVibration(foregroundCall, shouldRingForContact, effect, Loading Loading @@ -377,7 +354,6 @@ public class Ringer { if (isVibrationEnabled && !mIsVibrating && shouldRingForContact) { if (mSystemSettingsUtil.applyRampingRinger(mContext) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig() && isRingerAudible) { Log.i(this, "start vibration for ramping ringer."); mIsVibrating = true; Loading Loading @@ -535,7 +511,6 @@ public class Ringer { return false; } return mSystemSettingsUtil.canVibrateWhenRinging(context) || (mSystemSettingsUtil.applyRampingRinger(context) && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()); || mSystemSettingsUtil.applyRampingRinger(context); } }
src/com/android/server/telecom/SystemSettingsUtil.java +0 −25 Original line number Diff line number Diff line Loading @@ -30,16 +30,6 @@ import com.android.internal.annotations.VisibleForTesting; @VisibleForTesting 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. */ private static final String 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; } public boolean enableRampingRingerFromDeviceConfig() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false); } public boolean enableAudioCoupledVibrationForRampingRinger() { return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY, 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) { return context.getSystemService(AudioManager.class).isHapticPlaybackSupported(); } Loading
tests/src/com/android/server/telecom/tests/RingerTest.java +0 −5 Original line number Diff line number Diff line Loading @@ -374,7 +374,6 @@ public class RingerTest extends TelecomTestCase { mRingerUnderTest.startCallWaiting(mockCall1); ensureRingerIsAudible(); enableRampingRinger(); enableRampingRingerFromDeviceConfig(); mFuture.complete(false); // not using audio coupled haptics enableVibrationWhenRinging(); assertTrue(mRingerUnderTest.startRinging(mockCall2, false)); Loading Loading @@ -442,8 +441,4 @@ public class RingerTest extends TelecomTestCase { private void enableRampingRinger() { when(mockSystemSettingsUtil.applyRampingRinger(any(Context.class))).thenReturn(true); } private void enableRampingRingerFromDeviceConfig() { when(mockSystemSettingsUtil.enableRampingRingerFromDeviceConfig()).thenReturn(true); } }