167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu/* 267d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * Copyright (C) 2016 The Android Open Source Project 367d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * 467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * Licensed under the Apache License, Version 2.0 (the "License"); 567d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * you may not use this file except in compliance with the License. 667d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * You may obtain a copy of the License at 767d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * 867d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * http://www.apache.org/licenses/LICENSE-2.0 967d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * 1067d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * Unless required by applicable law or agreed to in writing, software 1167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * distributed under the License is distributed on an "AS IS" BASIS, 1267d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1367d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * See the License for the specific language governing permissions and 1467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu * limitations under the License 1567d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu */ 1667d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 1767d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liupackage com.android.server.telecom.callfiltering; 1867d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 1967d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liuimport android.net.Uri; 20a3eccfee788c3ac3c831a443b085b141b39bb63dBrad Ebingerimport android.telecom.Log; 2167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 2267d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liuimport com.android.internal.telephony.CallerInfo; 2367d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liuimport com.android.server.telecom.Call; 2467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liuimport com.android.server.telecom.CallerInfoLookupHelper; 25a3eccfee788c3ac3c831a443b085b141b39bb63dBrad Ebingerimport com.android.server.telecom.LogUtils; 2667d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 27f2373e177b6e122b84dd1a22320629d0280de1c6Shigeru Muraiimport java.util.Objects; 28f2373e177b6e122b84dd1a22320629d0280de1c6Shigeru Murai 2967d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liupublic class DirectToVoicemailCallFilter implements IncomingCallFilter.CallFilter { 3067d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu private final CallerInfoLookupHelper mCallerInfoLookupHelper; 3167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 3267d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu public DirectToVoicemailCallFilter(CallerInfoLookupHelper callerInfoLookupHelper) { 3367d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu mCallerInfoLookupHelper = callerInfoLookupHelper; 3467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } 3567d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 3667d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu @Override 3767d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu public void startFilterLookup(final Call call, CallFilterResultCallback callback) { 38a3eccfee788c3ac3c831a443b085b141b39bb63dBrad Ebinger Log.addEvent(call, LogUtils.Events.DIRECT_TO_VM_INITIATED); 3967d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu final Uri callHandle = call.getHandle(); 40f2373e177b6e122b84dd1a22320629d0280de1c6Shigeru Murai 4167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu mCallerInfoLookupHelper.startLookup(callHandle, 4267d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu new CallerInfoLookupHelper.OnQueryCompleteListener() { 4367d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu @Override 4467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu public void onCallerInfoQueryComplete(Uri handle, CallerInfo info) { 456d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu CallFilteringResult result; 46f2373e177b6e122b84dd1a22320629d0280de1c6Shigeru Murai if (Objects.equals(callHandle, handle)) { 47f2373e177b6e122b84dd1a22320629d0280de1c6Shigeru Murai if (info != null && info.shouldSendToVoicemail) { 486d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu result = new CallFilteringResult( 496d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu false, // shouldAllowCall 506d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldReject 516d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldAddToCallLog 526d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true // shouldShowNotification 536d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ); 5467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } else { 556d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu result = new CallFilteringResult( 566d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldAllowCall 576d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu false, // shouldReject 586d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true, // shouldAddToCallLog 596d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu true // shouldShowNotification 606d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu ); 6167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } 62a3eccfee788c3ac3c831a443b085b141b39bb63dBrad Ebinger Log.addEvent(call, LogUtils.Events.DIRECT_TO_VM_FINISHED, result); 636d4b66df3d918e3f17263ff40ca3ba0ec5a46719Hall Liu callback.onCallFilteringComplete(call, result); 6467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } else { 6567d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu Log.w(this, "CallerInfo lookup returned with a different handle than " + 6667d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu "what was passed in. Was %s, should be %s", handle, callHandle); 6767d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } 6867d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } 6967d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu 7067d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu @Override 7167d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu public void onContactPhotoQueryComplete(Uri handle, CallerInfo info) { 7267d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu // ignore 7367d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } 7467d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu }); 7567d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu } 7667d34fa0524d10d5de190592c1f5f88c4dc31743Hall Liu} 77