Loading packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml +1 −1 Original line number Diff line number Diff line Loading @@ -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" Loading packages/SystemUI/res/values/ids.xml +2 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/SplitShadeKeyguardBlueprint.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -63,6 +64,7 @@ constructor( communalTutorialIndicatorSection: CommunalTutorialIndicatorSection, smartspaceSection: SmartspaceSection, clockSection: SplitShadeClockSection, mediaSection: SplitShadeMediaSection, ) : KeyguardBlueprint { override val id: String = ID Loading @@ -81,6 +83,7 @@ constructor( aodBurnInSection, communalTutorialIndicatorSection, clockSection, mediaSection, defaultDeviceEntrySection, // Add LAST: Intentionally has z-order above other views. ) Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeMediaSection.kt 0 → 100644 +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) } } packages/SystemUI/src/com/android/systemui/media/controls/ui/KeyguardMediaController.kt +5 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml +1 −1 Original line number Diff line number Diff line Loading @@ -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" Loading
packages/SystemUI/res/values/ids.xml +2 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/blueprints/SplitShadeKeyguardBlueprint.kt +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -63,6 +64,7 @@ constructor( communalTutorialIndicatorSection: CommunalTutorialIndicatorSection, smartspaceSection: SmartspaceSection, clockSection: SplitShadeClockSection, mediaSection: SplitShadeMediaSection, ) : KeyguardBlueprint { override val id: String = ID Loading @@ -81,6 +83,7 @@ constructor( aodBurnInSection, communalTutorialIndicatorSection, clockSection, mediaSection, defaultDeviceEntrySection, // Add LAST: Intentionally has z-order above other views. ) Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeMediaSection.kt 0 → 100644 +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) } }
packages/SystemUI/src/com/android/systemui/media/controls/ui/KeyguardMediaController.kt +5 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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