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