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

Commit 91487ebd authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge changes I771230c1,I460dfc11 into main

* changes:
  Support media on splitshade with constraints
  Fix NSSL flicker when going to/from OCCLUDED
parents 13961f6f 1bc217c6
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