InCallAdapter.java revision 7cc70b4f0ad1064a4a0dce6056ad82b205887160
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
19e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordonimport android.os.Handler;
2010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepalimport android.os.Message;
217cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport android.telecom.PhoneAccountHandle;
22a439e1b6d6201dedecfc40b67c9347a8c563b9c1Sailesh Nepal
23352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charltonimport com.android.internal.os.SomeArgs;
247cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnimport com.android.internal.telecom.IInCallAdapter;
25e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
26e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon/**
27e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * Receives call commands and updates from in-call app and passes them through to CallsManager.
28e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * {@link InCallController} creates an instance of this class and passes it to the in-call app after
29e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon * binding to it. This adapter can receive commands and updates until the in-call app is unbound.
30e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon */
31e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordonclass InCallAdapter extends IInCallAdapter.Stub {
3210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_ANSWER_CALL = 0;
3310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_REJECT_CALL = 1;
3410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_PLAY_DTMF_TONE = 2;
3510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_STOP_DTMF_TONE = 3;
3610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_POST_DIAL_CONTINUE = 4;
3710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_DISCONNECT_CALL = 5;
3810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_HOLD_CALL = 6;
3910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private static final int MSG_UNHOLD_CALL = 7;
402d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_MUTE = 8;
412d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_SET_AUDIO_ROUTE = 9;
422d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_CONFERENCE = 10;
432d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_SPLIT_FROM_CONFERENCE = 11;
442d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_SWAP_WITH_BACKGROUND_CALL = 12;
452d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_PHONE_ACCOUNT_SELECTED = 13;
462d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_TURN_ON_PROXIMITY_SENSOR = 14;
472d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_TURN_OFF_PROXIMITY_SENSOR = 15;
482d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_MERGE_CONFERENCE = 16;
492d8eb3a3ef1c4d0d4b6d96392d8e0542d34a4b8cNancy Chen    private static final int MSG_SWAP_CONFERENCE = 17;
5010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal
5110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private final class InCallAdapterHandler extends Handler {
5210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        @Override
5310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        public void handleMessage(Message msg) {
54ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad            Call call;
5510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal            switch (msg.what) {
5638931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                case MSG_ANSWER_CALL: {
5738931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                    SomeArgs args = (SomeArgs) msg.obj;
5838931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                    try {
5938931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        call = mCallIdMapper.getCall(args.arg1);
6038931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        int videoState = (int) args.arg2;
6138931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        if (call != null) {
6238931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                            mCallsManager.answerCall(call, videoState);
6338931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        } else {
6438931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                            Log.w(this, "answerCall, unknown call id: %s", msg.obj);
6538931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        }
6638931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                    } finally {
6738931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        args.recycle();
68ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
6910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
7038931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                }
7153ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                case MSG_REJECT_CALL: {
72ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    SomeArgs args = (SomeArgs) msg.obj;
73ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    try {
74ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        call = mCallIdMapper.getCall(args.arg1);
75ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        boolean rejectWithMessage = args.argi1 == 1;
76ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        String textMessage = (String) args.arg2;
77ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        if (call != null) {
78ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                            mCallsManager.rejectCall(call, rejectWithMessage, textMessage);
79ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        } else {
80ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                            Log.w(this, "setRingback, unknown call id: %s", args.arg1);
81ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        }
82ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } finally {
83ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        args.recycle();
84ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
8510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
8653ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                }
8710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_PLAY_DTMF_TONE:
88ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
89ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
90ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.playDtmfTone(call, (char) msg.arg1);
91ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
92ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "playDtmfTone, unknown call id: %s", msg.obj);
93ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
9410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
9510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_STOP_DTMF_TONE:
96ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
97ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
98ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.stopDtmfTone(call);
99ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
100ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "stopDtmfTone, unknown call id: %s", msg.obj);
101ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
10210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
10310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_POST_DIAL_CONTINUE:
104ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
105352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charlton                    mCallsManager.postDialContinue(call, msg.arg1 == 1);
106ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
107ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
108ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.postDialContinue(call, msg.arg1 == 1);
109ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
110ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "postDialContinue, unknown call id: %s", msg.obj);
111ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
11210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
11310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_DISCONNECT_CALL:
114ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
115ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
116ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.disconnectCall(call);
117ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
118ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "disconnectCall, unknown call id: %s", msg.obj);
119ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
12010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
12110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_HOLD_CALL:
122ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
123ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
124ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.holdCall(call);
125ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
126ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "holdCall, unknown call id: %s", msg.obj);
127ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
12810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
12910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_UNHOLD_CALL:
130ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
131ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
132ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.unholdCall(call);
133ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
134ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "unholdCall, unknown call id: %s", msg.obj);
135ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
13610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
13753ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                case MSG_PHONE_ACCOUNT_SELECTED: {
13853ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    SomeArgs args = (SomeArgs) msg.obj;
13953ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    try {
14053ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        call = mCallIdMapper.getCall(args.arg1);
14153ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        if (call != null) {
14289176375c8d97db25588f720952a4fadbce2f9a3Evan Charlton                            mCallsManager.phoneAccountSelected(call, (PhoneAccountHandle) args.arg2);
14353ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        } else {
14453ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                            Log.w(this, "phoneAccountSelected, unknown call id: %s", args.arg1);
14553ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        }
14653ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    } finally {
14753ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        args.recycle();
14853ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    }
14953ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    break;
15053ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                }
15110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_MUTE:
152ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    mCallsManager.mute(msg.arg1 == 1);
15310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
15410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_SET_AUDIO_ROUTE:
15510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    mCallsManager.setAudioRoute(msg.arg1);
15610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
15712d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                case MSG_CONFERENCE: {
15812d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                    SomeArgs args = (SomeArgs) msg.obj;
15912d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                    try {
16012d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        call = mCallIdMapper.getCall(args.arg1);
16112d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        Call otherCall = mCallIdMapper.getCall(args.arg2);
16212d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        if (call != null && otherCall != null) {
16312d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                            mCallsManager.conference(call, otherCall);
16412d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        } else {
16512d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                            Log.w(this, "conference, unknown call id: %s", msg.obj);
16612d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        }
16712d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                    } finally {
16812d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        args.recycle();
169ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
170a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon                    break;
17112d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                }
172a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon                case MSG_SPLIT_FROM_CONFERENCE:
173ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
174ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
175ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        call.splitFromConference();
176ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
177ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "splitFromConference, unknown call id: %s", msg.obj);
178ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
179a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon                    break;
180d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                case MSG_TURN_ON_PROXIMITY_SENSOR:
181d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    mCallsManager.turnOnProximitySensor();
182d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    break;
183d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                case MSG_TURN_OFF_PROXIMITY_SENSOR:
184d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    mCallsManager.turnOffProximitySensor((boolean) msg.obj);
185d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    break;
1866805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                case MSG_MERGE_CONFERENCE:
1876805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    call = mCallIdMapper.getCall(msg.obj);
1886805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    if (call != null) {
1896805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        call.mergeConference();
1906805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    } else {
1916805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        Log.w(this, "mergeConference, unknown call id: %s", msg.obj);
1926805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    }
1936805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    break;
1946805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                case MSG_SWAP_CONFERENCE:
1956805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    call = mCallIdMapper.getCall(msg.obj);
1966805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    if (call != null) {
1976805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        call.swapConference();
1986805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    } else {
1996805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        Log.w(this, "swapConference, unknown call id: %s", msg.obj);
2006805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    }
2016805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    break;
20210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal            }
20310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        }
20410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    }
20561d0f70cf45036f9cdeb41b96538f792b7c9764bSantos Cordon
206e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    private final CallsManager mCallsManager;
20710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private final Handler mHandler = new InCallAdapterHandler();
208e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal    private final CallIdMapper mCallIdMapper;
209e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
210e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    /** Persists the specified parameters. */
211e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal    public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper) {
21210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        ThreadUtil.checkOnMainThread();
213e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon        mCallsManager = callsManager;
214e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal        mCallIdMapper = callIdMapper;
215e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
216e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
217e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
21838931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee    public void answerCall(String callId, int videoState) {
21938931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee        Log.d(this, "answerCall(%s,%d)", callId, videoState);
220969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
221969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
222969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
223969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = videoState;
224969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_ANSWER_CALL, args).sendToTarget();
225969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
226e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
227e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
228e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
229ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad    public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
230ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad        Log.d(this, "rejectCall(%s,%b,%s)", callId, rejectWithMessage, textMessage);
231969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
232969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
233969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
234969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.argi1 = rejectWithMessage ? 1 : 0;
235969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = textMessage;
236969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_REJECT_CALL, args).sendToTarget();
237969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
238e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
239e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
24010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
24110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void playDtmfTone(String callId, char digit) {
24274549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad        Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
243969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
244969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_PLAY_DTMF_TONE, (int) digit, 0, callId).sendToTarget();
245969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
24674549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
24774549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
24810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
24910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void stopDtmfTone(String callId) {
25074549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad        Log.d(this, "stopDtmfTone(%s)", callId);
251969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
252969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_STOP_DTMF_TONE, callId).sendToTarget();
253969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
25474549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
25574549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
25610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
257352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charlton    public void postDialContinue(String callId, boolean proceed) {
25874549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad        Log.d(this, "postDialContinue(%s)", callId);
259969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
260969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_POST_DIAL_CONTINUE, proceed ? 1 : 0, 0, callId).sendToTarget();
261969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
26274549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
26374549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
264e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
26510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void disconnectCall(String callId) {
266e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal        Log.v(this, "disconnectCall: %s", callId);
267969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
268969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_DISCONNECT_CALL, callId).sendToTarget();
269969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
270e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
271cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee
272cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    @Override
27310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void holdCall(String callId) {
274969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
275969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_HOLD_CALL, callId).sendToTarget();
276969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
277cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    }
278cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee
279cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    @Override
28010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void unholdCall(String callId) {
281969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
282969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_UNHOLD_CALL, callId).sendToTarget();
283969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
28484fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    }
28584fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal
28684fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    @Override
28789176375c8d97db25588f720952a4fadbce2f9a3Evan Charlton    public void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle) {
288969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
289969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
290969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
291969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = accountHandle;
292969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_PHONE_ACCOUNT_SELECTED, args).sendToTarget();
293969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
29453ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    }
29553ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen
29653ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    @Override
29710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void mute(boolean shouldMute) {
29810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        mHandler.obtainMessage(MSG_MUTE, shouldMute ? 1 : 0, 0).sendToTarget();
2996aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    }
3006aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal
3016aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    @Override
30210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void setAudioRoute(int route) {
30310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        mHandler.obtainMessage(MSG_SET_AUDIO_ROUTE, route, 0).sendToTarget();
3046aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    }
3058f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon
3068f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    @Override
30712d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon    public void conference(String callId, String otherCallId) {
308969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId) &&
309969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner                mCallIdMapper.isValidCallId(otherCallId)) {
310969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
311969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
312969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = otherCallId;
313969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_CONFERENCE, args).sendToTarget();
314969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
3158f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    }
3168f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon
3178f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    @Override
318a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon    public void splitFromConference(String callId) {
319969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
320969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, callId).sendToTarget();
321969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
3228f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    }
323e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal
324e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal    @Override
3256805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    public void mergeConference(String callId) {
3266805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        if (mCallIdMapper.isValidCallId(callId)) {
3276805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon            mHandler.obtainMessage(MSG_MERGE_CONFERENCE, callId).sendToTarget();
3286805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        }
3296805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    }
3306805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon
3316805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    @Override
3326805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    public void swapConference(String callId) {
3336805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        if (mCallIdMapper.isValidCallId(callId)) {
3346805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon            mHandler.obtainMessage(MSG_SWAP_CONFERENCE, callId).sendToTarget();
3356805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        }
3366805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    }
3376805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon
3386805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    @Override
339d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    public void turnOnProximitySensor() {
340d134687adc2594ed43e912f427f494ef258e89bcYorke Lee        mHandler.obtainMessage(MSG_TURN_ON_PROXIMITY_SENSOR).sendToTarget();
341d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    }
342d134687adc2594ed43e912f427f494ef258e89bcYorke Lee
343d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    @Override
344d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    public void turnOffProximitySensor(boolean screenOnImmediately) {
345d134687adc2594ed43e912f427f494ef258e89bcYorke Lee        mHandler.obtainMessage(MSG_TURN_OFF_PROXIMITY_SENSOR, screenOnImmediately).sendToTarget();
346d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    }
3479f2bed31374a56487f370be01224baf6ce97e8adBen Gilad}
348