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.Intent;
     20 import android.os.Bundle;
     21 import android.telephony.CellInfo;
     22 import android.telephony.IccOpenLogicalChannelResponse;
     23 import android.telephony.NeighboringCellInfo;
     24 import android.telephony.RadioAccessFamily;
     25 import java.util.List;
     26 
     27 
     28 /**
     29  * Interface used to interact with the phone.  Mostly this is used by the
     30  * TelephonyManager class.  A few places are still using this directly.
     31  * Please clean them up if possible and use TelephonyManager instead.
     32  *
     33  * {@hide}
     34  */
     35 interface ITelephony {
     36 
     37     /**
     38      * Dial a number. This doesn't place the call. It displays
     39      * the Dialer screen.
     40      * @param number the number to be dialed. If null, this
     41      * would display the Dialer screen with no number pre-filled.
     42      */
     43     void dial(String number);
     44 
     45     /**
     46      * Place a call to the specified number.
     47      * @param number the number to be called.
     48      */
     49     void call(String callingPackage, String number);
     50 
     51     /**
     52      * End call if there is a call in progress, otherwise does nothing.
     53      *
     54      * @return whether it hung up
     55      */
     56     boolean endCall();
     57 
     58     /**
     59      * End call on particular subId or go to the Home screen
     60      * @param subId user preferred subId.
     61      * @return whether it hung up
     62      */
     63     boolean endCallForSubscriber(int subId);
     64 
     65     /**
     66      * Answer the currently-ringing call.
     67      *
     68      * If there's already a current active call, that call will be
     69      * automatically put on hold.  If both lines are currently in use, the
     70      * current active call will be ended.
     71      *
     72      * TODO: provide a flag to let the caller specify what policy to use
     73      * if both lines are in use.  (The current behavior is hardwired to
     74      * "answer incoming, end ongoing", which is how the CALL button
     75      * is specced to behave.)
     76      *
     77      * TODO: this should be a oneway call (especially since it's called
     78      * directly from the key queue thread).
     79      */
     80     void answerRingingCall();
     81 
     82     /**
     83      * Answer the currently-ringing call on particular subId .
     84      *
     85      * If there's already a current active call, that call will be
     86      * automatically put on hold.  If both lines are currently in use, the
     87      * current active call will be ended.
     88      *
     89      * TODO: provide a flag to let the caller specify what policy to use
     90      * if both lines are in use.  (The current behavior is hardwired to
     91      * "answer incoming, end ongoing", which is how the CALL button
     92      * is specced to behave.)
     93      *
     94      * TODO: this should be a oneway call (especially since it's called
     95      * directly from the key queue thread).
     96      */
     97     void answerRingingCallForSubscriber(int subId);
     98 
     99     /**
    100      * Silence the ringer if an incoming call is currently ringing.
    101      * (If vibrating, stop the vibrator also.)
    102      *
    103      * It's safe to call this if the ringer has already been silenced, or
    104      * even if there's no incoming call.  (If so, this method will do nothing.)
    105      *
    106      * TODO: this should be a oneway call too (see above).
    107      *       (Actually *all* the methods here that return void can
    108      *       probably be oneway.)
    109      */
    110     void silenceRinger();
    111 
    112     /**
    113      * Check if we are in either an active or holding call
    114      * @return true if the phone state is OFFHOOK.
    115      */
    116     boolean isOffhook();
    117 
    118     /**
    119      * Check if a particular subId has an active or holding call
    120      *
    121      * @param subId user preferred subId.
    122      * @return true if the phone state is OFFHOOK.
    123      */
    124     boolean isOffhookForSubscriber(int subId);
    125 
    126     /**
    127      * Check if an incoming phone call is ringing or call waiting
    128      * on a particular subId.
    129      *
    130      * @param subId user preferred subId.
    131      * @return true if the phone state is RINGING.
    132      */
    133     boolean isRingingForSubscriber(int subId);
    134 
    135     /**
    136      * Check if an incoming phone call is ringing or call waiting.
    137      * @return true if the phone state is RINGING.
    138      */
    139     boolean isRinging();
    140 
    141     /**
    142      * Check if the phone is idle.
    143      * @return true if the phone state is IDLE.
    144      */
    145     boolean isIdle();
    146 
    147     /**
    148      * Check if the phone is idle on a particular subId.
    149      *
    150      * @param subId user preferred subId.
    151      * @return true if the phone state is IDLE.
    152      */
    153     boolean isIdleForSubscriber(int subId);
    154 
    155     /**
    156      * Check to see if the radio is on or not.
    157      * @return returns true if the radio is on.
    158      */
    159     boolean isRadioOn();
    160 
    161     /**
    162      * Check to see if the radio is on or not on particular subId.
    163      * @param subId user preferred subId.
    164      * @return returns true if the radio is on.
    165      */
    166     boolean isRadioOnForSubscriber(int subId);
    167 
    168     /**
    169      * Check if the SIM pin lock is enabled.
    170      * @return true if the SIM pin lock is enabled.
    171      */
    172     boolean isSimPinEnabled();
    173 
    174     /**
    175      * Supply a pin to unlock the SIM.  Blocks until a result is determined.
    176      * @param pin The pin to check.
    177      * @return whether the operation was a success.
    178      */
    179     boolean supplyPin(String pin);
    180 
    181     /**
    182      * Supply a pin to unlock the SIM for particular subId.
    183      * Blocks until a result is determined.
    184      * @param pin The pin to check.
    185      * @param subId user preferred subId.
    186      * @return whether the operation was a success.
    187      */
    188     boolean supplyPinForSubscriber(int subId, String pin);
    189 
    190     /**
    191      * Supply puk to unlock the SIM and set SIM pin to new pin.
    192      *  Blocks until a result is determined.
    193      * @param puk The puk to check.
    194      *        pin The new pin to be set in SIM
    195      * @return whether the operation was a success.
    196      */
    197     boolean supplyPuk(String puk, String pin);
    198 
    199     /**
    200      * Supply puk to unlock the SIM and set SIM pin to new pin.
    201      *  Blocks until a result is determined.
    202      * @param puk The puk to check.
    203      *        pin The new pin to be set in SIM
    204      * @param subId user preferred subId.
    205      * @return whether the operation was a success.
    206      */
    207     boolean supplyPukForSubscriber(int subId, String puk, String pin);
    208 
    209     /**
    210      * Supply a pin to unlock the SIM.  Blocks until a result is determined.
    211      * Returns a specific success/error code.
    212      * @param pin The pin to check.
    213      * @return retValue[0] = Phone.PIN_RESULT_SUCCESS on success. Otherwise error code
    214      *         retValue[1] = number of attempts remaining if known otherwise -1
    215      */
    216     int[] supplyPinReportResult(String pin);
    217 
    218     /**
    219      * Supply a pin to unlock the SIM.  Blocks until a result is determined.
    220      * Returns a specific success/error code.
    221      * @param pin The pin to check.
    222      * @return retValue[0] = Phone.PIN_RESULT_SUCCESS on success. Otherwise error code
    223      *         retValue[1] = number of attempts remaining if known otherwise -1
    224      */
    225     int[] supplyPinReportResultForSubscriber(int subId, String pin);
    226 
    227     /**
    228      * Supply puk to unlock the SIM and set SIM pin to new pin.
    229      * Blocks until a result is determined.
    230      * Returns a specific success/error code
    231      * @param puk The puk to check
    232      *        pin The pin to check.
    233      * @return retValue[0] = Phone.PIN_RESULT_SUCCESS on success. Otherwise error code
    234      *         retValue[1] = number of attempts remaining if known otherwise -1
    235      */
    236     int[] supplyPukReportResult(String puk, String pin);
    237 
    238     /**
    239      * Supply puk to unlock the SIM and set SIM pin to new pin.
    240      * Blocks until a result is determined.
    241      * Returns a specific success/error code
    242      * @param puk The puk to check
    243      *        pin The pin to check.
    244      * @return retValue[0] = Phone.PIN_RESULT_SUCCESS on success. Otherwise error code
    245      *         retValue[1] = number of attempts remaining if known otherwise -1
    246      */
    247     int[] supplyPukReportResultForSubscriber(int subId, String puk, String pin);
    248 
    249     /**
    250      * Handles PIN MMI commands (PIN/PIN2/PUK/PUK2), which are initiated
    251      * without SEND (so <code>dial</code> is not appropriate).
    252      *
    253      * @param dialString the MMI command to be executed.
    254      * @return true if MMI command is executed.
    255      */
    256     boolean handlePinMmi(String dialString);
    257 
    258     /**
    259      * Handles PIN MMI commands (PIN/PIN2/PUK/PUK2), which are initiated
    260      * without SEND (so <code>dial</code> is not appropriate) for
    261      * a particular subId.
    262      * @param dialString the MMI command to be executed.
    263      * @param subId user preferred subId.
    264      * @return true if MMI command is executed.
    265      */
    266     boolean handlePinMmiForSubscriber(int subId, String dialString);
    267 
    268     /**
    269      * Toggles the radio on or off.
    270      */
    271     void toggleRadioOnOff();
    272 
    273     /**
    274      * Toggles the radio on or off on particular subId.
    275      * @param subId user preferred subId.
    276      */
    277     void toggleRadioOnOffForSubscriber(int subId);
    278 
    279     /**
    280      * Set the radio to on or off
    281      */
    282     boolean setRadio(boolean turnOn);
    283 
    284     /**
    285      * Set the radio to on or off on particular subId.
    286      * @param subId user preferred subId.
    287      */
    288     boolean setRadioForSubscriber(int subId, boolean turnOn);
    289 
    290     /**
    291      * Set the radio to on or off unconditionally
    292      */
    293     boolean setRadioPower(boolean turnOn);
    294 
    295     /**
    296      * Request to update location information in service state
    297      */
    298     void updateServiceLocation();
    299 
    300     /**
    301      * Request to update location information for a subscrition in service state
    302      * @param subId user preferred subId.
    303      */
    304     void updateServiceLocationForSubscriber(int subId);
    305 
    306     /**
    307      * Enable location update notifications.
    308      */
    309     void enableLocationUpdates();
    310 
    311     /**
    312      * Enable location update notifications.
    313      * @param subId user preferred subId.
    314      */
    315     void enableLocationUpdatesForSubscriber(int subId);
    316 
    317     /**
    318      * Disable location update notifications.
    319      */
    320     void disableLocationUpdates();
    321 
    322     /**
    323      * Disable location update notifications.
    324      * @param subId user preferred subId.
    325      */
    326     void disableLocationUpdatesForSubscriber(int subId);
    327 
    328     /**
    329      * Allow mobile data connections.
    330      */
    331     boolean enableDataConnectivity();
    332 
    333     /**
    334      * Disallow mobile data connections.
    335      */
    336     boolean disableDataConnectivity();
    337 
    338     /**
    339      * Report whether data connectivity is possible.
    340      */
    341     boolean isDataConnectivityPossible();
    342 
    343     Bundle getCellLocation();
    344 
    345     /**
    346      * Returns the neighboring cell information of the device.
    347      */
    348     List<NeighboringCellInfo> getNeighboringCellInfo(String callingPkg);
    349 
    350      int getCallState();
    351 
    352     /**
    353      * Returns the call state for a subId.
    354      */
    355      int getCallStateForSubscriber(int subId);
    356 
    357      int getDataActivity();
    358      int getDataState();
    359 
    360     /**
    361      * Returns the current active phone type as integer.
    362      * Returns TelephonyManager.PHONE_TYPE_CDMA if RILConstants.CDMA_PHONE
    363      * and TelephonyManager.PHONE_TYPE_GSM if RILConstants.GSM_PHONE
    364      */
    365     int getActivePhoneType();
    366 
    367     /**
    368      * Returns the current active phone type as integer for particular subId.
    369      * Returns TelephonyManager.PHONE_TYPE_CDMA if RILConstants.CDMA_PHONE
    370      * and TelephonyManager.PHONE_TYPE_GSM if RILConstants.GSM_PHONE
    371      * @param subId user preferred subId.
    372      */
    373     int getActivePhoneTypeForSubscriber(int subId);
    374 
    375     /**
    376      * Returns the CDMA ERI icon index to display
    377      */
    378     int getCdmaEriIconIndex();
    379 
    380     /**
    381      * Returns the CDMA ERI icon index to display on particular subId.
    382      * @param subId user preferred subId.
    383      */
    384     int getCdmaEriIconIndexForSubscriber(int subId);
    385 
    386     /**
    387      * Returns the CDMA ERI icon mode,
    388      * 0 - ON
    389      * 1 - FLASHING
    390      */
    391     int getCdmaEriIconMode();
    392 
    393     /**
    394      * Returns the CDMA ERI icon mode on particular subId,
    395      * 0 - ON
    396      * 1 - FLASHING
    397      * @param subId user preferred subId.
    398      */
    399     int getCdmaEriIconModeForSubscriber(int subId);
    400 
    401     /**
    402      * Returns the CDMA ERI text,
    403      */
    404     String getCdmaEriText();
    405 
    406     /**
    407      * Returns the CDMA ERI text for particular subId,
    408      * @param subId user preferred subId.
    409      */
    410     String getCdmaEriTextForSubscriber(int subId);
    411 
    412     /**
    413      * Returns true if OTA service provisioning needs to run.
    414      * Only relevant on some technologies, others will always
    415      * return false.
    416      */
    417     boolean needsOtaServiceProvisioning();
    418 
    419     /**
    420      * Sets the voicemail number for a particular subscriber.
    421      */
    422     boolean setVoiceMailNumber(int subId, String alphaTag, String number);
    423 
    424     /**
    425       * Returns the unread count of voicemails
    426       */
    427     int getVoiceMessageCount();
    428 
    429     /**
    430      * Returns the unread count of voicemails for a subId.
    431      * @param subId user preferred subId.
    432      * Returns the unread count of voicemails
    433      */
    434     int getVoiceMessageCountForSubscriber(int subId);
    435 
    436     /**
    437       * Returns the network type for data transmission
    438       */
    439     int getNetworkType();
    440 
    441     /**
    442      * Returns the network type of a subId.
    443      * @param subId user preferred subId.
    444      * Returns the network type
    445      */
    446     int getNetworkTypeForSubscriber(int subId);
    447 
    448     /**
    449       * Returns the network type for data transmission
    450       */
    451     int getDataNetworkType();
    452 
    453     /**
    454       * Returns the data network type of a subId
    455       * @param subId user preferred subId.
    456       * Returns the network type
    457       */
    458     int getDataNetworkTypeForSubscriber(int subId);
    459 
    460     /**
    461       * Returns the network type for voice
    462       */
    463     int getVoiceNetworkType();
    464 
    465     /**
    466       * Returns the voice network type of a subId
    467       * @param subId user preferred subId.
    468       * Returns the network type
    469       */
    470     int getVoiceNetworkTypeForSubscriber(int subId);
    471 
    472     /**
    473      * Return true if an ICC card is present
    474      */
    475     boolean hasIccCard();
    476 
    477     /**
    478      * Return true if an ICC card is present for a subId.
    479      * @param slotId user preferred slotId.
    480      * Return true if an ICC card is present
    481      */
    482     boolean hasIccCardUsingSlotId(int slotId);
    483 
    484     /**
    485      * Return if the current radio is LTE on CDMA. This
    486      * is a tri-state return value as for a period of time
    487      * the mode may be unknown.
    488      *
    489      * @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
    490      * or {@link PHone#LTE_ON_CDMA_TRUE}
    491      */
    492     int getLteOnCdmaMode();
    493 
    494     /**
    495      * Return if the current radio is LTE on CDMA. This
    496      * is a tri-state return value as for a period of time
    497      * the mode may be unknown.
    498      *
    499      * @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
    500      * or {@link PHone#LTE_ON_CDMA_TRUE}
    501      */
    502     int getLteOnCdmaModeForSubscriber(int subId);
    503 
    504     /**
    505      * Returns the all observed cell information of the device.
    506      */
    507     List<CellInfo> getAllCellInfo();
    508 
    509     /**
    510      * Sets minimum time in milli-seconds between onCellInfoChanged
    511      */
    512     void setCellInfoListRate(int rateInMillis);
    513 
    514     /**
    515      * get default sim
    516      * @return sim id
    517      */
    518     int getDefaultSim();
    519 
    520     /**
    521      * Opens a logical channel to the ICC card.
    522      *
    523      * Input parameters equivalent to TS 27.007 AT+CCHO command.
    524      *
    525      * @param AID Application id. See ETSI 102.221 and 101.220.
    526      * @return an IccOpenLogicalChannelResponse object.
    527      */
    528     IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID);
    529 
    530     /**
    531      * Closes a previously opened logical channel to the ICC card.
    532      *
    533      * Input parameters equivalent to TS 27.007 AT+CCHC command.
    534      *
    535      * @param channel is the channel id to be closed as retruned by a
    536      *            successful iccOpenLogicalChannel.
    537      * @return true if the channel was closed successfully.
    538      */
    539     boolean iccCloseLogicalChannel(int channel);
    540 
    541     /**
    542      * Transmit an APDU to the ICC card over a logical channel.
    543      *
    544      * Input parameters equivalent to TS 27.007 AT+CGLA command.
    545      *
    546      * @param channel is the channel id to be closed as retruned by a
    547      *            successful iccOpenLogicalChannel.
    548      * @param cla Class of the APDU command.
    549      * @param instruction Instruction of the APDU command.
    550      * @param p1 P1 value of the APDU command.
    551      * @param p2 P2 value of the APDU command.
    552      * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU
    553      *            is sent to the SIM.
    554      * @param data Data to be sent with the APDU.
    555      * @return The APDU response from the ICC card with the status appended at
    556      *            the end.
    557      */
    558     String iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
    559             int p1, int p2, int p3, String data);
    560 
    561     /**
    562      * Transmit an APDU to the ICC card over the basic channel.
    563      *
    564      * Input parameters equivalent to TS 27.007 AT+CSIM command.
    565      *
    566      * @param cla Class of the APDU command.
    567      * @param instruction Instruction of the APDU command.
    568      * @param p1 P1 value of the APDU command.
    569      * @param p2 P2 value of the APDU command.
    570      * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU
    571      *            is sent to the SIM.
    572      * @param data Data to be sent with the APDU.
    573      * @return The APDU response from the ICC card with the status appended at
    574      *            the end.
    575      */
    576     String iccTransmitApduBasicChannel(int cla, int instruction,
    577             int p1, int p2, int p3, String data);
    578 
    579     /**
    580      * Returns the response APDU for a command APDU sent through SIM_IO.
    581      *
    582      * @param fileID
    583      * @param command
    584      * @param p1 P1 value of the APDU command.
    585      * @param p2 P2 value of the APDU command.
    586      * @param p3 P3 value of the APDU command.
    587      * @param filePath
    588      * @return The APDU response.
    589      */
    590     byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3,
    591             String filePath);
    592 
    593     /**
    594      * Send ENVELOPE to the SIM and returns the response.
    595      *
    596      * @param contents  String containing SAT/USAT response in hexadecimal
    597      *                  format starting with command tag. See TS 102 223 for
    598      *                  details.
    599      * @return The APDU response from the ICC card, with the last 4 bytes
    600      *         being the status word. If the command fails, returns an empty
    601      *         string.
    602      */
    603     String sendEnvelopeWithStatus(String content);
    604 
    605     /**
    606      * Read one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
    607      * Used for device configuration by some CDMA operators.
    608      *
    609      * @param itemID the ID of the item to read.
    610      * @return the NV item as a String, or null on any failure.
    611      */
    612     String nvReadItem(int itemID);
    613 
    614     /**
    615      * Write one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
    616      * Used for device configuration by some CDMA operators.
    617      *
    618      * @param itemID the ID of the item to read.
    619      * @param itemValue the value to write, as a String.
    620      * @return true on success; false on any failure.
    621      */
    622     boolean nvWriteItem(int itemID, String itemValue);
    623 
    624     /**
    625      * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage.
    626      * Used for device configuration by some CDMA operators.
    627      *
    628      * @param preferredRoamingList byte array containing the new PRL.
    629      * @return true on success; false on any failure.
    630      */
    631     boolean nvWriteCdmaPrl(in byte[] preferredRoamingList);
    632 
    633     /**
    634      * Perform the specified type of NV config reset. The radio will be taken offline
    635      * and the device must be rebooted after the operation. Used for device
    636      * configuration by some CDMA operators.
    637      *
    638      * @param resetType the type of reset to perform (1 == factory reset; 2 == NV-only reset).
    639      * @return true on success; false on any failure.
    640      */
    641     boolean nvResetConfig(int resetType);
    642 
    643     /*
    644      * Get the calculated preferred network type.
    645      * Used for device configuration by some CDMA operators.
    646      *
    647      * @return the calculated preferred network type, defined in RILConstants.java.
    648      */
    649     int getCalculatedPreferredNetworkType();
    650 
    651     /*
    652      * Get the preferred network type.
    653      * Used for device configuration by some CDMA operators.
    654      *
    655      * @return the preferred network type, defined in RILConstants.java.
    656      */
    657     int getPreferredNetworkType();
    658 
    659     /**
    660      * Check TETHER_DUN_REQUIRED and TETHER_DUN_APN settings, net.tethering.noprovisioning
    661      * SystemProperty, and config_tether_apndata to decide whether DUN APN is required for
    662      * tethering.
    663      *
    664      * @return 0: Not required. 1: required. 2: Not set.
    665      */
    666     int getTetherApnRequired();
    667 
    668     /**
    669      * Set the preferred network type.
    670      * Used for device configuration by some CDMA operators.
    671      *
    672      * @param networkType the preferred network type, defined in RILConstants.java.
    673      * @return true on success; false on any failure.
    674      */
    675     boolean setPreferredNetworkType(int networkType);
    676 
    677     /**
    678      * User enable/disable Mobile Data.
    679      *
    680      * @param enable true to turn on, else false
    681      */
    682     void setDataEnabled(int subId, boolean enable);
    683 
    684     /**
    685      * Get the user enabled state of Mobile Data.
    686      *
    687      * @return true on enabled
    688      */
    689     boolean getDataEnabled(int subId);
    690 
    691     /**
    692      * Get P-CSCF address from PCO after data connection is established or modified.
    693      * @param apnType the apnType, "ims" for IMS APN, "emergency" for EMERGENCY APN
    694      */
    695     String[] getPcscfAddress(String apnType);
    696 
    697     /**
    698      * Set IMS registration state
    699      */
    700     void setImsRegistrationState(boolean registered);
    701 
    702     /**
    703      * Return MDN string for CDMA phone.
    704      * @param subId user preferred subId.
    705      */
    706     String getCdmaMdn(int subId);
    707 
    708     /**
    709      * Return MIN string for CDMA phone.
    710      * @param subId user preferred subId.
    711      */
    712     String getCdmaMin(int subId);
    713 
    714     /**
    715      * Has the calling application been granted special privileges by the carrier.
    716      *
    717      * If any of the packages in the calling UID has carrier privileges, the
    718      * call will return true. This access is granted by the owner of the UICC
    719      * card and does not depend on the registered carrier.
    720      *
    721      * TODO: Add a link to documentation.
    722      *
    723      * @return carrier privilege status defined in TelephonyManager.
    724      */
    725     int getCarrierPrivilegeStatus();
    726 
    727     /**
    728      * Similar to above, but check for pkg whose name is pkgname.
    729      */
    730     int checkCarrierPrivilegesForPackage(String pkgname);
    731 
    732     /**
    733      * Returns the package name of the carrier apps that should handle the input intent.
    734      *
    735      * @param packageManager PackageManager for getting receivers.
    736      * @param intent Intent that will be sent.
    737      * @return list of carrier app package names that can handle the intent.
    738      *         Returns null if there is an error and an empty list if there
    739      *         are no matching packages.
    740      */
    741     List<String> getCarrierPackageNamesForIntent(in Intent intent);
    742 
    743     /**
    744      * Set the line 1 phone number string and its alphatag for the current ICCID
    745      * for display purpose only, for example, displayed in Phone Status. It won't
    746      * change the actual MSISDN/MDN. To unset alphatag or number, pass in a null
    747      * value.
    748      *
    749      * @param subId the subscriber that the alphatag and dialing number belongs to.
    750      * @param alphaTag alpha-tagging of the dailing nubmer
    751      * @param number The dialing number
    752      * @return true if the operation was executed correctly.
    753      */
    754     boolean setLine1NumberForDisplayForSubscriber(int subId, String alphaTag, String number);
    755 
    756     /**
    757      * Returns the displayed dialing number string if it was set previously via
    758      * {@link #setLine1NumberForDisplay}. Otherwise returns null.
    759      *
    760      * @param subId whose dialing number for line 1 is returned.
    761      * @return the displayed dialing number if set, or null if not set.
    762      */
    763     String getLine1NumberForDisplay(int subId);
    764 
    765     /**
    766      * Returns the displayed alphatag of the dialing number if it was set
    767      * previously via {@link #setLine1NumberForDisplay}. Otherwise returns null.
    768      *
    769      * @param subId whose alphatag associated with line 1 is returned.
    770      * @return the displayed alphatag of the dialing number if set, or null if
    771      *         not set.
    772      */
    773     String getLine1AlphaTagForDisplay(int subId);
    774 
    775     String[] getMergedSubscriberIds();
    776 
    777     /**
    778      * Override the operator branding for the current ICCID.
    779      *
    780      * Once set, whenever the SIM is present in the device, the service
    781      * provider name (SPN) and the operator name will both be replaced by the
    782      * brand value input. To unset the value, the same function should be
    783      * called with a null brand value.
    784      *
    785      * <p>Requires Permission:
    786      *   {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}
    787      *  or has to be carrier app - see #hasCarrierPrivileges.
    788      *
    789      * @param brand The brand name to display/set.
    790      * @return true if the operation was executed correctly.
    791      */
    792     boolean setOperatorBrandOverride(String brand);
    793 
    794     /**
    795      * Override the roaming indicator for the current ICCID.
    796      *
    797      * Using this call, the carrier app (see #hasCarrierPrivileges) can override
    798      * the platform's notion of a network operator being considered roaming or not.
    799      * The change only affects the ICCID that was active when this call was made.
    800      *
    801      * If null is passed as any of the input, the corresponding value is deleted.
    802      *
    803      * <p>Requires that the caller have carrier privilege. See #hasCarrierPrivileges.
    804      *
    805      * @param gsmRoamingList - List of MCCMNCs to be considered roaming for 3GPP RATs.
    806      * @param gsmNonRoamingList - List of MCCMNCs to be considered not roaming for 3GPP RATs.
    807      * @param cdmaRoamingList - List of SIDs to be considered roaming for 3GPP2 RATs.
    808      * @param cdmaNonRoamingList - List of SIDs to be considered not roaming for 3GPP2 RATs.
    809      * @return true if the operation was executed correctly.
    810      */
    811     boolean setRoamingOverride(in List<String> gsmRoamingList,
    812             in List<String> gsmNonRoamingList, in List<String> cdmaRoamingList,
    813             in List<String> cdmaNonRoamingList);
    814 
    815     /**
    816      * Returns the result and response from RIL for oem request
    817      *
    818      * @param oemReq the data is sent to ril.
    819      * @param oemResp the respose data from RIL.
    820      * @return negative value request was not handled or get error
    821      *         0 request was handled succesfully, but no response data
    822      *         positive value success, data length of response
    823      */
    824     int invokeOemRilRequestRaw(in byte[] oemReq, out byte[] oemResp);
    825 
    826     /**
    827      * Check if any mobile Radios need to be shutdown.
    828      *
    829      * @return true is any mobile radio needs to be shutdown
    830      */
    831     boolean needMobileRadioShutdown();
    832 
    833     /**
    834      * Shutdown Mobile Radios
    835      */
    836     void shutdownMobileRadios();
    837 
    838     /**
    839      * Set phone radio type and access technology.
    840      *
    841      * @param rafs an RadioAccessFamily array to indicate all phone's
    842      *        new radio access family. The length of RadioAccessFamily
    843      *        must equ]]al to phone count.
    844      */
    845     void setRadioCapability(in RadioAccessFamily[] rafs);
    846 
    847     /**
    848      * Get phone radio type and access technology.
    849      *
    850      * @param phoneId which phone you want to get
    851      * @return phone radio type and access technology
    852      */
    853     int getRadioAccessFamily(in int phoneId);
    854 
    855     /**
    856      * Enables or disables video calling.
    857      *
    858      * @param enable Whether to enable video calling.
    859      */
    860     void enableVideoCalling(boolean enable);
    861 
    862     /**
    863      * Whether video calling has been enabled by the user.
    864      *
    865      * @return {@code True} if the user has enabled video calling, {@code false} otherwise.
    866      */
    867     boolean isVideoCallingEnabled();
    868 
    869     /**
    870      * Get IMS Registration Status
    871      */
    872     boolean isImsRegistered();
    873 
    874     /**
    875       * Returns the unique device ID of phone, for example, the IMEI for
    876       * GSM and the MEID for CDMA phones. Return null if device ID is not available.
    877       *
    878       * <p>Requires Permission:
    879       *   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
    880       */
    881     String getDeviceId();
    882 }
    883