1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.internal.telephony;
18
19import android.content.Context;
20import android.net.LinkProperties;
21import android.net.NetworkCapabilities;
22import android.os.Bundle;
23import android.os.Handler;
24import android.os.Message;
25import android.telephony.CellInfo;
26import android.telephony.CellLocation;
27import android.telephony.PhoneStateListener;
28import android.telephony.ServiceState;
29import android.telephony.SignalStrength;
30
31import com.android.internal.telephony.imsphone.ImsPhone;
32import com.android.internal.telephony.RadioCapability;
33import com.android.internal.telephony.test.SimulatedRadioControl;
34import com.android.internal.telephony.uicc.IsimRecords;
35import com.android.internal.telephony.uicc.UiccCard;
36import com.android.internal.telephony.uicc.UsimServiceTable;
37
38import com.android.internal.telephony.PhoneConstants.*; // ????
39
40import java.util.List;
41import java.util.Locale;
42
43/**
44 * Internal interface used to control the phone; SDK developers cannot
45 * obtain this interface.
46 *
47 * {@hide}
48 *
49 */
50public interface Phone {
51
52    /** used to enable additional debug messages */
53    static final boolean DEBUG_PHONE = true;
54
55    public enum DataActivityState {
56        /**
57         * The state of a data activity.
58         * <ul>
59         * <li>NONE = No traffic</li>
60         * <li>DATAIN = Receiving IP ppp traffic</li>
61         * <li>DATAOUT = Sending IP ppp traffic</li>
62         * <li>DATAINANDOUT = Both receiving and sending IP ppp traffic</li>
63         * <li>DORMANT = The data connection is still active,
64                                     but physical link is down</li>
65         * </ul>
66         */
67        NONE, DATAIN, DATAOUT, DATAINANDOUT, DORMANT;
68    }
69
70    enum SuppService {
71      UNKNOWN, SWITCH, SEPARATE, TRANSFER, CONFERENCE, REJECT, HANGUP, RESUME;
72    }
73
74    // "Features" accessible through the connectivity manager
75    static final String FEATURE_ENABLE_MMS = "enableMMS";
76    static final String FEATURE_ENABLE_SUPL = "enableSUPL";
77    static final String FEATURE_ENABLE_DUN = "enableDUN";
78    static final String FEATURE_ENABLE_HIPRI = "enableHIPRI";
79    static final String FEATURE_ENABLE_DUN_ALWAYS = "enableDUNAlways";
80    static final String FEATURE_ENABLE_FOTA = "enableFOTA";
81    static final String FEATURE_ENABLE_IMS = "enableIMS";
82    static final String FEATURE_ENABLE_CBS = "enableCBS";
83    static final String FEATURE_ENABLE_EMERGENCY = "enableEmergency";
84
85    /**
86     * Optional reasons for disconnect and connect
87     */
88    static final String REASON_ROAMING_ON = "roamingOn";
89    static final String REASON_ROAMING_OFF = "roamingOff";
90    static final String REASON_DATA_DISABLED = "dataDisabled";
91    static final String REASON_DATA_ENABLED = "dataEnabled";
92    static final String REASON_DATA_ATTACHED = "dataAttached";
93    static final String REASON_DATA_DETACHED = "dataDetached";
94    static final String REASON_CDMA_DATA_ATTACHED = "cdmaDataAttached";
95    static final String REASON_CDMA_DATA_DETACHED = "cdmaDataDetached";
96    static final String REASON_APN_CHANGED = "apnChanged";
97    static final String REASON_APN_SWITCHED = "apnSwitched";
98    static final String REASON_APN_FAILED = "apnFailed";
99    static final String REASON_RESTORE_DEFAULT_APN = "restoreDefaultApn";
100    static final String REASON_RADIO_TURNED_OFF = "radioTurnedOff";
101    static final String REASON_PDP_RESET = "pdpReset";
102    static final String REASON_VOICE_CALL_ENDED = "2GVoiceCallEnded";
103    static final String REASON_VOICE_CALL_STARTED = "2GVoiceCallStarted";
104    static final String REASON_PS_RESTRICT_ENABLED = "psRestrictEnabled";
105    static final String REASON_PS_RESTRICT_DISABLED = "psRestrictDisabled";
106    static final String REASON_SIM_LOADED = "simLoaded";
107    static final String REASON_NW_TYPE_CHANGED = "nwTypeChanged";
108    static final String REASON_DATA_DEPENDENCY_MET = "dependencyMet";
109    static final String REASON_DATA_DEPENDENCY_UNMET = "dependencyUnmet";
110    static final String REASON_LOST_DATA_CONNECTION = "lostDataConnection";
111    static final String REASON_CONNECTED = "connected";
112    static final String REASON_SINGLE_PDN_ARBITRATION = "SinglePdnArbitration";
113    static final String REASON_DATA_SPECIFIC_DISABLED = "specificDisabled";
114    static final String REASON_SIM_NOT_READY = "simNotReady";
115    static final String REASON_IWLAN_AVAILABLE = "iwlanAvailable";
116    static final String REASON_CARRIER_CHANGE = "carrierChange";
117
118    // Used for band mode selection methods
119    static final int BM_UNSPECIFIED = 0; // selected by baseband automatically
120    static final int BM_EURO_BAND   = 1; // GSM-900 / DCS-1800 / WCDMA-IMT-2000
121    static final int BM_US_BAND     = 2; // GSM-850 / PCS-1900 / WCDMA-850 / WCDMA-PCS-1900
122    static final int BM_JPN_BAND    = 3; // WCDMA-800 / WCDMA-IMT-2000
123    static final int BM_AUS_BAND    = 4; // GSM-900 / DCS-1800 / WCDMA-850 / WCDMA-IMT-2000
124    static final int BM_AUS2_BAND   = 5; // GSM-900 / DCS-1800 / WCDMA-850
125    static final int BM_BOUNDARY    = 6; // upper band boundary
126
127    // Used for preferred network type
128    // Note NT_* substitute RILConstants.NETWORK_MODE_* above the Phone
129    int NT_MODE_WCDMA_PREF   = RILConstants.NETWORK_MODE_WCDMA_PREF;
130    int NT_MODE_GSM_ONLY     = RILConstants.NETWORK_MODE_GSM_ONLY;
131    int NT_MODE_WCDMA_ONLY   = RILConstants.NETWORK_MODE_WCDMA_ONLY;
132    int NT_MODE_GSM_UMTS     = RILConstants.NETWORK_MODE_GSM_UMTS;
133
134    int NT_MODE_CDMA         = RILConstants.NETWORK_MODE_CDMA;
135
136    int NT_MODE_CDMA_NO_EVDO = RILConstants.NETWORK_MODE_CDMA_NO_EVDO;
137    int NT_MODE_EVDO_NO_CDMA = RILConstants.NETWORK_MODE_EVDO_NO_CDMA;
138    int NT_MODE_GLOBAL       = RILConstants.NETWORK_MODE_GLOBAL;
139
140    int NT_MODE_LTE_CDMA_AND_EVDO        = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO;
141    int NT_MODE_LTE_GSM_WCDMA            = RILConstants.NETWORK_MODE_LTE_GSM_WCDMA;
142    int NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA  = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA;
143    int NT_MODE_LTE_ONLY                 = RILConstants.NETWORK_MODE_LTE_ONLY;
144    int NT_MODE_LTE_WCDMA                = RILConstants.NETWORK_MODE_LTE_WCDMA;
145    int PREFERRED_NT_MODE                = RILConstants.PREFERRED_NETWORK_MODE;
146
147    // Used for CDMA roaming mode
148    static final int CDMA_RM_HOME        = 0;  // Home Networks only, as defined in PRL
149    static final int CDMA_RM_AFFILIATED  = 1;  // Roaming an Affiliated networks, as defined in PRL
150    static final int CDMA_RM_ANY         = 2;  // Roaming on Any Network, as defined in PRL
151
152    // Used for CDMA subscription mode
153    static final int CDMA_SUBSCRIPTION_UNKNOWN  =-1; // Unknown
154    static final int CDMA_SUBSCRIPTION_RUIM_SIM = 0; // RUIM/SIM (default)
155    static final int CDMA_SUBSCRIPTION_NV       = 1; // NV -> non-volatile memory
156
157    static final int PREFERRED_CDMA_SUBSCRIPTION = CDMA_SUBSCRIPTION_NV;
158
159    static final int TTY_MODE_OFF = 0;
160    static final int TTY_MODE_FULL = 1;
161    static final int TTY_MODE_HCO = 2;
162    static final int TTY_MODE_VCO = 3;
163
164     /**
165     * CDMA OTA PROVISION STATUS, the same as RIL_CDMA_OTA_Status in ril.h
166     */
167
168    public static final int CDMA_OTA_PROVISION_STATUS_SPL_UNLOCKED = 0;
169    public static final int CDMA_OTA_PROVISION_STATUS_SPC_RETRIES_EXCEEDED = 1;
170    public static final int CDMA_OTA_PROVISION_STATUS_A_KEY_EXCHANGED = 2;
171    public static final int CDMA_OTA_PROVISION_STATUS_SSD_UPDATED = 3;
172    public static final int CDMA_OTA_PROVISION_STATUS_NAM_DOWNLOADED = 4;
173    public static final int CDMA_OTA_PROVISION_STATUS_MDN_DOWNLOADED = 5;
174    public static final int CDMA_OTA_PROVISION_STATUS_IMSI_DOWNLOADED = 6;
175    public static final int CDMA_OTA_PROVISION_STATUS_PRL_DOWNLOADED = 7;
176    public static final int CDMA_OTA_PROVISION_STATUS_COMMITTED = 8;
177    public static final int CDMA_OTA_PROVISION_STATUS_OTAPA_STARTED = 9;
178    public static final int CDMA_OTA_PROVISION_STATUS_OTAPA_STOPPED = 10;
179    public static final int CDMA_OTA_PROVISION_STATUS_OTAPA_ABORTED = 11;
180
181
182    /**
183     * Get the current ServiceState. Use
184     * <code>registerForServiceStateChanged</code> to be informed of
185     * updates.
186     */
187    ServiceState getServiceState();
188
189    /**
190     * Get the current CellLocation.
191     */
192    CellLocation getCellLocation();
193
194    /**
195     * @return all available cell information or null if none.
196     */
197    public List<CellInfo> getAllCellInfo();
198
199    /**
200     * Sets the minimum time in milli-seconds between {@link PhoneStateListener#onCellInfoChanged
201     * PhoneStateListener.onCellInfoChanged} will be invoked.
202     *
203     * The default, 0, means invoke onCellInfoChanged when any of the reported
204     * information changes. Setting the value to INT_MAX(0x7fffffff) means never issue
205     * A onCellInfoChanged.
206     *
207     * @param rateInMillis the rate
208     */
209    public void setCellInfoListRate(int rateInMillis);
210
211    /**
212     * Get the current for the default apn DataState. No change notification
213     * exists at this interface -- use
214     * {@link android.telephony.PhoneStateListener} instead.
215     */
216    DataState getDataConnectionState();
217
218    /**
219     * Get the current DataState. No change notification exists at this
220     * interface -- use
221     * {@link android.telephony.PhoneStateListener} instead.
222     * @param apnType specify for which apn to get connection state info.
223     */
224    DataState getDataConnectionState(String apnType);
225
226    /**
227     * Get the current DataActivityState. No change notification exists at this
228     * interface -- use
229     * {@link android.telephony.TelephonyManager} instead.
230     */
231    DataActivityState getDataActivityState();
232
233    /**
234     * Gets the context for the phone, as set at initialization time.
235     */
236    Context getContext();
237
238    /**
239     * Disables the DNS check (i.e., allows "0.0.0.0").
240     * Useful for lab testing environment.
241     * @param b true disables the check, false enables.
242     */
243    void disableDnsCheck(boolean b);
244
245    /**
246     * Returns true if the DNS check is currently disabled.
247     */
248    boolean isDnsCheckDisabled();
249
250    /**
251     * Get current coarse-grained voice call state.
252     * Use {@link #registerForPreciseCallStateChanged(Handler, int, Object)
253     * registerForPreciseCallStateChanged()} for change notification. <p>
254     * If the phone has an active call and call waiting occurs,
255     * then the phone state is RINGING not OFFHOOK
256     * <strong>Note:</strong>
257     * This registration point provides notification of finer-grained
258     * changes.<p>
259     *
260     */
261    State getState();
262
263    /**
264     * Returns a string identifier for this phone interface for parties
265     *  outside the phone app process.
266     *  @return The string name.
267     */
268    String getPhoneName();
269
270    /**
271     * Return a numerical identifier for the phone radio interface.
272     * @return PHONE_TYPE_XXX as defined above.
273     */
274    int getPhoneType();
275
276    /**
277     * Returns an array of string identifiers for the APN types serviced by the
278     * currently active.
279     *  @return The string array will always return at least one entry, Phone.APN_TYPE_DEFAULT.
280     * TODO: Revisit if we always should return at least one entry.
281     */
282    String[] getActiveApnTypes();
283
284    /**
285     * Check if TETHER_DUN_APN setting or config_tether_apndata includes APN that matches
286     * current operator.
287     * @return true if there is a matching DUN APN.
288     */
289    boolean hasMatchedTetherApnSetting();
290
291    /**
292     * Returns string for the active APN host.
293     *  @return type as a string or null if none.
294     */
295    String getActiveApnHost(String apnType);
296
297    /**
298     * Return the LinkProperties for the named apn or null if not available
299     */
300    LinkProperties getLinkProperties(String apnType);
301
302    /**
303     * Return the NetworkCapabilities
304     */
305    NetworkCapabilities getNetworkCapabilities(String apnType);
306
307    /**
308     * Get current signal strength. No change notification available on this
309     * interface. Use <code>PhoneStateNotifier</code> or an equivalent.
310     * An ASU is 0-31 or -1 if unknown (for GSM, dBm = -113 - 2 * asu).
311     * The following special values are defined:</p>
312     * <ul><li>0 means "-113 dBm or less".</li>
313     * <li>31 means "-51 dBm or greater".</li></ul>
314     *
315     * @return Current signal strength as SignalStrength
316     */
317    SignalStrength getSignalStrength();
318
319    /**
320     * Notifies when a previously untracked non-ringing/waiting connection has appeared.
321     * This is likely due to some other entity (eg, SIM card application) initiating a call.
322     */
323    void registerForUnknownConnection(Handler h, int what, Object obj);
324
325    /**
326     * Unregisters for unknown connection notifications.
327     */
328    void unregisterForUnknownConnection(Handler h);
329
330    /**
331     * Notifies when a Handover happens due to SRVCC or Silent Redial
332     */
333    void registerForHandoverStateChanged(Handler h, int what, Object obj);
334
335    /**
336     * Unregisters for handover state notifications
337     */
338    void unregisterForHandoverStateChanged(Handler h);
339
340    /**
341     * Register for getting notifications for change in the Call State {@link Call.State}
342     * This is called PreciseCallState because the call state is more precise than the
343     * {@link PhoneConstants.State} which can be obtained using the {@link PhoneStateListener}
344     *
345     * Resulting events will have an AsyncResult in <code>Message.obj</code>.
346     * AsyncResult.userData will be set to the obj argument here.
347     * The <em>h</em> parameter is held only by a weak reference.
348     */
349    void registerForPreciseCallStateChanged(Handler h, int what, Object obj);
350
351    /**
352     * Unregisters for voice call state change notifications.
353     * Extraneous calls are tolerated silently.
354     */
355    void unregisterForPreciseCallStateChanged(Handler h);
356
357    /**
358     * Notifies when a new ringing or waiting connection has appeared.<p>
359     *
360     *  Messages received from this:
361     *  Message.obj will be an AsyncResult
362     *  AsyncResult.userObj = obj
363     *  AsyncResult.result = a Connection. <p>
364     *  Please check Connection.isRinging() to make sure the Connection
365     *  has not dropped since this message was posted.
366     *  If Connection.isRinging() is true, then
367     *   Connection.getCall() == Phone.getRingingCall()
368     */
369    void registerForNewRingingConnection(Handler h, int what, Object obj);
370
371    /**
372     * Unregisters for new ringing connection notification.
373     * Extraneous calls are tolerated silently
374     */
375
376    void unregisterForNewRingingConnection(Handler h);
377
378    /**
379     * Notifies when phone's video capabilities changes <p>
380     *
381     *  Messages received from this:
382     *  Message.obj will be an AsyncResult
383     *  AsyncResult.userObj = obj
384     *  AsyncResult.result = true if phone supports video calling <p>
385     */
386    public void registerForVideoCapabilityChanged(Handler h, int what, Object obj);
387
388    /**
389     * Unregisters for video capability changed notification.
390     * Extraneous calls are tolerated silently
391     */
392    public void unregisterForVideoCapabilityChanged(Handler h);
393
394    /**
395     * Notifies when an incoming call rings.<p>
396     *
397     *  Messages received from this:
398     *  Message.obj will be an AsyncResult
399     *  AsyncResult.userObj = obj
400     *  AsyncResult.result = a Connection. <p>
401     */
402    void registerForIncomingRing(Handler h, int what, Object obj);
403
404    /**
405     * Unregisters for ring notification.
406     * Extraneous calls are tolerated silently
407     */
408
409    void unregisterForIncomingRing(Handler h);
410
411    /**
412     * Notifies when out-band ringback tone is needed.<p>
413     *
414     *  Messages received from this:
415     *  Message.obj will be an AsyncResult
416     *  AsyncResult.userObj = obj
417     *  AsyncResult.result = boolean, true to start play ringback tone
418     *                       and false to stop. <p>
419     */
420    void registerForRingbackTone(Handler h, int what, Object obj);
421
422    /**
423     * Unregisters for ringback tone notification.
424     */
425
426    void unregisterForRingbackTone(Handler h);
427
428    /**
429     * Notifies when out-band on-hold tone is needed.<p>
430     *
431     *  Messages received from this:
432     *  Message.obj will be an AsyncResult
433     *  AsyncResult.userObj = obj
434     *  AsyncResult.result = boolean, true to start play on-hold tone
435     *                       and false to stop. <p>
436     */
437    void registerForOnHoldTone(Handler h, int what, Object obj);
438
439    /**
440     * Unregisters for on-hold tone notification.
441     */
442
443    void unregisterForOnHoldTone(Handler h);
444
445    /**
446     * Registers the handler to reset the uplink mute state to get
447     * uplink audio.
448     */
449    void registerForResendIncallMute(Handler h, int what, Object obj);
450
451    /**
452     * Unregisters for resend incall mute notifications.
453     */
454    void unregisterForResendIncallMute(Handler h);
455
456    /**
457     * Notifies when a voice connection has disconnected, either due to local
458     * or remote hangup or error.
459     *
460     *  Messages received from this will have the following members:<p>
461     *  <ul><li>Message.obj will be an AsyncResult</li>
462     *  <li>AsyncResult.userObj = obj</li>
463     *  <li>AsyncResult.result = a Connection object that is
464     *  no longer connected.</li></ul>
465     */
466    void registerForDisconnect(Handler h, int what, Object obj);
467
468    /**
469     * Unregisters for voice disconnection notification.
470     * Extraneous calls are tolerated silently
471     */
472    void unregisterForDisconnect(Handler h);
473
474
475    /**
476     * Register for notifications of initiation of a new MMI code request.
477     * MMI codes for GSM are discussed in 3GPP TS 22.030.<p>
478     *
479     * Example: If Phone.dial is called with "*#31#", then the app will
480     * be notified here.<p>
481     *
482     * The returned <code>Message.obj</code> will contain an AsyncResult.
483     *
484     * <code>obj.result</code> will be an "MmiCode" object.
485     */
486    void registerForMmiInitiate(Handler h, int what, Object obj);
487
488    /**
489     * Unregisters for new MMI initiate notification.
490     * Extraneous calls are tolerated silently
491     */
492    void unregisterForMmiInitiate(Handler h);
493
494    /**
495     * Register for notifications that an MMI request has completed
496     * its network activity and is in its final state. This may mean a state
497     * of COMPLETE, FAILED, or CANCELLED.
498     *
499     * <code>Message.obj</code> will contain an AsyncResult.
500     * <code>obj.result</code> will be an "MmiCode" object
501     */
502    void registerForMmiComplete(Handler h, int what, Object obj);
503
504    /**
505     * Unregisters for MMI complete notification.
506     * Extraneous calls are tolerated silently
507     */
508    void unregisterForMmiComplete(Handler h);
509
510    /**
511     * Registration point for Ecm timer reset
512     * @param h handler to notify
513     * @param what user-defined message code
514     * @param obj placed in Message.obj
515     */
516    public void registerForEcmTimerReset(Handler h, int what, Object obj);
517
518    /**
519     * Unregister for notification for Ecm timer reset
520     * @param h Handler to be removed from the registrant list.
521     */
522    public void unregisterForEcmTimerReset(Handler h);
523
524    /**
525     * Returns a list of MMI codes that are pending. (They have initiated
526     * but have not yet completed).
527     * Presently there is only ever one.
528     * Use <code>registerForMmiInitiate</code>
529     * and <code>registerForMmiComplete</code> for change notification.
530     */
531    public List<? extends MmiCode> getPendingMmiCodes();
532
533    /**
534     * Sends user response to a USSD REQUEST message.  An MmiCode instance
535     * representing this response is sent to handlers registered with
536     * registerForMmiInitiate.
537     *
538     * @param ussdMessge    Message to send in the response.
539     */
540    public void sendUssdResponse(String ussdMessge);
541
542    /**
543     * Register for ServiceState changed.
544     * Message.obj will contain an AsyncResult.
545     * AsyncResult.result will be a ServiceState instance
546     */
547    void registerForServiceStateChanged(Handler h, int what, Object obj);
548
549    /**
550     * Unregisters for ServiceStateChange notification.
551     * Extraneous calls are tolerated silently
552     */
553    void unregisterForServiceStateChanged(Handler h);
554
555    /**
556     * Register for Supplementary Service notifications from the network.
557     * Message.obj will contain an AsyncResult.
558     * AsyncResult.result will be a SuppServiceNotification instance.
559     *
560     * @param h Handler that receives the notification message.
561     * @param what User-defined message code.
562     * @param obj User object.
563     */
564    void registerForSuppServiceNotification(Handler h, int what, Object obj);
565
566    /**
567     * Unregisters for Supplementary Service notifications.
568     * Extraneous calls are tolerated silently
569     *
570     * @param h Handler to be removed from the registrant list.
571     */
572    void unregisterForSuppServiceNotification(Handler h);
573
574    /**
575     * Register for notifications when a supplementary service attempt fails.
576     * Message.obj will contain an AsyncResult.
577     *
578     * @param h Handler that receives the notification message.
579     * @param what User-defined message code.
580     * @param obj User object.
581     */
582    void registerForSuppServiceFailed(Handler h, int what, Object obj);
583
584    /**
585     * Unregister for notifications when a supplementary service attempt fails.
586     * Extraneous calls are tolerated silently
587     *
588     * @param h Handler to be removed from the registrant list.
589     */
590    void unregisterForSuppServiceFailed(Handler h);
591
592    /**
593     * Register for notifications when a sInCall VoicePrivacy is enabled
594     *
595     * @param h Handler that receives the notification message.
596     * @param what User-defined message code.
597     * @param obj User object.
598     */
599    void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj);
600
601    /**
602     * Unegister for notifications when a sInCall VoicePrivacy is enabled
603     *
604     * @param h Handler to be removed from the registrant list.
605     */
606    void unregisterForInCallVoicePrivacyOn(Handler h);
607
608    /**
609     * Register for notifications when a sInCall VoicePrivacy is disabled
610     *
611     * @param h Handler that receives the notification message.
612     * @param what User-defined message code.
613     * @param obj User object.
614     */
615    void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj);
616
617    /**
618     * Unregister for notifications when a sInCall VoicePrivacy is disabled
619     *
620     * @param h Handler to be removed from the registrant list.
621     */
622    void unregisterForInCallVoicePrivacyOff(Handler h);
623
624    /**
625     * Register for notifications when CDMA OTA Provision status change
626     *
627     * @param h Handler that receives the notification message.
628     * @param what User-defined message code.
629     * @param obj User object.
630     */
631    void registerForCdmaOtaStatusChange(Handler h, int what, Object obj);
632
633    /**
634     * Unregister for notifications when CDMA OTA Provision status change
635     * @param h Handler to be removed from the registrant list.
636     */
637    void unregisterForCdmaOtaStatusChange(Handler h);
638
639    /**
640     * Registration point for subscription info ready
641     * @param h handler to notify
642     * @param what what code of message when delivered
643     * @param obj placed in Message.obj
644     */
645    public void registerForSubscriptionInfoReady(Handler h, int what, Object obj);
646
647    /**
648     * Unregister for notifications for subscription info
649     * @param h Handler to be removed from the registrant list.
650     */
651    public void unregisterForSubscriptionInfoReady(Handler h);
652
653    /**
654     * Registration point for Sim records loaded
655     * @param h handler to notify
656     * @param what what code of message when delivered
657     * @param obj placed in Message.obj
658     */
659    public void registerForSimRecordsLoaded(Handler h, int what, Object obj);
660
661    /**
662     * Unregister for notifications for Sim records loaded
663     * @param h Handler to be removed from the registrant list.
664     */
665    public void unregisterForSimRecordsLoaded(Handler h);
666
667    /**
668     * Register for TTY mode change notifications from the network.
669     * Message.obj will contain an AsyncResult.
670     * AsyncResult.result will be an Integer containing new mode.
671     *
672     * @param h Handler that receives the notification message.
673     * @param what User-defined message code.
674     * @param obj User object.
675     */
676    public void registerForTtyModeReceived(Handler h, int what, Object obj);
677
678    /**
679     * Unregisters for TTY mode change notifications.
680     * Extraneous calls are tolerated silently
681     *
682     * @param h Handler to be removed from the registrant list.
683     */
684    public void unregisterForTtyModeReceived(Handler h);
685
686    /**
687     * Returns SIM record load state. Use
688     * <code>getSimCard().registerForReady()</code> for change notification.
689     *
690     * @return true if records from the SIM have been loaded and are
691     * available (if applicable). If not applicable to the underlying
692     * technology, returns true as well.
693     */
694    boolean getIccRecordsLoaded();
695
696    /**
697     * Returns the ICC card interface for this phone, or null
698     * if not applicable to underlying technology.
699     */
700    IccCard getIccCard();
701
702    /**
703     * Answers a ringing or waiting call. Active calls, if any, go on hold.
704     * Answering occurs asynchronously, and final notification occurs via
705     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
706     * java.lang.Object) registerForPreciseCallStateChanged()}.
707     *
708     * @param videoState The video state in which to answer the call.
709     * @exception CallStateException when no call is ringing or waiting
710     */
711    void acceptCall(int videoState) throws CallStateException;
712
713    /**
714     * Reject (ignore) a ringing call. In GSM, this means UDUB
715     * (User Determined User Busy). Reject occurs asynchronously,
716     * and final notification occurs via
717     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
718     * java.lang.Object) registerForPreciseCallStateChanged()}.
719     *
720     * @exception CallStateException when no call is ringing or waiting
721     */
722    void rejectCall() throws CallStateException;
723
724    /**
725     * Places any active calls on hold, and makes any held calls
726     *  active. Switch occurs asynchronously and may fail.
727     * Final notification occurs via
728     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
729     * java.lang.Object) registerForPreciseCallStateChanged()}.
730     *
731     * @exception CallStateException if a call is ringing, waiting, or
732     * dialing/alerting. In these cases, this operation may not be performed.
733     */
734    void switchHoldingAndActive() throws CallStateException;
735
736    /**
737     * Whether or not the phone can conference in the current phone
738     * state--that is, one call holding and one call active.
739     * @return true if the phone can conference; false otherwise.
740     */
741    boolean canConference();
742
743    /**
744     * Conferences holding and active. Conference occurs asynchronously
745     * and may fail. Final notification occurs via
746     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
747     * java.lang.Object) registerForPreciseCallStateChanged()}.
748     *
749     * @exception CallStateException if canConference() would return false.
750     * In these cases, this operation may not be performed.
751     */
752    void conference() throws CallStateException;
753
754    /**
755     * Enable or disable enhanced Voice Privacy (VP). If enhanced VP is
756     * disabled, normal VP is enabled.
757     *
758     * @param enable whether true or false to enable or disable.
759     * @param onComplete a callback message when the action is completed.
760     */
761    void enableEnhancedVoicePrivacy(boolean enable, Message onComplete);
762
763    /**
764     * Get the currently set Voice Privacy (VP) mode.
765     *
766     * @param onComplete a callback message when the action is completed.
767     */
768    void getEnhancedVoicePrivacy(Message onComplete);
769
770    /**
771     * Whether or not the phone can do explicit call transfer in the current
772     * phone state--that is, one call holding and one call active.
773     * @return true if the phone can do explicit call transfer; false otherwise.
774     */
775    boolean canTransfer();
776
777    /**
778     * Connects the two calls and disconnects the subscriber from both calls
779     * Explicit Call Transfer occurs asynchronously
780     * and may fail. Final notification occurs via
781     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
782     * java.lang.Object) registerForPreciseCallStateChanged()}.
783     *
784     * @exception CallStateException if canTransfer() would return false.
785     * In these cases, this operation may not be performed.
786     */
787    void explicitCallTransfer() throws CallStateException;
788
789    /**
790     * Clears all DISCONNECTED connections from Call connection lists.
791     * Calls that were in the DISCONNECTED state become idle. This occurs
792     * synchronously.
793     */
794    void clearDisconnected();
795
796
797    /**
798     * Gets the foreground call object, which represents all connections that
799     * are dialing or active (all connections
800     * that have their audio path connected).<p>
801     *
802     * The foreground call is a singleton object. It is constant for the life
803     * of this phone. It is never null.<p>
804     *
805     * The foreground call will only ever be in one of these states:
806     * IDLE, ACTIVE, DIALING, ALERTING, or DISCONNECTED.
807     *
808     * State change notification is available via
809     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
810     * java.lang.Object) registerForPreciseCallStateChanged()}.
811     */
812    Call getForegroundCall();
813
814    /**
815     * Gets the background call object, which represents all connections that
816     * are holding (all connections that have been accepted or connected, but
817     * do not have their audio path connected). <p>
818     *
819     * The background call is a singleton object. It is constant for the life
820     * of this phone object . It is never null.<p>
821     *
822     * The background call will only ever be in one of these states:
823     * IDLE, HOLDING or DISCONNECTED.
824     *
825     * State change notification is available via
826     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
827     * java.lang.Object) registerForPreciseCallStateChanged()}.
828     */
829    Call getBackgroundCall();
830
831    /**
832     * Gets the ringing call object, which represents an incoming
833     * connection (if present) that is pending answer/accept. (This connection
834     * may be RINGING or WAITING, and there may be only one.)<p>
835
836     * The ringing call is a singleton object. It is constant for the life
837     * of this phone. It is never null.<p>
838     *
839     * The ringing call will only ever be in one of these states:
840     * IDLE, INCOMING, WAITING or DISCONNECTED.
841     *
842     * State change notification is available via
843     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
844     * java.lang.Object) registerForPreciseCallStateChanged()}.
845     */
846    Call getRingingCall();
847
848    /**
849     * Initiate a new voice connection. This happens asynchronously, so you
850     * cannot assume the audio path is connected (or a call index has been
851     * assigned) until PhoneStateChanged notification has occurred.
852     *
853     * @param dialString The dial string.
854     * @param videoState The desired video state for the connection.
855     * @exception CallStateException if a new outgoing call is not currently
856     * possible because no more call slots exist or a call exists that is
857     * dialing, alerting, ringing, or waiting.  Other errors are
858     * handled asynchronously.
859     */
860    Connection dial(String dialString, int videoState) throws CallStateException;
861
862    /**
863     * Initiate a new voice connection with supplementary User to User
864     * Information. This happens asynchronously, so you cannot assume the audio
865     * path is connected (or a call index has been assigned) until
866     * PhoneStateChanged notification has occurred.
867     *
868     * NOTE: If adding another parameter, consider creating a DialArgs parameter instead to
869     * encapsulate all dial arguments and decrease scaffolding headache.
870     *
871     * @param dialString The dial string.
872     * @param uusInfo The UUSInfo.
873     * @param videoState The desired video state for the connection.
874     * @param intentExtras The extras from the original CALL intent.
875     * @exception CallStateException if a new outgoing call is not currently
876     *                possible because no more call slots exist or a call exists
877     *                that is dialing, alerting, ringing, or waiting. Other
878     *                errors are handled asynchronously.
879     */
880    Connection dial(String dialString, UUSInfo uusInfo, int videoState, Bundle intentExtras)
881            throws CallStateException;
882
883    /**
884     * Handles PIN MMI commands (PIN/PIN2/PUK/PUK2), which are initiated
885     * without SEND (so <code>dial</code> is not appropriate).
886     *
887     * @param dialString the MMI command to be executed.
888     * @return true if MMI command is executed.
889     */
890    boolean handlePinMmi(String dialString);
891
892    /**
893     * Handles in-call MMI commands. While in a call, or while receiving a
894     * call, use this to execute MMI commands.
895     * see 3GPP 20.030, section 6.5.5.1 for specs on the allowed MMI commands.
896     *
897     * @param command the MMI command to be executed.
898     * @return true if the MMI command is executed.
899     * @throws CallStateException
900     */
901    boolean handleInCallMmiCommands(String command) throws CallStateException;
902
903    /**
904     * Play a DTMF tone on the active call. Ignored if there is no active call.
905     * @param c should be one of 0-9, '*' or '#'. Other values will be
906     * silently ignored.
907     */
908    void sendDtmf(char c);
909
910    /**
911     * Start to paly a DTMF tone on the active call. Ignored if there is no active call
912     * or there is a playing DTMF tone.
913     * @param c should be one of 0-9, '*' or '#'. Other values will be
914     * silently ignored.
915     */
916    void startDtmf(char c);
917
918    /**
919     * Stop the playing DTMF tone. Ignored if there is no playing DTMF
920     * tone or no active call.
921     */
922    void stopDtmf();
923
924    /**
925     * send burst DTMF tone, it can send the string as single character or multiple character
926     * ignore if there is no active call or not valid digits string.
927     * Valid digit means only includes characters ISO-LATIN characters 0-9, *, #
928     * The difference between sendDtmf and sendBurstDtmf is sendDtmf only sends one character,
929     * this api can send single character and multiple character, also, this api has response
930     * back to caller.
931     *
932     * @param dtmfString is string representing the dialing digit(s) in the active call
933     * @param on the DTMF ON length in milliseconds, or 0 for default
934     * @param off the DTMF OFF length in milliseconds, or 0 for default
935     * @param onComplete is the callback message when the action is processed by BP
936     *
937     */
938    void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete);
939
940    /**
941     * Sets the radio power on/off state (off is sometimes
942     * called "airplane mode"). Current state can be gotten via
943     * {@link #getServiceState()}.{@link
944     * android.telephony.ServiceState#getState() getState()}.
945     * <strong>Note: </strong>This request is asynchronous.
946     * getServiceState().getState() will not change immediately after this call.
947     * registerForServiceStateChanged() to find out when the
948     * request is complete.
949     *
950     * @param power true means "on", false means "off".
951     */
952    void setRadioPower(boolean power);
953
954    /**
955     * Get voice message waiting indicator status. No change notification
956     * available on this interface. Use PhoneStateNotifier or similar instead.
957     *
958     * @return true if there is a voice message waiting
959     */
960    boolean getMessageWaitingIndicator();
961
962    /**
963     * Get voice call forwarding indicator status. No change notification
964     * available on this interface. Use PhoneStateNotifier or similar instead.
965     *
966     * @return true if there is a voice call forwarding
967     */
968    boolean getCallForwardingIndicator();
969
970    /**
971     * Get the line 1 phone number (MSISDN). For CDMA phones, the MDN is returned
972     * and {@link #getMsisdn()} will return the MSISDN on CDMA/LTE phones.<p>
973     *
974     * @return phone number. May return null if not
975     * available or the SIM is not ready
976     */
977    String getLine1Number();
978
979    /**
980     * Returns the alpha tag associated with the msisdn number.
981     * If there is no alpha tag associated or the record is not yet available,
982     * returns a default localized string. <p>
983     */
984    String getLine1AlphaTag();
985
986    /**
987     * Sets the MSISDN phone number in the SIM card.
988     *
989     * @param alphaTag the alpha tag associated with the MSISDN phone number
990     *        (see getMsisdnAlphaTag)
991     * @param number the new MSISDN phone number to be set on the SIM.
992     * @param onComplete a callback message when the action is completed.
993     *
994     * @return true if req is sent, false otherwise. If req is not sent there will be no response,
995     * that is, onComplete will never be sent.
996     */
997    boolean setLine1Number(String alphaTag, String number, Message onComplete);
998
999    /**
1000     * Get the voice mail access phone number. Typically dialed when the
1001     * user holds the "1" key in the phone app. May return null if not
1002     * available or the SIM is not ready.<p>
1003     */
1004    String getVoiceMailNumber();
1005
1006    /**
1007     * Returns unread voicemail count. This count is shown when the  voicemail
1008     * notification is expanded.<p>
1009     */
1010    int getVoiceMessageCount();
1011
1012    /**
1013     * Returns the alpha tag associated with the voice mail number.
1014     * If there is no alpha tag associated or the record is not yet available,
1015     * returns a default localized string. <p>
1016     *
1017     * Please use this value instead of some other localized string when
1018     * showing a name for this number in the UI. For example, call log
1019     * entries should show this alpha tag. <p>
1020     *
1021     * Usage of this alpha tag in the UI is a common carrier requirement.
1022     */
1023    String getVoiceMailAlphaTag();
1024
1025    /**
1026     * setVoiceMailNumber
1027     * sets the voicemail number in the SIM card.
1028     *
1029     * @param alphaTag the alpha tag associated with the voice mail number
1030     *        (see getVoiceMailAlphaTag)
1031     * @param voiceMailNumber the new voicemail number to be set on the SIM.
1032     * @param onComplete a callback message when the action is completed.
1033     */
1034    void setVoiceMailNumber(String alphaTag,
1035                            String voiceMailNumber,
1036                            Message onComplete);
1037
1038    /**
1039     * getCallForwardingOptions
1040     * gets a call forwarding option. The return value of
1041     * ((AsyncResult)onComplete.obj) is an array of CallForwardInfo.
1042     *
1043     * @param commandInterfaceCFReason is one of the valid call forwarding
1044     *        CF_REASONS, as defined in
1045     *        <code>com.android.internal.telephony.CommandsInterface.</code>
1046     * @param onComplete a callback message when the action is completed.
1047     *        @see com.android.internal.telephony.CallForwardInfo for details.
1048     */
1049    void getCallForwardingOption(int commandInterfaceCFReason,
1050                                  Message onComplete);
1051
1052    /**
1053     * setCallForwardingOptions
1054     * sets a call forwarding option.
1055     *
1056     * @param commandInterfaceCFReason is one of the valid call forwarding
1057     *        CF_REASONS, as defined in
1058     *        <code>com.android.internal.telephony.CommandsInterface.</code>
1059     * @param commandInterfaceCFAction is one of the valid call forwarding
1060     *        CF_ACTIONS, as defined in
1061     *        <code>com.android.internal.telephony.CommandsInterface.</code>
1062     * @param dialingNumber is the target phone number to forward calls to
1063     * @param timerSeconds is used by CFNRy to indicate the timeout before
1064     *        forwarding is attempted.
1065     * @param onComplete a callback message when the action is completed.
1066     */
1067    void setCallForwardingOption(int commandInterfaceCFReason,
1068                                 int commandInterfaceCFAction,
1069                                 String dialingNumber,
1070                                 int timerSeconds,
1071                                 Message onComplete);
1072
1073    /**
1074     * getOutgoingCallerIdDisplay
1075     * gets outgoing caller id display. The return value of
1076     * ((AsyncResult)onComplete.obj) is an array of int, with a length of 2.
1077     *
1078     * @param onComplete a callback message when the action is completed.
1079     *        @see com.android.internal.telephony.CommandsInterface#getCLIR for details.
1080     */
1081    void getOutgoingCallerIdDisplay(Message onComplete);
1082
1083    /**
1084     * setOutgoingCallerIdDisplay
1085     * sets a call forwarding option.
1086     *
1087     * @param commandInterfaceCLIRMode is one of the valid call CLIR
1088     *        modes, as defined in
1089     *        <code>com.android.internal.telephony.CommandsInterface./code>
1090     * @param onComplete a callback message when the action is completed.
1091     */
1092    void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode,
1093                                    Message onComplete);
1094
1095    /**
1096     * getCallWaiting
1097     * gets call waiting activation state. The return value of
1098     * ((AsyncResult)onComplete.obj) is an array of int, with a length of 1.
1099     *
1100     * @param onComplete a callback message when the action is completed.
1101     *        @see com.android.internal.telephony.CommandsInterface#queryCallWaiting for details.
1102     */
1103    void getCallWaiting(Message onComplete);
1104
1105    /**
1106     * setCallWaiting
1107     * sets a call forwarding option.
1108     *
1109     * @param enable is a boolean representing the state that you are
1110     *        requesting, true for enabled, false for disabled.
1111     * @param onComplete a callback message when the action is completed.
1112     */
1113    void setCallWaiting(boolean enable, Message onComplete);
1114
1115    /**
1116     * Scan available networks. This method is asynchronous; .
1117     * On completion, <code>response.obj</code> is set to an AsyncResult with
1118     * one of the following members:.<p>
1119     *<ul>
1120     * <li><code>response.obj.result</code> will be a <code>List</code> of
1121     * <code>OperatorInfo</code> objects, or</li>
1122     * <li><code>response.obj.exception</code> will be set with an exception
1123     * on failure.</li>
1124     * </ul>
1125     */
1126    void getAvailableNetworks(Message response);
1127
1128    /**
1129     * Switches network selection mode to "automatic", re-scanning and
1130     * re-selecting a network if appropriate.
1131     *
1132     * @param response The message to dispatch when the network selection
1133     * is complete.
1134     *
1135     * @see #selectNetworkManually(OperatorInfo, android.os.Message )
1136     */
1137    void setNetworkSelectionModeAutomatic(Message response);
1138
1139    /**
1140     * Manually selects a network. <code>response</code> is
1141     * dispatched when this is complete.  <code>response.obj</code> will be
1142     * an AsyncResult, and <code>response.obj.exception</code> will be non-null
1143     * on failure.
1144     *
1145     * @see #setNetworkSelectionModeAutomatic(Message)
1146     */
1147    void selectNetworkManually(OperatorInfo network,
1148                            Message response);
1149
1150    /**
1151     * Query the radio for the current network selection mode.
1152     *
1153     * Return values:
1154     *     0 - automatic.
1155     *     1 - manual.
1156     */
1157    void getNetworkSelectionMode(Message response);
1158
1159    /**
1160     *  Requests to set the preferred network type for searching and registering
1161     * (CS/PS domain, RAT, and operation mode)
1162     * @param networkType one of  NT_*_TYPE
1163     * @param response is callback message
1164     */
1165    void setPreferredNetworkType(int networkType, Message response);
1166
1167    /**
1168     *  Query the preferred network type setting
1169     *
1170     * @param response is callback message to report one of  NT_*_TYPE
1171     */
1172    void getPreferredNetworkType(Message response);
1173
1174    /**
1175     * Gets the default SMSC address.
1176     *
1177     * @param result Callback message contains the SMSC address.
1178     */
1179    void getSmscAddress(Message result);
1180
1181    /**
1182     * Sets the default SMSC address.
1183     *
1184     * @param address new SMSC address
1185     * @param result Callback message is empty on completion
1186     */
1187    void setSmscAddress(String address, Message result);
1188
1189    /**
1190     * Query neighboring cell IDs.  <code>response</code> is dispatched when
1191     * this is complete.  <code>response.obj</code> will be an AsyncResult,
1192     * and <code>response.obj.exception</code> will be non-null on failure.
1193     * On success, <code>AsyncResult.result</code> will be a <code>String[]</code>
1194     * containing the neighboring cell IDs.  Index 0 will contain the count
1195     * of available cell IDs.  Cell IDs are in hexadecimal format.
1196     *
1197     * @param response callback message that is dispatched when the query
1198     * completes.
1199     */
1200    void getNeighboringCids(Message response);
1201
1202    /**
1203     * Sets an event to be fired when the telephony system processes
1204     * a post-dial character on an outgoing call.<p>
1205     *
1206     * Messages of type <code>what</code> will be sent to <code>h</code>.
1207     * The <code>obj</code> field of these Message's will be instances of
1208     * <code>AsyncResult</code>. <code>Message.obj.result</code> will be
1209     * a Connection object.<p>
1210     *
1211     * Message.arg1 will be the post dial character being processed,
1212     * or 0 ('\0') if end of string.<p>
1213     *
1214     * If Connection.getPostDialState() == WAIT,
1215     * the application must call
1216     * {@link com.android.internal.telephony.Connection#proceedAfterWaitChar()
1217     * Connection.proceedAfterWaitChar()} or
1218     * {@link com.android.internal.telephony.Connection#cancelPostDial()
1219     * Connection.cancelPostDial()}
1220     * for the telephony system to continue playing the post-dial
1221     * DTMF sequence.<p>
1222     *
1223     * If Connection.getPostDialState() == WILD,
1224     * the application must call
1225     * {@link com.android.internal.telephony.Connection#proceedAfterWildChar
1226     * Connection.proceedAfterWildChar()}
1227     * or
1228     * {@link com.android.internal.telephony.Connection#cancelPostDial()
1229     * Connection.cancelPostDial()}
1230     * for the telephony system to continue playing the
1231     * post-dial DTMF sequence.<p>
1232     *
1233     * Only one post dial character handler may be set. <p>
1234     * Calling this method with "h" equal to null unsets this handler.<p>
1235     */
1236    void setOnPostDialCharacter(Handler h, int what, Object obj);
1237
1238
1239    /**
1240     * Mutes or unmutes the microphone for the active call. The microphone
1241     * is automatically unmuted if a call is answered, dialed, or resumed
1242     * from a holding state.
1243     *
1244     * @param muted true to mute the microphone,
1245     * false to activate the microphone.
1246     */
1247
1248    void setMute(boolean muted);
1249
1250    /**
1251     * Gets current mute status. Use
1252     * {@link #registerForPreciseCallStateChanged(android.os.Handler, int,
1253     * java.lang.Object) registerForPreciseCallStateChanged()}
1254     * as a change notifcation, although presently phone state changed is not
1255     * fired when setMute() is called.
1256     *
1257     * @return true is muting, false is unmuting
1258     */
1259    boolean getMute();
1260
1261    /**
1262     * Enables or disables echo suppression.
1263     */
1264    void setEchoSuppressionEnabled();
1265
1266    /**
1267     * Invokes RIL_REQUEST_OEM_HOOK_RAW on RIL implementation.
1268     *
1269     * @param data The data for the request.
1270     * @param response <strong>On success</strong>,
1271     * (byte[])(((AsyncResult)response.obj).result)
1272     * <strong>On failure</strong>,
1273     * (((AsyncResult)response.obj).result) == null and
1274     * (((AsyncResult)response.obj).exception) being an instance of
1275     * com.android.internal.telephony.gsm.CommandException
1276     *
1277     * @see #invokeOemRilRequestRaw(byte[], android.os.Message)
1278     */
1279    void invokeOemRilRequestRaw(byte[] data, Message response);
1280
1281    /**
1282     * Invokes RIL_REQUEST_OEM_HOOK_Strings on RIL implementation.
1283     *
1284     * @param strings The strings to make available as the request data.
1285     * @param response <strong>On success</strong>, "response" bytes is
1286     * made available as:
1287     * (String[])(((AsyncResult)response.obj).result).
1288     * <strong>On failure</strong>,
1289     * (((AsyncResult)response.obj).result) == null and
1290     * (((AsyncResult)response.obj).exception) being an instance of
1291     * com.android.internal.telephony.gsm.CommandException
1292     *
1293     * @see #invokeOemRilRequestStrings(java.lang.String[], android.os.Message)
1294     */
1295    void invokeOemRilRequestStrings(String[] strings, Message response);
1296
1297    /**
1298     * Get the current active Data Call list
1299     *
1300     * @param response <strong>On success</strong>, "response" bytes is
1301     * made available as:
1302     * (String[])(((AsyncResult)response.obj).result).
1303     * <strong>On failure</strong>,
1304     * (((AsyncResult)response.obj).result) == null and
1305     * (((AsyncResult)response.obj).exception) being an instance of
1306     * com.android.internal.telephony.gsm.CommandException
1307     */
1308    void getDataCallList(Message response);
1309
1310    /**
1311     * Update the ServiceState CellLocation for current network registration.
1312     */
1313    void updateServiceLocation();
1314
1315    /**
1316     * Enable location update notifications.
1317     */
1318    void enableLocationUpdates();
1319
1320    /**
1321     * Disable location update notifications.
1322     */
1323    void disableLocationUpdates();
1324
1325    /**
1326     * For unit tests; don't send notifications to "Phone"
1327     * mailbox registrants if true.
1328     */
1329    void setUnitTestMode(boolean f);
1330
1331    /**
1332     * @return true If unit test mode is enabled
1333     */
1334    boolean getUnitTestMode();
1335
1336    /**
1337     * Assign a specified band for RF configuration.
1338     *
1339     * @param bandMode one of BM_*_BAND
1340     * @param response is callback message
1341     */
1342    void setBandMode(int bandMode, Message response);
1343
1344    /**
1345     * Query the list of band mode supported by RF.
1346     *
1347     * @param response is callback message
1348     *        ((AsyncResult)response.obj).result  is an int[] where int[0] is
1349     *        the size of the array and the rest of each element representing
1350     *        one available BM_*_BAND
1351     */
1352    void queryAvailableBandMode(Message response);
1353
1354    /**
1355     * @return true if enable data connection on roaming
1356     */
1357    boolean getDataRoamingEnabled();
1358
1359    /**
1360     * @param enable set true if enable data connection on roaming
1361     */
1362    void setDataRoamingEnabled(boolean enable);
1363
1364    /**
1365     * @return true if user has enabled data
1366     */
1367    boolean getDataEnabled();
1368
1369    /**
1370     * @param @enable set {@code true} if enable data connection
1371     */
1372    void setDataEnabled(boolean enable);
1373
1374    /**
1375     *  Query the CDMA roaming preference setting
1376     *
1377     * @param response is callback message to report one of  CDMA_RM_*
1378     */
1379    void queryCdmaRoamingPreference(Message response);
1380
1381    /**
1382     *  Requests to set the CDMA roaming preference
1383     * @param cdmaRoamingType one of  CDMA_RM_*
1384     * @param response is callback message
1385     */
1386    void setCdmaRoamingPreference(int cdmaRoamingType, Message response);
1387
1388    /**
1389     *  Requests to set the CDMA subscription mode
1390     * @param cdmaSubscriptionType one of  CDMA_SUBSCRIPTION_*
1391     * @param response is callback message
1392     */
1393    void setCdmaSubscription(int cdmaSubscriptionType, Message response);
1394
1395    /**
1396     * If this is a simulated phone interface, returns a SimulatedRadioControl.
1397     * @return SimulatedRadioControl if this is a simulated interface;
1398     * otherwise, null.
1399     */
1400    SimulatedRadioControl getSimulatedRadioControl();
1401
1402    /**
1403     * Report on whether data connectivity is allowed.
1404     */
1405    boolean isDataConnectivityPossible();
1406
1407    /**
1408     * Report on whether data connectivity is allowed for an APN.
1409     */
1410    boolean isDataConnectivityPossible(String apnType);
1411
1412    /**
1413     * Retrieves the unique device ID, e.g., IMEI for GSM phones and MEID for CDMA phones.
1414     */
1415    String getDeviceId();
1416
1417    /**
1418     * Retrieves the software version number for the device, e.g., IMEI/SV
1419     * for GSM phones.
1420     */
1421    String getDeviceSvn();
1422
1423    /**
1424     * Retrieves the unique subscriber ID, e.g., IMSI for GSM phones.
1425     */
1426    String getSubscriberId();
1427
1428    /**
1429     * Retrieves the Group Identifier Level1 for GSM phones.
1430     */
1431    String getGroupIdLevel1();
1432
1433    /**
1434     * Retrieves the Group Identifier Level2 for phones.
1435     */
1436    String getGroupIdLevel2();
1437
1438    /**
1439     * Retrieves the serial number of the ICC, if applicable.
1440     */
1441    String getIccSerialNumber();
1442
1443    /* CDMA support methods */
1444
1445    /**
1446     * Retrieves the MIN for CDMA phones.
1447     */
1448    String getCdmaMin();
1449
1450    /**
1451     * Check if subscription data has been assigned to mMin
1452     *
1453     * return true if MIN info is ready; false otherwise.
1454     */
1455    boolean isMinInfoReady();
1456
1457    /**
1458     *  Retrieves PRL Version for CDMA phones
1459     */
1460    String getCdmaPrlVersion();
1461
1462    /**
1463     * Retrieves the ESN for CDMA phones.
1464     */
1465    String getEsn();
1466
1467    /**
1468     * Retrieves MEID for CDMA phones.
1469     */
1470    String getMeid();
1471
1472    /**
1473     * Retrieves the MSISDN from the UICC. For GSM/UMTS phones, this is equivalent to
1474     * {@link #getLine1Number()}. For CDMA phones, {@link #getLine1Number()} returns
1475     * the MDN, so this method is provided to return the MSISDN on CDMA/LTE phones.
1476     */
1477    String getMsisdn();
1478
1479    /**
1480     * Retrieves IMEI for phones. Returns null if IMEI is not set.
1481     */
1482    String getImei();
1483
1484    /**
1485     * Retrieves Nai for phones. Returns null if Nai is not set.
1486     */
1487    String getNai();
1488
1489    /**
1490     * Retrieves the PhoneSubInfo of the Phone
1491     */
1492    public PhoneSubInfo getPhoneSubInfo();
1493
1494    /**
1495     * Retrieves the IccPhoneBookInterfaceManager of the Phone
1496     */
1497    public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager();
1498
1499    /**
1500     * setTTYMode
1501     * sets a TTY mode option.
1502     * @param ttyMode is a one of the following:
1503     * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
1504     * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
1505     * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
1506     * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
1507     * @param onComplete a callback message when the action is completed
1508     */
1509    void setTTYMode(int ttyMode, Message onComplete);
1510
1511   /**
1512     * setUiTTYMode
1513     * sets a TTY mode option.
1514     * @param ttyMode is a one of the following:
1515     * - {@link com.android.internal.telephony.Phone#TTY_MODE_OFF}
1516     * - {@link com.android.internal.telephony.Phone#TTY_MODE_FULL}
1517     * - {@link com.android.internal.telephony.Phone#TTY_MODE_HCO}
1518     * - {@link com.android.internal.telephony.Phone#TTY_MODE_VCO}
1519     * @param onComplete a callback message when the action is completed
1520     */
1521    void setUiTTYMode(int uiTtyMode, Message onComplete);
1522
1523    /**
1524     * queryTTYMode
1525     * query the status of the TTY mode
1526     *
1527     * @param onComplete a callback message when the action is completed.
1528     */
1529    void queryTTYMode(Message onComplete);
1530
1531    /**
1532     * Activate or deactivate cell broadcast SMS.
1533     *
1534     * @param activate
1535     *            0 = activate, 1 = deactivate
1536     * @param response
1537     *            Callback message is empty on completion
1538     */
1539    void activateCellBroadcastSms(int activate, Message response);
1540
1541    /**
1542     * Query the current configuration of cdma cell broadcast SMS.
1543     *
1544     * @param response
1545     *            Callback message is empty on completion
1546     */
1547    void getCellBroadcastSmsConfig(Message response);
1548
1549    /**
1550     * Configure cell broadcast SMS.
1551     *
1552     * TODO: Change the configValuesArray to a RIL_BroadcastSMSConfig
1553     *
1554     * @param response
1555     *            Callback message is empty on completion
1556     */
1557    public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response);
1558
1559    public void notifyDataActivity();
1560
1561    /**
1562     * Returns the CDMA ERI icon index to display
1563     */
1564    public int getCdmaEriIconIndex();
1565
1566    /**
1567     * Returns the CDMA ERI icon mode,
1568     * 0 - ON
1569     * 1 - FLASHING
1570     */
1571    public int getCdmaEriIconMode();
1572
1573    /**
1574     * Returns the CDMA ERI text,
1575     */
1576    public String getCdmaEriText();
1577
1578    /**
1579     * request to exit emergency call back mode
1580     * the caller should use setOnECMModeExitResponse
1581     * to receive the emergency callback mode exit response
1582     */
1583    void exitEmergencyCallbackMode();
1584
1585    /**
1586     * this decides if the dial number is OTA(Over the air provision) number or not
1587     * @param dialStr is string representing the dialing digit(s)
1588     * @return  true means the dialStr is OTA number, and false means the dialStr is not OTA number
1589     */
1590    boolean isOtaSpNumber(String dialStr);
1591
1592    /**
1593     * Returns true if OTA Service Provisioning needs to be performed.
1594     */
1595    boolean needsOtaServiceProvisioning();
1596
1597    /**
1598     * Register for notifications when CDMA call waiting comes
1599     *
1600     * @param h Handler that receives the notification message.
1601     * @param what User-defined message code.
1602     * @param obj User object.
1603     */
1604    void registerForCallWaiting(Handler h, int what, Object obj);
1605
1606    /**
1607     * Unegister for notifications when CDMA Call waiting comes
1608     * @param h Handler to be removed from the registrant list.
1609     */
1610    void unregisterForCallWaiting(Handler h);
1611
1612
1613    /**
1614     * Register for signal information notifications from the network.
1615     * Message.obj will contain an AsyncResult.
1616     * AsyncResult.result will be a SuppServiceNotification instance.
1617     *
1618     * @param h Handler that receives the notification message.
1619     * @param what User-defined message code.
1620     * @param obj User object.
1621     */
1622
1623    void registerForSignalInfo(Handler h, int what, Object obj) ;
1624    /**
1625     * Unregisters for signal information notifications.
1626     * Extraneous calls are tolerated silently
1627     *
1628     * @param h Handler to be removed from the registrant list.
1629     */
1630    void unregisterForSignalInfo(Handler h);
1631
1632    /**
1633     * Register for display information notifications from the network.
1634     * Message.obj will contain an AsyncResult.
1635     * AsyncResult.result will be a SuppServiceNotification instance.
1636     *
1637     * @param h Handler that receives the notification message.
1638     * @param what User-defined message code.
1639     * @param obj User object.
1640     */
1641    void registerForDisplayInfo(Handler h, int what, Object obj);
1642
1643    /**
1644     * Unregisters for display information notifications.
1645     * Extraneous calls are tolerated silently
1646     *
1647     * @param h Handler to be removed from the registrant list.
1648     */
1649    void unregisterForDisplayInfo(Handler h) ;
1650
1651    /**
1652     * Register for CDMA number information record notification from the network.
1653     * Message.obj will contain an AsyncResult.
1654     * AsyncResult.result will be a CdmaInformationRecords.CdmaNumberInfoRec
1655     * instance.
1656     *
1657     * @param h Handler that receives the notification message.
1658     * @param what User-defined message code.
1659     * @param obj User object.
1660     */
1661    void registerForNumberInfo(Handler h, int what, Object obj);
1662
1663    /**
1664     * Unregisters for number information record notifications.
1665     * Extraneous calls are tolerated silently
1666     *
1667     * @param h Handler to be removed from the registrant list.
1668     */
1669    void unregisterForNumberInfo(Handler h);
1670
1671    /**
1672     * Register for CDMA redirected number information record notification
1673     * from the network.
1674     * Message.obj will contain an AsyncResult.
1675     * AsyncResult.result will be a CdmaInformationRecords.CdmaRedirectingNumberInfoRec
1676     * instance.
1677     *
1678     * @param h Handler that receives the notification message.
1679     * @param what User-defined message code.
1680     * @param obj User object.
1681     */
1682    void registerForRedirectedNumberInfo(Handler h, int what, Object obj);
1683
1684    /**
1685     * Unregisters for redirected number information record notification.
1686     * Extraneous calls are tolerated silently
1687     *
1688     * @param h Handler to be removed from the registrant list.
1689     */
1690    void unregisterForRedirectedNumberInfo(Handler h);
1691
1692    /**
1693     * Register for CDMA line control information record notification
1694     * from the network.
1695     * Message.obj will contain an AsyncResult.
1696     * AsyncResult.result will be a CdmaInformationRecords.CdmaLineControlInfoRec
1697     * instance.
1698     *
1699     * @param h Handler that receives the notification message.
1700     * @param what User-defined message code.
1701     * @param obj User object.
1702     */
1703    void registerForLineControlInfo(Handler h, int what, Object obj);
1704
1705    /**
1706     * Unregisters for line control information notifications.
1707     * Extraneous calls are tolerated silently
1708     *
1709     * @param h Handler to be removed from the registrant list.
1710     */
1711    void unregisterForLineControlInfo(Handler h);
1712
1713    /**
1714     * Register for CDMA T53 CLIR information record notifications
1715     * from the network.
1716     * Message.obj will contain an AsyncResult.
1717     * AsyncResult.result will be a CdmaInformationRecords.CdmaT53ClirInfoRec
1718     * instance.
1719     *
1720     * @param h Handler that receives the notification message.
1721     * @param what User-defined message code.
1722     * @param obj User object.
1723     */
1724    void registerFoT53ClirlInfo(Handler h, int what, Object obj);
1725
1726    /**
1727     * Unregisters for T53 CLIR information record notification
1728     * Extraneous calls are tolerated silently
1729     *
1730     * @param h Handler to be removed from the registrant list.
1731     */
1732    void unregisterForT53ClirInfo(Handler h);
1733
1734    /**
1735     * Register for CDMA T53 audio control information record notifications
1736     * from the network.
1737     * Message.obj will contain an AsyncResult.
1738     * AsyncResult.result will be a CdmaInformationRecords.CdmaT53AudioControlInfoRec
1739     * instance.
1740     *
1741     * @param h Handler that receives the notification message.
1742     * @param what User-defined message code.
1743     * @param obj User object.
1744     */
1745    void registerForT53AudioControlInfo(Handler h, int what, Object obj);
1746
1747    /**
1748     * Unregisters for T53 audio control information record notifications.
1749     * Extraneous calls are tolerated silently
1750     *
1751     * @param h Handler to be removed from the registrant list.
1752     */
1753    void unregisterForT53AudioControlInfo(Handler h);
1754
1755    /**
1756     * Register for radio off or not available
1757     *
1758     * @param h Handler that receives the notification message.
1759     * @param what User-defined message code.
1760     * @param obj User object.
1761     */
1762    public void registerForRadioOffOrNotAvailable(Handler h, int what, Object obj);
1763
1764    /**
1765     * Unregisters for radio off or not available
1766     *
1767     * @param h Handler to be removed from the registrant list.
1768     */
1769    public void unregisterForRadioOffOrNotAvailable(Handler h);
1770
1771    /**
1772     * registers for exit emergency call back mode request response
1773     *
1774     * @param h Handler that receives the notification message.
1775     * @param what User-defined message code.
1776     * @param obj User object.
1777     */
1778
1779    void setOnEcbModeExitResponse(Handler h, int what, Object obj);
1780
1781    /**
1782     * Unregisters for exit emergency call back mode request response
1783     *
1784     * @param h Handler to be removed from the registrant list.
1785     */
1786    void unsetOnEcbModeExitResponse(Handler h);
1787
1788    /**
1789     * Return if the current radio is LTE on CDMA. This
1790     * is a tri-state return value as for a period of time
1791     * the mode may be unknown.
1792     *
1793     * @return {@link PhoneConstants#LTE_ON_CDMA_UNKNOWN}, {@link PhoneConstants#LTE_ON_CDMA_FALSE}
1794     * or {@link PhoneConstants#LTE_ON_CDMA_TRUE}
1795     */
1796    public int getLteOnCdmaMode();
1797
1798    /**
1799     * TODO: Adding a function for each property is not good.
1800     * A fucntion of type getPhoneProp(propType) where propType is an
1801     * enum of GSM+CDMA+LTE props would be a better approach.
1802     *
1803     * Get "Restriction of menu options for manual PLMN selection" bit
1804     * status from EF_CSP data, this belongs to "Value Added Services Group".
1805     * @return true if this bit is set or EF_CSP data is unavailable,
1806     * false otherwise
1807     */
1808    boolean isCspPlmnEnabled();
1809
1810    /**
1811     * Return an interface to retrieve the ISIM records for IMS, if available.
1812     * @return the interface to retrieve the ISIM records, or null if not supported
1813     */
1814    IsimRecords getIsimRecords();
1815
1816    /**
1817     * Sets the SIM voice message waiting indicator records.
1818     * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported
1819     * @param countWaiting The number of messages waiting, if known. Use
1820     *                     -1 to indicate that an unknown number of
1821     *                      messages are waiting
1822     */
1823    void setVoiceMessageWaiting(int line, int countWaiting);
1824
1825    /**
1826     * Gets the USIM service table from the UICC, if present and available.
1827     * @return an interface to the UsimServiceTable record, or null if not available
1828     */
1829    UsimServiceTable getUsimServiceTable();
1830
1831    /**
1832     * Gets the Uicc card corresponding to this phone.
1833     * @return the UiccCard object corresponding to the phone ID.
1834     */
1835    UiccCard getUiccCard();
1836
1837    /**
1838     * Unregister from all events it registered for and dispose objects
1839     * created by this object.
1840     */
1841    void dispose();
1842
1843    /**
1844     * Remove references to external object stored in this object.
1845     */
1846    void removeReferences();
1847
1848    /**
1849     * Update the phone object if the voice radio technology has changed
1850     *
1851     * @param voiceRadioTech The new voice radio technology
1852     */
1853    void updatePhoneObject(int voiceRadioTech);
1854
1855    /**
1856     * Read one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
1857     * Used for device configuration by some CDMA operators.
1858     *
1859     * @param itemID the ID of the item to read
1860     * @param response callback message with the String response in the obj field
1861     */
1862    void nvReadItem(int itemID, Message response);
1863
1864    /**
1865     * Write one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
1866     * Used for device configuration by some CDMA operators.
1867     *
1868     * @param itemID the ID of the item to read
1869     * @param itemValue the value to write, as a String
1870     * @param response Callback message.
1871     */
1872    void nvWriteItem(int itemID, String itemValue, Message response);
1873
1874    /**
1875     * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage.
1876     * Used for device configuration by some CDMA operators.
1877     *
1878     * @param preferredRoamingList byte array containing the new PRL
1879     * @param response Callback message.
1880     */
1881    void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response);
1882
1883    /**
1884     * Perform the specified type of NV config reset. The radio will be taken offline
1885     * and the device must be rebooted after erasing the NV. Used for device
1886     * configuration by some CDMA operators.
1887     *
1888     * @param resetType reset type: 1: reload NV reset, 2: erase NV reset, 3: factory NV reset
1889     * @param response Callback message.
1890     */
1891    void nvResetConfig(int resetType, Message response);
1892
1893    /*
1894     * Returns the subscription id.
1895     */
1896    public int getSubId();
1897
1898    /*
1899     * Returns the phone id.
1900     */
1901    public int getPhoneId();
1902
1903    /**
1904     * Get P-CSCF address from PCO after data connection is established or modified.
1905     * @param apnType the apnType, "ims" for IMS APN, "emergency" for EMERGENCY APN
1906     */
1907    public String[] getPcscfAddress(String apnType);
1908
1909    /**
1910     * Set IMS registration state
1911     */
1912    public void setImsRegistrationState(boolean registered);
1913
1914    /**
1915     * Return the ImsPhone phone co-managed with this phone
1916     * @return an instance of an ImsPhone phone
1917     */
1918    public Phone getImsPhone();
1919
1920    /**
1921     * Start listening for IMS service UP/DOWN events.
1922     */
1923    public void startMonitoringImsService();
1924
1925    /**
1926     * Release the local instance of the ImsPhone and disconnect from
1927     * the phone.
1928     * @return the instance of the ImsPhone phone previously owned
1929     */
1930    public ImsPhone relinquishOwnershipOfImsPhone();
1931
1932    /**
1933     * Take ownership and wire-up the input ImsPhone
1934     * @param imsPhone ImsPhone to be used.
1935     */
1936    public void acquireOwnershipOfImsPhone(ImsPhone imsPhone);
1937
1938    /**
1939     * Return the service state of mImsPhone if it is STATE_IN_SERVICE
1940     * otherwise return the current voice service state
1941     */
1942    int getVoicePhoneServiceState();
1943
1944    /**
1945     * Override the service provider name and the operator name for the current ICCID.
1946     */
1947    public boolean setOperatorBrandOverride(String brand);
1948
1949    /**
1950     * Override the roaming indicator for the current ICCID.
1951     */
1952    public boolean setRoamingOverride(List<String> gsmRoamingList,
1953            List<String> gsmNonRoamingList, List<String> cdmaRoamingList,
1954            List<String> cdmaNonRoamingList);
1955
1956    /**
1957     * Is Radio Present on the device and is it accessible
1958     */
1959    public boolean isRadioAvailable();
1960
1961    /**
1962     * Is Radio turned on
1963     */
1964    public boolean isRadioOn();
1965
1966    /**
1967     * shutdown Radio gracefully
1968     */
1969    public void shutdownRadio();
1970
1971    /**
1972     *  Set phone radio capability
1973     *
1974     *  @param rc the phone radio capability defined in
1975     *         RadioCapability. It's a input object used to transfer parameter to logic modem
1976     *  @param response Callback message.
1977     */
1978    public void setRadioCapability(RadioCapability rc, Message response);
1979
1980    /**
1981     *  Get phone radio capability
1982     *
1983     *  @return the capability of the radio defined in RadioCapability
1984     */
1985    public RadioCapability getRadioCapability();
1986
1987    /**
1988     *  Get phone radio access family
1989     *
1990     *  @return a bit mask to identify the radio access family.
1991     */
1992    public int getRadioAccessFamily();
1993
1994    /**
1995     *  Get the associated data modems Id.
1996     *
1997     *  @return a String containing the id of the data modem
1998     */
1999    public String getModemUuId();
2000
2001    /**
2002     *  The RadioCapability has changed. This comes up from the RIL and is called when radios first
2003     *  become available or after a capability switch.  The flow is we use setRadioCapability to
2004     *  request a change with the RIL and get an UNSOL response with the new data which gets set
2005     *  here.
2006     *
2007     *  @param rc the phone radio capability currently in effect for this phone.
2008     */
2009    public void radioCapabilityUpdated(RadioCapability rc);
2010
2011    /**
2012     * Registers the handler when phone radio  capability is changed.
2013     *
2014     * @param h Handler for notification message.
2015     * @param what User-defined message code.
2016     * @param obj User object.
2017     */
2018    public void registerForRadioCapabilityChanged(Handler h, int what, Object obj);
2019
2020    /**
2021     * Unregister for notifications when phone radio type and access technology is changed.
2022     *
2023     * @param h Handler to be removed from the registrant list.
2024     */
2025    public void unregisterForRadioCapabilityChanged(Handler h);
2026
2027    /**
2028     * Query the IMS Registration Status.
2029     *
2030     * @return true if IMS is Registered
2031     */
2032    public boolean isImsRegistered();
2033
2034    /**
2035     * Determines if video calling is enabled for the phone.
2036     *
2037     * @return {@code true} if video calling is enabled, {@code false} otherwise.
2038     */
2039    public boolean isVideoEnabled();
2040
2041    /**
2042     * @return {@code true} if we are in emergency call back mode. This is a period where the phone
2043     * should be using as little power as possible and be ready to receive an incoming call from the
2044     * emergency operator.
2045     */
2046    public boolean isInEcm();
2047
2048    /**
2049     * Returns the Status of Wi-Fi Calling
2050     *@hide
2051     */
2052    public boolean isWifiCallingEnabled();
2053
2054     /**
2055     * Returns the Status of Volte
2056     *@hide
2057     */
2058    public boolean isVolteEnabled();
2059
2060    /**
2061     * @return {@code true} if video call is present, false otherwise.
2062     */
2063    public boolean isVideoCallPresent();
2064
2065    /**
2066     * Returns the status of Link Capacity Estimation (LCE) service.
2067     */
2068    public int getLceStatus();
2069
2070    /**
2071     * Returns the locale based on the carrier properties (such as {@code ro.carrier}) and
2072     * SIM preferences.
2073     */
2074    public Locale getLocaleFromSimAndCarrierPrefs();
2075
2076    /**
2077     * Returns the modem activity information
2078     */
2079    public void getModemActivityInfo(Message response);
2080}
2081