SimChangeReceiver.java revision 5aef02b75aeade526de52d5c907932b97fbead52
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; 2157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport android.telecom.PhoneAccountHandle; 220e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.CarrierConfigManager; 230e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.SubscriptionManager; 24e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport android.util.Log; 25e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 26e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport com.android.internal.telephony.IccCardConstants; 270e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.internal.telephony.PhoneConstants; 280e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.internal.telephony.TelephonyIntents; 2957c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.PhoneUtils; 3057c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.settings.VisualVoicemailSettingsUtil; 319cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager; 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"; 43c9cc8b3915eac1676daf3ed067179f90eba21166Nancy Chen 44e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen @Override 45e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen public void onReceive(Context context, Intent intent) { 460e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen final String action = intent.getAction(); 470e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (action == null) { 480e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "Null action for intent."); 490e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 500e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 510e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 520e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen switch (action) { 530e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case TelephonyIntents.ACTION_SIM_STATE_CHANGED: 540e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals( 550e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE))) { 560e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.i(TAG, "Sim removed, removing inactive accounts"); 579cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen OmtpVvmSourceManager.getInstance(context).removeInactiveSources(); 580e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 59e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 600e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: 619cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 629cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen SubscriptionManager.INVALID_SUBSCRIPTION_ID); 6357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen OmtpVvmCarrierConfigHelper carrierConfigHelper = 6457c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen new OmtpVvmCarrierConfigHelper(context, subId); 6557c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen 6657c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen if (carrierConfigHelper.isOmtpVvmType()) { 6757c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen PhoneAccountHandle phoneAccount = PhoneUtils.makePstnPhoneAccountHandle( 6857c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen SubscriptionManager.getPhoneId(subId)); 6957c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen 705aef02b75aeade526de52d5c907932b97fbead52Nancy Chen boolean isUserSet = VisualVoicemailSettingsUtil.isVisualVoicemailUserSet( 715aef02b75aeade526de52d5c907932b97fbead52Nancy Chen context, phoneAccount); 725aef02b75aeade526de52d5c907932b97fbead52Nancy Chen boolean isEnabledInSettings = 735aef02b75aeade526de52d5c907932b97fbead52Nancy Chen VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(context, 745aef02b75aeade526de52d5c907932b97fbead52Nancy Chen phoneAccount); 755aef02b75aeade526de52d5c907932b97fbead52Nancy Chen boolean isEnabled = isUserSet ? isEnabledInSettings : 765aef02b75aeade526de52d5c907932b97fbead52Nancy Chen carrierConfigHelper.isEnabledByDefault(); 775aef02b75aeade526de52d5c907932b97fbead52Nancy Chen 785aef02b75aeade526de52d5c907932b97fbead52Nancy Chen if (!isUserSet) { 795aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // Preserve the previous setting for "isVisualVoicemailEnabled" if it is 805aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // set by the user, otherwise, set this value for the first time. 815aef02b75aeade526de52d5c907932b97fbead52Nancy Chen VisualVoicemailSettingsUtil.setVisualVoicemailEnabled(context, phoneAccount, 825aef02b75aeade526de52d5c907932b97fbead52Nancy Chen isEnabled, /** isUserSet */ false); 83a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen } 84a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen 855aef02b75aeade526de52d5c907932b97fbead52Nancy Chen if (isEnabled) { 865aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // Add a phone state listener so that changes to the communication channels 875aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // can be recorded. 885aef02b75aeade526de52d5c907932b97fbead52Nancy Chen OmtpVvmSourceManager.getInstance(context).addPhoneStateListener( 895aef02b75aeade526de52d5c907932b97fbead52Nancy Chen phoneAccount); 90e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen carrierConfigHelper.startActivation(); 9157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen } else { 92e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen // It may be that the source was not registered to begin with but we want 93e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen // to run through the steps to remove the source just in case. 94e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount); 95e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen carrierConfigHelper.startDeactivation(); 9657c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen } 9757c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen } 98e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 99e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 100e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 101c9cc8b3915eac1676daf3ed067179f90eba21166Nancy Chen}