blob: f3afc9a03d0a451d84d645ae2a4d25b14fab43db [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. */
Hall Liu18c94492018-04-09 17:27:01 -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);
Hall Liu4b8830b2018-04-06 14:20:57 -070099 // Check to make sure the in-call app's user isn't restricted from sending SMS. If so,
Hall Liu18c94492018-04-09 17:27:01 -0700100 // silently drop the outgoing message. Also drop message if the screen is locked.
101 if (!mCallsManager.isReplyWithSmsAllowed(Binder.getCallingUid())) {
Hall Liu4b8830b2018-04-06 14:20:57 -0700102 rejectWithMessage = false;
103 textMessage = null;
104 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800105 long token = Binder.clearCallingIdentity();
106 try {
107 synchronized (mLock) {
108 Log.d(this, "rejectCall(%s,%b,%s)", callId, rejectWithMessage, textMessage);
109 Call call = mCallIdMapper.getCall(callId);
110 if (call != null) {
111 mCallsManager.rejectCall(call, rejectWithMessage, textMessage);
112 } else {
113 Log.w(this, "setRingback, unknown call id: %s", callId);
114 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700115 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800116 } finally {
117 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700118 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700119 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800120 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700121 }
Santos Cordone3d76ab2014-01-28 17:25:20 -0800122 }
123
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700124 @Override
125 public void playDtmfTone(String callId, char digit) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700126 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800127 Log.startSession("ICA.pDT", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800128 long token = Binder.clearCallingIdentity();
129 try {
130 synchronized (mLock) {
131 Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
132 Call call = mCallIdMapper.getCall(callId);
133 if (call != null) {
134 mCallsManager.playDtmfTone(call, digit);
135 } else {
136 Log.w(this, "playDtmfTone, unknown call id: %s", callId);
137 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700138 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800139 } finally {
140 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700141 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700142 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800143 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700144 }
Ihab Awad74549ec2014-03-10 15:33:25 -0700145 }
146
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700147 @Override
148 public void stopDtmfTone(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700149 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800150 Log.startSession("ICA.sDT", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800151 long token = Binder.clearCallingIdentity();
152 try {
153 synchronized (mLock) {
154 Log.d(this, "stopDtmfTone(%s)", callId);
155 Call call = mCallIdMapper.getCall(callId);
156 if (call != null) {
157 mCallsManager.stopDtmfTone(call);
158 } else {
159 Log.w(this, "stopDtmfTone, unknown call id: %s", callId);
160 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700161 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800162 } finally {
163 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700164 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700165 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800166 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700167 }
Ihab Awad74549ec2014-03-10 15:33:25 -0700168 }
169
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700170 @Override
Evan Charlton352105c2014-06-03 14:10:54 -0700171 public void postDialContinue(String callId, boolean proceed) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700172 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800173 Log.startSession("ICA.pDC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800174 long token = Binder.clearCallingIdentity();
175 try {
176 synchronized (mLock) {
177 Log.d(this, "postDialContinue(%s)", callId);
178 Call call = mCallIdMapper.getCall(callId);
179 if (call != null) {
180 mCallsManager.postDialContinue(call, proceed);
181 } else {
182 Log.w(this, "postDialContinue, unknown call id: %s", callId);
183 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700184 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800185 } finally {
186 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700187 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700188 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800189 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700190 }
Ihab Awad74549ec2014-03-10 15:33:25 -0700191 }
192
Santos Cordone3d76ab2014-01-28 17:25:20 -0800193 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700194 public void disconnectCall(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700195 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700196 Log.startSession(LogUtils.Sessions.ICA_DISCONNECT_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800197 long token = Binder.clearCallingIdentity();
198 try {
199 synchronized (mLock) {
200 Log.v(this, "disconnectCall: %s", callId);
201 Call call = mCallIdMapper.getCall(callId);
202 if (call != null) {
203 mCallsManager.disconnectCall(call);
204 } else {
205 Log.w(this, "disconnectCall, unknown call id: %s", callId);
206 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700207 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800208 } finally {
209 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700210 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700211 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800212 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700213 }
Santos Cordone3d76ab2014-01-28 17:25:20 -0800214 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700215
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700216 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700217 public void holdCall(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700218 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700219 Log.startSession(LogUtils.Sessions.ICA_HOLD_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800220 long token = Binder.clearCallingIdentity();
221 try {
222 synchronized (mLock) {
223 Call call = mCallIdMapper.getCall(callId);
224 if (call != null) {
225 mCallsManager.holdCall(call);
226 } else {
227 Log.w(this, "holdCall, unknown call id: %s", callId);
228 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700229 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800230 } finally {
231 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700232 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700233 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800234 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700235 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700236 }
237
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700238 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700239 public void unholdCall(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700240 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700241 Log.startSession(LogUtils.Sessions.ICA_UNHOLD_CALL, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800242 long token = Binder.clearCallingIdentity();
243 try {
244 synchronized (mLock) {
245 Call call = mCallIdMapper.getCall(callId);
246 if (call != null) {
247 mCallsManager.unholdCall(call);
248 } else {
249 Log.w(this, "unholdCall, unknown call id: %s", callId);
250 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700251 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800252 } finally {
253 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700254 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700255 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800256 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700257 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700258 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700259
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700260 @Override
Nancy Chenf5e5d3c2014-10-21 18:45:56 -0700261 public void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle,
262 boolean setDefault) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700263 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800264 Log.startSession("ICA.pAS", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800265 long token = Binder.clearCallingIdentity();
266 try {
267 synchronized (mLock) {
268 Call call = mCallIdMapper.getCall(callId);
269 if (call != null) {
270 mCallsManager.phoneAccountSelected(call, accountHandle, setDefault);
271 } else {
272 Log.w(this, "phoneAccountSelected, unknown call id: %s", callId);
273 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700274 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800275 } finally {
276 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700277 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700278 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800279 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700280 }
Nancy Chen53ceedc2014-07-08 18:56:51 -0700281 }
282
283 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700284 public void mute(boolean shouldMute) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700285 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700286 Log.startSession(LogUtils.Sessions.ICA_MUTE, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800287 long token = Binder.clearCallingIdentity();
288 try {
289 synchronized (mLock) {
290 mCallsManager.mute(shouldMute);
291 }
292 } finally {
293 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700294 }
295 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800296 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700297 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700298 }
299
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700300 @Override
Hall Liu9086fb12017-11-07 18:01:53 -0800301 public void setAudioRoute(int route, String bluetoothAddress) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700302 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700303 Log.startSession(LogUtils.Sessions.ICA_SET_AUDIO_ROUTE, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800304 long token = Binder.clearCallingIdentity();
305 try {
306 synchronized (mLock) {
Hall Liu9086fb12017-11-07 18:01:53 -0800307 mCallsManager.setAudioRoute(route, bluetoothAddress);
Brad Ebinger11623a32015-11-25 13:52:02 -0800308 }
309 } finally {
310 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700311 }
312 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800313 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700314 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700315 }
Santos Cordon8f3282c2014-06-01 13:56:02 -0700316
Santos Cordon8f3282c2014-06-01 13:56:02 -0700317 @Override
Santos Cordon12d61822014-07-29 16:02:20 -0700318 public void conference(String callId, String otherCallId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700319 try {
Brad Ebinger8f98f102016-10-20 16:33:39 -0700320 Log.startSession(LogUtils.Sessions.ICA_CONFERENCE, mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800321 long token = Binder.clearCallingIdentity();
322 try {
323 synchronized (mLock) {
324 Call call = mCallIdMapper.getCall(callId);
325 Call otherCall = mCallIdMapper.getCall(otherCallId);
326 if (call != null && otherCall != null) {
327 mCallsManager.conference(call, otherCall);
328 } else {
329 Log.w(this, "conference, unknown call id: %s or %s", callId, otherCallId);
330 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700331 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800332 } finally {
333 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700334 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700335 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800336 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700337 }
Santos Cordon8f3282c2014-06-01 13:56:02 -0700338 }
339
Santos Cordon8f3282c2014-06-01 13:56:02 -0700340 @Override
Santos Cordona1610702014-06-04 20:22:56 -0700341 public void splitFromConference(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700342 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800343 Log.startSession("ICA.sFC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800344 long token = Binder.clearCallingIdentity();
345 try {
346 synchronized (mLock) {
347 Call call = mCallIdMapper.getCall(callId);
348 if (call != null) {
349 call.splitFromConference();
350 } else {
351 Log.w(this, "splitFromConference, unknown call id: %s", callId);
352 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700353 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800354 } finally {
355 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700356 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700357 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800358 Log.endSession();
Jay Shrauner969755a2014-08-11 20:34:43 -0700359 }
Santos Cordon8f3282c2014-06-01 13:56:02 -0700360 }
Sailesh Nepale8ecb982014-07-11 17:19:42 -0700361
362 @Override
Santos Cordon68059232014-09-04 20:09:42 -0700363 public void mergeConference(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700364 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800365 Log.startSession("ICA.mC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800366 long token = Binder.clearCallingIdentity();
367 try {
368 synchronized (mLock) {
369 Call call = mCallIdMapper.getCall(callId);
370 if (call != null) {
371 call.mergeConference();
372 } else {
373 Log.w(this, "mergeConference, unknown call id: %s", callId);
374 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700375 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800376 } finally {
377 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700378 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700379 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800380 Log.endSession();
Santos Cordon68059232014-09-04 20:09:42 -0700381 }
382 }
383
384 @Override
385 public void swapConference(String callId) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700386 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800387 Log.startSession("ICA.sC", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800388 long token = Binder.clearCallingIdentity();
389 try {
390 synchronized (mLock) {
391 Call call = mCallIdMapper.getCall(callId);
392 if (call != null) {
393 call.swapConference();
394 } else {
395 Log.w(this, "swapConference, unknown call id: %s", callId);
396 }
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700397 }
Brad Ebinger11623a32015-11-25 13:52:02 -0800398 } finally {
399 Binder.restoreCallingIdentity(token);
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700400 }
Ihab Awad8731faf2015-03-26 13:43:22 -0700401 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800402 Log.endSession();
Santos Cordon68059232014-09-04 20:09:42 -0700403 }
404 }
405
406 @Override
Tyler Gunnd45e6d92016-03-10 20:15:39 -0800407 public void pullExternalCall(String callId) {
408 try {
409 Log.startSession("ICA.pEC", mOwnerComponentName);
410 long token = Binder.clearCallingIdentity();
411 try {
412 synchronized (mLock) {
413 Call call = mCallIdMapper.getCall(callId);
414 if (call != null) {
415 call.pullExternalCall();
416 } else {
417 Log.w(this, "pullExternalCall, unknown call id: %s", callId);
418 }
419 }
420 } finally {
421 Binder.restoreCallingIdentity(token);
422 }
423 } finally {
424 Log.endSession();
425 }
426 }
427
428 @Override
Sanket Padaweb5de1cd2018-01-05 14:27:30 -0800429 public void sendCallEvent(String callId, String event, int targetSdkVer, Bundle extras) {
Tyler Gunnd45e6d92016-03-10 20:15:39 -0800430 try {
431 Log.startSession("ICA.sCE", mOwnerComponentName);
432 long token = Binder.clearCallingIdentity();
433 try {
434 synchronized (mLock) {
435 Call call = mCallIdMapper.getCall(callId);
436 if (call != null) {
Sanket Padaweb5de1cd2018-01-05 14:27:30 -0800437 call.sendCallEvent(event, targetSdkVer, extras);
Tyler Gunnd45e6d92016-03-10 20:15:39 -0800438 } else {
439 Log.w(this, "sendCallEvent, unknown call id: %s", callId);
440 }
441 }
442 } finally {
443 Binder.restoreCallingIdentity(token);
444 }
445 } finally {
446 Log.endSession();
447 }
448 }
449
450 @Override
Tyler Gunn961694a2016-03-21 16:01:40 -0700451 public void putExtras(String callId, Bundle extras) {
452 try {
453 Log.startSession("ICA.pE", mOwnerComponentName);
454 long token = Binder.clearCallingIdentity();
455 try {
456 synchronized (mLock) {
457 Call call = mCallIdMapper.getCall(callId);
458 if (call != null) {
459 call.putExtras(Call.SOURCE_INCALL_SERVICE, extras);
460 } else {
461 Log.w(this, "putExtras, unknown call id: %s", callId);
462 }
463 }
464 } finally {
465 Binder.restoreCallingIdentity(token);
466 }
467 } finally {
468 Log.endSession();
469 }
470 }
471
472 @Override
473 public void removeExtras(String callId, List<String> keys) {
474 try {
475 Log.startSession("ICA.rE", mOwnerComponentName);
476 long token = Binder.clearCallingIdentity();
477 try {
478 synchronized (mLock) {
479 Call call = mCallIdMapper.getCall(callId);
480 if (call != null) {
481 call.removeExtras(Call.SOURCE_INCALL_SERVICE, keys);
482 } else {
483 Log.w(this, "removeExtra, unknown call id: %s", callId);
484 }
485 }
486 } finally {
487 Binder.restoreCallingIdentity(token);
488 }
489 } finally {
490 Log.endSession();
491 }
492 }
493
494 @Override
Yorke Leed1346872014-07-28 14:38:45 -0700495 public void turnOnProximitySensor() {
Ihab Awad8731faf2015-03-26 13:43:22 -0700496 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800497 Log.startSession("ICA.tOnPS", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800498 long token = Binder.clearCallingIdentity();
499 try {
500 synchronized (mLock) {
501 mCallsManager.turnOnProximitySensor();
502 }
503 } finally {
504 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700505 }
506 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800507 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700508 }
Yorke Leed1346872014-07-28 14:38:45 -0700509 }
510
511 @Override
512 public void turnOffProximitySensor(boolean screenOnImmediately) {
Ihab Awad8731faf2015-03-26 13:43:22 -0700513 try {
Brad Ebinger209e4132015-12-17 15:10:14 -0800514 Log.startSession("ICA.tOffPS", mOwnerComponentName);
Brad Ebinger11623a32015-11-25 13:52:02 -0800515 long token = Binder.clearCallingIdentity();
516 try {
517 synchronized (mLock) {
518 mCallsManager.turnOffProximitySensor(screenOnImmediately);
519 }
520 } finally {
521 Binder.restoreCallingIdentity(token);
Ihab Awad8731faf2015-03-26 13:43:22 -0700522 }
523 } finally {
Brad Ebinger11623a32015-11-25 13:52:02 -0800524 Log.endSession();
Ihab Awad8d5d9dd2015-03-12 11:11:06 -0700525 }
Yorke Leed1346872014-07-28 14:38:45 -0700526 }
Hall Liudd68bc32017-01-25 17:14:23 -0800527
528 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800529 public void sendRttRequest(String callId) {
Hall Liudd68bc32017-01-25 17:14:23 -0800530 try {
531 Log.startSession("ICA.sRR");
532 long token = Binder.clearCallingIdentity();
533 try {
534 synchronized (mLock) {
Hall Liuaeece4e2017-02-14 16:42:12 -0800535 Call call = mCallIdMapper.getCall(callId);
536 if (call != null) {
537 call.sendRttRequest();
538 } else {
539 Log.w(this, "stopRtt(): call %s not found", callId);
540 }
Hall Liudd68bc32017-01-25 17:14:23 -0800541 }
542 } finally {
543 Binder.restoreCallingIdentity(token);
544 }
545 } finally {
546 Log.endSession();
547 }
548 }
549
550 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800551 public void respondToRttRequest(String callId, int id, boolean accept) {
Hall Liudd68bc32017-01-25 17:14:23 -0800552 try {
553 Log.startSession("ICA.rTRR");
554 long token = Binder.clearCallingIdentity();
555 try {
556 synchronized (mLock) {
Hall Liuaeece4e2017-02-14 16:42:12 -0800557 Call call = mCallIdMapper.getCall(callId);
558 if (call != null) {
559 call.handleRttRequestResponse(id, accept);
560 } else {
561 Log.w(this, "respondToRttRequest(): call %s not found", callId);
562 }
Hall Liudd68bc32017-01-25 17:14:23 -0800563 }
564 } finally {
565 Binder.restoreCallingIdentity(token);
566 }
567 } finally {
568 Log.endSession();
569 }
570 }
571
572 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800573 public void stopRtt(String callId) {
Hall Liudd68bc32017-01-25 17:14:23 -0800574 try {
575 Log.startSession("ICA.sRTT");
576 long token = Binder.clearCallingIdentity();
577 try {
578 synchronized (mLock) {
Hall Liuaeece4e2017-02-14 16:42:12 -0800579 Call call = mCallIdMapper.getCall(callId);
580 if (call != null) {
581 call.stopRtt();
582 } else {
583 Log.w(this, "stopRtt(): call %s not found", callId);
584 }
Hall Liudd68bc32017-01-25 17:14:23 -0800585 }
586 } finally {
587 Binder.restoreCallingIdentity(token);
588 }
589 } finally {
590 Log.endSession();
591 }
592 }
593
594 @Override
Hall Liuaeece4e2017-02-14 16:42:12 -0800595 public void setRttMode(String callId, int mode) {
Hall Liudd68bc32017-01-25 17:14:23 -0800596 try {
597 Log.startSession("ICA.sRM");
598 long token = Binder.clearCallingIdentity();
599 try {
600 synchronized (mLock) {
601 // TODO
602 }
603 } finally {
604 Binder.restoreCallingIdentity(token);
605 }
606 } finally {
607 Log.endSession();
608 }
609 }
Sanket Padaweccdf3642017-11-10 14:49:05 -0800610
611 @Override
612 public void handoverTo(String callId, PhoneAccountHandle destAcct, int videoState,
613 Bundle extras) {
614 try {
615 Log.startSession("ICA.hT", mOwnerComponentName);
616 long token = Binder.clearCallingIdentity();
617 try {
618 synchronized (mLock) {
619 Call call = mCallIdMapper.getCall(callId);
620 if (call != null) {
621 call.handoverTo(destAcct, videoState, extras);
622 } else {
623 Log.w(this, "handoverTo, unknown call id: %s", callId);
624 }
625 }
626 } finally {
627 Binder.restoreCallingIdentity(token);
628 }
629 } finally {
630 Log.endSession();
631 }
632 }
Ben Gilad9f2bed32013-12-12 17:43:26 -0800633}