blob: 3357d9b7e3447d0889276b152e6be231ee032aa4 [file] [log] [blame]
Santos Cordone3d76ab2014-01-28 17:25:20 -08001/*
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
Tyler Gunn7cc70b42014-09-12 22:17:27 -070017package com.android.server.telecom;
Ben Gilad9f2bed32013-12-12 17:43:26 -080018
Pooja Jainad4ebc02017-12-28 14:23:13 +053019import android.net.Uri;
Ihab Awad8731faf2015-03-26 13:43:22 -070020import android.os.Binder;
Tyler Gunnd45e6d92016-03-10 20:15:39 -080021import android.os.Bundle;
Brad Ebinger953e1af2016-10-05 15:45:22 -070022import android.telecom.Log;
Tyler Gunn7cc70b42014-09-12 22:17:27 -070023import android.telecom.PhoneAccountHandle;
Sailesh Nepala439e1b2014-03-11 18:19:58 -070024
Tyler Gunn7cc70b42014-09-12 22:17:27 -070025import com.android.internal.telecom.IInCallAdapter;
Ben Gilad9f2bed32013-12-12 17:43:26 -080026
Tyler Gunn961694a2016-03-21 16:01:40 -070027import java.util.List;
28
Santos Cordone3d76ab2014-01-28 17:25:20 -080029/**
30 * Receives call commands and updates from in-call app and passes them through to CallsManager.
31 * {@link InCallController} creates an instance of this class and passes it to the in-call app after
32 * binding to it. This adapter can receive commands and updates until the in-call app is unbound.
33 */
34class InCallAdapter extends IInCallAdapter.Stub {
35 private final CallsManager mCallsManager;
Sailesh Nepale59bb192014-04-01 18:33:59 -070036 private final CallIdMapper mCallIdMapper;
Ihab Awad8d5d9dd2015-03-12 11:11:06 -070037 private final TelecomSystem.SyncRoot mLock;
Brad Ebinger209e4132015-12-17 15:10:14 -080038 private final String mOwnerComponentName;
Santos Cordone3d76ab2014-01-28 17:25:20 -080039
40 /** Persists the specified parameters. */
Ihab Awad8731faf2015-03-26 13:43:22 -070041 public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper,
Brad Ebinger209e4132015-12-17 15:10:14 -080042 TelecomSystem.SyncRoot lock, String ownerComponentName) {
Santos Cordone3d76ab2014-01-28 17:25:20 -080043 mCallsManager = callsManager;
Sailesh Nepale59bb192014-04-01 18:33:59 -070044 mCallIdMapper = callIdMapper;
Ihab Awad8d5d9dd2015-03-12 11:11:06 -070045 mLock = lock;
Brad Ebinger209e4132015-12-17 15:10:14 -080046 mOwnerComponentName = ownerComponentName;
Santos Cordone3d76ab2014-01-28 17:25:20 -080047 }
48
Santos Cordone3d76ab2014-01-28 17:25:20 -080049 @Override
Andrew Lee38931d02014-07-16 10:17:36 -070050 public void answerCall(String callId, int videoState) {
Ihab Awad8731faf2015-03-26 13:43:22 -070051 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -070052 Log.startSession(LogUtils.Sessions.ICA_ANSWER_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -080053 long token = Binder.clearCallingIdentity();
54 try {
55 synchronized (mLock) {
56 Log.d(this, "answerCall(%s,%d)", callId, videoState);
57 Call call = mCallIdMapper.getCall(callId);
58 if (call != null) {
59 mCallsManager.answerCall(call, videoState);
60 } else {
61 Log.w(this, "answerCall, unknown call id: %s", callId);
62 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -070063 }
Brad Ebinger11623a32015-11-25 13:52:02 -080064 } finally {
65 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -070066 }
Ihab Awad8731faf2015-03-26 13:43:22 -070067 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -080068 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -070069 }
Santos Cordone3d76ab2014-01-28 17:25:20 -080070 }
71
Santos Cordone3d76ab2014-01-28 17:25:20 -080072 @Override
Pooja Jainad4ebc02017-12-28 14:23:13 +053073 public void deflectCall(String callId, Uri address) {
74 try {
75 Log.startSession(LogUtils.Sessions.ICA_DEFLECT_CALL, mOwnerComponentName);
76 long token = Binder.clearCallingIdentity();
77 try {
78 synchronized (mLock) {
79 Log.i(this, "deflectCall - %s, %s ", callId, Log.pii(address));
80 Call call = mCallIdMapper.getCall(callId);
81 if (call != null) {
82 mCallsManager.deflectCall(call, address);
83 } else {
84 Log.w(this, "deflectCall, unknown call id: %s", callId);
85 }
86 }
87 } finally {
88 Binder.restoreCallingIdentity(token);
89 }
90 } finally {
91 Log.endSession();
92 }
93 }
94
95 @Override
Ihab Awadff7493a2014-06-10 13:47:44 -070096 public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
Ihab Awad8731faf2015-03-26 13:43:22 -070097 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -070098 Log.startSession(LogUtils.Sessions.ICA_REJECT_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -080099 long token = Binder.clearCallingIdentity();
100 try {
101 synchronized (mLock) {
102 Log.d(this, "rejectCall(%s,%b,%s)", callId, rejectWithMessage, textMessage);
103 Call call = mCallIdMapper.getCall(callId);
104 if (call != null) {
105 mCallsManager.rejectCall(call, rejectWithMessage, textMessage);
106 } else {
107 Log.w(this, "setRingback, unknown call id: %s", callId);
108 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700109 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800110 } finally {
111 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700112 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700113 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800114 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700115 }
Santos Cordone3d76ab2014-01-28 17:25:20 -0800116 }
117
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700118 @Override
119 public void playDtmfTone(String callId, char digit) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700120 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800121 Log.startSession("ICA.pDT", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800122 long token = Binder.clearCallingIdentity();
123 try {
124 synchronized (mLock) {
125 Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
126 Call call = mCallIdMapper.getCall(callId);
127 if (call != null) {
128 mCallsManager.playDtmfTone(call, digit);
129 } else {
130 Log.w(this, "playDtmfTone, unknown call id: %s", callId);
131 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700132 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800133 } finally {
134 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700135 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700136 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800137 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700138 }
Ihab Awad74549ec2014-03-10 15:33:25 -0700139 }
140
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700141 @Override
142 public void stopDtmfTone(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700143 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800144 Log.startSession("ICA.sDT", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800145 long token = Binder.clearCallingIdentity();
146 try {
147 synchronized (mLock) {
148 Log.d(this, "stopDtmfTone(%s)", callId);
149 Call call = mCallIdMapper.getCall(callId);
150 if (call != null) {
151 mCallsManager.stopDtmfTone(call);
152 } else {
153 Log.w(this, "stopDtmfTone, unknown call id: %s", callId);
154 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700155 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800156 } finally {
157 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700158 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700159 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800160 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700161 }
Ihab Awad74549ec2014-03-10 15:33:25 -0700162 }
163
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700164 @Override
Evan Charlton352105c2014-06-03 14:10:54 -0700165 public void postDialContinue(String callId, boolean proceed) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700166 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800167 Log.startSession("ICA.pDC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800168 long token = Binder.clearCallingIdentity();
169 try {
170 synchronized (mLock) {
171 Log.d(this, "postDialContinue(%s)", callId);
172 Call call = mCallIdMapper.getCall(callId);
173 if (call != null) {
174 mCallsManager.postDialContinue(call, proceed);
175 } else {
176 Log.w(this, "postDialContinue, unknown call id: %s", callId);
177 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700178 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800179 } finally {
180 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700181 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700182 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800183 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700184 }
Ihab Awad74549ec2014-03-10 15:33:25 -0700185 }
186
Santos Cordone3d76ab2014-01-28 17:25:20 -0800187 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700188 public void disconnectCall(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700189 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700190 Log.startSession(LogUtils.Sessions.ICA_DISCONNECT_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800191 long token = Binder.clearCallingIdentity();
192 try {
193 synchronized (mLock) {
194 Log.v(this, "disconnectCall: %s", callId);
195 Call call = mCallIdMapper.getCall(callId);
196 if (call != null) {
197 mCallsManager.disconnectCall(call);
198 } else {
199 Log.w(this, "disconnectCall, unknown call id: %s", callId);
200 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700201 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800202 } finally {
203 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700204 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700205 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800206 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700207 }
Santos Cordone3d76ab2014-01-28 17:25:20 -0800208 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700209
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700210 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700211 public void holdCall(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700212 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700213 Log.startSession(LogUtils.Sessions.ICA_HOLD_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800214 long token = Binder.clearCallingIdentity();
215 try {
216 synchronized (mLock) {
217 Call call = mCallIdMapper.getCall(callId);
218 if (call != null) {
219 mCallsManager.holdCall(call);
220 } else {
221 Log.w(this, "holdCall, unknown call id: %s", callId);
222 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700223 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800224 } finally {
225 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700226 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700227 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800228 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700229 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700230 }
231
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700232 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700233 public void unholdCall(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700234 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700235 Log.startSession(LogUtils.Sessions.ICA_UNHOLD_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800236 long token = Binder.clearCallingIdentity();
237 try {
238 synchronized (mLock) {
239 Call call = mCallIdMapper.getCall(callId);
240 if (call != null) {
241 mCallsManager.unholdCall(call);
242 } else {
243 Log.w(this, "unholdCall, unknown call id: %s", callId);
244 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700245 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800246 } finally {
247 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700248 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700249 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800250 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700251 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700252 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700253
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700254 @Override
Nancy Chenf5e5d3c2014-10-21 18:45:56 -0700255 public void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle,
256 boolean setDefault) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700257 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800258 Log.startSession("ICA.pAS", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800259 long token = Binder.clearCallingIdentity();
260 try {
261 synchronized (mLock) {
262 Call call = mCallIdMapper.getCall(callId);
263 if (call != null) {
264 mCallsManager.phoneAccountSelected(call, accountHandle, setDefault);
265 } else {
266 Log.w(this, "phoneAccountSelected, unknown call id: %s", callId);
267 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700268 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800269 } finally {
270 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700271 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700272 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800273 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700274 }
Nancy Chen53ceedc2014-07-08 18:56:51 -0700275 }
276
277 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700278 public void mute(boolean shouldMute) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700279 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700280 Log.startSession(LogUtils.Sessions.ICA_MUTE, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800281 long token = Binder.clearCallingIdentity();
282 try {
283 synchronized (mLock) {
284 mCallsManager.mute(shouldMute);
285 }
286 } finally {
287 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700288 }
289 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800290 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700291 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700292 }
293
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700294 @Override
Hall Liu9086fb12017-11-07 18:01:53 -0800295 public void setAudioRoute(int route, String bluetoothAddress) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700296 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700297 Log.startSession(LogUtils.Sessions.ICA_SET_AUDIO_ROUTE, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800298 long token = Binder.clearCallingIdentity();
299 try {
300 synchronized (mLock) {
Hall Liu9086fb12017-11-07 18:01:53 -0800301 mCallsManager.setAudioRoute(route, bluetoothAddress);
Brad Ebinger11623a32015-11-25 13:52:02 -0800302 }
303 } finally {
304 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700305 }
306 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800307 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700308 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700309 }
Santos Cordon8f3282c2014-06-01 13:56:02 -0700310
Santos Cordon8f3282c2014-06-01 13:56:02 -0700311 @Override
Santos Cordon12d61822014-07-29 16:02:20 -0700312 public void conference(String callId, String otherCallId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700313 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700314 Log.startSession(LogUtils.Sessions.ICA_CONFERENCE, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800315 long token = Binder.clearCallingIdentity();
316 try {
317 synchronized (mLock) {
318 Call call = mCallIdMapper.getCall(callId);
319 Call otherCall = mCallIdMapper.getCall(otherCallId);
320 if (call != null && otherCall != null) {
321 mCallsManager.conference(call, otherCall);
322 } else {
323 Log.w(this, "conference, unknown call id: %s or %s", callId, otherCallId);
324 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700325 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800326 } finally {
327 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700328 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700329 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800330 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700331 }
Santos Cordon8f3282c2014-06-01 13:56:02 -0700332 }
333
Santos Cordon8f3282c2014-06-01 13:56:02 -0700334 @Override
Santos Cordona1610702014-06-04 20:22:56 -0700335 public void splitFromConference(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700336 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800337 Log.startSession("ICA.sFC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800338 long token = Binder.clearCallingIdentity();
339 try {
340 synchronized (mLock) {
341 Call call = mCallIdMapper.getCall(callId);
342 if (call != null) {
343 call.splitFromConference();
344 } else {
345 Log.w(this, "splitFromConference, unknown call id: %s", callId);
346 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700347 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800348 } finally {
349 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700350 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700351 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800352 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700353 }
Santos Cordon8f3282c2014-06-01 13:56:02 -0700354 }
Sailesh Nepale8ecb982014-07-11 17:19:42 -0700355
356 @Override
Santos Cordon68059232014-09-04 20:09:42 -0700357 public void mergeConference(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700358 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800359 Log.startSession("ICA.mC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800360 long token = Binder.clearCallingIdentity();
361 try {
362 synchronized (mLock) {
363 Call call = mCallIdMapper.getCall(callId);
364 if (call != null) {
365 call.mergeConference();
366 } else {
367 Log.w(this, "mergeConference, unknown call id: %s", callId);
368 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700369 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800370 } finally {
371 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700372 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700373 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800374 Log.endSession();
Santos Cordon68059232014-09-04 20:09:42 -0700375 }
376 }
377
378 @Override
379 public void swapConference(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700380 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800381 Log.startSession("ICA.sC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800382 long token = Binder.clearCallingIdentity();
383 try {
384 synchronized (mLock) {
385 Call call = mCallIdMapper.getCall(callId);
386 if (call != null) {
387 call.swapConference();
388 } else {
389 Log.w(this, "swapConference, unknown call id: %s", callId);
390 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700391 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800392 } finally {
393 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700394 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700395 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800396 Log.endSession();
Santos Cordon68059232014-09-04 20:09:42 -0700397 }
398 }
399
400 @Override
Tyler Gunnd45e6d92016-03-10 20:15:39 -0800401 public void pullExternalCall(String callId) {
402 try {
403 Log.startSession("ICA.pEC", mOwnerComponentName);
404 long token = Binder.clearCallingIdentity();
405 try {
406 synchronized (mLock) {
407 Call call = mCallIdMapper.getCall(callId);
408 if (call != null) {
409 call.pullExternalCall();
410 } else {
411 Log.w(this, "pullExternalCall, unknown call id: %s", callId);
412 }
413 }
414 } finally {
415 Binder.restoreCallingIdentity(token);
416 }
417 } finally {
418 Log.endSession();
419 }
420 }
421
422 @Override
Sanket Padaweb5de1cd2018-01-05 14:27:30 -0800423 public void sendCallEvent(String callId, String event, int targetSdkVer, Bundle extras) {
Tyler Gunnd45e6d92016-03-10 20:15:39 -0800424 try {
425 Log.startSession("ICA.sCE", mOwnerComponentName);
426 long token = Binder.clearCallingIdentity();
427 try {
428 synchronized (mLock) {
429 Call call = mCallIdMapper.getCall(callId);
430 if (call != null) {
Sanket Padaweb5de1cd2018-01-05 14:27:30 -0800431 call.sendCallEvent(event, targetSdkVer, extras);
Tyler Gunnd45e6d92016-03-10 20:15:39 -0800432 } else {
433 Log.w(this, "sendCallEvent, unknown call id: %s", callId);
434 }
435 }
436 } finally {
437 Binder.restoreCallingIdentity(token);
438 }
439 } finally {
440 Log.endSession();
441 }
442 }
443
444 @Override
Tyler Gunn961694a2016-03-21 16:01:40 -0700445 public void putExtras(String callId, Bundle extras) {
446 try {
447 Log.startSession("ICA.pE", mOwnerComponentName);
448 long token = Binder.clearCallingIdentity();
449 try {
450 synchronized (mLock) {
451 Call call = mCallIdMapper.getCall(callId);
452 if (call != null) {
453 call.putExtras(Call.SOURCE_INCALL_SERVICE, extras);
454 } else {
455 Log.w(this, "putExtras, unknown call id: %s", callId);
456 }
457 }
458 } finally {
459 Binder.restoreCallingIdentity(token);
460 }
461 } finally {
462 Log.endSession();
463 }
464 }
465
466 @Override
467 public void removeExtras(String callId, List<String> keys) {
468 try {
469 Log.startSession("ICA.rE", mOwnerComponentName);
470 long token = Binder.clearCallingIdentity();
471 try {
472 synchronized (mLock) {
473 Call call = mCallIdMapper.getCall(callId);
474 if (call != null) {
475 call.removeExtras(Call.SOURCE_INCALL_SERVICE, keys);
476 } else {
477 Log.w(this, "removeExtra, unknown call id: %s", callId);
478 }
479 }
480 } finally {
481 Binder.restoreCallingIdentity(token);
482 }
483 } finally {
484 Log.endSession();
485 }
486 }
487
488 @Override
Yorke Leed1346872014-07-28 14:38:45 -0700489 public void turnOnProximitySensor() {
Ihab Awad8731faf2015-03-26 13:43:22 -0700490 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800491 Log.startSession("ICA.tOnPS", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800492 long token = Binder.clearCallingIdentity();
493 try {
494 synchronized (mLock) {
495 mCallsManager.turnOnProximitySensor();
496 }
497 } finally {
498 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700499 }
500 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800501 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700502 }
Yorke Leed1346872014-07-28 14:38:45 -0700503 }
504
505 @Override
506 public void turnOffProximitySensor(boolean screenOnImmediately) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700507 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800508 Log.startSession("ICA.tOffPS", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800509 long token = Binder.clearCallingIdentity();
510 try {
511 synchronized (mLock) {
512 mCallsManager.turnOffProximitySensor(screenOnImmediately);
513 }
514 } finally {
515 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700516 }
517 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800518 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700519 }
Yorke Leed1346872014-07-28 14:38:45 -0700520 }
Hall Liudd68bc32017-01-25 17:14:23 -0800521
522 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800523 public void sendRttRequest(String callId) {
Hall Liudd68bc32017-01-25 17:14:23 -0800524 try {
525 Log.startSession("ICA.sRR");
526 long token = Binder.clearCallingIdentity();
527 try {
528 synchronized (mLock) {
Hall Liuaeece4e2017-02-14 16:42:12 -0800529 Call call = mCallIdMapper.getCall(callId);
530 if (call != null) {
531 call.sendRttRequest();
532 } else {
533 Log.w(this, "stopRtt(): call %s not found", callId);
534 }
Hall Liudd68bc32017-01-25 17:14:23 -0800535 }
536 } finally {
537 Binder.restoreCallingIdentity(token);
538 }
539 } finally {
540 Log.endSession();
541 }
542 }
543
544 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800545 public void respondToRttRequest(String callId, int id, boolean accept) {
Hall Liudd68bc32017-01-25 17:14:23 -0800546 try {
547 Log.startSession("ICA.rTRR");
548 long token = Binder.clearCallingIdentity();
549 try {
550 synchronized (mLock) {
Hall Liuaeece4e2017-02-14 16:42:12 -0800551 Call call = mCallIdMapper.getCall(callId);
552 if (call != null) {
553 call.handleRttRequestResponse(id, accept);
554 } else {
555 Log.w(this, "respondToRttRequest(): call %s not found", callId);
556 }
Hall Liudd68bc32017-01-25 17:14:23 -0800557 }
558 } finally {
559 Binder.restoreCallingIdentity(token);
560 }
561 } finally {
562 Log.endSession();
563 }
564 }
565
566 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800567 public void stopRtt(String callId) {
Hall Liudd68bc32017-01-25 17:14:23 -0800568 try {
569 Log.startSession("ICA.sRTT");
570 long token = Binder.clearCallingIdentity();
571 try {
572 synchronized (mLock) {
Hall Liuaeece4e2017-02-14 16:42:12 -0800573 Call call = mCallIdMapper.getCall(callId);
574 if (call != null) {
575 call.stopRtt();
576 } else {
577 Log.w(this, "stopRtt(): call %s not found", callId);
578 }
Hall Liudd68bc32017-01-25 17:14:23 -0800579 }
580 } finally {
581 Binder.restoreCallingIdentity(token);
582 }
583 } finally {
584 Log.endSession();
585 }
586 }
587
588 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800589 public void setRttMode(String callId, int mode) {
Hall Liudd68bc32017-01-25 17:14:23 -0800590 try {
591 Log.startSession("ICA.sRM");
592 long token = Binder.clearCallingIdentity();
593 try {
594 synchronized (mLock) {
595 // TODO
596 }
597 } finally {
598 Binder.restoreCallingIdentity(token);
599 }
600 } finally {
601 Log.endSession();
602 }
603 }
Sanket Padaweccdf3642017-11-10 14:49:05 -0800604
605 @Override
606 public void handoverTo(String callId, PhoneAccountHandle destAcct, int videoState,
607 Bundle extras) {
608 try {
609 Log.startSession("ICA.hT", mOwnerComponentName);
610 long token = Binder.clearCallingIdentity();
611 try {
612 synchronized (mLock) {
613 Call call = mCallIdMapper.getCall(callId);
614 if (call != null) {
615 call.handoverTo(destAcct, videoState, extras);
616 } else {
617 Log.w(this, "handoverTo, unknown call id: %s", callId);
618 }
619 }
620 } finally {
621 Binder.restoreCallingIdentity(token);
622 }
623 } finally {
624 Log.endSession();
625 }
626 }
Ben Gilad9f2bed32013-12-12 17:43:26 -0800627}