blob: 14669c6bf321ef62f670829b17e8610661c1f1db [file] [log] [blame]
Santos Cordone3d76ab2014-01-28 17:25:20 -08001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Ben Gilad9f2bed32013-12-12 17:43:26 -080017package com.android.telecomm;
18
Santos Cordone3d76ab2014-01-28 17:25:20 -080019import android.os.Handler;
Sailesh Nepal10ea4602014-04-01 17:23:32 -070020import android.os.Message;
Sailesh Nepala439e1b2014-03-11 18:19:58 -070021
22import com.android.internal.telecomm.IInCallAdapter;
Ben Gilad9f2bed32013-12-12 17:43:26 -080023
Santos Cordone3d76ab2014-01-28 17:25:20 -080024/**
25 * Receives call commands and updates from in-call app and passes them through to CallsManager.
26 * {@link InCallController} creates an instance of this class and passes it to the in-call app after
27 * binding to it. This adapter can receive commands and updates until the in-call app is unbound.
28 */
29class InCallAdapter extends IInCallAdapter.Stub {
Sailesh Nepal10ea4602014-04-01 17:23:32 -070030 private static final int MSG_ANSWER_CALL = 0;
31 private static final int MSG_REJECT_CALL = 1;
32 private static final int MSG_PLAY_DTMF_TONE = 2;
33 private static final int MSG_STOP_DTMF_TONE = 3;
34 private static final int MSG_POST_DIAL_CONTINUE = 4;
35 private static final int MSG_DISCONNECT_CALL = 5;
36 private static final int MSG_HOLD_CALL = 6;
37 private static final int MSG_UNHOLD_CALL = 7;
38 private static final int MSG_MUTE = 8;
39 private static final int MSG_SET_AUDIO_ROUTE = 9;
40
41 private final class InCallAdapterHandler extends Handler {
42 @Override
43 public void handleMessage(Message msg) {
Sailesh Nepale59bb192014-04-01 18:33:59 -070044 Call call = null;
45 if (msg.obj != null) {
46 call = mCallIdMapper.getCall(msg.obj);
47 if (call == null) {
48 Log.w(this, "Unknown call id: %s, msg: %d", msg.obj, msg.what);
49 return;
50 }
51 }
52
Sailesh Nepal10ea4602014-04-01 17:23:32 -070053 switch (msg.what) {
54 case MSG_ANSWER_CALL:
Sailesh Nepale59bb192014-04-01 18:33:59 -070055 mCallsManager.answerCall(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070056 break;
57 case MSG_REJECT_CALL:
Sailesh Nepale59bb192014-04-01 18:33:59 -070058 mCallsManager.rejectCall(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070059 break;
60 case MSG_PLAY_DTMF_TONE:
Sailesh Nepale59bb192014-04-01 18:33:59 -070061 mCallsManager.playDtmfTone(call, (char) msg.arg1);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070062 break;
63 case MSG_STOP_DTMF_TONE:
Sailesh Nepale59bb192014-04-01 18:33:59 -070064 mCallsManager.stopDtmfTone(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070065 break;
66 case MSG_POST_DIAL_CONTINUE:
Sailesh Nepale59bb192014-04-01 18:33:59 -070067 mCallsManager.postDialContinue(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070068 break;
69 case MSG_DISCONNECT_CALL:
Sailesh Nepale59bb192014-04-01 18:33:59 -070070 mCallsManager.disconnectCall(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070071 break;
72 case MSG_HOLD_CALL:
Sailesh Nepale59bb192014-04-01 18:33:59 -070073 mCallsManager.holdCall(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070074 break;
75 case MSG_UNHOLD_CALL:
Sailesh Nepale59bb192014-04-01 18:33:59 -070076 mCallsManager.unholdCall(call);
Sailesh Nepal10ea4602014-04-01 17:23:32 -070077 break;
78 case MSG_MUTE:
79 mCallsManager.mute(msg.arg1 == 1 ? true : false);
80 break;
81 case MSG_SET_AUDIO_ROUTE:
82 mCallsManager.setAudioRoute(msg.arg1);
83 break;
84 }
85 }
86 }
Santos Cordon61d0f702014-02-19 02:52:23 -080087
Santos Cordone3d76ab2014-01-28 17:25:20 -080088 private final CallsManager mCallsManager;
Sailesh Nepal10ea4602014-04-01 17:23:32 -070089 private final Handler mHandler = new InCallAdapterHandler();
Sailesh Nepale59bb192014-04-01 18:33:59 -070090 private final CallIdMapper mCallIdMapper;
Santos Cordone3d76ab2014-01-28 17:25:20 -080091
92 /** Persists the specified parameters. */
Sailesh Nepale59bb192014-04-01 18:33:59 -070093 public InCallAdapter(CallsManager callsManager, CallIdMapper callIdMapper) {
Sailesh Nepal10ea4602014-04-01 17:23:32 -070094 ThreadUtil.checkOnMainThread();
Santos Cordone3d76ab2014-01-28 17:25:20 -080095 mCallsManager = callsManager;
Sailesh Nepale59bb192014-04-01 18:33:59 -070096 mCallIdMapper = callIdMapper;
Santos Cordone3d76ab2014-01-28 17:25:20 -080097 }
98
99 /** {@inheritDoc} */
100 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700101 public void answerCall(String callId) {
Sailesh Nepalf1c191d2014-03-07 18:17:39 -0800102 Log.d(this, "answerCall(%s)", callId);
Sailesh Nepale59bb192014-04-01 18:33:59 -0700103 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700104 mHandler.obtainMessage(MSG_ANSWER_CALL, callId).sendToTarget();
Santos Cordone3d76ab2014-01-28 17:25:20 -0800105 }
106
107 /** {@inheritDoc} */
108 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700109 public void rejectCall(String callId) {
Sailesh Nepalf1c191d2014-03-07 18:17:39 -0800110 Log.d(this, "rejectCall(%s)", callId);
Sailesh Nepale59bb192014-04-01 18:33:59 -0700111 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700112 mHandler.obtainMessage(MSG_REJECT_CALL, callId).sendToTarget();
Santos Cordone3d76ab2014-01-28 17:25:20 -0800113 }
114
115 /** {@inheritDoc} */
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700116 @Override
117 public void playDtmfTone(String callId, char digit) {
Ihab Awad74549ec2014-03-10 15:33:25 -0700118 Log.d(this, "playDtmfTone(%s,%c)", callId, digit);
Sailesh Nepale59bb192014-04-01 18:33:59 -0700119 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700120 mHandler.obtainMessage(MSG_PLAY_DTMF_TONE, (int) digit, 0, callId).sendToTarget();
Ihab Awad74549ec2014-03-10 15:33:25 -0700121 }
122
123 /** {@inheritDoc} */
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700124 @Override
125 public void stopDtmfTone(String callId) {
Ihab Awad74549ec2014-03-10 15:33:25 -0700126 Log.d(this, "stopDtmfTone(%s)", callId);
Sailesh Nepale59bb192014-04-01 18:33:59 -0700127 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700128 mHandler.obtainMessage(MSG_STOP_DTMF_TONE, callId).sendToTarget();
Ihab Awad74549ec2014-03-10 15:33:25 -0700129 }
130
131 /** {@inheritDoc} */
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700132 @Override
133 public void postDialContinue(String callId) {
Ihab Awad74549ec2014-03-10 15:33:25 -0700134 Log.d(this, "postDialContinue(%s)", callId);
Sailesh Nepale59bb192014-04-01 18:33:59 -0700135 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700136 mHandler.obtainMessage(MSG_POST_DIAL_CONTINUE, callId).sendToTarget();
Ihab Awad74549ec2014-03-10 15:33:25 -0700137 }
138
139 /** {@inheritDoc} */
Santos Cordone3d76ab2014-01-28 17:25:20 -0800140 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700141 public void disconnectCall(String callId) {
Sailesh Nepale59bb192014-04-01 18:33:59 -0700142 Log.v(this, "disconnectCall: %s", callId);
143 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700144 mHandler.obtainMessage(MSG_DISCONNECT_CALL, callId).sendToTarget();
Santos Cordone3d76ab2014-01-28 17:25:20 -0800145 }
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700146
147 /** {@inheritDoc} */
148 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700149 public void holdCall(String callId) {
Sailesh Nepale59bb192014-04-01 18:33:59 -0700150 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700151 mHandler.obtainMessage(MSG_HOLD_CALL, callId).sendToTarget();
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700152 }
153
154 /** {@inheritDoc} */
155 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700156 public void unholdCall(String callId) {
Sailesh Nepale59bb192014-04-01 18:33:59 -0700157 mCallIdMapper.checkValidCallId(callId);
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700158 mHandler.obtainMessage(MSG_UNHOLD_CALL, callId).sendToTarget();
Yorke Leecdf3ebd2014-03-12 18:31:41 -0700159 }
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700160
161 /** {@inheritDoc} */
162 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700163 public void mute(boolean shouldMute) {
164 mHandler.obtainMessage(MSG_MUTE, shouldMute ? 1 : 0, 0).sendToTarget();
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700165 }
166
167 /** {@inheritDoc} */
168 @Override
Sailesh Nepal10ea4602014-04-01 17:23:32 -0700169 public void setAudioRoute(int route) {
170 mHandler.obtainMessage(MSG_SET_AUDIO_ROUTE, route, 0).sendToTarget();
Sailesh Nepal6aca10a2014-03-24 16:11:02 -0700171 }
Ben Gilad9f2bed32013-12-12 17:43:26 -0800172}