Optimize cf dialog

pull/429/head
okjack 2 years ago
parent 718c1f40af
commit 9215cf46a2
  1. 44
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/WebDialog.java
  2. 23
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java
  3. 38
      app/src/mobile/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();
}
}

@ -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<String, String> 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<String> getScript(String url) {
List<String> script = new ArrayList<>(Sniffer.getScript(Uri.parse(url)));
if (TextUtils.isEmpty(click) || script.contains(click)) return script;

@ -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();
}
}
Loading…
Cancel
Save