Loading src/com/android/server/telecom/Call.java +2 −1 Original line number Diff line number Diff line Loading @@ -1331,7 +1331,8 @@ public class Call implements CreateConnectionResponse { } } Bundle getIntentExtras() { @VisibleForTesting public Bundle getIntentExtras() { return mIntentExtras; } Loading src/com/android/server/telecom/CallScreening.java +6 −3 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class CallScreening { private final Listener mListener; private final TelecomSystem.SyncRoot mLock; private final PhoneAccountRegistrar mPhoneAccountRegistrar; private final CallsManager mCallsManager; private final Handler mHandler = new Handler(); private Call mCall; private ICallScreeningService mService; Loading @@ -62,12 +63,13 @@ public class CallScreening { public CallScreening( Context context, Listener listener, CallsManager callsManager, TelecomSystem.SyncRoot lock, PhoneAccountRegistrar phoneAccountRegistrar, Call call) { mContext = context; mListener = listener; mCallsManager = callsManager; mListener = callsManager; mLock = lock; mPhoneAccountRegistrar = phoneAccountRegistrar; mCall = call; Loading Loading @@ -113,7 +115,8 @@ public class CallScreening { Intent intent = new Intent(CallScreeningService.SERVICE_INTERFACE) .setPackage(dialerPackage); List<ResolveInfo> entries = mContext.getPackageManager().queryIntentServices(intent, 0); List<ResolveInfo> entries = mContext.getPackageManager().queryIntentServicesAsUser( intent, 0, mCallsManager.getCurrentUserHandle().getIdentifier()); if (entries.isEmpty()) { return false; } Loading src/com/android/server/telecom/CallsManager.java +17 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.telecom; import android.app.ActivityManager; import android.content.Context; import android.content.pm.UserInfo; import android.content.Intent; Loading Loading @@ -109,7 +110,8 @@ public class CallsManager extends Call.ListenerBase {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING}; private static final int[] LIVE_CALL_STATES = {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING, CallState.ACTIVE}; {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING, CallState.ACTIVE}; public static final String TELECOM_CALL_ID_PREFIX = "TC@"; // Maps call technologies in PhoneConstants to those in Analytics. Loading Loading @@ -142,6 +144,11 @@ public class CallsManager extends Call.ListenerBase */ private int mCallId = 0; /** * Stores the current foreground user. */ private UserHandle mCurrentUserHandle = UserHandle.of(ActivityManager.getCurrentUser()); private final ConnectionServiceRepository mConnectionServiceRepository; private final DtmfLocalTonePlayer mDtmfLocalTonePlayer; private final InCallController mInCallController; Loading Loading @@ -230,8 +237,9 @@ public class CallsManager extends Call.ListenerBase RingtoneFactory ringtoneFactory = new RingtoneFactory(context); SystemVibrator systemVibrator = new SystemVibrator(context); AsyncRingtonePlayer asyncRingtonePlayer = new AsyncRingtonePlayer(); mInCallController = new InCallController(context, mLock, this, systemStateProvider); mRinger = new Ringer(playerFactory, context, systemSettingsUtil, asyncRingtonePlayer, ringtoneFactory, systemVibrator); ringtoneFactory, systemVibrator, mInCallController); mCallAudioManager = new CallAudioManager(callAudioRouteStateMachine, this,new CallAudioModeStateMachine((AudioManager) Loading @@ -243,7 +251,6 @@ public class CallsManager extends Call.ListenerBase mProximitySensorManager = proximitySensorManagerFactory.create(context, this); mPhoneStateBroadcaster = new PhoneStateBroadcaster(this); mCallLogManager = new CallLogManager(context, phoneAccountRegistrar); mInCallController = new InCallController(context, mLock, this, systemStateProvider); mConnectionServiceRepository = new ConnectionServiceRepository(mPhoneAccountRegistrar, mContext, mLock, this); mInCallWakeLockController = inCallWakeLockControllerFactory.create(context, this); Loading Loading @@ -553,6 +560,10 @@ public class CallsManager extends Call.ListenerBase return mCallAudioManager.getForegroundCall(); } public UserHandle getCurrentUserHandle() { return mCurrentUserHandle; } CallAudioManager getCallAudioManager() { return mCallAudioManager; } Loading @@ -561,7 +572,8 @@ public class CallsManager extends Call.ListenerBase return mInCallController; } boolean hasEmergencyCall() { @VisibleForTesting public boolean hasEmergencyCall() { for (Call call : mCalls) { if (call.isEmergencyCall()) { return true; Loading Loading @@ -1848,6 +1860,7 @@ public class CallsManager extends Call.ListenerBase * including the user itself. There may be chances that profiles are not started yet. */ void onUserSwitch(UserHandle userHandle) { mCurrentUserHandle = userHandle; mMissedCallNotifier.setCurrentUserHandle(userHandle); final UserManager userManager = UserManager.get(mContext); List<UserInfo> profiles = userManager.getEnabledProfiles(userHandle.getIdentifier()); Loading src/com/android/server/telecom/InCallController.java +27 −11 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.telecom.TelecomManager; import android.text.TextUtils; import android.util.ArrayMap; import com.android.internal.annotations.VisibleForTesting; // TODO: Needed for move to system service: import com.android.internal.R; import com.android.internal.telecom.IInCallService; import com.android.internal.util.IndentingPrintWriter; Loading Loading @@ -345,7 +346,8 @@ public final class InCallController extends CallsManagerListenerBase { * * @param call The newly added call that triggered the binding to the in-call services. */ private void bindToServices(Call call) { @VisibleForTesting public void bindToServices(Call call) { ComponentName inCallUIService = null; ComponentName carModeInCallUIService = null; List<ComponentName> nonUIInCallServices = new LinkedList<>(); Loading @@ -353,12 +355,16 @@ public final class InCallController extends CallsManagerListenerBase { // Loop through all the InCallService implementations that exist in the devices; PackageManager packageManager = mContext.getPackageManager(); Intent serviceIntent = new Intent(InCallService.SERVICE_INTERFACE); for (ResolveInfo entry : packageManager.queryIntentServices(serviceIntent, PackageManager.GET_META_DATA)) { for (ResolveInfo entry : packageManager.queryIntentServicesAsUser( serviceIntent, PackageManager.GET_META_DATA, mCallsManager.getCurrentUserHandle().getIdentifier())) { ServiceInfo serviceInfo = entry.serviceInfo; if (serviceInfo != null) { ComponentName componentName = new ComponentName(serviceInfo.packageName, serviceInfo.name); Log.v(this, "ICS: " + componentName + ", user: " + entry.targetUserId); switch (getInCallServiceType(entry.serviceInfo, packageManager)) { case IN_CALL_SERVICE_TYPE_DIALER_UI: Loading Loading @@ -500,7 +506,8 @@ public final class InCallController extends CallsManagerListenerBase { // Check to see that it is the default dialer package boolean isDefaultDialerPackage = Objects.equals(serviceInfo.packageName, DefaultDialerManager.getDefaultDialerApplication(mContext)); DefaultDialerManager.getDefaultDialerApplication( mContext, mCallsManager.getCurrentUserHandle().getIdentifier())); boolean isUIService = serviceInfo.metaData != null && serviceInfo.metaData.getBoolean( TelecomManager.METADATA_IN_CALL_SERVICE_UI, false); Loading Loading @@ -706,17 +713,26 @@ public final class InCallController extends CallsManagerListenerBase { pw.decreaseIndent(); } static boolean doesDefaultDialerSupportRinging(Context context) { String dialerPackage = DefaultDialerManager .getDefaultDialerApplication(context, UserHandle.USER_CURRENT); if (TextUtils.isEmpty(dialerPackage)) { public boolean doesConnectedDialerSupportRinging() { String ringingPackage = null; if (mInCallUIComponentName != null) { ringingPackage = mInCallUIComponentName.getPackageName().trim(); } if (TextUtils.isEmpty(ringingPackage)) { // The current in-call UI returned nothing, so lets use the default dialer. ringingPackage = DefaultDialerManager.getDefaultDialerApplication( mContext, UserHandle.USER_CURRENT); } if (TextUtils.isEmpty(ringingPackage)) { return false; } Intent intent = new Intent(InCallService.SERVICE_INTERFACE) .setPackage(dialerPackage); List<ResolveInfo> entries = context.getPackageManager() .queryIntentServices(intent, PackageManager.GET_META_DATA); .setPackage(ringingPackage); List<ResolveInfo> entries = mContext.getPackageManager().queryIntentServicesAsUser( intent, PackageManager.GET_META_DATA, mCallsManager.getCurrentUserHandle().getIdentifier()); if (entries.isEmpty()) { return false; } Loading src/com/android/server/telecom/Ringer.java +6 −3 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ public final class Ringer { private final AsyncRingtonePlayer mRingtonePlayer; private final Context mContext; private final Vibrator mVibrator; private final InCallController mInCallController; private InCallTonePlayer mCallWaitingPlayer; private RingtoneFactory mRingtoneFactory; Loading @@ -79,7 +80,8 @@ public final class Ringer { SystemSettingsUtil systemSettingsUtil, AsyncRingtonePlayer asyncRingtonePlayer, RingtoneFactory ringtoneFactory, Vibrator vibrator) { Vibrator vibrator, InCallController inCallController) { mSystemSettingsUtil = systemSettingsUtil; mPlayerFactory = playerFactory; Loading @@ -89,6 +91,7 @@ public final class Ringer { mVibrator = vibrator; mRingtonePlayer = asyncRingtonePlayer; mRingtoneFactory = ringtoneFactory; mInCallController = inCallController; } public void startRinging(Call foregroundCall) { Loading @@ -101,7 +104,7 @@ public final class Ringer { return; } if (InCallController.doesDefaultDialerSupportRinging(mContext)) { if (mInCallController.doesConnectedDialerSupportRinging()) { Log.event(foregroundCall, Log.Events.SKIP_RINGING); return; } Loading Loading @@ -138,7 +141,7 @@ public final class Ringer { return; } if (InCallController.doesDefaultDialerSupportRinging(mContext)) { if (mInCallController.doesConnectedDialerSupportRinging()) { Log.event(call, Log.Events.SKIP_RINGING); return; } Loading Loading
src/com/android/server/telecom/Call.java +2 −1 Original line number Diff line number Diff line Loading @@ -1331,7 +1331,8 @@ public class Call implements CreateConnectionResponse { } } Bundle getIntentExtras() { @VisibleForTesting public Bundle getIntentExtras() { return mIntentExtras; } Loading
src/com/android/server/telecom/CallScreening.java +6 −3 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ public class CallScreening { private final Listener mListener; private final TelecomSystem.SyncRoot mLock; private final PhoneAccountRegistrar mPhoneAccountRegistrar; private final CallsManager mCallsManager; private final Handler mHandler = new Handler(); private Call mCall; private ICallScreeningService mService; Loading @@ -62,12 +63,13 @@ public class CallScreening { public CallScreening( Context context, Listener listener, CallsManager callsManager, TelecomSystem.SyncRoot lock, PhoneAccountRegistrar phoneAccountRegistrar, Call call) { mContext = context; mListener = listener; mCallsManager = callsManager; mListener = callsManager; mLock = lock; mPhoneAccountRegistrar = phoneAccountRegistrar; mCall = call; Loading Loading @@ -113,7 +115,8 @@ public class CallScreening { Intent intent = new Intent(CallScreeningService.SERVICE_INTERFACE) .setPackage(dialerPackage); List<ResolveInfo> entries = mContext.getPackageManager().queryIntentServices(intent, 0); List<ResolveInfo> entries = mContext.getPackageManager().queryIntentServicesAsUser( intent, 0, mCallsManager.getCurrentUserHandle().getIdentifier()); if (entries.isEmpty()) { return false; } Loading
src/com/android/server/telecom/CallsManager.java +17 −4 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.telecom; import android.app.ActivityManager; import android.content.Context; import android.content.pm.UserInfo; import android.content.Intent; Loading Loading @@ -109,7 +110,8 @@ public class CallsManager extends Call.ListenerBase {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING}; private static final int[] LIVE_CALL_STATES = {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING, CallState.ACTIVE}; {CallState.CONNECTING, CallState.SELECT_PHONE_ACCOUNT, CallState.DIALING, CallState.ACTIVE}; public static final String TELECOM_CALL_ID_PREFIX = "TC@"; // Maps call technologies in PhoneConstants to those in Analytics. Loading Loading @@ -142,6 +144,11 @@ public class CallsManager extends Call.ListenerBase */ private int mCallId = 0; /** * Stores the current foreground user. */ private UserHandle mCurrentUserHandle = UserHandle.of(ActivityManager.getCurrentUser()); private final ConnectionServiceRepository mConnectionServiceRepository; private final DtmfLocalTonePlayer mDtmfLocalTonePlayer; private final InCallController mInCallController; Loading Loading @@ -230,8 +237,9 @@ public class CallsManager extends Call.ListenerBase RingtoneFactory ringtoneFactory = new RingtoneFactory(context); SystemVibrator systemVibrator = new SystemVibrator(context); AsyncRingtonePlayer asyncRingtonePlayer = new AsyncRingtonePlayer(); mInCallController = new InCallController(context, mLock, this, systemStateProvider); mRinger = new Ringer(playerFactory, context, systemSettingsUtil, asyncRingtonePlayer, ringtoneFactory, systemVibrator); ringtoneFactory, systemVibrator, mInCallController); mCallAudioManager = new CallAudioManager(callAudioRouteStateMachine, this,new CallAudioModeStateMachine((AudioManager) Loading @@ -243,7 +251,6 @@ public class CallsManager extends Call.ListenerBase mProximitySensorManager = proximitySensorManagerFactory.create(context, this); mPhoneStateBroadcaster = new PhoneStateBroadcaster(this); mCallLogManager = new CallLogManager(context, phoneAccountRegistrar); mInCallController = new InCallController(context, mLock, this, systemStateProvider); mConnectionServiceRepository = new ConnectionServiceRepository(mPhoneAccountRegistrar, mContext, mLock, this); mInCallWakeLockController = inCallWakeLockControllerFactory.create(context, this); Loading Loading @@ -553,6 +560,10 @@ public class CallsManager extends Call.ListenerBase return mCallAudioManager.getForegroundCall(); } public UserHandle getCurrentUserHandle() { return mCurrentUserHandle; } CallAudioManager getCallAudioManager() { return mCallAudioManager; } Loading @@ -561,7 +572,8 @@ public class CallsManager extends Call.ListenerBase return mInCallController; } boolean hasEmergencyCall() { @VisibleForTesting public boolean hasEmergencyCall() { for (Call call : mCalls) { if (call.isEmergencyCall()) { return true; Loading Loading @@ -1848,6 +1860,7 @@ public class CallsManager extends Call.ListenerBase * including the user itself. There may be chances that profiles are not started yet. */ void onUserSwitch(UserHandle userHandle) { mCurrentUserHandle = userHandle; mMissedCallNotifier.setCurrentUserHandle(userHandle); final UserManager userManager = UserManager.get(mContext); List<UserInfo> profiles = userManager.getEnabledProfiles(userHandle.getIdentifier()); Loading
src/com/android/server/telecom/InCallController.java +27 −11 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.telecom.TelecomManager; import android.text.TextUtils; import android.util.ArrayMap; import com.android.internal.annotations.VisibleForTesting; // TODO: Needed for move to system service: import com.android.internal.R; import com.android.internal.telecom.IInCallService; import com.android.internal.util.IndentingPrintWriter; Loading Loading @@ -345,7 +346,8 @@ public final class InCallController extends CallsManagerListenerBase { * * @param call The newly added call that triggered the binding to the in-call services. */ private void bindToServices(Call call) { @VisibleForTesting public void bindToServices(Call call) { ComponentName inCallUIService = null; ComponentName carModeInCallUIService = null; List<ComponentName> nonUIInCallServices = new LinkedList<>(); Loading @@ -353,12 +355,16 @@ public final class InCallController extends CallsManagerListenerBase { // Loop through all the InCallService implementations that exist in the devices; PackageManager packageManager = mContext.getPackageManager(); Intent serviceIntent = new Intent(InCallService.SERVICE_INTERFACE); for (ResolveInfo entry : packageManager.queryIntentServices(serviceIntent, PackageManager.GET_META_DATA)) { for (ResolveInfo entry : packageManager.queryIntentServicesAsUser( serviceIntent, PackageManager.GET_META_DATA, mCallsManager.getCurrentUserHandle().getIdentifier())) { ServiceInfo serviceInfo = entry.serviceInfo; if (serviceInfo != null) { ComponentName componentName = new ComponentName(serviceInfo.packageName, serviceInfo.name); Log.v(this, "ICS: " + componentName + ", user: " + entry.targetUserId); switch (getInCallServiceType(entry.serviceInfo, packageManager)) { case IN_CALL_SERVICE_TYPE_DIALER_UI: Loading Loading @@ -500,7 +506,8 @@ public final class InCallController extends CallsManagerListenerBase { // Check to see that it is the default dialer package boolean isDefaultDialerPackage = Objects.equals(serviceInfo.packageName, DefaultDialerManager.getDefaultDialerApplication(mContext)); DefaultDialerManager.getDefaultDialerApplication( mContext, mCallsManager.getCurrentUserHandle().getIdentifier())); boolean isUIService = serviceInfo.metaData != null && serviceInfo.metaData.getBoolean( TelecomManager.METADATA_IN_CALL_SERVICE_UI, false); Loading Loading @@ -706,17 +713,26 @@ public final class InCallController extends CallsManagerListenerBase { pw.decreaseIndent(); } static boolean doesDefaultDialerSupportRinging(Context context) { String dialerPackage = DefaultDialerManager .getDefaultDialerApplication(context, UserHandle.USER_CURRENT); if (TextUtils.isEmpty(dialerPackage)) { public boolean doesConnectedDialerSupportRinging() { String ringingPackage = null; if (mInCallUIComponentName != null) { ringingPackage = mInCallUIComponentName.getPackageName().trim(); } if (TextUtils.isEmpty(ringingPackage)) { // The current in-call UI returned nothing, so lets use the default dialer. ringingPackage = DefaultDialerManager.getDefaultDialerApplication( mContext, UserHandle.USER_CURRENT); } if (TextUtils.isEmpty(ringingPackage)) { return false; } Intent intent = new Intent(InCallService.SERVICE_INTERFACE) .setPackage(dialerPackage); List<ResolveInfo> entries = context.getPackageManager() .queryIntentServices(intent, PackageManager.GET_META_DATA); .setPackage(ringingPackage); List<ResolveInfo> entries = mContext.getPackageManager().queryIntentServicesAsUser( intent, PackageManager.GET_META_DATA, mCallsManager.getCurrentUserHandle().getIdentifier()); if (entries.isEmpty()) { return false; } Loading
src/com/android/server/telecom/Ringer.java +6 −3 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ public final class Ringer { private final AsyncRingtonePlayer mRingtonePlayer; private final Context mContext; private final Vibrator mVibrator; private final InCallController mInCallController; private InCallTonePlayer mCallWaitingPlayer; private RingtoneFactory mRingtoneFactory; Loading @@ -79,7 +80,8 @@ public final class Ringer { SystemSettingsUtil systemSettingsUtil, AsyncRingtonePlayer asyncRingtonePlayer, RingtoneFactory ringtoneFactory, Vibrator vibrator) { Vibrator vibrator, InCallController inCallController) { mSystemSettingsUtil = systemSettingsUtil; mPlayerFactory = playerFactory; Loading @@ -89,6 +91,7 @@ public final class Ringer { mVibrator = vibrator; mRingtonePlayer = asyncRingtonePlayer; mRingtoneFactory = ringtoneFactory; mInCallController = inCallController; } public void startRinging(Call foregroundCall) { Loading @@ -101,7 +104,7 @@ public final class Ringer { return; } if (InCallController.doesDefaultDialerSupportRinging(mContext)) { if (mInCallController.doesConnectedDialerSupportRinging()) { Log.event(foregroundCall, Log.Events.SKIP_RINGING); return; } Loading Loading @@ -138,7 +141,7 @@ public final class Ringer { return; } if (InCallController.doesDefaultDialerSupportRinging(mContext)) { if (mInCallController.doesConnectedDialerSupportRinging()) { Log.event(call, Log.Events.SKIP_RINGING); return; } Loading