1e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon/*
2e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * Copyright (C) 2014 The Android Open Source Project
3e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon *
4e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License");
5e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * you may not use this file except in compliance with the License.
6e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * You may obtain a copy of the License at
7e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon *
8e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon *      http://www.apache.org/licenses/LICENSE-2.0
9e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon *
10e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * Unless required by applicable law or agreed to in writing, software
11e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS,
12e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * See the License for the specific language governing permissions and
14e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * limitations under the License.
15e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon */
16e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
177cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnpackage com.android.server.telecom;
189f2bed31374a56487f370be01224baf6ce97e8adBen Gilad
198731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awadimport android.os.Binder;
20d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunnimport android.os.Bundle;
21953e1af643b66df6f931d76c23bcc54147668cd4Brad Ebingerimport android.telecom.Log;
227cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.PhoneAccountHandle;
23a439e1b6d6201dedecfc40b67c9347a8c563b9c1Sailesh Nepal
247cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport com.android.internal.telecom.IInCallAdapter;
25e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
26961694a9750626c067be960170bc95f10b5efcc2Tyler Gunnimport java.util.List;
27961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn
28e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon/**
29e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * Receives call commands and updates from in-call app and passes them through to CallsManager.
30e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * {@link InCallController} creates an instance of this class and passes it to the in-call app after
31e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * binding to it. This adapter can receive commands and updates until the in-call app is unbound.
32e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon */
33e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordonclass InCallAdapter extends IInCallAdapter.Stub {
34e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    private final CallsManager mCallsManager;
35e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal    private final CallIdMapper mCallIdMapper;
368d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad    private final TelecomSystem.SyncRoot mLock;
37209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger    private final String mOwnerComponentName;
38e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
39e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    /** Persists the specified parameters. */
408731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad    public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper,
41209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            TelecomSystem.SyncRoot lock, String ownerComponentName) {
42e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon        mCallsManager = callsManager;
43e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal        mCallIdMapper = callIdMapper;
448d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad        mLock = lock;
45209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger        mOwnerComponentName = ownerComponentName;
46e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
47e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
48e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
4938931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee    public void answerCall(String callId, int videoState) {
508731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
518f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_ANSWER_CALL, mOwnerComponentName);
5211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
5311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
5411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
5511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Log.d(this, "answerCall(%s,%d)", callId, videoState);
5611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
5711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
5811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.answerCall(call, videoState);
5911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
6011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "answerCall, unknown call id: %s", callId);
6111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
628d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
6311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
6411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
658d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
668731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
6711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
68969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
69e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
70e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
71e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
72ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad    public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
738731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
748f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_REJECT_CALL, mOwnerComponentName);
7511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
7611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
7711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
7811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Log.d(this, "rejectCall(%s,%b,%s)", callId, rejectWithMessage, textMessage);
7911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
8011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
8111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.rejectCall(call, rejectWithMessage, textMessage);
8211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
8311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "setRingback, unknown call id: %s", callId);
8411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
858d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
8611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
8711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
888d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
898731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
9011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
91969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
92e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
93e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
9410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
9510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void playDtmfTone(String callId, char digit) {
968731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
97209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.pDT", mOwnerComponentName);
9811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
9911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
10011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
10111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
10211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
10311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
10411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.playDtmfTone(call, digit);
10511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
10611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "playDtmfTone, unknown call id: %s", callId);
10711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
1088d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
10911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
11011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
1118d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
1128731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
11311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
114969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
11574549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
11674549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
11710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
11810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void stopDtmfTone(String callId) {
1198731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
120209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.sDT", mOwnerComponentName);
12111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
12211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
12311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
12411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Log.d(this, "stopDtmfTone(%s)", callId);
12511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
12611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
12711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.stopDtmfTone(call);
12811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
12911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "stopDtmfTone, unknown call id: %s", callId);
13011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
1318d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
13211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
13311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
1348d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
1358731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
13611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
137969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
13874549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
13974549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
14010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
141352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charlton    public void postDialContinue(String callId, boolean proceed) {
1428731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
143209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.pDC", mOwnerComponentName);
14411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
14511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
14611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
14711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Log.d(this, "postDialContinue(%s)", callId);
14811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
14911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
15011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.postDialContinue(call, proceed);
15111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
15211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "postDialContinue, unknown call id: %s", callId);
15311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
1548d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
15511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
15611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
1578d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
1588731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
15911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
160969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
16174549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
16274549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
163e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
16410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void disconnectCall(String callId) {
1658731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
1668f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_DISCONNECT_CALL, mOwnerComponentName);
16711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
16811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
16911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
17011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Log.v(this, "disconnectCall: %s", callId);
17111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
17211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
17311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.disconnectCall(call);
17411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
17511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "disconnectCall, unknown call id: %s", callId);
17611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
1778d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
17811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
17911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
1808d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
1818731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
18211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
183969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
184e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
185cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee
186cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    @Override
18710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void holdCall(String callId) {
1888731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
1898f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_HOLD_CALL, mOwnerComponentName);
19011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
19111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
19211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
19311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
19411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
19511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.holdCall(call);
19611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
19711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "holdCall, unknown call id: %s", callId);
19811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
1998d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
20011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
20111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
2028d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
2038731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
20411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
205969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
206cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    }
207cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee
208cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    @Override
20910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void unholdCall(String callId) {
2108731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
2118f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_UNHOLD_CALL, mOwnerComponentName);
21211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
21311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
21411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
21511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
21611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
21711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.unholdCall(call);
21811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
21911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "unholdCall, unknown call id: %s", callId);
22011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
2218d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
22211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
22311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
2248d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
2258731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
22611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
227969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
22884fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    }
22984fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal
23084fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    @Override
231f5e5d3ccf108c41e06983a582742b00d221b78b7Nancy Chen    public void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle,
232f5e5d3ccf108c41e06983a582742b00d221b78b7Nancy Chen            boolean setDefault) {
2338731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
234209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.pAS", mOwnerComponentName);
23511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
23611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
23711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
23811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
23911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
24011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.phoneAccountSelected(call, accountHandle, setDefault);
24111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
24211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "phoneAccountSelected, unknown call id: %s", callId);
24311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
2448d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
24511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
24611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
2478d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
2488731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
24911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
250969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
25153ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    }
25253ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen
25353ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    @Override
25410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void mute(boolean shouldMute) {
2558731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
2568f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_MUTE, mOwnerComponentName);
25711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
25811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
25911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
26011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    mCallsManager.mute(shouldMute);
26111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                }
26211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
26311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
2648731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad            }
2658731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
26611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
2678d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad        }
2686aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    }
2696aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal
2706aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    @Override
27110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void setAudioRoute(int route) {
2728731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
2738f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_SET_AUDIO_ROUTE, mOwnerComponentName);
27411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
27511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
27611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
27711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    mCallsManager.setAudioRoute(route);
27811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                }
27911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
28011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
2818731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad            }
2828731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
28311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
2848d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad        }
2856aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    }
2868f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon
2878f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    @Override
28812d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon    public void conference(String callId, String otherCallId) {
2898731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
2908f98f10d53f4f7aa1605a37313a6186f90dc6c0eBrad Ebinger            Log.startSession(LogUtils.Sessions.ICA_CONFERENCE, mOwnerComponentName);
29111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
29211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
29311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
29411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
29511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call otherCall = mCallIdMapper.getCall(otherCallId);
29611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null && otherCall != null) {
29711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        mCallsManager.conference(call, otherCall);
29811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
29911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "conference, unknown call id: %s or %s", callId, otherCallId);
30011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
3018731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad                }
30211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
30311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
3048d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
3058731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
30611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
307969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
3088f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    }
3098f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon
3108f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    @Override
311a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon    public void splitFromConference(String callId) {
3128731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
313209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.sFC", mOwnerComponentName);
31411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
31511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
31611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
31711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
31811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
31911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        call.splitFromConference();
32011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
32111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "splitFromConference, unknown call id: %s", callId);
32211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
3238d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
32411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
32511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
3268d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
3278731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
32811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
329969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
3308f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    }
331e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal
332e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal    @Override
3336805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    public void mergeConference(String callId) {
3348731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
335209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.mC", mOwnerComponentName);
33611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
33711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
33811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
33911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
34011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
34111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        call.mergeConference();
34211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
34311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "mergeConference, unknown call id: %s", callId);
34411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
3458d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
34611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
34711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
3488d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
3498731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
35011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
3516805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        }
3526805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    }
3536805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon
3546805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    @Override
3556805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    public void swapConference(String callId) {
3568731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
357209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.sC", mOwnerComponentName);
35811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
35911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
36011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
36111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    Call call = mCallIdMapper.getCall(callId);
36211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    if (call != null) {
36311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        call.swapConference();
36411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    } else {
36511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                        Log.w(this, "swapConference, unknown call id: %s", callId);
36611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    }
3678d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad                }
36811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
36911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
3708d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad            }
3718731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
37211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
3736805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        }
3746805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    }
375d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn
376d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn    @Override
377d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn    public void pullExternalCall(String callId) {
378d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn        try {
379d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            Log.startSession("ICA.pEC", mOwnerComponentName);
380d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            long token = Binder.clearCallingIdentity();
381d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            try {
382d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                synchronized (mLock) {
383d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    Call call = mCallIdMapper.getCall(callId);
384d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    if (call != null) {
385d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                        call.pullExternalCall();
386d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    } else {
387d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                        Log.w(this, "pullExternalCall, unknown call id: %s", callId);
388d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    }
389d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                }
390d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            } finally {
391d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                Binder.restoreCallingIdentity(token);
392d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            }
393d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn        } finally {
394d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            Log.endSession();
395d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn        }
396d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn    }
397d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn
398d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn    @Override
399d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn    public void sendCallEvent(String callId, String event, Bundle extras) {
400d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn        try {
401d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            Log.startSession("ICA.sCE", mOwnerComponentName);
402d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            long token = Binder.clearCallingIdentity();
403d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            try {
404d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                synchronized (mLock) {
405d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    Call call = mCallIdMapper.getCall(callId);
406d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    if (call != null) {
407d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                        call.sendCallEvent(event, extras);
408d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    } else {
409d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                        Log.w(this, "sendCallEvent, unknown call id: %s", callId);
410d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                    }
411d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                }
412d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            } finally {
413d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn                Binder.restoreCallingIdentity(token);
414d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            }
415d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn        } finally {
416d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn            Log.endSession();
417d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn        }
418d45e6d973ea7460fb605a1eb7a66ba38c6f2467dTyler Gunn    }
419961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn
420961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn    @Override
421961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn    public void putExtras(String callId, Bundle extras) {
422961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn        try {
423961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            Log.startSession("ICA.pE", mOwnerComponentName);
424961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            long token = Binder.clearCallingIdentity();
425961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            try {
426961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                synchronized (mLock) {
427961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    Call call = mCallIdMapper.getCall(callId);
428961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    if (call != null) {
429961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                        call.putExtras(Call.SOURCE_INCALL_SERVICE, extras);
430961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    } else {
431961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                        Log.w(this, "putExtras, unknown call id: %s", callId);
432961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    }
433961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                }
434961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            } finally {
435961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                Binder.restoreCallingIdentity(token);
436961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            }
437961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn        } finally {
438961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            Log.endSession();
439961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn        }
440961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn    }
441961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn
442961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn    @Override
443961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn    public void removeExtras(String callId, List<String> keys) {
444961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn        try {
445961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            Log.startSession("ICA.rE", mOwnerComponentName);
446961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            long token = Binder.clearCallingIdentity();
447961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            try {
448961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                synchronized (mLock) {
449961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    Call call = mCallIdMapper.getCall(callId);
450961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    if (call != null) {
451961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                        call.removeExtras(Call.SOURCE_INCALL_SERVICE, keys);
452961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    } else {
453961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                        Log.w(this, "removeExtra, unknown call id: %s", callId);
454961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                    }
455961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                }
456961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            } finally {
457961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn                Binder.restoreCallingIdentity(token);
458961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            }
459961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn        } finally {
460961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn            Log.endSession();
461961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn        }
462961694a9750626c067be960170bc95f10b5efcc2Tyler Gunn    }
4636805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon
4646805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    @Override
465d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    public void turnOnProximitySensor() {
4668731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
467209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.tOnPS", mOwnerComponentName);
46811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
46911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
47011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
47111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    mCallsManager.turnOnProximitySensor();
47211623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                }
47311623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
47411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
4758731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad            }
4768731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
47711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            Log.endSession();
4788d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad        }
479d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    }
480d134687adc2594ed43e912f427f494ef258e89bcYorke Lee
481d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    @Override
482d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    public void turnOffProximitySensor(boolean screenOnImmediately) {
4838731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        try {
484209e4135874ffc0164856c87d47fd904a06bf40eBrad Ebinger            Log.startSession("ICA.tOffPS", mOwnerComponentName);
48511623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            long token = Binder.clearCallingIdentity();
48611623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            try {
48711623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                synchronized (mLock) {
48811623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                    mCallsManager.turnOffProximitySensor(screenOnImmediately);
48911623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                }
49011623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger            } finally {
49111623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger                Binder.restoreCallingIdentity(token);
4928731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad            }
4938731faf3a1dcf888b894d4ad0faab97effab10bcIhab Awad        } finally {
49411623a354be47205bf3bc686ed8fdfc278958983Brad Ebinger             Log.endSession();
4958d5d9ddc66b55b6906364ab3c0e244dab4d58f13Ihab Awad        }
496d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    }
497dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu
498dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    @Override
499aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu    public void sendRttRequest(String callId) {
500dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        try {
501dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.startSession("ICA.sRR");
502dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            long token = Binder.clearCallingIdentity();
503dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            try {
504dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                synchronized (mLock) {
505aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    Call call = mCallIdMapper.getCall(callId);
506aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    if (call != null) {
507aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                        call.sendRttRequest();
508aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    } else {
509aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                        Log.w(this, "stopRtt(): call %s not found", callId);
510aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    }
511dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                }
512dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            } finally {
513dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                Binder.restoreCallingIdentity(token);
514dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            }
515dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        } finally {
516dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.endSession();
517dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        }
518dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    }
519dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu
520dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    @Override
521aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu    public void respondToRttRequest(String callId, int id, boolean accept) {
522dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        try {
523dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.startSession("ICA.rTRR");
524dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            long token = Binder.clearCallingIdentity();
525dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            try {
526dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                synchronized (mLock) {
527aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    Call call = mCallIdMapper.getCall(callId);
528aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    if (call != null) {
529aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                        call.handleRttRequestResponse(id, accept);
530aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    } else {
531aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                        Log.w(this, "respondToRttRequest(): call %s not found", callId);
532aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    }
533dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                }
534dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            } finally {
535dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                Binder.restoreCallingIdentity(token);
536dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            }
537dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        } finally {
538dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.endSession();
539dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        }
540dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    }
541dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu
542dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    @Override
543aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu    public void stopRtt(String callId) {
544dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        try {
545dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.startSession("ICA.sRTT");
546dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            long token = Binder.clearCallingIdentity();
547dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            try {
548dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                synchronized (mLock) {
549aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    Call call = mCallIdMapper.getCall(callId);
550aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    if (call != null) {
551aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                        call.stopRtt();
552aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    } else {
553aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                        Log.w(this, "stopRtt(): call %s not found", callId);
554aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu                    }
555dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                }
556dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            } finally {
557dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                Binder.restoreCallingIdentity(token);
558dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            }
559dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        } finally {
560dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.endSession();
561dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        }
562dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    }
563dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu
564dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    @Override
565aeece4ec4184b76e0ac2e8a012af05638ad866f6Hall Liu    public void setRttMode(String callId, int mode) {
566dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        try {
567dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.startSession("ICA.sRM");
568dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            long token = Binder.clearCallingIdentity();
569dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            try {
570dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                synchronized (mLock) {
571dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                    // TODO
572dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                }
573dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            } finally {
574dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu                Binder.restoreCallingIdentity(token);
575dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            }
576dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        } finally {
577dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu            Log.endSession();
578dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu        }
579dd68bc36a3278557b1c4d9183ed9e3dee077eb20Hall Liu    }
5809f2bed31374a56487f370be01224baf6ce97e8adBen Gilad}
581