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

Commit aa7d8d88 authored by Hall Liu's avatar Hall Liu
Browse files

Check user restrictions during incoming calls.

Check that DISALLOW_SMS isn't set for a user before activating the
respond-with-sms functionality
Check that DISALLOW_OUTGOING_CALLS isn't set for a user before adding an
incoming call. If it is, silently reject and log the call for the main
user. (Yes, the name is misleading, but the settings UI implies that
it's supposed to be all calls).

Bug: 73804266
Test: manual
Change-Id: Idf32a3fcbe9f8a34fe314bc39d19930e5015acb8
Merged-In: Idf32a3fcbe9f8a34fe314bc39d19930e5015acb8
parent 6e829164
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -516,6 +516,20 @@ public class CallsManager extends Call.ListenerBase
            return;
        }

        // Check DISALLOW_OUTGOING_CALLS restriction.
        // Only ecbm calls are allowed through when users with the DISALLOW_OUTGOING_CALLS
        // restriction are the current user.
        final UserManager userManager = (UserManager) mContext.getSystemService(
                Context.USER_SERVICE);
        if (userManager.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS,
                mCurrentUserHandle)) {
            Log.w(this, "Rejecting non-ecbm phone call due to DISALLOW_INCOMING_CALLS "
                    + "restriction");
            incomingCall.reject(false, null);
            mCallLogManager.logCall(incomingCall, Calls.MISSED_TYPE, false /* showNotification */);
            return;
        }

        List<IncomingCallFilter.CallFilter> filters = new ArrayList<>();
        filters.add(new DirectToVoicemailCallFilter(mCallerInfoLookupHelper));
        filters.add(new AsyncBlockCheckFilter(mContext, new BlockCheckerAdapter(),
+17 −1
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@

package com.android.server.telecom;

import android.content.Context;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.telecom.Log;
import android.telecom.PhoneAccountHandle;

@@ -32,14 +35,16 @@ import java.util.List;
 * binding to it. This adapter can receive commands and updates until the in-call app is unbound.
 */
class InCallAdapter extends IInCallAdapter.Stub {
    private final Context mContext;
    private final CallsManager mCallsManager;
    private final CallIdMapper mCallIdMapper;
    private final TelecomSystem.SyncRoot mLock;
    private final String mOwnerComponentName;

    /** Persists the specified parameters. */
    public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper,
    public InCallAdapter(Context context, CallsManager callsManager, CallIdMapper callIdMapper,
            TelecomSystem.SyncRoot lock, String ownerComponentName) {
        mContext = context;
        mCallsManager = callsManager;
        mCallIdMapper = callIdMapper;
        mLock = lock;
@@ -96,6 +101,17 @@ class InCallAdapter extends IInCallAdapter.Stub {
    public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
        try {
            Log.startSession(LogUtils.Sessions.ICA_REJECT_CALL, mOwnerComponentName);
            UserHandle callingUser = UserHandle.of(UserHandle.getUserId(Binder.getCallingUid()));
            UserManager userManager = mContext.getSystemService(UserManager.class);

            // Check to make sure the in-call app's user isn't restricted from sending SMS. If so,
            // silently drop the outgoing message.
            if (rejectWithMessage && userManager.hasUserRestriction(
                    UserManager.DISALLOW_SMS, callingUser)) {
                rejectWithMessage = false;
                textMessage = null;
            }

            long token = Binder.clearCallingIdentity();
            try {
                synchronized (mLock) {
+1 −0
Original line number Diff line number Diff line
@@ -1309,6 +1309,7 @@ public class InCallController extends CallsManagerListenerBase {
        try {
            inCallService.setInCallAdapter(
                    new InCallAdapter(
                            mContext,
                            mCallsManager,
                            mCallIdMapper,
                            mLock,