1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.keyguard.ui.view.layout.sections 18 19 import android.content.Context 20 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT 21 import android.widget.FrameLayout 22 import androidx.constraintlayout.widget.ConstraintLayout 23 import androidx.constraintlayout.widget.ConstraintSet 24 import androidx.constraintlayout.widget.ConstraintSet.BOTTOM 25 import androidx.constraintlayout.widget.ConstraintSet.END 26 import androidx.constraintlayout.widget.ConstraintSet.MATCH_CONSTRAINT 27 import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID 28 import androidx.constraintlayout.widget.ConstraintSet.START 29 import androidx.constraintlayout.widget.ConstraintSet.TOP 30 import com.android.systemui.customization.R as customR 31 import com.android.systemui.keyguard.shared.model.KeyguardSection 32 import com.android.systemui.media.controls.ui.controller.KeyguardMediaController 33 import com.android.systemui.res.R 34 import com.android.systemui.shade.ShadeDisplayAware 35 import javax.inject.Inject 36 37 /** Aligns media on left side for split shade, below smartspace, date, and weather. */ 38 class SplitShadeMediaSection 39 @Inject 40 constructor( 41 @ShadeDisplayAware private val context: Context, 42 private val keyguardMediaController: KeyguardMediaController, 43 ) : KeyguardSection() { 44 private val mediaContainerId = R.id.status_view_media_container 45 addViewsnull46 override fun addViews(constraintLayout: ConstraintLayout) { 47 val mediaFrame = 48 FrameLayout(context, null).apply { 49 id = mediaContainerId 50 val padding = context.resources.getDimensionPixelSize(R.dimen.qs_media_padding) 51 val horizontalPadding = 52 padding + 53 context.resources.getDimensionPixelSize( 54 customR.dimen.status_view_margin_horizontal 55 ) 56 57 setPaddingRelative(horizontalPadding, padding, horizontalPadding, padding) 58 } 59 constraintLayout.addView(mediaFrame) 60 keyguardMediaController.attachSplitShadeContainer(mediaFrame) 61 } 62 bindDatanull63 override fun bindData(constraintLayout: ConstraintLayout) {} 64 applyConstraintsnull65 override fun applyConstraints(constraintSet: ConstraintSet) { 66 constraintSet.apply { 67 constrainWidth(mediaContainerId, MATCH_CONSTRAINT) 68 constrainHeight(mediaContainerId, WRAP_CONTENT) 69 connect(mediaContainerId, TOP, R.id.smart_space_barrier_bottom, BOTTOM) 70 connect(mediaContainerId, START, PARENT_ID, START) 71 connect(mediaContainerId, END, R.id.split_shade_guideline, END) 72 } 73 } 74 removeViewsnull75 override fun removeViews(constraintLayout: ConstraintLayout) { 76 constraintLayout.removeView(mediaContainerId) 77 } 78 } 79