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

Commit 1bc217c6 authored by Matt Pietal's avatar Matt Pietal
Browse files

Support media on splitshade with constraints

Migrate media to use constraints on split shade, where it is a
separate item. By default, it is in the notification stack but split
shade is different. This also fixes the behavior when dragging down
the shade, with media active.

Fixes: 296373478
Fixes: 296370020
Test: manual, use split shade and activate media
Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint
DEVELOPMENT

Change-Id: I771230c176242d69d720aa0a321bd081f05067d2
parent 85122e76
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@+id/status_view_media_container"
            android:id="@id/status_view_media_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="@dimen/qs_media_padding"
+2 −0
Original line number Diff line number Diff line
@@ -225,6 +225,8 @@
    <item type="id" name="communal_tutorial_indicator" />
    <item type="id" name="nssl_placeholder_barrier_bottom" />
    <item type="id" name="ambient_indication_container" />
    <item type="id" name="status_view_media_container" />
    <item type="id" name="smart_space_barrier_bottom" />

    <!-- Privacy dialog -->
    <item type="id" name="privacy_dialog_close_app_button" />
+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.keyguard.ui.view.layout.sections.KeyguardSectionsMod
import com.android.systemui.keyguard.ui.view.layout.sections.SmartspaceSection
import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeClockSection
import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeGuidelines
import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeMediaSection
import com.android.systemui.keyguard.ui.view.layout.sections.SplitShadeNotificationStackScrollLayoutSection
import com.android.systemui.util.kotlin.getOrNull
import java.util.Optional
@@ -63,6 +64,7 @@ constructor(
    communalTutorialIndicatorSection: CommunalTutorialIndicatorSection,
    smartspaceSection: SmartspaceSection,
    clockSection: SplitShadeClockSection,
    mediaSection: SplitShadeMediaSection,
) : KeyguardBlueprint {
    override val id: String = ID

@@ -81,6 +83,7 @@ constructor(
            aodBurnInSection,
            communalTutorialIndicatorSection,
            clockSection,
            mediaSection,
            defaultDeviceEntrySection, // Add LAST: Intentionally has z-order above other views.
        )

+111 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.keyguard.ui.view.layout.sections

import android.content.Context
import android.view.View
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.FrameLayout
import androidx.constraintlayout.widget.Barrier
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
import androidx.constraintlayout.widget.ConstraintSet.END
import androidx.constraintlayout.widget.ConstraintSet.MATCH_CONSTRAINT
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP
import com.android.systemui.Flags.migrateClocksToBlueprint
import com.android.systemui.keyguard.shared.model.KeyguardSection
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.media.controls.ui.KeyguardMediaController
import com.android.systemui.res.R
import com.android.systemui.shade.NotificationPanelView
import javax.inject.Inject

/** Aligns media on left side for split shade, below smartspace, date, and weather. */
class SplitShadeMediaSection
@Inject
constructor(
    private val context: Context,
    private val notificationPanelView: NotificationPanelView,
    private val keyguardSmartspaceViewModel: KeyguardSmartspaceViewModel,
    private val keyguardMediaController: KeyguardMediaController
) : KeyguardSection() {
    private val mediaContainerId = R.id.status_view_media_container
    private val smartSpaceBarrier = R.id.smart_space_barrier_bottom

    override fun addViews(constraintLayout: ConstraintLayout) {
        if (!migrateClocksToBlueprint()) {
            return
        }

        notificationPanelView.findViewById<View>(mediaContainerId)?.let {
            notificationPanelView.removeView(it)
        }

        val mediaFrame =
            FrameLayout(context, null).apply {
                id = mediaContainerId
                val padding = context.resources.getDimensionPixelSize(R.dimen.qs_media_padding)
                val horizontalPadding =
                    padding +
                        context.resources.getDimensionPixelSize(
                            R.dimen.status_view_margin_horizontal
                        )

                setPaddingRelative(horizontalPadding, padding, horizontalPadding, padding)
            }
        constraintLayout.addView(mediaFrame)
        keyguardMediaController.attachSplitShadeContainer(mediaFrame)
    }

    override fun bindData(constraintLayout: ConstraintLayout) {}

    override fun applyConstraints(constraintSet: ConstraintSet) {
        if (!migrateClocksToBlueprint()) {
            return
        }

        constraintSet.apply {
            constrainWidth(mediaContainerId, MATCH_CONSTRAINT)
            constrainHeight(mediaContainerId, WRAP_CONTENT)

            createBarrier(
                smartSpaceBarrier,
                Barrier.BOTTOM,
                0,
                *intArrayOf(
                    keyguardSmartspaceViewModel.smartspaceViewId,
                    keyguardSmartspaceViewModel.dateId,
                    keyguardSmartspaceViewModel.weatherId,
                )
            )
            connect(mediaContainerId, TOP, smartSpaceBarrier, BOTTOM)
            connect(mediaContainerId, START, PARENT_ID, START)
            connect(mediaContainerId, END, R.id.split_shade_guideline, END)
        }
    }

    override fun removeViews(constraintLayout: ConstraintLayout) {
        if (!migrateClocksToBlueprint()) {
            return
        }

        constraintLayout.removeView(mediaContainerId)
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.VisibleForTesting
import com.android.systemui.Dumpable
import com.android.systemui.Flags.migrateClocksToBlueprint
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
@@ -180,7 +181,11 @@ constructor(
    /** Called whenever the media hosts visibility changes */
    private fun onMediaHostVisibilityChanged(visible: Boolean) {
        refreshMediaPosition(reason = "onMediaHostVisibilityChanged")

        if (visible) {
            if (migrateClocksToBlueprint() && useSplitShade) {
                return
            }
            mediaHost.hostView.layoutParams.apply {
                height = ViewGroup.LayoutParams.WRAP_CONTENT
                width = ViewGroup.LayoutParams.MATCH_PARENT
Loading