Android: rename and move updateWindow native method to QtWindow

That method is related to window management so move it to
QtWindow where it belongs, and any related C++ code from
androidjnimain.cpp to QAndroidPlatformWindow.

Rename the method to updateWindows since it's operating on all
windows and not one window.

Change-Id: I91e729b0749b6a8168b7126f9140d79c542b23d3
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Assam Boudjelthia 2024-11-28 18:30:47 +02:00
parent 10805e7d8a
commit 5c37d3f06b
7 changed files with 33 additions and 28 deletions

View File

@ -143,7 +143,7 @@ public class QtActivityBase extends Activity
QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive);
if (QtNative.getStateDetails().isStarted) {
m_delegate.displayManager().registerDisplayListener();
QtNative.updateWindow();
QtWindow.updateWindows();
// Suspending the app clears the immersive mode, so we need to set it again.
m_delegate.displayManager().updateFullScreen();
}

View File

@ -90,7 +90,7 @@ class QtActivityDelegate extends QtActivityDelegateBase
if (m_layout != null) {
m_displayManager.setSystemUiVisibility(systemUiVisibility);
m_layout.requestLayout();
QtNative.updateWindow();
QtWindow.updateWindows();
}
});
}

View File

@ -42,7 +42,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase
public void onActivityResumed(Activity activity) {
if (m_activity == activity && m_stateDetails.isStarted) {
QtNative.setApplicationState(ApplicationActive);
QtNative.updateWindow();
QtWindow.updateWindows();
}
}

View File

@ -437,10 +437,6 @@ public class QtNative
static native boolean updateNativeActivity();
// application methods
// window methods
static native void updateWindow();
// window methods
// application methods
static native void updateApplicationState(int state);
static native void updateLocale();

View File

@ -26,6 +26,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface {
private static native void setSurface(int windowId, Surface surface);
static native void windowFocusChanged(boolean hasFocus, int id);
static native void updateWindows();
QtWindow(Context context, boolean isForeignWindow, QtWindow parentWindow,
QtInputConnection.QtInputConnectionListener listener)

View File

@ -581,26 +581,6 @@ static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWid
}
Q_DECLARE_JNI_NATIVE_METHOD(setDisplayMetrics)
static void updateWindow(JNIEnv */*env*/, jobject /*thiz*/)
{
if (!m_androidPlatformIntegration)
return;
if (QGuiApplication::instance() != nullptr) {
const auto tlw = QGuiApplication::topLevelWindows();
for (QWindow *w : tlw) {
// Skip non-platform windows, e.g., offscreen windows.
if (!w->handle())
continue;
QRect availableGeometry = w->screen()->availableGeometry();
if (w->geometry().width() > 0 && w->geometry().height() > 0 && availableGeometry.width() > 0 && availableGeometry.height() > 0)
QWindowSystemInterface::handleExposeEvent(w, QRegion(QRect(QPoint(), w->geometry().size())));
}
}
}
static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state)
{
QMutexLocker lock(&m_platformMutex);
@ -745,7 +725,6 @@ static JNINativeMethod methods[] = {
{ "quitQtCoreApplication", "()V", (void *)quitQtCoreApplication },
{ "terminateQt", "()V", (void *)terminateQt },
{ "waitForServiceSetup", "()V", (void *)waitForServiceSetup },
{ "updateWindow", "()V", (void *)updateWindow },
{ "updateApplicationState", "(I)V", (void *)updateApplicationState },
{ "onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult },
{ "onNewIntent", "(Landroid/content/Intent;)V", (void *)onNewIntent },

View File

@ -382,6 +382,34 @@ void QAndroidPlatformWindow::windowFocusChanged(JNIEnv *env, jobject object,
}
}
static void updateWindows(JNIEnv *env, jobject object)
{
Q_UNUSED(env)
Q_UNUSED(object)
if (QGuiApplication::instance() != nullptr) {
const auto tlw = QGuiApplication::topLevelWindows();
for (QWindow *w : tlw) {
// Skip non-platform windows, e.g., offscreen windows.
if (!w->handle())
continue;
const QRect availableGeometry = w->screen()->availableGeometry();
const QRect geometry = w->geometry();
const bool isPositiveGeometry = (geometry.width() > 0 && geometry.height() > 0);
const bool isPositiveAvailableGeometry =
(availableGeometry.width() > 0 && availableGeometry.height() > 0);
if (isPositiveGeometry && isPositiveAvailableGeometry) {
const QRegion region = QRegion(QRect(QPoint(), w->geometry().size()));
QWindowSystemInterface::handleExposeEvent(w, region);
}
}
}
}
Q_DECLARE_JNI_NATIVE_METHOD(updateWindows)
/*
Due to calls originating from Android, it is possible for native methods to
try to manipulate any given instance of QAndroidPlatformWindow when it is
@ -398,6 +426,7 @@ bool QAndroidPlatformWindow::registerNatives(QJniEnvironment &env)
{
if (!env.registerNativeMethods(QtJniTypes::Traits<QtJniTypes::QtWindow>::className(),
{
Q_JNI_NATIVE_METHOD(updateWindows),
Q_JNI_NATIVE_SCOPED_METHOD(setSurface, QAndroidPlatformWindow),
Q_JNI_NATIVE_SCOPED_METHOD(windowFocusChanged, QAndroidPlatformWindow)
})) {