CDMALTEPhone.java revision f61aaae6608243be4e0da97a56ff9fed488cb173
11260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa/*
2ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa * Copyright (C) 2011 The Android Open Source Project
3c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
4c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * you may not use this file except in compliance with the License.
6c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * You may obtain a copy of the License at
7c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
8c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
10c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Unless required by applicable law or agreed to in writing, software
11c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * See the License for the specific language governing permissions and
14c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * limitations under the License.
15c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
16c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
17c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepackage com.android.internal.telephony.cdma;
18c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
19c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.ContentValues;
20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Context;
21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.SharedPreferences;
22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.database.SQLException;
23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.net.Uri;
24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.AsyncResult;
25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Message;
26c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.preference.PreferenceManager;
27c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.provider.Telephony;
28ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Savilleimport android.telephony.Rlog;
29c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.CommandsInterface;
311260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
32c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.OperatorInfo;
33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneConstants;
34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneNotifier;
35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneProxy;
36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.SMSDispatcher;
370d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport com.android.internal.telephony.SmsBroadcastUndelivered;
38c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.gsm.GsmSMSDispatcher;
39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.gsm.SmsMessage;
40d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IsimRecords;
41d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IsimUiccRecords;
42d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.SIMRecords;
43d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccCardApplication;
44c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.uicc.UiccController;
45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
46c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.FileDescriptor;
47c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport java.io.PrintWriter;
48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic class CDMALTEPhone extends CDMAPhone {
50cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final String LOG_LTE_TAG = "CDMALTEPhone";
51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final boolean DBG = true;
52c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
53e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    /** CdmaLtePhone in addition to RuimRecords available from
54e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka     * PhoneBase needs access to SIMRecords and IsimUiccRecords
55e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka     */
56e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    private SIMRecords mSimRecords;
57e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    private IsimUiccRecords mIsimUiccRecords;
58e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
59c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // Constructors
60c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public CDMALTEPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
61c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super(context, ci, notifier, false);
62c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
63c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
64c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
65c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void initSstIcc() {
66c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mSST = new CdmaLteServiceStateTracker(this);
67c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
68c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
69c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void dispose() {
71c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        synchronized(PhoneProxy.lockForRadioTechnologyChange) {
72c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            super.dispose();
73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void removeReferences() {
78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super.removeReferences();
79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public PhoneConstants.DataState getDataConnectionState(String apnType) {
83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PhoneConstants.DataState ret = PhoneConstants.DataState.DISCONNECTED;
84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mSST == null) {
86c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Radio Technology Change is ongoing, dispose() and
87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // removeReferences() have already been called
88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            ret = PhoneConstants.DataState.DISCONNECTED;
90454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        } else if (mDcTracker.isApnTypeEnabled(apnType) == false) {
91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            ret = PhoneConstants.DataState.DISCONNECTED;
92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
93454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville            switch (mDcTracker.getState(apnType)) {
94c6bbea82bf74ebb492508199b6f3e172b7ce860aWink Saville                case RETRYING:
95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case FAILED:
96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case IDLE:
97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    ret = PhoneConstants.DataState.DISCONNECTED;
98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case CONNECTED:
101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case DISCONNECTING:
10222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville                    if (mCT.mState != PhoneConstants.State.IDLE &&
103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                            !mSST.isConcurrentVoiceAndDataAllowed()) {
104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        ret = PhoneConstants.DataState.SUSPENDED;
105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    } else {
106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        ret = PhoneConstants.DataState.CONNECTED;
107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case CONNECTING:
111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                case SCANNING:
112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    ret = PhoneConstants.DataState.CONNECTING;
113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        log("getDataConnectionState apnType=" + apnType + " ret=" + ret);
118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return ret;
119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
121ce06370fc58f59abda3cb072326e9425da3d755dWink Saville    /**
122ce06370fc58f59abda3cb072326e9425da3d755dWink Saville     * Sets the "current" field in the telephony provider according to the
123ce06370fc58f59abda3cb072326e9425da3d755dWink Saville     * build-time operator numeric property
124ce06370fc58f59abda3cb072326e9425da3d755dWink Saville     *
125ce06370fc58f59abda3cb072326e9425da3d755dWink Saville     * @return true for success; false otherwise.
126ce06370fc58f59abda3cb072326e9425da3d755dWink Saville     */
127ce06370fc58f59abda3cb072326e9425da3d755dWink Saville    @Override
128ce06370fc58f59abda3cb072326e9425da3d755dWink Saville    boolean updateCurrentCarrierInProvider(String operatorNumeric) {
129ce06370fc58f59abda3cb072326e9425da3d755dWink Saville        boolean retVal;
130ce06370fc58f59abda3cb072326e9425da3d755dWink Saville        if (mUiccController.getUiccCardApplication(UiccController.APP_FAM_3GPP) == null) {
131ce06370fc58f59abda3cb072326e9425da3d755dWink Saville            if (DBG) log("updateCurrentCarrierInProvider APP_FAM_3GPP == null");
132ce06370fc58f59abda3cb072326e9425da3d755dWink Saville            retVal = super.updateCurrentCarrierInProvider(operatorNumeric);
133ce06370fc58f59abda3cb072326e9425da3d755dWink Saville        } else {
134ce06370fc58f59abda3cb072326e9425da3d755dWink Saville            if (DBG) log("updateCurrentCarrierInProvider not updated");
135ce06370fc58f59abda3cb072326e9425da3d755dWink Saville            retVal = true;
136ce06370fc58f59abda3cb072326e9425da3d755dWink Saville        }
137ce06370fc58f59abda3cb072326e9425da3d755dWink Saville        if (DBG) log("updateCurrentCarrierInProvider X retVal=" + retVal);
138ce06370fc58f59abda3cb072326e9425da3d755dWink Saville        return retVal;
139ce06370fc58f59abda3cb072326e9425da3d755dWink Saville    }
140ce06370fc58f59abda3cb072326e9425da3d755dWink Saville
141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public boolean updateCurrentCarrierInProvider() {
143e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (mSimRecords != null) {
144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            try {
145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ContentValues map = new ContentValues();
147e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                String operatorNumeric = mSimRecords.getOperatorNumeric();
148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                map.put(Telephony.Carriers.NUMERIC, operatorNumeric);
149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (DBG) log("updateCurrentCarrierInProvider from UICC: numeric=" +
150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        operatorNumeric);
151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mContext.getContentResolver().insert(uri, map);
152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                return true;
153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            } catch (SQLException e) {
154cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville                loge("Can't store current operator ret false", e);
155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else {
157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (DBG) log("updateCurrentCarrierInProvider mIccRecords == null ret false");
158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return false;
160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // return IMSI from USIM as subscriber ID.
163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getSubscriberId() {
165e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return (mSimRecords != null) ? mSimRecords.getIMSI() : "";
166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
1680e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi    // return GID1 from USIM
1690e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi    @Override
1700e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi    public String getGroupIdLevel1() {
1710e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi        return (mSimRecords != null) ? mSimRecords.getGid1() : "";
1720e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi    }
1730e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi
174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getImei() {
176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return mImei;
177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getDeviceSvn() {
181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return mImeiSv;
182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public IsimRecords getIsimRecords() {
186e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return mIsimUiccRecords;
187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getMsisdn() {
191e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return (mSimRecords != null) ? mSimRecords.getMsisdnNumber() : null;
192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void getAvailableNetworks(Message response) {
19622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.getAvailableNetworks(response);
197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void requestIsimAuthentication(String nonce, Message result) {
20122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.requestIsimAuthentication(nonce, result);
202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
203c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
205e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    protected void onUpdateIccAvailability() {
206e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (mUiccController == null ) {
207bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka            return;
208bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        }
209bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka
210e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        // Update IsimRecords
211e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        UiccCardApplication newUiccApplication =
212e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                mUiccController.getUiccCardApplication(UiccController.APP_FAM_IMS);
213e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IsimUiccRecords newIsimUiccRecords = null;
214e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
215e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (newUiccApplication != null) {
216e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            newIsimUiccRecords = (IsimUiccRecords)newUiccApplication.getIccRecords();
217bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        }
218e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        mIsimUiccRecords = newIsimUiccRecords;
219e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
220e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        // Update UsimRecords
221e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        newUiccApplication = mUiccController.getUiccCardApplication(UiccController.APP_FAM_3GPP);
222e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        SIMRecords newSimRecords = null;
223e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (newUiccApplication != null) {
224e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            newSimRecords = (SIMRecords)newUiccApplication.getIccRecords();
225e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        }
226e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (mSimRecords != newSimRecords) {
227e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            if (mSimRecords != null) {
228e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                log("Removing stale SIMRecords object.");
229e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                mSimRecords = null;
230e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            }
231e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            if (newSimRecords != null) {
232e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                log("New SIMRecords found");
233e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                mSimRecords = newSimRecords;
234e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            }
235e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        }
236e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
237e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        super.onUpdateIccAvailability();
238bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka    }
239bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka
240bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka    @Override
241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void log(String s) {
242cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            Rlog.d(LOG_LTE_TAG, s);
243cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    }
244cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville
245cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    protected void loge(String s) {
246cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            Rlog.e(LOG_LTE_TAG, s);
247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
249cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    protected void loge(String s, Throwable e) {
250cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        Rlog.e(LOG_LTE_TAG, s, e);
251f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal    }
252cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville
253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        pw.println("CDMALTEPhone extends:");
256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super.dump(fd, pw, args);
257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville}
259