Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b9dd049 authored by StevenHarperUK's avatar StevenHarperUK
Browse files

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
parent 67260d96
Loading
Loading
Loading
Loading
+38 −15
Original line number Original line Diff line number Diff line
@@ -66,6 +66,8 @@ class WiredAccessoryObserver extends UEventObserver {
                                                   BIT_HDMI_AUDIO);
                                                   BIT_HDMI_AUDIO);
    private static final int HEADSETS_WITH_MIC = BIT_HEADSET;
    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 mHeadsetState;
    private int mPrevHeadsetState;
    private int mPrevHeadsetState;
    private String mHeadsetName;
    private String mHeadsetName;
@@ -80,13 +82,20 @@ class WiredAccessoryObserver extends UEventObserver {
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiredAccessoryObserver");
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WiredAccessoryObserver");
        mWakeLock.setReferenceCounted(false);
        mWakeLock.setReferenceCounted(false);


        final IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_BOOT_COMPLETED);
        filter.addAction(DOCK_AUDIO_SETTING_CHANGED);

        context.registerReceiver(new BootCompletedReceiver(),
        context.registerReceiver(new BootCompletedReceiver(),
            new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null);
            filter, null, null);
    }
    }


    private final class BootCompletedReceiver extends BroadcastReceiver {
    private final class BootCompletedReceiver extends BroadcastReceiver {
      @Override
      @Override
      public void onReceive(Context context, Intent intent) {
      public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {

            // At any given time accessories could be inserted
            // At any given time accessories could be inserted
            // one on the board, one on the dock and one on HDMI:
            // one on the board, one on the dock and one on HDMI:
            // observe three UEVENTs
            // observe three UEVENTs
@@ -103,6 +112,20 @@ class WiredAccessoryObserver extends UEventObserver {
                    startObserving(uEventInfoDock[i][0]);
                    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]);
                  }
              }
          }
      }
      }
  }
  }