10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2007 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.SharedPreferences;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkCapabilities;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.wifi.WifiManager;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult;
252cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Savilleimport android.os.Build;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RegistrantList;
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties;
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.preference.PreferenceManager;
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.provider.Settings;
33ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.CellIdentityCdma;
34ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.CellInfo;
35ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.CellInfoCdma;
36ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.Rlog;
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState;
38ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.SignalStrength;
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils;
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.R;
42454b1dfd508844b42eb775e4ab2359be74d3672bWink Savilleimport com.android.internal.telephony.dataconnection.DcTrackerBase;
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.test.SimulatedRadioControl;
44d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
45d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccFileHandler;
46d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRecords;
47d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IsimRecords;
48d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccCardApplication;
49e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccController;
50d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UsimServiceTable;
51ffe6e68213ae3220497188fed814e271b472292aJake Hamby
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor;
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter;
54ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport java.util.ArrayList;
55ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport java.util.List;
560825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicReference;
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (<em>Not for SDK use</em>)
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * A base implementation for the com.android.internal.telephony.Phone interface.
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Note that implementations of Phone.java are expected to be used
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * from a single application thread. This should be the same thread that
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * originally called PhoneFactory to obtain the interface.
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *  {@hide}
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class PhoneBase extends Handler implements Phone {
72cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    private static final String LOG_TAG = "PhoneBase";
73ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Key used to read and write the saved network selection numeric value
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final String NETWORK_SELECTION_KEY = "network_selection_key";
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Key used to read and write the saved network selection operator name
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final String NETWORK_SELECTION_NAME_KEY = "network_selection_name_key";
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Key used to read/write "disable data connection on boot" pref (used for testing)
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final String DATA_DISABLED_ON_BOOT_KEY = "disabled_on_boot_key";
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* Event Constants */
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_RADIO_AVAILABLE             = 1;
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** Supplementary Service Notification received. */
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SSN                         = 2;
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SIM_RECORDS_LOADED          = 3;
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_MMI_DONE                    = 4;
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_RADIO_ON                    = 5;
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_GET_BASEBAND_VERSION_DONE   = 6;
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_USSD                        = 7;
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE  = 8;
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_GET_IMEI_DONE               = 9;
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_GET_IMEISV_DONE             = 10;
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_GET_SIM_STATUS_DONE         = 11;
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_CALL_FORWARD_DONE       = 12;
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_GET_CALL_FORWARD_DONE       = 13;
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_CALL_RING                   = 14;
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_CALL_RING_CONTINUE          = 15;
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Used to intercept the carrier selection calls so that
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // we can save the values.
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_NETWORK_MANUAL_COMPLETE    = 16;
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_NETWORK_AUTOMATIC_COMPLETE = 17;
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_CLIR_COMPLETE              = 18;
1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_REGISTERED_TO_NETWORK          = 19;
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_VM_NUMBER_DONE             = 20;
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Events for CDMA support
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_GET_DEVICE_IDENTITY_DONE       = 21;
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_RUIM_RECORDS_LOADED            = 22;
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_NV_READY                       = 23;
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_ENHANCED_VP                = 24;
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_EMERGENCY_CALLBACK_MODE_ENTER  = 25;
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE = 26;
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 27;
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // other
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected static final int EVENT_SET_NETWORK_AUTOMATIC          = 28;
1181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    protected static final int EVENT_ICC_RECORD_EVENTS              = 29;
1191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    protected static final int EVENT_ICC_CHANGED                    = 30;
1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Key used to read/write current CLIR setting
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final String CLIR_KEY = "clir_key";
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Key used to read/write "disable DNS server check" pref (used for testing)
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public static final String DNS_SERVER_CHECK_DISABLED_KEY = "dns_server_check_disabled_key";
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* Instance Variables */
12822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    public CommandsInterface mCi;
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mDnsCheckDisabled;
130454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville    public DcTrackerBase mDcTracker;
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mDoesRilSendMultipleCallRing;
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mCallRingContinueToken;
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    int mCallRingDelay;
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean mIsTheCurrentActivePhone = true;
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mIsVoiceCapable = true;
136e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka    protected UiccController mUiccController = null;
137e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka    public AtomicReference<IccRecords> mIccRecords = new AtomicReference<IccRecords>();
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public SmsStorageMonitor mSmsStorageMonitor;
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public SmsUsageMonitor mSmsUsageMonitor;
140e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    protected AtomicReference<UiccCardApplication> mUiccApplication =
141e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            new AtomicReference<UiccCardApplication>();
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
143ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private TelephonyTester mTelephonyTester;
144ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private final String mName;
145ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private final String mActionDetached;
146ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    private final String mActionAttached;
147ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
148ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    @Override
149ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public String getPhoneName() {
150ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return mName;
151ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
152ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
153ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    /**
154ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     * Return the ActionDetached string. When this action is received by components
155ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     * they are to simulate detaching from the network.
156ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     *
157ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     * @return com.android.internal.telephony.{mName}.action_detached
158ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     *          {mName} is GSM, CDMA ...
159ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     */
160ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public String getActionDetached() {
161ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return mActionDetached;
162ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
163ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
164ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    /**
165ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     * Return the ActionAttached string. When this action is received by components
166ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     * they are to simulate attaching to the network.
167ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     *
168ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     * @return com.android.internal.telephony.{mName}.action_detached
169ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     *          {mName} is GSM, CDMA ...
170ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville     */
171ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public String getActionAttached() {
172ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        return mActionAttached;
173ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    }
174ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Set a system property, unless we're in unit test mode
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
178ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    public void setSystemProperty(String property, String value) {
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if(getUnitTestMode()) {
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SystemProperties.set(property, value);
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mPreciseCallStateRegistrants
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mNewRingingConnectionRegistrants
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mIncomingRingRegistrants
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mDisconnectRegistrants
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mServiceStateRegistrants
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mMmiCompleteRegistrants
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mMmiRegistrants
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mUnknownConnectionRegistrants
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final RegistrantList mSuppServiceFailedRegistrants
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            = new RegistrantList();
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected Looper mLooper; /* to insure registrants are in correct thread*/
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected final Context mContext;
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * PhoneNotifier is an abstraction for all system-wide
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * state change notification. DefaultPhoneNotifier is
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * used here unless running we're inside a unit test.
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected PhoneNotifier mNotifier;
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected SimulatedRadioControl mSimulatedRadioControl;
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    boolean mUnitTestMode;
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Constructs a PhoneBase in normal (non-unit test) mode.
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param notifier An instance of DefaultPhoneNotifier,
232ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     * @param context Context object from hosting application
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * unless unit testing.
234ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     * @param ci the CommandsInterface
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
236ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci) {
237ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        this(name, notifier, context, ci, false);
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Constructs a PhoneBase in normal (non-unit test) mode.
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param notifier An instance of DefaultPhoneNotifier,
244ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     * @param context Context object from hosting application
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * unless unit testing.
246ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     * @param ci is CommandsInterface
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param unitTestMode when true, prevents notifications
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * of state change events
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
250ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville    protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci,
2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean unitTestMode) {
252ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        mName = name;
25322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mNotifier = notifier;
25422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mContext = context;
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mLooper = Looper.myLooper();
25622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi = ci;
257ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        mActionDetached = this.getClass().getPackage().getName() + ".action_detached";
258ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        mActionAttached = this.getClass().getPackage().getName() + ".action_attached";
259ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
2602cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Saville        if (Build.IS_DEBUGGABLE) {
261ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            mTelephonyTester = new TelephonyTester(this);
262ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville        }
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setPropertiesByCarrier();
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        setUnitTestMode(unitTestMode);
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mDnsCheckDisabled = sp.getBoolean(DNS_SERVER_CHECK_DISABLED_KEY, false);
27022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setOnCallRing(this, EVENT_CALL_RING, null);
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /* "Voice capable" means that this device supports circuit-switched
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        * (i.e. voice) phone calls over the telephony network, and is allowed
2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        * to display the in-call UI while a cellular voice call is active.
2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        * This will be false on "data only" devices which can't make voice
2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        * calls and don't support any in-call UI.
2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        */
2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mIsVoiceCapable = mContext.getResources().getBoolean(
2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                com.android.internal.R.bool.config_voice_capable);
2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /**
2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         *  Some RIL's don't always send RIL_UNSOL_CALL_RING so it needs
2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         *  to be generated locally. Ideally all ring tones should be loops
2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * and this wouldn't be necessary. But to minimize changes to upper
2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * layers it is requested that it be generated by lower layers.
2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         *
2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * By default old phones won't have the property set but do generate
2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * the RIL_UNSOL_CALL_RING so the default if there is no property is
2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * true.
2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         */
2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mDoesRilSendMultipleCallRing = SystemProperties.getBoolean(
2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                TelephonyProperties.PROPERTY_RIL_SENDS_MULTIPLE_CALL_RING, true);
293ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing);
2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mCallRingDelay = SystemProperties.getInt(
2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                TelephonyProperties.PROPERTY_CALL_RING_DELAY, 3000);
297ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "mCallRingDelay=" + mCallRingDelay);
2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Initialize device storage and outgoing SMS usage monitors for SMSDispatchers.
3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSmsStorageMonitor = new SmsStorageMonitor(this);
3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSmsUsageMonitor = new SmsUsageMonitor(context);
302e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        mUiccController = UiccController.getInstance();
303e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null);
3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
306cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dispose() {
3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(PhoneProxy.lockForRadioTechnologyChange) {
30922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mCi.unSetOnCallRing(this);
3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Must cleanup all connectionS and needs to use sendMessage!
311454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville            mDcTracker.cleanUpAllConnections(null);
3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mIsTheCurrentActivePhone = false;
3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            // Dispose the SMS usage and storage monitors
3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSmsStorageMonitor.dispose();
3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mSmsUsageMonitor.dispose();
316e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka            mUiccController.unregisterForIccChanged(this);
317ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville
318ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            if (mTelephonyTester != null) {
319ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville                mTelephonyTester.dispose();
320ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville            }
3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
324cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void removeReferences() {
3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSmsStorageMonitor = null;
3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSmsUsageMonitor = null;
328e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        mIccRecords.set(null);
329e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        mUiccApplication.set(null);
330454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        mDcTracker = null;
331e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        mUiccController = null;
3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * When overridden the derived class needs to call
3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * super.handleMessage(msg) so this method has a
3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a chance to process the message.
3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param msg
3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void handleMessage(Message msg) {
3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AsyncResult ar;
3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3455e2000b856a7959609e8f15148a3584ec372f865Wink Saville        if (!mIsTheCurrentActivePhone) {
3465e2000b856a7959609e8f15148a3584ec372f865Wink Saville            Rlog.e(LOG_TAG, "Received message " + msg +
3475e2000b856a7959609e8f15148a3584ec372f865Wink Saville                    "[" + msg.what + "] while being destroyed. Ignoring.");
3485e2000b856a7959609e8f15148a3584ec372f865Wink Saville            return;
3495e2000b856a7959609e8f15148a3584ec372f865Wink Saville        }
3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        switch(msg.what) {
3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case EVENT_CALL_RING:
352ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.d(LOG_TAG, "Event EVENT_CALL_RING Received state=" + getState());
3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                ar = (AsyncResult)msg.obj;
3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (ar.exception == null) {
3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    PhoneConstants.State state = getState();
3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    if ((!mDoesRilSendMultipleCallRing)
3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                            && ((state == PhoneConstants.State.RINGING) ||
3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                                    (state == PhoneConstants.State.IDLE))) {
3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        mCallRingContinueToken += 1;
3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        sendIncomingCallRingNotification(mCallRingContinueToken);
3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    } else {
3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                        notifyIncomingRing();
3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    }
3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            case EVENT_CALL_RING_CONTINUE:
368ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville                Rlog.d(LOG_TAG, "Event EVENT_CALL_RING_CONTINUE Received stat=" + getState());
3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (getState() == PhoneConstants.State.RINGING) {
3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    sendIncomingCallRingNotification(msg.arg1);
3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;
3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
374e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka            case EVENT_ICC_CHANGED:
375e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka                onUpdateIccAvailability();
376e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka                break;
377e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka
3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            default:
3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                throw new RuntimeException("unexpected event not handled");
3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
384cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Context getContext() {
3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return mContext;
3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
389e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka    // Will be called when icc changed
390e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka    protected abstract void onUpdateIccAvailability();
391e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka
3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Disables the DNS check (i.e., allows "0.0.0.0").
3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Useful for lab testing environment.
3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param b true disables the check, false enables.
3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
397cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void disableDnsCheck(boolean b) {
3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mDnsCheckDisabled = b;
4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SharedPreferences.Editor editor = sp.edit();
4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        editor.putBoolean(DNS_SERVER_CHECK_DISABLED_KEY, b);
4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        editor.apply();
4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns true if the DNS check is currently disabled.
4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
409cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isDnsCheckDisabled() {
4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return mDnsCheckDisabled;
4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
415cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForPreciseCallStateChanged(Handler h, int what, Object obj) {
4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreciseCallStateRegistrants.addUnique(h, what, obj);
4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
423cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForPreciseCallStateChanged(Handler h) {
4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreciseCallStateRegistrants.remove(h);
4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Subclasses of Phone probably want to replace this with a
4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * version scoped to their packages
4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void notifyPreciseCallStateChangedP() {
4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AsyncResult ar = new AsyncResult(null, this, null);
4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mPreciseCallStateRegistrants.notifyRegistrants(ar);
4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
438cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForUnknownConnection(Handler h, int what, Object obj) {
4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mUnknownConnectionRegistrants.addUnique(h, what, obj);
4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
446cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForUnknownConnection(Handler h) {
4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mUnknownConnectionRegistrants.remove(h);
4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
452cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForNewRingingConnection(
4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Handler h, int what, Object obj) {
4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNewRingingConnectionRegistrants.addUnique(h, what, obj);
4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
461cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForNewRingingConnection(Handler h) {
4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNewRingingConnectionRegistrants.remove(h);
4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
467cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){
46922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForInCallVoicePrivacyOn(h,what,obj);
4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
473cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForInCallVoicePrivacyOn(Handler h){
47522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForInCallVoicePrivacyOn(h);
4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
479cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){
48122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForInCallVoicePrivacyOff(h,what,obj);
4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
485cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForInCallVoicePrivacyOff(Handler h){
48722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForInCallVoicePrivacyOff(h);
4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
491cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForIncomingRing(
4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Handler h, int what, Object obj) {
4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mIncomingRingRegistrants.addUnique(h, what, obj);
4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
500cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForIncomingRing(Handler h) {
5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mIncomingRingRegistrants.remove(h);
5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
506cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForDisconnect(Handler h, int what, Object obj) {
5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mDisconnectRegistrants.addUnique(h, what, obj);
5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
514cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForDisconnect(Handler h) {
5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mDisconnectRegistrants.remove(h);
5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
520cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForSuppServiceFailed(Handler h, int what, Object obj) {
5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSuppServiceFailedRegistrants.addUnique(h, what, obj);
5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
528cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForSuppServiceFailed(Handler h) {
5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mSuppServiceFailedRegistrants.remove(h);
5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
534cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForMmiInitiate(Handler h, int what, Object obj) {
5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mMmiRegistrants.addUnique(h, what, obj);
5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
542cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForMmiInitiate(Handler h) {
5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mMmiRegistrants.remove(h);
5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
548cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForMmiComplete(Handler h, int what, Object obj) {
5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mMmiCompleteRegistrants.addUnique(h, what, obj);
5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
556cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForMmiComplete(Handler h) {
5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mMmiCompleteRegistrants.remove(h);
5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Method to retrieve the saved operator id from the Shared Preferences
5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private String getSavedNetworkSelection() {
5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // open the shared preferences and search with our key.
5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return sp.getString(NETWORK_SELECTION_KEY, "");
5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Method to restore the previously saved operator id, or reset to
5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * automatic selection, all depending upon the value in the shared
5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * preferences.
5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void restoreSavedNetworkSelection(Message response) {
5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // retrieve the operator id
5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String networkSelection = getSavedNetworkSelection();
5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // set to auto if the id is empty, otherwise select the network.
5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (TextUtils.isEmpty(networkSelection)) {
58322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mCi.setNetworkSelectionModeAutomatic(response);
5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
58522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mCi.setNetworkSelectionModeManual(networkSelection, response);
5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
590cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setUnitTestMode(boolean f) {
5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mUnitTestMode = f;
5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
596cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean getUnitTestMode() {
5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return mUnitTestMode;
5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * To be invoked when a voice call Connection disconnects.
6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Subclasses of Phone probably want to replace this with a
6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * version scoped to their packages
6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void notifyDisconnectP(Connection cn) {
6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AsyncResult ar = new AsyncResult(null, cn, null);
6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mDisconnectRegistrants.notifyRegistrants(ar);
6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
613cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForServiceStateChanged(
6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Handler h, int what, Object obj) {
6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        checkCorrectThread(h);
6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mServiceStateRegistrants.add(h, what, obj);
6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
622cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForServiceStateChanged(Handler h) {
6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mServiceStateRegistrants.remove(h);
6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
628cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForRingbackTone(Handler h, int what, Object obj) {
63022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForRingbackTone(h,what,obj);
6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
634cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForRingbackTone(Handler h) {
63622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForRingbackTone(h);
6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
640cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForResendIncallMute(Handler h, int what, Object obj) {
64222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForResendIncallMute(h,what,obj);
6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
646cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForResendIncallMute(Handler h) {
64822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForResendIncallMute(h);
6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
651cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setEchoSuppressionEnabled(boolean enabled) {
6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // no need for regular phone
6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Subclasses of Phone probably want to replace this with a
6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * version scoped to their packages
6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void notifyServiceStateChangedP(ServiceState ss) {
6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AsyncResult ar = new AsyncResult(null, ss, null);
6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mServiceStateRegistrants.notifyRegistrants(ar);
6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyServiceState(this);
6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Inherited documentation suffices.
668cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public SimulatedRadioControl getSimulatedRadioControl() {
6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return mSimulatedRadioControl;
6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Verifies the current thread is the same as the thread originally
6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * used in the initialization of this instance. Throws RuntimeException
6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * if not.
6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @exception RuntimeException if the current thread is not
6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the thread that originally obtained this PhoneBase instance.
6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void checkCorrectThread(Handler h) {
6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (h.getLooper() != mLooper) {
6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            throw new RuntimeException(
6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    "com.android.internal.telephony.Phone must be used from within one thread");
6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Set the properties by matching the carrier string in
6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * a string-array resource
6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void setPropertiesByCarrier() {
6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String carrier = SystemProperties.get("ro.carrier");
6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (null == carrier || 0 == carrier.length() || "unknown".equals(carrier)) {
6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        CharSequence[] carrierLocales = mContext.
7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                getResources().getTextArray(R.array.carrier_properties);
7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0; i < carrierLocales.length; i+=3) {
7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String c = carrierLocales[i].toString();
7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (carrier.equals(c)) {
7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String l = carrierLocales[i+1].toString();
7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String language = l.substring(0, 2);
7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                String country = "";
7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                if (l.length() >=5) {
7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    country = l.substring(3, 5);
7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                }
7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                MccTable.setSystemLocale(mContext, language, country);
713e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt
714e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                if (!country.isEmpty()) {
715e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                    try {
716e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                        Settings.Global.getInt(mContext.getContentResolver(),
717e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                                Settings.Global.WIFI_COUNTRY_CODE);
718e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                    } catch (Settings.SettingNotFoundException e) {
719e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                        // note this is not persisting
720e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                        WifiManager wM = (WifiManager)
721e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                                mContext.getSystemService(Context.WIFI_SERVICE);
722e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                        wM.setCountryCode(country, false);
723e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                    }
724e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt                }
7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                return;
7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Get state
7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
733cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract PhoneConstants.State getState();
7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieves the IccFileHandler of the Phone instance
7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public IccFileHandler getIccFileHandler(){
740e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        UiccCardApplication uiccApplication = mUiccApplication.get();
741e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (uiccApplication == null) return null;
742e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return uiccApplication.getIccFileHandler();
7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /*
7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Retrieves the Handler of the Phone instance
7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Handler getHandler() {
7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return this;
7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
752b54cd09892e0676d719e6df00e60c77b663f993cWink Saville    @Override
753b54cd09892e0676d719e6df00e60c77b663f993cWink Saville    public void updatePhoneObject(int voiceRadioTech) {
754b54cd09892e0676d719e6df00e60c77b663f993cWink Saville        // Only the PhoneProxy can update the phone object.
755b54cd09892e0676d719e6df00e60c77b663f993cWink Saville        PhoneFactory.getDefaultPhone().updatePhoneObject(voiceRadioTech);
756b54cd09892e0676d719e6df00e60c77b663f993cWink Saville    }
757b54cd09892e0676d719e6df00e60c77b663f993cWink Saville
7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    * Retrieves the ServiceStateTracker of the phone instance.
7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    */
7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public ServiceStateTracker getServiceStateTracker() {
7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    * Get call tracker
7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    */
7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public CallTracker getCallTracker() {
7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
772ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka    public AppType getCurrentUiccAppType() {
773ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka        UiccCardApplication currentApp = mUiccApplication.get();
774ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka        if (currentApp != null) {
775ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka            return currentApp.getType();
776ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka        }
777ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka        return AppType.APPTYPE_UNKNOWN;
778ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka    }
779ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka
7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public IccCard getIccCard() {
782e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        return null;
783e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        //throw new Exception("getIccCard Shouldn't be called from PhoneBase");
7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getIccSerialNumber() {
788e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        IccRecords r = mIccRecords.get();
7893c6bdec23af42aba1168303cdefc20525b0ec1d0Ajay Nambi        return (r != null) ? r.getIccId() : null;
7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean getIccRecordsLoaded() {
794e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        IccRecords r = mIccRecords.get();
795e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        return (r != null) ? r.getRecordsLoaded() : false;
7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
798ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    /**
799ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     * @return all available cell information or null if none.
800ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     */
801ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    @Override
802ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    public List<CellInfo> getAllCellInfo() {
803ffe6e68213ae3220497188fed814e271b472292aJake Hamby        List<CellInfo> cellInfoList = getServiceStateTracker().getAllCellInfo();
804ffe6e68213ae3220497188fed814e271b472292aJake Hamby        return privatizeCellInfoList(cellInfoList);
805ffe6e68213ae3220497188fed814e271b472292aJake Hamby    }
806ffe6e68213ae3220497188fed814e271b472292aJake Hamby
807ffe6e68213ae3220497188fed814e271b472292aJake Hamby    /**
808ffe6e68213ae3220497188fed814e271b472292aJake Hamby     * Clear CDMA base station lat/long values if location setting is disabled.
809ffe6e68213ae3220497188fed814e271b472292aJake Hamby     * @param cellInfoList the original cell info list from the RIL
810ffe6e68213ae3220497188fed814e271b472292aJake Hamby     * @return the original list with CDMA lat/long cleared if necessary
811ffe6e68213ae3220497188fed814e271b472292aJake Hamby     */
812ffe6e68213ae3220497188fed814e271b472292aJake Hamby    private List<CellInfo> privatizeCellInfoList(List<CellInfo> cellInfoList) {
813ffe6e68213ae3220497188fed814e271b472292aJake Hamby        int mode = Settings.Secure.getInt(getContext().getContentResolver(),
814ffe6e68213ae3220497188fed814e271b472292aJake Hamby                Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
815ffe6e68213ae3220497188fed814e271b472292aJake Hamby        if (mode == Settings.Secure.LOCATION_MODE_OFF) {
816ffe6e68213ae3220497188fed814e271b472292aJake Hamby            ArrayList<CellInfo> privateCellInfoList = new ArrayList<CellInfo>(cellInfoList.size());
817ffe6e68213ae3220497188fed814e271b472292aJake Hamby            // clear lat/lon values for location privacy
818ffe6e68213ae3220497188fed814e271b472292aJake Hamby            for (CellInfo c : cellInfoList) {
819ffe6e68213ae3220497188fed814e271b472292aJake Hamby                if (c instanceof CellInfoCdma) {
820ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    CellInfoCdma cellInfoCdma = (CellInfoCdma) c;
821ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    CellIdentityCdma cellIdentity = cellInfoCdma.getCellIdentity();
822ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    CellIdentityCdma maskedCellIdentity = new CellIdentityCdma(
823ffe6e68213ae3220497188fed814e271b472292aJake Hamby                            cellIdentity.getNetworkId(),
824ffe6e68213ae3220497188fed814e271b472292aJake Hamby                            cellIdentity.getSystemId(),
825ffe6e68213ae3220497188fed814e271b472292aJake Hamby                            cellIdentity.getBasestationId(),
826ffe6e68213ae3220497188fed814e271b472292aJake Hamby                            Integer.MAX_VALUE, Integer.MAX_VALUE);
827ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    CellInfoCdma privateCellInfoCdma = new CellInfoCdma(cellInfoCdma);
828ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    privateCellInfoCdma.setCellIdentity(maskedCellIdentity);
829ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    privateCellInfoList.add(privateCellInfoCdma);
830ffe6e68213ae3220497188fed814e271b472292aJake Hamby                } else {
831ffe6e68213ae3220497188fed814e271b472292aJake Hamby                    privateCellInfoList.add(c);
832ffe6e68213ae3220497188fed814e271b472292aJake Hamby                }
833ffe6e68213ae3220497188fed814e271b472292aJake Hamby            }
834ffe6e68213ae3220497188fed814e271b472292aJake Hamby            cellInfoList = privateCellInfoList;
835ffe6e68213ae3220497188fed814e271b472292aJake Hamby        }
836ffe6e68213ae3220497188fed814e271b472292aJake Hamby        return cellInfoList;
837ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    }
838ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville
8395fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    /**
8405fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     * {@inheritDoc}
8415fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville     */
8425fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    @Override
8435fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    public void setCellInfoListRate(int rateInMillis) {
8445fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville        mCi.setCellInfoListRate(rateInMillis, null);
8455fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville    }
8465fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville
8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean getMessageWaitingIndicator() {
849e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        IccRecords r = mIccRecords.get();
850e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        return (r != null) ? r.getVoiceMessageWaiting() : false;
8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean getCallForwardingIndicator() {
855e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        IccRecords r = mIccRecords.get();
856e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        return (r != null) ? r.getVoiceCallForwardingFlag() : false;
8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Query the status of the CDMA roaming preference
8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
862cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryCdmaRoamingPreference(Message response) {
86422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.queryCdmaRoamingPreference(response);
8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
868ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     * Get the signal strength
869ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville     */
870ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    @Override
871ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    public SignalStrength getSignalStrength() {
872ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville        ServiceStateTracker sst = getServiceStateTracker();
873ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville        if (sst == null) {
874ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville            return new SignalStrength();
875ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville        } else {
876ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville            return sst.getSignalStrength();
877ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville        }
878ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    }
879ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville
880ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    /**
8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Set the status of the CDMA roaming preference
8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
883cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
88522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setCdmaRoamingPreference(cdmaRoamingType, response);
8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Set the status of the CDMA subscription mode
8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
891cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setCdmaSubscription(int cdmaSubscriptionType, Message response) {
89322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setCdmaSubscriptionSource(cdmaSubscriptionType, response);
8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  Set the preferred Network Type: Global, CDMA only or GSM/UMTS only
8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
899cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setPreferredNetworkType(int networkType, Message response) {
90122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setPreferredNetworkType(networkType, response);
9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
904cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getPreferredNetworkType(Message response) {
90622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.getPreferredNetworkType(response);
9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
909cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getSmscAddress(Message result) {
91122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.getSmscAddress(result);
9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
914cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setSmscAddress(String address, Message result) {
91622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setSmscAddress(address, result);
9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
919cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setTTYMode(int ttyMode, Message onComplete) {
92122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setTTYMode(ttyMode, onComplete);
9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
924cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryTTYMode(Message onComplete) {
92622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.queryTTYMode(onComplete);
9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
929cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) {
9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("enableEnhancedVoicePrivacy");
9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
935cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void getEnhancedVoicePrivacy(Message onComplete) {
9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("getEnhancedVoicePrivacy");
9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
941cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setBandMode(int bandMode, Message response) {
94322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.setBandMode(bandMode, response);
9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
946cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void queryAvailableBandMode(Message response) {
94822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.queryAvailableBandMode(response);
9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
951cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestRaw(byte[] data, Message response) {
95322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.invokeOemRilRequestRaw(data, response);
9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
956cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void invokeOemRilRequestStrings(String[] strings, Message response) {
95822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.invokeOemRilRequestStrings(strings, response);
9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
961cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataActivity() {
9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyDataActivity(this);
9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyMessageWaitingIndicator() {
9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Do not notify voice mail waiting if device doesn't support voice
9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!mIsVoiceCapable)
9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function is added to send the notification to DefaultPhoneNotifier.
9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyMessageWaitingChanged(this);
9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnection(String reason, String apnType,
9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PhoneConstants.DataState state) {
9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyDataConnection(this, reason, apnType, state);
9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnection(String reason, String apnType) {
9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType));
9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnection(String reason) {
9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        String types[] = getActiveApnTypes();
9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (String apnType : types) {
9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType));
9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyOtaspChanged(int otaspMode) {
9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyOtaspChanged(this, otaspMode);
9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
995ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    public void notifySignalStrength() {
996ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville        mNotifier.notifySignalStrength(this);
997ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    }
998ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville
999ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    public void notifyCellInfo(List<CellInfo> cellInfo) {
1000ffe6e68213ae3220497188fed814e271b472292aJake Hamby        mNotifier.notifyCellInfo(this, privatizeCellInfoList(cellInfo));
1001ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville    }
1002ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville
10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if a mobile originating emergency call is active
10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isInEmergencyCall() {
10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if we are in the emergency call back mode. This is a period where
10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * the phone should be using as little power as possible and be ready to receive an
10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * incoming call from the emergency operator.
10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isInEcm() {
10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1019cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract int getPhoneType();
10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** @hide */
1023cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getVoiceMessageCount(){
10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return 0;
10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the CDMA ERI icon index to display
10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1031cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getCdmaEriIconIndex() {
10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("getCdmaEriIconIndex");
10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return -1;
10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the CDMA ERI icon mode,
10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 0 - ON
10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * 1 - FLASHING
10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1042cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getCdmaEriIconMode() {
10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("getCdmaEriIconMode");
10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return -1;
10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the CDMA ERI text,
10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1051cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getCdmaEriText() {
10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("getCdmaEriText");
10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return "GSM nw, no ERI";
10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1057cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getCdmaMin() {
10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("getCdmaMin");
10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1064cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isMinInfoReady() {
10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("isMinInfoReady");
10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1071cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getCdmaPrlVersion(){
10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //  This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("getCdmaPrlVersion");
10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1078cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) {
10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("sendBurstDtmf");
10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1084cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void exitEmergencyCallbackMode() {
10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("exitEmergencyCallbackMode");
10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1090cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) {
10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("registerForCdmaOtaStatusChange");
10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1096cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForCdmaOtaStatusChange(Handler h) {
10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("unregisterForCdmaOtaStatusChange");
11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1102cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) {
11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("registerForSubscriptionInfoReady");
11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1108cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForSubscriptionInfoReady(Handler h) {
11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("unregisterForSubscriptionInfoReady");
11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns true if OTA Service Provisioning needs to be performed.
11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * If not overridden return false.
11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1118cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean needsOtaServiceProvisioning() {
11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Return true if number is an OTASP number.
11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * If not overridden return false.
11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1127cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public  boolean isOtaSpNumber(String dialStr) {
11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1132cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForCallWaiting(Handler h, int what, Object obj){
11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("registerForCallWaiting");
11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1138cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForCallWaiting(Handler h){
11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("unregisterForCallWaiting");
11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1144cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForEcmTimerReset(Handler h, int what, Object obj) {
11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("registerForEcmTimerReset");
11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1150cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForEcmTimerReset(Handler h) {
11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedCdmaMethodCall("unregisterForEcmTimerReset");
11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1156cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForSignalInfo(Handler h, int what, Object obj) {
115822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForSignalInfo(h, what, obj);
11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1161cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForSignalInfo(Handler h) {
116322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForSignalInfo(h);
11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1166cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForDisplayInfo(Handler h, int what, Object obj) {
116822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForDisplayInfo(h, what, obj);
11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1171cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     @Override
1172cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    public void unregisterForDisplayInfo(Handler h) {
117322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville         mCi.unregisterForDisplayInfo(h);
11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     }
11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1176cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForNumberInfo(Handler h, int what, Object obj) {
117822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForNumberInfo(h, what, obj);
11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1181cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForNumberInfo(Handler h) {
118322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForNumberInfo(h);
11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1186cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForRedirectedNumberInfo(Handler h, int what, Object obj) {
118822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForRedirectedNumberInfo(h, what, obj);
11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1191cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForRedirectedNumberInfo(Handler h) {
119322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForRedirectedNumberInfo(h);
11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1196cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForLineControlInfo(Handler h, int what, Object obj) {
119822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForLineControlInfo( h, what, obj);
11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1201cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForLineControlInfo(Handler h) {
120322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForLineControlInfo(h);
12040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1206cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerFoT53ClirlInfo(Handler h, int what, Object obj) {
120822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerFoT53ClirlInfo(h, what, obj);
12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1211cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForT53ClirInfo(Handler h) {
121322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForT53ClirInfo(h);
12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1216cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void registerForT53AudioControlInfo(Handler h, int what, Object obj) {
121822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.registerForT53AudioControlInfo( h, what, obj);
12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1221cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void unregisterForT53AudioControlInfo(Handler h) {
122322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mCi.unregisterForT53AudioControlInfo(h);
12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1226cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     @Override
1227cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    public void setOnEcbModeExitResponse(Handler h, int what, Object obj){
12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
12290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         logUnexpectedCdmaMethodCall("setOnEcbModeExitResponse");
12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     }
12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1232cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville     @Override
1233cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    public void unsetOnEcbModeExitResponse(Handler h){
12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone.
12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         logUnexpectedCdmaMethodCall("unsetOnEcbModeExitResponse");
12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     }
12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1238cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String[] getActiveApnTypes() {
1240454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return mDcTracker.getActiveApnTypes();
12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1243cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getActiveApnHost(String apnType) {
1245454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return mDcTracker.getActiveApnString(apnType);
12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1248cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public LinkProperties getLinkProperties(String apnType) {
1250454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return mDcTracker.getLinkProperties(apnType);
12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1253cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public LinkCapabilities getLinkCapabilities(String apnType) {
1255454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return mDcTracker.getLinkCapabilities(apnType);
12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1258cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int enableApnType(String type) {
1260454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return mDcTracker.enableApnType(type);
12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1263cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int disableApnType(String type) {
1265454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return mDcTracker.disableApnType(type);
12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1268cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isDataConnectivityPossible() {
12700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return isDataConnectivityPossible(PhoneConstants.APN_TYPE_DEFAULT);
12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1273cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
12740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isDataConnectivityPossible(String apnType) {
1275454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        return ((mDcTracker != null) &&
1276454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville                (mDcTracker.isDataPossible(apnType)));
12770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Notify registrants of a new ringing Connection.
12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Subclasses of Phone probably want to replace this with a
12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * version scoped to their packages
12830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void notifyNewRingingConnectionP(Connection cn) {
12850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!mIsVoiceCapable)
12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AsyncResult ar = new AsyncResult(null, cn, null);
12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNewRingingConnectionRegistrants.notifyRegistrants(ar);
12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Notify registrants of a RING event.
12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void notifyIncomingRing() {
12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (!mIsVoiceCapable)
12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        AsyncResult ar = new AsyncResult(null, this, null);
12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mIncomingRingRegistrants.notifyRegistrants(ar);
12990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Send the incoming call Ring notification if conditions are right.
13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private void sendIncomingCallRingNotification(int token) {
13050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (mIsVoiceCapable && !mDoesRilSendMultipleCallRing &&
13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                (token == mCallRingContinueToken)) {
1307ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.d(LOG_TAG, "Sending notifyIncomingRing");
13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            notifyIncomingRing();
13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            sendMessageDelayed(
13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    obtainMessage(EVENT_CALL_RING_CONTINUE, token, 0), mCallRingDelay);
13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else {
1312ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.d(LOG_TAG, "Ignoring ring notification request,"
13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing
13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " token=" + token
13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " mCallRingContinueToken=" + mCallRingContinueToken
13160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    + " mIsVoiceCapable=" + mIsVoiceCapable);
13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1320cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isCspPlmnEnabled() {
13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class GSMPhone.
13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // Not implemented in CDMAPhone.
13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedGsmMethodCall("isCspPlmnEnabled");
13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return false;
13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1328cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public IsimRecords getIsimRecords() {
1330ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.e(LOG_TAG, "getIsimRecords() is only supported on LTE devices");
13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1334cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void requestIsimAuthentication(String nonce, Message result) {
1336ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.e(LOG_TAG, "requestIsimAuthentication() is only supported on LTE devices");
13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1339cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String getMsisdn() {
13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        logUnexpectedGsmMethodCall("getMsisdn");
13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return null;
13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Common error logger method for unexpected calls to CDMA-only methods.
13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static void logUnexpectedCdmaMethodCall(String name)
13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    {
1350ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " +
13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "called, CDMAPhone inactive.");
13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1354cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public PhoneConstants.DataState getDataConnectionState() {
13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return getDataConnectionState(PhoneConstants.APN_TYPE_DEFAULT);
13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Common error logger method for unexpected calls to GSM/WCDMA-only methods.
13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    private static void logUnexpectedGsmMethodCall(String name) {
1363ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " +
13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                "called, GSMPhone inactive.");
13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Called by SimRecords which is constructed with a PhoneBase instead of a GSMPhone.
13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyCallForwardingIndicator() {
13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // This function should be overridden by the class GSMPhone. Not implemented in CDMAPhone.
1370ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone.");
13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void notifyDataConnectionFailed(String reason, String apnType) {
13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        mNotifier.notifyDataConnectionFailed(this, reason, apnType);
13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * {@inheritDoc}
13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int getLteOnCdmaMode() {
138222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        return mCi.getLteOnCdmaMode();
13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Sets the SIM voice message waiting indicator records.
13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported
13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param countWaiting The number of messages waiting, if known. Use
13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *                     -1 to indicate that an unknown number of
13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *                      messages are waiting
13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setVoiceMessageWaiting(int line, int countWaiting) {
1394e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        IccRecords r = mIccRecords.get();
1395e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        if (r != null) {
1396e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka            r.setVoiceMessageWaiting(line, countWaiting);
1397e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        }
13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Gets the USIM service table from the UICC, if present and available.
14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return an interface to the UsimServiceTable record, or null if not available
14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public UsimServiceTable getUsimServiceTable() {
1406e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        IccRecords r = mIccRecords.get();
1407e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        return (r != null) ? r.getUsimServiceTable() : null;
14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println("PhoneBase:");
141222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        pw.println(" mCi=" + mCi);
14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mDnsCheckDisabled=" + mDnsCheckDisabled);
1414454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville        pw.println(" mDcTracker=" + mDcTracker);
14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing);
14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mCallRingContinueToken=" + mCallRingContinueToken);
14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mCallRingDelay=" + mCallRingDelay);
14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mIsTheCurrentActivePhone=" + mIsTheCurrentActivePhone);
14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mIsVoiceCapable=" + mIsVoiceCapable);
1420e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka        pw.println(" mIccRecords=" + mIccRecords.get());
1421e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        pw.println(" mUiccApplication=" + mUiccApplication.get());
14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSmsStorageMonitor=" + mSmsStorageMonitor);
14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSmsUsageMonitor=" + mSmsUsageMonitor);
14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.flush();
14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mLooper=" + mLooper);
14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mContext=" + mContext);
14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mNotifier=" + mNotifier);
14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mSimulatedRadioControl=" + mSimulatedRadioControl);
14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" mUnitTestMode=" + mUnitTestMode);
14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" isDnsCheckDisabled()=" + isDnsCheckDisabled());
14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getUnitTestMode()=" + getUnitTestMode());
14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getState()=" + getState());
14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getIccSerialNumber()=" + getIccSerialNumber());
14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getIccRecordsLoaded()=" + getIccRecordsLoaded());
14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getMessageWaitingIndicator()=" + getMessageWaitingIndicator());
14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getCallForwardingIndicator()=" + getCallForwardingIndicator());
14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" isInEmergencyCall()=" + isInEmergencyCall());
14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.flush();
14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" isInEcm()=" + isInEcm());
14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getPhoneName()=" + getPhoneName());
14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getPhoneType()=" + getPhoneType());
14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getVoiceMessageCount()=" + getVoiceMessageCount());
14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" getActiveApnTypes()=" + getActiveApnTypes());
14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" isDataConnectivityPossible()=" + isDataConnectivityPossible());
14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning());
14460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
1448