InCallAdapter.java revision 6805923a2d91f9e193a4dd33f7a655587d2f173c
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
179f2bed31374a56487f370be01224baf6ce97e8adBen Giladpackage com.android.telecomm;
189f2bed31374a56487f370be01224baf6ce97e8adBen Gilad
19e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordonimport android.os.Handler;
2010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepalimport android.os.Message;
2189176375c8d97db25588f720952a4fadbce2f9a3Evan Charltonimport android.telecomm.PhoneAccountHandle;
22a439e1b6d6201dedecfc40b67c9347a8c563b9c1Sailesh Nepal
23352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charltonimport com.android.internal.os.SomeArgs;
24a439e1b6d6201dedecfc40b67c9347a8c563b9c1Sailesh Nepalimport com.android.internal.telecomm.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;
4077da19ea28b8753d439660b4352c1bf914f63a92Sailesh Nepal    private static final int MSG_PHONE_ACCOUNT_CLICKED = 8;
4184fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    private static final int MSG_MUTE = 9;
4284fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    private static final int MSG_SET_AUDIO_ROUTE = 10;
43a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon    private static final int MSG_CONFERENCE = 11;
44a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon    private static final int MSG_SPLIT_FROM_CONFERENCE = 12;
45e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal    private static final int MSG_SWAP_WITH_BACKGROUND_CALL = 13;
4653ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    private static final int MSG_PHONE_ACCOUNT_SELECTED = 14;
47d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    private static final int MSG_TURN_ON_PROXIMITY_SENSOR = 15;
48d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    private static final int MSG_TURN_OFF_PROXIMITY_SENSOR = 16;
496805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    private static final int MSG_MERGE_CONFERENCE = 17;
506805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    private static final int MSG_SWAP_CONFERENCE = 18;
5110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal
5210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private final class InCallAdapterHandler extends Handler {
5310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        @Override
5410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        public void handleMessage(Message msg) {
55ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad            Call call;
5610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal            switch (msg.what) {
5738931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                case MSG_ANSWER_CALL: {
5838931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                    SomeArgs args = (SomeArgs) msg.obj;
5938931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                    try {
6038931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        call = mCallIdMapper.getCall(args.arg1);
6138931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        int videoState = (int) args.arg2;
6238931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        if (call != null) {
6338931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                            mCallsManager.answerCall(call, videoState);
6438931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        } else {
6538931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                            Log.w(this, "answerCall, unknown call id: %s", msg.obj);
6638931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        }
6738931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                    } finally {
6838931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                        args.recycle();
69ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
7010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
7138931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee                }
7253ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                case MSG_REJECT_CALL: {
73ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    SomeArgs args = (SomeArgs) msg.obj;
74ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    try {
75ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        call = mCallIdMapper.getCall(args.arg1);
76ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        boolean rejectWithMessage = args.argi1 == 1;
77ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        String textMessage = (String) args.arg2;
78ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        if (call != null) {
79ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                            mCallsManager.rejectCall(call, rejectWithMessage, textMessage);
80ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        } else {
81ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                            Log.w(this, "setRingback, unknown call id: %s", args.arg1);
82ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        }
83ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } finally {
84ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        args.recycle();
85ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
8610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
8753ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                }
8810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_PLAY_DTMF_TONE:
89ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
90ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
91ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.playDtmfTone(call, (char) msg.arg1);
92ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
93ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "playDtmfTone, unknown call id: %s", msg.obj);
94ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
9510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
9610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_STOP_DTMF_TONE:
97ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
98ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
99ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.stopDtmfTone(call);
100ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
101ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "stopDtmfTone, unknown call id: %s", msg.obj);
102ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
10310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
10410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_POST_DIAL_CONTINUE:
105ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
106352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charlton                    mCallsManager.postDialContinue(call, msg.arg1 == 1);
107ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
108ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
109ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.postDialContinue(call, msg.arg1 == 1);
110ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
111ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "postDialContinue, unknown call id: %s", msg.obj);
112ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
11310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
11410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_DISCONNECT_CALL:
115ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
116ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
117ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.disconnectCall(call);
118ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
119ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "disconnectCall, unknown call id: %s", msg.obj);
120ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
12110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
12210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_HOLD_CALL:
123ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
124ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
125ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.holdCall(call);
126ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
127ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "holdCall, unknown call id: %s", msg.obj);
128ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
12910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
13010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_UNHOLD_CALL:
131ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
132ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
133ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        mCallsManager.unholdCall(call);
134ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
135ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "unholdCall, unknown call id: %s", msg.obj);
136ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
13710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
13877da19ea28b8753d439660b4352c1bf914f63a92Sailesh Nepal                case MSG_PHONE_ACCOUNT_CLICKED:
139ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
140ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
14177da19ea28b8753d439660b4352c1bf914f63a92Sailesh Nepal                        mCallsManager.phoneAccountClicked(call);
142ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
14377da19ea28b8753d439660b4352c1bf914f63a92Sailesh Nepal                        Log.w(this, "phoneAccountClicked, unknown call id: %s", msg.obj);
144ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
14584fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal                    break;
14653ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                case MSG_PHONE_ACCOUNT_SELECTED: {
14753ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    SomeArgs args = (SomeArgs) msg.obj;
14853ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    try {
14953ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        call = mCallIdMapper.getCall(args.arg1);
15053ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        if (call != null) {
15189176375c8d97db25588f720952a4fadbce2f9a3Evan Charlton                            mCallsManager.phoneAccountSelected(call, (PhoneAccountHandle) args.arg2);
15253ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        } else {
15353ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                            Log.w(this, "phoneAccountSelected, unknown call id: %s", args.arg1);
15453ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        }
15553ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    } finally {
15653ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                        args.recycle();
15753ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    }
15853ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                    break;
15953ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen                }
16010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_MUTE:
161ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    mCallsManager.mute(msg.arg1 == 1);
16210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
16310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                case MSG_SET_AUDIO_ROUTE:
16410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    mCallsManager.setAudioRoute(msg.arg1);
16510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal                    break;
16612d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                case MSG_CONFERENCE: {
16712d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                    SomeArgs args = (SomeArgs) msg.obj;
16812d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                    try {
16912d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        call = mCallIdMapper.getCall(args.arg1);
17012d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        Call otherCall = mCallIdMapper.getCall(args.arg2);
17112d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        if (call != null && otherCall != null) {
17212d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                            mCallsManager.conference(call, otherCall);
17312d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        } else {
17412d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                            Log.w(this, "conference, unknown call id: %s", msg.obj);
17512d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        }
17612d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                    } finally {
17712d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                        args.recycle();
178ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
179a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon                    break;
18012d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon                }
181a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon                case MSG_SPLIT_FROM_CONFERENCE:
182ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    call = mCallIdMapper.getCall(msg.obj);
183ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    if (call != null) {
184ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        call.splitFromConference();
185ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    } else {
186ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                        Log.w(this, "splitFromConference, unknown call id: %s", msg.obj);
187ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad                    }
188a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon                    break;
189d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                case MSG_TURN_ON_PROXIMITY_SENSOR:
190d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    mCallsManager.turnOnProximitySensor();
191d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    break;
192d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                case MSG_TURN_OFF_PROXIMITY_SENSOR:
193d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    mCallsManager.turnOffProximitySensor((boolean) msg.obj);
194d134687adc2594ed43e912f427f494ef258e89bcYorke Lee                    break;
1956805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                case MSG_MERGE_CONFERENCE:
1966805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    call = mCallIdMapper.getCall(msg.obj);
1976805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    if (call != null) {
1986805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        call.mergeConference();
1996805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    } else {
2006805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        Log.w(this, "mergeConference, unknown call id: %s", msg.obj);
2016805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    }
2026805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    break;
2036805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                case MSG_SWAP_CONFERENCE:
2046805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    call = mCallIdMapper.getCall(msg.obj);
2056805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    if (call != null) {
2066805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        call.swapConference();
2076805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    } else {
2086805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                        Log.w(this, "swapConference, unknown call id: %s", msg.obj);
2096805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    }
2106805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon                    break;
21110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal            }
21210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        }
21310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    }
21461d0f70cf45036f9cdeb41b96538f792b7c9764bSantos Cordon
215e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    private final CallsManager mCallsManager;
21610ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    private final Handler mHandler = new InCallAdapterHandler();
217e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal    private final CallIdMapper mCallIdMapper;
218e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
219e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    /** Persists the specified parameters. */
220e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal    public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper) {
22110ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        ThreadUtil.checkOnMainThread();
222e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon        mCallsManager = callsManager;
223e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal        mCallIdMapper = callIdMapper;
224e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
225e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
226e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
22738931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee    public void answerCall(String callId, int videoState) {
22838931d0ad60f00a9f50c90cef446166731f0b871Andrew Lee        Log.d(this, "answerCall(%s,%d)", callId, videoState);
229969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
230969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
231969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
232969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = videoState;
233969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_ANSWER_CALL, args).sendToTarget();
234969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
235e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
236e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
237e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
238ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad    public void rejectCall(String callId, boolean rejectWithMessage, String textMessage) {
239ff7493a8f620509d41dd8a5106c1d0dcd27cd274Ihab Awad        Log.d(this, "rejectCall(%s,%b,%s)", callId, rejectWithMessage, textMessage);
240969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
241969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
242969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
243969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.argi1 = rejectWithMessage ? 1 : 0;
244969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = textMessage;
245969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_REJECT_CALL, args).sendToTarget();
246969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
247e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
248e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon
24910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
25010ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void playDtmfTone(String callId, char digit) {
25174549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad        Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
252969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
253969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_PLAY_DTMF_TONE, (int) digit, 0, callId).sendToTarget();
254969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
25574549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
25674549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
25710ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
25810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void stopDtmfTone(String callId) {
25974549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad        Log.d(this, "stopDtmfTone(%s)", callId);
260969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
261969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_STOP_DTMF_TONE, callId).sendToTarget();
262969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
26374549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
26474549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
26510ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    @Override
266352105c5d33ac94e5ad0cb5ac2e9268731423e65Evan Charlton    public void postDialContinue(String callId, boolean proceed) {
26774549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad        Log.d(this, "postDialContinue(%s)", callId);
268969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
269969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_POST_DIAL_CONTINUE, proceed ? 1 : 0, 0, callId).sendToTarget();
270969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
27174549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad    }
27274549ec95acf0d2ddbe4feca91c6febdf8008074Ihab Awad
273e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    @Override
27410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void disconnectCall(String callId) {
275e59bb195972d65a71618af4fe13f1ad982253e16Sailesh Nepal        Log.v(this, "disconnectCall: %s", callId);
276969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
277969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_DISCONNECT_CALL, callId).sendToTarget();
278969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
279e3d76abbb6c7c726980abed522f6c3efcbb6019eSantos Cordon    }
280cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee
281cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    @Override
28210ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void holdCall(String callId) {
283969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
284969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_HOLD_CALL, callId).sendToTarget();
285969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
286cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    }
287cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee
288cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    @Override
28910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void unholdCall(String callId) {
290969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
291969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_UNHOLD_CALL, callId).sendToTarget();
292969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
293cdf3ebd3ea6505668304b7e0a39df354ebbb52fbYorke Lee    }
2946aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal
2956aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    @Override
29677da19ea28b8753d439660b4352c1bf914f63a92Sailesh Nepal    public void phoneAccountClicked(String callId) {
297969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
298969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_PHONE_ACCOUNT_CLICKED, callId).sendToTarget();
299969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
30084fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    }
30184fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal
30284fa5f8c59a1cd3c5716c239fb19c58244fc81feSailesh Nepal    @Override
30389176375c8d97db25588f720952a4fadbce2f9a3Evan Charlton    public void phoneAccountSelected(String callId, PhoneAccountHandle accountHandle) {
304969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
305969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
306969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
307969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = accountHandle;
308969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_PHONE_ACCOUNT_SELECTED, args).sendToTarget();
309969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
31053ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    }
31153ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen
31253ceedc1f5ae5a075c7a3186db8bb4db32cbe583Nancy Chen    @Override
31310ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void mute(boolean shouldMute) {
31410ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        mHandler.obtainMessage(MSG_MUTE, shouldMute ? 1 : 0, 0).sendToTarget();
3156aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    }
3166aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal
3176aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    @Override
31810ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal    public void setAudioRoute(int route) {
31910ea4609f60940145489ebffcdd53d40948f56f4Sailesh Nepal        mHandler.obtainMessage(MSG_SET_AUDIO_ROUTE, route, 0).sendToTarget();
3206aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal    }
3218f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon
3228f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    @Override
32312d61825cd0d6aa06272db3f77b5e30dce379951Santos Cordon    public void conference(String callId, String otherCallId) {
324969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId) &&
325969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner                mCallIdMapper.isValidCallId(otherCallId)) {
326969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            SomeArgs args = SomeArgs.obtain();
327969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg1 = callId;
328969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            args.arg2 = otherCallId;
329969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_CONFERENCE, args).sendToTarget();
330969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
3318f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    }
3328f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon
3338f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    @Override
334a161070ea054f91a5b2d5b4e3413381134d548b8Santos Cordon    public void splitFromConference(String callId) {
335969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        if (mCallIdMapper.isValidCallId(callId)) {
336969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner            mHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, callId).sendToTarget();
337969755a2a7ff9416f677dd87d520fce27e629dffJay Shrauner        }
3388f3282c49bd4e8e6de59be4bdaefc726d99a3273Santos Cordon    }
339e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal
340e8ecb98d5341395e073d02c065143ae3ac76ef71Sailesh Nepal    @Override
3416805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    public void mergeConference(String callId) {
3426805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        if (mCallIdMapper.isValidCallId(callId)) {
3436805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon            mHandler.obtainMessage(MSG_MERGE_CONFERENCE, callId).sendToTarget();
3446805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        }
3456805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    }
3466805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon
3476805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    @Override
3486805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    public void swapConference(String callId) {
3496805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        if (mCallIdMapper.isValidCallId(callId)) {
3506805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon            mHandler.obtainMessage(MSG_SWAP_CONFERENCE, callId).sendToTarget();
3516805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon        }
3526805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    }
3536805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon
3546805923a2d91f9e193a4dd33f7a655587d2f173cSantos Cordon    @Override
355d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    public void turnOnProximitySensor() {
356d134687adc2594ed43e912f427f494ef258e89bcYorke Lee        mHandler.obtainMessage(MSG_TURN_ON_PROXIMITY_SENSOR).sendToTarget();
357d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    }
358d134687adc2594ed43e912f427f494ef258e89bcYorke Lee
359d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    @Override
360d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    public void turnOffProximitySensor(boolean screenOnImmediately) {
361d134687adc2594ed43e912f427f494ef258e89bcYorke Lee        mHandler.obtainMessage(MSG_TURN_OFF_PROXIMITY_SENSOR, screenOnImmediately).sendToTarget();
362d134687adc2594ed43e912f427f494ef258e89bcYorke Lee    }
3639f2bed31374a56487f370be01224baf6ce97e8adBen Gilad}
364