• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package com.android.server.telecom;
18 
19 import 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  */
25 public class CallAudioRoutePeripheralAdapter implements WiredHeadsetManager.Listener,
26         DockManager.Listener, BluetoothRouteManager.BluetoothStateListener {
27 
28     private final CallAudioRouteStateMachine mCallAudioRouteStateMachine;
29     private final BluetoothRouteManager mBluetoothRouteManager;
30 
CallAudioRoutePeripheralAdapter( CallAudioRouteStateMachine callAudioRouteStateMachine, BluetoothRouteManager bluetoothManager, WiredHeadsetManager wiredHeadsetManager, DockManager dockManager)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 
isBluetoothAudioOn()44     public boolean isBluetoothAudioOn() {
45         return mBluetoothRouteManager.isBluetoothAudioConnectedOrPending();
46     }
47 
48     @Override
onBluetoothStateChange(int oldState, int newState)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
onWiredHeadsetPluggedInChanged(boolean oldIsPluggedIn, boolean newIsPluggedIn)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
onDockChanged(boolean isDocked)104     public void onDockChanged(boolean isDocked) {
105         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
106                 isDocked ? CallAudioRouteStateMachine.CONNECT_DOCK
107                         : CallAudioRouteStateMachine.DISCONNECT_DOCK
108         );
109     }
110 }
111