From cc4c6c3520407d7aff5279591c29d4162baab454 Mon Sep 17 00:00:00 2001 From: Fabian Kozynski Date: Mon, 9 Mar 2020 15:11:33 -0400 Subject: [PATCH] Use Singleton LocalBluetoothManager in SystemUI Use the Dagger created LocalBluetoothManager everywhere in SystemUI. Create LocalMediaManager by injecting said manager. This prevents the SystemUI package to have multiple instances of LocalBluetoothManager Fixes: 150833065 Bug: 151319693 Test: bluetooth tile shows correct state Change-Id: I9a4d81f32036a7ed94c202eac4ace84f0d6bf988 --- .../android/settingslib/media/LocalMediaManager.java | 4 +--- .../SystemUI/src/com/android/systemui/qs/QSPanel.java | 11 +++++++++-- .../src/com/android/systemui/qs/QuickQSPanel.java | 9 +++++---- .../systemui/statusbar/MediaTransferManager.java | 6 +++++- .../src/com/android/systemui/qs/QSPanelTest.java | 6 +++++- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index adb3c1170f8f0..22d4963aec7f8 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -108,14 +108,12 @@ public class LocalMediaManager implements BluetoothCallback { new InfoMediaManager(context, packageName, notification, mLocalBluetoothManager); } - @VisibleForTesting - LocalMediaManager(Context context, LocalBluetoothManager localBluetoothManager, + public LocalMediaManager(Context context, LocalBluetoothManager localBluetoothManager, InfoMediaManager infoMediaManager, String packageName) { mContext = context; mLocalBluetoothManager = localBluetoothManager; mInfoMediaManager = infoMediaManager; mPackageName = packageName; - } /** diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 9ab47145f92d5..bf72b33ada42d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -44,6 +44,8 @@ import android.widget.LinearLayout; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.Utils; +import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.settingslib.media.InfoMediaManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.systemui.Dependency; @@ -98,6 +100,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne private final LinearLayout mMediaCarousel; private final ArrayList mMediaPlayers = new ArrayList<>(); private final NotificationMediaManager mNotificationMediaManager; + private final LocalBluetoothManager mLocalBluetoothManager; private final Executor mBackgroundExecutor; private LocalMediaManager mLocalMediaManager; private MediaDevice mDevice; @@ -157,7 +160,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne BroadcastDispatcher broadcastDispatcher, QSLogger qsLogger, NotificationMediaManager notificationMediaManager, - @Background Executor backgroundExecutor + @Background Executor backgroundExecutor, + @Nullable LocalBluetoothManager localBluetoothManager ) { super(context, attrs); mContext = context; @@ -165,6 +169,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne mDumpManager = dumpManager; mNotificationMediaManager = notificationMediaManager; mBackgroundExecutor = backgroundExecutor; + mLocalBluetoothManager = localBluetoothManager; setOrientation(VERTICAL); @@ -286,7 +291,9 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne // Set up listener for device changes // TODO: integrate with MediaTransferManager? - mLocalMediaManager = new LocalMediaManager(mContext, null, null); + InfoMediaManager imm = + new InfoMediaManager(mContext, null, null, mLocalBluetoothManager); + mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager, imm, null); mLocalMediaManager.startScan(); mDevice = mLocalMediaManager.getCurrentConnectedDevice(); mLocalMediaManager.registerCallback(mDeviceCallback); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 3da767e51be0b..6654b7ab07497 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -18,6 +18,7 @@ package com.android.systemui.qs; import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT; +import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; @@ -26,6 +27,7 @@ import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; +import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -77,10 +79,11 @@ public class QuickQSPanel extends QSPanel { BroadcastDispatcher broadcastDispatcher, QSLogger qsLogger, NotificationMediaManager notificationMediaManager, - @Background Executor backgroundExecutor + @Background Executor backgroundExecutor, + @Nullable LocalBluetoothManager localBluetoothManager ) { super(context, attrs, dumpManager, broadcastDispatcher, qsLogger, notificationMediaManager, - backgroundExecutor); + backgroundExecutor, localBluetoothManager); if (mFooter != null) { removeView(mFooter.getView()); } @@ -155,8 +158,6 @@ public class QuickQSPanel extends QSPanel { Dependency.get(TunerService.class).removeTunable(mNumTiles); } - - @Override protected String getDumpableTag() { return TAG; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/MediaTransferManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/MediaTransferManager.java index 18574f0f891e5..ac3523b2fffd0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/MediaTransferManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/MediaTransferManager.java @@ -32,6 +32,8 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.settingslib.media.InfoMediaManager; import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.MediaDevice; import com.android.settingslib.media.MediaOutputSliceConstants; @@ -106,7 +108,9 @@ public class MediaTransferManager { public MediaTransferManager(Context context) { mContext = context; mActivityStarter = Dependency.get(ActivityStarter.class); - mLocalMediaManager = new LocalMediaManager(mContext, null, null); + LocalBluetoothManager lbm = Dependency.get(LocalBluetoothManager.class); + InfoMediaManager imm = new InfoMediaManager(mContext, null, null, lbm); + mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, null); } /** diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java index 616399afe7a43..ac304210d4165 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java @@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settingslib.bluetooth.LocalBluetoothManager; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dump.DumpManager; @@ -85,6 +86,8 @@ public class QSPanelTest extends SysuiTestCase { private NotificationMediaManager mNotificationMediaManager; @Mock private Executor mBackgroundExecutor; + @Mock + private LocalBluetoothManager mLocalBluetoothManager; @Before public void setup() throws Exception { @@ -94,7 +97,8 @@ public class QSPanelTest extends SysuiTestCase { mTestableLooper.runWithLooper(() -> { mMetricsLogger = mDependency.injectMockDependency(MetricsLogger.class); mQsPanel = new QSPanel(mContext, null, mDumpManager, mBroadcastDispatcher, - mQSLogger, mNotificationMediaManager, mBackgroundExecutor); + mQSLogger, mNotificationMediaManager, mBackgroundExecutor, + mLocalBluetoothManager); // Provides a parent with non-zero size for QSPanel mParentView = new FrameLayout(mContext); mParentView.addView(mQsPanel);