summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBartlomiej Moskal <bartlomiej.moskal@qt.io>2021-03-23 10:08:20 +0100
committerBartlomiej Moskal <bartlomiej.moskal@qt.io>2021-03-26 09:05:04 +0100
commite402e1103b874c0bf91a1bc754752ee73ffadf33 (patch)
treeec57281ab54287b38e58a889b75d230e2315af0b /src
parent3e65d0408b830518ca2f18c8d0d583cbb665d1f3 (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.java7
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtNative.java16
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>();