MediaContainerView: Bind KeyguardMediaController visibility to MediaContainerView's visibility

MediaContainerView's visibility is decided by KeyguardMediaController but it is managed by View's visibility (this.gone= getVisibility() == GONE) and View visibility could be changed.
This CL bind KeyguardMediaController visible to MediaContainerView's visibility with MediaContainerViewState.

Bug: 298213983
Test: presubmit
Flag: ACONFIG com.android.systemui.bind_keyguard_media_visibility DEVELOPMENT
Change-Id: I28127caaea059a7bcbac9ffef46950bedc1c401e
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index 71f9ba27..2dd3b09 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -529,3 +529,13 @@
         purpose: PURPOSE_BUGFIX
     }
 }
+
+flag {
+    name: "bind_keyguard_media_visibility"
+    namespace: "systemui"
+    description: "Binds Keyguard Media Controller Visibility to MediaContainerView"
+    bug: "298213983"
+    metadata {
+        purpose: PURPOSE_BUGFIX
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt
index d0c6a46..5551ab4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt
@@ -23,6 +23,7 @@
 import android.graphics.RectF
 import android.util.AttributeSet
 import android.util.Log
+import com.android.systemui.Flags
 import com.android.systemui.res.R
 import com.android.systemui.statusbar.notification.row.ExpandableView
 
@@ -90,11 +91,27 @@
     }
 
     override fun setVisibility(visibility: Int) {
-        super.setVisibility(visibility)
+        if (Flags.bindKeyguardMediaVisibility()) {
+            if (isVisibilityValid(visibility)) {
+                super.setVisibility(visibility)
+            }
+        } else {
+            super.setVisibility(visibility)
+        }
+
         assertMediaContainerVisibility(visibility)
     }
 
     /**
+     * visibility should be aligned with MediaContainerView visibility on the keyguard.
+     */
+    private fun isVisibilityValid(visibility: Int): Boolean {
+        val currentViewState = viewState as? MediaContainerViewState ?: return true
+        val shouldBeGone = !currentViewState.shouldBeVisible
+        return if (shouldBeGone) visibility == GONE else visibility != GONE
+    }
+
+    /**
      * b/298213983
      * MediaContainerView's visibility is changed to VISIBLE when it should be GONE.
      * This method check this state and logs.