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

Commit b34b3710 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 8618269 from e20b2f64 to tm-d1-release

Change-Id: I62f03f57cd0dbcecba572fd06fac3a8f03a2e26d
parents debdcf6e e20b2f64
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -209,7 +209,7 @@ public class AsyncRingtonePlayer {
                        isVibrationEnabled);
                SystemSettingsUtil systemSettingsUtil = new SystemSettingsUtil();
                if (hasHaptics && (volumeShaperConfig == null
                        || systemSettingsUtil.enableAudioCoupledVibrationForRampingRinger())) {
                        || systemSettingsUtil.isAudioCoupledVibrationForRampingRingerEnabled())) {
                    AudioAttributes attributes = mRingtone.getAudioAttributes();
                    Log.d(this, "handlePlay: %s haptic channel",
                            (isVibrationEnabled ? "unmuting" : "muting"));
+15 −29
Original line number Diff line number Diff line
@@ -275,7 +275,9 @@ public class Ringer {
        VibrationEffect effect;
        CompletableFuture<Boolean> hapticsFuture = null;
        // Determine if the settings and DND mode indicate that the vibrator can be used right now.
        boolean isVibratorEnabled = isVibratorEnabled(mContext, foregroundCall);
        boolean isVibratorEnabled = isVibratorEnabled(mContext);
        boolean shouldApplyRampingRinger =
                isVibratorEnabled && mSystemSettingsUtil.isRampingRingerEnabled(mContext);
        if (attributes.isRingerAudible()) {
            mRingingCall = foregroundCall;
            Log.addEvent(foregroundCall, LogUtils.Events.START_RINGER);
@@ -283,9 +285,9 @@ 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)) {
            if (shouldApplyRampingRinger) {
                Log.i(this, "start ramping ringer.");
                if (mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) {
                if (mSystemSettingsUtil.isAudioCoupledVibrationForRampingRingerEnabled()) {
                    effect = getVibrationEffectForCall(mRingtoneFactory, foregroundCall);
                } else {
                    effect = mDefaultVibrationEffect;
@@ -331,8 +333,8 @@ public class Ringer {
                            isUsingAudioCoupledHaptics, mIsHapticPlaybackSupportedByDevice);
                    maybeStartVibration(foregroundCall, shouldRingForContact, effect,
                            isVibratorEnabled, isRingerAudible);
                } else if (mSystemSettingsUtil.applyRampingRinger(mContext)
                           && !mSystemSettingsUtil.enableAudioCoupledVibrationForRampingRinger()) {
                } else if (shouldApplyRampingRinger
                        && !mSystemSettingsUtil.isAudioCoupledVibrationForRampingRingerEnabled()) {
                    Log.i(this, "startRinging: apply ramping ringer vibration");
                    maybeStartVibration(foregroundCall, shouldRingForContact, effect,
                            isVibratorEnabled, isRingerAudible);
@@ -360,15 +362,13 @@ public class Ringer {
        VibrationEffect effect, boolean isVibrationEnabled, boolean isRingerAudible) {
        synchronized (mLock) {
            mAudioManager = mContext.getSystemService(AudioManager.class);
            if (isVibrationEnabled
                    && !mIsVibrating && shouldRingForContact) {
            if (isVibrationEnabled && !mIsVibrating && shouldRingForContact) {
                Log.addEvent(foregroundCall, LogUtils.Events.START_VIBRATOR,
                        "hasVibrator=%b, userRequestsVibrate=%b, ringerMode=%d, isVibrating=%b",
                        mVibrator.hasVibrator(),
                        mSystemSettingsUtil.canVibrateWhenRinging(mContext),
                        mSystemSettingsUtil.isRingVibrationEnabled(mContext),
                        mAudioManager.getRingerModeInternal(), mIsVibrating);
                if (mSystemSettingsUtil.applyRampingRinger(mContext)
                        && isRingerAudible) {
                if (mSystemSettingsUtil.isRampingRingerEnabled(mContext) && isRingerAudible) {
                    Log.i(this, "start vibration for ramping ringer.");
                } else {
                    Log.i(this, "start normal vibration.");
@@ -380,7 +380,7 @@ public class Ringer {
                Log.addEvent(foregroundCall, LogUtils.Events.SKIP_VIBRATION,
                        "hasVibrator=%b, userRequestsVibrate=%b, ringerMode=%d, isVibrating=%b",
                        mVibrator.hasVibrator(),
                        mSystemSettingsUtil.canVibrateWhenRinging(mContext),
                        mSystemSettingsUtil.isRingVibrationEnabled(mContext),
                        mAudioManager.getRingerModeInternal(), mIsVibrating);
            }
        }
@@ -503,25 +503,11 @@ public class Ringer {
        }
    }

    private boolean isVibratorEnabled(Context context, Call call) {
    private boolean isVibratorEnabled(Context context) {
        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        int ringerMode = audioManager.getRingerModeInternal();
        boolean shouldVibrate;
        if (getVibrateWhenRinging(context)) {
            shouldVibrate = ringerMode != AudioManager.RINGER_MODE_SILENT;
        } else {
            shouldVibrate = ringerMode == AudioManager.RINGER_MODE_VIBRATE;
        }

        return shouldVibrate;
    }

    private boolean getVibrateWhenRinging(Context context) {
        if (!mVibrator.hasVibrator()) {
            return false;
        }
        return mSystemSettingsUtil.canVibrateWhenRinging(context)
            || mSystemSettingsUtil.applyRampingRinger(context);
        return mVibrator.hasVibrator()
                && mSystemSettingsUtil.isRingVibrationEnabled(context)
                && audioManager.getRingerModeInternal() != AudioManager.RINGER_MODE_SILENT;
    }

    private RingerAttributes getRingerAttributes(Call call, boolean isHfpDeviceAttached) {
+13 −5
Original line number Diff line number Diff line
@@ -18,9 +18,10 @@ package com.android.server.telecom;

import android.content.Context;
import android.media.AudioManager;
import android.os.VibrationAttributes;
import android.os.Vibrator;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.telecom.Log;

import com.android.internal.annotations.VisibleForTesting;

@@ -39,9 +40,16 @@ public class SystemSettingsUtil {
                0) == 1;
    }

    public boolean canVibrateWhenRinging(Context context) {
    public boolean isRingVibrationEnabled(Context context) {
        // VIBRATE_WHEN_RINGING setting was deprecated, only RING_VIBRATION_INTENSITY controls the
        // ringtone vibrations on/off state now. Ramping ringer should only be applied when ring
        // vibration intensity is ON, otherwise the ringtone sound should not be delayed as there
        // will be no ring vibration.
        return Settings.System.getIntForUser(context.getContentResolver(),
                Settings.System.VIBRATE_WHEN_RINGING, 0, context.getUserId()) != 0;
                Settings.System.RING_VIBRATION_INTENSITY,
                context.getSystemService(Vibrator.class).getDefaultVibrationIntensity(
                        VibrationAttributes.USAGE_RINGTONE),
                context.getUserId()) != Vibrator.VIBRATION_INTENSITY_OFF;
    }

    public boolean isEnhancedCallBlockingEnabled(Context context) {
@@ -55,11 +63,11 @@ public class SystemSettingsUtil {
                context.getUserId());
    }

    public boolean applyRampingRinger(Context context) {
    public boolean isRampingRingerEnabled(Context context) {
        return context.getSystemService(AudioManager.class).isRampingRingerEnabled();
    }

    public boolean enableAudioCoupledVibrationForRampingRinger() {
    public boolean isAudioCoupledVibrationForRampingRingerEnabled() {
        return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY,
                RAMPING_RINGER_AUDIO_COUPLED_VIBRATION_ENABLED, false);
    }
+4 −1
Original line number Diff line number Diff line
@@ -227,13 +227,16 @@ public class BluetoothRouteTransitionTests extends TelecomTestCase {

        @Override
        public String toString() {
            String expectedListenerUpdatesStr = expectedListenerUpdates == null ? ""
                    : Arrays.stream(expectedListenerUpdates).map(ListenerUpdate::name)
                            .collect(Collectors.joining(","));
            return "BluetoothRouteTestParameters{" +
                    "name='" + name + '\'' +
                    ", initialBluetoothState='" + initialBluetoothState + '\'' +
                    ", initialDevice=" + initialDevice +
                    ", messageType=" + messageType +
                    ", messageDevice='" + messageDevice + '\'' +
                    ", expectedListenerUpdate=" + expectedListenerUpdates +
                    ", expectedListenerUpdate='" + expectedListenerUpdatesStr + '\'' +
                    ", expectedBluetoothInteraction=" + expectedBluetoothInteraction +
                    ", expectedConnectionDevice='" + expectedConnectionDevice + '\'' +
                    ", expectedFinalStateName='" + expectedFinalStateName + '\'' +
+9 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import android.os.PersistableBundle;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.Vibrator;
import android.os.VibratorManager;
import android.permission.PermissionCheckerManager;
import android.telecom.ConnectionService;
@@ -220,6 +221,8 @@ public class ComponentContextFixture implements TestFixture<Context> {
                    return mTelephonyRegistryManager;
                case Context.UI_MODE_SERVICE:
                    return mUiModeManager;
                case Context.VIBRATOR_SERVICE:
                    return mVibrator;
                case Context.VIBRATOR_MANAGER_SERVICE:
                    return mVibratorManager;
                case Context.PERMISSION_CHECKER_SERVICE:
@@ -249,6 +252,8 @@ public class ComponentContextFixture implements TestFixture<Context> {
                return Context.TELEPHONY_REGISTRY_SERVICE;
            } else if (svcClass == UiModeManager.class) {
                return Context.UI_MODE_SERVICE;
            } else if (svcClass == Vibrator.class) {
                return Context.VIBRATOR_SERVICE;
            } else if (svcClass == VibratorManager.class) {
                return Context.VIBRATOR_MANAGER_SERVICE;
            } else if (svcClass == PermissionCheckerManager.class) {
@@ -557,6 +562,7 @@ public class ComponentContextFixture implements TestFixture<Context> {
    private final RoleManager mRoleManager = mock(RoleManager.class);
    private final TelephonyRegistryManager mTelephonyRegistryManager =
            mock(TelephonyRegistryManager.class);
    private final Vibrator mVibrator = mock(Vibrator.class);
    private final VibratorManager mVibratorManager = mock(VibratorManager.class);
    private final UiModeManager mUiModeManager = mock(UiModeManager.class);
    private final PermissionCheckerManager mPermissionCheckerManager =
@@ -628,7 +634,10 @@ public class ComponentContextFixture implements TestFixture<Context> {
        }

        when(mPermissionInfo.isAppOp()).thenReturn(true);
        when(mVibrator.getDefaultVibrationIntensity(anyInt()))
                .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
        when(mVibratorManager.getVibratorIds()).thenReturn(new int[0]);
        when(mVibratorManager.getDefaultVibrator()).thenReturn(mVibrator);

        // Used in CreateConnectionProcessor to rank emergency numbers by viability.
        // For the test, make them all equal to INVALID so that the preferred PhoneAccount will be
Loading