• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.notification.modes;
18 
19 import static android.view.View.GONE;
20 import static android.view.View.VISIBLE;
21 
22 import static com.google.common.base.Preconditions.checkNotNull;
23 
24 import android.content.Context;
25 import android.util.AttributeSet;
26 
27 import androidx.annotation.Nullable;
28 import androidx.preference.PreferenceViewHolder;
29 
30 import com.android.settings.R;
31 import com.android.settingslib.RestrictedPreference;
32 
33 import com.google.common.base.Equivalence;
34 
35 public class CircularIconsPreference extends RestrictedPreference {
36 
37     private CircularIconSet<?> mIconSet = CircularIconSet.EMPTY;
38 
CircularIconsPreference(Context context)39     public CircularIconsPreference(Context context) {
40         super(context);
41         init();
42     }
43 
CircularIconsPreference(Context context, AttributeSet attrs)44     public CircularIconsPreference(Context context, AttributeSet attrs) {
45         super(context, attrs);
46         init();
47     }
48 
CircularIconsPreference(Context context, AttributeSet attrs, int defStyleAttr)49     public CircularIconsPreference(Context context, AttributeSet attrs, int defStyleAttr) {
50         super(context, attrs, defStyleAttr);
51         init();
52     }
53 
CircularIconsPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)54     public CircularIconsPreference(Context context, AttributeSet attrs, int defStyleAttr,
55             int defStyleRes) {
56         super(context, attrs, defStyleAttr, defStyleRes);
57         init();
58     }
59 
init()60     private void init() {
61         setLayoutResource(R.layout.preference_circular_icons);
62     }
63 
setIcons(CircularIconSet<T> iconSet)64     <T> void setIcons(CircularIconSet<T> iconSet) {
65         setIcons(iconSet, null);
66     }
67 
setIcons(CircularIconSet<T> iconSet, @Nullable Equivalence<T> itemEquivalence)68     <T> void setIcons(CircularIconSet<T> iconSet, @Nullable Equivalence<T> itemEquivalence) {
69         if (mIconSet.hasSameItemsAs(iconSet, itemEquivalence)) {
70             return;
71         }
72 
73         mIconSet = iconSet;
74         notifyChanged();
75     }
76 
77     @Override
onBindViewHolder(PreferenceViewHolder holder)78     public void onBindViewHolder(PreferenceViewHolder holder) {
79         super.onBindViewHolder(holder);
80         CircularIconsView iconContainer = checkNotNull(
81                 (CircularIconsView) holder.findViewById(R.id.circles_container));
82 
83         iconContainer.setVisibility(mIconSet != null && mIconSet.size() == 0 ? GONE : VISIBLE);
84         iconContainer.setEnabled(isEnabled());
85         iconContainer.setIcons(mIconSet);
86     }
87 }
88