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}