SimChangeReceiver.java revision 0e70002f75a2f71efe663d54cc7e033044bb7a72
1e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen/* 2e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * Copyright (C) 2015 The Android Open Source Project 3e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * 4e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * you may not use this file except in compliance with the License. 6e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * You may obtain a copy of the License at 7e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * 8e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * http://www.apache.org/licenses/LICENSE-2.0 9e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * 10e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * Unless required by applicable law or agreed to in writing, software 11e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * distributed under the License is distributed on an "AS IS" BASIS, 12e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * See the License for the specific language governing permissions and 14e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * limitations under the License 15e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen */ 16e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenpackage com.android.phone.vvm.omtp; 17e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 18e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport android.content.BroadcastReceiver; 19e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport android.content.Context; 20e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport android.content.Intent; 210e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.os.Bundle; 220e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.CarrierConfigManager; 230e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.SmsManager; 240e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.SubscriptionManager; 250e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.text.TextUtils; 26e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport android.util.Log; 27e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 28e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport com.android.internal.telephony.IccCardConstants; 290e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.internal.telephony.PhoneConstants; 300e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.internal.telephony.TelephonyIntents; 310e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.phone.vvm.omtp.sms.OmtpMessageSender; 32e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 33e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen/** 340e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen * This class listens to the {@link CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED} and 350e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen * {@link TelephonyIntents#ACTION_SIM_STATE_CHANGED} to determine when a SIM is added, replaced, 360e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen * or removed. 37e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * 38e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * When a SIM is added, send an activate SMS. When a SIM is removed, remove the sync accounts and 39e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * change the status in the voicemail_status table. 40e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen */ 41e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenpublic class SimChangeReceiver extends BroadcastReceiver { 42e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen private final String TAG = "SimChangeReceiver"; 43e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen @Override 44e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen public void onReceive(Context context, Intent intent) { 450e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen final String action = intent.getAction(); 460e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (action == null) { 470e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "Null action for intent."); 480e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 490e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 500e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 510e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen switch (action) { 520e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case TelephonyIntents.ACTION_SIM_STATE_CHANGED: 530e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals( 540e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE))) { 550e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.i(TAG, "Sim removed, removing inactive accounts"); 560e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen OmtpVvmSyncAccountManager.getInstance(context).removeInactiveAccounts(); 570e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 58e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 590e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: 600e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen handleCarrierConfigChange(context, intent); 61e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 62e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 63e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 640e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 650e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen private void handleCarrierConfigChange(Context context, Intent intent) { 660e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 670e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen SubscriptionManager.INVALID_SUBSCRIPTION_ID); 680e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { 690e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "subscriptionId not provided in intent."); 700e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 710e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 720e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 730e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen CarrierConfigManager carrierConfigManager = (CarrierConfigManager) 740e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen context.getSystemService(Context.CARRIER_CONFIG_SERVICE); 750e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (carrierConfigManager == null) { 760e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "No carrier config service found."); 770e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 780e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 790e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 800e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Bundle carrierConfig = carrierConfigManager.getConfigForSubId(subId); 810e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (carrierConfig == null) { 820e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "Empty carrier config."); 830e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 840e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 850e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen String vvmType = carrierConfig.getString( 860e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen CarrierConfigManager.STRING_VVM_TYPE, null); 870e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 880e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (!CarrierConfigManager.VVM_TYPE_OMTP.equals(vvmType)) { 890e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen // This is not an OMTP visual voicemail compatible carrier. 900e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 910e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 920e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 930e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen int applicationPort = carrierConfig.getInt( 940e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen CarrierConfigManager.INT_VVM_PORT_NUMBER, 0); 950e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen String destinationNumber = carrierConfig.getString( 960e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen CarrierConfigManager.STRING_VVM_DESTINATION_NUMBER); 970e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (TextUtils.isEmpty(destinationNumber)) { 980e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "No destination number for this carrier."); 990e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 1000e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 1010e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 1020e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.i(TAG, "Requesting VVM activation for subId: " + subId); 1030e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen SmsManager smsManager = SmsManager.getSmsManagerForSubscriptionId(subId); 1040e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen OmtpMessageSender messageSender = new OmtpMessageSender(smsManager, 1050e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen (short) applicationPort, destinationNumber, null, 1060e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen OmtpConstants.PROTOCOL_VERSION1_1, null); 1070e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen messageSender.requestVvmActivation(null); 1080e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 109e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen}