CallAudioRoutePeripheralAdapter.java revision 486cb197d4426a0f740b1c73ba3acdc76b3d67d3
1/* 2 * Copyright (C) 2015 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 17package com.android.server.telecom; 18 19import com.android.server.telecom.bluetooth.BluetoothRouteManager; 20 21/** 22 * A class that acts as a listener to things that could change call audio routing, namely 23 * bluetooth status, wired headset status, and dock status. 24 */ 25public class CallAudioRoutePeripheralAdapter implements WiredHeadsetManager.Listener, 26 DockManager.Listener, BluetoothRouteManager.BluetoothStateListener { 27 28 private final CallAudioRouteStateMachine mCallAudioRouteStateMachine; 29 private final BluetoothRouteManager mBluetoothRouteManager; 30 31 public CallAudioRoutePeripheralAdapter( 32 CallAudioRouteStateMachine callAudioRouteStateMachine, 33 BluetoothRouteManager bluetoothManager, 34 WiredHeadsetManager wiredHeadsetManager, 35 DockManager dockManager) { 36 mCallAudioRouteStateMachine = callAudioRouteStateMachine; 37 mBluetoothRouteManager = bluetoothManager; 38 39 mBluetoothRouteManager.setListener(this); 40 wiredHeadsetManager.addListener(this); 41 dockManager.addListener(this); 42 } 43 44 public boolean isBluetoothAudioOn() { 45 return mBluetoothRouteManager.isBluetoothAudioConnectedOrPending(); 46 } 47 48 @Override 49 public void onBluetoothStateChange(int oldState, int newState) { 50 switch (oldState) { 51 case BluetoothRouteManager.BLUETOOTH_DISCONNECTED: 52 case BluetoothRouteManager.BLUETOOTH_UNINITIALIZED: 53 switch (newState) { 54 case BluetoothRouteManager.BLUETOOTH_DEVICE_CONNECTED: 55 case BluetoothRouteManager.BLUETOOTH_AUDIO_CONNECTED: 56 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 57 CallAudioRouteStateMachine.CONNECT_BLUETOOTH); 58 break; 59 } 60 break; 61 case BluetoothRouteManager.BLUETOOTH_DEVICE_CONNECTED: 62 switch (newState) { 63 case BluetoothRouteManager.BLUETOOTH_DISCONNECTED: 64 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 65 CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH); 66 break; 67 case BluetoothRouteManager.BLUETOOTH_AUDIO_CONNECTED: 68 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 69 CallAudioRouteStateMachine.SWITCH_BLUETOOTH); 70 break; 71 } 72 break; 73 case BluetoothRouteManager.BLUETOOTH_AUDIO_CONNECTED: 74 case BluetoothRouteManager.BLUETOOTH_AUDIO_PENDING: 75 switch (newState) { 76 case BluetoothRouteManager.BLUETOOTH_DISCONNECTED: 77 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 78 CallAudioRouteStateMachine.DISCONNECT_BLUETOOTH); 79 break; 80 case BluetoothRouteManager.BLUETOOTH_DEVICE_CONNECTED: 81 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 82 CallAudioRouteStateMachine.BT_AUDIO_DISCONNECT); 83 break; 84 } 85 break; 86 } 87 } 88 /** 89 * Updates the audio route when the headset plugged in state changes. For example, if audio is 90 * being routed over speakerphone and a headset is plugged in then switch to wired headset. 91 */ 92 @Override 93 public void onWiredHeadsetPluggedInChanged(boolean oldIsPluggedIn, boolean newIsPluggedIn) { 94 if (!oldIsPluggedIn && newIsPluggedIn) { 95 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 96 CallAudioRouteStateMachine.CONNECT_WIRED_HEADSET); 97 } else if (oldIsPluggedIn && !newIsPluggedIn){ 98 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 99 CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET); 100 } 101 } 102 103 @Override 104 public void onDockChanged(boolean isDocked) { 105 mCallAudioRouteStateMachine.sendMessageWithSessionInfo( 106 isDocked ? CallAudioRouteStateMachine.CONNECT_DOCK 107 : CallAudioRouteStateMachine.DISCONNECT_DOCK 108 ); 109 } 110} 111