Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 526708de authored by Yiwen Chen's avatar Yiwen Chen Committed by android-build-merger
Browse files

Merge "1. Support Audio-Coupled Haptics in Ramping Ringer. 2. Vibration will...

Merge "1. Support Audio-Coupled Haptics in Ramping Ringer. 2. Vibration will last until phone is picked up or hanged up. 3. Add AudioAttributes to ramping ringer vibrate API." into qt-dev
am: e8704eb9

Change-Id: Ibbf24cc3cb3247a331e5d3629c6449ad81e2d946
parents 8d416f6f e8704eb9
Loading
Loading
Loading
Loading
+5 −33
Original line number Diff line number Diff line
@@ -281,11 +281,11 @@ public class Ringer {
                    mSystemSettingsUtil.getRampingRingerVibrationDuration() >= 0
                    ? mSystemSettingsUtil.getRampingRingerVibrationDuration() / 1000
                    : 0;
                if (mRampingRingerVibrationDuration != previousRampingRingerVibrationDuration) {
                    mRampingRingerVibrationEffect =
                        createRampingRingerVibrationEffect(mRampingRingerVibrationDuration);
                if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) {
                    effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall);
                } else {
                    effect = mDefaultVibrationEffect;
                }
                effect = mRampingRingerVibrationEffect;

                // configure volume shaper for ramping ringer
                int previousRampingRingerDuration = mRampingRingerDuration;
@@ -363,7 +363,7 @@ public class Ringer {
                    && mSystemSettingsUtil.enableRampingRingerFromDeviceConfig()
                    && isRingerAudible) {
                Log.i(this, "start vibration for ramping ringer.");
                mVibrator.vibrate(effect);
                mVibrator.vibrate(effect, VIBRATION_ATTRIBUTES);
                mIsVibrating = true;
            } else {
                Log.i(this, "start normal vibration.");
@@ -375,34 +375,6 @@ public class Ringer {
        }
    }

    private VibrationEffect createRampingRingerVibrationEffect(int vibrationSeconds) {
        if (vibrationSeconds < 1) {  // vibration duration has to be at least 1 second long.
            return null;
        }
        List<Long> rampingRingerVibrationPatternList = new ArrayList<>();
        List<Integer> rampingRingerVibrationAmplitudeList = new ArrayList<>();
        while (vibrationSeconds > 0) {
            rampingRingerVibrationPatternList.addAll(
                Arrays.stream(PULSE_RAMPING_PATTERN).boxed().collect(Collectors.toList()));
            rampingRingerVibrationAmplitudeList.addAll(
                Arrays.stream(PULSE_RAMPING_AMPLITUDE).boxed().collect(Collectors.toList()));
            vibrationSeconds -= 2;
        }
        // remove the last second of pause
        if (vibrationSeconds < 0) {
            rampingRingerVibrationPatternList.remove(
                rampingRingerVibrationPatternList.size() - 1);
            rampingRingerVibrationAmplitudeList.remove(
                rampingRingerVibrationAmplitudeList.size() - 1);
        }
        long[] rampingRingerVibrationPatternArray =
            rampingRingerVibrationPatternList.stream().mapToLong(i -> i).toArray();
        int[] rampingRingerVibrationAmplitudeArray =
            rampingRingerVibrationAmplitudeList.stream().mapToInt(i -> i).toArray();
        return VibrationEffect.createWaveform(rampingRingerVibrationPatternArray,
            rampingRingerVibrationAmplitudeArray, -1 /* not repeat */);
    }

    private VibrationEffect getVibrationEffectForCall(RingtoneFactory factory, Call call) {
        VibrationEffect effect = null;
        Ringtone ringtone = factory.getRingtone(call);
+10 −1
Original line number Diff line number Diff line
@@ -40,6 +40,10 @@ public class SystemSettingsUtil {
    /** 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";

    public boolean isTheaterModeOn(Context context) {
        return Settings.Global.getInt(context.getContentResolver(), Settings.Global.THEATER_MODE_ON,
                0) == 1;
@@ -70,6 +74,11 @@ public class SystemSettingsUtil {
                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);