Home | History | Annotate | Download | only in telecom
      1 /*
      2  * Copyright (C) 2014 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 android.telecom;
     18 
     19 import android.os.RemoteException;
     20 
     21 import com.android.internal.telecom.IInCallAdapter;
     22 
     23 /**
     24  * Receives commands from {@link InCallService} implementations which should be executed by
     25  * Telecom. When Telecom binds to a {@link InCallService}, an instance of this class is given to
     26  * the in-call service through which it can manipulate live (active, dialing, ringing) calls. When
     27  * the in-call service is notified of new calls, it can use the
     28  * given call IDs to execute commands such as {@link #answerCall} for incoming calls or
     29  * {@link #disconnectCall} for active calls the user would like to end. Some commands are only
     30  * appropriate for calls in certain states; please consult each method for such limitations.
     31  * <p>
     32  * The adapter will stop functioning when there are no more calls.
     33  *
     34  * {@hide}
     35  */
     36 public final class InCallAdapter {
     37     private final IInCallAdapter mAdapter;
     38 
     39     /**
     40      * {@hide}
     41      */
     42     public InCallAdapter(IInCallAdapter adapter) {
     43         mAdapter = adapter;
     44     }
     45 
     46     /**
     47      * Instructs Telecom to answer the specified call.
     48      *
     49      * @param callId The identifier of the call to answer.
     50      * @param videoState The video state in which to answer the call.
     51      */
     52     public void answerCall(String callId, int videoState) {
     53         try {
     54             mAdapter.answerCall(callId, videoState);
     55         } catch (RemoteException e) {
     56         }
     57     }
     58 
     59     /**
     60      * Instructs Telecom to reject the specified call.
     61      *
     62      * @param callId The identifier of the call to reject.
     63      * @param rejectWithMessage Whether to reject with a text message.
     64      * @param textMessage An optional text message with which to respond.
     65      */
     66     public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
     67         try {
     68             mAdapter.rejectCall(callId, rejectWithMessage, textMessage);
     69         } catch (RemoteException e) {
     70         }
     71     }
     72 
     73     /**
     74      * Instructs Telecom to disconnect the specified call.
     75      *
     76      * @param callId The identifier of the call to disconnect.
     77      */
     78     public void disconnectCall(String callId) {
     79         try {
     80             mAdapter.disconnectCall(callId);
     81         } catch (RemoteException e) {
     82         }
     83     }
     84 
     85     /**
     86      * Instructs Telecom to put the specified call on hold.
     87      *
     88      * @param callId The identifier of the call to put on hold.
     89      */
     90     public void holdCall(String callId) {
     91         try {
     92             mAdapter.holdCall(callId);
     93         } catch (RemoteException e) {
     94         }
     95     }
     96 
     97     /**
     98      * Instructs Telecom to release the specified call from hold.
     99      *
    100      * @param callId The identifier of the call to release from hold.
    101      */
    102     public void unholdCall(String callId) {
    103         try {
    104             mAdapter.unholdCall(callId);
    105         } catch (RemoteException e) {
    106         }
    107     }
    108 
    109     /**
    110      * Mute the microphone.
    111      *
    112      * @param shouldMute True if the microphone should be muted.
    113      */
    114     public void mute(boolean shouldMute) {
    115         try {
    116             mAdapter.mute(shouldMute);
    117         } catch (RemoteException e) {
    118         }
    119     }
    120 
    121     /**
    122      * Sets the audio route (speaker, bluetooth, etc...). See {@link AudioState}.
    123      *
    124      * @param route The audio route to use.
    125      */
    126     public void setAudioRoute(int route) {
    127         try {
    128             mAdapter.setAudioRoute(route);
    129         } catch (RemoteException e) {
    130         }
    131     }
    132 
    133     /**
    134      * Instructs Telecom to play a dual-tone multi-frequency signaling (DTMF) tone in a call.
    135      *
    136      * Any other currently playing DTMF tone in the specified call is immediately stopped.
    137      *
    138      * @param callId The unique ID of the call in which the tone will be played.
    139      * @param digit A character representing the DTMF digit for which to play the tone. This
    140      *         value must be one of {@code '0'} through {@code '9'}, {@code '*'} or {@code '#'}.
    141      */
    142     public void playDtmfTone(String callId, char digit) {
    143         try {
    144             mAdapter.playDtmfTone(callId, digit);
    145         } catch (RemoteException e) {
    146         }
    147     }
    148 
    149     /**
    150      * Instructs Telecom to stop any dual-tone multi-frequency signaling (DTMF) tone currently
    151      * playing.
    152      *
    153      * DTMF tones are played by calling {@link #playDtmfTone(String,char)}. If no DTMF tone is
    154      * currently playing, this method will do nothing.
    155      *
    156      * @param callId The unique ID of the call in which any currently playing tone will be stopped.
    157      */
    158     public void stopDtmfTone(String callId) {
    159         try {
    160             mAdapter.stopDtmfTone(callId);
    161         } catch (RemoteException e) {
    162         }
    163     }
    164 
    165     /**
    166      * Instructs Telecom to continue playing a post-dial DTMF string.
    167      *
    168      * A post-dial DTMF string is a string of digits entered after a phone number, when dialed,
    169      * that are immediately sent as DTMF tones to the recipient as soon as the connection is made.
    170      * While these tones are playing, Telecom will notify the {@link InCallService} that the call
    171      * is in the post dial state.
    172      *
    173      * If the DTMF string contains a {@link TelecomManager#DTMF_CHARACTER_PAUSE} symbol, Telecom
    174      * will temporarily pause playing the tones for a pre-defined period of time.
    175      *
    176      * If the DTMF string contains a {@link TelecomManager#DTMF_CHARACTER_WAIT} symbol, Telecom
    177      * will pause playing the tones and notify the {@link InCallService} that the call is in the
    178      * post dial wait state. When the user decides to continue the postdial sequence, the
    179      * {@link InCallService} should invoke the {@link #postDialContinue(String,boolean)} method.
    180      *
    181      * @param callId The unique ID of the call for which postdial string playing should continue.
    182      * @param proceed Whether or not to continue with the post-dial sequence.
    183      */
    184     public void postDialContinue(String callId, boolean proceed) {
    185         try {
    186             mAdapter.postDialContinue(callId, proceed);
    187         } catch (RemoteException e) {
    188         }
    189     }
    190 
    191     /**
    192      * Instructs Telecom to add a PhoneAccountHandle to the specified call
    193      *
    194      * @param callId The identifier of the call
    195      * @param accountHandle The PhoneAccountHandle through which to place the call
    196      */
    197     public void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle) {
    198         try {
    199             mAdapter.phoneAccountSelected(callId, accountHandle);
    200         } catch (RemoteException e) {
    201         }
    202     }
    203 
    204     /**
    205      * Instructs Telecom to conference the specified call.
    206      *
    207      * @param callId The unique ID of the call.
    208      * @hide
    209      */
    210     public void conference(String callId, String otherCallId) {
    211         try {
    212             mAdapter.conference(callId, otherCallId);
    213         } catch (RemoteException ignored) {
    214         }
    215     }
    216 
    217     /**
    218      * Instructs Telecom to split the specified call from any conference call with which it may be
    219      * connected.
    220      *
    221      * @param callId The unique ID of the call.
    222      * @hide
    223      */
    224     public void splitFromConference(String callId) {
    225         try {
    226             mAdapter.splitFromConference(callId);
    227         } catch (RemoteException ignored) {
    228         }
    229     }
    230 
    231     /**
    232      * Instructs Telecom to merge child calls of the specified conference call.
    233      */
    234     public void mergeConference(String callId) {
    235         try {
    236             mAdapter.mergeConference(callId);
    237         } catch (RemoteException ignored) {
    238         }
    239     }
    240 
    241     /**
    242      * Instructs Telecom to swap the child calls of the specified conference call.
    243      */
    244     public void swapConference(String callId) {
    245         try {
    246             mAdapter.swapConference(callId);
    247         } catch (RemoteException ignored) {
    248         }
    249     }
    250 
    251     /**
    252      * Instructs Telecom to turn the proximity sensor on.
    253      */
    254     public void turnProximitySensorOn() {
    255         try {
    256             mAdapter.turnOnProximitySensor();
    257         } catch (RemoteException ignored) {
    258         }
    259     }
    260 
    261     /**
    262      * Instructs Telecom to turn the proximity sensor off.
    263      *
    264      * @param screenOnImmediately If true, the screen will be turned on immediately if it was
    265      * previously off. Otherwise, the screen will only be turned on after the proximity sensor
    266      * is no longer triggered.
    267      */
    268     public void turnProximitySensorOff(boolean screenOnImmediately) {
    269         try {
    270             mAdapter.turnOffProximitySensor(screenOnImmediately);
    271         } catch (RemoteException ignored) {
    272         }
    273     }
    274 }
    275