summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2019-11-25 16:23:56 +0100
committerByteHamster <info@bytehamster.com>2019-11-26 00:58:11 +0100
commit1dd5c19eea8a7014cf1fa5ff0222ded4a092b8b7 (patch)
tree39c4dced95a06e0b874e1fbd26fc4809d8dcb7ac /app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
parentf2771f953f1a69aa4efb7a5e58e9cd6b1def86fe (diff)
downloadAntennaPod-1dd5c19eea8a7014cf1fa5ff0222ded4a092b8b7.zip
Fixed NPE in EmptyViewHandler
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java44
1 files changed, 34 insertions, 10 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
index 0bfd0247f..a2d8ec091 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java
@@ -1,8 +1,10 @@
package de.danoeh.antennapod.view;
import android.content.Context;
+import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.widget.AbsListView;
+import android.widget.ListAdapter;
import androidx.annotation.AttrRes;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
@@ -17,8 +19,9 @@ import de.danoeh.antennapod.R;
public class EmptyViewHandler {
private boolean layoutAdded = false;
- private RecyclerView recyclerView;
- private RecyclerView.Adapter adapter;
+ private View list;
+ private ListAdapter listAdapter;
+ private RecyclerView.Adapter recyclerAdapter;
private final Context context;
private final View emptyView;
@@ -60,7 +63,9 @@ public class EmptyViewHandler {
}
addToParentView(listView);
layoutAdded = true;
+ this.list = listView;
listView.setEmptyView(emptyView);
+ updateAdapter(listView.getAdapter());
}
public void attachToRecyclerView(RecyclerView recyclerView) {
@@ -69,7 +74,7 @@ public class EmptyViewHandler {
}
addToParentView(recyclerView);
layoutAdded = true;
- this.recyclerView = recyclerView;
+ this.list = recyclerView;
updateAdapter(recyclerView.getAdapter());
}
@@ -85,16 +90,27 @@ public class EmptyViewHandler {
}
public void updateAdapter(RecyclerView.Adapter adapter) {
- if (this.adapter != null) {
- this.adapter.unregisterAdapterDataObserver(adapterObserver);
+ if (this.recyclerAdapter != null) {
+ this.recyclerAdapter.unregisterAdapterDataObserver(adapterObserver);
}
- this.adapter = adapter;
+ this.recyclerAdapter = adapter;
if (adapter != null) {
adapter.registerAdapterDataObserver(adapterObserver);
}
updateVisibility();
}
+ private void updateAdapter(ListAdapter adapter) {
+ if (this.listAdapter != null) {
+ this.listAdapter.unregisterDataSetObserver(listAdapterObserver);
+ }
+ this.listAdapter = adapter;
+ if (adapter != null) {
+ adapter.registerDataSetObserver(listAdapterObserver);
+ }
+ updateVisibility();
+ }
+
private final SimpleAdapterDataObserver adapterObserver = new SimpleAdapterDataObserver() {
@Override
public void anythingChanged() {
@@ -102,14 +118,22 @@ public class EmptyViewHandler {
}
};
+ private final DataSetObserver listAdapterObserver = new DataSetObserver() {
+ public void onChanged() {
+ updateVisibility();
+ }
+ };
+
public void updateVisibility() {
boolean empty;
- if (adapter == null) {
- empty = true;
+ if (recyclerAdapter != null) {
+ empty = recyclerAdapter.getItemCount() == 0;
+ } else if (listAdapter != null) {
+ empty = listAdapter.isEmpty();
} else {
- empty = adapter.getItemCount() == 0;
+ empty = true;
}
- recyclerView.setVisibility(empty ? View.GONE : View.VISIBLE);
+ list.setVisibility(empty ? View.GONE : View.VISIBLE);
emptyView.setVisibility(empty ? View.VISIBLE : View.GONE);
}
}