SimChangeReceiver.java revision 448b4f31ec6ae4e50692429723170cc48fb7c7fd
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; 21448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chenimport android.os.UserHandle; 2257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport android.telecom.PhoneAccountHandle; 230e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.CarrierConfigManager; 240e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.SubscriptionManager; 25e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport android.util.Log; 26e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 27e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenimport com.android.internal.telephony.IccCardConstants; 280e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.internal.telephony.PhoneConstants; 290e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport com.android.internal.telephony.TelephonyIntents; 3057c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.PhoneUtils; 3157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.settings.VisualVoicemailSettingsUtil; 329cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager; 33e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 34e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen/** 350e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen * This class listens to the {@link CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED} and 360e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen * {@link TelephonyIntents#ACTION_SIM_STATE_CHANGED} to determine when a SIM is added, replaced, 370e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen * or removed. 38e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * 39e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * When a SIM is added, send an activate SMS. When a SIM is removed, remove the sync accounts and 40e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * change the status in the voicemail_status table. 41e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen */ 42e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenpublic class SimChangeReceiver extends BroadcastReceiver { 43e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen private final String TAG = "SimChangeReceiver"; 44c9cc8b3915eac1676daf3ed067179f90eba21166Nancy Chen 45e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen @Override 46e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen public void onReceive(Context context, Intent intent) { 47448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen if (UserHandle.myUserId() != UserHandle.USER_OWNER) { 48448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen Log.v(TAG, "Received broadcast for user that is not owner."); 49448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen return; 50448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen } 51448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen 520e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen final String action = intent.getAction(); 530e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (action == null) { 540e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "Null action for intent."); 550e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 560e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 570e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 580e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen switch (action) { 590e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case TelephonyIntents.ACTION_SIM_STATE_CHANGED: 600e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals( 610e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE))) { 620e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.i(TAG, "Sim removed, removing inactive accounts"); 639cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen OmtpVvmSourceManager.getInstance(context).removeInactiveSources(); 640e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 65e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 660e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: 679cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 689cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen SubscriptionManager.INVALID_SUBSCRIPTION_ID); 6957c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen OmtpVvmCarrierConfigHelper carrierConfigHelper = 7057c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen new OmtpVvmCarrierConfigHelper(context, subId); 7157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen 7257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen if (carrierConfigHelper.isOmtpVvmType()) { 7357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen PhoneAccountHandle phoneAccount = PhoneUtils.makePstnPhoneAccountHandle( 7457c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen SubscriptionManager.getPhoneId(subId)); 7557c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen 765aef02b75aeade526de52d5c907932b97fbead52Nancy Chen boolean isUserSet = VisualVoicemailSettingsUtil.isVisualVoicemailUserSet( 775aef02b75aeade526de52d5c907932b97fbead52Nancy Chen context, phoneAccount); 785aef02b75aeade526de52d5c907932b97fbead52Nancy Chen boolean isEnabledInSettings = 795aef02b75aeade526de52d5c907932b97fbead52Nancy Chen VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(context, 805aef02b75aeade526de52d5c907932b97fbead52Nancy Chen phoneAccount); 815aef02b75aeade526de52d5c907932b97fbead52Nancy Chen boolean isEnabled = isUserSet ? isEnabledInSettings : 825aef02b75aeade526de52d5c907932b97fbead52Nancy Chen carrierConfigHelper.isEnabledByDefault(); 835aef02b75aeade526de52d5c907932b97fbead52Nancy Chen 845aef02b75aeade526de52d5c907932b97fbead52Nancy Chen if (!isUserSet) { 855aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // Preserve the previous setting for "isVisualVoicemailEnabled" if it is 865aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // set by the user, otherwise, set this value for the first time. 875aef02b75aeade526de52d5c907932b97fbead52Nancy Chen VisualVoicemailSettingsUtil.setVisualVoicemailEnabled(context, phoneAccount, 885aef02b75aeade526de52d5c907932b97fbead52Nancy Chen isEnabled, /** isUserSet */ false); 89a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen } 90a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen 915aef02b75aeade526de52d5c907932b97fbead52Nancy Chen if (isEnabled) { 925aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // Add a phone state listener so that changes to the communication channels 935aef02b75aeade526de52d5c907932b97fbead52Nancy Chen // can be recorded. 945aef02b75aeade526de52d5c907932b97fbead52Nancy Chen OmtpVvmSourceManager.getInstance(context).addPhoneStateListener( 955aef02b75aeade526de52d5c907932b97fbead52Nancy Chen phoneAccount); 96e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen carrierConfigHelper.startActivation(); 9757c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen } else { 98e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen // It may be that the source was not registered to begin with but we want 99e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen // to run through the steps to remove the source just in case. 100e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount); 101e196c278fbdc6cd83ce6f647f00e3e81eec28273Nancy Chen carrierConfigHelper.startDeactivation(); 10257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen } 10357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen } 104e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 105e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 106e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 107c9cc8b3915eac1676daf3ed067179f90eba21166Nancy Chen}