diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-11-29 14:41:40 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-11-30 17:26:27 +0200 |
commit | 3e35db699798f9fe38de911632f5d4180dcc0c6e (patch) | |
tree | d8e8a1d15cb121886572e12b0d3a6ce98bacf1f1 | |
parent | 5c159905347efb487e5f1d428405d027c9c89830 (diff) |
Android: guard against null objects
And minor warning fixes for unused imports.
Task-number: QTBUG-118077
Change-Id: I8296ae019da9d40692687e49ac926f96af901870
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
5 files changed, 43 insertions, 24 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/CursorHandle.java b/src/android/jar/src/org/qtproject/qt/android/CursorHandle.java index b7124a059f..7e601c0551 100644 --- a/src/android/jar/src/org/qtproject/qt/android/CursorHandle.java +++ b/src/android/jar/src/org/qtproject/qt/android/CursorHandle.java @@ -9,6 +9,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; +import android.util.Log; import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; @@ -42,7 +43,7 @@ class CursorView extends ImageView switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: { m_offsetX = ev.getRawX(); - m_offsetY = ev.getRawY() + getHeight() / 2; + m_offsetY = ev.getRawY() + (float) getHeight() / 2; m_pressed = true; break; } @@ -67,6 +68,7 @@ class CursorView extends ImageView // Helper class that manages a cursor or selection handle class CursorHandle implements ViewTreeObserver.OnPreDrawListener { + private static final String QtTag = "QtCursorHandle"; private final View m_layout; private CursorView m_cursorView = null; private PopupWindow m_popup = null; @@ -109,8 +111,13 @@ class CursorHandle implements ViewTreeObserver.OnPreDrawListener m_popup.setSplitTouchEnabled(true); m_popup.setClippingEnabled(false); m_popup.setContentView(m_cursorView); - m_popup.setWidth(drawable.getIntrinsicWidth()); - m_popup.setHeight(drawable.getIntrinsicHeight()); + if (drawable != null) { + m_popup.setWidth(drawable.getIntrinsicWidth()); + m_popup.setHeight(drawable.getIntrinsicHeight()); + } else { + Log.w(QtTag, "initOverlay(): cannot get width/height for popup " + + "from null drawable for attribute " + m_attr); + } m_layout.getViewTreeObserver().addOnPreDrawListener(this); } diff --git a/src/android/jar/src/org/qtproject/qt/android/EditPopupMenu.java b/src/android/jar/src/org/qtproject/qt/android/EditPopupMenu.java index 3349f32004..25be522c48 100644 --- a/src/android/jar/src/org/qtproject/qt/android/EditPopupMenu.java +++ b/src/android/jar/src/org/qtproject/qt/android/EditPopupMenu.java @@ -4,7 +4,6 @@ package org.qtproject.qt.android; -import android.R; import android.app.Activity; import android.content.Context; import android.graphics.Point; @@ -136,16 +135,16 @@ class EditPopupMenu implements ViewTreeObserver.OnPreDrawListener, View.OnLayout @Override public void contextButtonClicked(int buttonId) { switch (buttonId) { - case R.string.cut: + case android.R.string.cut: QtNativeInputConnection.cut(); break; - case R.string.copy: + case android.R.string.copy: QtNativeInputConnection.copy(); break; - case R.string.paste: + case android.R.string.paste: QtNativeInputConnection.paste(); break; - case R.string.selectAll: + case android.R.string.selectAll: QtNativeInputConnection.selectAll(); break; } 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 35cc259126..5ebce6dc35 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.Display; import android.view.ViewTreeObserver; import android.view.animation.AccelerateInterpolator; import android.view.animation.AlphaAnimation; @@ -29,7 +30,6 @@ import android.view.WindowInsetsController; import android.widget.ImageView; import android.widget.PopupMenu; -import java.util.ArrayList; import java.util.HashMap; class QtActivityDelegate @@ -187,10 +187,10 @@ class QtActivityDelegate handleUiModeChange(m_activity.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK); - float refreshRate = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) - ? m_activity.getWindowManager().getDefaultDisplay().getRefreshRate() - : m_activity.getDisplay().getRefreshRate(); - QtDisplayManager.handleRefreshRateChanged(refreshRate); + Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) + ? m_activity.getWindowManager().getDefaultDisplay() + : m_activity.getDisplay(); + QtDisplayManager.handleRefreshRateChanged(QtDisplayManager.getRefreshRate(display)); m_layout.getViewTreeObserver().addOnPreDrawListener(() -> { if (!m_inputDelegate.isKeyboardVisible()) @@ -448,10 +448,16 @@ class QtActivityDelegate QtNative.runAction(() -> { if (m_surfaces.containsKey(id)) { QtSurface surface = m_surfaces.get(id); - surface.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y)); + if (surface != null) + surface.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y)); + else + Log.e(QtNative.QtTAG, "setSurfaceGeometry(): surface is null!"); } else if (m_nativeViews.containsKey(id)) { View view = m_nativeViews.get(id); - view.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y)); + if (view != null) + view.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y)); + else + Log.e(QtNative.QtTAG, "setSurfaceGeometry(): view is null!"); } else { Log.e(QtNative.QtTAG, "Surface " + id + " not found!"); } diff --git a/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java b/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java index 267020ded6..b5347596f8 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtDisplayManager.java @@ -73,7 +73,7 @@ class QtDisplayManager { Display display = (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) ? m_activity.getWindowManager().getDefaultDisplay() : m_activity.getDisplay(); - int rotation = display.getRotation(); + int rotation = display != null ? display.getRotation() : Surface.ROTATION_0; layout.setActivityDisplayRotation(rotation); // Process orientation change only if it comes after the size // change, or if the screen is rotated by 180 degrees. @@ -83,7 +83,7 @@ class QtDisplayManager { getNativeOrientation(m_activity, rotation)); } - float refreshRate = display.getRefreshRate(); + float refreshRate = getRefreshRate(display); QtDisplayManager.handleRefreshRateChanged(refreshRate); QtDisplayManager.handleScreenChanged(displayId); } @@ -95,6 +95,11 @@ class QtDisplayManager { }; } + static float getRefreshRate(Display display) + { + return display != null ? display.getRefreshRate() : 60.0f; + } + public void registerDisplayListener() { DisplayManager displayManager = @@ -274,14 +279,9 @@ class QtDisplayManager { double density = displayMetrics.density; double scaledDensity = displayMetrics.scaledDensity; - float refreshRate = 60.0f; - if (display != null) { - refreshRate = display.getRefreshRate(); - } - setDisplayMetrics(maxWidth, maxHeight, insetLeft, insetTop, width, height, xdpi, ydpi, - scaledDensity, density, refreshRate); + scaledDensity, density, getRefreshRate(display)); } public static int getDisplayRotation(Activity activity) { diff --git a/src/android/jar/src/org/qtproject/qt/android/QtMessageDialogHelper.java b/src/android/jar/src/org/qtproject/qt/android/QtMessageDialogHelper.java index dbfad8450b..1c02a01898 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtMessageDialogHelper.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtMessageDialogHelper.java @@ -13,8 +13,10 @@ import android.graphics.drawable.Drawable; import android.text.ClipboardManager; import android.text.Html; import android.text.Spanned; +import android.util.Log; import android.util.TypedValue; import android.view.View; +import android.view.Window; import android.widget.Button; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -145,7 +147,11 @@ class QtMessageDialogHelper m_dialog.dismiss(); m_dialog = new AlertDialog.Builder(m_activity).create(); - m_theme = m_dialog.getWindow().getContext().getTheme(); + Window window = m_dialog.getWindow(); + if (window != null) + m_theme = window.getContext().getTheme(); + else + Log.w(QtTAG, "show(): cannot set theme from null window!"); if (m_title != null) m_dialog.setTitle(m_title); @@ -327,6 +333,7 @@ class QtMessageDialogHelper m_handler = 0; } + private static final String QtTAG = "QtMessageDialogHelper"; private final Activity m_activity; private int m_standardIcon = 0; private Spanned m_title, m_text, m_informativeText, m_detailedText; |