diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/WebDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/WebDialog.java new file mode 100644 index 000000000..d5e9748a9 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/WebDialog.java @@ -0,0 +1,44 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.content.DialogInterface; +import android.view.View; +import android.view.WindowManager; + +import androidx.appcompat.app.AlertDialog; + +import com.fongmi.android.tv.App; +import com.fongmi.android.tv.utils.ResUtil; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class WebDialog { + + private final AlertDialog dialog; + + public static WebDialog create(View view) { + return new WebDialog(view); + } + + public WebDialog(View view) { + this.dialog = new MaterialAlertDialogBuilder(App.activity()).setView(view).create(); + this.dialog.setOnDismissListener((DialogInterface.OnDismissListener) view); + } + + public WebDialog show() { + initDialog(); + return this; + } + + public void dismiss() { + dialog.setOnDismissListener(null); + dialog.dismiss(); + } + + private void initDialog() { + WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); + params.height = (int) (ResUtil.getScreenHeight() * 0.8f); + params.width = (int) (ResUtil.getScreenWidth() * 0.8f); + dialog.getWindow().setAttributes(params); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } +} 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 758ccc384..5aa5d688c 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 @@ -1,8 +1,8 @@ package com.fongmi.android.tv.ui.custom; import android.annotation.SuppressLint; -import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; @@ -28,6 +28,7 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.impl.ParseCallback; +import com.fongmi.android.tv.ui.dialog.WebDialog; import com.fongmi.android.tv.utils.Sniffer; import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkCookieJar; @@ -39,14 +40,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -public class CustomWebView extends WebView { +public class CustomWebView extends WebView implements DialogInterface.OnDismissListener { private static final String TAG = CustomWebView.class.getSimpleName(); private static final String BLANK = "about:blank"; private WebResourceResponse empty; private ParseCallback callback; - private AlertDialog dialog; + private WebDialog dialog; private Runnable timer; private boolean detect; private String click; @@ -126,18 +127,12 @@ public class CustomWebView extends WebView { String host = request.getUrl().getHost(); Map headers = request.getRequestHeaders(); if (TextUtils.isEmpty(host) || VodConfig.get().getAds().contains(host)) return empty; - if (url.contains("challenges.cloudflare.com/cdn-cgi")) App.post(() -> showDialog()); + if (url.contains("challenges.cloudflare.com/turnstile")) App.post(() -> showDialog()); if (detect && url.contains("player/?url=")) onParseAdd(headers, url); else if (isVideoFormat(url)) onParseSuccess(headers, url); return super.shouldInterceptRequest(view, request); } - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - super.onPageStarted(view, url, favicon); - if (dialog != null) hideDialog(); - } - @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); @@ -174,7 +169,8 @@ public class CustomWebView extends WebView { private void showDialog() { if (dialog != null || App.activity() == null) return; if (getParent() != null) ((ViewGroup) getParent()).removeView(this); - dialog = new AlertDialog.Builder(App.activity()).setView(this).show(); + dialog = new WebDialog(this).show(); + App.removeCallbacks(timer); } private void hideDialog() { @@ -182,6 +178,11 @@ public class CustomWebView extends WebView { dialog = null; } + @Override + public void onDismiss(DialogInterface dialog) { + stop(true); + } + private List getScript(String url) { List script = new ArrayList<>(Sniffer.getScript(Uri.parse(url))); if (TextUtils.isEmpty(click) || script.contains(click)) return script; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/WebDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/WebDialog.java new file mode 100644 index 000000000..97ac4ba5f --- /dev/null +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/WebDialog.java @@ -0,0 +1,38 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.content.DialogInterface; +import android.view.View; + +import androidx.appcompat.app.AlertDialog; + +import com.fongmi.android.tv.App; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class WebDialog { + + private final AlertDialog dialog; + + public static WebDialog create(View view) { + return new WebDialog(view); + } + + public WebDialog(View view) { + this.dialog = new MaterialAlertDialogBuilder(App.activity()).setView(view).create(); + this.dialog.setOnDismissListener((DialogInterface.OnDismissListener) view); + } + + public WebDialog show() { + initDialog(); + return this; + } + + public void dismiss() { + dialog.setOnDismissListener(null); + dialog.dismiss(); + } + + private void initDialog() { + dialog.getWindow().setDimAmount(0); + dialog.show(); + } +}