summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorH. Lehmann <ByteHamster@users.noreply.github.com>2020-03-20 20:15:21 +0100
committerGitHub <noreply@github.com>2020-03-20 20:15:21 +0100
commit1cdc8fc33e4d551823141c8374ab12bd522db179 (patch)
tree3f3c688534829ab9f7a9662fba948323c4d0167f /app/src
parent945224f308188686257f2048d65f430accd09c7e (diff)
parent1f4801b3b257d24bdadf7d0c2e18768ee02acd4d (diff)
downloadAntennaPod-1cdc8fc33e4d551823141c8374ab12bd522db179.zip
Merge pull request #3950 from ByteHamster/feedinfo-page
Feedinfo page improvements
Diffstat (limited to 'app/src')
-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.java11
-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, 27 insertions, 15 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 86b00a7ae..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);
}
}
}
@@ -407,7 +407,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
@Subscribe(threadMode = ThreadMode.MAIN)
public void onFeedListChanged(FeedListUpdateEvent event) {
if (event.contains(feed)) {
- refreshHeaderView();
updateUi();
}
}
@@ -441,7 +440,8 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
private void refreshHeaderView() {
- if (recyclerView == null || feed == null || !headerCreated) {
+ setupHeaderView();
+ if (recyclerView == null || feed == null) {
Log.e(TAG, "Unable to refresh header view");
return;
}
@@ -487,7 +487,6 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
}
});
headerCreated = true;
- refreshHeaderView();
}
private void showFeedInfo() {
@@ -528,7 +527,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
feed = result.orElse(null);
- setupHeaderView();
+ refreshHeaderView();
displayList();
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
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);
}
}
}