blob: 8fe50974243ec00295017d7aea34f6519f7fda56 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
package de.danoeh.antennapod.view;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.AttrRes;
import android.support.annotation.DrawableRes;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import de.danoeh.antennapod.R;
public class EmptyViewHandler {
private boolean layoutAdded = false;
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private final Context context;
private final View emptyView;
private final TextView tvTitle;
private final TextView tvMessage;
private final ImageView ivIcon;
public EmptyViewHandler(Context context) {
emptyView = View.inflate(context, R.layout.empty_view_layout, null);
this.context = context;
tvTitle = emptyView.findViewById(R.id.emptyViewTitle);
tvMessage = emptyView.findViewById(R.id.emptyViewMessage);
ivIcon = emptyView.findViewById(R.id.emptyViewIcon);
}
public void setTitle(int title) {
tvTitle.setText(title);
}
public void setMessage(int message) {
tvMessage.setText(message);
}
public void setIcon(@AttrRes int iconAttr) {
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(iconAttr, typedValue, true);
Drawable d = ContextCompat.getDrawable(context, typedValue.resourceId);
ivIcon.setImageDrawable(d);
ivIcon.setVisibility(View.VISIBLE);
}
public void hide() {
emptyView.setVisibility(View.GONE);
}
public void attachToListView(ListView listView) {
if (layoutAdded) {
throw new IllegalStateException("Can not attach to ListView multiple times");
}
layoutAdded = true;
((ViewGroup) listView.getParent()).addView(emptyView);
listView.setEmptyView(emptyView);
}
public void attachToRecyclerView(RecyclerView recyclerView) {
if (layoutAdded) {
throw new IllegalStateException("Can not attach to ListView multiple times");
}
layoutAdded = true;
this.recyclerView = recyclerView;
ViewGroup parent = ((ViewGroup) recyclerView.getParent());
parent.addView(emptyView);
updateAdapter(recyclerView.getAdapter());
if (parent instanceof RelativeLayout) {
RelativeLayout.LayoutParams layoutParams =
(RelativeLayout.LayoutParams)emptyView.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
emptyView.setLayoutParams(layoutParams);
}
}
public void updateAdapter(RecyclerView.Adapter adapter) {
if (this.adapter != null) {
this.adapter.unregisterAdapterDataObserver(adapterObserver);
}
this.adapter = adapter;
if (adapter != null) {
adapter.registerAdapterDataObserver(adapterObserver);
}
updateVisibility();
}
private final SimpleAdapterDataObserver adapterObserver = new SimpleAdapterDataObserver() {
@Override
public void anythingChanged() {
updateVisibility();
}
};
private void updateVisibility() {
boolean empty;
if (adapter == null) {
empty = true;
} else {
empty = adapter.getItemCount() == 0;
}
recyclerView.setVisibility(empty ? View.GONE : View.VISIBLE);
emptyView.setVisibility(empty ? View.VISIBLE : View.GONE);
}
}
|