• 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 package com.android.permissioncontroller.safetycenter.ui.view
18 
19 import android.content.Context
20 import android.os.Build
21 import android.util.AttributeSet
22 import android.widget.ImageView
23 import android.widget.LinearLayout
24 import android.widget.TextSwitcher
25 import android.widget.TextView
26 import androidx.annotation.RequiresApi
27 import androidx.constraintlayout.widget.ConstraintLayout
28 import com.android.permissioncontroller.R
29 import com.android.permissioncontroller.safetycenter.ui.model.StatusUiData
30 import com.google.android.material.button.MaterialButton
31 
32 @RequiresApi(Build.VERSION_CODES.TIRAMISU)
33 internal class StatusCardView
34 @JvmOverloads
35 constructor(
36     context: Context,
37     attrs: AttributeSet? = null,
38     defStyleAttr: Int = 0,
39     defStyleRes: Int = 0,
40 ) : ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) {
41 
42     init {
43         inflate(context, R.layout.view_status_card, this)
44     }
45 
46     val statusImageView: ImageView by lazyView(R.id.status_image)
47     val titleAndSummaryContainerView: LinearLayout by lazyView(R.id.status_title_and_summary)
48     private val titleView: TextSwitcher by lazyView(R.id.status_title)
49     private val summaryView: TextSwitcher by lazyView(R.id.status_summary)
50     val reviewSettingsButton: MaterialButton by lazyView(R.id.review_settings_button)
51     val rescanButton: MaterialButton by lazyView(R.id.rescan_button)
52 
showTextnull53     fun showText(statusUiData: StatusUiData) {
54         titleView.updateText(statusUiData.title)
55         summaryView.updateText(statusUiData.getSummary(context))
56     }
57 
TextSwitchernull58     private fun TextSwitcher.updateText(newText: CharSequence) {
59         val currentText: CharSequence? = (currentView as TextView).text
60         if (currentText == newText) {
61             return
62         }
63 
64         if (currentText.isNullOrBlank()) {
65             setCurrentText(newText)
66         } else {
67             setText(newText)
68         }
69     }
70 
showButtonsnull71     fun showButtons(statusUiData: StatusUiData) {
72         rescanButton.isEnabled = !statusUiData.isRefreshInProgress
73 
74         when (statusUiData.buttonToShow) {
75             StatusUiData.ButtonToShow.RESCAN -> {
76                 rescanButton.visibility = VISIBLE
77                 reviewSettingsButton.visibility = GONE
78             }
79             StatusUiData.ButtonToShow.REVIEW_SETTINGS -> {
80                 rescanButton.visibility = GONE
81                 reviewSettingsButton.visibility = VISIBLE
82             }
83             null -> {
84                 rescanButton.visibility = GONE
85                 reviewSettingsButton.visibility = GONE
86             }
87         }
88     }
89 }
90