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