• 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.settings.fuelgauge.batteryusage;
18 
19 import android.content.Context;
20 import android.text.TextUtils;
21 import android.util.AttributeSet;
22 import android.view.View;
23 import android.widget.ImageView;
24 import android.widget.LinearLayout;
25 import android.widget.TextView;
26 
27 import androidx.annotation.VisibleForTesting;
28 import androidx.preference.Preference;
29 import androidx.preference.PreferenceViewHolder;
30 
31 import com.android.settings.R;
32 import com.android.settings.overlay.FeatureFactory;
33 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
34 
35 import com.google.android.material.button.MaterialButton;
36 
37 /**
38  * A preference for displaying the battery tips card view.
39  */
40 public class BatteryTipsCardPreference extends Preference implements View.OnClickListener {
41 
42     private static final String TAG = "BatteryTipsCardPreference";
43 
44     interface OnConfirmListener {
onConfirm()45         void onConfirm();
46     }
47 
48     interface OnRejectListener {
onReject()49         void onReject();
50     }
51 
52     private final MetricsFeatureProvider mMetricsFeatureProvider;
53     private OnConfirmListener mOnConfirmListener;
54     private OnRejectListener mOnRejectListener;
55     private int mIconResourceId = 0;
56     private int mMainButtonStrokeColorResourceId = 0;
57 
58     @VisibleForTesting
59     CharSequence mMainButtonLabel;
60     @VisibleForTesting
61     CharSequence mDismissButtonLabel;
62 
BatteryTipsCardPreference(Context context, AttributeSet attrs)63     public BatteryTipsCardPreference(Context context, AttributeSet attrs) {
64         super(context, attrs);
65         setLayoutResource(R.layout.battery_tips_card);
66         setSelectable(false);
67         final FeatureFactory featureFactory = FeatureFactory.getFactory(context);
68         mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
69     }
70 
setOnConfirmListener(OnConfirmListener listener)71     public void setOnConfirmListener(OnConfirmListener listener) {
72         mOnConfirmListener = listener;
73     }
74 
setOnRejectListener(OnRejectListener listener)75     public void setOnRejectListener(OnRejectListener listener) {
76         mOnRejectListener = listener;
77     }
78 
79     /**
80      * Sets the icon in tips card.
81      */
setIconResourceId(int resourceId)82     public void setIconResourceId(int resourceId) {
83         if (mIconResourceId != resourceId) {
84             mIconResourceId = resourceId;
85             notifyChanged();
86         }
87     }
88 
89     /**
90      * Sets the stroke color of main button in tips card.
91      */
setMainButtonStrokeColorResourceId(int resourceId)92     public void setMainButtonStrokeColorResourceId(int resourceId) {
93         if (mMainButtonStrokeColorResourceId != resourceId) {
94             mMainButtonStrokeColorResourceId = resourceId;
95             notifyChanged();
96         }
97     }
98 
99     /**
100      * Sets the label of main button in tips card.
101      */
setMainButtonLabel(CharSequence label)102     public void setMainButtonLabel(CharSequence label) {
103         if (!TextUtils.equals(mMainButtonLabel, label)) {
104             mMainButtonLabel = label;
105             notifyChanged();
106         }
107     }
108 
109     /**
110      * Sets the label of dismiss button in tips card.
111      */
setDismissButtonLabel(CharSequence label)112     public void setDismissButtonLabel(CharSequence label) {
113         if (!TextUtils.equals(mDismissButtonLabel, label)) {
114             mDismissButtonLabel = label;
115             notifyChanged();
116         }
117     }
118 
119     @Override
onClick(View view)120     public void onClick(View view) {
121         final int viewId = view.getId();
122         if (viewId == R.id.main_button || viewId == R.id.tips_card) {
123             if (mOnConfirmListener != null) {
124                 mOnConfirmListener.onConfirm();
125             }
126         } else if (viewId == R.id.dismiss_button) {
127             if (mOnRejectListener != null) {
128                 mOnRejectListener.onReject();
129             }
130         }
131     }
132 
133     @Override
onBindViewHolder(PreferenceViewHolder view)134     public void onBindViewHolder(PreferenceViewHolder view) {
135         super.onBindViewHolder(view);
136 
137         ((TextView) view.findViewById(R.id.title)).setText(getTitle());
138 
139         LinearLayout tipsCard = (LinearLayout) view.findViewById(R.id.tips_card);
140         tipsCard.setOnClickListener(this);
141         MaterialButton mainButton = (MaterialButton) view.findViewById(R.id.main_button);
142         mainButton.setOnClickListener(this);
143         mainButton.setText(mMainButtonLabel);
144         if (mMainButtonStrokeColorResourceId != 0) {
145             mainButton.setStrokeColorResource(mMainButtonStrokeColorResourceId);
146         }
147         MaterialButton dismissButton = (MaterialButton) view.findViewById(R.id.dismiss_button);
148         dismissButton.setOnClickListener(this);
149         dismissButton.setText(mDismissButtonLabel);
150         if (mIconResourceId != 0) {
151             ((ImageView) view.findViewById(R.id.icon)).setImageResource(mIconResourceId);
152         }
153     }
154 }
155