1 /*
2  * Copyright (C) 2014 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.systemui.statusbar;
18 
19 import android.annotation.ColorInt;
20 import android.annotation.DrawableRes;
21 import android.annotation.StringRes;
22 import android.content.Context;
23 import android.content.res.ColorStateList;
24 import android.content.res.Configuration;
25 import android.graphics.drawable.Drawable;
26 import android.util.AttributeSet;
27 import android.view.View;
28 import android.widget.TextView;
29 
30 import androidx.annotation.NonNull;
31 
32 import com.android.systemui.R;
33 import com.android.systemui.statusbar.notification.row.StackScrollerDecorView;
34 import com.android.systemui.statusbar.notification.stack.ExpandableViewState;
35 
36 public class EmptyShadeView extends StackScrollerDecorView {
37 
38     private TextView mEmptyText;
39     private TextView mEmptyFooterText;
40 
41     private @StringRes int mText = R.string.empty_shade_text;
42 
43     private @DrawableRes int mFooterIcon = R.drawable.ic_friction_lock_closed;
44     private @StringRes int mFooterText = R.string.unlock_to_see_notif_text;
45     private @Visibility int mFooterVisibility = View.GONE;
46     private int mSize;
47 
EmptyShadeView(Context context, AttributeSet attrs)48     public EmptyShadeView(Context context, AttributeSet attrs) {
49         super(context, attrs);
50         mSize = getResources().getDimensionPixelSize(
51                 R.dimen.notifications_unseen_footer_icon_size);
52     }
53 
54     @Override
onConfigurationChanged(Configuration newConfig)55     protected void onConfigurationChanged(Configuration newConfig) {
56         super.onConfigurationChanged(newConfig);
57         mSize = getResources().getDimensionPixelSize(
58                 R.dimen.notifications_unseen_footer_icon_size);
59         mEmptyText.setText(mText);
60         mEmptyFooterText.setVisibility(mFooterVisibility);
61         setFooterText(mFooterText);
62         setFooterIcon(mFooterIcon);
63     }
64 
65     @Override
findContentView()66     protected View findContentView() {
67         return findViewById(R.id.no_notifications);
68     }
69 
70     @Override
findSecondaryView()71     protected View findSecondaryView() {
72         return findViewById(R.id.no_notifications_footer);
73     }
74 
setTextColor(@olorInt int color)75     public void setTextColor(@ColorInt int color) {
76         mEmptyText.setTextColor(color);
77         mEmptyFooterText.setTextColor(color);
78         mEmptyFooterText.setCompoundDrawableTintList(ColorStateList.valueOf(color));
79     }
80 
setText(@tringRes int text)81     public void setText(@StringRes int text) {
82         mText = text;
83         mEmptyText.setText(mText);
84     }
85 
setFooterVisibility(@isibility int visibility)86     public void setFooterVisibility(@Visibility int visibility) {
87         mFooterVisibility = visibility;
88         setSecondaryVisible(visibility == View.VISIBLE, false);
89     }
90 
setFooterText(@tringRes int text)91     public void setFooterText(@StringRes int text) {
92         mFooterText = text;
93         if (text != 0) {
94             mEmptyFooterText.setText(mFooterText);
95         } else {
96             mEmptyFooterText.setText(null);
97         }
98     }
99 
setFooterIcon(@rawableRes int icon)100     public void setFooterIcon(@DrawableRes int icon) {
101         mFooterIcon = icon;
102         Drawable drawable;
103         if (icon == 0) {
104             drawable = null;
105         } else {
106             drawable = getResources().getDrawable(icon);
107             drawable.setBounds(0, 0, mSize, mSize);
108         }
109         mEmptyFooterText.setCompoundDrawablesRelative(drawable, null, null, null);
110     }
111 
112     @StringRes
getTextResource()113     public int getTextResource() {
114         return mText;
115     }
116 
117     @StringRes
getFooterTextResource()118     public int getFooterTextResource() {
119         return mFooterText;
120     }
121 
122     @DrawableRes
getFooterIconResource()123     public int getFooterIconResource() {
124         return mFooterIcon;
125     }
126 
127     @Override
onFinishInflate()128     protected void onFinishInflate() {
129         super.onFinishInflate();
130         mEmptyText = (TextView) findContentView();
131         mEmptyFooterText = (TextView) findSecondaryView();
132         mEmptyFooterText.setCompoundDrawableTintList(mEmptyFooterText.getTextColors());
133     }
134 
135     @Override
136     @NonNull
createExpandableViewState()137     public ExpandableViewState createExpandableViewState() {
138         return new EmptyShadeViewState();
139     }
140 
141     public class EmptyShadeViewState extends ExpandableViewState {
142         @Override
applyToView(View view)143         public void applyToView(View view) {
144             super.applyToView(view);
145             if (view instanceof EmptyShadeView) {
146                 EmptyShadeView emptyShadeView = (EmptyShadeView) view;
147                 boolean visible = this.clipTopAmount <= mEmptyText.getPaddingTop() * 0.6f;
148                 emptyShadeView.setContentVisible(visible && emptyShadeView.isVisible());
149             }
150         }
151     }
152 }
153