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
19 
20 import android.content.Context
21 import android.text.TextUtils
22 import android.util.AttributeSet
23 import android.view.Gravity
24 import android.view.View
25 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
26 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
27 import android.widget.LinearLayout
28 import com.android.systemui.R
29 import com.android.systemui.statusbar.phone.KeyguardIndicationTextView
30 
31 class KeyguardIndicationArea(
32     context: Context,
33     private val attrs: AttributeSet?,
34 ) :
35     LinearLayout(
36         context,
37         attrs,
38     ) {
39 
40     init {
41         setId(R.id.keyguard_indication_area)
42         orientation = LinearLayout.VERTICAL
43 
44         addView(indicationTopRow(), LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT))
45         addView(
46             indicationBottomRow(),
47             LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
48                 gravity = Gravity.CENTER_HORIZONTAL
49             }
50         )
51     }
52 
53     private fun indicationTopRow(): KeyguardIndicationTextView {
54         return KeyguardIndicationTextView(context, attrs).apply {
55             id = R.id.keyguard_indication_text
56             gravity = Gravity.CENTER
57             accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE
58             setTextAppearance(R.style.TextAppearance_Keyguard_BottomArea)
59 
60             val padding = R.dimen.keyguard_indication_text_padding.dp()
61             setPaddingRelative(padding, 0, padding, 0)
62         }
63     }
64 
65     private fun indicationBottomRow(): KeyguardIndicationTextView {
66         return KeyguardIndicationTextView(context, attrs).apply {
67             id = R.id.keyguard_indication_text_bottom
68             gravity = Gravity.CENTER
69             accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE
70 
71             setTextAppearance(R.style.TextAppearance_Keyguard_BottomArea)
72             setEllipsize(TextUtils.TruncateAt.END)
73             setAlpha(0.8f)
74             setMinHeight(R.dimen.keyguard_indication_text_min_height.dp())
75             setMaxLines(2)
76             setVisibility(View.GONE)
77 
78             val padding = R.dimen.keyguard_indication_text_padding.dp()
79             setPaddingRelative(padding, 0, padding, 0)
80         }
81     }
82 
83     private fun Int.dp(): Int {
84         return context.resources.getDimensionPixelSize(this)
85     }
86 }
87