diff options
author | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2021-03-23 10:08:20 +0100 |
---|---|---|
committer | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2021-03-26 09:05:04 +0100 |
commit | e402e1103b874c0bf91a1bc754752ee73ffadf33 (patch) | |
tree | ec57281ab54287b38e58a889b75d230e2315af0b /src | |
parent | 3e65d0408b830518ca2f18c8d0d583cbb665d1f3 (diff) |
Android: fix for isSoftwareKeyboard method
isSoftwareKeyboard() method will rely on visibility flag from
activityDelegate. In such case it also need to consider that keyboard is
during the hiding.
Fix the regression related with commit:
e6ca200a3a0aecc2313becf959c1be4fe18bdfa1
Before this change Software Keyboard is not showing after changing the
focus. It is happening when Keyboard is already visible and focus is
changed to widget that also need the keyboard. In such case keyboard is
hiding (and NOT showing again).
Pick-to: 5.15
Fixes: QTBUG-92051
Change-Id: I6a5d07b25442429fda6e715d09ea104432c5ef50
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java | 7 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtNative.java | 16 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java index c473c1f78b..e9efd06497 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -209,6 +209,11 @@ public class QtActivityDelegate } } + public boolean isKeyboardVisible() + { + return m_keyboardIsVisible; + } + // input method hints - must be kept in sync with QTDIR/src/corelib/global/qnamespace.h private final int ImhHiddenText = 0x1; private final int ImhSensitiveData = 0x2; @@ -260,7 +265,7 @@ public class QtActivityDelegate if (m_keyboardIsVisible == visibility) return false; m_keyboardIsVisible = visibility; - QtNative.keyboardVisibilityChanged(m_keyboardIsVisible); + QtNative.keyboardVisibilityUpdated(m_keyboardIsVisible); if (visibility == false) updateFullScreen(); // Hiding the keyboard clears the immersive mode, so we need to set it again. diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java index 5aa3997f91..56cf0cca8a 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -99,6 +99,7 @@ public class QtNative public static final String QtTAG = "Qt JAVA"; // string used for Log.x private static ArrayList<Runnable> m_lostActions = new ArrayList<Runnable>(); // a list containing all actions which could not be performed (e.g. the main activity is destroyed, etc.) private static boolean m_started = false; + private static boolean m_isKeyboardHiding = false; private static int m_displayMetricsScreenWidthPixels = 0; private static int m_displayMetricsScreenHeightPixels = 0; private static int m_displayMetricsAvailableLeftPixels = 0; @@ -930,6 +931,7 @@ public class QtNative private static void hideSoftwareKeyboard() { + m_isKeyboardHiding = true; runAction(new Runnable() { @Override public void run() { @@ -954,13 +956,7 @@ public class QtNative public static boolean isSoftwareKeyboardVisible() { - Activity activity = QtNative.activity(); - Rect r = new Rect(); - activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(r); - DisplayMetrics metrics = new DisplayMetrics(); - activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); - final int kbHeight = metrics.heightPixels - r.bottom; - return (kbHeight >= KEYBOARD_HEIGHT_THRESHOLD); + return m_activityDelegate.isKeyboardVisible() && !m_isKeyboardHiding; } private static void notifyAccessibilityLocationChange() @@ -1327,6 +1323,12 @@ public class QtNative }); } + public static void keyboardVisibilityUpdated(boolean visibility) + { + m_isKeyboardHiding = false; + keyboardVisibilityChanged(visibility); + } + private static String[] listAssetContent(android.content.res.AssetManager asset, String path) { String [] list; ArrayList<String> res = new ArrayList<String>(); |