1 /* 2 * Copyright (C) 2018 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.telephony.ims.compat.stub; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.compat.annotation.UnsupportedAppUsage; 22 import android.os.Build; 23 import android.os.Message; 24 import android.os.RemoteException; 25 import android.telephony.CallQuality; 26 import android.telephony.ServiceState; 27 import android.telephony.ims.ImsCallProfile; 28 import android.telephony.ims.ImsCallSession; 29 import android.telephony.ims.ImsConferenceState; 30 import android.telephony.ims.ImsReasonInfo; 31 import android.telephony.ims.ImsStreamMediaProfile; 32 import android.telephony.ims.ImsSuppServiceNotification; 33 import android.telephony.ims.RtpHeaderExtension; 34 import android.telephony.ims.aidl.IImsCallSessionListener; 35 36 import com.android.ims.internal.IImsCallSession; 37 import com.android.ims.internal.IImsVideoCallProvider; 38 39 import java.util.List; 40 41 /** 42 * Compat implementation of ImsCallSessionImplBase for older implementations. 43 * 44 * DO NOT remove or change the existing APIs, only add new ones to this Base implementation or you 45 * will break other implementations of ImsCallSession maintained by other ImsServices. 46 * 47 * @hide 48 */ 49 50 public class ImsCallSessionImplBase extends IImsCallSession.Stub { 51 52 @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) ImsCallSessionImplBase()53 public ImsCallSessionImplBase() { 54 } 55 56 @Override 57 // convert to old implementation of listener setListener(IImsCallSessionListener listener)58 public final void setListener(IImsCallSessionListener listener) 59 throws RemoteException { 60 setListener(new ImsCallSessionListenerConverter(listener)); 61 } 62 63 /** 64 * Sets the listener to listen to the session events. An {@link ImsCallSession} 65 * can only hold one listener at a time. Subsequent calls to this method 66 * override the previous listener. 67 * 68 * @param listener to listen to the session events of this object 69 */ setListener(com.android.ims.internal.IImsCallSessionListener listener)70 public void setListener(com.android.ims.internal.IImsCallSessionListener listener) { 71 72 } 73 74 /** 75 * Closes the object. This {@link ImsCallSessionImplBase} is not usable after being closed. 76 */ 77 @Override close()78 public void close() { 79 80 } 81 82 /** 83 * @return A String containing the unique call ID of this {@link ImsCallSessionImplBase}. 84 */ 85 @Override getCallId()86 public String getCallId() { 87 return null; 88 } 89 90 /** 91 * @return The {@link ImsCallProfile} that this {@link ImsCallSessionImplBase} is associated 92 * with. 93 */ 94 @Override getCallProfile()95 public ImsCallProfile getCallProfile() { 96 return null; 97 } 98 99 /** 100 * @return The local {@link ImsCallProfile} that this {@link ImsCallSessionImplBase} is 101 * associated with. 102 */ 103 @Override getLocalCallProfile()104 public ImsCallProfile getLocalCallProfile() { 105 return null; 106 } 107 108 /** 109 * @return The remote {@link ImsCallProfile} that this {@link ImsCallSessionImplBase} is 110 * associated with. 111 */ 112 @Override getRemoteCallProfile()113 public ImsCallProfile getRemoteCallProfile() { 114 return null; 115 } 116 117 /** 118 * @param name The String extra key. 119 * @return The string extra value associated with the specified property. 120 */ 121 @Override getProperty(String name)122 public String getProperty(String name) { 123 return null; 124 } 125 126 /** 127 * @return The {@link ImsCallSessionImplBase} state. 128 */ 129 @Override getState()130 public int getState() { 131 return -1; 132 } 133 134 /** 135 * @return true if the {@link ImsCallSessionImplBase} is in a call, false otherwise. 136 */ 137 @Override isInCall()138 public boolean isInCall() { 139 return false; 140 } 141 142 /** 143 * Mutes or unmutes the mic for the active call. 144 * 145 * @param muted true if the call should be muted, false otherwise. 146 */ 147 @Override setMute(boolean muted)148 public void setMute(boolean muted) { 149 } 150 151 /** 152 * Initiates an IMS call with the specified number and call profile. 153 * The session listener set in {@link #setListener(IImsCallSessionListener)} is called back upon 154 * defined session events. 155 * Only valid to call when the session state is in 156 * {@link ImsCallSession.State#IDLE}. 157 * 158 * @param callee dialed string to make the call to 159 * @param profile call profile to make the call with the specified service type, 160 * call type and media information 161 * @see {@link ImsCallSession.Listener#callSessionStarted}, 162 * {@link ImsCallSession.Listener#callSessionStartFailed} 163 */ 164 @Override start(String callee, ImsCallProfile profile)165 public void start(String callee, ImsCallProfile profile) { 166 } 167 168 /** 169 * Initiates an IMS call with the specified participants and call profile. 170 * The session listener set in {@link #setListener(IImsCallSessionListener)} is called back upon 171 * defined session events. 172 * The method is only valid to call when the session state is in 173 * {@link ImsCallSession.State#IDLE}. 174 * 175 * @param participants participant list to initiate an IMS conference call 176 * @param profile call profile to make the call with the specified service type, 177 * call type and media information 178 * @see {@link ImsCallSession.Listener#callSessionStarted}, 179 * {@link ImsCallSession.Listener#callSessionStartFailed} 180 */ 181 @Override startConference(String[] participants, ImsCallProfile profile)182 public void startConference(String[] participants, ImsCallProfile profile) { 183 } 184 185 /** 186 * Accepts an incoming call or session update. 187 * 188 * @param callType call type specified in {@link ImsCallProfile} to be answered 189 * @param profile stream media profile {@link ImsStreamMediaProfile} to be answered 190 * @see {@link ImsCallSession.Listener#callSessionStarted} 191 */ 192 @Override accept(int callType, ImsStreamMediaProfile profile)193 public void accept(int callType, ImsStreamMediaProfile profile) { 194 } 195 196 /** 197 * Deflects an incoming call. 198 * 199 * @param deflectNumber number to deflect the call 200 */ 201 @Override deflect(String deflectNumber)202 public void deflect(String deflectNumber) { 203 } 204 205 /** 206 * Transfer an established call to given number, disconnecting the ongoing call 207 * when the transfer is complete. 208 * 209 * @param number number to transfer the call 210 * @param isConfirmationRequired when {@code true}, then the {@link ImsCallSessionImplBase} 211 * should wait until the transfer has successfully completed before disconnecting the current 212 * {@link ImsCallSessionImplBase}. When {@code false}, the {@link ImsCallSessionImplBase} 213 * should signal the network to perform the transfer, but should immediately disconnect the 214 * call regardless of the outcome of the transfer. 215 */ 216 @Override transfer(@onNull String number, boolean isConfirmationRequired)217 public void transfer(@NonNull String number, boolean isConfirmationRequired) { 218 } 219 220 /** 221 * Transfer an established call to an existing ongoing session. 222 * When the transfer is complete, the current call gets disconnected locally. 223 */ 224 @Override consultativeTransfer(@onNull IImsCallSession transferToSession)225 public void consultativeTransfer(@NonNull IImsCallSession transferToSession) { 226 } 227 228 /** 229 * Rejects an incoming call or session update. 230 * 231 * @param reason reason code to reject an incoming call, defined in {@link ImsReasonInfo}. 232 * {@link ImsCallSession.Listener#callSessionStartFailed} 233 */ 234 @Override reject(int reason)235 public void reject(int reason) { 236 } 237 238 /** 239 * Terminates a call. 240 * 241 * @param reason reason code to terminate a call, defined in {@link ImsReasonInfo}. 242 * 243 * @see {@link ImsCallSession.Listener#callSessionTerminated} 244 */ 245 @Override terminate(int reason)246 public void terminate(int reason) { 247 } 248 249 /** 250 * Puts a call on hold. When it succeeds, {@link ImsCallSession.Listener#callSessionHeld} is 251 * called. 252 * 253 * @param profile stream media profile {@link ImsStreamMediaProfile} to hold the call 254 * @see {@link ImsCallSession.Listener#callSessionHeld}, 255 * {@link ImsCallSession.Listener#callSessionHoldFailed} 256 */ 257 @Override hold(ImsStreamMediaProfile profile)258 public void hold(ImsStreamMediaProfile profile) { 259 } 260 261 /** 262 * Continues a call that's on hold. When it succeeds, 263 * {@link ImsCallSession.Listener#callSessionResumed} is called. 264 * 265 * @param profile stream media profile with {@link ImsStreamMediaProfile} to resume the call 266 * @see {@link ImsCallSession.Listener#callSessionResumed}, 267 * {@link ImsCallSession.Listener#callSessionResumeFailed} 268 */ 269 @Override resume(ImsStreamMediaProfile profile)270 public void resume(ImsStreamMediaProfile profile) { 271 } 272 273 /** 274 * Merges the active and held call. When the merge starts, 275 * {@link ImsCallSession.Listener#callSessionMergeStarted} is called. 276 * {@link ImsCallSession.Listener#callSessionMergeComplete} is called if the merge is 277 * successful, and {@link ImsCallSession.Listener#callSessionMergeFailed} is called if the merge 278 * fails. 279 * 280 * @see {@link ImsCallSession.Listener#callSessionMergeStarted}, 281 * {@link ImsCallSession.Listener#callSessionMergeComplete}, 282 * {@link ImsCallSession.Listener#callSessionMergeFailed} 283 */ 284 @Override merge()285 public void merge() { 286 } 287 288 /** 289 * Updates the current call's properties (ex. call mode change: video upgrade / downgrade). 290 * 291 * @param callType call type specified in {@link ImsCallProfile} to be updated 292 * @param profile stream media profile {@link ImsStreamMediaProfile} to be updated 293 * @see {@link ImsCallSession.Listener#callSessionUpdated}, 294 * {@link ImsCallSession.Listener#callSessionUpdateFailed} 295 */ 296 @Override update(int callType, ImsStreamMediaProfile profile)297 public void update(int callType, ImsStreamMediaProfile profile) { 298 } 299 300 /** 301 * Extends this call to the conference call with the specified recipients. 302 * 303 * @param participants participant list to be invited to the conference call after extending the 304 * call 305 * @see {@link ImsCallSession.Listener#callSessionConferenceExtended}, 306 * {@link ImsCallSession.Listener#callSessionConferenceExtendFailed} 307 */ 308 @Override extendToConference(String[] participants)309 public void extendToConference(String[] participants) { 310 } 311 312 /** 313 * Requests the conference server to invite an additional participants to the conference. 314 * 315 * @param participants participant list to be invited to the conference call 316 * @see {@link ImsCallSession.Listener#callSessionInviteParticipantsRequestDelivered}, 317 * {@link ImsCallSession.Listener#callSessionInviteParticipantsRequestFailed} 318 */ 319 @Override inviteParticipants(String[] participants)320 public void inviteParticipants(String[] participants) { 321 } 322 323 /** 324 * Requests the conference server to remove the specified participants from the conference. 325 * 326 * @param participants participant list to be removed from the conference call 327 * @see {@link ImsCallSession.Listener#callSessionRemoveParticipantsRequestDelivered}, 328 * {@link ImsCallSession.Listener#callSessionRemoveParticipantsRequestFailed} 329 */ 330 @Override removeParticipants(String[] participants)331 public void removeParticipants(String[] participants) { 332 } 333 334 /** 335 * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 336 * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 337 * and event flash to 16. Currently, event flash is not supported. 338 * 339 * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 340 */ 341 @Override sendDtmf(char c, Message result)342 public void sendDtmf(char c, Message result) { 343 } 344 345 /** 346 * Start a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>, 347 * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15, 348 * and event flash to 16. Currently, event flash is not supported. 349 * 350 * @param c the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs. 351 */ 352 @Override startDtmf(char c)353 public void startDtmf(char c) { 354 } 355 356 /** 357 * Stop a DTMF code. 358 */ 359 @Override stopDtmf()360 public void stopDtmf() { 361 } 362 363 /** 364 * Sends an USSD message. 365 * 366 * @param ussdMessage USSD message to send 367 */ 368 @Override sendUssd(String ussdMessage)369 public void sendUssd(String ussdMessage) { 370 } 371 372 @Override getVideoCallProvider()373 public IImsVideoCallProvider getVideoCallProvider() { 374 return null; 375 } 376 377 /** 378 * Determines if the current session is multiparty. 379 * @return {@code True} if the session is multiparty. 380 */ 381 @Override isMultiparty()382 public boolean isMultiparty() { 383 return false; 384 } 385 386 /** 387 * Device issues RTT modify request 388 * @param toProfile The profile with requested changes made 389 */ 390 @Override sendRttModifyRequest(ImsCallProfile toProfile)391 public void sendRttModifyRequest(ImsCallProfile toProfile) { 392 } 393 394 /** 395 * Device responds to Remote RTT modify request 396 * @param status true if the the request was accepted or false of the request is defined. 397 */ 398 @Override sendRttModifyResponse(boolean status)399 public void sendRttModifyResponse(boolean status) { 400 } 401 402 /** 403 * Device sends RTT message 404 * @param rttMessage RTT message to be sent 405 */ 406 @Override sendRttMessage(String rttMessage)407 public void sendRttMessage(String rttMessage) { 408 } 409 410 /** 411 * Device sends RTP header extensions. 412 * @param headerExtensions The header extensions to send. 413 */ 414 @Override sendRtpHeaderExtensions(@onNull List<RtpHeaderExtension> headerExtensions)415 public void sendRtpHeaderExtensions(@NonNull List<RtpHeaderExtension> headerExtensions) { 416 // no-op; not supported in compat layer. 417 } 418 419 /** 420 * There are two different ImsCallSessionListeners that need to reconciled here, we need to 421 * convert the "old" version of the com.android.ims.internal.IImsCallSessionListener to the 422 * "new" version of the Listener android.telephony.ims.ImsCallSessionListener when calling 423 * back to the framework. 424 */ 425 private class ImsCallSessionListenerConverter 426 extends com.android.ims.internal.IImsCallSessionListener.Stub { 427 428 private final IImsCallSessionListener mNewListener; 429 ImsCallSessionListenerConverter(IImsCallSessionListener listener)430 public ImsCallSessionListenerConverter(IImsCallSessionListener listener) { 431 mNewListener = listener; 432 } 433 434 @Override callSessionProgressing(IImsCallSession i, ImsStreamMediaProfile imsStreamMediaProfile)435 public void callSessionProgressing(IImsCallSession i, 436 ImsStreamMediaProfile imsStreamMediaProfile) throws RemoteException { 437 mNewListener.callSessionProgressing(imsStreamMediaProfile); 438 } 439 440 @Override callSessionStarted(IImsCallSession i, ImsCallProfile imsCallProfile)441 public void callSessionStarted(IImsCallSession i, ImsCallProfile imsCallProfile) 442 throws RemoteException { 443 mNewListener.callSessionInitiated(imsCallProfile); 444 } 445 446 @Override callSessionStartFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)447 public void callSessionStartFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo) 448 throws RemoteException { 449 mNewListener.callSessionInitiatedFailed(imsReasonInfo); 450 } 451 452 @Override callSessionTerminated(IImsCallSession i, ImsReasonInfo imsReasonInfo)453 public void callSessionTerminated(IImsCallSession i, ImsReasonInfo imsReasonInfo) 454 throws RemoteException { 455 mNewListener.callSessionTerminated(imsReasonInfo); 456 } 457 458 @Override callSessionHeld(IImsCallSession i, ImsCallProfile imsCallProfile)459 public void callSessionHeld(IImsCallSession i, ImsCallProfile imsCallProfile) 460 throws RemoteException { 461 mNewListener.callSessionHeld(imsCallProfile); 462 } 463 464 @Override callSessionHoldFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)465 public void callSessionHoldFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo) 466 throws RemoteException { 467 mNewListener.callSessionHoldFailed(imsReasonInfo); 468 } 469 470 @Override callSessionHoldReceived(IImsCallSession i, ImsCallProfile imsCallProfile)471 public void callSessionHoldReceived(IImsCallSession i, ImsCallProfile imsCallProfile) 472 throws RemoteException { 473 mNewListener.callSessionHoldReceived(imsCallProfile); 474 } 475 476 @Override callSessionResumed(IImsCallSession i, ImsCallProfile imsCallProfile)477 public void callSessionResumed(IImsCallSession i, ImsCallProfile imsCallProfile) 478 throws RemoteException { 479 mNewListener.callSessionResumed(imsCallProfile); 480 } 481 482 @Override callSessionResumeFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)483 public void callSessionResumeFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo) 484 throws RemoteException { 485 mNewListener.callSessionResumeFailed(imsReasonInfo); 486 } 487 488 @Override callSessionResumeReceived(IImsCallSession i, ImsCallProfile imsCallProfile)489 public void callSessionResumeReceived(IImsCallSession i, ImsCallProfile imsCallProfile) 490 throws RemoteException { 491 mNewListener.callSessionResumeReceived(imsCallProfile); 492 } 493 494 @Override callSessionMergeStarted(IImsCallSession i, IImsCallSession newSession, ImsCallProfile profile)495 public void callSessionMergeStarted(IImsCallSession i, IImsCallSession newSession, 496 ImsCallProfile profile) 497 throws RemoteException { 498 mNewListener.callSessionMergeStarted(newSession, profile); 499 } 500 501 @Override callSessionMergeComplete(IImsCallSession iImsCallSession)502 public void callSessionMergeComplete(IImsCallSession iImsCallSession) 503 throws RemoteException { 504 mNewListener.callSessionMergeComplete(iImsCallSession); 505 } 506 507 @Override callSessionMergeFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)508 public void callSessionMergeFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo) 509 throws RemoteException { 510 mNewListener.callSessionMergeFailed(imsReasonInfo); 511 } 512 513 @Override callSessionUpdated(IImsCallSession i, ImsCallProfile imsCallProfile)514 public void callSessionUpdated(IImsCallSession i, ImsCallProfile imsCallProfile) 515 throws RemoteException { 516 mNewListener.callSessionUpdated(imsCallProfile); 517 } 518 519 @Override callSessionUpdateFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)520 public void callSessionUpdateFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo) 521 throws RemoteException { 522 mNewListener.callSessionUpdateFailed(imsReasonInfo); 523 } 524 525 @Override callSessionUpdateReceived(IImsCallSession i, ImsCallProfile imsCallProfile)526 public void callSessionUpdateReceived(IImsCallSession i, ImsCallProfile imsCallProfile) 527 throws RemoteException { 528 mNewListener.callSessionUpdateReceived(imsCallProfile); 529 } 530 531 @Override callSessionConferenceExtended(IImsCallSession i, IImsCallSession newSession, ImsCallProfile imsCallProfile)532 public void callSessionConferenceExtended(IImsCallSession i, IImsCallSession newSession, 533 ImsCallProfile imsCallProfile) throws RemoteException { 534 mNewListener.callSessionConferenceExtended(newSession, imsCallProfile); 535 } 536 537 @Override callSessionConferenceExtendFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)538 public void callSessionConferenceExtendFailed(IImsCallSession i, 539 ImsReasonInfo imsReasonInfo) throws RemoteException { 540 mNewListener.callSessionConferenceExtendFailed(imsReasonInfo); 541 } 542 543 @Override callSessionConferenceExtendReceived(IImsCallSession i, IImsCallSession newSession, ImsCallProfile imsCallProfile)544 public void callSessionConferenceExtendReceived(IImsCallSession i, 545 IImsCallSession newSession, ImsCallProfile imsCallProfile) 546 throws RemoteException { 547 mNewListener.callSessionConferenceExtendReceived(newSession, imsCallProfile); 548 } 549 550 @Override callSessionInviteParticipantsRequestDelivered(IImsCallSession i)551 public void callSessionInviteParticipantsRequestDelivered(IImsCallSession i) 552 throws RemoteException { 553 mNewListener.callSessionInviteParticipantsRequestDelivered(); 554 } 555 556 @Override callSessionInviteParticipantsRequestFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)557 public void callSessionInviteParticipantsRequestFailed(IImsCallSession i, 558 ImsReasonInfo imsReasonInfo) throws RemoteException { 559 mNewListener.callSessionInviteParticipantsRequestFailed(imsReasonInfo); 560 } 561 562 @Override callSessionRemoveParticipantsRequestDelivered(IImsCallSession i)563 public void callSessionRemoveParticipantsRequestDelivered(IImsCallSession i) 564 throws RemoteException { 565 mNewListener.callSessionRemoveParticipantsRequestDelivered(); 566 } 567 568 @Override callSessionRemoveParticipantsRequestFailed(IImsCallSession i, ImsReasonInfo imsReasonInfo)569 public void callSessionRemoveParticipantsRequestFailed(IImsCallSession i, 570 ImsReasonInfo imsReasonInfo) throws RemoteException { 571 mNewListener.callSessionRemoveParticipantsRequestFailed(imsReasonInfo); 572 } 573 574 @Override callSessionConferenceStateUpdated(IImsCallSession i, ImsConferenceState imsConferenceState)575 public void callSessionConferenceStateUpdated(IImsCallSession i, 576 ImsConferenceState imsConferenceState) throws RemoteException { 577 mNewListener.callSessionConferenceStateUpdated(imsConferenceState); 578 } 579 580 @Override callSessionUssdMessageReceived(IImsCallSession i, int mode, String message)581 public void callSessionUssdMessageReceived(IImsCallSession i, int mode, String message) 582 throws RemoteException { 583 mNewListener.callSessionUssdMessageReceived(mode, message); 584 } 585 586 @Override callSessionHandover(IImsCallSession i, int srcAccessTech, int targetAccessTech, ImsReasonInfo reasonInfo)587 public void callSessionHandover(IImsCallSession i, int srcAccessTech, int targetAccessTech, 588 ImsReasonInfo reasonInfo) throws RemoteException { 589 mNewListener.callSessionHandover( 590 ServiceState.rilRadioTechnologyToNetworkType(srcAccessTech), 591 ServiceState.rilRadioTechnologyToNetworkType(targetAccessTech), reasonInfo); 592 } 593 594 @Override callSessionHandoverFailed(IImsCallSession i, int srcAccessTech, int targetAccessTech, ImsReasonInfo reasonInfo)595 public void callSessionHandoverFailed(IImsCallSession i, int srcAccessTech, 596 int targetAccessTech, ImsReasonInfo reasonInfo) throws RemoteException { 597 mNewListener.callSessionHandoverFailed( 598 ServiceState.rilRadioTechnologyToNetworkType(srcAccessTech), 599 ServiceState.rilRadioTechnologyToNetworkType(targetAccessTech), reasonInfo); 600 } 601 602 @Override callSessionMayHandover(IImsCallSession i, int srcAccessTech, int targetAccessTech)603 public void callSessionMayHandover(IImsCallSession i, int srcAccessTech, int targetAccessTech) 604 throws RemoteException { 605 mNewListener.callSessionMayHandover( 606 ServiceState.rilRadioTechnologyToNetworkType(srcAccessTech), 607 ServiceState.rilRadioTechnologyToNetworkType(targetAccessTech)); 608 } 609 610 @Override callSessionTtyModeReceived(IImsCallSession iImsCallSession, int mode)611 public void callSessionTtyModeReceived(IImsCallSession iImsCallSession, int mode) 612 throws RemoteException { 613 mNewListener.callSessionTtyModeReceived(mode); 614 } 615 616 @Override callSessionMultipartyStateChanged(IImsCallSession i, boolean isMultiparty)617 public void callSessionMultipartyStateChanged(IImsCallSession i, boolean isMultiparty) 618 throws RemoteException { 619 mNewListener.callSessionMultipartyStateChanged(isMultiparty); 620 } 621 622 @Override callSessionSuppServiceReceived(IImsCallSession i, ImsSuppServiceNotification imsSuppServiceNotification)623 public void callSessionSuppServiceReceived(IImsCallSession i, 624 ImsSuppServiceNotification imsSuppServiceNotification) throws RemoteException { 625 mNewListener.callSessionSuppServiceReceived(imsSuppServiceNotification); 626 } 627 628 @Override callSessionRttModifyRequestReceived(IImsCallSession i, ImsCallProfile imsCallProfile)629 public void callSessionRttModifyRequestReceived(IImsCallSession i, 630 ImsCallProfile imsCallProfile) throws RemoteException { 631 mNewListener.callSessionRttModifyRequestReceived(imsCallProfile); 632 } 633 634 @Override callSessionRttModifyResponseReceived(int status)635 public void callSessionRttModifyResponseReceived(int status) throws RemoteException { 636 mNewListener.callSessionRttModifyResponseReceived(status); 637 } 638 639 @Override callSessionRttMessageReceived(String rttMessage)640 public void callSessionRttMessageReceived(String rttMessage) throws RemoteException { 641 mNewListener.callSessionRttMessageReceived(rttMessage); 642 } 643 644 @Override callSessionRttAudioIndicatorChanged(ImsStreamMediaProfile profile)645 public void callSessionRttAudioIndicatorChanged(ImsStreamMediaProfile profile) 646 throws RemoteException { 647 mNewListener.callSessionRttAudioIndicatorChanged(profile); 648 } 649 650 @Override callSessionTransferred()651 public void callSessionTransferred() throws RemoteException { 652 mNewListener.callSessionTransferred(); 653 } 654 655 @Override callSessionTransferFailed(@ullable ImsReasonInfo reasonInfo)656 public void callSessionTransferFailed(@Nullable ImsReasonInfo reasonInfo) 657 throws RemoteException { 658 mNewListener.callSessionTransferFailed(reasonInfo); 659 } 660 661 @Override callQualityChanged(CallQuality callQuality)662 public void callQualityChanged(CallQuality callQuality) throws RemoteException { 663 mNewListener.callQualityChanged(callQuality); 664 } 665 } 666 } 667