AsyncBlockCheckFilter.java revision 6d4b66df3d918e3f17263ff40ca3ba0ec5a46719
16d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu/*
26d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * Copyright (C) 2016 The Android Open Source Project
36d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu *
46d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * Licensed under the Apache License, Version 2.0 (the "License");
56d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * you may not use this file except in compliance with the License.
66d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * You may obtain a copy of the License at
76d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu *
86d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu *      http://www.apache.org/licenses/LICENSE-2.0
96d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu *
106d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * Unless required by applicable law or agreed to in writing, software
116d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * distributed under the License is distributed on an "AS IS" BASIS,
126d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * See the License for the specific language governing permissions and
146d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * limitations under the License
156d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu */
166d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
176d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liupackage com.android.server.telecom.callfiltering;
186d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
196d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.content.Context;
206d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport android.os.AsyncTask;
216d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
226d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.Call;
236d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.Log;
246d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liuimport com.android.server.telecom.Session;
256d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
266d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu/**
276d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * An {@link AsyncTask} that checks if a call needs to be blocked.
286d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * <p> An {@link AsyncTask} is used to perform the block check to avoid blocking the main thread.
296d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu * The block check itself is performed in the {@link AsyncTask#doInBackground(Object[])}.
306d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu */
316d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liupublic class AsyncBlockCheckFilter extends AsyncTask<String, Void, Boolean>
326d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        implements IncomingCallFilter.CallFilter {
336d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    private final Context mContext;
346d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    private final BlockCheckerAdapter mBlockCheckerAdapter;
356d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    private Call mIncomingCall;
366d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    private Session mLogSubsession;
376d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    private CallFilterResultCallback mCallback;
386d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
396d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    public AsyncBlockCheckFilter(Context context, BlockCheckerAdapter blockCheckerAdapter) {
406d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mContext = context;
416d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mBlockCheckerAdapter = blockCheckerAdapter;
426d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
436d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
446d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
456d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    public void startFilterLookup(Call call, CallFilterResultCallback callback) {
466d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mCallback = callback;
476d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mIncomingCall = call;
486d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        String number = call.getHandle() == null ?
496d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                null : call.getHandle().getSchemeSpecificPart();
506d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        this.execute(number);
516d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
526d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
536d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
546d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    protected void onPreExecute() {
556d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mLogSubsession = Log.createSubsession();
566d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
576d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
586d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
596d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    protected Boolean doInBackground(String... params) {
606d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        try {
616d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            Log.continueSession(mLogSubsession, "ABCF.dIB");
626d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            Log.event(mIncomingCall, Log.Events.BLOCK_CHECK_INITIATED);
636d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            return mBlockCheckerAdapter.isBlocked(mContext, params[0]);
646d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        } finally {
656d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            Log.endSession();
666d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        }
676d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
686d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
696d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
706d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    protected void onPostExecute(Boolean isBlocked) {
716d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        CallFilteringResult result;
726d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        if (isBlocked) {
736d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            result = new CallFilteringResult(
746d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    false, // shouldAllowCall
756d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    true, //shouldReject
766d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    false, //shouldAddToCallLog
776d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    false // shouldShowNotification
786d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            );
796d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        } else {
806d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            result = new CallFilteringResult(
816d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    true, // shouldAllowCall
826d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    false, // shouldReject
836d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    true, // shouldAddToCallLog
846d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                    true // shouldShowNotification
856d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            );
866d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        }
876d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        Log.event(mIncomingCall, Log.Events.BLOCK_CHECK_FINISHED, result);
886d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mCallback.onCallFilteringComplete(mIncomingCall, result);
896d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
906d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu}
91