blob: b645c155c5957e2c3e33e37ba29da0b448e654e1 [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.incallui;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telecom.CallAudioState;
import com.android.dialer.common.LogUtil;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.incallui.audiomode.AudioModeProvider;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.TelecomAdapter;
/** Handles clicks on the return-to-call bubble */
public class ReturnToCallActionReceiver extends BroadcastReceiver {
public static final String ACTION_TOGGLE_SPEAKER = "toggleSpeaker";
public static final String ACTION_SHOW_AUDIO_ROUTE_SELECTOR = "showAudioRouteSelector";
public static final String ACTION_TOGGLE_MUTE = "toggleMute";
public static final String ACTION_END_CALL = "endCall";
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case ACTION_TOGGLE_SPEAKER:
toggleSpeaker(context);
break;
case ACTION_SHOW_AUDIO_ROUTE_SELECTOR:
showAudioRouteSelector(context);
break;
case ACTION_TOGGLE_MUTE:
toggleMute(context);
break;
case ACTION_END_CALL:
endCall(context);
break;
}
}
private void toggleSpeaker(Context context) {
CallAudioState audioState = AudioModeProvider.getInstance().getAudioState();
if ((audioState.getSupportedRouteMask() & CallAudioState.ROUTE_BLUETOOTH)
== CallAudioState.ROUTE_BLUETOOTH) {
LogUtil.w(
"ReturnToCallActionReceiver.toggleSpeaker",
"toggleSpeaker() called when bluetooth available."
+ " Probably should have shown audio route selector");
}
DialerCall call = getCall();
int newRoute;
if (audioState.getRoute() == CallAudioState.ROUTE_SPEAKER) {
newRoute = CallAudioState.ROUTE_WIRED_OR_EARPIECE;
Logger.get(context)
.logCallImpression(
DialerImpression.Type.BUBBLE_TURN_ON_WIRED_OR_EARPIECE,
call != null ? call.getUniqueCallId() : "",
call != null ? call.getTimeAddedMs() : 0);
} else {
newRoute = CallAudioState.ROUTE_SPEAKER;
Logger.get(context)
.logCallImpression(
DialerImpression.Type.BUBBLE_TURN_ON_SPEAKERPHONE,
call != null ? call.getUniqueCallId() : "",
call != null ? call.getTimeAddedMs() : 0);
}
TelecomAdapter.getInstance().setAudioRoute(newRoute);
}
public void showAudioRouteSelector(Context context) {
context.startActivity(new Intent(context, AudioRouteSelectorActivity.class));
}
private void toggleMute(Context context) {
DialerCall call = getCall();
boolean shouldMute = !AudioModeProvider.getInstance().getAudioState().isMuted();
Logger.get(context)
.logCallImpression(
shouldMute
? DialerImpression.Type.BUBBLE_MUTE_CALL
: DialerImpression.Type.BUBBLE_UNMUTE_CALL,
call != null ? call.getUniqueCallId() : "",
call != null ? call.getTimeAddedMs() : 0);
TelecomAdapter.getInstance().mute(shouldMute);
}
private void endCall(Context context) {
DialerCall call = getCall();
Logger.get(context)
.logCallImpression(
DialerImpression.Type.BUBBLE_END_CALL,
call != null ? call.getUniqueCallId() : "",
call != null ? call.getTimeAddedMs() : 0);
if (call != null) {
call.disconnect();
}
}
private DialerCall getCall() {
CallList callList = InCallPresenter.getInstance().getCallList();
if (callList != null) {
DialerCall call = callList.getOutgoingCall();
if (call == null) {
call = callList.getActiveOrBackgroundCall();
}
if (call != null) {
return call;
}
}
return null;
}
}