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