From 8c0d512d528ac32d7c125485bd6f61281d098e8e Mon Sep 17 00:00:00 2001 From: Floens Date: Sun, 17 Jan 2016 00:45:40 +0100 Subject: [PATCH] Add a button to the captcha layouts to hard reset them --- .../controller/ThemeSettingsController.java | 2 +- .../floens/chan/ui/layout/CaptchaLayout.java | 19 +++++++---- .../ui/layout/CaptchaLayoutInterface.java | 2 ++ .../chan/ui/layout/LegacyCaptchaLayout.java | 6 ++++ .../floens/chan/ui/layout/ReplyLayout.java | 31 ++++++++++++++---- .../org/floens/chan/ui/theme/DarkTheme.java | 1 + .../java/org/floens/chan/ui/theme/Theme.java | 2 ++ .../drawable-hdpi/ic_refresh_black_24dp.png | Bin 0 -> 391 bytes .../drawable-mdpi/ic_refresh_black_24dp.png | Bin 0 -> 249 bytes .../drawable-xhdpi/ic_refresh_black_24dp.png | Bin 0 -> 506 bytes .../drawable-xxhdpi/ic_refresh_black_24dp.png | Bin 0 -> 721 bytes .../ic_refresh_black_24dp.png | Bin 0 -> 948 bytes .../main/res/layout/layout_reply_captcha.xml | 31 ++++++++++++++++++ 13 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png create mode 100644 Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png create mode 100644 Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png create mode 100644 Clover/app/src/main/res/layout/layout_reply_captcha.xml diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java index 42fefd81..a39b4ac1 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java @@ -65,7 +65,7 @@ import static org.floens.chan.utils.AndroidUtils.getAttrColor; import static org.floens.chan.utils.AndroidUtils.getString; public class ThemeSettingsController extends Controller implements View.OnClickListener { - private static PostCell.PostCellCallback DUMMY_POST_CALLBACK = new PostCell.PostCellCallback() { + private PostCell.PostCellCallback DUMMY_POST_CALLBACK = new PostCell.PostCellCallback() { private Loadable loadable = new Loadable("g", 1234); @Override diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayout.java index 52607ee6..a627a442 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayout.java @@ -64,6 +64,8 @@ public class CaptchaLayout extends WebView implements CaptchaLayoutInterface { this.siteKey = siteKey; this.lightTheme = lightTheme; + AndroidUtils.hideKeyboard(this); + WebSettings settings = getSettings(); settings.setJavaScriptEnabled(true); @@ -100,14 +102,19 @@ public class CaptchaLayout extends WebView implements CaptchaLayoutInterface { if (loaded) { loadUrl("javascript:grecaptcha.reset()"); } else { - loaded = true; + hardReset(); + } + } - String html = IOUtils.assetAsString(getContext(), "captcha/captcha.html"); - html = html.replace("__site_key__", siteKey); - html = html.replace("__theme__", lightTheme ? "light" : "dark"); + @Override + public void hardReset() { + loaded = true; - loadDataWithBaseURL(baseUrl, html, "text/html", "UTF-8", null); - } + String html = IOUtils.assetAsString(getContext(), "captcha/captcha.html"); + html = html.replace("__site_key__", siteKey); + html = html.replace("__theme__", lightTheme ? "light" : "dark"); + + loadDataWithBaseURL(baseUrl, html, "text/html", "UTF-8", null); } private void onCaptchaLoaded() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayoutInterface.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayoutInterface.java index 8cae8ee4..44e63716 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayoutInterface.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/CaptchaLayoutInterface.java @@ -21,4 +21,6 @@ public interface CaptchaLayoutInterface { void initCaptcha(String baseUrl, String siteKey, boolean lightTheme, CaptchaCallback callback); void reset(); + + void hardReset(); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/LegacyCaptchaLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/LegacyCaptchaLayout.java index 28efb0cf..71b553cf 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/LegacyCaptchaLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/LegacyCaptchaLayout.java @@ -130,6 +130,11 @@ public class LegacyCaptchaLayout extends LinearLayout implements CaptchaLayoutIn this.callback = callback; } + @Override + public void hardReset() { + reset(); + } + @Override public void reset() { input.setText(""); @@ -141,6 +146,7 @@ public class LegacyCaptchaLayout extends LinearLayout implements CaptchaLayoutIn } private void submitCaptcha() { + AndroidUtils.hideKeyboard(this); callback.captchaEntered(this, challenge, input.getText().toString()); } 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 23e918eb..e4956d22 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 @@ -28,6 +28,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -61,8 +62,11 @@ import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; public class ReplyLayout extends LoadView implements View.OnClickListener, AnimationUtils.LayoutAnimationProgress, ReplyPresenter.ReplyPresenterCallback, TextWatcher, ImageDecoder.ImageDecoderCallback, SelectionListeningEditText.SelectionChangedListener { private ReplyPresenter presenter; private ReplyLayoutCallback callback; + private boolean newCaptcha = ChanSettings.postNewCaptcha.get(); private View replyInputLayout; + private FrameLayout captchaContainer; + private ImageView captchaHardReset; private CaptchaLayoutInterface captchaLayout; private boolean openingName; @@ -141,6 +145,12 @@ public class ReplyLayout extends LoadView implements View.OnClickListener, Anima setRoundItemBackground(submit); submit.setOnClickListener(this); + captchaContainer = (FrameLayout) LayoutInflater.from(getContext()).inflate(R.layout.layout_reply_captcha, this, false); + captchaHardReset = (ImageView) captchaContainer.findViewById(R.id.reset); + theme().refreshDrawable.apply(captchaHardReset); + setRoundItemBackground(captchaHardReset); + captchaHardReset.setOnClickListener(this); + setView(replyInputLayout); } @@ -167,9 +177,9 @@ public class ReplyLayout extends LoadView implements View.OnClickListener, Anima @Override public LayoutParams getLayoutParamsForView(View view) { - if (view == replyInputLayout || (view == captchaLayout && captchaLayout instanceof LegacyCaptchaLayout)) { + if (view == replyInputLayout || (view == captchaContainer && !newCaptcha)) { return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); - } else if (view == captchaLayout && captchaLayout instanceof CaptchaLayout) { + } else if (view == captchaContainer && newCaptcha) { return new LayoutParams(LayoutParams.MATCH_PARENT, dp(300)); } else { // Loadbar @@ -198,7 +208,9 @@ public class ReplyLayout extends LoadView implements View.OnClickListener, Anima presenter.onSubmitClicked(); }/* else if (v == preview) { // TODO - }*/ + }*/ else if (v == captchaHardReset) { + captchaLayout.hardReset(); + } } @Override @@ -218,16 +230,20 @@ public class ReplyLayout extends LoadView implements View.OnClickListener, Anima break; case CAPTCHA: if (captchaLayout == null) { - if (ChanSettings.postNewCaptcha.get()) { + if (newCaptcha) { captchaLayout = new CaptchaLayout(getContext()); } else { - captchaLayout = (CaptchaLayoutInterface) LayoutInflater.from(getContext()).inflate(R.layout.layout_captcha_legacy, this, false); + captchaLayout = (CaptchaLayoutInterface) LayoutInflater.from(getContext()).inflate(R.layout.layout_captcha_legacy, captchaContainer, false); } + captchaContainer.addView((View) captchaLayout, 0); + } + + if (newCaptcha) { + AndroidUtils.hideKeyboard(this); } - setView((View) captchaLayout); + setView(captchaContainer); - AndroidUtils.hideKeyboard(this); break; } } @@ -321,6 +337,7 @@ public class ReplyLayout extends LoadView implements View.OnClickListener, Anima @Override public void updateCommentCount(int count, int maxCount, boolean over) { commentCounter.setText(count + "/" + maxCount); + //noinspection ResourceAsColor commentCounter.setTextColor(over ? 0xffff0000 : getAttrColor(getContext(), R.attr.text_color_secondary)); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java index 8591fb69..da0832eb 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/DarkTheme.java @@ -36,5 +36,6 @@ public class DarkTheme extends Theme { historyDrawable = new ThemeDrawable(R.drawable.ic_history_white_24dp, 1f); listAddDrawable = new ThemeDrawable(R.drawable.ic_playlist_add_white_24dp, 1f); helpDrawable = new ThemeDrawable(R.drawable.ic_help_outline_white_24dp, 1f); + refreshDrawable = new ThemeDrawable(R.drawable.ic_refresh_white_24dp, 1f); } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java index 52aa2af0..f825d6bc 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/theme/Theme.java @@ -68,6 +68,7 @@ public class Theme { public ThemeDrawable historyDrawable; public ThemeDrawable listAddDrawable; public ThemeDrawable helpDrawable; + public ThemeDrawable refreshDrawable; public Theme(String displayName, String name, int resValue, ThemeHelper.PrimaryColor primaryColor) { this.displayName = displayName; @@ -90,6 +91,7 @@ public class Theme { historyDrawable = new ThemeDrawable(R.drawable.ic_history_black_24dp, 0.54f); listAddDrawable = new ThemeDrawable(R.drawable.ic_playlist_add_black_24dp, 0.54f); helpDrawable = new ThemeDrawable(R.drawable.ic_help_outline_black_24dp, 0.54f); + refreshDrawable = new ThemeDrawable(R.drawable.ic_refresh_black_24dp, 0.54f); } public void applyFabColor(FloatingActionButton fab) { diff --git a/Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9d94c39c84a55c5b7bcc9de206cc0099d173fece GIT binary patch literal 391 zcmV;20eJq2P)T8gQdJhdvbxRr>8VkuO^=&k@NHsKxnG*CKA_&?n+aj!@#lG-;bF{7WGK?4L!SY!v?${8Qwa+$m-v{W@~Pqg0A&oZ zcKO7FRF^HFf{70*=uf_=;o*{CiZmV#jMj~QqqotadvXk0=SjP0k3wZ_ zuBR}!Q3(&OAfF^B&F9c}}7zg0%KYcN6r^HTaM8-(0wXG#Qgc-iFe&6KsCX$PWJwuQLcW6ktqC!&OdB$wTZaQqs(LTP zteF$?6;#CYUK>`hRi`nZgl$REV<|4&(`z^TJ#Ma`8pmhUSFo7BprRK4`bMUN`~`FI zx9?3qpI%V1o{f&EZ&GNcU^IT11@%k_%@xdMgVXuXrxiTO28Zl!Txh;vH5(kz8u8`q z{#Og)`*Ki=#DB8Zh@a_YEi#-Hyit&<(}!&9jE4H+Q!y&lShn#^QG(mq__97J_F2g` zZb(wLnJwJc*nb{n(?1MKbVbN=t>O8barUBQMT>Fmfs)4*s zE_fGbRt(DNgjgY1Hsh2*dvrPEw5oVq@X>KiC|eW~^1@+FDwSWU;-Tuf?bJm3& w^4+W>{)&=Ow>-6GQ_W}3%oTa2(HjUS+`d^IM;1e#dhjIlMS~nBzE(Q%n;v z#+f0`8YvRYGC_>Xl#odeRu$606tYF8=%j#jdJ(KCCB_Ou<}5QvQJOk}6=AwrMtmee z7yHoq5L<;R`G^=~l5$`EfClehhf&JNq>48?Q>c=JXPH~ro)C9fw_Pag*{p9= z<3~LUb_;cT>XhTxW1EFaS=JAWYW(WA`^aL5N{huhf`LL-^k(5#pY1K{(EoQRvsy^n%DZzpZ z-s2cv@i&rVKKP>qwvp^>~?5JV}wt1Sr$Xz1riU{qz-{RnR zgSWJk&n`Q_CGIiGG;<_b<0qdOV}Oes#Bm(QarUe~L(O1QSvkk+00000NkvXXu0mjf DLeE7D literal 0 HcmV?d00001 diff --git a/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..bcaba5f681e66affac25ab97273949d25a634b8c GIT binary patch literal 948 zcmV;l155mgP)EDA1!RuqdMRcJ9$TNkC*q)AibOQFH!>w4ylL++h3CmA@O=MTv52j}Jt z2hSSM^E}Vw3O*w?Kh!kkOkINTY>gt`>L(8NEe%{caX$ zV;b}D6iBPj)e$oP&=@5L;|nWVnKk}#u5&WJuwo~Q)K6NyE-$h%N_?TutodgN%ce0-u6dxlLz{Lt5qJ$>-m>q297FN^DHLT<|9;BPYOrV4g(tslY zgUE6(;n*Ymfh;w{Hr(T8zCsrIk{ekf0Z(xerD%dKmRK9RxrFNI5 + + + + +