From dd8574901c6bcd78d1164e8ea554d7debedfbc38 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 10 Jan 2024 16:54:54 +0800 Subject: [PATCH] Add cookie jar --- .../android/tv/ui/custom/CustomWebView.java | 4 ++ .../java/com/github/catvod/net/CookieJar.java | 63 +++++++++++++++++++ .../java/com/github/catvod/net/OkHttp.java | 2 +- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 catvod/src/main/java/com/github/catvod/net/CookieJar.java diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java index e3354019e..f81ff6338 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java @@ -61,14 +61,18 @@ public class CustomWebView extends WebView { public void initSettings() { this.timer = () -> stop(true); this.empty = new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes())); + getSettings().setSupportZoom(true); getSettings().setUseWideViewPort(true); getSettings().setDatabaseEnabled(true); getSettings().setDomStorageEnabled(true); getSettings().setJavaScriptEnabled(true); + getSettings().setBuiltInZoomControls(true); + getSettings().setDisplayZoomControls(false); getSettings().setLoadWithOverviewMode(true); getSettings().setMediaPlaybackRequiresUserGesture(false); getSettings().setJavaScriptCanOpenWindowsAutomatically(false); getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + CookieManager.getInstance().setAcceptThirdPartyCookies(this, true); setWebViewClient(webViewClient()); } diff --git a/catvod/src/main/java/com/github/catvod/net/CookieJar.java b/catvod/src/main/java/com/github/catvod/net/CookieJar.java new file mode 100644 index 000000000..3c71e7289 --- /dev/null +++ b/catvod/src/main/java/com/github/catvod/net/CookieJar.java @@ -0,0 +1,63 @@ +package com.github.catvod.net; + +import android.text.TextUtils; +import android.webkit.CookieManager; + +import androidx.annotation.NonNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import okhttp3.Cookie; +import okhttp3.HttpUrl; + +public class CookieJar implements okhttp3.CookieJar { + + private static class Loader { + static volatile CookieJar INSTANCE = new CookieJar(); + } + + public static CookieJar get() { + return Loader.INSTANCE; + } + + private final CookieManager manager; + + public CookieJar() { + manager = CookieManager.getInstance(); + } + + @Override + public void saveFromResponse(HttpUrl url, List cookies) { + for (Cookie cookie : cookies) { + manager.setCookie(url.toString(), cookie.toString()); + } + } + + @NonNull + @Override + public List loadForRequest(@NonNull HttpUrl url) { + return get(url); + } + + public List get(HttpUrl url) { + String cookie = manager.getCookie(url.toString()); + if (cookie == null || cookie.isEmpty()) return Collections.emptyList(); + List items = new ArrayList<>(); + for (String text : cookie.split(";")) items.add(Cookie.parse(url, text.trim())); + return items; + } + + public void remove(HttpUrl url, List cookieNames, int maxAge) { + String cookie = manager.getCookie(url.toString()); + if (TextUtils.isEmpty(cookie)) return; + List filter = cookieNames != null ? cookieNames : Arrays.asList(cookie.split(";")); + for (String text : filter) manager.setCookie(url.toString(), text + "=;Max-Age=" + maxAge); + } + + public void removeAll() { + manager.removeAllCookies(null); + } +} \ No newline at end of file diff --git a/catvod/src/main/java/com/github/catvod/net/OkHttp.java b/catvod/src/main/java/com/github/catvod/net/OkHttp.java index b3f719f49..36848cab8 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkHttp.java +++ b/catvod/src/main/java/com/github/catvod/net/OkHttp.java @@ -140,7 +140,7 @@ public class OkHttp { } private static OkHttpClient.Builder getBuilder() { - OkHttpClient.Builder builder = new OkHttpClient.Builder().addInterceptor(new OkhttpInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).sslSocketFactory(new SSLCompat(), SSLCompat.TM); + OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(CookieJar.get()).addInterceptor(new OkhttpInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).sslSocketFactory(new SSLCompat(), SSLCompat.TM); builder.proxySelector(get().proxy ? selector() : defaultSelector); return builder; }