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

Commit 11242d1a authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Refactor dependency on SystemVibrator." into main

parents 3fc649c2 01c78c69
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -78,7 +78,6 @@ import android.os.Process;
import android.os.ResultReceiver;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.SystemVibrator;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.BlockedNumberContract;
@@ -664,7 +663,8 @@ public class CallsManager extends Call.ListenerBase
            FeatureFlags featureFlags,
            com.android.internal.telephony.flags.FeatureFlags telephonyFlags,
            IncomingCallFilterGraphProvider incomingCallFilterGraphProvider,
            TelecomMetricsController metricsController) {
            TelecomMetricsController metricsController,
            Ringer.VibratorAdapter vibratorAdapter) {

        mContext = context;
        mLock = lock;
@@ -768,7 +768,7 @@ public class CallsManager extends Call.ListenerBase

        SystemSettingsUtil systemSettingsUtil = new SystemSettingsUtil();
        RingtoneFactory ringtoneFactory = new RingtoneFactory(this, context, featureFlags);
        SystemVibrator systemVibrator = new SystemVibrator(context);

        mInCallController = inCallControllerFactory.create(context, mLock, this,
                systemStateHelper, defaultDialerCache, mTimeoutsAdapter,
                emergencyCallHelper);
@@ -776,7 +776,7 @@ public class CallsManager extends Call.ListenerBase
        mCallDiagnosticServiceController = callDiagnosticServiceController;
        mCallDiagnosticServiceController.setInCallTonePlayerFactory(playerFactory);
        mRinger = new Ringer(playerFactory, context, systemSettingsUtil, asyncRingtonePlayer,
                ringtoneFactory, systemVibrator,
                ringtoneFactory, vibratorAdapter,
                new Ringer.VibrationEffectProxy(), mInCallController,
                mContext.getSystemService(NotificationManager.class),
                accessibilityManagerAdapter, featureFlags, mAnomalyReporter);
+15 −3
Original line number Diff line number Diff line
@@ -76,6 +76,18 @@ import java.util.function.Supplier;
public class Ringer {
    private static final String TAG = "TelecomRinger";

    /**
     * Abstraction of vibration.  We used to leverage SystemVibrator which implements the abstract
     * Vibrator class.  However, the Vibrator class has a bunch of abstract @hide methods we can
     * not implement, so we just abstract out a base interface here with only what we need.
     */
    public interface VibratorAdapter {
        boolean hasVibrator();
        void vibrate(VibrationEffect vibe, VibrationAttributes attributes);
        void cancel();
        Vibrator getVibrator();
    }

    public interface AccessibilityManagerAdapter {
        boolean startFlashNotificationSequence(@NonNull Context context,
                @AccessibilityManager.FlashNotificationReason int reason);
@@ -192,7 +204,7 @@ public class Ringer {
    private final InCallTonePlayer.Factory mPlayerFactory;
    private final AsyncRingtonePlayer mRingtonePlayer;
    private final Context mContext;
    private final Vibrator mVibrator;
    private final VibratorAdapter mVibrator;
    private final InCallController mInCallController;
    private final VibrationEffectProxy mVibrationEffectProxy;
    private final boolean mIsHapticPlaybackSupportedByDevice;
@@ -241,7 +253,7 @@ public class Ringer {
            SystemSettingsUtil systemSettingsUtil,
            AsyncRingtonePlayer asyncRingtonePlayer,
            RingtoneFactory ringtoneFactory,
            Vibrator vibrator,
            VibratorAdapter vibrator,
            VibrationEffectProxy vibrationEffectProxy,
            InCallController inCallController,
            NotificationManager notificationManager,
@@ -266,7 +278,7 @@ public class Ringer {

        mDefaultVibrationEffect =
                loadDefaultRingVibrationEffect(
                        mContext, mVibrator, mVibrationEffectProxy, featureFlags);
                        mContext, mVibrator.getVibrator(), mVibrationEffectProxy, featureFlags);

        mIsHapticPlaybackSupportedByDevice =
                mSystemSettingsUtil.isHapticPlaybackSupported(mContext);
+4 −2
Original line number Diff line number Diff line
@@ -233,7 +233,8 @@ public class TelecomSystem {
            BlockedNumbersAdapter blockedNumbersAdapter,
            FeatureFlags featureFlags,
            com.android.internal.telephony.flags.FeatureFlags telephonyFlags,
            Looper looper) {
            Looper looper,
            Ringer.VibratorAdapter vibratorAdapter) {
        mContext = context.getApplicationContext();
        mFeatureFlags = featureFlags;
        LogUtils.initLogging(mContext);
@@ -438,7 +439,8 @@ public class TelecomSystem {
                    featureFlags,
                    telephonyFlags,
                    IncomingCallFilterGraph::new,
                    metricsController);
                    metricsController,
                    vibratorAdapter);

            mIncomingCallNotifier = incomingCallNotifier;
            incomingCallNotifier.setCallsManagerProxy(new IncomingCallNotifier.CallsManagerProxy() {
+63 −1
Original line number Diff line number Diff line
@@ -20,13 +20,20 @@ import android.app.Service;
import android.app.role.RoleManager;
import android.content.Context;
import android.content.Intent;
import android.media.AudioAttributes;
import android.media.IAudioService;
import android.media.ToneGenerator;
import android.os.CombinedVibration;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.PowerManager;
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.SystemVibrator;
import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.os.VibratorManager;
import android.provider.BlockedNumberContract;
import android.provider.BlockedNumbersManager;
import android.telecom.Log;
@@ -115,6 +122,60 @@ public class TelecomService extends Service implements TelecomSystem.Component {
            HandlerThread handlerThread = new HandlerThread("TelecomSystem");
            handlerThread.start();

            Ringer.VibratorAdapter vibratorAdapter;
            if (featureFlags.resolveHiddenDependenciesTwo()) {
                final VibratorManager vibratorManager =
                        context.getSystemService(VibratorManager.class);
                vibratorAdapter = new Ringer.VibratorAdapter() {
                    @Override
                    public boolean hasVibrator() {
                        int[] vibratorIds = vibratorManager.getVibratorIds();
                        return vibratorIds != null && vibratorIds.length > 0;
                    }

                    @Override
                    public void vibrate(VibrationEffect vibe, VibrationAttributes attributes) {
                        // This is what SystemVibrator does.
                        CombinedVibration combinedEffect = CombinedVibration.createParallel(vibe);
                        vibratorManager.vibrate(combinedEffect, attributes);
                    }

                    @Override
                    public void cancel() {
                        vibratorManager.cancel();
                    }

                    @Override
                    public Vibrator getVibrator() {
                        return vibratorManager.getDefaultVibrator();
                    }
                };
            } else {
                // SystemVibrator extends Vibrator
                final SystemVibrator systemVibrator = new SystemVibrator(context);
                vibratorAdapter = new Ringer.VibratorAdapter() {
                    @Override
                    public boolean hasVibrator() {
                        return systemVibrator.hasVibrator();
                    }

                    @Override
                    public void vibrate(VibrationEffect vibe, VibrationAttributes attributes) {
                        systemVibrator.vibrate(vibe, attributes);
                    }

                    @Override
                    public void cancel() {
                        systemVibrator.cancel();
                    }

                    @Override
                    public Vibrator getVibrator() {
                        return systemVibrator;
                    }
                };
            }

            TelecomSystem.setInstance(
                    new TelecomSystem(
                            context,
@@ -247,7 +308,8 @@ public class TelecomService extends Service implements TelecomSystem.Component {
                            },
                            featureFlags,
                            new com.android.internal.telephony.flags.FeatureFlagsImpl(),
                            handlerThread.getLooper()));
                            handlerThread.getLooper(),
                            vibratorAdapter));
        }
    }

+4 −1
Original line number Diff line number Diff line
@@ -324,6 +324,7 @@ public class CallsManagerTest extends TelecomTestCase {
    @Mock private UserManager mMockCurrentUserManager;
    @Mock private IConnectionService mIConnectionService;
    @Mock private TelecomMetricsController mMockTelecomMetricsController;
    @Mock private Ringer.VibratorAdapter mMockVibratorAdapter;
    private CallsManager mCallsManager;

    @Override
@@ -357,6 +358,7 @@ public class CallsManagerTest extends TelecomTestCase {
        when(mTimeoutsAdapter.getNonVoipCallTransitoryStateTimeoutMillis())
                .thenReturn(STATE_TIMEOUT);
        when(mClockProxy.elapsedRealtime()).thenReturn(0L);
        when(mMockVibratorAdapter.hasVibrator()).thenReturn(true);
        mCallsManager = new CallsManager(
                mComponentContextFixture.getTestDouble().getApplicationContext(),
                mLock,
@@ -404,7 +406,8 @@ public class CallsManagerTest extends TelecomTestCase {
                mTelephonyFlags,
                (call, listener, context, timeoutsAdapter,
                        mFeatureFlags, lock) -> mIncomingCallFilterGraph,
                mMockTelecomMetricsController);
                mMockTelecomMetricsController,
                mMockVibratorAdapter);

        when(mPhoneAccountRegistrar.getPhoneAccount(
                eq(SELF_MANAGED_HANDLE), any())).thenReturn(SELF_MANAGED_ACCOUNT);
Loading