diff options
author | orionlee <orionlee@yahoo.com> | 2019-10-26 16:38:34 -0700 |
---|---|---|
committer | orionlee <orionlee@yahoo.com> | 2019-11-06 13:54:20 -0800 |
commit | 7bc5ca74f1cc4a2a7b199a6bbbaaac12663391c6 (patch) | |
tree | aef7d9fec06e37610047e7482b11af1a64cf4936 /core/src/main/java/de | |
parent | fe33821e68bb8a19ec574955ff2ed723d143d96f (diff) | |
download | AntennaPod-7bc5ca74f1cc4a2a7b199a6bbbaaac12663391c6.zip |
make DownloadRequest ArrayList parcelable (support a batch of them)
Diffstat (limited to 'core/src/main/java/de')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java index 60591899d..aa77c85b6 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java @@ -3,6 +3,8 @@ package de.danoeh.antennapod.core.service.download; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; +import android.text.TextUtils; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -74,17 +76,9 @@ public class DownloadRequest implements Parcelable { feedfileType = in.readInt(); lastModified = in.readString(); deleteOnFailure = (in.readByte() > 0); + username = nullIfEmpty(in.readString()); + password = nullIfEmpty(in.readString()); arguments = in.readBundle(); - if (in.dataAvail() > 0) { - username = in.readString(); - } else { - username = null; - } - if (in.dataAvail() > 0) { - password = in.readString(); - } else { - password = null; - } } @Override @@ -101,13 +95,22 @@ public class DownloadRequest implements Parcelable { dest.writeInt(feedfileType); dest.writeString(lastModified); dest.writeByte((deleteOnFailure) ? (byte) 1 : 0); + // in case of null username/password, still write an empty string + // (rather than skipping it). Otherwise, unmarshalling a collection + // of them from a Parcel (from an Intent extra to submit a request to DownloadService) will fail. + // + // see: https://stackoverflow.com/a/22926342 + dest.writeString(nonNullString(username)); + dest.writeString(nonNullString(password)); dest.writeBundle(arguments); - if (username != null) { - dest.writeString(username); - } - if (password != null) { - dest.writeString(password); - } + } + + private static String nonNullString(String str) { + return str != null ? str : ""; + } + + private static String nullIfEmpty(String str) { + return TextUtils.isEmpty(str) ? null : str; } public static final Parcelable.Creator<DownloadRequest> CREATOR = new Parcelable.Creator<DownloadRequest>() { |