summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorStevenHarperUK <StevenHarperUK@gmail.com>2012-05-17 15:55:40 +0100
committerStevenHarperUK <StevenHarperUK@gmail.com>2012-05-17 15:55:40 +0100
commit0b9dd049a184c6e2312227becd99cc988fb4eccc (patch)
treea0874540225a8bc1f674020891a7aa1626bebb6a /services
parent67260d96c4b686d868a49472510153ec11bee316 (diff)
downloadframeworks_base-0b9dd049a184c6e2312227becd99cc988fb4eccc.zip
frameworks_base-0b9dd049a184c6e2312227becd99cc988fb4eccc.tar.gz
frameworks_base-0b9dd049a184c6e2312227becd99cc988fb4eccc.tar.bz2
Bugfix: reboot needed for dock audio checkbox 1/2
After the patch http://review.cyanogenmod.com/#/c/15540/ The Dock audio is only observed if the checkbox is checked onBootComplete This patch adds an extra Event for when the dock setting is changed, this is picked up by the WiredObserver and either stops or starts listening to the dock. Note that stopObserving() stops all observations so the other endpoints need re-observing. Change-Id: Ifcb3e36f116688d0ccb7be15f1e7aa3d24e2981c
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/WiredAccessoryObserver.java53
1 files changed, 38 insertions, 15 deletions
diff --git a/services/java/com/android/server/WiredAccessoryObserver.java b/services/java/com/android/server/WiredAccessoryObserver.java
index b36ea37..4c76bc6 100644
--- a/services/java/com/android/server/WiredAccessoryObserver.java
+++ b/services/java/com/android/server/WiredAccessoryObserver.java
@@ -1,4 +1,4 @@
-/*
+ /*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -66,6 +66,8 @@ class WiredAccessoryObserver extends UEventObserver {
BIT_HDMI_AUDIO);
private static final int HEADSETS_WITH_MIC = BIT_HEADSET;
+ public static final String DOCK_AUDIO_SETTING_CHANGED = "DOCK_AUDIO_SETTING_CHANGED";
+
private int mHeadsetState;
private int mPrevHeadsetState;
private String mHeadsetName;
@@ -80,29 +82,50 @@ class WiredAccessoryObserver extends UEventObserver {
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiredAccessoryObserver");
mWakeLock.setReferenceCounted(false);
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_BOOT_COMPLETED);
+ filter.addAction(DOCK_AUDIO_SETTING_CHANGED);
+
context.registerReceiver(new BootCompletedReceiver(),
- new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null);
+ filter, null, null);
}
private final class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- // At any given time accessories could be inserted
- // one on the board, one on the dock and one on HDMI:
- // observe three UEVENTs
- init(); // set initial status
+ final String action = intent.getAction();
+ if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
- for (int i = 0; i < MAX_AUDIO_PORTS; i++) {
- startObserving(uEventInfo[i][0]);
- }
+ // At any given time accessories could be inserted
+ // one on the board, one on the dock and one on HDMI:
+ // observe three UEVENTs
+ init(); // set initial status
- // Do we actually need/want to hack the system and look at the dock uevents?
- if (Settings.System.getInt(context.getContentResolver(),
- Settings.System.DOCK_USB_AUDIO_ENABLED, 0) == 1) {
- for (int i = 0; i < MAX_AUDIO_PORTS_DOCK; i++) {
- startObserving(uEventInfoDock[i][0]);
+ for (int i = 0; i < MAX_AUDIO_PORTS; i++) {
+ startObserving(uEventInfo[i][0]);
}
- }
+
+ // Do we actually need/want to hack the system and look at the dock uevents?
+ if (Settings.System.getInt(context.getContentResolver(),
+ Settings.System.DOCK_USB_AUDIO_ENABLED, 0) == 1) {
+ for (int i = 0; i < MAX_AUDIO_PORTS_DOCK; i++) {
+ startObserving(uEventInfoDock[i][0]);
+ }
+ }
+ } else if (DOCK_AUDIO_SETTING_CHANGED.equals(action)) {
+ // DOCK CHANGED
+ if (Settings.System.getInt(context.getContentResolver(),
+ Settings.System.DOCK_USB_AUDIO_ENABLED, 0) == 1) {
+ for (int i = 0; i < MAX_AUDIO_PORTS_DOCK; i++) {
+ startObserving(uEventInfoDock[i][0]);
+ }
+ } else {
+ stopObserving();
+ for (int i = 0; i < MAX_AUDIO_PORTS; i++) {
+ startObserving(uEventInfo[i][0]);
+ }
+ }
+ }
}
}