From 2d77b1f11802da28cbcd87c9456bcc7ee3abf2a0 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 17 Mar 2024 20:25:44 +0100 Subject: Remove dependency from :ui:glide to :core module (#6998) --- net/download/service-interface/build.gradle | 1 + .../download/serviceinterface/DownloadRequest.java | 297 --------------------- .../serviceinterface/DownloadRequestBuilder.java | 69 +++++ .../DownloadRequestBuilderTest.java | 122 +++++++++ .../serviceinterface/DownloadRequestTest.java | 121 --------- 5 files changed, 192 insertions(+), 418 deletions(-) delete mode 100644 net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequest.java create mode 100644 net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilder.java create mode 100644 net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilderTest.java delete mode 100644 net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestTest.java (limited to 'net/download') diff --git a/net/download/service-interface/build.gradle b/net/download/service-interface/build.gradle index 784c1375f..84a8dfd05 100644 --- a/net/download/service-interface/build.gradle +++ b/net/download/service-interface/build.gradle @@ -3,6 +3,7 @@ plugins { id("java-test-fixtures") } apply from: "../../../common.gradle" +apply from: "../../../playFlavor.gradle" android { namespace "de.danoeh.antennapod.net.download.serviceinterface" diff --git a/net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequest.java b/net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequest.java deleted file mode 100644 index f789fda5c..000000000 --- a/net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequest.java +++ /dev/null @@ -1,297 +0,0 @@ -package de.danoeh.antennapod.net.download.serviceinterface; - -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import de.danoeh.antennapod.model.feed.Feed; -import de.danoeh.antennapod.net.common.UrlChecker; -import de.danoeh.antennapod.model.feed.FeedMedia; - -public class DownloadRequest implements Parcelable { - public static final String REQUEST_ARG_PAGE_NR = "page"; - - private final String destination; - private final String source; - private final String title; - private String username; - private String password; - private String lastModified; - private final long feedfileId; - private final int feedfileType; - private final Bundle arguments; - - private int progressPercent; - private long soFar; - private long size; - private int statusMsg; - private boolean mediaEnqueued; - private boolean initiatedByUser; - - public DownloadRequest(@NonNull String destination, @NonNull String source, @NonNull String title, long feedfileId, - int feedfileType, String username, String password, - Bundle arguments, boolean initiatedByUser) { - this(destination, source, title, feedfileId, feedfileType, null, username, password, false, - arguments, initiatedByUser); - } - - private DownloadRequest(Builder builder) { - this(builder.destination, builder.source, builder.title, builder.feedfileId, builder.feedfileType, - builder.lastModified, builder.username, builder.password, false, - builder.arguments, builder.initiatedByUser); - } - - private DownloadRequest(Parcel in) { - this(in.readString(), in.readString(), in.readString(), in.readLong(), in.readInt(), in.readString(), - nullIfEmpty(in.readString()), nullIfEmpty(in.readString()), in.readByte() > 0, - in.readBundle(), in.readByte() > 0); - } - - private DownloadRequest(String destination, String source, String title, long feedfileId, int feedfileType, - String lastModified, String username, String password, - boolean mediaEnqueued, Bundle arguments, boolean initiatedByUser) { - this.destination = destination; - this.source = source; - this.title = title; - this.feedfileId = feedfileId; - this.feedfileType = feedfileType; - this.lastModified = lastModified; - this.username = username; - this.password = password; - this.mediaEnqueued = mediaEnqueued; - this.arguments = arguments; - this.initiatedByUser = initiatedByUser; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(destination); - dest.writeString(source); - dest.writeString(title); - dest.writeLong(feedfileId); - dest.writeInt(feedfileType); - dest.writeString(lastModified); - // 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.writeByte((mediaEnqueued) ? (byte) 1 : 0); - dest.writeBundle(arguments); - dest.writeByte(initiatedByUser ? (byte) 1 : 0); - } - - 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 CREATOR = new Parcelable.Creator() { - public DownloadRequest createFromParcel(Parcel in) { - return new DownloadRequest(in); - } - - public DownloadRequest[] newArray(int size) { - return new DownloadRequest[size]; - } - }; - - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof DownloadRequest)) return false; - - DownloadRequest that = (DownloadRequest) o; - - if (lastModified != null ? !lastModified.equals(that.lastModified) : that.lastModified != null) - return false; - if (feedfileId != that.feedfileId) return false; - if (feedfileType != that.feedfileType) return false; - if (progressPercent != that.progressPercent) return false; - if (size != that.size) return false; - if (soFar != that.soFar) return false; - if (statusMsg != that.statusMsg) return false; - if (!destination.equals(that.destination)) return false; - if (password != null ? !password.equals(that.password) : that.password != null) - return false; - if (!source.equals(that.source)) return false; - if (title != null ? !title.equals(that.title) : that.title != null) return false; - if (username != null ? !username.equals(that.username) : that.username != null) - return false; - if (mediaEnqueued != that.mediaEnqueued) return false; - if (initiatedByUser != that.initiatedByUser) return false; - return true; - } - - @Override - public int hashCode() { - int result = destination.hashCode(); - result = 31 * result + source.hashCode(); - result = 31 * result + (title != null ? title.hashCode() : 0); - result = 31 * result + (username != null ? username.hashCode() : 0); - result = 31 * result + (password != null ? password.hashCode() : 0); - result = 31 * result + (lastModified != null ? lastModified.hashCode() : 0); - result = 31 * result + (int) (feedfileId ^ (feedfileId >>> 32)); - result = 31 * result + feedfileType; - result = 31 * result + arguments.hashCode(); - result = 31 * result + progressPercent; - result = 31 * result + (int) (soFar ^ (soFar >>> 32)); - result = 31 * result + (int) (size ^ (size >>> 32)); - result = 31 * result + statusMsg; - result = 31 * result + (mediaEnqueued ? 1 : 0); - return result; - } - - public String getDestination() { - return destination; - } - - public String getSource() { - return source; - } - - public String getTitle() { - return title; - } - - public long getFeedfileId() { - return feedfileId; - } - - public int getFeedfileType() { - return feedfileType; - } - - public int getProgressPercent() { - return progressPercent; - } - - public void setProgressPercent(int progressPercent) { - this.progressPercent = progressPercent; - } - - public long getSoFar() { - return soFar; - } - - public void setSoFar(long soFar) { - this.soFar = soFar; - } - - public long getSize() { - return size; - } - - public void setSize(long size) { - this.size = size; - } - - public void setStatusMsg(int statusMsg) { - this.statusMsg = statusMsg; - } - - public String getUsername() { - return username; - } - - public String getPassword() { - return password; - } - - public void setUsername(String username) { - this.username = username; - } - - public void setPassword(String password) { - this.password = password; - } - - public DownloadRequest setLastModified(@Nullable String lastModified) { - this.lastModified = lastModified; - return this; - } - - @Nullable - public String getLastModified() { - return lastModified; - } - - public Bundle getArguments() { - return arguments; - } - - public static class Builder { - private final String destination; - private String source; - private final String title; - private String username; - private String password; - private String lastModified; - private final long feedfileId; - private final int feedfileType; - private final Bundle arguments = new Bundle(); - private boolean initiatedByUser = true; - - public Builder(@NonNull String destination, @NonNull FeedMedia media) { - this.destination = destination; - this.source = UrlChecker.prepareUrl(media.getDownload_url()); - this.title = media.getHumanReadableIdentifier(); - this.feedfileId = media.getId(); - this.feedfileType = FeedMedia.FEEDFILETYPE_FEEDMEDIA; - } - - public Builder(@NonNull String destination, @NonNull Feed feed) { - this.destination = destination; - this.source = feed.isLocalFeed() ? feed.getDownload_url() : UrlChecker.prepareUrl(feed.getDownload_url()); - this.title = feed.getHumanReadableIdentifier(); - this.feedfileId = feed.getId(); - this.feedfileType = Feed.FEEDFILETYPE_FEED; - arguments.putInt(REQUEST_ARG_PAGE_NR, feed.getPageNr()); - } - - public Builder withInitiatedByUser(boolean initiatedByUser) { - this.initiatedByUser = initiatedByUser; - return this; - } - - public void setSource(String source) { - this.source = source; - } - - public void setForce(boolean force) { - if (force) { - lastModified = null; - } - } - - public Builder lastModified(String lastModified) { - this.lastModified = lastModified; - return this; - } - - public Builder withAuthentication(String username, String password) { - this.username = username; - this.password = password; - return this; - } - - public DownloadRequest build() { - return new DownloadRequest(this); - } - } -} diff --git a/net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilder.java b/net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilder.java new file mode 100644 index 000000000..15d2858bc --- /dev/null +++ b/net/download/service-interface/src/main/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilder.java @@ -0,0 +1,69 @@ +package de.danoeh.antennapod.net.download.serviceinterface; + +import android.os.Bundle; +import androidx.annotation.NonNull; +import de.danoeh.antennapod.model.download.DownloadRequest; +import de.danoeh.antennapod.model.feed.Feed; +import de.danoeh.antennapod.model.feed.FeedMedia; +import de.danoeh.antennapod.net.common.UrlChecker; + +public class DownloadRequestBuilder { + private final String destination; + private String source; + private final String title; + private String username; + private String password; + private String lastModified; + private final long feedfileId; + private final int feedfileType; + private final Bundle arguments = new Bundle(); + private boolean initiatedByUser = true; + + public DownloadRequestBuilder(@NonNull String destination, @NonNull FeedMedia media) { + this.destination = destination; + this.source = UrlChecker.prepareUrl(media.getDownload_url()); + this.title = media.getHumanReadableIdentifier(); + this.feedfileId = media.getId(); + this.feedfileType = FeedMedia.FEEDFILETYPE_FEEDMEDIA; + } + + public DownloadRequestBuilder(@NonNull String destination, @NonNull Feed feed) { + this.destination = destination; + this.source = feed.isLocalFeed() ? feed.getDownload_url() : UrlChecker.prepareUrl(feed.getDownload_url()); + this.title = feed.getHumanReadableIdentifier(); + this.feedfileId = feed.getId(); + this.feedfileType = Feed.FEEDFILETYPE_FEED; + arguments.putInt(DownloadRequest.REQUEST_ARG_PAGE_NR, feed.getPageNr()); + } + + public DownloadRequestBuilder withInitiatedByUser(boolean initiatedByUser) { + this.initiatedByUser = initiatedByUser; + return this; + } + + public void setSource(String source) { + this.source = source; + } + + public void setForce(boolean force) { + if (force) { + lastModified = null; + } + } + + public DownloadRequestBuilder lastModified(String lastModified) { + this.lastModified = lastModified; + return this; + } + + public DownloadRequestBuilder withAuthentication(String username, String password) { + this.username = username; + this.password = password; + return this; + } + + public DownloadRequest build() { + return new DownloadRequest(destination, source, title, feedfileId, feedfileType, + lastModified, username, password, false, arguments, initiatedByUser); + } +} \ No newline at end of file diff --git a/net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilderTest.java b/net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilderTest.java new file mode 100644 index 000000000..e9876a949 --- /dev/null +++ b/net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestBuilderTest.java @@ -0,0 +1,122 @@ +package de.danoeh.antennapod.net.download.serviceinterface; + +import android.os.Bundle; +import android.os.Parcel; + +import de.danoeh.antennapod.model.download.DownloadRequest; +import de.danoeh.antennapod.model.feed.FeedMedia; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import java.util.ArrayList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +@RunWith(RobolectricTestRunner.class) +public class DownloadRequestBuilderTest { + + @Test + public void parcelInArrayListTest_WithAuth() { + doTestParcelInArrayList("case has authentication", + "usr1", "pass1", "usr2", "pass2"); + } + + @Test + public void parcelInArrayListTest_NoAuth() { + doTestParcelInArrayList("case no authentication", + null, null, null, null); + } + + @Test + public void parcelInArrayListTest_MixAuth() { + doTestParcelInArrayList("case mixed authentication", + null, null, "usr2", "pass2"); + } + + @Test + public void downloadRequestTestEquals() { + String destStr = "file://location/media.mp3"; + String username = "testUser"; + String password = "testPassword"; + FeedMedia item = createFeedItem(1); + DownloadRequest request1 = new DownloadRequestBuilder(destStr, item) + .withAuthentication(username, password) + .build(); + + DownloadRequest request2 = new DownloadRequestBuilder(destStr, item) + .withAuthentication(username, password) + .build(); + + DownloadRequest request3 = new DownloadRequestBuilder(destStr, item) + .withAuthentication("diffUsername", "diffPassword") + .build(); + + assertEquals(request1, request2); + assertNotEquals(request1, request3); + } + + // Test to ensure parcel using put/getParcelableArrayList() API work + // based on: https://stackoverflow.com/a/13507191 + private void doTestParcelInArrayList(String message, + String username1, String password1, + String username2, String password2) { + ArrayList toParcel; + { // test DownloadRequests to parcel + String destStr = "file://location/media.mp3"; + FeedMedia item1 = createFeedItem(1); + DownloadRequest request1 = new DownloadRequestBuilder(destStr, item1) + .withAuthentication(username1, password1) + .build(); + + FeedMedia item2 = createFeedItem(2); + DownloadRequest request2 = new DownloadRequestBuilder(destStr, item2) + .withAuthentication(username2, password2) + .build(); + + toParcel = new ArrayList<>(); + toParcel.add(request1); + toParcel.add(request2); + } + + // parcel the download requests + Bundle bundleIn = new Bundle(); + bundleIn.putParcelableArrayList("r", toParcel); + + Parcel parcel = Parcel.obtain(); + bundleIn.writeToParcel(parcel, 0); + + Bundle bundleOut = new Bundle(); + bundleOut.setClassLoader(DownloadRequest.class.getClassLoader()); + parcel.setDataPosition(0); // to read the parcel from the beginning. + bundleOut.readFromParcel(parcel); + + ArrayList fromParcel = bundleOut.getParcelableArrayList("r"); + + // spot-check contents to ensure they are the same + // DownloadRequest.equals() implementation doesn't quite work + // for DownloadRequest.argument (a Bundle) + assertEquals(message + " - size", toParcel.size(), fromParcel.size()); + assertEquals(message + " - source", toParcel.get(1).getSource(), fromParcel.get(1).getSource()); + assertEquals(message + " - password", toParcel.get(0).getPassword(), fromParcel.get(0).getPassword()); + assertEquals(message + " - argument", toString(toParcel.get(0).getArguments()), + toString(fromParcel.get(0).getArguments())); + } + + private static String toString(Bundle b) { + StringBuilder sb = new StringBuilder(); + sb.append("{"); + for (String key: b.keySet()) { + Object val = b.get(key); + sb.append("(").append(key).append(":").append(val).append(") "); + } + sb.append("}"); + return sb.toString(); + } + + private FeedMedia createFeedItem(final int id) { + // Use mockito would be less verbose, but it'll take extra 1 second for this tiny test + return new FeedMedia(id, null, 0, 0, 0, "", "", "http://example.com/episode" + id, false, null, 0, 0); + } +} diff --git a/net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestTest.java b/net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestTest.java deleted file mode 100644 index a48934cfe..000000000 --- a/net/download/service-interface/src/test/java/de/danoeh/antennapod/net/download/serviceinterface/DownloadRequestTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package de.danoeh.antennapod.net.download.serviceinterface; - -import android.os.Bundle; -import android.os.Parcel; - -import de.danoeh.antennapod.model.feed.FeedMedia; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -import java.util.ArrayList; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -@RunWith(RobolectricTestRunner.class) -public class DownloadRequestTest { - - @Test - public void parcelInArrayListTest_WithAuth() { - doTestParcelInArrayList("case has authentication", - "usr1", "pass1", "usr2", "pass2"); - } - - @Test - public void parcelInArrayListTest_NoAuth() { - doTestParcelInArrayList("case no authentication", - null, null, null, null); - } - - @Test - public void parcelInArrayListTest_MixAuth() { - doTestParcelInArrayList("case mixed authentication", - null, null, "usr2", "pass2"); - } - - @Test - public void downloadRequestTestEquals() { - String destStr = "file://location/media.mp3"; - String username = "testUser"; - String password = "testPassword"; - FeedMedia item = createFeedItem(1); - DownloadRequest request1 = new DownloadRequest.Builder(destStr, item) - .withAuthentication(username, password) - .build(); - - DownloadRequest request2 = new DownloadRequest.Builder(destStr, item) - .withAuthentication(username, password) - .build(); - - DownloadRequest request3 = new DownloadRequest.Builder(destStr, item) - .withAuthentication("diffUsername", "diffPassword") - .build(); - - assertEquals(request1, request2); - assertNotEquals(request1, request3); - } - - // Test to ensure parcel using put/getParcelableArrayList() API work - // based on: https://stackoverflow.com/a/13507191 - private void doTestParcelInArrayList(String message, - String username1, String password1, - String username2, String password2) { - ArrayList toParcel; - { // test DownloadRequests to parcel - String destStr = "file://location/media.mp3"; - FeedMedia item1 = createFeedItem(1); - DownloadRequest request1 = new DownloadRequest.Builder(destStr, item1) - .withAuthentication(username1, password1) - .build(); - - FeedMedia item2 = createFeedItem(2); - DownloadRequest request2 = new DownloadRequest.Builder(destStr, item2) - .withAuthentication(username2, password2) - .build(); - - toParcel = new ArrayList<>(); - toParcel.add(request1); - toParcel.add(request2); - } - - // parcel the download requests - Bundle bundleIn = new Bundle(); - bundleIn.putParcelableArrayList("r", toParcel); - - Parcel parcel = Parcel.obtain(); - bundleIn.writeToParcel(parcel, 0); - - Bundle bundleOut = new Bundle(); - bundleOut.setClassLoader(DownloadRequest.class.getClassLoader()); - parcel.setDataPosition(0); // to read the parcel from the beginning. - bundleOut.readFromParcel(parcel); - - ArrayList fromParcel = bundleOut.getParcelableArrayList("r"); - - // spot-check contents to ensure they are the same - // DownloadRequest.equals() implementation doesn't quite work - // for DownloadRequest.argument (a Bundle) - assertEquals(message + " - size", toParcel.size(), fromParcel.size()); - assertEquals(message + " - source", toParcel.get(1).getSource(), fromParcel.get(1).getSource()); - assertEquals(message + " - password", toParcel.get(0).getPassword(), fromParcel.get(0).getPassword()); - assertEquals(message + " - argument", toString(toParcel.get(0).getArguments()), - toString(fromParcel.get(0).getArguments())); - } - - private static String toString(Bundle b) { - StringBuilder sb = new StringBuilder(); - sb.append("{"); - for (String key: b.keySet()) { - Object val = b.get(key); - sb.append("(").append(key).append(":").append(val).append(") "); - } - sb.append("}"); - return sb.toString(); - } - - private FeedMedia createFeedItem(final int id) { - // Use mockito would be less verbose, but it'll take extra 1 second for this tiny test - return new FeedMedia(id, null, 0, 0, 0, "", "", "http://example.com/episode" + id, false, null, 0, 0); - } -} -- cgit v1.2.3