1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/* 2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 2006 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 17d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkapackage com.android.internal.telephony.uicc; 18c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 19c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Context; 20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.AsyncResult; 21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Handler; 22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Message; 23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Registrant; 24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.RegistrantList; 25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 26d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.CommandsInterface; 2764bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState; 28c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 2905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenkaimport java.io.FileDescriptor; 3005ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenkaimport java.io.PrintWriter; 31bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenkaimport java.util.concurrent.atomic.AtomicBoolean; 32bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka 33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/** 34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide} 35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic abstract class IccRecords extends Handler implements IccConstants { 37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected static final boolean DBG = true; 38cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville 39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Instance Variables 40bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka protected AtomicBoolean mDestroyed = new AtomicBoolean(false); 41c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected Context mContext; 42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected CommandsInterface mCi; 43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected IccFileHandler mFh; 44e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka protected UiccCardApplication mParentApp; 45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 46b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville protected RegistrantList mRecordsLoadedRegistrants = new RegistrantList(); 47e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka protected RegistrantList mImsiReadyRegistrants = new RegistrantList(); 48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected RegistrantList mRecordsEventsRegistrants = new RegistrantList(); 49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected RegistrantList mNewSmsRegistrants = new RegistrantList(); 50c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected RegistrantList mNetworkSelectionModeAutomaticRegistrants = new RegistrantList(); 51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 5222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected int mRecordsToLoad; // number of pending load requests 53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 5422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected AdnRecordCache mAdnCache; 55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Cached SIM State; cleared on channel close 57c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 5822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected boolean mRecordsRequested = false; // true if we've made requests for the sim records 5922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville 60b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville protected String mIccId; 6122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mMsisdn = null; // My mobile number 6222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mMsisdnTag = null; 6322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mVoiceMailNum = null; 6422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mVoiceMailTag = null; 6522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mNewVoiceMailNum = null; 6622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mNewVoiceMailTag = null; 6722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected boolean mIsVoiceMailFixed = false; 6822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected int mCountVoiceMessages = 0; 69e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka protected String mImsi; 70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 7122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected int mMncLength = UNINITIALIZED; 7222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected int mMailboxIndex = 0; // 0 is no mailbox dailing number associated 73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 7422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville protected String mSpn; 75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 76620c8855bcaa3fe8d492e93811b0ed6e8b4f59fcRobert Greenwalt protected String mGid1; 772f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim 78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Constants 79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Markers for mncLength 81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected static final int UNINITIALIZED = -1; 82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected static final int UNKNOWN = 0; 83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Bitmasks for SPN display rules. 85cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public static final int SPN_RULE_SHOW_SPN = 0x01; 86cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public static final int SPN_RULE_SHOW_PLMN = 0x02; 87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Event Constants 89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected static final int EVENT_SET_MSISDN_DONE = 30; 90bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka public static final int EVENT_MWI = 0; // Message Waiting indication 91bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka public static final int EVENT_CFI = 1; // Call Forwarding indication 92bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka public static final int EVENT_SPN = 2; // Service Provider Name 93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public static final int EVENT_GET_ICC_RECORD_DONE = 100; 9564bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka protected static final int EVENT_APP_READY = 1; 96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 97f92cb4bd5519427a0db673709d94683a8baf203aWink Saville @Override 98f92cb4bd5519427a0db673709d94683a8baf203aWink Saville public String toString() { 99f92cb4bd5519427a0db673709d94683a8baf203aWink Saville return "mDestroyed=" + mDestroyed 100f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mContext=" + mContext 101f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mCi=" + mCi 102f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mFh=" + mFh 103f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mParentApp=" + mParentApp 104b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville + " recordsLoadedRegistrants=" + mRecordsLoadedRegistrants 105f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mImsiReadyRegistrants=" + mImsiReadyRegistrants 106f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mRecordsEventsRegistrants=" + mRecordsEventsRegistrants 107f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mNewSmsRegistrants=" + mNewSmsRegistrants 108f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mNetworkSelectionModeAutomaticRegistrants=" 109f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + mNetworkSelectionModeAutomaticRegistrants 11022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " recordsToLoad=" + mRecordsToLoad 11122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " adnCache=" + mAdnCache 11222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " recordsRequested=" + mRecordsRequested 113b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville + " iccid=" + mIccId 11422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " msisdn=" + mMsisdn 11522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " msisdnTag=" + mMsisdnTag 11622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " voiceMailNum=" + mVoiceMailNum 11722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " voiceMailTag=" + mVoiceMailTag 11822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " newVoiceMailNum=" + mNewVoiceMailNum 11922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " newVoiceMailTag=" + mNewVoiceMailTag 12022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " isVoiceMailFixed=" + mIsVoiceMailFixed 12122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " countVoiceMessages=" + mCountVoiceMessages 122f92cb4bd5519427a0db673709d94683a8baf203aWink Saville + " mImsi=" + mImsi 12322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " mncLength=" + mMncLength 12422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " mailboxIndex=" + mMailboxIndex 12522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville + " spn=" + mSpn; 126f92cb4bd5519427a0db673709d94683a8baf203aWink Saville 127f92cb4bd5519427a0db673709d94683a8baf203aWink Saville } 128f92cb4bd5519427a0db673709d94683a8baf203aWink Saville 129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Generic ICC record loaded callback. Subclasses can call EF load methods on 131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@link IccFileHandler} passing a Message for onLoaded with the what field set to 132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@link #EVENT_GET_ICC_RECORD_DONE} and the obj field set to an instance 133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * of this interface. The {@link #handleMessage} method in this class will print a 13422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville * log message using {@link #getEfName()} and decrement {@link #mRecordsToLoad}. 135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * If the record load was successful, {@link #onRecordLoaded} will be called with the result. 137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Otherwise, an error log message will be output by {@link #handleMessage} and 138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@link #onRecordLoaded} will not be called. 139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public interface IccRecordLoaded { 141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville String getEfName(); 142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville void onRecordLoaded(AsyncResult ar); 143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // ***** Constructor 146e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka public IccRecords(UiccCardApplication app, Context c, CommandsInterface ci) { 147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mContext = c; 148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi = ci; 149e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mFh = app.getIccFileHandler(); 150e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mParentApp = app; 151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Call when the IccRecords object is no longer going to be used. 155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void dispose() { 157bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka mDestroyed.set(true); 158e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mParentApp = null; 159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mFh = null; 160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mCi = null; 161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mContext = null; 162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public abstract void onReady(); 165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville //***** Public Methods 167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public AdnRecordCache getAdnCache() { 16822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mAdnCache; 169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 171b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville public String getIccId() { 172b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville return mIccId; 173b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville } 174b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville 175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void registerForRecordsLoaded(Handler h, int what, Object obj) { 176bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka if (mDestroyed.get()) { 177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return; 178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Registrant r = new Registrant(h, what, obj); 181b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville mRecordsLoadedRegistrants.add(r); 182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 18322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville if (mRecordsToLoad == 0 && mRecordsRequested == true) { 184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville r.notifyRegistrant(new AsyncResult(null, null, null)); 185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void unregisterForRecordsLoaded(Handler h) { 188b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville mRecordsLoadedRegistrants.remove(h); 189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 191e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka public void registerForImsiReady(Handler h, int what, Object obj) { 192e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (mDestroyed.get()) { 193e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka return; 194e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka } 195e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka 196e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka Registrant r = new Registrant(h, what, obj); 197e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mImsiReadyRegistrants.add(r); 198e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka 199e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (mImsi != null) { 200e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka r.notifyRegistrant(new AsyncResult(null, null, null)); 201e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka } 202e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka } 203e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka public void unregisterForImsiReady(Handler h) { 204e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mImsiReadyRegistrants.remove(h); 205e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka } 206e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka 207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void registerForRecordsEvents(Handler h, int what, Object obj) { 208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Registrant r = new Registrant (h, what, obj); 209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mRecordsEventsRegistrants.add(r); 210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void unregisterForRecordsEvents(Handler h) { 212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mRecordsEventsRegistrants.remove(h); 213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void registerForNewSms(Handler h, int what, Object obj) { 216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Registrant r = new Registrant (h, what, obj); 217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mNewSmsRegistrants.add(r); 218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void unregisterForNewSms(Handler h) { 220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mNewSmsRegistrants.remove(h); 221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void registerForNetworkSelectionModeAutomatic( 224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Handler h, int what, Object obj) { 225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Registrant r = new Registrant (h, what, obj); 226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mNetworkSelectionModeAutomaticRegistrants.add(r); 227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void unregisterForNetworkSelectionModeAutomatic(Handler h) { 229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville mNetworkSelectionModeAutomaticRegistrants.remove(h); 230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Get the International Mobile Subscriber ID (IMSI) on a SIM 234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * for GSM, UMTS and like networks. Default is null if IMSI is 235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * not supported or unavailable. 236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @return null if SIM is not yet ready or unavailable 238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getIMSI() { 240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return null; 241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 243e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka /** 244e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka * Imsi could be set by ServiceStateTrackers in case of cdma 245e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka * @param imsi 246e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka */ 247e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka public void setImsi(String imsi) { 24822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mImsi = imsi; 249e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mImsiReadyRegistrants.notifyRegistrants(); 250e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka } 251e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka 252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getMsisdnNumber() { 25322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mMsisdn; 254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 2572f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim * Get the Group Identifier Level 1 (GID1) on a SIM for GSM. 2582f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim * @return null if SIM is not yet ready 2592f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim */ 2602f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim public String getGid1() { 2612f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim return null; 2622f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim } 2632f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim 2642f837b8058eba0bc59e983c67efbc00cd9a80eeeHyejin Kim /** 265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Set subscriber number to SIM record 266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * The subscriber number is stored in EF_MSISDN (TS 51.011) 268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * When the operation is complete, onComplete will be sent to its handler 270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param alphaTag alpha-tagging of the dailing nubmer (up to 10 characters) 272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param number dailing nubmer (up to 20 digits) 273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * if the number starts with '+', then set to international TOA 274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param onComplete 275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * onComplete.obj will be an AsyncResult 276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * ((AsyncResult)onComplete.obj).exception == null on success 277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * ((AsyncResult)onComplete.obj).exception != null on fail 278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void setMsisdnNumber(String alphaTag, String number, 280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Message onComplete) { 281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 28222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mMsisdn = number; 28322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mMsisdnTag = alphaTag; 284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 28522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville if (DBG) log("Set MSISDN: " + mMsisdnTag +" " + mMsisdn); 286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 28822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville AdnRecord adn = new AdnRecord(mMsisdnTag, mMsisdn); 289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville new AdnRecordLoader(mFh).updateEF(adn, EF_MSISDN, EF_EXT1, 1, null, 291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville obtainMessage(EVENT_SET_MSISDN_DONE, onComplete)); 292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getMsisdnAlphaTag() { 29522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mMsisdnTag; 296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getVoiceMailNumber() { 29922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mVoiceMailNum; 300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Return Service Provider Name stored in SIM (EF_SPN=0x6F46) or in RUIM (EF_RUIM_SPN=0x6F41) 304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @return null if SIM is not yet ready or no RUIM entry 305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getServiceProviderName() { 30722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mSpn; 308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Set voice mail number to SIM record 312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * The voice mail number can be stored either in EF_MBDN (TS 51.011) or 314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * EF_MAILBOX_CPHS (CPHS 4.2) 315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * If EF_MBDN is available, store the voice mail number to EF_MBDN 317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * If EF_MAILBOX_CPHS is enabled, store the voice mail number to EF_CHPS 319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * So the voice mail number will be stored in both EFs if both are available 321c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Return error only if both EF_MBDN and EF_MAILBOX_CPHS fail. 323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * When the operation is complete, onComplete will be sent to its handler 325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 326c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param alphaTag alpha-tagging of the dailing nubmer (upto 10 characters) 327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param voiceNumber dailing nubmer (upto 20 digits) 328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * if the number is start with '+', then set to international TOA 329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param onComplete 330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * onComplete.obj will be an AsyncResult 331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * ((AsyncResult)onComplete.obj).exception == null on success 332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * ((AsyncResult)onComplete.obj).exception != null on fail 333c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 334c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public abstract void setVoiceMailNumber(String alphaTag, String voiceNumber, 335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Message onComplete); 336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getVoiceMailAlphaTag() { 33822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mVoiceMailTag; 339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Sets the SIM voice message waiting indicator records 343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported 344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param countWaiting The number of messages waiting, if known. Use 345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * -1 to indicate that an unknown number of 346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * messages are waiting 347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public abstract void setVoiceMessageWaiting(int line, int countWaiting); 349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** @return true if there are messages waiting, false otherwise. */ 351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public boolean getVoiceMessageWaiting() { 35222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCountVoiceMessages != 0; 353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 355c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 356c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Returns number of voice messages waiting, if available 357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * If not available (eg, on an older CPHS SIM) -1 is returned if 358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * getVoiceMessageWaiting() is true 359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public int getVoiceMessageCount() { 36122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCountVoiceMessages; 362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 363c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Called by STK Service when REFRESH is received. 366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param fileChanged indicates whether any files changed 367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param fileList if non-null, a list of EF files that changed 368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public abstract void onRefresh(boolean fileChanged, int[] fileList); 370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 37164bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka /** 37264bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka * Called by subclasses (SimRecords and RuimRecords) whenever 37364bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka * IccRefreshResponse.REFRESH_RESULT_INIT event received 37464bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka */ 37564bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka protected void onIccRefreshInit() { 376652fe674a597e221274a3746118f15cf40c7dbb9Wink Saville mAdnCache.reset(); 37764bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka if (mParentApp.getState() == AppState.APPSTATE_READY) { 37864bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka // This will cause files to be reread 37964bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka sendMessage(obtainMessage(EVENT_APP_READY)); 38064bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka } 38164bfd98578babdd437f1a83d2d5e1fc92c76e729Alex Yakavenka } 382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public boolean getRecordsLoaded() { 38422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville if (mRecordsToLoad == 0 && mRecordsRequested == true) { 385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return true; 386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } else { 387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return false; 388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville //***** Overridden from Handler 392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville @Override 393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void handleMessage(Message msg) { 394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville switch (msg.what) { 395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville case EVENT_GET_ICC_RECORD_DONE: 396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville try { 397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville AsyncResult ar = (AsyncResult) msg.obj; 398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville IccRecordLoaded recordLoaded = (IccRecordLoaded) ar.userObj; 399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (DBG) log(recordLoaded.getEfName() + " LOADED"); 400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (ar.exception != null) { 402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loge("Record Load Exception: " + ar.exception); 403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } else { 404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville recordLoaded.onRecordLoaded(ar); 405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville }catch (RuntimeException exc) { 407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // I don't want these exceptions to be fatal 408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville loge("Exception parsing SIM record: " + exc); 409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } finally { 410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // Count up record load responses even if they are fails 411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville onRecordLoaded(); 412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville default: 416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville super.handleMessage(msg); 417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected abstract void onRecordLoaded(); 421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected abstract void onAllRecordsLoaded(); 423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Returns the SpnDisplayRule based on settings on the SIM and the 426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * specified plmn (currently-registered PLMN). See TS 22.101 Annex A 427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * and TS 51.011 10.3.11 for details. 428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * If the SPN is not found on the SIM, the rule is always PLMN_ONLY. 430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Generally used for GSM/UMTS and the like SIMs. 431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public abstract int getDisplayRule(String plmn); 433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Return true if "Restriction of menu options for manual PLMN selection" 436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * bit is set or EF_CSP data is unavailable, return false otherwise. 437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Generally used for GSM/UMTS and the like SIMs. 438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public boolean isCspPlmnEnabled() { 440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return false; 441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Returns the 5 or 6 digit MCC/MNC of the operator that 445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * provided the SIM card. Returns null of SIM is not yet ready 446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * or is not valid for the type of IccCard. Generally used for 447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * GSM/UMTS and the like SIMS 448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public String getOperatorNumeric() { 450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return null; 451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Get the current Voice call forwarding flag for GSM/UMTS and the like SIMs 455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @return true if enabled 457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 458c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public boolean getVoiceCallForwardingFlag() { 459c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return false; 460c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 461c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 462c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 463c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Set the voice call forwarding flag for GSM/UMTS and the like SIMs 464c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 465c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param line to enable/disable 466c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param enable 467c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 468c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public void setVoiceCallForwardingFlag(int line, boolean enable) { 469c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 470c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 471c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 472c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Indicates wether SIM is in provisioned state or not. 473c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Overridden only if SIM can be dynamically provisioned via OTA. 474c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 475c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @return true if provisioned 476c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 477c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public boolean isProvisioned () { 478c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return true; 479c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 480c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 481c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 482c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Write string to log file 483c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 484c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param s is the string to write 485c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 486c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected abstract void log(String s); 487c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 488c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 489c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Write error string to log file. 490c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 491c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param s is the string to write 492c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 493c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville protected abstract void loge(String s); 494c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 495c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 496c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Return an interface to retrieve the ISIM records for IMS, if available. 497c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @return the interface to retrieve the ISIM records, or null if not supported 498c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 499c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public IsimRecords getIsimRecords() { 500c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return null; 501c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 502c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 503c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public UsimServiceTable getUsimServiceTable() { 504c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return null; 505c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 50605ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka 50705ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 50805ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println("IccRecords: " + this); 50905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mDestroyed=" + mDestroyed); 51005ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mCi=" + mCi); 51105ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mFh=" + mFh); 51205ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mParentApp=" + mParentApp); 513b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville pw.println(" recordsLoadedRegistrants: size=" + mRecordsLoadedRegistrants.size()); 514b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville for (int i = 0; i < mRecordsLoadedRegistrants.size(); i++) { 51505ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" recordsLoadedRegistrants[" + i + "]=" 516b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville + ((Registrant)mRecordsLoadedRegistrants.get(i)).getHandler()); 51705ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka } 51805ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mImsiReadyRegistrants: size=" + mImsiReadyRegistrants.size()); 51905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka for (int i = 0; i < mImsiReadyRegistrants.size(); i++) { 52005ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mImsiReadyRegistrants[" + i + "]=" 52105ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka + ((Registrant)mImsiReadyRegistrants.get(i)).getHandler()); 52205ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka } 52305ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mRecordsEventsRegistrants: size=" + mRecordsEventsRegistrants.size()); 52405ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka for (int i = 0; i < mRecordsEventsRegistrants.size(); i++) { 52505ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mRecordsEventsRegistrants[" + i + "]=" 52605ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka + ((Registrant)mRecordsEventsRegistrants.get(i)).getHandler()); 52705ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka } 52805ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mNewSmsRegistrants: size=" + mNewSmsRegistrants.size()); 52905ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka for (int i = 0; i < mNewSmsRegistrants.size(); i++) { 53005ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mNewSmsRegistrants[" + i + "]=" 53105ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka + ((Registrant)mNewSmsRegistrants.get(i)).getHandler()); 53205ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka } 53305ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mNetworkSelectionModeAutomaticRegistrants: size=" 53405ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka + mNetworkSelectionModeAutomaticRegistrants.size()); 53505ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka for (int i = 0; i < mNetworkSelectionModeAutomaticRegistrants.size(); i++) { 53605ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mNetworkSelectionModeAutomaticRegistrants[" + i + "]=" 53705ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka + ((Registrant)mNetworkSelectionModeAutomaticRegistrants.get(i)).getHandler()); 53805ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka } 53922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mRecordsRequested=" + mRecordsRequested); 54022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mRecordsToLoad=" + mRecordsToLoad); 54122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mRdnCache=" + mAdnCache); 542b7881d6e7e4e79491376bedf151c3412dfdc4121Wink Saville pw.println(" iccid=" + mIccId); 54322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mMsisdn=" + mMsisdn); 54422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mMsisdnTag=" + mMsisdnTag); 54522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mVoiceMailNum=" + mVoiceMailNum); 54622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mVoiceMailTag=" + mVoiceMailTag); 54722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mNewVoiceMailNum=" + mNewVoiceMailNum); 54822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mNewVoiceMailTag=" + mNewVoiceMailTag); 54922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mIsVoiceMailFixed=" + mIsVoiceMailFixed); 55022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mCountVoiceMessages=" + mCountVoiceMessages); 55105ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.println(" mImsi=" + mImsi); 55222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mMncLength=" + mMncLength); 55322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mMailboxIndex=" + mMailboxIndex); 55422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mSpn=" + mSpn); 55505ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka pw.flush(); 55605ef3b65972826780859b9acbd1fa9580d099832Alex Yakavenka } 557c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville} 558