diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2024-03-17 20:25:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-17 20:25:44 +0100 |
commit | 2d77b1f11802da28cbcd87c9456bcc7ee3abf2a0 (patch) | |
tree | 7f54438ed59eee3272cd38dab79f8ebfe291e9e4 /core | |
parent | b84a05bd4e2bf2d10b7791155cc0a7a0e5aa3dcf (diff) | |
download | AntennaPod-2d77b1f11802da28cbcd87c9456bcc7ee3abf2a0.zip |
Remove dependency from :ui:glide to :core module (#6998)
Diffstat (limited to 'core')
28 files changed, 45 insertions, 505 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java index 360c8c9e2..69abcee93 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java @@ -5,10 +5,5 @@ package de.danoeh.antennapod.core; * Apps using the core module of AntennaPod should register implementations of all interfaces here. */ public class ClientConfig { - /** - * Should be used when setting User-Agent header for HTTP-requests. - */ - public static String USER_AGENT; - public static ApplicationCallbacks applicationCallbacks; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java b/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java index 86d65bbff..85ba7a3d5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java @@ -1,16 +1,19 @@ package de.danoeh.antennapod.core; import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.SleepTimerPreferences; import de.danoeh.antennapod.core.preferences.UsageStatistics; +import de.danoeh.antennapod.net.common.UserAgentInterceptor; import de.danoeh.antennapod.storage.preferences.UserPreferences; -import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.net.common.AntennapodHttpClient; import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface; import de.danoeh.antennapod.core.service.download.DownloadServiceInterfaceImpl; import de.danoeh.antennapod.core.sync.SyncService; import de.danoeh.antennapod.core.sync.queue.SynchronizationQueueSink; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.core.util.download.NetworkConnectionChangeHandler; import de.danoeh.antennapod.net.ssl.SslProviderInstaller; import de.danoeh.antennapod.storage.database.PodDBAdapter; @@ -25,6 +28,12 @@ public class ClientConfigurator { if (initialized) { return; } + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + UserAgentInterceptor.USER_AGENT = "AntennaPod/" + packageInfo.versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } PodDBAdapter.init(context); UserPreferences.init(context); UsageStatistics.init(context); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java deleted file mode 100644 index 77a58e682..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java +++ /dev/null @@ -1,83 +0,0 @@ -package de.danoeh.antennapod.core.service; - -import android.text.TextUtils; -import android.util.Log; -import androidx.annotation.NonNull; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; -import de.danoeh.antennapod.core.service.download.HttpCredentialEncoder; -import de.danoeh.antennapod.core.storage.DBReader; -import de.danoeh.antennapod.core.util.URIUtil; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.util.List; - -import okhttp3.Interceptor; -import okhttp3.Request; -import okhttp3.Response; - -public class BasicAuthorizationInterceptor implements Interceptor { - private static final String TAG = "BasicAuthInterceptor"; - private static final String HEADER_AUTHORIZATION = "Authorization"; - - @Override - @NonNull - public Response intercept(Chain chain) throws IOException { - Request request = chain.request(); - - Response response = chain.proceed(request); - - if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) { - return response; - } - - Request.Builder newRequest = request.newBuilder(); - if (!TextUtils.equals(response.request().url().toString(), request.url().toString())) { - // Redirect detected. OkHTTP does not re-add the headers on redirect, so calling the new location directly. - newRequest.url(response.request().url()); - - List<String> authorizationHeaders = request.headers().values(HEADER_AUTHORIZATION); - if (!authorizationHeaders.isEmpty() && !TextUtils.isEmpty(authorizationHeaders.get(0))) { - // Call already had authorization headers. Try again with the same credentials. - newRequest.header(HEADER_AUTHORIZATION, authorizationHeaders.get(0)); - return chain.proceed(newRequest.build()); - } - } - - String userInfo; - if (request.tag() instanceof DownloadRequest) { - DownloadRequest downloadRequest = (DownloadRequest) request.tag(); - userInfo = URIUtil.getURIFromRequestUrl(downloadRequest.getSource()).getUserInfo(); - if (TextUtils.isEmpty(userInfo) - && (!TextUtils.isEmpty(downloadRequest.getUsername()) - || !TextUtils.isEmpty(downloadRequest.getPassword()))) { - userInfo = downloadRequest.getUsername() + ":" + downloadRequest.getPassword(); - } - } else { - userInfo = DBReader.getImageAuthentication(request.url().toString()); - } - - if (TextUtils.isEmpty(userInfo)) { - Log.d(TAG, "no credentials for '" + request.url() + "'"); - return response; - } - - if (!userInfo.contains(":")) { - Log.d(TAG, "Invalid credentials for '" + request.url() + "'"); - return response; - } - String username = userInfo.substring(0, userInfo.indexOf(':')); - String password = userInfo.substring(userInfo.indexOf(':') + 1); - - Log.d(TAG, "Authorization failed, re-trying with ISO-8859-1 encoded credentials"); - newRequest.header(HEADER_AUTHORIZATION, HttpCredentialEncoder.encode(username, password, "ISO-8859-1")); - response = chain.proceed(newRequest.build()); - - if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) { - return response; - } - - Log.d(TAG, "Authorization failed, re-trying with UTF-8 encoded credentials"); - newRequest.header(HEADER_AUTHORIZATION, HttpCredentialEncoder.encode(username, password, "UTF-8")); - return chain.proceed(newRequest.build()); - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java b/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java index 2ec938730..5e864c5c0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateWorker.java @@ -27,13 +27,14 @@ import de.danoeh.antennapod.core.service.download.handler.FeedSyncTask; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.core.util.download.FeedUpdateManager; import de.danoeh.antennapod.model.download.DownloadError; import de.danoeh.antennapod.model.download.DownloadResult; import de.danoeh.antennapod.model.feed.Feed; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; +import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestBuilder; import de.danoeh.antennapod.ui.notifications.NotificationUtils; import java.util.ArrayList; import java.util.Collections; @@ -166,7 +167,7 @@ public class FeedUpdateWorker extends Worker { if (nextPage) { feed.setPageNr(feed.getPageNr() + 1); } - DownloadRequest.Builder builder = DownloadRequestCreator.create(feed); + DownloadRequestBuilder builder = DownloadRequestCreator.create(feed); builder.setForce(force || feed.hasLastUpdateFailed()); if (nextPage) { builder.setSource(feed.getNextPageLink()); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java deleted file mode 100644 index 3676347f7..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.danoeh.antennapod.core.service; - -import de.danoeh.antennapod.core.ClientConfig; -import okhttp3.Interceptor; -import okhttp3.Response; - -import java.io.IOException; - -public class UserAgentInterceptor implements Interceptor { - @Override - public Response intercept(Chain chain) throws IOException { - return chain.proceed(chain.request().newBuilder() - .header("User-Agent", ClientConfig.USER_AGENT) - .build()); - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java deleted file mode 100644 index 9f1f97bf0..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ /dev/null @@ -1,110 +0,0 @@ -package de.danoeh.antennapod.core.service.download; - -import android.text.TextUtils; -import android.util.Log; -import androidx.annotation.NonNull; -import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor; -import de.danoeh.antennapod.core.service.UserAgentInterceptor; -import de.danoeh.antennapod.model.download.ProxyConfig; -import de.danoeh.antennapod.net.ssl.SslClientSetup; -import okhttp3.Cache; -import okhttp3.Credentials; -import okhttp3.JavaNetCookieJar; -import okhttp3.OkHttpClient; -import java.io.File; -import java.net.CookieManager; -import java.net.CookiePolicy; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.SocketAddress; -import java.util.concurrent.TimeUnit; - -/** - * Provides access to a HttpClient singleton. - */ -public class AntennapodHttpClient { - private static final String TAG = "AntennapodHttpClient"; - private static final int CONNECTION_TIMEOUT = 10000; - private static final int READ_TIMEOUT = 30000; - private static final int MAX_CONNECTIONS = 8; - private static File cacheDirectory; - private static ProxyConfig proxyConfig; - - private static volatile OkHttpClient httpClient = null; - - private AntennapodHttpClient() { - - } - - /** - * Returns the HttpClient singleton. - */ - public static synchronized OkHttpClient getHttpClient() { - if (httpClient == null) { - httpClient = newBuilder().build(); - } - return httpClient; - } - - public static synchronized void reinit() { - httpClient = newBuilder().build(); - } - - /** - * Creates a new HTTP client. Most users should just use - * getHttpClient() to get the standard AntennaPod client, - * but sometimes it's necessary for others to have their own - * copy so that the clients don't share state. - * @return http client - */ - @NonNull - public static OkHttpClient.Builder newBuilder() { - Log.d(TAG, "Creating new instance of HTTP client"); - - System.setProperty("http.maxConnections", String.valueOf(MAX_CONNECTIONS)); - - OkHttpClient.Builder builder = new OkHttpClient.Builder(); - builder.interceptors().add(new BasicAuthorizationInterceptor()); - builder.networkInterceptors().add(new UserAgentInterceptor()); - - // set cookie handler - CookieManager cm = new CookieManager(); - cm.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); - builder.cookieJar(new JavaNetCookieJar(cm)); - - // set timeouts - builder.connectTimeout(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS); - builder.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS); - builder.writeTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS); - builder.cache(new Cache(cacheDirectory, 20L * 1000000)); // 20MB - - // configure redirects - builder.followRedirects(true); - builder.followSslRedirects(true); - - if (proxyConfig != null && proxyConfig.type != Proxy.Type.DIRECT && !TextUtils.isEmpty(proxyConfig.host)) { - int port = proxyConfig.port > 0 ? proxyConfig.port : ProxyConfig.DEFAULT_PORT; - SocketAddress address = InetSocketAddress.createUnresolved(proxyConfig.host, port); - builder.proxy(new Proxy(proxyConfig.type, address)); - if (!TextUtils.isEmpty(proxyConfig.username) && proxyConfig.password != null) { - builder.proxyAuthenticator((route, response) -> { - String credentials = Credentials.basic(proxyConfig.username, proxyConfig.password); - return response.request().newBuilder() - .header("Proxy-Authorization", credentials) - .build(); - }); - } - } - - SslClientSetup.installCertificates(builder); - return builder; - } - - public static void setCacheDirectory(File cacheDirectory) { - AntennapodHttpClient.cacheDirectory = cacheDirectory; - } - - public static void setProxyConfig(ProxyConfig proxyConfig) { - AntennapodHttpClient.proxyConfig = proxyConfig; - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DefaultDownloaderFactory.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DefaultDownloaderFactory.java index ff29e2e15..a1cc9bf6d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DefaultDownloaderFactory.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DefaultDownloaderFactory.java @@ -4,7 +4,7 @@ import android.util.Log; import android.webkit.URLUtil; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; public class DefaultDownloaderFactory implements DownloaderFactory { private static final String TAG = "DefaultDwnldrFactory"; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequestCreator.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequestCreator.java index 9ade2f03a..459ca71aa 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequestCreator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequestCreator.java @@ -2,11 +2,11 @@ package de.danoeh.antennapod.core.service.download; import android.util.Log; import android.webkit.URLUtil; +import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestBuilder; import de.danoeh.antennapod.storage.preferences.UserPreferences; import de.danoeh.antennapod.core.util.FileNameGenerator; import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.model.feed.FeedMedia; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; import org.apache.commons.io.FilenameUtils; import java.io.File; @@ -19,7 +19,7 @@ public class DownloadRequestCreator { private static final String FEED_DOWNLOADPATH = "cache/"; private static final String MEDIA_DOWNLOADPATH = "media/"; - public static DownloadRequest.Builder create(Feed feed) { + public static DownloadRequestBuilder create(Feed feed) { File dest = new File(getFeedfilePath(), getFeedfileName(feed)); if (dest.exists()) { dest.delete(); @@ -29,12 +29,12 @@ public class DownloadRequestCreator { String username = (feed.getPreferences() != null) ? feed.getPreferences().getUsername() : null; String password = (feed.getPreferences() != null) ? feed.getPreferences().getPassword() : null; - return new DownloadRequest.Builder(dest.toString(), feed) + return new DownloadRequestBuilder(dest.toString(), feed) .withAuthentication(username, password) .lastModified(feed.getLastModified()); } - public static DownloadRequest.Builder create(FeedMedia media) { + public static DownloadRequestBuilder create(FeedMedia media) { final boolean partiallyDownloadedFileExists = media.getFile_url() != null && new File(media.getFile_url()).exists(); File dest; @@ -54,7 +54,7 @@ public class DownloadRequestCreator { String password = (media.getItem().getFeed().getPreferences() != null) ? media.getItem().getFeed().getPreferences().getPassword() : null; - return new DownloadRequest.Builder(dest.toString(), media) + return new DownloadRequestBuilder(dest.toString(), media) .withAuthentication(username, password); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java index 35247509d..d1334190a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java @@ -10,7 +10,7 @@ import java.util.concurrent.Callable; import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.model.download.DownloadResult; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; /** * Downloads files diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderFactory.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderFactory.java index 48601c4f7..45ad45381 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderFactory.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderFactory.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.service.download; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; public interface DownloaderFactory { @Nullable diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/EpisodeDownloadWorker.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/EpisodeDownloadWorker.java index 1e943eed8..6957c25b1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/EpisodeDownloadWorker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/EpisodeDownloadWorker.java @@ -27,7 +27,7 @@ import de.danoeh.antennapod.event.MessageEvent; import de.danoeh.antennapod.model.download.DownloadError; import de.danoeh.antennapod.model.download.DownloadResult; import de.danoeh.antennapod.model.feed.FeedMedia; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface; import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter; import de.danoeh.antennapod.ui.notifications.NotificationUtils; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpCredentialEncoder.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpCredentialEncoder.java deleted file mode 100644 index 9866f91b6..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpCredentialEncoder.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.danoeh.antennapod.core.service.download; - -import android.util.Base64; - -import java.io.UnsupportedEncodingException; - -public abstract class HttpCredentialEncoder { - public static String encode(String username, String password, String charset) { - try { - String credentials = username + ":" + password; - byte[] bytes = credentials.getBytes(charset); - String encoded = Base64.encodeToString(bytes, Base64.NO_WRAP); - return "Basic " + encoded; - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); - } - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java index 94cd81337..5e2a82f33 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java @@ -4,9 +4,10 @@ import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Log; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.model.download.DownloadResult; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; +import de.danoeh.antennapod.net.common.AntennapodHttpClient; import okhttp3.CacheControl; import okhttp3.internal.http.StatusLine; import org.apache.commons.io.IOUtils; @@ -29,7 +30,7 @@ import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.parser.feed.util.DateUtils; import de.danoeh.antennapod.model.download.DownloadError; import de.danoeh.antennapod.core.util.StorageUtils; -import de.danoeh.antennapod.core.util.URIUtil; +import de.danoeh.antennapod.net.common.UriUtil; import okhttp3.OkHttpClient; import okhttp3.Protocol; import okhttp3.Request; @@ -54,7 +55,7 @@ public class HttpDownloader extends Downloader { ResponseBody responseBody = null; try { - final URI uri = URIUtil.getURIFromRequestUrl(request.getSource()); + final URI uri = UriUtil.getURIFromRequestUrl(request.getSource()); Request.Builder httpReq = new Request.Builder().url(uri.toURL()); httpReq.tag(request); httpReq.cacheControl(new CacheControl.Builder().noStore().build()); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java index 264740032..1fecd4b8c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java @@ -7,7 +7,7 @@ import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedPreferences; import de.danoeh.antennapod.model.feed.VolumeAdaptionSetting; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; import de.danoeh.antennapod.model.download.DownloadResult; import de.danoeh.antennapod.parser.feed.FeedHandler; import de.danoeh.antennapod.parser.feed.FeedHandlerResult; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedSyncTask.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedSyncTask.java index 3b72ed164..03d7ab6ec 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedSyncTask.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedSyncTask.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.model.download.DownloadResult; import de.danoeh.antennapod.model.feed.Feed; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; import de.danoeh.antennapod.parser.feed.FeedHandlerResult; public class FeedSyncTask { diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/MediaDownloadedHandler.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/MediaDownloadedHandler.java index 55831b821..21a908efa 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/MediaDownloadedHandler.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/MediaDownloadedHandler.java @@ -14,7 +14,7 @@ import java.io.InterruptedIOException; import java.util.concurrent.ExecutionException; import de.danoeh.antennapod.event.UnreadItemsUpdateEvent; -import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest; +import de.danoeh.antennapod.model.download.DownloadRequest; import de.danoeh.antennapod.model.download.DownloadResult; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java index 51adbf477..9d455ebcc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java @@ -42,13 +42,13 @@ import androidx.media3.extractor.DefaultExtractorsFactory; import androidx.media3.extractor.mp3.Mp3Extractor; import androidx.media3.ui.DefaultTrackNameProvider; import androidx.media3.ui.TrackNameProvider; -import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.net.common.UserAgentInterceptor; import de.danoeh.antennapod.model.feed.VolumeAdaptionSetting; import de.danoeh.antennapod.storage.preferences.UserPreferences; -import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; -import de.danoeh.antennapod.core.service.download.HttpCredentialEncoder; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.AntennapodHttpClient; +import de.danoeh.antennapod.net.common.HttpCredentialEncoder; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.model.playback.Playable; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -234,7 +234,7 @@ public class ExoPlayerWrapper { Log.d(TAG, "setDataSource: " + s); final OkHttpDataSource.Factory httpDataSourceFactory = new OkHttpDataSource.Factory((Call.Factory) AntennapodHttpClient.getHttpClient()) - .setUserAgent(ClientConfig.USER_AGENT); + .setUserAgent(UserAgentInterceptor.USER_AGENT); if (!TextUtils.isEmpty(user) && !TextUtils.isEmpty(password)) { final HashMap<String, String> requestProperties = new HashMap<>(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index f34a9ba8e..abeb9f942 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -76,7 +76,7 @@ import de.danoeh.antennapod.core.util.ChapterUtils; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.FeedUtil; import de.danoeh.antennapod.core.util.IntentUtils; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.core.util.playback.PlayableUtils; import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter; import de.danoeh.antennapod.core.widget.WidgetUpdater; diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java index ecfe5f4dd..350a6fbbf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java @@ -14,7 +14,7 @@ import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedPreferences; import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface; import de.danoeh.antennapod.storage.preferences.UserPreferences; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.core.util.PowerUtils; /** diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index b390f5f44..16c12bdd5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -1,7 +1,6 @@ package de.danoeh.antennapod.core.storage; import android.database.Cursor; -import android.text.TextUtils; import android.util.Log; import androidx.annotation.NonNull; @@ -585,42 +584,6 @@ public final class DBReader { } /** - * Returns credentials based on image URL - * - * @param imageUrl The URL of the image - * @return Credentials in format "Username:Password", empty String if no authorization given - */ - public static String getImageAuthentication(final String imageUrl) { - Log.d(TAG, "getImageAuthentication() called with: " + "imageUrl = [" + imageUrl + "]"); - - PodDBAdapter adapter = PodDBAdapter.getInstance(); - adapter.open(); - try { - return getImageAuthentication(imageUrl, adapter); - } finally { - adapter.close(); - } - } - - private static String getImageAuthentication(final String imageUrl, PodDBAdapter adapter) { - String credentials; - try (Cursor cursor = adapter.getImageAuthenticationCursor(imageUrl)) { - if (cursor.moveToFirst()) { - String username = cursor.getString(0); - String password = cursor.getString(1); - if (!TextUtils.isEmpty(username) && password != null) { - credentials = username + ":" + password; - } else { - credentials = ""; - } - } else { - credentials = ""; - } - } - return credentials; - } - - /** * Loads a specific FeedItem from the database. * * @param guid feed item guid diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java index 3ee7c2b54..5f750a50b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java @@ -41,7 +41,7 @@ import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.event.SyncServiceEvent; import de.danoeh.antennapod.storage.preferences.UserPreferences; -import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.net.common.AntennapodHttpClient; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java index 901771913..6253b260d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java @@ -9,7 +9,7 @@ import androidx.annotation.NonNull; import de.danoeh.antennapod.model.feed.Chapter; import de.danoeh.antennapod.core.feed.ChapterMerger; import de.danoeh.antennapod.model.feed.FeedMedia; -import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.net.common.AntennapodHttpClient; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.comparator.ChapterStartTimeComparator; import de.danoeh.antennapod.parser.feed.PodcastIndexChapterParser; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java deleted file mode 100644 index dfdc6c32a..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java +++ /dev/null @@ -1,144 +0,0 @@ -package de.danoeh.antennapod.core.util; - -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.NetworkInfo; -import android.net.wifi.WifiManager; -import android.os.Build; -import java.util.Arrays; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import de.danoeh.antennapod.storage.preferences.UserPreferences; - -public class NetworkUtils { - private static final String REGEX_PATTERN_IP_ADDRESS = "([0-9]{1,3}[\\.]){3}[0-9]{1,3}"; - - private NetworkUtils(){} - - private static Context context; - - public static void init(Context context) { - NetworkUtils.context = context; - } - - public static boolean isAutoDownloadAllowed() { - ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = cm.getActiveNetworkInfo(); - if (networkInfo == null) { - return false; - } - if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { - if (UserPreferences.isEnableAutodownloadWifiFilter()) { - return isInAllowedWifiNetwork(); - } else { - return !isNetworkMetered(); - } - } else if (networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) { - return true; - } else { - return UserPreferences.isAllowMobileAutoDownload() || !NetworkUtils.isNetworkRestricted(); - } - } - - public static boolean networkAvailable() { - ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo info = cm.getActiveNetworkInfo(); - return info != null && info.isConnected(); - } - - public static boolean isEpisodeDownloadAllowed() { - return UserPreferences.isAllowMobileEpisodeDownload() || !NetworkUtils.isNetworkRestricted(); - } - - public static boolean isEpisodeHeadDownloadAllowed() { - // It is not an image but it is a similarly tiny request - // that is probably not even considered a download by most users - return isImageAllowed(); - } - - public static boolean isImageAllowed() { - return UserPreferences.isAllowMobileImages() || !NetworkUtils.isNetworkRestricted(); - } - - public static boolean isStreamingAllowed() { - return UserPreferences.isAllowMobileStreaming() || !NetworkUtils.isNetworkRestricted(); - } - - public static boolean isFeedRefreshAllowed() { - return UserPreferences.isAllowMobileFeedRefresh() || !NetworkUtils.isNetworkRestricted(); - } - - public static boolean isNetworkRestricted() { - return isNetworkMetered() || isNetworkCellular(); - } - - private static boolean isNetworkMetered() { - ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - return connManager.isActiveNetworkMetered(); - } - - public static boolean isVpnOverWifi() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - return false; - } - ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkCapabilities capabilities = connManager.getNetworkCapabilities(connManager.getActiveNetwork()); - return capabilities != null - && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) - && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN); - } - - private static boolean isNetworkCellular() { - ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - if (Build.VERSION.SDK_INT >= 23) { - Network network = connManager.getActiveNetwork(); - if (network == null) { - return false; // Nothing connected - } - NetworkInfo info = connManager.getNetworkInfo(network); - if (info == null) { - return true; // Better be safe than sorry - } - NetworkCapabilities capabilities = connManager.getNetworkCapabilities(network); - if (capabilities == null) { - return true; // Better be safe than sorry - } - return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR); - } else { - // if the default network is a VPN, - // this method will return the NetworkInfo for one of its underlying networks - NetworkInfo info = connManager.getActiveNetworkInfo(); - if (info == null) { - return false; // Nothing connected - } - //noinspection deprecation - return info.getType() == ConnectivityManager.TYPE_MOBILE; - } - } - - private static boolean isInAllowedWifiNetwork() { - WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - List<String> selectedNetworks = Arrays.asList(UserPreferences.getAutodownloadSelectedNetworks()); - return selectedNetworks.contains(Integer.toString(wm.getConnectionInfo().getNetworkId())); - } - - public static boolean wasDownloadBlocked(Throwable throwable) { - String message = throwable.getMessage(); - if (message != null) { - Pattern pattern = Pattern.compile(REGEX_PATTERN_IP_ADDRESS); - Matcher matcher = pattern.matcher(message); - if (matcher.find()) { - String ip = matcher.group(); - return ip.startsWith("127.") || ip.startsWith("0."); - } - } - if (throwable.getCause() != null) { - return wasDownloadBlocked(throwable.getCause()); - } - return false; - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java b/core/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java deleted file mode 100644 index e093dc766..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.danoeh.antennapod.core.util; - -import android.util.Log; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; - -import de.danoeh.antennapod.core.BuildConfig; - -/** - * Utility methods for dealing with URL encoding. - */ -public class URIUtil { - private static final String TAG = "URIUtil"; - - private URIUtil() {} - - public static URI getURIFromRequestUrl(String source) { - // try without encoding the URI - try { - return new URI(source); - } catch (URISyntaxException e) { - if (BuildConfig.DEBUG) Log.d(TAG, "Source is not encoded, encoding now"); - } - try { - URL url = new URL(source); - return new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef()); - } catch (MalformedURLException | URISyntaxException e) { - throw new IllegalArgumentException(e); - } - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/download/FeedUpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/util/download/FeedUpdateManager.java index 2f2726bdb..89097d9ee 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/download/FeedUpdateManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/download/FeedUpdateManager.java @@ -16,7 +16,7 @@ import androidx.work.WorkManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.service.FeedUpdateWorker; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.event.MessageEvent; import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.storage.preferences.UserPreferences; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/download/MediaSizeLoader.java b/core/src/main/java/de/danoeh/antennapod/core/util/download/MediaSizeLoader.java index 67ec35327..df35365c9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/download/MediaSizeLoader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/download/MediaSizeLoader.java @@ -1,9 +1,9 @@ package de.danoeh.antennapod.core.util.download; import android.text.TextUtils; -import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.net.common.AntennapodHttpClient; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; import de.danoeh.antennapod.model.feed.FeedMedia; import io.reactivex.Single; import io.reactivex.SingleOnSubscribe; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/download/NetworkConnectionChangeHandler.java b/core/src/main/java/de/danoeh/antennapod/core/util/download/NetworkConnectionChangeHandler.java index de2d8e9f4..8097a4cb1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/download/NetworkConnectionChangeHandler.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/download/NetworkConnectionChangeHandler.java @@ -4,7 +4,7 @@ import android.content.Context; import android.util.Log; import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface; import de.danoeh.antennapod.core.storage.DBTasks; -import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.net.common.NetworkUtils; public abstract class NetworkConnectionChangeHandler { private static final String TAG = "NetConnChangeHandler"; diff --git a/core/src/test/java/de/danoeh/antennapod/core/util/URIUtilTest.java b/core/src/test/java/de/danoeh/antennapod/core/util/URIUtilTest.java deleted file mode 100644 index 3feb4d376..000000000 --- a/core/src/test/java/de/danoeh/antennapod/core/util/URIUtilTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.danoeh.antennapod.core.util; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * Test class for URIUtil - */ -public class URIUtilTest { - - @Test - public void testGetURIFromRequestUrlShouldNotEncode() { - final String testUrl = "http://example.com/this%20is%20encoded"; - assertEquals(testUrl, URIUtil.getURIFromRequestUrl(testUrl).toString()); - } - - @Test - public void testGetURIFromRequestUrlShouldEncode() { - final String testUrl = "http://example.com/this is not encoded"; - final String expected = "http://example.com/this%20is%20not%20encoded"; - assertEquals(expected, URIUtil.getURIFromRequestUrl(testUrl).toString()); - } -} |