summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java15
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java14
5 files changed, 30 insertions, 12 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 0ad7fa219..53223896f 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
@@ -84,7 +84,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
});
holder.itemView.setOnCreateContextMenuListener(this);
holder.itemView.setOnLongClickListener(v -> {
- longPressedItem = getItem(holder.getBindingAdapterPosition());
+ longPressedItem = item;
longPressedPosition = holder.getBindingAdapterPosition();
return false;
});
@@ -92,7 +92,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (e.isFromSource(InputDevice.SOURCE_MOUSE)
&& e.getButtonState() == MotionEvent.BUTTON_SECONDARY) {
- longPressedItem = getItem(holder.getBindingAdapterPosition());
+ longPressedItem = item;
longPressedPosition = holder.getBindingAdapterPosition();
return false;
}
@@ -127,6 +127,7 @@ public class EpisodeItemListAdapter extends SelectableAdapter<EpisodeItemViewHol
holder.itemView.setOnClickListener(null);
holder.itemView.setOnCreateContextMenuListener(null);
holder.itemView.setOnLongClickListener(null);
+ holder.itemView.setOnTouchListener(null);
holder.secondaryActionButton.setOnClickListener(null);
holder.dragHandle.setOnTouchListener(null);
holder.coverHolder.setOnTouchListener(null);
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java
index 5ab354d05..492d49759 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java
@@ -118,7 +118,7 @@ public class SubscriptionsRecyclerAdapter extends SelectableAdapter<Subscription
if (isFeed) {
longPressedPosition = holder.getBindingAdapterPosition();
}
- selectedItem = (NavDrawerData.DrawerItem) getItem(holder.getBindingAdapterPosition());
+ selectedItem = drawerItem;
}
return false;
});
@@ -131,7 +131,7 @@ public class SubscriptionsRecyclerAdapter extends SelectableAdapter<Subscription
if (isFeed) {
longPressedPosition = holder.getBindingAdapterPosition();
}
- selectedItem = (NavDrawerData.DrawerItem) getItem(holder.getBindingAdapterPosition());
+ selectedItem = drawerItem;
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
index 715786921..afb0ab8c5 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -173,6 +173,8 @@ public class ItemFragment extends Fragment {
&& UsageStatistics.hasSignificantBiasTo(UsageStatistics.ACTION_STREAM)) {
showOnDemandConfigBalloon(true);
return;
+ } else if (actionButton1 == null) {
+ return; // Not loaded yet
}
actionButton1.onClick(getContext());
});
@@ -181,6 +183,8 @@ public class ItemFragment extends Fragment {
&& UsageStatistics.hasSignificantBiasTo(UsageStatistics.ACTION_DOWNLOAD)) {
showOnDemandConfigBalloon(false);
return;
+ } else if (actionButton2 == null) {
+ return; // Not loaded yet
}
actionButton2.onClick(getContext());
});
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
index 42340e704..3efb8b47b 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
@@ -18,6 +18,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.core.app.ServiceCompat;
import androidx.core.content.ContextCompat;
+import de.danoeh.antennapod.core.BuildConfig;
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.feed.LocalFeedUpdater;
import org.apache.commons.io.FileUtils;
@@ -139,9 +140,6 @@ public class DownloadService extends Service {
}
public static void download(Context context, boolean cleanupMedia, DownloadRequest... requests) {
- if (requests.length > 100) {
- throw new IllegalArgumentException("Android silently drops intent payloads that are too large");
- }
ArrayList<DownloadRequest> requestsToSend = new ArrayList<>();
for (DownloadRequest request : requests) {
if (!isDownloadingFile(request.getSource())) {
@@ -150,7 +148,15 @@ public class DownloadService extends Service {
}
if (requestsToSend.isEmpty()) {
return;
+ } else if (requestsToSend.size() > 100) {
+ if (BuildConfig.DEBUG) {
+ throw new IllegalArgumentException("Android silently drops intent payloads that are too large");
+ } else {
+ Log.d(TAG, "Too many download requests. Dropping some to avoid Android dropping all.");
+ requestsToSend = new ArrayList<>(requestsToSend.subList(0, 100));
+ }
}
+
Intent launchIntent = new Intent(context, DownloadService.class);
launchIntent.putParcelableArrayListExtra(DownloadService.EXTRA_REQUESTS, requestsToSend);
if (cleanupMedia) {
@@ -512,6 +518,9 @@ public class DownloadService extends Service {
if (isDownloadingFile(request.getSource())) {
Log.d(TAG, "Skipped enqueueing request. Already running.");
return;
+ } else if (downloadHandleExecutor.isShutdown()) {
+ Log.d(TAG, "Skipped enqueueing request. Service is already shutting down.");
+ return;
}
Log.d(TAG, "Add new request: " + request.getSource());
if (request.getSource().startsWith(Feed.PREFIX_LOCAL_FOLDER)) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java
index b80a20a25..44a30da81 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java
@@ -117,7 +117,9 @@ public class DownloadServiceNotification {
continue;
}
sb.append("• ").append(statuses.get(i).getTitle());
- sb.append(": ").append(statuses.get(i).getReason().getErrorString(context));
+ if (statuses.get(i).getReason() != null) {
+ sb.append(": ").append(statuses.get(i).getReason().getErrorString(context));
+ }
if (i != statuses.size() - 1) {
sb.append("\n");
}
@@ -134,16 +136,18 @@ public class DownloadServiceNotification {
public void updateReport(List<DownloadStatus> reportQueue, boolean showAutoDownloadReport) {
// check if report should be created
boolean createReport = false;
- int successfulDownloads = 0;
int failedDownloads = 0;
// a download report is created if at least one download has failed
// (excluding failed image downloads)
for (DownloadStatus status : reportQueue) {
+ if (status == null || status.isCancelled()) {
+ continue;
+ }
if (status.isSuccessful()) {
- successfulDownloads++;
- createReport |= showAutoDownloadReport && !status.isInitiatedByUser() && status.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA;
- } else if (!status.isCancelled()) {
+ createReport |= showAutoDownloadReport && !status.isInitiatedByUser()
+ && status.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA;
+ } else {
failedDownloads++;
createReport = true;
}