Android: cleanup refresh rate handling between java and c++
Keep refresh rate calculation and handling in one place and one method that various delegates call with a context. Also, don't try to update the refresh rate each time with setDisplayMetrics() beacuse refresh rate updates are done under the display listener's onDisplayChanged(). Task-number: QTBUG-132716 Change-Id: I689c7a1c350695c27efc6d1bcc9c159855736e43 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
2d2b9fea7d
commit
495f7cceb2
@ -145,10 +145,7 @@ class QtActivityDelegate extends QtActivityDelegateBase
|
|||||||
|
|
||||||
handleUiModeChange(m_activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK);
|
handleUiModeChange(m_activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK);
|
||||||
|
|
||||||
Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
|
QtDisplayManager.updateRefreshRate(m_activity);
|
||||||
? m_activity.getWindowManager().getDefaultDisplay()
|
|
||||||
: m_activity.getDisplay();
|
|
||||||
QtDisplayManager.handleRefreshRateChanged(QtDisplayManager.getRefreshRate(display));
|
|
||||||
|
|
||||||
m_layout.getViewTreeObserver().addOnPreDrawListener(() -> {
|
m_layout.getViewTreeObserver().addOnPreDrawListener(() -> {
|
||||||
if (!m_inputDelegate.isKeyboardVisible())
|
if (!m_inputDelegate.isKeyboardVisible())
|
||||||
|
@ -36,7 +36,7 @@ class QtDisplayManager {
|
|||||||
int availableLeftPixels, int availableTopPixels,
|
int availableLeftPixels, int availableTopPixels,
|
||||||
int availableWidthPixels, int availableHeightPixels,
|
int availableWidthPixels, int availableHeightPixels,
|
||||||
double XDpi, double YDpi, double scaledDensity,
|
double XDpi, double YDpi, double scaledDensity,
|
||||||
double density, float refreshRate);
|
double density);
|
||||||
static native void handleOrientationChanged(int newRotation, int nativeOrientation);
|
static native void handleOrientationChanged(int newRotation, int nativeOrientation);
|
||||||
static native void handleRefreshRateChanged(float refreshRate);
|
static native void handleRefreshRateChanged(float refreshRate);
|
||||||
static native void handleUiDarkModeChanged(int newUiMode);
|
static native void handleUiDarkModeChanged(int newUiMode);
|
||||||
@ -64,11 +64,7 @@ class QtDisplayManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisplayChanged(int displayId) {
|
public void onDisplayChanged(int displayId) {
|
||||||
Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
|
updateRefreshRate(m_activity);
|
||||||
? m_activity.getWindowManager().getDefaultDisplay()
|
|
||||||
: m_activity.getDisplay();
|
|
||||||
float refreshRate = getRefreshRate(display);
|
|
||||||
QtDisplayManager.handleRefreshRateChanged(refreshRate);
|
|
||||||
QtDisplayManager.handleScreenChanged(displayId);
|
QtDisplayManager.handleScreenChanged(displayId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +75,24 @@ class QtDisplayManager {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
static void updateRefreshRate(Context context)
|
||||||
|
{
|
||||||
|
Display display;
|
||||||
|
Activity activity = (Activity) context;
|
||||||
|
if (activity != null) {
|
||||||
|
display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
|
||||||
|
? activity.getWindowManager().getDefaultDisplay()
|
||||||
|
: activity.getDisplay();
|
||||||
|
} else {
|
||||||
|
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||||
|
display = dm.getDisplay(Display.DEFAULT_DISPLAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
float refreshRate = display != null ? display.getRefreshRate() : 60.0f;
|
||||||
|
QtDisplayManager.handleRefreshRateChanged(refreshRate);
|
||||||
|
}
|
||||||
|
|
||||||
static void handleOrientationChange(Activity activity)
|
static void handleOrientationChange(Activity activity)
|
||||||
{
|
{
|
||||||
int currentRotation = getDisplayRotation(activity);
|
int currentRotation = getDisplayRotation(activity);
|
||||||
@ -108,11 +122,6 @@ class QtDisplayManager {
|
|||||||
return Configuration.ORIENTATION_PORTRAIT;
|
return Configuration.ORIENTATION_PORTRAIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float getRefreshRate(Display display)
|
|
||||||
{
|
|
||||||
return display != null ? display.getRefreshRate() : 60.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void registerDisplayListener()
|
void registerDisplayListener()
|
||||||
{
|
{
|
||||||
DisplayManager displayManager =
|
DisplayManager displayManager =
|
||||||
@ -306,7 +315,7 @@ class QtDisplayManager {
|
|||||||
|
|
||||||
setDisplayMetrics(maxWidth, maxHeight, insetLeft, insetTop,
|
setDisplayMetrics(maxWidth, maxHeight, insetLeft, insetTop,
|
||||||
width, height, getXDpi(displayMetrics), getYDpi(displayMetrics),
|
width, height, getXDpi(displayMetrics), getYDpi(displayMetrics),
|
||||||
scaledDensity, density, getRefreshRate(display));
|
scaledDensity, density);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float getXDpi(final DisplayMetrics metrics) {
|
static float getXDpi(final DisplayMetrics metrics) {
|
||||||
|
@ -116,6 +116,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase
|
|||||||
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
|
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
|
||||||
QtDisplayManager.setApplicationDisplayMetrics(m_activity, metrics.widthPixels,
|
QtDisplayManager.setApplicationDisplayMetrics(m_activity, metrics.widthPixels,
|
||||||
metrics.heightPixels);
|
metrics.heightPixels);
|
||||||
|
QtDisplayManager.updateRefreshRate(m_activity);
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -44,13 +44,12 @@ class QtServiceEmbeddedDelegate implements QtEmbeddedViewInterface, QtNative.App
|
|||||||
final int insetLeft = 0;
|
final int insetLeft = 0;
|
||||||
final int insetTop = 0;
|
final int insetTop = 0;
|
||||||
|
|
||||||
final DisplayManager dm = m_service.getSystemService(DisplayManager.class);
|
|
||||||
QtDisplayManager.setDisplayMetrics(
|
QtDisplayManager.setDisplayMetrics(
|
||||||
maxWidth, maxHeight, insetLeft, insetTop, maxWidth, maxHeight,
|
maxWidth, maxHeight, insetLeft, insetTop, maxWidth, maxHeight,
|
||||||
QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics),
|
QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics),
|
||||||
metrics.scaledDensity, metrics.density,
|
metrics.scaledDensity, metrics.density);
|
||||||
QtDisplayManager.getRefreshRate(
|
|
||||||
dm.getDisplay(Display.DEFAULT_DISPLAY)));
|
QtDisplayManager.updateRefreshRate(m_service);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -533,7 +533,7 @@ static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWid
|
|||||||
jint screenHeightPixels, jint availableLeftPixels,
|
jint screenHeightPixels, jint availableLeftPixels,
|
||||||
jint availableTopPixels, jint availableWidthPixels,
|
jint availableTopPixels, jint availableWidthPixels,
|
||||||
jint availableHeightPixels, jdouble xdpi, jdouble ydpi,
|
jint availableHeightPixels, jdouble xdpi, jdouble ydpi,
|
||||||
jdouble scaledDensity, jdouble density, jfloat refreshRate)
|
jdouble scaledDensity, jdouble density)
|
||||||
{
|
{
|
||||||
Q_UNUSED(availableLeftPixels)
|
Q_UNUSED(availableLeftPixels)
|
||||||
Q_UNUSED(availableTopPixels)
|
Q_UNUSED(availableTopPixels)
|
||||||
@ -558,7 +558,6 @@ static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWid
|
|||||||
} else {
|
} else {
|
||||||
m_androidPlatformIntegration->setScreenSizeParameters(physicalSize, screenSize,
|
m_androidPlatformIntegration->setScreenSizeParameters(physicalSize, screenSize,
|
||||||
availableGeometry);
|
availableGeometry);
|
||||||
m_androidPlatformIntegration->setRefreshRate(refreshRate);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Q_DECLARE_JNI_NATIVE_METHOD(setDisplayMetrics)
|
Q_DECLARE_JNI_NATIVE_METHOD(setDisplayMetrics)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user