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;
36af506d1261569442f2a4e213993c693e46c94d40Hall Liu    private Session mBackgroundTaskSubsession;
37af506d1261569442f2a4e213993c693e46c94d40Hall Liu    private Session mPostExecuteSubsession;
386d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    private CallFilterResultCallback mCallback;
396d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
406d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    public AsyncBlockCheckFilter(Context context, BlockCheckerAdapter blockCheckerAdapter) {
416d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mContext = context;
426d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mBlockCheckerAdapter = blockCheckerAdapter;
436d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
446d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
456d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
466d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    public void startFilterLookup(Call call, CallFilterResultCallback callback) {
476d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mCallback = callback;
486d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        mIncomingCall = call;
496d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        String number = call.getHandle() == null ?
506d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu                null : call.getHandle().getSchemeSpecificPart();
516d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        this.execute(number);
526d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
536d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
546d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
556d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    protected void onPreExecute() {
56af506d1261569442f2a4e213993c693e46c94d40Hall Liu        mBackgroundTaskSubsession = Log.createSubsession();
57af506d1261569442f2a4e213993c693e46c94d40Hall Liu        mPostExecuteSubsession = Log.createSubsession();
586d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
596d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
606d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
616d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    protected Boolean doInBackground(String... params) {
626d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        try {
63af506d1261569442f2a4e213993c693e46c94d40Hall Liu            Log.continueSession(mBackgroundTaskSubsession, "ABCF.dIB");
646d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            Log.event(mIncomingCall, Log.Events.BLOCK_CHECK_INITIATED);
656d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            return mBlockCheckerAdapter.isBlocked(mContext, params[0]);
666d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        } finally {
676d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu            Log.endSession();
686d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        }
696d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
706d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu
716d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    @Override
726d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    protected void onPostExecute(Boolean isBlocked) {
73af506d1261569442f2a4e213993c693e46c94d40Hall Liu        Log.continueSession(mPostExecuteSubsession, "ABCF.oPE");
74af506d1261569442f2a4e213993c693e46c94d40Hall Liu        try {
75af506d1261569442f2a4e213993c693e46c94d40Hall Liu            CallFilteringResult result;
76af506d1261569442f2a4e213993c693e46c94d40Hall Liu            if (isBlocked) {
77af506d1261569442f2a4e213993c693e46c94d40Hall Liu                result = new CallFilteringResult(
78af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        false, // shouldAllowCall
79af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        true, //shouldReject
80af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        false, //shouldAddToCallLog
81af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        false // shouldShowNotification
82af506d1261569442f2a4e213993c693e46c94d40Hall Liu                );
83af506d1261569442f2a4e213993c693e46c94d40Hall Liu            } else {
84af506d1261569442f2a4e213993c693e46c94d40Hall Liu                result = new CallFilteringResult(
85af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        true, // shouldAllowCall
86af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        false, // shouldReject
87af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        true, // shouldAddToCallLog
88af506d1261569442f2a4e213993c693e46c94d40Hall Liu                        true // shouldShowNotification
89af506d1261569442f2a4e213993c693e46c94d40Hall Liu                );
90af506d1261569442f2a4e213993c693e46c94d40Hall Liu            }
91af506d1261569442f2a4e213993c693e46c94d40Hall Liu            Log.event(mIncomingCall, Log.Events.BLOCK_CHECK_FINISHED, result);
92af506d1261569442f2a4e213993c693e46c94d40Hall Liu            mCallback.onCallFilteringComplete(mIncomingCall, result);
93af506d1261569442f2a4e213993c693e46c94d40Hall Liu        } finally {
94af506d1261569442f2a4e213993c693e46c94d40Hall Liu            Log.endSession();
956d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu        }
966d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu    }
976d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu}
98