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

Commit cf80e1fb authored by Santos Cordon's avatar Santos Cordon Committed by Android (Google) Code Review
Browse files

Merge "Add *AsUser() calls where appropriate for multi-user support." into nyc-dev

parents cc21c7a4 f0f99f34
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1331,7 +1331,8 @@ public class Call implements CreateConnectionResponse {
        }
    }

    Bundle getIntentExtras() {
    @VisibleForTesting
    public Bundle getIntentExtras() {
        return mIntentExtras;
    }

+6 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
        }
+17 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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.
@@ -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;
@@ -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)
@@ -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);
@@ -553,6 +560,10 @@ public class CallsManager extends Call.ListenerBase
        return mCallAudioManager.getForegroundCall();
    }

    public UserHandle getCurrentUserHandle() {
        return mCurrentUserHandle;
    }

    CallAudioManager getCallAudioManager() {
        return mCallAudioManager;
    }
@@ -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;
@@ -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());
+27 −11
Original line number Diff line number Diff line
@@ -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;
@@ -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<>();
@@ -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:
@@ -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);
@@ -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;
        }
+6 −3
Original line number Diff line number Diff line
@@ -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;
@@ -79,7 +80,8 @@ public final class Ringer {
            SystemSettingsUtil systemSettingsUtil,
            AsyncRingtonePlayer asyncRingtonePlayer,
            RingtoneFactory ringtoneFactory,
            Vibrator vibrator) {
            Vibrator vibrator,
            InCallController inCallController) {

        mSystemSettingsUtil = systemSettingsUtil;
        mPlayerFactory = playerFactory;
@@ -89,6 +91,7 @@ public final class Ringer {
        mVibrator = vibrator;
        mRingtonePlayer = asyncRingtonePlayer;
        mRingtoneFactory = ringtoneFactory;
        mInCallController = inCallController;
    }

    public void startRinging(Call foregroundCall) {
@@ -101,7 +104,7 @@ public final class Ringer {
            return;
        }

        if (InCallController.doesDefaultDialerSupportRinging(mContext)) {
        if (mInCallController.doesConnectedDialerSupportRinging()) {
            Log.event(foregroundCall, Log.Events.SKIP_RINGING);
            return;
        }
@@ -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