8/N Pull some usage of the MediaHost out of QSPanel

Bug: 168904199
Test: atest SystemUITests
Change-Id: I1a1c257cc5e805835bbec124af12f1ebd5b47105
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt b/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt
index 857c50f..b74ca28 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt
@@ -62,6 +62,10 @@
         visibleChangedListeners.add(listener)
     }
 
+    fun removeVisibilityChangeListener(listener: (Boolean) -> Unit) {
+        visibleChangedListeners.remove(listener)
+    }
+
     /**
      * Initialize this MediaObject and create a host view.
      * All state should already be set on this host before calling this method in order to avoid
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 8955a7e..337f31e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -42,7 +42,6 @@
 import com.android.internal.widget.RemeasuringLinearLayout;
 import com.android.systemui.Dependency;
 import com.android.systemui.R;
-import com.android.systemui.media.MediaHierarchyManager;
 import com.android.systemui.media.MediaHost;
 import com.android.systemui.plugins.qs.DetailAdapter;
 import com.android.systemui.plugins.qs.QSTile;
@@ -69,7 +68,7 @@
     private static final String TAG = "QSPanel";
 
     protected final Context mContext;
-    protected final MediaHost mMediaHost;
+    private final MediaHost mMediaHost;
 
     /**
      * The index where the content starts that needs to be moved between parents
@@ -144,10 +143,6 @@
         mMediaTotalBottomMargin = getResources().getDimensionPixelSize(
                 R.dimen.quick_settings_bottom_margin_media);
         mMediaHost = mediaHost;
-        mMediaHost.addVisibilityChangeListener((visible) -> {
-            onMediaVisibilityChanged(visible);
-            return null;
-        });
         mContext = context;
         mQSLogger = qsLogger;
         mUiEventLogger = uiEventLogger;
@@ -179,8 +174,6 @@
 
             lp = new LayoutParams(LayoutParams.MATCH_PARENT, 0, 1);
             addView(mHorizontalLinearLayout, lp);
-
-            initMediaHostState();
         }
         mQSLogger.logAllTilesChangeListening(mListening, getDumpableTag(), "");
     }
@@ -220,17 +213,10 @@
         return createRegularTileLayout();
     }
 
-    protected void initMediaHostState() {
-        mMediaHost.setExpansion(1.0f);
-        mMediaHost.setShowsOnlyActiveMedia(false);
-        updateMediaDisappearParameters();
-        mMediaHost.init(MediaHierarchyManager.LOCATION_QS);
-    }
-
     /**
      * Update the way the media disappears based on if we're using the horizontal layout
      */
-    private void updateMediaDisappearParameters() {
+    void updateMediaDisappearParameters() {
         if (!mUsingMediaPlayer) {
             return;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
index 32c81af..eaa3ed0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java
@@ -28,6 +28,7 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.media.MediaHierarchyManager;
 import com.android.systemui.media.MediaHost;
 import com.android.systemui.plugins.qs.DetailAdapter;
 import com.android.systemui.plugins.qs.QSTile;
@@ -99,6 +100,9 @@
     @Override
     public void onInit() {
         super.onInit();
+        mMediaHost.setExpansion(1);
+        mMediaHost.setShowsOnlyActiveMedia(false);
+        mMediaHost.init(MediaHierarchyManager.LOCATION_QS);
         mQsCustomizerController.init();
         mBrightnessSlider.init();
     }
@@ -106,6 +110,9 @@
     @Override
     protected void onViewAttached() {
         super.onViewAttached();
+
+        mView.updateMediaDisappearParameters();
+
         mTunerService.addTunable(mView, QS_SHOW_BRIGHTNESS);
         mView.updateResources();
         if (mView.isListening()) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
index 06bf9ac..2c4c8c2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
@@ -39,6 +39,9 @@
 import java.util.Collection;
 import java.util.stream.Collectors;
 
+import kotlin.Unit;
+import kotlin.jvm.functions.Function1;
+
 /**
  * Controller for QSPanel views.
  *
@@ -48,7 +51,7 @@
         implements Dumpable{
     protected final QSTileHost mHost;
     private final QSCustomizerController mQsCustomizerController;
-    private final MediaHost mMediaHost;
+    protected final MediaHost mMediaHost;
     private final MetricsLogger mMetricsLogger;
     private final UiEventLogger mUiEventLogger;
     private final DumpManager mDumpManager;
@@ -72,6 +75,12 @@
                 }
             };
 
+    private final Function1<Boolean, Unit> mMediaHostVisibilityListener = (visible) -> {
+        mView.onMediaVisibilityChanged(visible);
+        switchTileLayout(false);
+        return null;
+    };
+
     protected QSPanelControllerBase(T view, QSTileHost host,
             QSCustomizerController qsCustomizerController, MediaHost mediaHost,
             MetricsLogger metricsLogger, UiEventLogger uiEventLogger, DumpManager dumpManager) {
@@ -91,14 +100,13 @@
             mQsTileRevealController.setExpansion(mRevealExpansion);
         }
 
+        mMediaHost.addVisibilityChangeListener(mMediaHostVisibilityListener);
+        mView.onMediaVisibilityChanged(mMediaHost.getVisible());
         mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
         mHost.addCallback(mQSHostCallback);
-        mMediaHost.addVisibilityChangeListener(aBoolean -> {
-            switchTileLayout(false);
-            return null;
-        });
         setTiles();
         switchTileLayout(true);
+
         mDumpManager.registerDumpable(mView.getDumpableTag(), this);
     }
 
@@ -107,6 +115,8 @@
         mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
         mHost.removeCallback(mQSHostCallback);
 
+        mMediaHost.removeVisibilityChangeListener(mMediaHostVisibilityListener);
+
         for (TileRecord record : mRecords) {
             record.tile.removeCallbacks();
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index 06e8634..84c2ac24 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -29,7 +29,6 @@
 
 import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.R;
-import com.android.systemui.media.MediaHierarchyManager;
 import com.android.systemui.media.MediaHost;
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.qs.QSTile.SignalState;
@@ -89,14 +88,6 @@
     }
 
     @Override
-
-    protected void initMediaHostState() {
-        mMediaHost.setExpansion(0.0f);
-        mMediaHost.setShowsOnlyActiveMedia(true);
-        mMediaHost.init(MediaHierarchyManager.LOCATION_QQS);
-    }
-
-    @Override
     protected boolean needsDynamicRowsAndColumns() {
         return false; // QQS always have the same layout
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java
index 7f50eef..174a81f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java
@@ -22,6 +22,7 @@
 import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.R;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.media.MediaHierarchyManager;
 import com.android.systemui.media.MediaHost;
 import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.qs.customize.QSCustomizerController;
@@ -58,6 +59,14 @@
     }
 
     @Override
+    protected void onInit() {
+        super.onInit();
+        mMediaHost.setExpansion(0.0f);
+        mMediaHost.setShowsOnlyActiveMedia(true);
+        mMediaHost.init(MediaHierarchyManager.LOCATION_QQS);
+    }
+
+    @Override
     protected void onViewAttached() {
         super.onViewAttached();
         mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);