Some captcha fixes

filtering
Floens 10 years ago
parent dd0371f38a
commit f02cc1636e
  1. 15
      Clover/app/src/main/assets/captcha/captcha.html
  2. 4
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
  3. 18
      Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayout.java

@ -3,14 +3,6 @@
<head> <head>
<meta name=viewport content="width=device-width, initial-scale=1"> <meta name=viewport content="width=device-width, initial-scale=1">
<style type="text/css"> <style type="text/css">
body.light {
background: #ffffff;
}
body.dark {
background: #000000;
}
#loadingCaptcha { #loadingCaptcha {
font-family: sans-serif; font-family: sans-serif;
font-size: 20px; font-size: 20px;
@ -18,8 +10,9 @@
</style> </style>
<script src='https://www.google.com/recaptcha/api.js?onload=globalOnCaptchaLoaded&render=explicit'></script> <script src='https://www.google.com/recaptcha/api.js?onload=globalOnCaptchaLoaded&render=explicit'></script>
</head> </head>
<body class="__theme__"> <body>
<div id="captcha-loading">Loading captcha...</div> <div id="captcha-loading">Loading captcha...</div>
<div id="captcha-error"></div>
<div id="captcha-container"></div> <div id="captcha-container"></div>
<script type="text/javascript"> <script type="text/javascript">
@ -36,6 +29,10 @@ window.globalOnCaptchaLoaded = function() {
CaptchaCallback.onCaptchaLoaded(); CaptchaCallback.onCaptchaLoaded();
document.getElementById('captcha-loading').style.display = 'none'; document.getElementById('captcha-loading').style.display = 'none';
} }
window.onerror = function(message, url, line) {
document.getElementById('captcha-error').appendChild(document.createTextNode(line + ': ' + message + ' @ ' + url));
}
</script> </script>
</body> </body>
</html> </html>

@ -204,7 +204,7 @@ public class ReplyFragment extends DialogFragment implements CaptchaLayout.Captc
String baseUrl = loadable.isThreadMode() ? ChanUrls.getThreadUrlDesktop(loadable.board, loadable.no) : ChanUrls.getBoardUrlDesktop(loadable.board); String baseUrl = loadable.isThreadMode() ? ChanUrls.getThreadUrlDesktop(loadable.board, loadable.no) : ChanUrls.getBoardUrlDesktop(loadable.board);
captchaLayout.initCaptcha(baseUrl, ChanUrls.getCaptchaSiteKey(), captchaLayout.initCaptcha(baseUrl, ChanUrls.getCaptchaSiteKey(),
ThemeHelper.getInstance().getTheme().isLightTheme, ChanApplication.getReplyManager().getUserAgent(), this); ThemeHelper.getInstance().getTheme().isLightTheme, ChanApplication.getInstance().getUserAgent(), this);
} else { } else {
Logger.e(TAG, "Loadable in ReplyFragment was null"); Logger.e(TAG, "Loadable in ReplyFragment was null");
closeReply(); closeReply();
@ -578,11 +578,11 @@ public class ReplyFragment extends DialogFragment implements CaptchaLayout.Captc
cancelButton.setEnabled(true); cancelButton.setEnabled(true);
setClosable(true); setClosable(true);
captchaResponse = null; captchaResponse = null;
captchaLayout.reset();
if (ChanPreferences.getPassEnabled()) { if (ChanPreferences.getPassEnabled()) {
flipPage(0); flipPage(0);
} else { } else {
flipPage(1); flipPage(1);
captchaLayout.reset();
} }
} else if (response.isSuccessful) { } else if (response.isSuccessful) {
shouldSaveDraft = false; shouldSaveDraft = false;

@ -21,7 +21,10 @@ import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
@ -29,6 +32,8 @@ import org.floens.chan.utils.IOUtils;
import org.floens.chan.utils.Utils; import org.floens.chan.utils.Utils;
public class CaptchaLayout extends WebView { public class CaptchaLayout extends WebView {
private static final String TAG = "CaptchaLayout";
private CaptchaCallback callback; private CaptchaCallback callback;
private boolean loaded = false; private boolean loaded = false;
private String baseUrl; private String baseUrl;
@ -58,6 +63,15 @@ public class CaptchaLayout extends WebView {
settings.setJavaScriptEnabled(true); settings.setJavaScriptEnabled(true);
settings.setUserAgentString(userAgent); settings.setUserAgentString(userAgent);
setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.i(TAG, consoleMessage.lineNumber() + ":" + consoleMessage.message() + " " + consoleMessage.sourceId());
return true;
}
});
setBackgroundColor(0x00000000);
addJavascriptInterface(new CaptchaInterface(this), "CaptchaCallback"); addJavascriptInterface(new CaptchaInterface(this), "CaptchaCallback");
} }
@ -94,9 +108,9 @@ public class CaptchaLayout extends WebView {
} }
public interface CaptchaCallback { public interface CaptchaCallback {
public void captchaLoaded(CaptchaLayout captchaLayout); void captchaLoaded(CaptchaLayout captchaLayout);
public void captchaEntered(CaptchaLayout captchaLayout, String response); void captchaEntered(CaptchaLayout captchaLayout, String response);
} }
public static class CaptchaInterface { public static class CaptchaInterface {

Loading…
Cancel
Save