WiredHeadsetManager.java revision 6aca10a0efa2771ccdef5920f4276f0db4a7ee1f
16aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal/* 26aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * Copyright (C) 2014 The Android Open Source Project 36aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * 46aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * Licensed under the Apache License, Version 2.0 (the "License"); 56aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * you may not use this file except in compliance with the License. 66aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * You may obtain a copy of the License at 76aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * 86aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * http://www.apache.org/licenses/LICENSE-2.0 96aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * 106aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * Unless required by applicable law or agreed to in writing, software 116aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * distributed under the License is distributed on an "AS IS" BASIS, 126aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * See the License for the specific language governing permissions and 146aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * limitations under the License. 156aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal */ 166aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 176aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalpackage com.android.telecomm; 186aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 196aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalimport android.content.BroadcastReceiver; 206aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalimport android.content.Context; 216aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalimport android.content.Intent; 226aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalimport android.content.IntentFilter; 236aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalimport android.media.AudioManager; 246aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 256aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal/** 266aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * Listens for and caches headset state. Used By the CallAudioManger for maintaining 276aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * overall audio state for use in the UI layer. Also provides method for connecting the bluetooth 286aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal * headset to the phone call. 296aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal */ 306aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepalclass WiredHeadsetManager { 316aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal /** Receiver for wired headset plugged and unplugged events. */ 326aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal private class WiredHeadsetBroadcastReceiver extends BroadcastReceiver { 336aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal @Override 346aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal public void onReceive(Context context, Intent intent) { 356aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { 366aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal boolean isPluggedIn = intent.getIntExtra("state", 0) == 1; 376aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal Log.v(WiredHeadsetManager.this, "ACTION_HEADSET_PLUG event, plugged in: %b", 386aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal isPluggedIn); 396aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal onHeadsetPluggedInChanged(isPluggedIn); 406aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 416aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 426aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 436aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 446aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal private final CallAudioManager mCallAudioManager; 456aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal private final WiredHeadsetBroadcastReceiver mReceiver; 466aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal private boolean mIsPluggedIn; 476aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 486aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal WiredHeadsetManager(CallAudioManager callAudioManager) { 496aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal mCallAudioManager = callAudioManager; 506aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal mReceiver = new WiredHeadsetBroadcastReceiver(); 516aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 526aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal Context context = TelecommApp.getInstance(); 536aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 546aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal mIsPluggedIn = audioManager.isWiredHeadsetOn(); 556aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 566aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal // Register for misc other intent broadcasts. 576aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); 586aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal context.registerReceiver(mReceiver, intentFilter); 596aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 606aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 616aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal boolean isPluggedIn() { 626aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal return mIsPluggedIn; 636aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 646aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal 656aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal private void onHeadsetPluggedInChanged(boolean isPluggedIn) { 666aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal if (mIsPluggedIn != isPluggedIn) { 676aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal Log.v(this, "onHeadsetPluggedInChanged, mIsPluggedIn: %b -> %b", mIsPluggedIn, 686aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal isPluggedIn); 696aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal boolean oldIsPluggedIn = mIsPluggedIn; 706aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal mIsPluggedIn = isPluggedIn; 716aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal mCallAudioManager.onHeadsetPluggedInChanged(oldIsPluggedIn, mIsPluggedIn); 726aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 736aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal } 746aca10a0efa2771ccdef5920f4276f0db4a7ee1fSailesh Nepal} 75