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; 229dc2bea5e35cf8f59d05240c061cd00d74be6f7bXiaohui Chenimport android.os.UserManager; 2357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport android.telecom.PhoneAccountHandle; 240e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.CarrierConfigManager; 250e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chenimport android.telephony.SubscriptionManager; 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; 3157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.PhoneUtils; 32aa5a84bf404e46dc5cfe8ca38007404e885db684Bryce Leeimport com.android.phone.R; 3357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.settings.VisualVoicemailSettingsUtil; 349cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager; 35e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen 36e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen/** 37e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * This class listens to the {@link CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED} and {@link 38e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * TelephonyIntents#ACTION_SIM_STATE_CHANGED} to determine when a SIM is added, replaced, or 39e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen * removed. 40e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * 41e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * When a SIM is added, send an activate SMS. When a SIM is removed, remove the sync accounts and 42e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen * change the status in the voicemail_status table. 43e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen */ 44e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chenpublic class SimChangeReceiver extends BroadcastReceiver { 45e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen 46e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen private static final String TAG = "SimChangeReceiver"; 47c9cc8b3915eac1676daf3ed067179f90eba21166Nancy Chen 48e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen @Override 49e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen public void onReceive(Context context, Intent intent) { 509dc2bea5e35cf8f59d05240c061cd00d74be6f7bXiaohui Chen if (UserHandle.myUserId() != UserHandle.USER_SYSTEM) { 519dc2bea5e35cf8f59d05240c061cd00d74be6f7bXiaohui Chen Log.v(TAG, "Received broadcast for user that is not system."); 52448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen return; 53448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen } 54448b4f31ec6ae4e50692429723170cc48fb7c7fdNancy Chen 550e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen final String action = intent.getAction(); 560e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (action == null) { 570e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.w(TAG, "Null action for intent."); 580e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen return; 590e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 600e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen 610e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen switch (action) { 620e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case TelephonyIntents.ACTION_SIM_STATE_CHANGED: 630e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals( 640e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE))) { 650e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen Log.i(TAG, "Sim removed, removing inactive accounts"); 669cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen OmtpVvmSourceManager.getInstance(context).removeInactiveSources(); 670e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen } 68e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen break; 690e70002f75a2f71efe663d54cc7e033044bb7a72Nancy Chen case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: 709cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, 719cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen SubscriptionManager.INVALID_SUBSCRIPTION_ID); 7256363875d0007ca8c8886a0e1dfcfe9579c76e1fNancy Chen 7356363875d0007ca8c8886a0e1dfcfe9579c76e1fNancy Chen if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { 7456363875d0007ca8c8886a0e1dfcfe9579c76e1fNancy Chen Log.i(TAG, "Received SIM change for invalid subscription id."); 7556363875d0007ca8c8886a0e1dfcfe9579c76e1fNancy Chen return; 7656363875d0007ca8c8886a0e1dfcfe9579c76e1fNancy Chen } 7756363875d0007ca8c8886a0e1dfcfe9579c76e1fNancy Chen 78e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen if (!UserManager.get(context).isUserUnlocked()) { 79e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen OmtpBootCompletedReceiver.addDeferredSubId(context, subId); 80e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } else { 81e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen processSubId(context, subId); 82e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } 83e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen break; 84e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } 85e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } 86e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen 87e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen public static void processSubId(Context context, int subId) { 88e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen OmtpVvmCarrierConfigHelper carrierConfigHelper = 89e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen new OmtpVvmCarrierConfigHelper(context, subId); 90e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen if (carrierConfigHelper.isOmtpVvmType()) { 91e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen PhoneAccountHandle phoneAccount = PhoneUtils.makePstnPhoneAccountHandle( 92e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen SubscriptionManager.getPhoneId(subId)); 9357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen 94e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen boolean isUserSet = VisualVoicemailSettingsUtil.isVisualVoicemailUserSet( 95e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen context, phoneAccount); 96e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen boolean isEnabledInSettings = 97e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(context, 985aef02b75aeade526de52d5c907932b97fbead52Nancy Chen phoneAccount); 99e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen boolean isSupported = 100e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen context.getResources().getBoolean(R.bool.allow_visual_voicemail); 101e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen boolean isEnabled = isSupported && (isUserSet ? isEnabledInSettings : 102e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen carrierConfigHelper.isEnabledByDefault()); 1035aef02b75aeade526de52d5c907932b97fbead52Nancy Chen 104e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen if (!isUserSet) { 105e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen // Preserve the previous setting for "isVisualVoicemailEnabled" if it is 106e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen // set by the user, otherwise, set this value for the first time. 107e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen VisualVoicemailSettingsUtil.setVisualVoicemailEnabled(context, phoneAccount, 108e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen isEnabled, /** isUserSet */false); 109e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } 110a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen 111e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen if (isEnabled) { 112e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen LocalLogHelper.log(TAG, "Sim state or carrier config changed: requesting" 113e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen + " activation for " + phoneAccount.getId()); 11487d7c2164e219bca5dfaaf2065767ab0e036061fNancy Chen 115e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen // Add a phone state listener so that changes to the communication channels 116e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen // can be recorded. 117e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen OmtpVvmSourceManager.getInstance(context).addPhoneStateListener( 118e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen phoneAccount); 119e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen carrierConfigHelper.startActivation(); 120e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } else { 121e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen // It may be that the source was not registered to begin with but we want 122e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen // to run through the steps to remove the source just in case. 123e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount); 124e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen Log.v(TAG, "Sim change for disabled account."); 125e80368d449950c0d13ba78f5b8fa6eb62eafa384Ta-wei Yen } 126e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 127e53a064be1bcea3ec2acb3c7681fa9a2762f4e3eNancy Chen } 128c9cc8b3915eac1676daf3ed067179f90eba21166Nancy Chen}