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

Commit 29cbb62d authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add call screening service binding rule for outgoing call."

parents f10eec34 f17cee41
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -57,25 +57,35 @@ public class CallScreeningServiceHelper {
     * from the call screening service to be handled.
     */
    private class CallScreeningAdapter extends ICallScreeningAdapter.Stub {
        private ServiceConnection mServiceConnection;

        public CallScreeningAdapter(ServiceConnection connection) {
            mServiceConnection = connection;
        }

        @Override
        public void allowCall(String s) throws RemoteException {
            // no-op; we don't allow this on outgoing calls.
            unbindCallScreeningService();
        }

        @Override
        public void silenceCall(String s) throws RemoteException {
            // no-op; we don't allow this on outgoing calls.
            unbindCallScreeningService();
        }

        @Override
        public void screenCallFurther(String callId) throws RemoteException {
            // no-op; we don't allow this on outgoing calls.
            unbindCallScreeningService();
        }

        @Override
        public void disallowCall(String s, boolean b, boolean b1, boolean b2,
                ComponentName componentName) throws RemoteException {
            // no-op; we don't allow this on outgoing calls.
            unbindCallScreeningService();
        }

        private void unbindCallScreeningService() {
            mContext.unbindService(mServiceConnection);
        }
    }

@@ -128,7 +138,7 @@ public class CallScreeningServiceHelper {
                try {
                    try {
                        // Note: for outgoing calls, never include the restricted extras.
                        screeningService.screenCall(new CallScreeningAdapter(),
                        screeningService.screenCall(new CallScreeningAdapter(this),
                                mParcelableCallUtilsConverter.toParcelableCallForScreening(mCall,
                                        false /* areRestrictedExtrasIncluded */));
                    } catch (RemoteException e) {
+11 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.telecom;

import android.Manifest;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.KeyguardManager;
@@ -1581,8 +1582,16 @@ public class CallsManager extends Call.ListenerBase
                                isInContacts);

                        // We only want to provide a CallScreeningService with a call if its not in
                        // contacts.
                        if (!isInContacts) {
                        // contacts or the package has READ_CONTACT permission.
                        PackageManager packageManager = mContext.getPackageManager();
                        int permission = packageManager.checkPermission(
                                Manifest.permission.READ_CONTACTS,
                                mRoleManagerAdapter.getDefaultCallScreeningApp());
                        Log.d(CallsManager.this,
                                "default call screening service package %s has permissions=%s",
                                mRoleManagerAdapter.getDefaultCallScreeningApp(),
                                permission == PackageManager.PERMISSION_GRANTED);
                        if ((!isInContacts) || (permission == PackageManager.PERMISSION_GRANTED)) {
                            bindForOutgoingCallerId(theCall);
                        }
            }, new LoggedHandlerExecutor(outgoingCallHandler, "CM.pCSB", mLock));