• 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 package com.android.dialer.app.voicemail;
17 
18 import android.content.BroadcastReceiver;
19 import android.content.Context;
20 import android.content.Intent;
21 import android.content.IntentFilter;
22 import android.media.AudioManager;
23 import android.util.Log;
24 
25 /** Listens for and caches headset state. */
26 class WiredHeadsetManager {
27 
28   private static final String TAG = WiredHeadsetManager.class.getSimpleName();
29   private final WiredHeadsetBroadcastReceiver mReceiver;
30   private boolean mIsPluggedIn;
31   private Listener mListener;
32   private Context mContext;
33 
WiredHeadsetManager(Context context)34   WiredHeadsetManager(Context context) {
35     mContext = context;
36     mReceiver = new WiredHeadsetBroadcastReceiver();
37 
38     AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
39     mIsPluggedIn = audioManager.isWiredHeadsetOn();
40   }
41 
setListener(Listener listener)42   void setListener(Listener listener) {
43     mListener = listener;
44   }
45 
isPluggedIn()46   boolean isPluggedIn() {
47     return mIsPluggedIn;
48   }
49 
registerReceiver()50   void registerReceiver() {
51     // Register for misc other intent broadcasts.
52     IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
53     mContext.registerReceiver(mReceiver, intentFilter);
54   }
55 
unregisterReceiver()56   void unregisterReceiver() {
57     mContext.unregisterReceiver(mReceiver);
58   }
59 
onHeadsetPluggedInChanged(boolean isPluggedIn)60   private void onHeadsetPluggedInChanged(boolean isPluggedIn) {
61     if (mIsPluggedIn != isPluggedIn) {
62       Log.v(TAG, "onHeadsetPluggedInChanged, mIsPluggedIn: " + mIsPluggedIn + " -> " + isPluggedIn);
63       boolean oldIsPluggedIn = mIsPluggedIn;
64       mIsPluggedIn = isPluggedIn;
65       if (mListener != null) {
66         mListener.onWiredHeadsetPluggedInChanged(oldIsPluggedIn, mIsPluggedIn);
67       }
68     }
69   }
70 
71   interface Listener {
72 
onWiredHeadsetPluggedInChanged(boolean oldIsPluggedIn, boolean newIsPluggedIn)73     void onWiredHeadsetPluggedInChanged(boolean oldIsPluggedIn, boolean newIsPluggedIn);
74   }
75 
76   /** Receiver for wired headset plugged and unplugged events. */
77   private class WiredHeadsetBroadcastReceiver extends BroadcastReceiver {
78 
79     @Override
onReceive(Context context, Intent intent)80     public void onReceive(Context context, Intent intent) {
81       if (AudioManager.ACTION_HEADSET_PLUG.equals(intent.getAction())) {
82         boolean isPluggedIn = intent.getIntExtra("state", 0) == 1;
83         Log.v(TAG, "ACTION_HEADSET_PLUG event, plugged in: " + isPluggedIn);
84         onHeadsetPluggedInChanged(isPluggedIn);
85       }
86     }
87   }
88 }
89