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