summaryrefslogtreecommitdiffstats
path: root/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtLayout.java')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java40
1 files changed, 30 insertions, 10 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 123c5bc248..c4864f91c1 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -48,6 +48,7 @@ import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManager;
public class QtLayout extends ViewGroup
{
@@ -91,16 +92,23 @@ public class QtLayout extends ViewGroup
@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh)
{
- DisplayMetrics metrics = new DisplayMetrics();
+ Activity activity = (Activity)getContext();
+ if (activity == null)
+ return;
+
Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
- ? ((Activity)getContext()).getWindowManager().getDefaultDisplay()
- : ((Activity)getContext()).getDisplay();
- display.getMetrics(metrics);
+ ? activity.getWindowManager().getDefaultDisplay()
+ : activity.getDisplay();
- if ((metrics.widthPixels > metrics.heightPixels) != (w > h)) {
+ DisplayMetrics realMetrics = new DisplayMetrics();
+ display.getRealMetrics(realMetrics);
+ DisplayMetrics appMetrics = new DisplayMetrics();
+ display.getMetrics(appMetrics);
+
+ if ((realMetrics.widthPixels > realMetrics.heightPixels) != (w > h)) {
// This is an intermediate state during display rotation.
// The new size is still reported for old orientation, while
- // metrics contain sizes for new orientation. Setting
+ // realMetrics contain sizes for new orientation. Setting
// such parameters will produce inconsistent results, so
// we just skip them.
// We will have another onSizeChanged() with normal values
@@ -108,9 +116,21 @@ public class QtLayout extends ViewGroup
return;
}
- QtNative.setApplicationDisplayMetrics(metrics.widthPixels, metrics.heightPixels, w, h,
- metrics.xdpi, metrics.ydpi, metrics.scaledDensity,
- metrics.density, display.getRefreshRate());
+ int appWidthPixels = appMetrics.widthPixels;
+ int appHeightPixels = appMetrics.heightPixels;
+
+ final int flag =
+ activity.getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN;
+ if (flag == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
+ // immersive mode uses the whole screen
+ appWidthPixels = realMetrics.widthPixels;
+ appHeightPixels = realMetrics.heightPixels;
+ }
+
+ QtNative.setApplicationDisplayMetrics(
+ realMetrics.widthPixels, realMetrics.heightPixels,
+ appWidthPixels, appHeightPixels, appMetrics.xdpi, appMetrics.ydpi,
+ appMetrics.scaledDensity, appMetrics.density, display.getRefreshRate());
int newRotation = display.getRotation();
if (m_ownDisplayRotation != m_activityDisplayRotation
@@ -121,8 +141,8 @@ public class QtLayout extends ViewGroup
// orientation change now.
QtNative.handleOrientationChanged(newRotation, m_nativeOrientation);
}
- m_ownDisplayRotation = newRotation;
+ m_ownDisplayRotation = newRotation;
if (m_startApplicationRunnable != null) {
m_startApplicationRunnable.run();
m_startApplicationRunnable = null;