From 43102fb55fc12471c1b12d11a993dda4e0ba2d1f Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Sun, 19 Nov 2023 00:53:47 +0200 Subject: [PATCH] Android: start native app from QtActivityDelegate instead of QtLayout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Starting the native application is not the responsibility of QtLayout instead it makes more sense to be done under QtActivityDelegate so move that logic there and avoid keeping its runnable inside the QtLayout. Task-number: QTBUG-118077 Change-Id: I4869cb5aa741289ed0e9ccaa1cf2ae42c9dd4791 Reviewed-by: Tinja Paavoseppä --- .../qt/android/QtActivityDelegate.java | 24 ++++++++++--------- .../org/qtproject/qt/android/QtLayout.java | 12 ++-------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java index 510120ee3c..d157cfdf9c 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -16,6 +16,7 @@ import android.os.Build; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; +import android.view.ViewTreeObserver; import android.view.animation.AccelerateInterpolator; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; @@ -132,20 +133,21 @@ public class QtActivityDelegate if (m_surfaces != null) return; - Runnable startApplication = () -> { - try { - QtNative.startApplication(appParams, mainLib); - } catch (Exception e) { - e.printStackTrace(); - m_activity.finish(); - } - }; - initMembers(startApplication); + initMembers(); + + m_layout.getViewTreeObserver().addOnGlobalLayoutListener( + new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + QtNative.startApplication(appParams, mainLib); + m_layout.getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + }); } - private void initMembers(Runnable startApplicationRunnable) + private void initMembers() { - m_layout = new QtLayout(m_activity, startApplicationRunnable); + m_layout = new QtLayout(m_activity); m_displayManager.registerDisplayListener(m_activity, m_layout); diff --git a/src/android/jar/src/org/qtproject/qt/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt/android/QtLayout.java index 93b5b20c9f..16750aad89 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtLayout.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtLayout.java @@ -12,8 +12,6 @@ import android.view.ViewGroup; public class QtLayout extends ViewGroup { - private Runnable m_startApplicationRunnable; - private int m_activityDisplayRotation = -1; private int m_ownDisplayRotation = -1; private int m_nativeOrientation = -1; @@ -33,10 +31,9 @@ public class QtLayout extends ViewGroup return m_ownDisplayRotation; } - public QtLayout(Context context, Runnable startRunnable) + public QtLayout(Context context) { super(context); - m_startApplicationRunnable = startRunnable; } public QtLayout(Context context, AttributeSet attrs) @@ -50,7 +47,7 @@ public class QtLayout extends ViewGroup } @Override - protected void onSizeChanged (int w, int h, int oldw, int oldh) + protected void onSizeChanged(int w, int h, int oldw, int oldh) { Activity activity = (Activity)getContext(); if (activity == null) @@ -68,11 +65,6 @@ public class QtLayout extends ViewGroup QtDisplayManager.handleOrientationChanged(newRotation, m_nativeOrientation); } m_ownDisplayRotation = newRotation; - - if (m_startApplicationRunnable != null) { - m_startApplicationRunnable.run(); - m_startApplicationRunnable = null; - } } @Override