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