Home | History | Annotate | Download | only in telephony
      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 
     17 package com.android.internal.telephony;
     18 
     19 import android.content.Context;
     20 import android.net.LinkProperties;
     21 import android.net.NetworkCapabilities;
     22 import android.os.Bundle;
     23 import android.os.Handler;
     24 import android.os.Message;
     25 import android.telephony.CellInfo;
     26 import android.telephony.CellLocation;
     27 import android.telephony.PhoneStateListener;
     28 import android.telephony.ServiceState;
     29 import android.telephony.SignalStrength;
     30 
     31 import com.android.internal.telephony.imsphone.ImsPhone;
     32 import com.android.internal.telephony.RadioCapability;
     33 import com.android.internal.telephony.test.SimulatedRadioControl;
     34 import com.android.internal.telephony.uicc.IsimRecords;
     35 import com.android.internal.telephony.uicc.UiccCard;
     36 import com.android.internal.telephony.uicc.UsimServiceTable;
     37 
     38 import com.android.internal.telephony.PhoneConstants.*; // ????
     39 
     40 import java.util.List;
     41 import 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  */
     50 public 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