CDMAPhone.java revision 1c42769339d8fe98ecb2698c64e7dc6672e3d59d
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.cdma;
18767a662ecde33c3979bf02b793d392aca0403162Wink Saville
19e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.app.ActivityManagerNative;
20767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.content.Context;
21e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.content.Intent;
22ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.content.SharedPreferences;
23767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.AsyncResult;
24767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Handler;
25767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Looper;
26767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Message;
27767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Registrant;
28767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.RegistrantList;
29767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.SystemProperties;
30ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.preference.PreferenceManager;
31767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.provider.Settings;
32767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.CellLocation;
33767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.PhoneNumberUtils;
34767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.ServiceState;
35e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength;
36767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.text.TextUtils;
37767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.util.Log;
38767a662ecde33c3979bf02b793d392aca0403162Wink Saville
391c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganeshimport com.android.internal.telephony.Call;
40767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CallStateException;
4190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalinkimport com.android.internal.telephony.CommandException;
42767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CommandsInterface;
43767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Connection;
44767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.DataConnection;
45767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccCard;
46ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport com.android.internal.telephony.IccException;
47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler;
48767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager;
49767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager;
50767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.MmiCode;
51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Phone;
52767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneBase;
53767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneNotifier;
54767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy;
55767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneSubInfo;
56767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.RILConstants;
57e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport com.android.internal.telephony.TelephonyIntents;
589bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties;
59767a662ecde33c3979bf02b793d392aca0403162Wink Saville
60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.List;
61dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Savilleimport java.util.Timer;
62dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Savilleimport java.util.TimerTask;
63767a662ecde33c3979bf02b793d392aca0403162Wink Saville/**
64767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide}
65767a662ecde33c3979bf02b793d392aca0403162Wink Saville */
66767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic class CDMAPhone extends PhoneBase {
67767a662ecde33c3979bf02b793d392aca0403162Wink Saville    static final String LOG_TAG = "CDMA";
68767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private static final boolean LOCAL_DEBUG = true;
69767a662ecde33c3979bf02b793d392aca0403162Wink Saville
7022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    // Default Emergency Callback Mode exit timer
71019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang    private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000;
72ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    static final String VM_COUNT_CDMA = "vm_count_key_cdma";
73ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    private static final String VM_NUMBER_CDMA = "vm_number_key_cdma";
74ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    private String mVmNumber = null;
7522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
76767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //***** Instance Variables
77767a662ecde33c3979bf02b793d392aca0403162Wink Saville    CdmaCallTracker mCT;
78767a662ecde33c3979bf02b793d392aca0403162Wink Saville    CdmaSMSDispatcher mSMS;
79767a662ecde33c3979bf02b793d392aca0403162Wink Saville    CdmaServiceStateTracker mSST;
80767a662ecde33c3979bf02b793d392aca0403162Wink Saville    CdmaDataConnectionTracker mDataConnection;
81767a662ecde33c3979bf02b793d392aca0403162Wink Saville    RuimFileHandler mRuimFileHandler;
82767a662ecde33c3979bf02b793d392aca0403162Wink Saville    RuimRecords mRuimRecords;
83767a662ecde33c3979bf02b793d392aca0403162Wink Saville    RuimCard mRuimCard;
84767a662ecde33c3979bf02b793d392aca0403162Wink Saville    MyHandler h;
85767a662ecde33c3979bf02b793d392aca0403162Wink Saville    RuimPhoneBookInterfaceManager mRuimPhoneBookInterfaceManager;
86767a662ecde33c3979bf02b793d392aca0403162Wink Saville    RuimSmsInterfaceManager mRuimSmsInterfaceManager;
87767a662ecde33c3979bf02b793d392aca0403162Wink Saville    PhoneSubInfo mSubInfo;
88e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    EriManager mEriManager;
89767a662ecde33c3979bf02b793d392aca0403162Wink Saville
90e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    // mNvLoadedRegistrants are informed after the EVENT_NV_READY
91e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private RegistrantList mNvLoadedRegistrants = new RegistrantList();
92e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
93e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    // mEriFileLoadedRegistrants are informed after the ERI text has been loaded
94e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    private RegistrantList mEriFileLoadedRegistrants = new RegistrantList();
95dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
96dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    // mECMExitRespRegistrant is informed after the phone has been exited
97dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    //the emergency callback mode
98dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    //keep track of if phone is in emergency callback mode
99dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private boolean mIsPhoneInECMState;
100dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private Registrant mECMExitRespRegistrant;
101767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private String mEsn;
102767a662ecde33c3979bf02b793d392aca0403162Wink Saville    private String mMeid;
1032563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville
104dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    // A runnable which is used to automatically exit from ECM after a period of time.
105dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private Runnable mExitEcmRunnable = new Runnable() {
106dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        public void run() {
107dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            exitEmergencyCallbackMode();
108dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    };
110767a662ecde33c3979bf02b793d392aca0403162Wink Saville
111767a662ecde33c3979bf02b793d392aca0403162Wink Saville    Registrant mPostDialHandler;
112767a662ecde33c3979bf02b793d392aca0403162Wink Saville
113767a662ecde33c3979bf02b793d392aca0403162Wink Saville
114767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //***** Constructors
115767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) {
116767a662ecde33c3979bf02b793d392aca0403162Wink Saville        this(context,ci,notifier, false);
117767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
118767a662ecde33c3979bf02b793d392aca0403162Wink Saville
119767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier,
120767a662ecde33c3979bf02b793d392aca0403162Wink Saville            boolean unitTestMode) {
121767a662ecde33c3979bf02b793d392aca0403162Wink Saville        super(notifier, context, unitTestMode);
122767a662ecde33c3979bf02b793d392aca0403162Wink Saville
123767a662ecde33c3979bf02b793d392aca0403162Wink Saville        h = new MyHandler();
124767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM = ci;
125767a662ecde33c3979bf02b793d392aca0403162Wink Saville
126767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.setPhoneType(RILConstants.CDMA_PHONE);
127767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCT = new CdmaCallTracker(this);
128767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSST = new CdmaServiceStateTracker (this);
129767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSMS = new CdmaSMSDispatcher(this);
130767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mIccFileHandler = new RuimFileHandler(this);
131767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mRuimRecords = new RuimRecords(this);
132767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mDataConnection = new CdmaDataConnectionTracker (this);
133767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mRuimCard = new RuimCard(this);
134767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this);
135767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mRuimSmsInterfaceManager = new RuimSmsInterfaceManager(this);
136767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSubInfo = new PhoneSubInfo(this);
137e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML);
138767a662ecde33c3979bf02b793d392aca0403162Wink Saville
139767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.registerForAvailable(h, EVENT_RADIO_AVAILABLE, null);
140767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mRuimRecords.registerForRecordsLoaded(h, EVENT_RUIM_RECORDS_LOADED, null);
141767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.registerForOffOrNotAvailable(h, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null);
142767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.registerForOn(h, EVENT_RADIO_ON, null);
143767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.setOnSuppServiceNotification(h, EVENT_SSN, null);
144767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.setOnCallRing(h, EVENT_CALL_RING, null);
145767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSST.registerForNetworkAttach(h, EVENT_REGISTERED_TO_NETWORK, null);
146767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.registerForNVReady(h, EVENT_NV_READY, null);
147dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mCM.setEmergencyCallbackMode(h, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null);
148e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
149767a662ecde33c3979bf02b793d392aca0403162Wink Saville
150767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //Change the system setting
1519bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh        SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE,
1529bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh                new Integer(RILConstants.CDMA_PHONE).toString());
153dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
15422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        // This is needed to handle phone process crashes
15522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mIsPhoneInECMState = inEcm.equals("true");
157ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause
158ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        // Notify voicemails.
159ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        notifier.notifyMessageWaitingChanged(this);
160767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
161767a662ecde33c3979bf02b793d392aca0403162Wink Saville
162767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void dispose() {
163767a662ecde33c3979bf02b793d392aca0403162Wink Saville        synchronized(PhoneProxy.lockForRadioTechnologyChange) {
164767a662ecde33c3979bf02b793d392aca0403162Wink Saville
165767a662ecde33c3979bf02b793d392aca0403162Wink Saville            //Unregister from all former registered events
166767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mRuimRecords.unregisterForRecordsLoaded(h); //EVENT_RUIM_RECORDS_LOADED
167767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.unregisterForAvailable(h); //EVENT_RADIO_AVAILABLE
168767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.unregisterForOffOrNotAvailable(h); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE
169767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.unregisterForOn(h); //EVENT_RADIO_ON
170767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.unregisterForNVReady(h); //EVENT_NV_READY
171767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mSST.unregisterForNetworkAttach(h); //EVENT_REGISTERED_TO_NETWORK
172767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.unSetOnSuppServiceNotification(h);
173767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.unSetOnCallRing(h);
174dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
175767a662ecde33c3979bf02b793d392aca0403162Wink Saville
176767a662ecde33c3979bf02b793d392aca0403162Wink Saville            //Force all referenced classes to unregister their former registered events
177767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCT.dispose();
178767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mDataConnection.dispose();
179767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mSST.dispose();
180767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mSMS.dispose();
181767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mIccFileHandler.dispose(); // instance of RuimFileHandler
182767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mRuimRecords.dispose();
183767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mRuimCard.dispose();
184767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mRuimPhoneBookInterfaceManager.dispose();
185767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mRuimSmsInterfaceManager.dispose();
186767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mSubInfo.dispose();
187e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            mEriManager.dispose();
188767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
189767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
190767a662ecde33c3979bf02b793d392aca0403162Wink Saville
191767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void removeReferences() {
192767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mRuimPhoneBookInterfaceManager = null;
193767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mRuimSmsInterfaceManager = null;
194767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mSMS = null;
195767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mSubInfo = null;
196767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mRuimRecords = null;
197767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mIccFileHandler = null;
198767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mRuimCard = null;
199767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mDataConnection = null;
200767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mCT = null;
201767a662ecde33c3979bf02b793d392aca0403162Wink Saville            this.mSST = null;
202e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            this.mEriManager = null;
203767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
204767a662ecde33c3979bf02b793d392aca0403162Wink Saville
205767a662ecde33c3979bf02b793d392aca0403162Wink Saville    protected void finalize() {
206767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if(LOCAL_DEBUG) Log.d(LOG_TAG, "CDMAPhone finalized");
207767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
208767a662ecde33c3979bf02b793d392aca0403162Wink Saville
209767a662ecde33c3979bf02b793d392aca0403162Wink Saville
210767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //***** Overridden from Phone
211767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public ServiceState getServiceState() {
212767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mSST.ss;
213767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
214767a662ecde33c3979bf02b793d392aca0403162Wink Saville
215767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public Phone.State
216767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getState() {
217767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mCT.state;
218767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
219767a662ecde33c3979bf02b793d392aca0403162Wink Saville
220767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String
221767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getPhoneName() {
222767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return "CDMA";
223767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
224767a662ecde33c3979bf02b793d392aca0403162Wink Saville
225767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean canTransfer() {
226767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "canTransfer: not possible in CDMA");
227767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return false;
228767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
229767a662ecde33c3979bf02b793d392aca0403162Wink Saville
230767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public CdmaCall
231767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getRingingCall() {
232767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mCT.ringingCall;
233767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
234767a662ecde33c3979bf02b793d392aca0403162Wink Saville
235767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setMute(boolean muted) {
236767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCT.setMute(muted);
237767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
238767a662ecde33c3979bf02b793d392aca0403162Wink Saville
239767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean getMute() {
240767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mCT.getMute();
241767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
242767a662ecde33c3979bf02b793d392aca0403162Wink Saville
243767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void conference() throws CallStateException {
244767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // three way calls in CDMA will be handled by feature codes
245767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "conference: not possible in CDMA");
246767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
247767a662ecde33c3979bf02b793d392aca0403162Wink Saville
248767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) {
249767a662ecde33c3979bf02b793d392aca0403162Wink Saville        this.mCM.setPreferredVoicePrivacy(enable, onComplete);
250767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
251767a662ecde33c3979bf02b793d392aca0403162Wink Saville
252767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getEnhancedVoicePrivacy(Message onComplete) {
253767a662ecde33c3979bf02b793d392aca0403162Wink Saville        this.mCM.getPreferredVoicePrivacy(onComplete);
254767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
255767a662ecde33c3979bf02b793d392aca0403162Wink Saville
256767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void clearDisconnected() {
257767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCT.clearDisconnected();
258767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
259767a662ecde33c3979bf02b793d392aca0403162Wink Saville
260767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public DataActivityState getDataActivityState() {
261767a662ecde33c3979bf02b793d392aca0403162Wink Saville        DataActivityState ret = DataActivityState.NONE;
262767a662ecde33c3979bf02b793d392aca0403162Wink Saville
263f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        if (mSST.getCurrentCdmaDataConnectionState() == ServiceState.STATE_IN_SERVICE) {
264767a662ecde33c3979bf02b793d392aca0403162Wink Saville
265767a662ecde33c3979bf02b793d392aca0403162Wink Saville            switch (mDataConnection.getActivity()) {
266767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case DATAIN:
267767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ret = DataActivityState.DATAIN;
268767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
269767a662ecde33c3979bf02b793d392aca0403162Wink Saville
270767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case DATAOUT:
271767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ret = DataActivityState.DATAOUT;
272767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
273767a662ecde33c3979bf02b793d392aca0403162Wink Saville
274767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case DATAINANDOUT:
275767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ret = DataActivityState.DATAINANDOUT;
276767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
277e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
278e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                case DORMANT:
279e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                    ret = DataActivityState.DORMANT;
280e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
281767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
282767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
283767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return ret;
284767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
285767a662ecde33c3979bf02b793d392aca0403162Wink Saville
286767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /*package*/ void
287767a662ecde33c3979bf02b793d392aca0403162Wink Saville    notifySignalStrength() {
288767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mNotifier.notifySignalStrength(this);
289767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
290767a662ecde33c3979bf02b793d392aca0403162Wink Saville
291767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public Connection
292767a662ecde33c3979bf02b793d392aca0403162Wink Saville    dial (String dialString) throws CallStateException {
293767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // Need to make sure dialString gets parsed properly
294767a662ecde33c3979bf02b793d392aca0403162Wink Saville        String newDialString = PhoneNumberUtils.stripSeparators(dialString);
295767a662ecde33c3979bf02b793d392aca0403162Wink Saville
296d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville        if (!mCT.foregroundCall.isIdle()) {
297d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville            FeatureCode fc = FeatureCode.newFromDialString(newDialString, this);
298d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville            if (fc != null) {
299d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville                //mMmiRegistrants.notifyRegistrants(new AsyncResult(null, fc, null));
300d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville                fc.processCode();
30122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                return null;
302767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
303767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
30422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        return mCT.dial(newDialString);
305767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
306767a662ecde33c3979bf02b793d392aca0403162Wink Saville
307e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public SignalStrength getSignalStrength() {
308e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        return mSST.mSignalStrength;
309767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
310767a662ecde33c3979bf02b793d392aca0403162Wink Saville
311767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean
312767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getMessageWaitingIndicator() {
313ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        return (getVoiceMessageCount() > 0);
314767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
315767a662ecde33c3979bf02b793d392aca0403162Wink Saville
316767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public List<? extends MmiCode>
317767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getPendingMmiCodes() {
318767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method getPendingMmiCodes is NOT supported in CDMA!");
319767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return null;
320767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
321767a662ecde33c3979bf02b793d392aca0403162Wink Saville
322767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void registerForSuppServiceNotification(
323767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Handler h, int what, Object obj) {
324767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method registerForSuppServiceNotification is NOT supported in CDMA!");
325767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
326767a662ecde33c3979bf02b793d392aca0403162Wink Saville
327767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public CdmaCall getBackgroundCall() {
328767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mCT.backgroundCall;
329767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
330767a662ecde33c3979bf02b793d392aca0403162Wink Saville
331767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getGateway(String apnType) {
332767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.getGateway();
333767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
334767a662ecde33c3979bf02b793d392aca0403162Wink Saville
335767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean handleInCallMmiCommands(String dialString) {
336767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method handleInCallMmiCommands is NOT supported in CDMA!");
337767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return false;
338767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
339767a662ecde33c3979bf02b793d392aca0403162Wink Saville
340767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public int enableApnType(String type) {
341767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // This request is mainly used to enable MMS APN
342767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // In CDMA there is no need to enable/disable a different APN for MMS
343767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.d(LOG_TAG, "Request to enableApnType("+type+")");
344767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (TextUtils.equals(type, Phone.APN_TYPE_MMS)) {
345767a662ecde33c3979bf02b793d392aca0403162Wink Saville            return Phone.APN_ALREADY_ACTIVE;
346767a662ecde33c3979bf02b793d392aca0403162Wink Saville        } else {
347767a662ecde33c3979bf02b793d392aca0403162Wink Saville            return Phone.APN_REQUEST_FAILED;
348767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
349767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
350767a662ecde33c3979bf02b793d392aca0403162Wink Saville
351767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public int disableApnType(String type) {
352767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // This request is mainly used to disable MMS APN
353767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // In CDMA there is no need to enable/disable a different APN for MMS
354767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.d(LOG_TAG, "Request to disableApnType("+type+")");
355767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (TextUtils.equals(type, Phone.APN_TYPE_MMS)) {
356767a662ecde33c3979bf02b793d392aca0403162Wink Saville            return Phone.APN_REQUEST_STARTED;
357767a662ecde33c3979bf02b793d392aca0403162Wink Saville        } else {
358767a662ecde33c3979bf02b793d392aca0403162Wink Saville            return Phone.APN_REQUEST_FAILED;
359767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
360767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
361767a662ecde33c3979bf02b793d392aca0403162Wink Saville
362767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getActiveApn() {
363767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.d(LOG_TAG, "Request to getActiveApn()");
364767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return null;
365767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
366767a662ecde33c3979bf02b793d392aca0403162Wink Saville
367767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
368767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setNetworkSelectionModeAutomatic(Message response) {
369767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method setNetworkSelectionModeAutomatic is NOT supported in CDMA!");
370767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
371767a662ecde33c3979bf02b793d392aca0403162Wink Saville
372767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void unregisterForSuppServiceNotification(Handler h) {
373767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method unregisterForSuppServiceNotification is NOT supported in CDMA!");
374767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
375767a662ecde33c3979bf02b793d392aca0403162Wink Saville
376767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
377767a662ecde33c3979bf02b793d392aca0403162Wink Saville    acceptCall() throws CallStateException {
378767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCT.acceptCall();
379767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
380767a662ecde33c3979bf02b793d392aca0403162Wink Saville
381767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
382767a662ecde33c3979bf02b793d392aca0403162Wink Saville    rejectCall() throws CallStateException {
383767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCT.rejectCall();
384767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
385767a662ecde33c3979bf02b793d392aca0403162Wink Saville
386767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
387767a662ecde33c3979bf02b793d392aca0403162Wink Saville    switchHoldingAndActive() throws CallStateException {
388767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCT.switchWaitingOrHoldingAndActive();
389767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
390767a662ecde33c3979bf02b793d392aca0403162Wink Saville
391767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getLine1Number() {
392f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        return mSST.getMdnNumber();
393767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
394767a662ecde33c3979bf02b793d392aca0403162Wink Saville
39522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    public String getCdmaPrlVersion(){
396daccacb865947c00f277f1823333e2fbf91e652aWink Saville        return mSST.getPrlVersion();
39722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    }
39822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
399019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang    public String getCdmaMin() {
400f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        return mSST.getCdmaMin();
401e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
402e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
403767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getCallWaiting(Message onComplete) {
404767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete);
405767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
406767a662ecde33c3979bf02b793d392aca0403162Wink Saville
407767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
408767a662ecde33c3979bf02b793d392aca0403162Wink Saville    setRadioPower(boolean power) {
409767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSST.setRadioPower(power);
410767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
411767a662ecde33c3979bf02b793d392aca0403162Wink Saville
412767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getEsn() {
413767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mEsn;
414767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
415767a662ecde33c3979bf02b793d392aca0403162Wink Saville
416767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getMeid() {
417767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mMeid;
418767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
419767a662ecde33c3979bf02b793d392aca0403162Wink Saville
420767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //returns MEID in CDMA
421767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getDeviceId() {
422767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return getMeid();
423767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
424767a662ecde33c3979bf02b793d392aca0403162Wink Saville
425767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getDeviceSvn() {
426767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.d(LOG_TAG, "getDeviceSvn(): return 0");
427767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return "0";
428767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
429767a662ecde33c3979bf02b793d392aca0403162Wink Saville
430767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getSubscriberId() {
43122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        // Subscriber ID is the combination of MCC+MNC+MIN as CDMA IMSI
43222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        // TODO(Moto): Replace with call to mRuimRecords.getIMSI_M() when implemented.
433019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang        if ((getServiceState().getOperatorNumeric() != null) && (getCdmaMin() != null)) {
434019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang            return (getServiceState().getOperatorNumeric() + getCdmaMin());
43522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        } else {
43622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            return null;
43722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        }
438767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
439767a662ecde33c3979bf02b793d392aca0403162Wink Saville
440767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean canConference() {
441767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "canConference: not possible in CDMA");
442767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return false;
443767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
444767a662ecde33c3979bf02b793d392aca0403162Wink Saville
445767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getInterfaceName(String apnType) {
446767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.getInterfaceName();
447767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
448767a662ecde33c3979bf02b793d392aca0403162Wink Saville
449767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public CellLocation getCellLocation() {
450767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mSST.cellLoc;
451767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
452767a662ecde33c3979bf02b793d392aca0403162Wink Saville
453767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean disableDataConnectivity() {
454767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.setDataEnabled(false);
455767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
456767a662ecde33c3979bf02b793d392aca0403162Wink Saville
457767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public CdmaCall getForegroundCall() {
458767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mCT.foregroundCall;
459767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
460767a662ecde33c3979bf02b793d392aca0403162Wink Saville
461767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
462767a662ecde33c3979bf02b793d392aca0403162Wink Saville    selectNetworkManually(com.android.internal.telephony.gsm.NetworkInfo network,
463767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Message response) {
464767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "selectNetworkManually: not possible in CDMA");
465767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
466767a662ecde33c3979bf02b793d392aca0403162Wink Saville
467767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setOnPostDialCharacter(Handler h, int what, Object obj) {
468dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mPostDialHandler = new Registrant(h, what, obj);
469767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
470767a662ecde33c3979bf02b793d392aca0403162Wink Saville
471767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean handlePinMmi(String dialString) {
472767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method handlePinMmi is NOT supported in CDMA!");
473767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return false;
474767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
475767a662ecde33c3979bf02b793d392aca0403162Wink Saville
476767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean isDataConnectivityPossible() {
477767a662ecde33c3979bf02b793d392aca0403162Wink Saville        boolean noData = mDataConnection.getDataEnabled() &&
478767a662ecde33c3979bf02b793d392aca0403162Wink Saville                getDataConnectionState() == DataState.DISCONNECTED;
479767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return !noData && getIccCard().getState() == IccCard.State.READY &&
480767a662ecde33c3979bf02b793d392aca0403162Wink Saville                getServiceState().getState() == ServiceState.STATE_IN_SERVICE &&
481767a662ecde33c3979bf02b793d392aca0403162Wink Saville                (mDataConnection.getDataOnRoamingEnabled() || !getServiceState().getRoaming());
482767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
483767a662ecde33c3979bf02b793d392aca0403162Wink Saville
484767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setLine1Number(String alphaTag, String number, Message onComplete) {
485767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "setLine1Number: not possible in CDMA");
486767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
487767a662ecde33c3979bf02b793d392aca0403162Wink Saville
488767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String[] getDnsServers(String apnType) {
489767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.getDnsServers();
490767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
491767a662ecde33c3979bf02b793d392aca0403162Wink Saville
492767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public IccCard getIccCard() {
493767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mRuimCard;
494767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
495767a662ecde33c3979bf02b793d392aca0403162Wink Saville
496767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getIccSerialNumber() {
497767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mRuimRecords.iccid;
498767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
499767a662ecde33c3979bf02b793d392aca0403162Wink Saville
500767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setCallWaiting(boolean enable, Message onComplete) {
501767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "method setCallWaiting is NOT supported in CDMA!");
502767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
503767a662ecde33c3979bf02b793d392aca0403162Wink Saville
504767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void updateServiceLocation(Message response) {
505767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSST.getLacAndCid(response);
506767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
507767a662ecde33c3979bf02b793d392aca0403162Wink Saville
508767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setDataRoamingEnabled(boolean enable) {
509767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mDataConnection.setDataOnRoamingEnabled(enable);
510767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
511767a662ecde33c3979bf02b793d392aca0403162Wink Saville
512dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) {
513dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mCM.registerForCdmaOtaProvision(h, what, obj);
514dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
515dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
516dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void unregisterForCdmaOtaStatusChange(Handler h) {
517dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mCM.unregisterForCdmaOtaProvision(h);
518dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
519dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
520dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void setOnEcbModeExitResponse(Handler h, int what, Object obj) {
521dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mECMExitRespRegistrant = new Registrant (h, what, obj);
522dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
523dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
524dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void unsetOnEcbModeExitResponse(Handler h) {
525dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mECMExitRespRegistrant.clear();
526dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
527dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
528dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void registerForCallWaiting(Handler h, int what, Object obj) {
52922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        mCT.registerForCallWaiting(h, what, obj);
530dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
531dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
532dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void unregisterForCallWaiting(Handler h) {
53322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        mCT.unregisterForCallWaiting(h);
534dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
535dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
536767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getIpAddress(String apnType) {
537767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.getIpAddress();
538767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
539767a662ecde33c3979bf02b793d392aca0403162Wink Saville
540767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
541767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getNeighboringCids(Message response) {
54290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink        /*
54390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         * This is currently not implemented.  At least as of June
54490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         * 2009, there is no neighbor cell information available for
54590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         * CDMA because some party is resisting making this
54690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         * information readily available.  Consequently, calling this
54790cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         * function can have no useful effect.  This situation may
54890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         * (and hopefully will) change in the future.
54990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink         */
55090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink        if (response != null) {
55190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink            CommandException ce = new CommandException(
55290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink                    CommandException.Error.REQUEST_NOT_SUPPORTED);
55390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink            AsyncResult.forMessage(response).exception = ce;
55490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink            response.sendToTarget();
55590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink        }
556767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
557767a662ecde33c3979bf02b793d392aca0403162Wink Saville
558767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public DataState getDataConnectionState() {
559767a662ecde33c3979bf02b793d392aca0403162Wink Saville        DataState ret = DataState.DISCONNECTED;
560767a662ecde33c3979bf02b793d392aca0403162Wink Saville
561767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if ((SystemProperties.get("adb.connected", "").length() > 0)
562767a662ecde33c3979bf02b793d392aca0403162Wink Saville                && (SystemProperties.get("android.net.use-adb-networking", "")
563767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        .length() > 0)) {
564767a662ecde33c3979bf02b793d392aca0403162Wink Saville            // We're connected to an ADB host and we have USB networking
565767a662ecde33c3979bf02b793d392aca0403162Wink Saville            // turned on. No matter what the radio state is,
566767a662ecde33c3979bf02b793d392aca0403162Wink Saville            // we report data connected
567767a662ecde33c3979bf02b793d392aca0403162Wink Saville
568767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ret = DataState.CONNECTED;
56944038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville        } else if (mSST == null) {
570e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville             // Radio Technology Change is ongoning, dispose() and removeReferences() have
571e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville             // already been called
57244038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville
573e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville             ret = DataState.DISCONNECTED;
574f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        } else if (mSST.getCurrentCdmaDataConnectionState() != ServiceState.STATE_IN_SERVICE) {
575767a662ecde33c3979bf02b793d392aca0403162Wink Saville            // If we're out of service, open TCP sockets may still work
576767a662ecde33c3979bf02b793d392aca0403162Wink Saville            // but no data will flow
577767a662ecde33c3979bf02b793d392aca0403162Wink Saville            ret = DataState.DISCONNECTED;
578767a662ecde33c3979bf02b793d392aca0403162Wink Saville        } else {
579767a662ecde33c3979bf02b793d392aca0403162Wink Saville            switch (mDataConnection.getState()) {
580767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case FAILED:
581767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case IDLE:
582767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ret = DataState.DISCONNECTED;
583767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
584767a662ecde33c3979bf02b793d392aca0403162Wink Saville
585767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case CONNECTED:
586767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case DISCONNECTING:
587767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    if ( mCT.state != Phone.State.IDLE
588767a662ecde33c3979bf02b793d392aca0403162Wink Saville                            && !mSST.isConcurrentVoiceAndData()) {
589767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        ret = DataState.SUSPENDED;
590767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    } else {
591767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        ret = DataState.CONNECTED;
592767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    }
593767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
594767a662ecde33c3979bf02b793d392aca0403162Wink Saville
595767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case INITING:
596767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case CONNECTING:
597767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case SCANNING:
598767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ret = DataState.CONNECTING;
599767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
600767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
601767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
602767a662ecde33c3979bf02b793d392aca0403162Wink Saville
603767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return ret;
604767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
605767a662ecde33c3979bf02b793d392aca0403162Wink Saville
606767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void sendUssdResponse(String ussdMessge) {
607767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "sendUssdResponse: not possible in CDMA");
608767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
609767a662ecde33c3979bf02b793d392aca0403162Wink Saville
610767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void sendDtmf(char c) {
611767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (!PhoneNumberUtils.is12Key(c)) {
612767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Log.e(LOG_TAG,
613767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    "sendDtmf called with invalid character '" + c + "'");
614767a662ecde33c3979bf02b793d392aca0403162Wink Saville        } else {
615767a662ecde33c3979bf02b793d392aca0403162Wink Saville            if (mCT.state ==  Phone.State.OFFHOOK) {
616767a662ecde33c3979bf02b793d392aca0403162Wink Saville                mCM.sendDtmf(c, null);
617767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
618767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
619767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
620767a662ecde33c3979bf02b793d392aca0403162Wink Saville
621767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void startDtmf(char c) {
622767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (!PhoneNumberUtils.is12Key(c)) {
623767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Log.e(LOG_TAG,
624767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    "startDtmf called with invalid character '" + c + "'");
625767a662ecde33c3979bf02b793d392aca0403162Wink Saville        } else {
626767a662ecde33c3979bf02b793d392aca0403162Wink Saville            mCM.startDtmf(c, null);
627767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
628767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
629767a662ecde33c3979bf02b793d392aca0403162Wink Saville
630767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void stopDtmf() {
631767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.stopDtmf(null);
632767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
633767a662ecde33c3979bf02b793d392aca0403162Wink Saville
634dafa22a3ef9328c72319aeec605f6a6d20e46080jsh    public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) {
635e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        boolean check = true;
636e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        for (int itr = 0;itr < dtmfString.length(); itr++) {
637e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) {
638e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                Log.e(LOG_TAG,
639e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                        "sendDtmf called with invalid character '" + dtmfString.charAt(itr)+ "'");
640e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                check = false;
641e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                break;
642e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville            }
643e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
644e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        if ((mCT.state ==  Phone.State.OFFHOOK)&&(check)) {
645dafa22a3ef9328c72319aeec605f6a6d20e46080jsh            mCM.sendBurstDtmf(dtmfString, on, off, onComplete);
646e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        }
647e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     }
648e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
649767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getAvailableNetworks(Message response) {
650767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA");
651767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
652767a662ecde33c3979bf02b793d392aca0403162Wink Saville
653767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String[] getActiveApnTypes() {
654767a662ecde33c3979bf02b793d392aca0403162Wink Saville        String[] result;
655767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.d(LOG_TAG, "Request to getActiveApn()");
656767a662ecde33c3979bf02b793d392aca0403162Wink Saville        result = new String[1];
657767a662ecde33c3979bf02b793d392aca0403162Wink Saville        result[0] = Phone.APN_TYPE_DEFAULT;
658767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return result;
659767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
660767a662ecde33c3979bf02b793d392aca0403162Wink Saville
661767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) {
662dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        Log.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA");
663767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
664767a662ecde33c3979bf02b793d392aca0403162Wink Saville
665767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void enableLocationUpdates() {
666767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSST.enableLocationUpdates();
667767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
668767a662ecde33c3979bf02b793d392aca0403162Wink Saville
669767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
670767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * @deprecated
671767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
672767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getPdpContextList(Message response) {
673767a662ecde33c3979bf02b793d392aca0403162Wink Saville        getDataCallList(response);
674767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
675767a662ecde33c3979bf02b793d392aca0403162Wink Saville
676767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getDataCallList(Message response) {
677767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mCM.getDataCallList(response);
678767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
679767a662ecde33c3979bf02b793d392aca0403162Wink Saville
680767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean getDataRoamingEnabled() {
681767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.getDataOnRoamingEnabled();
682767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
683767a662ecde33c3979bf02b793d392aca0403162Wink Saville
684767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public List<DataConnection> getCurrentDataConnectionList () {
685767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mDataConnection.getAllDataConnections();
686767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
687767a662ecde33c3979bf02b793d392aca0403162Wink Saville
688767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setVoiceMailNumber(String alphaTag,
689767a662ecde33c3979bf02b793d392aca0403162Wink Saville                                   String voiceMailNumber,
690767a662ecde33c3979bf02b793d392aca0403162Wink Saville                                   Message onComplete) {
691ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        Message resp;
692ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        mVmNumber = voiceMailNumber;
693ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        resp = h.obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete);
694ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        mRuimRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp);
695767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
696767a662ecde33c3979bf02b793d392aca0403162Wink Saville
697767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getVoiceMailNumber() {
698ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        String number = null;
699ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
700ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        // TODO(Moto): The default value of voicemail number should be read from a system property
701ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        number = sp.getString(VM_NUMBER_CDMA, "*86");
702ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        return number;
703dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
704dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
705dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /* Returns Number of Voicemails
706dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * @hide
707dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
708ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    public int getVoiceMessageCount() {
709ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        int voicemailCount =  mRuimRecords.getVoiceMessageCount();
710ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        // If mRuimRecords.getVoiceMessageCount returns zero, then there is possibility
711ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        // that phone was power cycled and would have lost the voicemail count.
712ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        // So get the count from preferences.
713ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        if (voicemailCount == 0) {
714ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
715ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause            voicemailCount = sp.getInt(VM_COUNT_CDMA, 0);
716ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        }
717ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        return voicemailCount;
718767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
719767a662ecde33c3979bf02b793d392aca0403162Wink Saville
720767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getVoiceMailAlphaTag() {
721767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // TODO: Where can we get this value has to be clarified with QC.
722767a662ecde33c3979bf02b793d392aca0403162Wink Saville        String ret = "";//TODO: Remove = "", if we know where to get this value.
723767a662ecde33c3979bf02b793d392aca0403162Wink Saville
724767a662ecde33c3979bf02b793d392aca0403162Wink Saville        //ret = mSIMRecords.getVoiceMailAlphaTag();
725767a662ecde33c3979bf02b793d392aca0403162Wink Saville
726767a662ecde33c3979bf02b793d392aca0403162Wink Saville        if (ret == null || ret.length() == 0) {
727767a662ecde33c3979bf02b793d392aca0403162Wink Saville            return mContext.getText(
728767a662ecde33c3979bf02b793d392aca0403162Wink Saville                com.android.internal.R.string.defaultVoiceMailAlphaTag).toString();
729767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
730767a662ecde33c3979bf02b793d392aca0403162Wink Saville
731767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return ret;
732767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
733767a662ecde33c3979bf02b793d392aca0403162Wink Saville
734767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean enableDataConnectivity() {
735dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
736dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        // block data activities when phone is in emergency callback mode
737dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (mIsPhoneInECMState) {
738dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            Intent intent = new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS);
739dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            ActivityManagerNative.broadcastStickyIntent(intent, null);
740dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            return false;
741dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        } else {
742dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            return mDataConnection.setDataEnabled(true);
743dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
744767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
745767a662ecde33c3979bf02b793d392aca0403162Wink Saville
746767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void disableLocationUpdates() {
747767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mSST.disableLocationUpdates();
748767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
749767a662ecde33c3979bf02b793d392aca0403162Wink Saville
750767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean getIccRecordsLoaded() {
751767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mRuimRecords.getRecordsLoaded();
752767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
753767a662ecde33c3979bf02b793d392aca0403162Wink Saville
754767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) {
755767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "getCallForwardingOption: not possible in CDMA");
756767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
757767a662ecde33c3979bf02b793d392aca0403162Wink Saville
758767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void setCallForwardingOption(int commandInterfaceCFAction,
759767a662ecde33c3979bf02b793d392aca0403162Wink Saville            int commandInterfaceCFReason,
760767a662ecde33c3979bf02b793d392aca0403162Wink Saville            String dialingNumber,
761767a662ecde33c3979bf02b793d392aca0403162Wink Saville            int timerSeconds,
762767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Message onComplete) {
763767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "setCallForwardingOption: not possible in CDMA");
764767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
765767a662ecde33c3979bf02b793d392aca0403162Wink Saville
766767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void
767767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getOutgoingCallerIdDisplay(Message onComplete) {
768767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "getOutgoingCallerIdDisplay: not possible in CDMA");
769767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
770767a662ecde33c3979bf02b793d392aca0403162Wink Saville
771767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public boolean
772767a662ecde33c3979bf02b793d392aca0403162Wink Saville    getCallForwardingIndicator() {
773767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "getCallForwardingIndicator: not possible in CDMA");
774767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return false;
775767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
776767a662ecde33c3979bf02b793d392aca0403162Wink Saville
777767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void explicitCallTransfer() {
778767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "explicitCallTransfer: not possible in CDMA");
779767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
780767a662ecde33c3979bf02b793d392aca0403162Wink Saville
781767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public String getLine1AlphaTag() {
782767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Log.e(LOG_TAG, "getLine1AlphaTag: not possible in CDMA");
783767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return null;
784767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
785767a662ecde33c3979bf02b793d392aca0403162Wink Saville
786dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville   /**
7871c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh     * Notify any interested party of a Phone state change  {@link Phone.State}
788767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
789767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /*package*/ void notifyPhoneStateChanged() {
790767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mNotifier.notifyPhoneState(this);
791767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
792767a662ecde33c3979bf02b793d392aca0403162Wink Saville
793767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
7941c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh     * Notify registrants of a change in the call state. This notifies changes in {@link Call.State}
7951c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh     * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged.
796767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
7971c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh    /*package*/ void notifyPreciseCallStateChanged() {
798767a662ecde33c3979bf02b793d392aca0403162Wink Saville        /* we'd love it if this was package-scoped*/
7991c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh        super.notifyPreciseCallStateChangedP();
800767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
801767a662ecde33c3979bf02b793d392aca0403162Wink Saville
802767a662ecde33c3979bf02b793d392aca0403162Wink Saville     void notifyServiceStateChanged(ServiceState ss) {
803767a662ecde33c3979bf02b793d392aca0403162Wink Saville         super.notifyServiceStateChangedP(ss);
804767a662ecde33c3979bf02b793d392aca0403162Wink Saville     }
805767a662ecde33c3979bf02b793d392aca0403162Wink Saville
806767a662ecde33c3979bf02b793d392aca0403162Wink Saville     void notifyLocationChanged() {
807767a662ecde33c3979bf02b793d392aca0403162Wink Saville         mNotifier.notifyCellLocation(this);
808767a662ecde33c3979bf02b793d392aca0403162Wink Saville     }
809767a662ecde33c3979bf02b793d392aca0403162Wink Saville
810767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /*package*/ void notifyNewRingingConnection(Connection c) {
811767a662ecde33c3979bf02b793d392aca0403162Wink Saville        /* we'd love it if this was package-scoped*/
812767a662ecde33c3979bf02b793d392aca0403162Wink Saville        super.notifyNewRingingConnectionP(c);
813767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
814767a662ecde33c3979bf02b793d392aca0403162Wink Saville
815767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
816767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * Notifiy registrants of a RING event.
817767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
818767a662ecde33c3979bf02b793d392aca0403162Wink Saville    void notifyIncomingRing() {
819767a662ecde33c3979bf02b793d392aca0403162Wink Saville        AsyncResult ar = new AsyncResult(null, this, null);
820767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mIncomingRingRegistrants.notifyRegistrants(ar);
821767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
822767a662ecde33c3979bf02b793d392aca0403162Wink Saville
823767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /*package*/ void notifyDisconnect(Connection cn) {
824767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mDisconnectRegistrants.notifyResult(cn);
825767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
826767a662ecde33c3979bf02b793d392aca0403162Wink Saville
827767a662ecde33c3979bf02b793d392aca0403162Wink Saville    void notifyUnknownConnection() {
828767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mUnknownConnectionRegistrants.notifyResult(this);
829767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
830767a662ecde33c3979bf02b793d392aca0403162Wink Saville
831dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    void sendEmergencyCallbackModeChange(){
832dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        //Send an Intent
833dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
834dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        intent.putExtra(PHONE_IN_ECM_STATE, mIsPhoneInECMState);
835dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        ActivityManagerNative.broadcastStickyIntent(intent,null);
836dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
837dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
838767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /*package*/ void
839767a662ecde33c3979bf02b793d392aca0403162Wink Saville    updateMessageWaitingIndicator(boolean mwi) {
840767a662ecde33c3979bf02b793d392aca0403162Wink Saville        // this also calls notifyMessageWaitingIndicator()
841767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mRuimRecords.setVoiceMessageWaiting(1, mwi ? -1 : 0);
842767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
843767a662ecde33c3979bf02b793d392aca0403162Wink Saville
844ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    /* This function is overloaded to send number of voicemails instead of sending true/false */
845ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    /*package*/ void
846ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    updateMessageWaitingIndicator(int mwi) {
847ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        mRuimRecords.setVoiceMessageWaiting(1, mwi);
848d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville    }
849767a662ecde33c3979bf02b793d392aca0403162Wink Saville
850767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
851767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * Removes the given FC from the pending list and notifies
852767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * registrants that it is complete.
853767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * @param fc FC that is done
854767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
855d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville    /*package*/ void onFeatureCodeDone(FeatureCode fc) {
856767a662ecde33c3979bf02b793d392aca0403162Wink Saville        /* Only notify complete if it's on the pending list.
857767a662ecde33c3979bf02b793d392aca0403162Wink Saville         * Otherwise, it's already been handled (eg, previously canceled).
858767a662ecde33c3979bf02b793d392aca0403162Wink Saville         * The exception is cancellation of an incoming USSD-REQUEST, which is
859767a662ecde33c3979bf02b793d392aca0403162Wink Saville         * not on the list.
860767a662ecde33c3979bf02b793d392aca0403162Wink Saville         */
861d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville         mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, fc, null));
862767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
863767a662ecde33c3979bf02b793d392aca0403162Wink Saville
864dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
865dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    @Override
866dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void exitEmergencyCallbackMode() {
867dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        // Send a message which will invoke handleExitEmergencyCallbackMode
868dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mCM.exitEmergencyCallbackMode(h.obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE));
869dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
870dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
871dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private void handleEnterEmergencyCallbackMode(Message msg) {
872dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        Log.d(LOG_TAG, "Event EVENT_EMERGENCY_CALLBACK_MODE Received");
873dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        // if phone is not in ECM mode, and it's changed to ECM mode
874dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (mIsPhoneInECMState == false) {
875dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            mIsPhoneInECMState = true;
876dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // notify change
877dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            sendEmergencyCallbackModeChange();
87822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "true");
8792563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville
880dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // Post this runnable so we will automatically exit
881dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // if no one invokes exitEmergencyCallbackMode() directly.
88222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            long delayInMillis = SystemProperties.getLong(
88322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE);
884dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            h.postDelayed(mExitEcmRunnable, delayInMillis);
885dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
886dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
887dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
888dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private void handleExitEmergencyCallbackMode(Message msg) {
889dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        Log.d(LOG_TAG, "Event EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE Received");
890dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        AsyncResult ar = (AsyncResult)msg.obj;
891dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
892dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        // Remove pending exit ECM runnable, if any
893dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        h.removeCallbacks(mExitEcmRunnable);
894dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
895dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (mECMExitRespRegistrant != null) {
896dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            mECMExitRespRegistrant.notifyRegistrant(ar);
897dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
898dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        // if exiting ecm success
899dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (ar.exception == null) {
900dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            if (mIsPhoneInECMState) {
901dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                mIsPhoneInECMState = false;
90222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false");
903dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            }
904dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // send an Intent
905dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            sendEmergencyCallbackModeChange();
906dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
907dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
908dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
909767a662ecde33c3979bf02b793d392aca0403162Wink Saville    //***** Inner Classes
910767a662ecde33c3979bf02b793d392aca0403162Wink Saville    class MyHandler extends Handler {
911767a662ecde33c3979bf02b793d392aca0403162Wink Saville        MyHandler() {
912767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
913767a662ecde33c3979bf02b793d392aca0403162Wink Saville
914767a662ecde33c3979bf02b793d392aca0403162Wink Saville        MyHandler(Looper l) {
915767a662ecde33c3979bf02b793d392aca0403162Wink Saville            super(l);
916767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
917767a662ecde33c3979bf02b793d392aca0403162Wink Saville
918dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        @Override
919767a662ecde33c3979bf02b793d392aca0403162Wink Saville        public void handleMessage(Message msg) {
920767a662ecde33c3979bf02b793d392aca0403162Wink Saville            AsyncResult ar;
921767a662ecde33c3979bf02b793d392aca0403162Wink Saville            Message     onComplete;
922767a662ecde33c3979bf02b793d392aca0403162Wink Saville
923767a662ecde33c3979bf02b793d392aca0403162Wink Saville            switch(msg.what) {
924767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_RADIO_AVAILABLE: {
925767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mCM.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE));
926767a662ecde33c3979bf02b793d392aca0403162Wink Saville
927767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mCM.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE));
928767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
929767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
930767a662ecde33c3979bf02b793d392aca0403162Wink Saville
931767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_GET_BASEBAND_VERSION_DONE:{
932767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ar = (AsyncResult)msg.obj;
933767a662ecde33c3979bf02b793d392aca0403162Wink Saville
934767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    if (ar.exception != null) {
935767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        break;
936767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    }
937767a662ecde33c3979bf02b793d392aca0403162Wink Saville
938767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    if (LOCAL_DEBUG) Log.d(LOG_TAG, "Baseband version: " + ar.result);
93922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    setSystemProperty(TelephonyProperties.PROPERTY_BASEBAND_VERSION, (String)ar.result);
940767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
941767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
942767a662ecde33c3979bf02b793d392aca0403162Wink Saville
943767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_GET_DEVICE_IDENTITY_DONE:{
944767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    ar = (AsyncResult)msg.obj;
945767a662ecde33c3979bf02b793d392aca0403162Wink Saville
946767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    if (ar.exception != null) {
947767a662ecde33c3979bf02b793d392aca0403162Wink Saville                        break;
948767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    }
949767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    String[] respId = (String[])ar.result;
950767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mEsn  =  respId[2];
951767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mMeid =  respId[3];
952767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
953767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
954767a662ecde33c3979bf02b793d392aca0403162Wink Saville
955dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{
956dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    handleEnterEmergencyCallbackMode(msg);
957dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                }
958dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                break;
959dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
960dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                case  EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{
961dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    handleExitEmergencyCallbackMode(msg);
962e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                }
963dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                break;
964dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
965767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_RUIM_RECORDS_LOADED:{
966767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received");
967767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
968767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
969767a662ecde33c3979bf02b793d392aca0403162Wink Saville
970767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:{
971767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_RADIO_OFF_OR_NOT_AVAILABLE Received");
972767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
973767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
974767a662ecde33c3979bf02b793d392aca0403162Wink Saville
975767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_RADIO_ON:{
976767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_RADIO_ON Received");
977767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
978767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
979767a662ecde33c3979bf02b793d392aca0403162Wink Saville
980767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_SSN:{
981767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_SSN Received");
982767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
983767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
984767a662ecde33c3979bf02b793d392aca0403162Wink Saville
985767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_CALL_RING:{
986767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_CALL_RING Received");
987767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
988767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
989767a662ecde33c3979bf02b793d392aca0403162Wink Saville
990767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_REGISTERED_TO_NETWORK:{
991767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_REGISTERED_TO_NETWORK Received");
992767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
993767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
994767a662ecde33c3979bf02b793d392aca0403162Wink Saville
995767a662ecde33c3979bf02b793d392aca0403162Wink Saville                case EVENT_NV_READY:{
996767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    Log.d(LOG_TAG, "Event EVENT_NV_READY Received");
997767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    //Inform the Service State Tracker
998e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                    mEriManager.loadEriFile();
999767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    mNvLoadedRegistrants.notifyRegistrants();
1000e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                    if(mEriManager.isEriFileLoaded()) {
1001e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                        // when the ERI file is loaded
1002e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                        Log.d(LOG_TAG, "ERI read, notify registrants");
1003e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                        mEriFileLoadedRegistrants.notifyRegistrants();
1004e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville                    }
100522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                    setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE,"false");
1006767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
1007767a662ecde33c3979bf02b793d392aca0403162Wink Saville                break;
1008767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1009ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                case EVENT_SET_VM_NUMBER_DONE:{
1010ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                    ar = (AsyncResult)msg.obj;
1011ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                    if (IccException.class.isInstance(ar.exception)) {
1012ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                        storeVoiceMailNumber(mVmNumber);
1013ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                        ar.exception = null;
1014ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                    }
1015ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                    onComplete = (Message) ar.userObj;
1016ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                    if (onComplete != null) {
1017ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                        AsyncResult.forMessage(onComplete, ar.result, ar.exception);
1018ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                        onComplete.sendToTarget();
1019ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                    }
1020ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause                }
1021ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause
1022767a662ecde33c3979bf02b793d392aca0403162Wink Saville                default:{
1023767a662ecde33c3979bf02b793d392aca0403162Wink Saville                    throw new RuntimeException("unexpected event not handled");
1024767a662ecde33c3979bf02b793d392aca0403162Wink Saville                }
1025767a662ecde33c3979bf02b793d392aca0403162Wink Saville            }
1026767a662ecde33c3979bf02b793d392aca0403162Wink Saville        }
1027767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1028767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1029dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1030dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Retrieves the PhoneSubInfo of the CDMAPhone
1031dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1032dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public PhoneSubInfo getPhoneSubInfo() {
1033767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return mSubInfo;
1034dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1035767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1036dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1037dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Retrieves the IccSmsInterfaceManager of the CDMAPhone
1038dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1039dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public IccSmsInterfaceManager getIccSmsInterfaceManager() {
1040dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return mRuimSmsInterfaceManager;
1041dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1042767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1043dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1044dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone
1045dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1046dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() {
1047dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return mRuimPhoneBookInterfaceManager;
1048dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1049767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1050767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void registerForNvLoaded(Handler h, int what, Object obj) {
1051767a662ecde33c3979bf02b793d392aca0403162Wink Saville        Registrant r = new Registrant (h, what, obj);
1052767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mNvLoadedRegistrants.add(r);
1053767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1054767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1055767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public void unregisterForNvLoaded(Handler h) {
1056767a662ecde33c3979bf02b793d392aca0403162Wink Saville        mNvLoadedRegistrants.remove(h);
1057767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
1058767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1059e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void registerForEriFileLoaded(Handler h, int what, Object obj) {
1060e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        Registrant r = new Registrant (h, what, obj);
1061e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEriFileLoadedRegistrants.add(r);
1062e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
1063e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1064e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public void unregisterForEriFileLoaded(Handler h) {
1065e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        mEriFileLoadedRegistrants.remove(h);
1066e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
1067e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1068dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    // override for allowing access from other classes of this package
1069dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1070dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * {@inheritDoc}
1071dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1072dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public final void setSystemProperty(String property, String value) {
1073dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        super.setSystemProperty(property, value);
1074dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1075767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1076dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1077dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * {@inheritDoc}
1078dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1079dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public Handler getHandler() {
1080dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return h;
1081dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1082767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1083dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1084dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * {@inheritDoc}
1085dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1086dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public IccFileHandler getIccFileHandler() {
1087dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return this.mIccFileHandler;
1088dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1089767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1090dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1091dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Set the TTY mode of the CDMAPhone
1092dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1093dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void setTTYMode(int ttyMode, Message onComplete) {
1094dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        this.mCM.setTTYMode(ttyMode, onComplete);
1095dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1096767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1097dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1098dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Queries the TTY mode of the CDMAPhone
1099dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1100dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void queryTTYMode(Message onComplete) {
1101dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        this.mCM.queryTTYMode(onComplete);
1102dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1103e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1104dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1105dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Activate or deactivate cell broadcast SMS.
1106dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     *
1107dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * @param activate 0 = activate, 1 = deactivate
1108dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * @param response Callback message is empty on completion
1109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1110dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void activateCellBroadcastSms(int activate, Message response) {
1111dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mSMS.activateCellBroadcastSms(activate, response);
1112dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1113767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1114dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1115dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Query the current configuration of cdma cell broadcast SMS.
1116dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     *
1117dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * @param response Callback message is empty on completion
1118dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1119dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void getCellBroadcastSmsConfig(Message response) {
1120dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mSMS.getCellBroadcastSmsConfig(response);
1121dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1122767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1123dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    /**
1124dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * Configure cdma cell broadcast SMS.
1125dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     *
1126dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     * @param response Callback message is empty on completion
1127dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     */
1128dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) {
1129dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        mSMS.setCellBroadcastConfig(configValuesArray, response);
1130dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public static final String IS683A_FEATURE_CODE = "*228" ;
1133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4 ;
1134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2 ;
1135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    public static final int IS683A_SYS_SEL_CODE_OFFSET = 4;
1136dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1137dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_800MHZ_A_BAND = 0;
1138dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_800MHZ_B_BAND = 1;
1139dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_1900MHZ_A_BLOCK = 2;
1140dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_1900MHZ_B_BLOCK = 3;
1141dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_1900MHZ_C_BLOCK = 4;
1142dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_1900MHZ_D_BLOCK = 5;
1143dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_1900MHZ_E_BLOCK = 6;
1144dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private static final int IS683_CONST_1900MHZ_F_BLOCK = 7;
1145dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1146dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    private boolean isIs683OtaSpDialStr(String dialStr) {
1147dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        int sysSelCodeInt;
1148dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        boolean isOtaspDialString = false;
1149dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        int dialStrLen = dialStr.length();
1150dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1151dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) {
1152dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            if (dialStr.equals(IS683A_FEATURE_CODE)) {
1153dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                isOtaspDialString = true;
1154dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            }
1155dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        } else if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 0,
1156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                                          IS683A_FEATURE_CODE_NUM_DIGITS) == true)
1157dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    && (dialStrLen >=
1158dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                        (IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS))) {
1159dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            StringBuilder sb = new StringBuilder(dialStr);
1160dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            // Separate the System Selection Code into its own string
1161dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            char[] sysSel = new char[2];
1162dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            sb.delete(0, IS683A_SYS_SEL_CODE_OFFSET);
1163dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            sb.getChars(0, IS683A_SYS_SEL_CODE_NUM_DIGITS, sysSel, 0);
1164dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1165dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            if ((PhoneNumberUtils.isISODigit(sysSel[0]))
1166dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    && (PhoneNumberUtils.isISODigit(sysSel[1]))) {
1167dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                String sysSelCode = new String(sysSel);
1168dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                sysSelCodeInt = Integer.parseInt((String)sysSelCode);
1169dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                switch (sysSelCodeInt) {
1170dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_800MHZ_A_BAND:
1171dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_800MHZ_B_BAND:
1172dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_1900MHZ_A_BLOCK:
1173dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_1900MHZ_B_BLOCK:
1174dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_1900MHZ_C_BLOCK:
1175dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_1900MHZ_D_BLOCK:
1176dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_1900MHZ_E_BLOCK:
1177dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    case IS683_CONST_1900MHZ_F_BLOCK:
1178dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                        isOtaspDialString = true;
1179dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                        break;
1180dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville
1181dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                    default:
1182dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                        break;
1183dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville                }
1184dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville            }
1185dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        }
1186dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville        return isOtaspDialString;
1187dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    }
1188767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1189767a662ecde33c3979bf02b793d392aca0403162Wink Saville     /**
1190dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville      * isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier
1191dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville      * OTASP dial string.
1192767a662ecde33c3979bf02b793d392aca0403162Wink Saville      *
1193dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville      * @param dialStr the number to look up.
1194dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville      * @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string
1195767a662ecde33c3979bf02b793d392aca0403162Wink Saville      */
1196dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville    @Override
1197dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville     public  boolean isOtaSpNumber(String dialStr){
1198dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville         boolean isOtaSpNum = false;
1199dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville         if(dialStr != null){
1200dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville             isOtaSpNum=isIs683OtaSpDialStr(dialStr);
1201dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville             if(isOtaSpNum == false){
1202dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville             //TO DO:Add carrier specific OTASP number detection here.
1203dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville             }
1204dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville         }
1205dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville         return isOtaSpNum;
1206e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     }
1207e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1208e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
1209e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getCdmaEriIconIndex() {
1210e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        int roamInd = getServiceState().getCdmaRoamingIndicator();
1211e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
1212f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        return mEriManager.getCdmaEriIconIndex(roamInd, defRoamInd);
1213e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
1214e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1215e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
1216e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Returns the CDMA ERI icon mode,
1217e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * 0 - ON
1218e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * 1 - FLASHING
1219e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
1220e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
1221e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public int getCdmaEriIconMode() {
1222e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        int roamInd = getServiceState().getCdmaRoamingIndicator();
1223e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
1224f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        return mEriManager.getCdmaEriIconMode(roamInd, defRoamInd);
1225e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
1226e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville
1227e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    /**
1228e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     * Returns the CDMA ERI text,
1229e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville     */
1230e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    @Override
1231e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    public String getCdmaEriText() {
1232e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        int roamInd = getServiceState().getCdmaRoamingIndicator();
1233e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville        int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator();
1234f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville        return mEriManager.getCdmaEriText(roamInd, defRoamInd);
1235e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville    }
1236ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause
1237ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    /**
1238ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause     * Store the voicemail number in preferences
1239ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause     */
1240ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    private void storeVoiceMailNumber(String number) {
1241ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        // Update the preference value of voicemail number
1242ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
1243ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        SharedPreferences.Editor editor = sp.edit();
1244ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        editor.putString(VM_NUMBER_CDMA, number);
1245ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause        editor.commit();
1246ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause    }
1247ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause
1248767a662ecde33c3979bf02b793d392aca0403162Wink Saville}
1249