• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
18 package com.android.systemui.keyguard.ui.view.layout.sections
19 
20 import android.content.Context
21 import android.view.View
22 import android.view.ViewGroup
23 import androidx.constraintlayout.widget.ConstraintLayout
24 import androidx.constraintlayout.widget.ConstraintSet
25 import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
26 import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
27 import com.android.systemui.keyguard.shared.model.KeyguardSection
28 import com.android.systemui.keyguard.ui.view.KeyguardRootView
29 import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
30 import com.android.systemui.res.R
31 import com.android.systemui.shade.ShadeDisplayAware
32 import javax.inject.Inject
33 
34 /** Adds a layer to group elements for translation for burn-in preventation */
35 class AodBurnInSection
36 @Inject
37 constructor(
38     @ShadeDisplayAware private val context: Context,
39     private val rootView: KeyguardRootView,
40     private val clockViewModel: KeyguardClockViewModel,
41 ) : KeyguardSection() {
42     private lateinit var burnInLayer: AodBurnInLayer
43     // The burn-in layer requires at least 1 view at all times
<lambda>null44     private val emptyView: View by lazy {
45         View(context, null).apply {
46             id = R.id.burn_in_layer_empty_view
47             visibility = View.GONE
48         }
49     }
50 
addViewsnull51     override fun addViews(constraintLayout: ConstraintLayout) {
52         if (emptyView.parent != null) {
53             // As emptyView is lazy, it might be already attached.
54             (emptyView.parent as? ViewGroup)?.removeView(emptyView)
55         }
56         constraintLayout.addView(emptyView)
57         burnInLayer =
58             AodBurnInLayer(context).apply {
59                 id = R.id.burn_in_layer
60                 registerListener(rootView)
61                 addView(emptyView)
62             }
63         constraintLayout.addView(burnInLayer)
64     }
65 
bindDatanull66     override fun bindData(constraintLayout: ConstraintLayout) {
67         clockViewModel.burnInLayer = burnInLayer
68     }
69 
applyConstraintsnull70     override fun applyConstraints(constraintSet: ConstraintSet) {
71         constraintSet.apply {
72             // The empty view should not occupy any space
73             constrainHeight(R.id.burn_in_layer_empty_view, 1)
74             constrainWidth(R.id.burn_in_layer_empty_view, 0)
75             connect(R.id.burn_in_layer_empty_view, BOTTOM, PARENT_ID, BOTTOM)
76         }
77     }
78 
removeViewsnull79     override fun removeViews(constraintLayout: ConstraintLayout) {
80         burnInLayer.unregisterListener(rootView)
81         constraintLayout.removeView(R.id.burn_in_layer)
82     }
83 }
84