From ee7ffb6ad12f8e4c2759a38b10b0242375eda2c6 Mon Sep 17 00:00:00 2001 From: Floens Date: Fri, 26 Jul 2019 17:57:51 +0200 Subject: [PATCH] captcha: replace instance check for reset and destroy to interface methods. --- .../chan/core/presenter/ReplyPresenter.java | 4 +--- .../captcha/AuthenticationLayoutInterface.java | 4 ++++ .../floens/chan/ui/captcha/CaptchaLayout.java | 9 +++++++++ .../GenericWebViewAuthenticationLayout.java | 10 ++++++++++ .../chan/ui/captcha/LegacyCaptchaLayout.java | 10 ++++++++++ .../ui/captcha/v1/CaptchaNojsLayoutV1.java | 9 +++++++++ .../ui/captcha/v2/CaptchaNoJsLayoutV2.java | 18 ++++++++++++------ .../org/floens/chan/ui/layout/ReplyLayout.java | 7 +------ 8 files changed, 56 insertions(+), 15 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java index 0f6532ac..f2c2a8b2 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java @@ -37,7 +37,6 @@ import org.floens.chan.core.site.http.Reply; import org.floens.chan.core.site.http.ReplyResponse; import org.floens.chan.ui.captcha.AuthenticationLayoutCallback; import org.floens.chan.ui.captcha.AuthenticationLayoutInterface; -import org.floens.chan.ui.captcha.v2.CaptchaNoJsLayoutV2; import org.floens.chan.ui.helper.ImagePickDelegate; import org.floens.chan.utils.Logger; @@ -283,8 +282,7 @@ public class ReplyPresenter implements AuthenticationLayoutCallback, ImagePickDe // we don't need this to be called for new captcha window. // Otherwise "Request captcha request is already in progress" message will be shown - if (!(authenticationLayout instanceof CaptchaNoJsLayoutV2)) { - // should this be called here? + if (authenticationLayout.requireResetAfterComplete()) { authenticationLayout.reset(); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/AuthenticationLayoutInterface.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/AuthenticationLayoutInterface.java index a3f2c10a..ce6203dd 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/AuthenticationLayoutInterface.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/captcha/AuthenticationLayoutInterface.java @@ -24,5 +24,9 @@ public interface AuthenticationLayoutInterface { void reset(); + boolean requireResetAfterComplete(); + void hardReset(); + + void onDestroy(); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/CaptchaLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/CaptchaLayout.java index a3c0af4b..601595ad 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/CaptchaLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/captcha/CaptchaLayout.java @@ -121,6 +121,15 @@ public class CaptchaLayout extends WebView implements AuthenticationLayoutInterf loadDataWithBaseURL(baseUrl, html, "text/html", "UTF-8", null); } + @Override + public boolean requireResetAfterComplete() { + return true; + } + + @Override + public void onDestroy() { + } + private void onCaptchaLoaded() { } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/GenericWebViewAuthenticationLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/GenericWebViewAuthenticationLayout.java index 21473b0a..bad7d1d0 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/GenericWebViewAuthenticationLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/captcha/GenericWebViewAuthenticationLayout.java @@ -80,6 +80,16 @@ public class GenericWebViewAuthenticationLayout extends WebView implements Authe public void hardReset() { } + @Override + public boolean requireResetAfterComplete() { + return true; + } + + @Override + public void onDestroy() { + + } + private void checkText() { loadUrl("javascript:WebInterface.onAllText(document.documentElement.textContent)"); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/LegacyCaptchaLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/LegacyCaptchaLayout.java index e7e6e9b3..34485940 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/LegacyCaptchaLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/captcha/LegacyCaptchaLayout.java @@ -142,6 +142,16 @@ public class LegacyCaptchaLayout extends LinearLayout implements AuthenticationL input.requestFocus(); } + @Override + public boolean requireResetAfterComplete() { + return true; + } + + @Override + public void onDestroy() { + + } + private void submitCaptcha() { AndroidUtils.hideKeyboard(this); callback.onAuthenticationComplete(this, challenge, input.getText().toString()); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v1/CaptchaNojsLayoutV1.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v1/CaptchaNojsLayoutV1.java index 819e51e9..8fb5f1f8 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v1/CaptchaNojsLayoutV1.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v1/CaptchaNojsLayoutV1.java @@ -133,11 +133,20 @@ public class CaptchaNojsLayoutV1 extends WebView implements AuthenticationLayout hardReset(); } + @Override + public boolean requireResetAfterComplete() { + return true; + } + @Override public void hardReset() { loadRecaptchaAndSetWebViewData(); } + @Override + public void onDestroy() { + } + private void loadRecaptchaAndSetWebViewData() { final String recaptchaUrl = "https://www.google.com/recaptcha/api/fallback?k=" + siteKey; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java index 943a3b0a..cfefbb52 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/captcha/v2/CaptchaNoJsLayoutV2.java @@ -152,6 +152,17 @@ public class CaptchaNoJsLayoutV2 extends FrameLayout } } + @Override + public boolean requireResetAfterComplete() { + return false; + } + + @Override + public void onDestroy() { + adapter.onDestroy(); + presenter.onDestroy(); + } + @Override public void onCaptchaInfoParsed(CaptchaInfo captchaInfo) { // called on a background thread @@ -171,8 +182,8 @@ public class CaptchaNoJsLayoutV2 extends FrameLayout callback.onAuthenticationComplete(this, null, verificationToken); }); } - // Called when we got response from re-captcha but could not parse some part of it + @Override public void onCaptchaInfoParseError(Throwable error) { // called on a background thread @@ -289,9 +300,4 @@ public class CaptchaNoJsLayoutV2 extends FrameLayout onCaptchaInfoParseError(error); } } - - public void onDestroy() { - adapter.onDestroy(); - presenter.onDestroy(); - } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java index 3fd4eb67..9ff48145 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ReplyLayout.java @@ -365,12 +365,7 @@ public class ReplyLayout extends LoadView implements return; } - if (!(authenticationLayout instanceof CaptchaNoJsLayoutV2)) { - return; - } - - // cleanup resources when switching from the new to the old captcha view - ((CaptchaNoJsLayoutV2) authenticationLayout).onDestroy(); + authenticationLayout.onDestroy(); captchaContainer.removeView((CaptchaNoJsLayoutV2) authenticationLayout); authenticationLayout = null; }