summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-20 19:54:55 +0100
committerByteHamster <info@bytehamster.com>2020-03-20 19:55:56 +0100
commit1f4801b3b257d24bdadf7d0c2e18768ee02acd4d (patch)
treea1f5e3e909b84bb1d444b95368142b2f20e75e4f /app
parent8e10b986b232fc006c02033b4bfa3aa14e79b4ab (diff)
downloadAntennaPod-1f4801b3b257d24bdadf7d0c2e18768ee02acd4d.zip
Fixed item flickering while downloading
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java13
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java4
7 files changed, 24 insertions, 11 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
index f8fd99867..2f39b599f 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
@@ -68,6 +68,19 @@ public class EpisodeItemListAdapter extends RecyclerView.Adapter<EpisodeItemView
holder.hideSeparatorIfNecessary();
}
+ /**
+ * {@link #notifyItemChanged(int)} is final, so we can not override.
+ * Calling {@link #notifyItemChanged(int)} may bind the item to a new ViewHolder and execute a transition.
+ * This causes flickering and breaks the download animation that stores the old progress in the View.
+ * Instead, we tell the adapter to use partial binding by calling {@link #notifyItemChanged(int, Object)}.
+ * We actually ignore the payload and always do a full bind but calling the partial bind method ensures
+ * that ViewHolders are always re-used.
+ * @param position Position of the item that has changed
+ */
+ public void notifyItemChangedCompat(int position) {
+ notifyItemChanged(position, "foo");
+ }
+
@Nullable
public FeedItem getSelectedItem() {
return selectedItem;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
index fbd6a6670..20999abe9 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
@@ -151,7 +151,7 @@ public class CompletedDownloadsFragment extends Fragment {
items.remove(pos);
if (item.getMedia().isDownloaded()) {
items.add(pos, item);
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
} else {
adapter.notifyItemRemoved(pos);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
index cb72153c2..2a7c1f2b1 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
@@ -358,7 +358,7 @@ public abstract class EpisodesListFragment extends Fragment {
episodes.remove(pos);
if (shouldUpdatedItemRemainInList(item)) {
episodes.add(pos, item);
- listAdapter.notifyItemChanged(pos);
+ listAdapter.notifyItemChangedCompat(pos);
} else {
listAdapter.notifyItemRemoved(pos);
}
@@ -394,7 +394,7 @@ public abstract class EpisodesListFragment extends Fragment {
for (long mediaId : update.mediaIds) {
int pos = FeedItemUtil.indexOfItemWithMediaId(episodes, mediaId);
if (pos >= 0) {
- listAdapter.notifyItemChanged(pos);
+ listAdapter.notifyItemChangedCompat(pos);
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
index bba17652a..b4e28567c 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
@@ -354,7 +354,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
if (pos >= 0) {
feed.getItems().remove(pos);
feed.getItems().add(pos, item);
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
}
}
}
@@ -370,7 +370,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
for (long mediaId : update.mediaIds) {
int pos = FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId);
if (pos >= 0) {
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
index 36cda5c84..10a5a81d4 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -115,7 +115,7 @@ public class PlaybackHistoryFragment extends Fragment {
if (pos >= 0) {
playbackHistory.remove(pos);
playbackHistory.add(pos, item);
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
}
}
}
@@ -128,7 +128,7 @@ public class PlaybackHistoryFragment extends Fragment {
for (long mediaId : update.mediaIds) {
int pos = FeedItemUtil.indexOfItemWithMediaId(playbackHistory, mediaId);
if (pos >= 0) {
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index 404ea1d8d..0a752b855 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -178,7 +178,7 @@ public class QueueFragment extends Fragment {
if (pos >= 0) {
queue.remove(pos);
queue.add(pos, item);
- recyclerAdapter.notifyItemChanged(pos);
+ recyclerAdapter.notifyItemChangedCompat(pos);
refreshInfoBar();
}
}
@@ -195,7 +195,7 @@ public class QueueFragment extends Fragment {
for (long mediaId : update.mediaIds) {
int pos = FeedItemUtil.indexOfItemWithMediaId(queue, mediaId);
if (pos >= 0) {
- recyclerAdapter.notifyItemChanged(pos);
+ recyclerAdapter.notifyItemChangedCompat(pos);
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
index 4bb7ec28a..389996b07 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
@@ -215,7 +215,7 @@ public class SearchFragment extends Fragment {
if (pos >= 0) {
results.remove(pos);
results.add(pos, item);
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
}
}
}
@@ -228,7 +228,7 @@ public class SearchFragment extends Fragment {
for (long mediaId : update.mediaIds) {
int pos = FeedItemUtil.indexOfItemWithMediaId(results, mediaId);
if (pos >= 0) {
- adapter.notifyItemChanged(pos);
+ adapter.notifyItemChangedCompat(pos);
}
}
}