IccRecords.java revision ac09d2af145b4d820a34f5e7628bc42e2e211bdb
1767a662ecde33c3979bf02b793d392aca0403162Wink Saville/* 2767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Copyright (C) 2006 The Android Open Source Project 3767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 4767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5767a662ecde33c3979bf02b793d392aca0403162Wink Saville * you may not use this file except in compliance with the License. 6767a662ecde33c3979bf02b793d392aca0403162Wink Saville * You may obtain a copy of the License at 7767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 8767a662ecde33c3979bf02b793d392aca0403162Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unless required by applicable law or agreed to in writing, software 11767a662ecde33c3979bf02b793d392aca0403162Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12767a662ecde33c3979bf02b793d392aca0403162Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See the License for the specific language governing permissions and 14767a662ecde33c3979bf02b793d392aca0403162Wink Saville * limitations under the License. 15767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 16767a662ecde33c3979bf02b793d392aca0403162Wink Saville 17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony; 18767a662ecde33c3979bf02b793d392aca0403162Wink Saville 19767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.AsyncResult; 20767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Handler; 21767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Message; 22767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Registrant; 23767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.RegistrantList; 24767a662ecde33c3979bf02b793d392aca0403162Wink Saville 25ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hambyimport com.android.internal.telephony.gsm.UsimServiceTable; 26463f22114587344c96460179069a08d7381fbfd6Jake Hambyimport com.android.internal.telephony.ims.IsimRecords; 27463f22114587344c96460179069a08d7381fbfd6Jake Hamby 28767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 29767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 30767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 31767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic abstract class IccRecords extends Handler implements IccConstants { 32767a662ecde33c3979bf02b793d392aca0403162Wink Saville 33767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected static final boolean DBG = true; 341c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt // ***** Instance Variables 35767a662ecde33c3979bf02b793d392aca0403162Wink Saville 36767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected PhoneBase phone; 37767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected RegistrantList recordsLoadedRegistrants = new RegistrantList(); 38767a662ecde33c3979bf02b793d392aca0403162Wink Saville 39767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected int recordsToLoad; // number of pending load requests 40767a662ecde33c3979bf02b793d392aca0403162Wink Saville 41767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected AdnRecordCache adnCache; 42767a662ecde33c3979bf02b793d392aca0403162Wink Saville 431c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt // ***** Cached SIM State; cleared on channel close 44767a662ecde33c3979bf02b793d392aca0403162Wink Saville 45767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean recordsRequested = false; // true if we've made requests for the sim records 46767a662ecde33c3979bf02b793d392aca0403162Wink Saville 47767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String iccid; 48767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String msisdn = null; // My mobile number 49767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String msisdnTag = null; 50767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String voiceMailNum = null; 51767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String voiceMailTag = null; 52767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String newVoiceMailNum = null; 53767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String newVoiceMailTag = null; 54767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean isVoiceMailFixed = false; 55767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected int countVoiceMessages = 0; 56767a662ecde33c3979bf02b793d392aca0403162Wink Saville 571c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt protected int mncLength = UNINITIALIZED; 58767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected int mailboxIndex = 0; // 0 is no mailbox dailing number associated 59767a662ecde33c3979bf02b793d392aca0403162Wink Saville 60767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected String spn; 61767a662ecde33c3979bf02b793d392aca0403162Wink Saville 621c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt // ***** Constants 631c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt 641c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt // Markers for mncLength 651c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt protected static final int UNINITIALIZED = -1; 661c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt protected static final int UNKNOWN = 0; 67767a662ecde33c3979bf02b793d392aca0403162Wink Saville 68767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Bitmasks for SPN display rules. 69767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected static final int SPN_RULE_SHOW_SPN = 0x01; 70767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected static final int SPN_RULE_SHOW_PLMN = 0x02; 71767a662ecde33c3979bf02b793d392aca0403162Wink Saville 721c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt // ***** Event Constants 73767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected static final int EVENT_SET_MSISDN_DONE = 30; 74767a662ecde33c3979bf02b793d392aca0403162Wink Saville 75463f22114587344c96460179069a08d7381fbfd6Jake Hamby public static final int EVENT_GET_ICC_RECORD_DONE = 100; 76463f22114587344c96460179069a08d7381fbfd6Jake Hamby 77463f22114587344c96460179069a08d7381fbfd6Jake Hamby /** 78463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Generic ICC record loaded callback. Subclasses can call EF load methods on 79463f22114587344c96460179069a08d7381fbfd6Jake Hamby * {@link IccFileHandler} passing a Message for onLoaded with the what field set to 80463f22114587344c96460179069a08d7381fbfd6Jake Hamby * {@link #EVENT_GET_ICC_RECORD_DONE} and the obj field set to an instance 81463f22114587344c96460179069a08d7381fbfd6Jake Hamby * of this interface. The {@link #handleMessage} method in this class will print a 82463f22114587344c96460179069a08d7381fbfd6Jake Hamby * log message using {@link #getEfName()} and decrement {@link #recordsToLoad}. 83463f22114587344c96460179069a08d7381fbfd6Jake Hamby * 84463f22114587344c96460179069a08d7381fbfd6Jake Hamby * If the record load was successful, {@link #onRecordLoaded} will be called with the result. 85463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Otherwise, an error log message will be output by {@link #handleMessage} and 86463f22114587344c96460179069a08d7381fbfd6Jake Hamby * {@link #onRecordLoaded} will not be called. 87463f22114587344c96460179069a08d7381fbfd6Jake Hamby */ 88463f22114587344c96460179069a08d7381fbfd6Jake Hamby public interface IccRecordLoaded { 89463f22114587344c96460179069a08d7381fbfd6Jake Hamby String getEfName(); 90463f22114587344c96460179069a08d7381fbfd6Jake Hamby void onRecordLoaded(AsyncResult ar); 91463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 92463f22114587344c96460179069a08d7381fbfd6Jake Hamby 931c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwalt // ***** Constructor 94767a662ecde33c3979bf02b793d392aca0403162Wink Saville 95767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccRecords(PhoneBase p) { 96767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.phone = p; 97767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 98767a662ecde33c3979bf02b793d392aca0403162Wink Saville 991f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 1001f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Call when the IccRecords object is no longer going to be used. 1011f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 1021f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public abstract void dispose(); 1031f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected abstract void onRadioOffOrNotAvailable(); 105767a662ecde33c3979bf02b793d392aca0403162Wink Saville 106767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Public Methods 107767a662ecde33c3979bf02b793d392aca0403162Wink Saville public AdnRecordCache getAdnCache() { 108767a662ecde33c3979bf02b793d392aca0403162Wink Saville return adnCache; 109767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 110767a662ecde33c3979bf02b793d392aca0403162Wink Saville 111767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForRecordsLoaded(Handler h, int what, Object obj) { 112767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant r = new Registrant(h, what, obj); 113767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordsLoadedRegistrants.add(r); 114767a662ecde33c3979bf02b793d392aca0403162Wink Saville 115767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (recordsToLoad == 0 && recordsRequested == true) { 116767a662ecde33c3979bf02b793d392aca0403162Wink Saville r.notifyRegistrant(new AsyncResult(null, null, null)); 117767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 118767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 119767a662ecde33c3979bf02b793d392aca0403162Wink Saville 120767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForRecordsLoaded(Handler h) { 121767a662ecde33c3979bf02b793d392aca0403162Wink Saville recordsLoadedRegistrants.remove(h); 122767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 123767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1241f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 1251f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Get the International Mobile Subscriber ID (IMSI) on a SIM 1261f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * for GSM, UMTS and like networks. Default is null if IMSI is 1271f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * not supported or unavailable. 1281f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * 1291f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * @return null if SIM is not yet ready or unavailable 1301f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 1311f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public String getIMSI() { 1321f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville return null; 1331f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 1341f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 135767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMsisdnNumber() { 136767a662ecde33c3979bf02b793d392aca0403162Wink Saville return msisdn; 137767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 138767a662ecde33c3979bf02b793d392aca0403162Wink Saville 139767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 140767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Set subscriber number to SIM record 141767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 142767a662ecde33c3979bf02b793d392aca0403162Wink Saville * The subscriber number is stored in EF_MSISDN (TS 51.011) 143767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville * When the operation is complete, onComplete will be sent to its handler 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 146767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param alphaTag alpha-tagging of the dailing nubmer (up to 10 characters) 147767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param number dailing nubmer (up to 20 digits) 148767a662ecde33c3979bf02b793d392aca0403162Wink Saville * if the number starts with '+', then set to international TOA 149767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onComplete 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville * onComplete.obj will be an AsyncResult 151767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)onComplete.obj).exception == null on success 152767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)onComplete.obj).exception != null on fail 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 154767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMsisdnNumber(String alphaTag, String number, 155767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 156767a662ecde33c3979bf02b793d392aca0403162Wink Saville 157767a662ecde33c3979bf02b793d392aca0403162Wink Saville msisdn = number; 158767a662ecde33c3979bf02b793d392aca0403162Wink Saville msisdnTag = alphaTag; 159767a662ecde33c3979bf02b793d392aca0403162Wink Saville 160767a662ecde33c3979bf02b793d392aca0403162Wink Saville if(DBG) log("Set MSISDN: " + msisdnTag +" " + msisdn); 161767a662ecde33c3979bf02b793d392aca0403162Wink Saville 162767a662ecde33c3979bf02b793d392aca0403162Wink Saville 163767a662ecde33c3979bf02b793d392aca0403162Wink Saville AdnRecord adn = new AdnRecord(msisdnTag, msisdn); 164767a662ecde33c3979bf02b793d392aca0403162Wink Saville 165767a662ecde33c3979bf02b793d392aca0403162Wink Saville new AdnRecordLoader(phone).updateEF(adn, EF_MSISDN, EF_EXT1, 1, null, 166767a662ecde33c3979bf02b793d392aca0403162Wink Saville obtainMessage(EVENT_SET_MSISDN_DONE, onComplete)); 167767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 168767a662ecde33c3979bf02b793d392aca0403162Wink Saville 169767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMsisdnAlphaTag() { 170767a662ecde33c3979bf02b793d392aca0403162Wink Saville return msisdnTag; 171767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 172767a662ecde33c3979bf02b793d392aca0403162Wink Saville 173767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailNumber() { 174767a662ecde33c3979bf02b793d392aca0403162Wink Saville return voiceMailNum; 175767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 176767a662ecde33c3979bf02b793d392aca0403162Wink Saville 177767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 178767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Return Service Provider Name stored in SIM (EF_SPN=0x6F46) or in RUIM (EF_RUIM_SPN=0x6F41) 179767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @return null if SIM is not yet ready or no RUIM entry 180767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 181767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getServiceProviderName() { 182767a662ecde33c3979bf02b793d392aca0403162Wink Saville return spn; 183767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 184767a662ecde33c3979bf02b793d392aca0403162Wink Saville 185767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 186767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Set voice mail number to SIM record 187767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 188767a662ecde33c3979bf02b793d392aca0403162Wink Saville * The voice mail number can be stored either in EF_MBDN (TS 51.011) or 189767a662ecde33c3979bf02b793d392aca0403162Wink Saville * EF_MAILBOX_CPHS (CPHS 4.2) 190767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 191767a662ecde33c3979bf02b793d392aca0403162Wink Saville * If EF_MBDN is available, store the voice mail number to EF_MBDN 192767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 193767a662ecde33c3979bf02b793d392aca0403162Wink Saville * If EF_MAILBOX_CPHS is enabled, store the voice mail number to EF_CHPS 194767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 195767a662ecde33c3979bf02b793d392aca0403162Wink Saville * So the voice mail number will be stored in both EFs if both are available 196767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 197767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Return error only if both EF_MBDN and EF_MAILBOX_CPHS fail. 198767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 199767a662ecde33c3979bf02b793d392aca0403162Wink Saville * When the operation is complete, onComplete will be sent to its handler 200767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 201767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param alphaTag alpha-tagging of the dailing nubmer (upto 10 characters) 202767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param voiceNumber dailing nubmer (upto 20 digits) 203767a662ecde33c3979bf02b793d392aca0403162Wink Saville * if the number is start with '+', then set to international TOA 204767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param onComplete 205767a662ecde33c3979bf02b793d392aca0403162Wink Saville * onComplete.obj will be an AsyncResult 206767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)onComplete.obj).exception == null on success 207767a662ecde33c3979bf02b793d392aca0403162Wink Saville * ((AsyncResult)onComplete.obj).exception != null on fail 208767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 209767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract void setVoiceMailNumber(String alphaTag, String voiceNumber, 210767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete); 211767a662ecde33c3979bf02b793d392aca0403162Wink Saville 212767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailAlphaTag() { 213767a662ecde33c3979bf02b793d392aca0403162Wink Saville return voiceMailTag; 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 217767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Sets the SIM voice message waiting indicator records 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported 219767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param countWaiting The number of messages waiting, if known. Use 220767a662ecde33c3979bf02b793d392aca0403162Wink Saville * -1 to indicate that an unknown number of 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville * messages are waiting 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract void setVoiceMessageWaiting(int line, int countWaiting); 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville 225767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** @return true if there are messages waiting, false otherwise. */ 226767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getVoiceMessageWaiting() { 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville return countVoiceMessages != 0; 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 229767a662ecde33c3979bf02b793d392aca0403162Wink Saville 230767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 231767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns number of voice messages waiting, if available 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville * If not available (eg, on an older CPHS SIM) -1 is returned if 233767a662ecde33c3979bf02b793d392aca0403162Wink Saville * getVoiceMessageWaiting() is true 234767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 235ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause public int getVoiceMessageCount() { 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville return countVoiceMessages; 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Called by STK Service when REFRESH is received. 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileChanged indicates whether any files changed 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fileList if non-null, a list of EF files that changed 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville public abstract void onRefresh(boolean fileChanged, int[] fileList); 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getRecordsLoaded() { 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (recordsToLoad == 0 && recordsRequested == true) { 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville return true; 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 254767a662ecde33c3979bf02b793d392aca0403162Wink Saville 255767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Overridden from Handler 2561f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville @Override 257463f22114587344c96460179069a08d7381fbfd6Jake Hamby public void handleMessage(Message msg) { 258463f22114587344c96460179069a08d7381fbfd6Jake Hamby switch (msg.what) { 259463f22114587344c96460179069a08d7381fbfd6Jake Hamby case EVENT_GET_ICC_RECORD_DONE: 260463f22114587344c96460179069a08d7381fbfd6Jake Hamby try { 261463f22114587344c96460179069a08d7381fbfd6Jake Hamby AsyncResult ar = (AsyncResult) msg.obj; 262463f22114587344c96460179069a08d7381fbfd6Jake Hamby IccRecordLoaded recordLoaded = (IccRecordLoaded) ar.userObj; 263463f22114587344c96460179069a08d7381fbfd6Jake Hamby if (DBG) log(recordLoaded.getEfName() + " LOADED"); 264463f22114587344c96460179069a08d7381fbfd6Jake Hamby 265463f22114587344c96460179069a08d7381fbfd6Jake Hamby if (ar.exception != null) { 266463f22114587344c96460179069a08d7381fbfd6Jake Hamby loge("Record Load Exception: " + ar.exception); 267463f22114587344c96460179069a08d7381fbfd6Jake Hamby } else { 268463f22114587344c96460179069a08d7381fbfd6Jake Hamby recordLoaded.onRecordLoaded(ar); 269463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 270463f22114587344c96460179069a08d7381fbfd6Jake Hamby }catch (RuntimeException exc) { 271463f22114587344c96460179069a08d7381fbfd6Jake Hamby // I don't want these exceptions to be fatal 272463f22114587344c96460179069a08d7381fbfd6Jake Hamby loge("Exception parsing SIM record: " + exc); 273463f22114587344c96460179069a08d7381fbfd6Jake Hamby } finally { 274463f22114587344c96460179069a08d7381fbfd6Jake Hamby // Count up record load responses even if they are fails 275463f22114587344c96460179069a08d7381fbfd6Jake Hamby onRecordLoaded(); 276463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 277463f22114587344c96460179069a08d7381fbfd6Jake Hamby break; 278463f22114587344c96460179069a08d7381fbfd6Jake Hamby 279463f22114587344c96460179069a08d7381fbfd6Jake Hamby default: 280463f22114587344c96460179069a08d7381fbfd6Jake Hamby super.handleMessage(msg); 281463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 282463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 283767a662ecde33c3979bf02b793d392aca0403162Wink Saville 284767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected abstract void onRecordLoaded(); 285767a662ecde33c3979bf02b793d392aca0403162Wink Saville 286767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected abstract void onAllRecordsLoaded(); 287767a662ecde33c3979bf02b793d392aca0403162Wink Saville 288767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 289767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Returns the SpnDisplayRule based on settings on the SIM and the 290767a662ecde33c3979bf02b793d392aca0403162Wink Saville * specified plmn (currently-registered PLMN). See TS 22.101 Annex A 291767a662ecde33c3979bf02b793d392aca0403162Wink Saville * and TS 51.011 10.3.11 for details. 292767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 293767a662ecde33c3979bf02b793d392aca0403162Wink Saville * If the SPN is not found on the SIM, the rule is always PLMN_ONLY. 2941f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Generally used for GSM/UMTS and the like SIMs. 2951f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 2961f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public abstract int getDisplayRule(String plmn); 2971f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 2981f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 2991f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Return true if "Restriction of menu options for manual PLMN selection" 3001f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * bit is set or EF_CSP data is unavailable, return false otherwise. 3011f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Generally used for GSM/UMTS and the like SIMs. 3021f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 3031f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public boolean isCspPlmnEnabled() { 3041f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville return false; 3051f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 3061f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 3071f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 3081f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Returns the 5 or 6 digit MCC/MNC of the operator that 3091f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * provided the SIM card. Returns null of SIM is not yet ready 3101f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * or is not valid for the type of IccCard. Generally used for 3111f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * GSM/UMTS and the like SIMS 3121f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 3131f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public String getOperatorNumeric() { 3141f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville return null; 3151f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 3161f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 3171f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 3181f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Get the current Voice call forwarding flag for GSM/UMTS and the like SIMs 3191f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * 3201f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * @return true if enabled 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 3221f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public boolean getVoiceCallForwardingFlag() { 3231f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville return false; 3241f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville 3261f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 3271f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Set the voice call forwarding flag for GSM/UMTS and the like SIMs 3281f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * 3291f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * @param line to enable/disable 3301f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * @param enable 3311f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 3321f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville public void setVoiceCallForwardingFlag(int line, boolean enable) { 3331f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 3341f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 3351f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville /** 33653f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo * Indicates wether SIM is in provisioned state or not. 33753f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo * Overridden only if SIM can be dynamically provisioned via OTA. 33853f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo * 33953f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo * @return true if provisioned 34053f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo */ 34153f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo public boolean isProvisioned () { 34253f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo return true; 34353f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo } 34453f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo 34553f67f7e9d5534cc7d4fe882e100c221ce0b193bKazuhiro Ondo /** 3461f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * Write string to log file 3471f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * 3481f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville * @param s is the string to write 3491f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville */ 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected abstract void log(String s); 351463f22114587344c96460179069a08d7381fbfd6Jake Hamby 352463f22114587344c96460179069a08d7381fbfd6Jake Hamby /** 353463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Write error string to log file. 354463f22114587344c96460179069a08d7381fbfd6Jake Hamby * 355463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @param s is the string to write 356463f22114587344c96460179069a08d7381fbfd6Jake Hamby */ 357463f22114587344c96460179069a08d7381fbfd6Jake Hamby protected abstract void loge(String s); 358463f22114587344c96460179069a08d7381fbfd6Jake Hamby 359463f22114587344c96460179069a08d7381fbfd6Jake Hamby /** 360463f22114587344c96460179069a08d7381fbfd6Jake Hamby * Return an interface to retrieve the ISIM records for IMS, if available. 361463f22114587344c96460179069a08d7381fbfd6Jake Hamby * @return the interface to retrieve the ISIM records, or null if not supported 362463f22114587344c96460179069a08d7381fbfd6Jake Hamby */ 363463f22114587344c96460179069a08d7381fbfd6Jake Hamby public IsimRecords getIsimRecords() { 364463f22114587344c96460179069a08d7381fbfd6Jake Hamby return null; 365463f22114587344c96460179069a08d7381fbfd6Jake Hamby } 366ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby 367ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby public UsimServiceTable getUsimServiceTable() { 368ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby return null; 369ac09d2af145b4d820a34f5e7628bc42e2e211bdbJake Hamby } 370767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 371