summaryrefslogtreecommitdiffstats
path: root/src/android/jar/src
diff options
context:
space:
mode:
authorPekka Gehör <pekka.gehor@qt.io>2021-03-25 07:45:14 +0200
committerPekka Gehör <pekka.gehor@qt.io>2021-05-06 09:53:38 +0300
commit6bbba5576c9477c61721bc4fbb761752d98c23d2 (patch)
tree18753aa3d1841ab299ad3feca8cefdf7c6f3ec64 /src/android/jar/src
parent76d3c7055bb1453de291d53e12ab4a015cd4997e (diff)
Android: Fix screen flicker issues
When changing focus between TextInput fields there is a flicker of the QQuickWidget Fixes: QTBUG-66727 Change-Id: I9f31f43dee1bbbf213422978a35e752a8ceff56c Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Diffstat (limited to 'src/android/jar/src')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java30
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java12
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java2
3 files changed, 35 insertions, 9 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index f22b8176c8..45b5c0b061 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -46,10 +46,13 @@ import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
+import android.graphics.Rect;
public class QtLayout extends ViewGroup
{
private Runnable m_startApplicationRunnable;
+ private int m_bottomDisplayFrame = -1;
+
public QtLayout(Context context, Runnable startRunnable)
{
super(context);
@@ -66,13 +69,30 @@ public class QtLayout extends ViewGroup
super(context, attrs, defStyle);
}
- @Override
- protected void onSizeChanged (int w, int h, int oldw, int oldh)
+ private void handleSizeChanged (int w, int h, int oldw, int oldh)
{
DisplayMetrics metrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(metrics);
- QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h,
- metrics.xdpi, metrics.ydpi, metrics.scaledDensity, metrics.density);
+
+ Rect r = new Rect();
+ ((Activity) getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
+
+ if (m_bottomDisplayFrame != r.bottom) {
+ m_bottomDisplayFrame = r.bottom;
+ QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h,
+ metrics.xdpi,
+ metrics.ydpi,
+ metrics.scaledDensity,
+ metrics.density,
+ ((metrics.heightPixels == h) || (metrics.heightPixels == h + r.top)));
+ }
+ }
+
+ @Override
+ protected void onSizeChanged (int w, int h, int oldw, int oldh)
+ {
+ handleSizeChanged (w, h, oldw, oldh);
+
if (m_startApplicationRunnable != null) {
m_startApplicationRunnable.run();
m_startApplicationRunnable = null;
@@ -150,6 +170,8 @@ public class QtLayout extends ViewGroup
}
}
+
+ handleSizeChanged (r, b, 0, 0);
}
// Override to allow type-checking of LayoutParams.
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index c1210ab5b6..b31ed3577e 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -612,7 +612,8 @@ public class QtNative
m_displayMetricsXDpi,
m_displayMetricsYDpi,
m_displayMetricsScaledDensity,
- m_displayMetricsDensity);
+ m_displayMetricsDensity,
+ true);
}
});
m_qtThread.post(new Runnable() {
@@ -634,7 +635,8 @@ public class QtNative
double XDpi,
double YDpi,
double scaledDensity,
- double density)
+ double density,
+ boolean forceUpdate)
{
/* Fix buggy dpi report */
if (XDpi < android.util.DisplayMetrics.DENSITY_LOW)
@@ -651,7 +653,8 @@ public class QtNative
XDpi,
YDpi,
scaledDensity,
- density);
+ density,
+ forceUpdate);
} else {
m_displayMetricsScreenWidthPixels = screenWidthPixels;
m_displayMetricsScreenHeightPixels = screenHeightPixels;
@@ -1354,7 +1357,8 @@ public class QtNative
double XDpi,
double YDpi,
double scaledDensity,
- double density);
+ double density,
+ boolean forceUpdate);
public static native void handleOrientationChanged(int newRotation, int nativeOrientation);
// screen methods
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java
index 1da377c2ba..68e79c273f 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java
@@ -115,7 +115,7 @@ public class QtServiceDelegate
QtNative.setService(m_service, this);
QtNative.setClassLoader(classLoader);
- QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0);
+ QtNative.setApplicationDisplayMetrics(10, 10, 10, 10, 120, 120, 1.0, 1.0, false);
if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) {
for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) {