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);
|
||||
|
||||
Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
|
||||
? m_activity.getWindowManager().getDefaultDisplay()
|
||||
: m_activity.getDisplay();
|
||||
QtDisplayManager.handleRefreshRateChanged(QtDisplayManager.getRefreshRate(display));
|
||||
QtDisplayManager.updateRefreshRate(m_activity);
|
||||
|
||||
m_layout.getViewTreeObserver().addOnPreDrawListener(() -> {
|
||||
if (!m_inputDelegate.isKeyboardVisible())
|
||||
|
@ -36,7 +36,7 @@ class QtDisplayManager {
|
||||
int availableLeftPixels, int availableTopPixels,
|
||||
int availableWidthPixels, int availableHeightPixels,
|
||||
double XDpi, double YDpi, double scaledDensity,
|
||||
double density, float refreshRate);
|
||||
double density);
|
||||
static native void handleOrientationChanged(int newRotation, int nativeOrientation);
|
||||
static native void handleRefreshRateChanged(float refreshRate);
|
||||
static native void handleUiDarkModeChanged(int newUiMode);
|
||||
@ -64,11 +64,7 @@ class QtDisplayManager {
|
||||
|
||||
@Override
|
||||
public void onDisplayChanged(int displayId) {
|
||||
Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
|
||||
? m_activity.getWindowManager().getDefaultDisplay()
|
||||
: m_activity.getDisplay();
|
||||
float refreshRate = getRefreshRate(display);
|
||||
QtDisplayManager.handleRefreshRateChanged(refreshRate);
|
||||
updateRefreshRate(m_activity);
|
||||
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)
|
||||
{
|
||||
int currentRotation = getDisplayRotation(activity);
|
||||
@ -108,11 +122,6 @@ class QtDisplayManager {
|
||||
return Configuration.ORIENTATION_PORTRAIT;
|
||||
}
|
||||
|
||||
static float getRefreshRate(Display display)
|
||||
{
|
||||
return display != null ? display.getRefreshRate() : 60.0f;
|
||||
}
|
||||
|
||||
void registerDisplayListener()
|
||||
{
|
||||
DisplayManager displayManager =
|
||||
@ -306,7 +315,7 @@ class QtDisplayManager {
|
||||
|
||||
setDisplayMetrics(maxWidth, maxHeight, insetLeft, insetTop,
|
||||
width, height, getXDpi(displayMetrics), getYDpi(displayMetrics),
|
||||
scaledDensity, density, getRefreshRate(display));
|
||||
scaledDensity, density);
|
||||
}
|
||||
|
||||
static float getXDpi(final DisplayMetrics metrics) {
|
||||
|
@ -116,6 +116,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase
|
||||
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
|
||||
QtDisplayManager.setApplicationDisplayMetrics(m_activity, metrics.widthPixels,
|
||||
metrics.heightPixels);
|
||||
QtDisplayManager.updateRefreshRate(m_activity);
|
||||
|
||||
});
|
||||
}
|
||||
|
@ -44,13 +44,12 @@ class QtServiceEmbeddedDelegate implements QtEmbeddedViewInterface, QtNative.App
|
||||
final int insetLeft = 0;
|
||||
final int insetTop = 0;
|
||||
|
||||
final DisplayManager dm = m_service.getSystemService(DisplayManager.class);
|
||||
QtDisplayManager.setDisplayMetrics(
|
||||
maxWidth, maxHeight, insetLeft, insetTop, maxWidth, maxHeight,
|
||||
QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics),
|
||||
metrics.scaledDensity, metrics.density,
|
||||
QtDisplayManager.getRefreshRate(
|
||||
dm.getDisplay(Display.DEFAULT_DISPLAY)));
|
||||
metrics.scaledDensity, metrics.density);
|
||||
|
||||
QtDisplayManager.updateRefreshRate(m_service);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -533,7 +533,7 @@ static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWid
|
||||
jint screenHeightPixels, jint availableLeftPixels,
|
||||
jint availableTopPixels, jint availableWidthPixels,
|
||||
jint availableHeightPixels, jdouble xdpi, jdouble ydpi,
|
||||
jdouble scaledDensity, jdouble density, jfloat refreshRate)
|
||||
jdouble scaledDensity, jdouble density)
|
||||
{
|
||||
Q_UNUSED(availableLeftPixels)
|
||||
Q_UNUSED(availableTopPixels)
|
||||
@ -558,7 +558,6 @@ static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWid
|
||||
} else {
|
||||
m_androidPlatformIntegration->setScreenSizeParameters(physicalSize, screenSize,
|
||||
availableGeometry);
|
||||
m_androidPlatformIntegration->setRefreshRate(refreshRate);
|
||||
}
|
||||
}
|
||||
Q_DECLARE_JNI_NATIVE_METHOD(setDisplayMetrics)
|
||||
|
Loading…
x
Reference in New Issue
Block a user