1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17package com.android.voicemail.impl; 18 19import android.annotation.TargetApi; 20import android.content.BroadcastReceiver; 21import android.content.Context; 22import android.content.Intent; 23import android.os.Build.VERSION_CODES; 24import android.telecom.PhoneAccountHandle; 25import android.telephony.VisualVoicemailSms; 26import com.android.dialer.common.Assert; 27import com.android.dialer.logging.DialerImpression; 28import com.android.dialer.logging.Logger; 29import com.android.voicemail.VoicemailComponent; 30import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil; 31import com.android.voicemail.impl.sync.VvmAccountManager; 32 33/** Listens to com.android.phone.vvm.ACTION_TEMP_VISUAL_VOICEMAIL_SERVICE_EVENT */ 34@TargetApi(VERSION_CODES.O) 35public class OmtpReceiver extends BroadcastReceiver { 36 37 private static final String TAG = "VvmOmtpReceiver"; 38 39 public static final String ACTION_SMS_RECEIVED = "com.android.vociemailomtp.sms.sms_received"; 40 41 public static final String EXTRA_VOICEMAIL_SMS = "extra_voicemail_sms"; 42 43 private static final String EXTRA_WHAT = "what"; 44 45 private static final int MSG_ON_CELL_SERVICE_CONNECTED = 1; 46 47 private static final int MSG_ON_SMS_RECEIVED = 2; 48 49 private static final int MSG_ON_SIM_REMOVED = 3; 50 51 private static final int MSG_TASK_STOPPED = 5; 52 53 private static final String DATA_PHONE_ACCOUNT_HANDLE = "data_phone_account_handle"; 54 55 private static final String DATA_SMS = "data_sms"; 56 57 @Override 58 public void onReceive(Context context, Intent intent) { 59 // ACTION_VISUAL_VOICEMAIL_SERVICE_EVENT is not a protected broadcast pre-O. 60 if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) { 61 VvmLog.e(TAG, "ACTION_VISUAL_VOICEMAIL_SERVICE_EVENT received when module is disabled"); 62 return; 63 } 64 65 int what = intent.getIntExtra(EXTRA_WHAT, -1); 66 PhoneAccountHandle phoneAccountHandle = intent.getParcelableExtra(DATA_PHONE_ACCOUNT_HANDLE); 67 OmtpVvmCarrierConfigHelper config = new OmtpVvmCarrierConfigHelper(context, phoneAccountHandle); 68 if (!config.isValid()) { 69 VvmLog.i(TAG, "VVM not supported on " + phoneAccountHandle); 70 return; 71 } 72 if (!VisualVoicemailSettingsUtil.isEnabled(context, phoneAccountHandle) 73 && !config.isLegacyModeEnabled()) { 74 VvmLog.i(TAG, "VVM is disabled"); 75 return; 76 } 77 switch (what) { 78 case MSG_ON_CELL_SERVICE_CONNECTED: 79 VvmLog.i(TAG, "onCellServiceConnected"); 80 Logger.get(context).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED); 81 ActivationTask.start(context, phoneAccountHandle, null); 82 break; 83 case MSG_ON_SMS_RECEIVED: 84 VvmLog.i(TAG, "onSmsReceived"); 85 Logger.get(context).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED); 86 VisualVoicemailSms sms = intent.getParcelableExtra(DATA_SMS); 87 Intent receivedIntent = new Intent(ACTION_SMS_RECEIVED); 88 receivedIntent.setPackage(context.getPackageName()); 89 receivedIntent.putExtra(EXTRA_VOICEMAIL_SMS, sms); 90 context.sendBroadcast(receivedIntent); 91 break; 92 case MSG_ON_SIM_REMOVED: 93 VvmLog.i(TAG, "onSimRemoved"); 94 Logger.get(context).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED); 95 VvmAccountManager.removeAccount(context, phoneAccountHandle); 96 break; 97 case MSG_TASK_STOPPED: 98 VvmLog.i(TAG, "onStopped"); 99 Logger.get(context).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED); 100 break; 101 default: 102 throw Assert.createIllegalStateFailException("unexpected what: " + what); 103 } 104 } 105} 106