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