Android: update density on its own when it's changed
Instead of doing it every time under setDisplayMetrics(). Task-number: QTBUG-132716 Change-Id: I0887c086d7f653b0170e107a86cb0115582bbc89 Reviewed-by: Petri Virkkunen <petri.virkkunen@qt.io>
This commit is contained in:
parent
3305eb10da
commit
3efd1996a3
@ -179,6 +179,9 @@ public class QtActivityBase extends Activity
|
||||
if ((diff & ActivityInfo.CONFIG_LOCALE) != 0)
|
||||
QtNative.updateLocale();
|
||||
|
||||
if ((diff & ActivityInfo.CONFIG_DENSITY) != 0)
|
||||
QtDisplayManager.updateScreenDensity(this);
|
||||
|
||||
m_prevConfig = new Configuration(newConfig);
|
||||
}
|
||||
|
||||
|
@ -146,6 +146,7 @@ class QtActivityDelegate extends QtActivityDelegateBase
|
||||
handleUiModeChange(m_activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK);
|
||||
|
||||
QtDisplayManager.updateRefreshRate(m_activity);
|
||||
QtDisplayManager.updateScreenDensity(m_activity);
|
||||
|
||||
m_layout.getViewTreeObserver().addOnPreDrawListener(() -> {
|
||||
if (!m_inputDelegate.isKeyboardVisible())
|
||||
|
@ -6,6 +6,7 @@ package org.qtproject.qt.android;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Rect;
|
||||
import android.hardware.display.DisplayManager;
|
||||
import android.os.Build;
|
||||
@ -34,14 +35,14 @@ class QtDisplayManager {
|
||||
// screen methods
|
||||
static native void setDisplayMetrics(int screenWidthPixels, int screenHeightPixels,
|
||||
int availableWidthPixels, int availableHeightPixels,
|
||||
double XDpi, double YDpi,
|
||||
double density);
|
||||
double XDpi, double YDpi);
|
||||
static native void handleOrientationChanged(int newRotation, int nativeOrientation);
|
||||
static native void handleRefreshRateChanged(float refreshRate);
|
||||
static native void handleUiDarkModeChanged(int newUiMode);
|
||||
static native void handleScreenAdded(int displayId);
|
||||
static native void handleScreenChanged(int displayId);
|
||||
static native void handleScreenRemoved(int displayId);
|
||||
static native void handleScreenDensityChanged(double density);
|
||||
// screen methods
|
||||
|
||||
private boolean m_isFullScreen = false;
|
||||
@ -92,6 +93,13 @@ class QtDisplayManager {
|
||||
m_previousRotation = rotation;
|
||||
}
|
||||
|
||||
static void updateScreenDensity(Activity activity)
|
||||
{
|
||||
Resources resources = activity == null ? Resources.getSystem() : activity.getResources();
|
||||
double density = resources.getDisplayMetrics().density;
|
||||
QtDisplayManager.handleScreenDensityChanged(density);
|
||||
}
|
||||
|
||||
private static int getNativeOrientation(Activity activity, int rotation)
|
||||
{
|
||||
int orientation = activity.getResources().getConfiguration().orientation;
|
||||
@ -278,13 +286,10 @@ class QtDisplayManager {
|
||||
|
||||
final DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics();
|
||||
|
||||
double density = displayMetrics.density;
|
||||
|
||||
Size displaySize = getDisplaySize(activity, QtDisplayManager.getDisplay(activity));
|
||||
setDisplayMetrics(displaySize.getWidth(), displaySize.getHeight(),
|
||||
width, height,
|
||||
getXDpi(displayMetrics), getYDpi(displayMetrics),
|
||||
density);
|
||||
getXDpi(displayMetrics), getYDpi(displayMetrics));
|
||||
}
|
||||
|
||||
static float getXDpi(final DisplayMetrics metrics) {
|
||||
|
@ -116,7 +116,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase
|
||||
QtDisplayManager.setApplicationDisplayMetrics(m_activity, metrics.widthPixels,
|
||||
metrics.heightPixels);
|
||||
QtDisplayManager.updateRefreshRate(m_activity);
|
||||
|
||||
QtDisplayManager.updateScreenDensity(m_activity);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -44,10 +44,10 @@ class QtServiceEmbeddedDelegate implements QtEmbeddedViewInterface, QtNative.App
|
||||
|
||||
QtDisplayManager.setDisplayMetrics(
|
||||
maxWidth, maxHeight, maxWidth, maxHeight,
|
||||
QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics),
|
||||
metrics.density);
|
||||
QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics));
|
||||
|
||||
QtDisplayManager.updateRefreshRate(m_service);
|
||||
QtDisplayManager.handleScreenDensityChanged(metrics.density);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -568,12 +568,10 @@ static void terminateQt(JNIEnv *env, jclass /*clazz*/)
|
||||
static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/,
|
||||
jint screenWidthPixels, jint screenHeightPixels,
|
||||
jint availableWidthPixels, jint availableHeightPixels,
|
||||
jdouble xdpi, jdouble ydpi,
|
||||
jdouble density)
|
||||
jdouble xdpi, jdouble ydpi)
|
||||
{
|
||||
m_availableWidthPixels = availableWidthPixels;
|
||||
m_availableHeightPixels = availableHeightPixels;
|
||||
m_density = density;
|
||||
|
||||
const QSize screenSize(screenWidthPixels, screenHeightPixels);
|
||||
// available geometry always starts from top left
|
||||
@ -713,6 +711,12 @@ static void handleUiDarkModeChanged(JNIEnv */*env*/, jobject /*thiz*/, jint newU
|
||||
}
|
||||
Q_DECLARE_JNI_NATIVE_METHOD(handleUiDarkModeChanged)
|
||||
|
||||
static void handleScreenDensityChanged(JNIEnv */*env*/, jclass /*cls*/, jdouble density)
|
||||
{
|
||||
m_density = density;
|
||||
}
|
||||
Q_DECLARE_JNI_NATIVE_METHOD(handleScreenDensityChanged)
|
||||
|
||||
static void onActivityResult(JNIEnv */*env*/, jclass /*cls*/,
|
||||
jint requestCode,
|
||||
jint resultCode,
|
||||
@ -795,7 +799,8 @@ static bool registerNatives(QJniEnvironment &env)
|
||||
Q_JNI_NATIVE_METHOD(handleScreenAdded),
|
||||
Q_JNI_NATIVE_METHOD(handleScreenChanged),
|
||||
Q_JNI_NATIVE_METHOD(handleScreenRemoved),
|
||||
Q_JNI_NATIVE_METHOD(handleUiDarkModeChanged)
|
||||
Q_JNI_NATIVE_METHOD(handleUiDarkModeChanged),
|
||||
Q_JNI_NATIVE_METHOD(handleScreenDensityChanged)
|
||||
});
|
||||
|
||||
success = success
|
||||
|
Loading…
x
Reference in New Issue
Block a user