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

Commit 182d3eb7 authored by Grace Jia's avatar Grace Jia Committed by Automerger Merge Worker
Browse files

Change the logic of incoming call filter graph to avoid binding same am: cb224b3b am: 1f2ad274

Change-Id: I8b81d70e6cf48912f858bc7f3533ac993dabd635
parents 743b688a 1f2ad274
Loading
Loading
Loading
Loading
+19 −19
Original line number Diff line number Diff line
@@ -45,8 +45,8 @@ import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.ToneGenerator;
import android.media.MediaPlayer;
import android.media.ToneGenerator;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -66,6 +66,7 @@ import android.provider.CallLog.Calls;
import android.provider.Settings;
import android.sysprop.TelephonyProperties;
import android.telecom.CallAudioState;
import android.telecom.CallerInfo;
import android.telecom.Conference;
import android.telecom.Connection;
import android.telecom.DisconnectCause;
@@ -85,14 +86,12 @@ import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Pair;

import com.android.internal.annotations.VisibleForTesting;
import android.telecom.CallerInfo;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.telecom.bluetooth.BluetoothRouteManager;
import com.android.server.telecom.bluetooth.BluetoothStateReceiver;
@@ -101,10 +100,10 @@ import com.android.server.telecom.callfiltering.BlockCheckerFilter;
import com.android.server.telecom.callfiltering.CallFilterResultCallback;
import com.android.server.telecom.callfiltering.CallFilteringResult;
import com.android.server.telecom.callfiltering.CallFilteringResult.Builder;
import com.android.server.telecom.callfiltering.CallScreeningServiceFilter;
import com.android.server.telecom.callfiltering.DirectToVoicemailFilter;
import com.android.server.telecom.callfiltering.IncomingCallFilter;
import com.android.server.telecom.callfiltering.IncomingCallFilterGraph;
import com.android.server.telecom.callfiltering.CallScreeningServiceFilter;
import com.android.server.telecom.callredirection.CallRedirectionProcessor;
import com.android.server.telecom.components.ErrorDialogActivity;
import com.android.server.telecom.components.TelecomBroadcastReceiver;
@@ -116,8 +115,8 @@ import com.android.server.telecom.ui.DisconnectedCallNotifier;
import com.android.server.telecom.ui.IncomingCallNotifier;
import com.android.server.telecom.ui.ToastFactory;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -696,25 +695,26 @@ public class CallsManager extends Call.ListenerBase
                new CallScreeningServiceFilter(incomingCall, carrierPackageName,
                        CallScreeningServiceFilter.PACKAGE_TYPE_CARRIER, mContext, this,
                        appLabelProxy, converter);
        CallScreeningServiceFilter defaultDialerCallScreeningServiceFilter =
                new CallScreeningServiceFilter(incomingCall, defaultDialerPackageName,
                        CallScreeningServiceFilter.PACKAGE_TYPE_DEFAULT_DIALER, mContext, this,
                        appLabelProxy, converter);
        CallScreeningServiceFilter userChosenCallScreeningServiceFilter =
                new CallScreeningServiceFilter(incomingCall, userChosenPackageName,
                        CallScreeningServiceFilter.PACKAGE_TYPE_USER_CHOSEN, mContext, this,
                        appLabelProxy, converter);
        CallScreeningServiceFilter callScreeningServiceFilter;
        if ((userChosenPackageName != null)
                && (!userChosenPackageName.equals(defaultDialerPackageName))) {
            callScreeningServiceFilter = new CallScreeningServiceFilter(incomingCall,
                    userChosenPackageName, CallScreeningServiceFilter.PACKAGE_TYPE_USER_CHOSEN,
                    mContext, this, appLabelProxy, converter);
        } else {
            callScreeningServiceFilter = new CallScreeningServiceFilter(incomingCall,
                    defaultDialerPackageName,
                    CallScreeningServiceFilter.PACKAGE_TYPE_DEFAULT_DIALER,
                    mContext, this, appLabelProxy, converter);
        }
        graph.addFilter(voicemailFilter);
        graph.addFilter(blockCheckerFilter);
        graph.addFilter(carrierCallScreeningServiceFilter);
        graph.addFilter(defaultDialerCallScreeningServiceFilter);
        graph.addFilter(userChosenCallScreeningServiceFilter);
        graph.addFilter(callScreeningServiceFilter);
        IncomingCallFilterGraph.addEdge(voicemailFilter, carrierCallScreeningServiceFilter);
        IncomingCallFilterGraph.addEdge(blockCheckerFilter, carrierCallScreeningServiceFilter);
        IncomingCallFilterGraph.addEdge(carrierCallScreeningServiceFilter,
                defaultDialerCallScreeningServiceFilter);
        IncomingCallFilterGraph.addEdge(carrierCallScreeningServiceFilter,
                userChosenCallScreeningServiceFilter);
                callScreeningServiceFilter);
        mGraphHandlerThreads.add(graph.getHandlerThread());
        return graph;
    }
+9 −3
Original line number Diff line number Diff line
@@ -176,7 +176,6 @@ public class CallScreeningServiceFilter extends CallFilter {
        public void onServiceConnected(ComponentName componentName, IBinder service) {
            ICallScreeningService callScreeningService =
                    ICallScreeningService.Stub.asInterface(service);

            try {
                callScreeningService.screenCall(new CallScreeningAdapter(mResultFuture),
                        mParcelableCallUtilsConverter.
@@ -204,6 +203,7 @@ public class CallScreeningServiceFilter extends CallFilter {
        public void onNullBinding(ComponentName name) {
            mResultFuture.complete(mPriorStageResult);
            Log.i(this, "Null binding.");
            unbindCallScreeningService();
        }
    }

@@ -251,6 +251,11 @@ public class CallScreeningServiceFilter extends CallFilter {
        return resultFuture;
    }

    @Override
    public String toString() {
        return super.toString() + ": " + mPackageName;
    }

    private boolean hasReadContactsPermission() {
        int permission = PackageManager.PERMISSION_DENIED;
        if (mPackagetype == PACKAGE_TYPE_CARRIER || mPackagetype == PACKAGE_TYPE_DEFAULT_DIALER) {
@@ -272,7 +277,7 @@ public class CallScreeningServiceFilter extends CallFilter {
        }
    }

    private void unbindCallScreeningService() {
    public void unbindCallScreeningService() {
        if (mConnection != null) {
            mContext.unbindService(mConnection);
        }
@@ -283,7 +288,8 @@ public class CallScreeningServiceFilter extends CallFilter {
        if (mPackagetype != PACKAGE_TYPE_DEFAULT_DIALER) {
            return false;
        } else {
            return mPackageName.equals(TelecomManager.from(mContext).getSystemDialerPackage());
            return mPackageName.equals(
                    TelecomManager.from(mContext).getSystemDialerPackage());
        }
    }

+6 −0
Original line number Diff line number Diff line
@@ -126,6 +126,12 @@ public class IncomingCallFilterGraph {
                    mFinished = true;
                    mHandlerThread.quit();
                }
                for (CallFilter filter : mFiltersList) {
                    // unbind timed out call screening service
                    if (filter instanceof CallScreeningServiceFilter) {
                        ((CallScreeningServiceFilter) filter).unbindCallScreeningService();
                    }
                }
            }
        }.prepare(), mTimeoutsAdapter.getCallScreeningTimeoutMillis(mContext.getContentResolver()));
    }
+1 −2
Original line number Diff line number Diff line
@@ -111,8 +111,7 @@ public class CallScreeningServiceFilterTest extends TelecomTestCase {
        when(mCallsManager.getCurrentUserHandle()).thenReturn(UserHandle.CURRENT);
        when(mCall.getId()).thenReturn(CALL_ID);
        when(mContext.getPackageManager()).thenReturn(mPackageManager);
        when(mAppLabelProxy.getAppLabel(eq(PKG_NAME)))
                .thenReturn(APP_NAME);
        when(mAppLabelProxy.getAppLabel(PKG_NAME)).thenReturn(APP_NAME);
        when(mParcelableCallUtilsConverter.toParcelableCall(
                eq(mCall), anyBoolean(), eq(mPhoneAccountRegistrar))).thenReturn(null);
        when(mContext.bindServiceAsUser(nullable(Intent.class), nullable(ServiceConnection.class),