Loading src/com/android/server/telecom/CallsManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading src/com/android/server/telecom/Ringer.java +15 −3 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -241,7 +253,7 @@ public class Ringer { SystemSettingsUtil systemSettingsUtil, AsyncRingtonePlayer asyncRingtonePlayer, RingtoneFactory ringtoneFactory, Vibrator vibrator, VibratorAdapter vibrator, VibrationEffectProxy vibrationEffectProxy, InCallController inCallController, NotificationManager notificationManager, Loading @@ -266,7 +278,7 @@ public class Ringer { mDefaultVibrationEffect = loadDefaultRingVibrationEffect( mContext, mVibrator, mVibrationEffectProxy, featureFlags); mContext, mVibrator.getVibrator(), mVibrationEffectProxy, featureFlags); mIsHapticPlaybackSupportedByDevice = mSystemSettingsUtil.isHapticPlaybackSupported(mContext); Loading src/com/android/server/telecom/TelecomSystem.java +4 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -438,7 +439,8 @@ public class TelecomSystem { featureFlags, telephonyFlags, IncomingCallFilterGraph::new, metricsController); metricsController, vibratorAdapter); mIncomingCallNotifier = incomingCallNotifier; incomingCallNotifier.setCallsManagerProxy(new IncomingCallNotifier.CallsManagerProxy() { Loading src/com/android/server/telecom/components/TelecomService.java +63 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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)); } } Loading tests/src/com/android/server/telecom/tests/CallsManagerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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 Loading
src/com/android/server/telecom/CallsManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading
src/com/android/server/telecom/Ringer.java +15 −3 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -241,7 +253,7 @@ public class Ringer { SystemSettingsUtil systemSettingsUtil, AsyncRingtonePlayer asyncRingtonePlayer, RingtoneFactory ringtoneFactory, Vibrator vibrator, VibratorAdapter vibrator, VibrationEffectProxy vibrationEffectProxy, InCallController inCallController, NotificationManager notificationManager, Loading @@ -266,7 +278,7 @@ public class Ringer { mDefaultVibrationEffect = loadDefaultRingVibrationEffect( mContext, mVibrator, mVibrationEffectProxy, featureFlags); mContext, mVibrator.getVibrator(), mVibrationEffectProxy, featureFlags); mIsHapticPlaybackSupportedByDevice = mSystemSettingsUtil.isHapticPlaybackSupported(mContext); Loading
src/com/android/server/telecom/TelecomSystem.java +4 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -438,7 +439,8 @@ public class TelecomSystem { featureFlags, telephonyFlags, IncomingCallFilterGraph::new, metricsController); metricsController, vibratorAdapter); mIncomingCallNotifier = incomingCallNotifier; incomingCallNotifier.setCallsManagerProxy(new IncomingCallNotifier.CallsManagerProxy() { Loading
src/com/android/server/telecom/components/TelecomService.java +63 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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)); } } Loading
tests/src/com/android/server/telecom/tests/CallsManagerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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