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 00000000..9d94c39c Binary files /dev/null and b/Clover/app/src/main/res/drawable-hdpi/ic_refresh_black_24dp.png differ diff --git a/Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png new file mode 100644 index 00000000..c82efd5f Binary files /dev/null and b/Clover/app/src/main/res/drawable-mdpi/ic_refresh_black_24dp.png differ diff --git a/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png new file mode 100644 index 00000000..0b731280 Binary files /dev/null and b/Clover/app/src/main/res/drawable-xhdpi/ic_refresh_black_24dp.png differ diff --git a/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png b/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png new file mode 100644 index 00000000..91187eb0 Binary files /dev/null and b/Clover/app/src/main/res/drawable-xxhdpi/ic_refresh_black_24dp.png differ 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 00000000..bcaba5f6 Binary files /dev/null and b/Clover/app/src/main/res/drawable-xxxhdpi/ic_refresh_black_24dp.png differ diff --git a/Clover/app/src/main/res/layout/layout_reply_captcha.xml b/Clover/app/src/main/res/layout/layout_reply_captcha.xml new file mode 100644 index 00000000..a3715272 --- /dev/null +++ b/Clover/app/src/main/res/layout/layout_reply_captcha.xml @@ -0,0 +1,31 @@ + + + + + +