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,22 +251,26 @@ class QtDisplayManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@UsedFromNativeCode
|
@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) {
|
if (display == null || context == null)
|
||||||
DisplayMetrics realMetrics = new DisplayMetrics();
|
return new Size(0, 0);
|
||||||
display.getRealMetrics(realMetrics);
|
|
||||||
return new Size(realMetrics.widthPixels, realMetrics.heightPixels);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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(
|
Context windowsContext = displayContext.createWindowContext(
|
||||||
WindowManager.LayoutParams.TYPE_APPLICATION, null);
|
WindowManager.LayoutParams.TYPE_APPLICATION, null);
|
||||||
WindowManager windowManager =
|
WindowManager windowManager = (WindowManager) windowsContext.getSystemService(
|
||||||
(WindowManager) windowsContext.getSystemService(Context.WINDOW_SERVICE);
|
Context.WINDOW_SERVICE);
|
||||||
WindowMetrics windowsMetrics = windowManager.getCurrentWindowMetrics();
|
Rect bounds = windowManager.getMaximumWindowMetrics().getBounds();
|
||||||
Rect bounds = windowsMetrics.getBounds();
|
|
||||||
return new Size(bounds.width(), bounds.height());
|
return new Size(bounds.width(), bounds.height());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void setApplicationDisplayMetrics(Activity activity, int width, int height)
|
static void setApplicationDisplayMetrics(Activity activity, int width, int height)
|
||||||
{
|
{
|
||||||
@ -274,28 +278,14 @@ class QtDisplayManager {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
final WindowInsets rootInsets = activity.getWindow().getDecorView().getRootWindowInsets();
|
final WindowInsets rootInsets = activity.getWindow().getDecorView().getRootWindowInsets();
|
||||||
final WindowManager windowManager = activity.getWindowManager();
|
|
||||||
Display display = QtDisplayManager.getDisplay(activity);
|
|
||||||
|
|
||||||
int insetLeft;
|
int insetLeft;
|
||||||
int insetTop;
|
int insetTop;
|
||||||
|
|
||||||
int maxWidth;
|
|
||||||
int maxHeight;
|
|
||||||
|
|
||||||
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
|
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();
|
insetLeft = rootInsets.getStableInsetLeft();
|
||||||
insetTop = rootInsets.getStableInsetTop();
|
insetTop = rootInsets.getStableInsetTop();
|
||||||
} else {
|
} else {
|
||||||
final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics();
|
|
||||||
maxWidth = maxMetrics.getBounds().width();
|
|
||||||
maxHeight = maxMetrics.getBounds().height();
|
|
||||||
|
|
||||||
insetLeft = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).left;
|
insetLeft = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).left;
|
||||||
insetTop = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top;
|
insetTop = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top;
|
||||||
}
|
}
|
||||||
@ -305,7 +295,8 @@ class QtDisplayManager {
|
|||||||
double density = displayMetrics.density;
|
double density = displayMetrics.density;
|
||||||
double scaledDensity = displayMetrics.scaledDensity;
|
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),
|
width, height, getXDpi(displayMetrics), getYDpi(displayMetrics),
|
||||||
scaledDensity, density);
|
scaledDensity, density);
|
||||||
}
|
}
|
||||||
|
@ -87,16 +87,13 @@ QAndroidPlatformScreen::QAndroidPlatformScreen(const QJniObject &displayObject)
|
|||||||
m_refreshRate = displayObject.callMethod<jfloat>("getRefreshRate");
|
m_refreshRate = displayObject.callMethod<jfloat>("getRefreshRate");
|
||||||
m_displayId = displayObject.callMethod<jint>("getDisplayId");
|
m_displayId = displayObject.callMethod<jint>("getDisplayId");
|
||||||
|
|
||||||
const QJniObject context = QNativeInterface::QAndroidApplication::context();
|
const auto context = QNativeInterface::QAndroidApplication::context();
|
||||||
const auto displayContext = context.callMethod<QtJniTypes::Context>("createDisplayContext",
|
|
||||||
displayObject.object<QtJniTypes::Display>());
|
|
||||||
|
|
||||||
const auto sizeObj = QtJniTypes::QtDisplayManager::callStaticMethod<QtJniTypes::Size>(
|
const auto sizeObj = QtJniTypes::QtDisplayManager::callStaticMethod<QtJniTypes::Size>(
|
||||||
"getDisplaySize", displayContext,
|
"getDisplaySize", context,
|
||||||
displayObject.object<QtJniTypes::Display>());
|
displayObject.object<QtJniTypes::Display>());
|
||||||
m_size = QSize(sizeObj.callMethod<int>("getWidth"), sizeObj.callMethod<int>("getHeight"));
|
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 auto metrics = resources.callMethod<QtJniTypes::DisplayMetrics>("getDisplayMetrics");
|
||||||
const float xdpi = metrics.getField<float>("xdpi");
|
const float xdpi = metrics.getField<float>("xdpi");
|
||||||
const float ydpi = metrics.getField<float>("ydpi");
|
const float ydpi = metrics.getField<float>("ydpi");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user