Home | History | Annotate | Download | only in telecom
      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 
     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 onBluetoothDeviceListChanged() {
     50         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     51                 CallAudioRouteStateMachine.BLUETOOTH_DEVICE_LIST_CHANGED);
     52     }
     53 
     54     @Override
     55     public void onBluetoothActiveDevicePresent() {
     56         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     57                 CallAudioRouteStateMachine.BT_ACTIVE_DEVICE_PRESENT);
     58     }
     59 
     60     @Override
     61     public void onBluetoothActiveDeviceGone() {
     62         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     63                 CallAudioRouteStateMachine.BT_ACTIVE_DEVICE_GONE);
     64     }
     65 
     66     @Override
     67     public void onBluetoothAudioConnected() {
     68         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     69                 CallAudioRouteStateMachine.BT_AUDIO_CONNECTED);
     70     }
     71 
     72     @Override
     73     public void onBluetoothAudioDisconnected() {
     74         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     75                 CallAudioRouteStateMachine.BT_AUDIO_DISCONNECTED);
     76     }
     77 
     78     /**
     79       * Updates the audio route when the headset plugged in state changes. For example, if audio is
     80       * being routed over speakerphone and a headset is plugged in then switch to wired headset.
     81       */
     82     @Override
     83     public void onWiredHeadsetPluggedInChanged(boolean oldIsPluggedIn, boolean newIsPluggedIn) {
     84         if (!oldIsPluggedIn && newIsPluggedIn) {
     85             mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     86                     CallAudioRouteStateMachine.CONNECT_WIRED_HEADSET);
     87         } else if (oldIsPluggedIn && !newIsPluggedIn){
     88             mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     89                     CallAudioRouteStateMachine.DISCONNECT_WIRED_HEADSET);
     90         }
     91     }
     92 
     93     @Override
     94     public void onDockChanged(boolean isDocked) {
     95         mCallAudioRouteStateMachine.sendMessageWithSessionInfo(
     96                 isDocked ? CallAudioRouteStateMachine.CONNECT_DOCK
     97                         : CallAudioRouteStateMachine.DISCONNECT_DOCK
     98         );
     99     }
    100 }
    101