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