RuimRecords.java revision bb36adde615d3d85fa0fc23935197c6bc6a799ed
1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/* 2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 2008 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 static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY; 20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC; 21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Context; 22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.AsyncResult; 23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Handler; 24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Message; 25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Registrant; 26c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.SystemProperties; 27c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.util.Log; 28c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 29c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.AdnRecord; 30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.AdnRecordCache; 31c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.AdnRecordLoader; 32c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.CommandsInterface; 33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccCardConstants; 34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccRefreshResponse; 35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccCard; 36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneBase; 37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.TelephonyProperties; 38c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.MccTable; 39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 40c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville// can't be used since VoiceMailConstants is not public 41c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville//import com.android.internal.telephony.gsm.VoiceMailConstants; 42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccException; 43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccRecords; 44c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccUtils; 45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneProxy; 46c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 47c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/** 49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide} 50c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic final class RuimRecords extends IccRecords { 52c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static final String LOG_TAG = "CDMA"; 53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 54c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final boolean DBG = true; 55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private boolean m_ota_commited=false; 56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 57c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Instance Variables 58c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 59c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private String mImsi; 60c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private String mMyMobileNumber; 61c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private String mMin2Min1; 62c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 63c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private String mPrlVersion; 64c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 65c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Event Constants 66c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 67c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 2; 68c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_IMSI_DONE = 3; 69c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_DEVICE_IDENTITY_DONE = 4; 70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_ICCID_DONE = 5; 71c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_CDMA_SUBSCRIPTION_DONE = 10; 72c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_UPDATE_DONE = 14; 73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_SST_DONE = 17; 74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_ALL_SMS_DONE = 18; 75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_MARK_SMS_READ_DONE = 19; 76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_SMS_ON_RUIM = 21; 78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_GET_SMS_DONE = 22; 79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private static final int EVENT_RUIM_REFRESH = 31; 81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public RuimRecords(IccCard card, Context c, CommandsInterface ci) { 84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville super(card, c, ci); 85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 86c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville adnCache = new AdnRecordCache(mFh); 87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsRequested = false; // No load request is made till SIM ready 89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 90c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // recordsToLoad is set to 0 because no requests are made yet 91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsToLoad = 0; 92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // NOTE the EVENT_SMS_ON_RUIM is not registered 95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.registerForIccRefresh(this, EVENT_RUIM_REFRESH, null); 96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Start off by setting empty state 98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville onRadioOffOrNotAvailable(); 99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void dispose() { 104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log("Disposing RuimRecords " + this); 105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville //Unregister for all events 106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.unregisterForOffOrNotAvailable( this); 107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.unregisterForIccRefresh(this); 108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville super.dispose(); 109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected void finalize() { 113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if(DBG) log("RuimRecords finalized"); 114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected void onRadioOffOrNotAvailable() { 118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville countVoiceMessages = 0; 119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mncLength = UNINITIALIZED; 120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville iccid = null; 121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville adnCache.reset(); 123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Don't clean up PROPERTY_ICC_OPERATOR_ISO_COUNTRY and 125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // PROPERTY_ICC_OPERATOR_NUMERIC here. Since not all CDMA 126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // devices have RUIM, these properties should keep the original 127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // values, e.g. build time settings, when there is no RUIM but 128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // set new values when RUIM is available and loaded. 129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // recordsRequested is set to false indicating that the SIM 131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // read requests made so far are not valid. This is set to 132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // true only when fresh set of read requests are made. 133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsRequested = false; 134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getMdnNumber() { 137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return mMyMobileNumber; 138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getCdmaMin() { 141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return mMin2Min1; 142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** Returns null if RUIM is not yet ready */ 145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getPrlVersion() { 146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return mPrlVersion; 147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void setVoiceMailNumber(String alphaTag, String voiceNumber, Message onComplete){ 151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // In CDMA this is Operator/OEM dependent 152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville AsyncResult.forMessage((onComplete)).exception = 153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville new IccException("setVoiceMailNumber not implemented"); 154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville onComplete.sendToTarget(); 155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loge("method setVoiceMailNumber is not implemented"); 156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Called by CCAT Service when REFRESH is received. 160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param fileChanged indicates whether any files changed 161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param fileList if non-null, a list of EF files that changed 162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void onRefresh(boolean fileChanged, int[] fileList) { 165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (fileChanged) { 166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // A future optimization would be to inspect fileList and 167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // only reload those files that we care about. For now, 168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // just re-fetch all RUIM records that we cache. 169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville fetchRuimRecords(); 170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Returns the 5 or 6 digit MCC/MNC of the operator that 175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * provided the RUIM card. Returns null of RUIM is not yet ready 176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getRUIMOperatorNumeric() { 178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (mImsi == null) { 179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return null; 180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (mncLength != UNINITIALIZED && mncLength != UNKNOWN) { 183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Length = length of MCC + length of MNC 184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // length of mcc = 3 (3GPP2 C.S0005 - Section 2.3) 185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return mImsi.substring(0, 3 + mncLength); 186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Guess the MNC length based on the MCC if we don't 189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // have a valid value in ef[ad] 190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville int mcc = Integer.parseInt(mImsi.substring(0,3)); 192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return mImsi.substring(0, 3 + MccTable.smallestDigitsMccForMnc(mcc)); 193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void handleMessage(Message msg) { 197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville AsyncResult ar; 198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville byte data[]; 200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville boolean isRecordLoadResponse = false; 202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 203bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka if (mDestroyed.get()) { 204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loge("Received message " + msg + 205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville "[" + msg.what + "] while being destroyed. Ignoring."); 206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return; 207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville try { switch (msg.what) { 210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE: 211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville onRadioOffOrNotAvailable(); 212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_DEVICE_IDENTITY_DONE: 215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville log("Event EVENT_GET_DEVICE_IDENTITY_DONE Received"); 216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /* IO events */ 219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_IMSI_DONE: 220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville isRecordLoadResponse = true; 221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville ar = (AsyncResult)msg.obj; 223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (ar.exception != null) { 224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loge("Exception querying IMSI, Exception:" + ar.exception); 225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mImsi = (String) ar.result; 229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more 231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // than 15 (and usually 15). 232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (mImsi != null && (mImsi.length() < 6 || mImsi.length() > 15)) { 233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loge("invalid IMSI " + mImsi); 234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mImsi = null; 235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville log("IMSI: " + mImsi.substring(0, 6) + "xxxxxxxxx"); 238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville String operatorNumeric = getRUIMOperatorNumeric(); 240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (operatorNumeric != null) { 241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if(operatorNumeric.length() <= 6){ 242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville MccTable.updateMccMncConfiguration(mContext, operatorNumeric); 243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_CDMA_SUBSCRIPTION_DONE: 248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville ar = (AsyncResult)msg.obj; 249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville String localTemp[] = (String[])ar.result; 250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (ar.exception != null) { 251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mMyMobileNumber = localTemp[0]; 255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mMin2Min1 = localTemp[3]; 256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mPrlVersion = localTemp[4]; 257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville log("MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1); 259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_ICCID_DONE: 263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville isRecordLoadResponse = true; 264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville ar = (AsyncResult)msg.obj; 266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville data = (byte[])ar.result; 267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (ar.exception != null) { 269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville iccid = IccUtils.bcdToString(data, 0, data.length); 273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville log("iccid: " + iccid); 275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_UPDATE_DONE: 279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville ar = (AsyncResult)msg.obj; 280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (ar.exception != null) { 281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Log.i(LOG_TAG, "RuimRecords update failed", ar.exception); 282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_ALL_SMS_DONE: 286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_MARK_SMS_READ_DONE: 287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_SMS_ON_RUIM: 288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_SMS_DONE: 289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Log.w(LOG_TAG, "Event not supported: " + msg.what); 290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // TODO: probably EF_CST should be read instead 293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_SST_DONE: 294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville log("Event EVENT_GET_SST_DONE Received"); 295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_RUIM_REFRESH: 298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville isRecordLoadResponse = false; 299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville ar = (AsyncResult)msg.obj; 300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (ar.exception == null) { 301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville handleRuimRefresh((IccRefreshResponse)ar.result); 302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville }}catch (RuntimeException exc) { 306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // I don't want these exceptions to be fatal 307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Log.w(LOG_TAG, "Exception parsing RUIM record", exc); 308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } finally { 309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Count up record load responses even if they are fails 310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (isRecordLoadResponse) { 311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville onRecordLoaded(); 312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected void onRecordLoaded() { 318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // One record loaded successfully or failed, In either case 319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // we need to update the recordsToLoad count 320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsToLoad -= 1; 321bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka if (DBG) log("onRecordLoaded " + recordsToLoad + " requested: " + recordsRequested); 322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (recordsToLoad == 0 && recordsRequested == true) { 324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville onAllRecordsLoaded(); 325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } else if (recordsToLoad < 0) { 326bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka loge("recordsToLoad <0, programmer error suspected"); 327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsToLoad = 0; 328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected void onAllRecordsLoaded() { 333bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka if (DBG) log("record load complete"); 334bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka 335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Further records that can be inserted are Operator/OEM dependent 336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville String operator = getRUIMOperatorNumeric(); 338c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville log("RuimRecords: onAllRecordsLoaded set 'gsm.sim.operator.numeric' to operator='" + 339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville operator + "'"); 340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville SystemProperties.set(PROPERTY_ICC_OPERATOR_NUMERIC, operator); 341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (mImsi != null) { 343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville SystemProperties.set(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, 344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville MccTable.countryCodeForMcc(Integer.parseInt(mImsi.substring(0,3)))); 345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsLoadedRegistrants.notifyRegistrants( 347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville new AsyncResult(null, null, null)); 348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mParentCard.broadcastIccStateChangedIntent( 349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville IccCardConstants.INTENT_VALUE_ICC_LOADED, null); 350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 352c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void onReady() { 354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville fetchRuimRecords(); 355c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 356c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE)); 357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private void fetchRuimRecords() { 361c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsRequested = true; 362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 363bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka if (DBG) log("fetchRuimRecords " + recordsToLoad); 364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.getIMSI(obtainMessage(EVENT_GET_IMSI_DONE)); 366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsToLoad++; 367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mFh.loadEFTransparent(EF_ICCID, 369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville obtainMessage(EVENT_GET_ICCID_DONE)); 370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordsToLoad++; 371c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 372bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka if (DBG) log("fetchRuimRecords " + recordsToLoad + " requested: " + recordsRequested); 373c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Further records that can be inserted are Operator/OEM dependent 374c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 375c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 376c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 377c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@inheritDoc} 378c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 379c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * No Display rule for RUIMs yet. 380c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 381c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public int getDisplayRule(String plmn) { 383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // TODO together with spn 384c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return 0; 385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void setVoiceMessageWaiting(int line, int countWaiting) { 389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (line != 1) { 390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // only profile 1 is supported 391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return; 392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // range check 395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (countWaiting < 0) { 396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville countWaiting = -1; 397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } else if (countWaiting > 0xff) { 398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // C.S0015-B v2, 4.5.12 399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // range: 0-99 400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville countWaiting = 0xff; 401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville countVoiceMessages = countWaiting; 403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mRecordsEventsRegistrants.notifyResult(EVENT_MWI); 405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville private void handleRuimRefresh(IccRefreshResponse refreshResponse) { 408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (refreshResponse == null) { 409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log("handleRuimRefresh received without input"); 410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return; 411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (refreshResponse.aid != null && 414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville !refreshResponse.aid.equals(mParentCard.getAid())) { 415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // This is for different app. Ignore. 416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return; 417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville switch (refreshResponse.refreshResult) { 420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case IccRefreshResponse.REFRESH_RESULT_FILE_UPDATE: 421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log("handleRuimRefresh with SIM_REFRESH_FILE_UPDATED"); 422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville adnCache.reset(); 423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville fetchRuimRecords(); 424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case IccRefreshResponse.REFRESH_RESULT_INIT: 426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log("handleRuimRefresh with SIM_REFRESH_INIT"); 427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // need to reload all files (that we care about) 428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville fetchRuimRecords(); 429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case IccRefreshResponse.REFRESH_RESULT_RESET: 431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log("handleRuimRefresh with SIM_REFRESH_RESET"); 432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi.setRadioPower(false, null); 433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /* Note: no need to call setRadioPower(true). Assuming the desired 434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * radio power state is still ON (as tracked by ServiceStateTracker), 435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * ServiceStateTracker will call setRadioPower when it receives the 436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * RADIO_STATE_CHANGED notification for the power off. And if the 437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * desired power state has changed in the interim, we don't want to 438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * override it with an unconditional power on. 439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville default: 442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // unknown refresh operation 443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log("handleRuimRefresh with unknown operation"); 444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected void log(String s) { 450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Log.d(LOG_TAG, "[RuimRecords] " + s); 451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected void loge(String s) { 455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Log.e(LOG_TAG, "[RuimRecords] " + s); 456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville} 458