package me.devsaki.hentoid.activities; import android.annotation.TargetApi; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Build; import android.support.annotation.NonNull; import android.webkit.WebResourceError; import android.webkit.WebResourceRequest; import android.webkit.WebResourceResponse; import android.webkit.WebView; import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import me.devsaki.hentoid.database.domains.Content; import me.devsaki.hentoid.enums.Site; import me.devsaki.hentoid.parsers.ASMHentaiParser; import me.devsaki.hentoid.util.Helper; import me.devsaki.hentoid.util.LogHelper; import me.devsaki.hentoid.views.ObservableWebView; import static me.devsaki.hentoid.util.Helper.TYPE; import static me.devsaki.hentoid.util.Helper.executeAsyncTask; import static me.devsaki.hentoid.util.Helper.getWebResourceResponseFromAsset; /** * Created by avluis on 07/21/2016. * Implements ASMHentai source */ public class ASMHentaiActivity extends BaseWebActivity { private final static String TAG = LogHelper.makeLogTag(ASMHentaiActivity.class); @Override void setSite(Site site) { super.setSite(Site.ASMHENTAI); } @Override void setWebView(ObservableWebView webView) { webView.setWebViewClient(new ASMHentaiWebViewClient()); super.setWebView(webView); } @Override void backgroundRequest(String extra) { LogHelper.d(TAG, extra); Helper.toast("Processing..."); executeAsyncTask(new HtmlLoader(), extra); } private class ASMHentaiWebViewClient extends CustomWebViewClient { final ByteArrayInputStream nothing = new ByteArrayInputStream("".getBytes()); @SuppressWarnings("deprecation") // From API 24 we should use another overload @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try { URL u = new URL(url); return !(u.getHost().endsWith("asmhentai.com")); } catch (MalformedURLException e) { LogHelper.d(TAG, "Malformed URL"); } return false; } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { try { URL u = new URL(request.getUrl().toString()); return !(u.getHost().endsWith("asmhentai.com")); } catch (MalformedURLException e) { LogHelper.d(TAG, "Malformed URL"); } return false; } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { /*Workaround for cache miss when re-submitting data to search form*/ view.loadUrl(view.getOriginalUrl()); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if (url.contains("//asmhentai.com/g/")) { executeAsyncTask(new HtmlLoader(), url); } } @SuppressWarnings("deprecation") // From API 21 we should use another overload @Override public WebResourceResponse shouldInterceptRequest(@NonNull WebView view, @NonNull String url) { if (url.contains("ads.js") || url.contains("f.js") || url.contains("pop.js") || url.contains("ads.php") || url.contains("syndication.exoclick.com")) { return new WebResourceResponse("text/plain", "utf-8", nothing); } else if (url.contains("main.js")) { return getWebResourceResponseFromAsset(getSite(), "main.js", TYPE.JS); } else if (url.contains("exoclick.com") || url.contains("juicyadultads.com")) { return new WebResourceResponse("text/plain", "utf-8", nothing); } else { return super.shouldInterceptRequest(view, url); } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public WebResourceResponse shouldInterceptRequest(@NonNull WebView view, @NonNull WebResourceRequest request) { String url = request.getUrl().toString(); if (url.contains("ads.js") || url.contains("f.js") || url.contains("pop.js") || url.contains("syndication.exoclick.com")) { return new WebResourceResponse("text/plain", "utf-8", nothing); } else if (url.contains("main.js")) { return getWebResourceResponseFromAsset(getSite(), "main.js", TYPE.JS); } else if (url.contains("exoclick.com") || url.contains("juicyadultads.com")) { return new WebResourceResponse("text/plain", "utf-8", nothing); } else { return super.shouldInterceptRequest(view, request); } } } private class HtmlLoader extends AsyncTask<String, Integer, Content> { @Override protected Content doInBackground(String... params) { String url = params[0]; try { processContent(ASMHentaiParser.parseContent(url)); } catch (IOException e) { LogHelper.e(TAG, e, "Error parsing content."); } return null; } } }