From 617824ff3ea64a859fe0bd93b9880364b75e8b5b Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 12 Jun 2022 13:19:38 +0200 Subject: [PATCH] First hide keyboard on back --- .../java/eu/faircode/email/ActivitySetup.java | 5 ++++- .../eu/faircode/email/ActivitySignature.java | 5 +++++ .../java/eu/faircode/email/ActivityView.java | 5 ++++- .../java/eu/faircode/email/FragmentAccount.java | 5 ++++- .../java/eu/faircode/email/FragmentCompose.java | 5 ++++- .../java/eu/faircode/email/FragmentFolder.java | 5 ++++- .../java/eu/faircode/email/FragmentIdentity.java | 5 ++++- .../java/eu/faircode/email/FragmentMessages.java | 5 +++++ .../main/java/eu/faircode/email/FragmentPop.java | 5 ++++- app/src/main/java/eu/faircode/email/Helper.java | 16 ++++++++++++++++ 10 files changed, 54 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index efa85a2701..7aacea9414 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -318,7 +318,10 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onExit(); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onExit(); } }); diff --git a/app/src/main/java/eu/faircode/email/ActivitySignature.java b/app/src/main/java/eu/faircode/email/ActivitySignature.java index 27a40cae75..92db7bd51f 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySignature.java +++ b/app/src/main/java/eu/faircode/email/ActivitySignature.java @@ -160,6 +160,11 @@ public class ActivitySignature extends ActivityBase { getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { + if (Helper.isKeyboardVisible(view)) { + Helper.hideKeyboard(view); + return; + } + String prev = getIntent().getStringExtra("html"); String current = getHtml(); boolean dirty = !Objects.equals(prev, current) && diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 04105a6087..7a176b1ea3 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -699,7 +699,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onExit(); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onExit(); } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index d993d269e4..eb303f1d74 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -493,7 +493,10 @@ public class FragmentAccount extends FragmentBase { getActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onSave(true); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onSave(true); } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 904e961232..391ae7bca7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -7210,7 +7210,10 @@ public class FragmentCompose extends FragmentBase { private OnBackPressedCallback backPressedCallback = new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onExit(); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onExit(); } }; diff --git a/app/src/main/java/eu/faircode/email/FragmentFolder.java b/app/src/main/java/eu/faircode/email/FragmentFolder.java index a6404dda57..ce5a76f9ac 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolder.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolder.java @@ -241,7 +241,10 @@ public class FragmentFolder extends FragmentBase { getActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onSave(true); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onSave(true); } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 7e213812a5..b29d5cbbc7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -494,7 +494,10 @@ public class FragmentIdentity extends FragmentBase { getActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onSave(true); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onSave(true); } }); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 894f6c0dc7..e6750e9bf7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -7342,6 +7342,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private OnBackPressedCallback backPressedCallback = new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { + if (Helper.isKeyboardVisible(view)) { + Helper.hideKeyboard(view); + return; + } + if (isSearching()) { endSearch(); return; diff --git a/app/src/main/java/eu/faircode/email/FragmentPop.java b/app/src/main/java/eu/faircode/email/FragmentPop.java index a6cce19b0a..7ed23dbfaa 100644 --- a/app/src/main/java/eu/faircode/email/FragmentPop.java +++ b/app/src/main/java/eu/faircode/email/FragmentPop.java @@ -278,7 +278,10 @@ public class FragmentPop extends FragmentBase { getActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { - onSave(true); + if (Helper.isKeyboardVisible(view)) + Helper.hideKeyboard(view); + else + onSave(true); } }); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 40ca69410f..596a0f7a00 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -103,6 +103,8 @@ import androidx.browser.customtabs.CustomTabsIntent; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Lifecycle; @@ -1524,6 +1526,20 @@ public class Helper { } } + static boolean isKeyboardVisible(final View view) { + if (view == null) + return false; + View root = view.getRootView(); + if (root == null) + return false; + WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(root); + if (insets == null) + return false; + boolean visible = insets.isVisible(WindowInsetsCompat.Type.ime()); + Log.i("isKeyboardVisible=" + visible); + return visible; + } + static String getViewName(View view) { StringBuilder sb = new StringBuilder(_getViewName(view)); ViewParent parent = view.getParent();