Android: de-duplicate display size calculation code
Same logic for calculating the display's size is done in few places while being simple duplication, this de-duplicate it. Task-number: QTBUG-132716 Change-Id: I9e65a271fdce1769316f4e05012faf7f194b81b1 Reviewed-by: Petri Virkkunen <petri.virkkunen@qt.io>
This commit is contained in:
parent
95c21244cc
commit
9920c33500
@ -251,21 +251,25 @@ class QtDisplayManager {
|
||||
}
|
||||
|
||||
@UsedFromNativeCode
|
||||
static Size getDisplaySize(Context displayContext, Display display)
|
||||
@SuppressWarnings("deprecation")
|
||||
static Size getDisplaySize(Context context, Display display)
|
||||
{
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
|
||||
DisplayMetrics realMetrics = new DisplayMetrics();
|
||||
display.getRealMetrics(realMetrics);
|
||||
return new Size(realMetrics.widthPixels, realMetrics.heightPixels);
|
||||
}
|
||||
if (display == null || context == null)
|
||||
return new Size(0, 0);
|
||||
|
||||
Context windowsContext = displayContext.createWindowContext(
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION, null);
|
||||
WindowManager windowManager =
|
||||
(WindowManager) windowsContext.getSystemService(Context.WINDOW_SERVICE);
|
||||
WindowMetrics windowsMetrics = windowManager.getCurrentWindowMetrics();
|
||||
Rect bounds = windowsMetrics.getBounds();
|
||||
return new Size(bounds.width(), bounds.height());
|
||||
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
|
||||
final DisplayMetrics metrics = new DisplayMetrics();
|
||||
display.getRealMetrics(metrics);
|
||||
return new Size(metrics.widthPixels, metrics.heightPixels);
|
||||
} else {
|
||||
Context displayContext = context.createDisplayContext(display);
|
||||
Context windowsContext = displayContext.createWindowContext(
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION, null);
|
||||
WindowManager windowManager = (WindowManager) windowsContext.getSystemService(
|
||||
Context.WINDOW_SERVICE);
|
||||
Rect bounds = windowManager.getMaximumWindowMetrics().getBounds();
|
||||
return new Size(bounds.width(), bounds.height());
|
||||
}
|
||||
}
|
||||
|
||||
static void setApplicationDisplayMetrics(Activity activity, int width, int height)
|
||||
@ -274,28 +278,14 @@ class QtDisplayManager {
|
||||
return;
|
||||
|
||||
final WindowInsets rootInsets = activity.getWindow().getDecorView().getRootWindowInsets();
|
||||
final WindowManager windowManager = activity.getWindowManager();
|
||||
Display display = QtDisplayManager.getDisplay(activity);
|
||||
|
||||
int insetLeft;
|
||||
int insetTop;
|
||||
|
||||
int maxWidth;
|
||||
int maxHeight;
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
|
||||
final DisplayMetrics maxMetrics = new DisplayMetrics();
|
||||
display.getRealMetrics(maxMetrics);
|
||||
maxWidth = maxMetrics.widthPixels;
|
||||
maxHeight = maxMetrics.heightPixels;
|
||||
|
||||
insetLeft = rootInsets.getStableInsetLeft();
|
||||
insetTop = rootInsets.getStableInsetTop();
|
||||
} else {
|
||||
final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics();
|
||||
maxWidth = maxMetrics.getBounds().width();
|
||||
maxHeight = maxMetrics.getBounds().height();
|
||||
|
||||
insetLeft = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).left;
|
||||
insetTop = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top;
|
||||
}
|
||||
@ -305,7 +295,8 @@ class QtDisplayManager {
|
||||
double density = displayMetrics.density;
|
||||
double scaledDensity = displayMetrics.scaledDensity;
|
||||
|
||||
setDisplayMetrics(maxWidth, maxHeight, insetLeft, insetTop,
|
||||
Size displaySize = getDisplaySize(activity, QtDisplayManager.getDisplay(activity));
|
||||
setDisplayMetrics(displaySize.getWidth(), displaySize.getHeight(), insetLeft, insetTop,
|
||||
width, height, getXDpi(displayMetrics), getYDpi(displayMetrics),
|
||||
scaledDensity, density);
|
||||
}
|
||||
|
@ -87,16 +87,13 @@ QAndroidPlatformScreen::QAndroidPlatformScreen(const QJniObject &displayObject)
|
||||
m_refreshRate = displayObject.callMethod<jfloat>("getRefreshRate");
|
||||
m_displayId = displayObject.callMethod<jint>("getDisplayId");
|
||||
|
||||
const QJniObject context = QNativeInterface::QAndroidApplication::context();
|
||||
const auto displayContext = context.callMethod<QtJniTypes::Context>("createDisplayContext",
|
||||
displayObject.object<QtJniTypes::Display>());
|
||||
|
||||
const auto context = QNativeInterface::QAndroidApplication::context();
|
||||
const auto sizeObj = QtJniTypes::QtDisplayManager::callStaticMethod<QtJniTypes::Size>(
|
||||
"getDisplaySize", displayContext,
|
||||
"getDisplaySize", context,
|
||||
displayObject.object<QtJniTypes::Display>());
|
||||
m_size = QSize(sizeObj.callMethod<int>("getWidth"), sizeObj.callMethod<int>("getHeight"));
|
||||
|
||||
const auto resources = displayContext.callMethod<QtJniTypes::Resources>("getResources");
|
||||
const auto resources = context.callMethod<QtJniTypes::Resources>("getResources");
|
||||
const auto metrics = resources.callMethod<QtJniTypes::DisplayMetrics>("getDisplayMetrics");
|
||||
const float xdpi = metrics.getField<float>("xdpi");
|
||||
const float ydpi = metrics.getField<float>("ydpi");
|
||||
|
Loading…
x
Reference in New Issue
Block a user