summaryrefslogtreecommitdiffstats
path: root/src/android/jar/src/org/qtproject
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/jar/src/org/qtproject')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java101
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtMessageDialogHelper.java12
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java189
3 files changed, 20 insertions, 282 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index 5bf1b2ff4b..e59ac39d9f 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -106,111 +106,34 @@ public class QtLayout extends ViewGroup
final WindowManager windowManager = activity.getWindowManager();
Display display;
- int appWidth = 0;
- int appHeight = 0;
-
- int insetLeft = 0;
- int insetTop = 0;
+ final WindowInsets rootInsets = getRootWindowInsets();
int maxWidth = 0;
int maxHeight = 0;
- double xdpi = 0;
- double ydpi = 0;
- double scaledDensity = 0;
- double density = 0;
-
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
- display = windowManager.getDefaultDisplay();
-
- final DisplayMetrics appMetrics = new DisplayMetrics();
- display.getMetrics(appMetrics);
-
- final WindowInsets rootInsets = getRootWindowInsets();
-
- insetLeft = rootInsets.getStableInsetLeft();
- insetTop = rootInsets.getStableInsetTop();
-
- int insetsWidth = rootInsets.getStableInsetRight() + rootInsets.getStableInsetLeft();
- int insetsHeight = rootInsets.getStableInsetTop() + rootInsets.getStableInsetBottom();
+ display = windowManager.getDefaultDisplay();
- appWidth = appMetrics.widthPixels - insetsWidth;
- appHeight = appMetrics.heightPixels - insetsHeight;
-
- final DisplayMetrics maxMetrics = new DisplayMetrics();
- display.getRealMetrics(maxMetrics);
-
- maxWidth = maxMetrics.widthPixels;
- maxHeight = maxMetrics.heightPixels;
-
- density = appMetrics.density;
- xdpi = appMetrics.xdpi;
- ydpi = appMetrics.ydpi;
- scaledDensity = appMetrics.scaledDensity;
+ final DisplayMetrics maxMetrics = new DisplayMetrics();
+ display.getRealMetrics(maxMetrics);
+ maxWidth = maxMetrics.widthPixels;
+ maxHeight = maxMetrics.heightPixels;
} else {
- // after API 30 use getCurrentWindowMetrics for application metrics
- // getMaximumWindowMetrics for the screen metrics
- // resource configuration for density as best practice
- // and the resource display metrics for the rest
display = activity.getDisplay();
- final WindowMetrics appMetrics = windowManager.getCurrentWindowMetrics();
final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics();
-
- final WindowInsets windowInsets = appMetrics.getWindowInsets();
- Insets insets = windowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()
- | WindowInsets.Type.displayCutout());
-
- insetLeft = insets.left;
- insetTop = insets.top;
-
- int insetsWidth = insets.right + insets.left;
- int insetsHeight = insets.top + insets.bottom;
-
- if (h == maxMetrics.getBounds().height()) {
- //when h == maxheight the system is ignoring insets
- insetsWidth = insetsHeight = insetLeft = insetTop = 0;
- }
-
- appWidth = appMetrics.getBounds().width() - insetsWidth;
- appHeight = appMetrics.getBounds().height() - insetsHeight;
-
maxWidth = maxMetrics.getBounds().width();
maxHeight = maxMetrics.getBounds().height();
-
- final Resources resources = activity.getResources();
- final Configuration configuration = resources.getConfiguration();
- density = configuration.densityDpi / (float) DisplayMetrics.DENSITY_DEFAULT;
-
- final DisplayMetrics displayMetrics = resources.getDisplayMetrics();
- xdpi = displayMetrics.xdpi;
- ydpi = displayMetrics.ydpi;
- density = displayMetrics.density;
- scaledDensity = displayMetrics.scaledDensity;
}
+ final DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics();
+ double xdpi = displayMetrics.xdpi;
+ double ydpi = displayMetrics.ydpi;
+ double density = displayMetrics.density;
+ double scaledDensity = displayMetrics.scaledDensity;
float refreshRate = display.getRefreshRate();
- if ((appWidth > appHeight) != (w > h)) {
- // This is an intermediate state during display rotation.
- // The new size is still reported for old orientation, while
- // realMetrics contain sizes for new orientation. Setting
- // such parameters will produce inconsistent results, so
- // we just skip them.
- // We will have another onSizeChanged() with normal values
- // a bit later.
- return;
- }
-
- final int flag =
- activity.getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN;
- if (flag == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
- // immersive mode uses the whole screen
- appWidth = maxWidth;
- appHeight = maxHeight;
- }
-
- QtNative.setApplicationDisplayMetrics(maxWidth, maxHeight, appWidth, appHeight,
+ QtNative.setApplicationDisplayMetrics(maxWidth, maxHeight, w, h,
xdpi,ydpi,scaledDensity, density,
refreshRate);
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtMessageDialogHelper.java b/src/android/jar/src/org/qtproject/qt5/android/QtMessageDialogHelper.java
index a3bbff4e1a..e84c5d75de 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtMessageDialogHelper.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtMessageDialogHelper.java
@@ -109,7 +109,8 @@ public class QtMessageDialogHelper
try {
TypedValue typedValue = new TypedValue();
m_theme.resolveAttribute(android.R.attr.alertDialogIcon, typedValue, true);
- return m_activity.getResources().getDrawable(typedValue.resourceId);
+ return m_activity.getResources().getDrawable(typedValue.resourceId,
+ m_activity.getTheme());
} catch (Exception e) {
e.printStackTrace();
}
@@ -119,7 +120,8 @@ public class QtMessageDialogHelper
{
case 1: // Information
try {
- return m_activity.getResources().getDrawable(android.R.drawable.ic_dialog_info);
+ return m_activity.getResources().getDrawable(android.R.drawable.ic_dialog_info,
+ m_activity.getTheme());
} catch (Exception e) {
e.printStackTrace();
}
@@ -133,14 +135,16 @@ public class QtMessageDialogHelper
// break;
case 3: // Critical
try {
- return m_activity.getResources().getDrawable(android.R.drawable.ic_dialog_alert);
+ return m_activity.getResources().getDrawable(android.R.drawable.ic_dialog_alert,
+ m_activity.getTheme());
} catch (Exception e) {
e.printStackTrace();
}
break;
case 4: // Question
try {
- return m_activity.getResources().getDrawable(android.R.drawable.ic_menu_help);
+ return m_activity.getResources().getDrawable(android.R.drawable.ic_menu_help,
+ m_activity.getTheme());
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 6cd091aab6..41ba50e964 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -45,8 +45,6 @@ import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Objects;
import java.util.concurrent.Semaphore;
-import java.io.IOException;
-import java.util.HashMap;
import android.app.Activity;
import android.app.Service;
@@ -115,9 +113,6 @@ public class QtNative
private static Boolean m_tabletEventSupported = null;
private static boolean m_usePrimaryClip = false;
public static QtThread m_qtThread = new QtThread();
- private static HashMap<String, Uri> m_cachedUris = new HashMap<String, Uri>();
- private static ArrayList<String> m_knownDirs = new ArrayList<String>();
- private static final String NoPermissionErrorMessage = "No permissions to open Uri";
private static final Runnable runPendingCppRunnablesRunnable = new Runnable() {
@Override
@@ -244,190 +239,6 @@ public class QtNative
}
}
- public static int openFdForContentUrl(Context context, String contentUrl, String openMode)
- {
- Uri uri = m_cachedUris.get(contentUrl);
- if (uri == null)
- uri = getUriWithValidPermission(context, contentUrl, openMode);
- int error = -1;
-
- if (uri == null) {
- Log.e(QtTAG, "openFdForContentUrl(): " + NoPermissionErrorMessage);
- return error;
- }
-
- try {
- ContentResolver resolver = context.getContentResolver();
- ParcelFileDescriptor fdDesc = resolver.openFileDescriptor(uri, openMode);
- return fdDesc.detachFd();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- Log.e(QtTAG, "openFdForContentUrl(): Invalid Uri");
- e.printStackTrace();
- } catch (SecurityException e) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- }
- return error;
- }
-
- public static long getSize(Context context, String contentUrl)
- {
- long size = -1;
- Uri uri = m_cachedUris.get(contentUrl);
- if (uri == null)
- uri = getUriWithValidPermission(context, contentUrl, "r");
-
- if (uri == null) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- return size;
- } else if (!m_cachedUris.containsKey(contentUrl)) {
- m_cachedUris.put(contentUrl, uri);
- }
-
- try {
- ContentResolver resolver = context.getContentResolver();
- Cursor cur = resolver.query(uri, new String[] { DocumentsContract.Document.COLUMN_SIZE }, null, null, null);
- if (cur != null) {
- if (cur.moveToFirst())
- size = cur.getLong(0);
- cur.close();
- }
- return size;
- } catch (IllegalArgumentException e) {
- Log.e(QtTAG, "getSize(): Invalid Uri");
- e.printStackTrace();
- } catch (UnsupportedOperationException e) {
- Log.e(QtTAG, "getSize(): Unsupported operation for given Uri");
- e.printStackTrace();
- } catch (SecurityException e) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- }
- return size;
- }
-
- public static boolean checkFileExists(Context context, String contentUrl)
- {
- boolean exists = false;
- Uri uri = m_cachedUris.get(contentUrl);
- if (uri == null)
- uri = getUriWithValidPermission(context, contentUrl, "r");
- if (uri == null) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- return exists;
- } else {
- if (!m_cachedUris.containsKey(contentUrl))
- m_cachedUris.put(contentUrl, uri);
- }
-
- try {
- ContentResolver resolver = context.getContentResolver();
- Cursor cur = resolver.query(uri, null, null, null, null);
- if (cur != null) {
- exists = true;
- cur.close();
- }
- return exists;
- } catch (IllegalArgumentException e) {
- Log.e(QtTAG, "checkFileExists(): Invalid Uri");
- e.printStackTrace();
- } catch (UnsupportedOperationException e) {
- Log.e(QtTAG, "checkFileExists(): Unsupported operation for given Uri");
- e.printStackTrace();
- } catch (SecurityException e) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- }
- return exists;
- }
-
- public static boolean checkIfWritable(Context context, String contentUrl)
- {
- return getUriWithValidPermission(context, contentUrl, "w") != null;
- }
-
- public static boolean checkIfDir(Context context, String contentUrl)
- {
- boolean isDir = false;
- Uri uri = m_cachedUris.get(contentUrl);
- if (m_knownDirs.contains(contentUrl))
- return true;
- if (uri == null) {
- uri = getUriWithValidPermission(context, contentUrl, "r");
- }
- if (uri == null) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- return isDir;
- } else {
- if (!m_cachedUris.containsKey(contentUrl))
- m_cachedUris.put(contentUrl, uri);
- }
-
- try {
- final List<String> paths = uri.getPathSegments();
- // getTreeDocumentId will throw an exception if it is not a directory so check manually
- if (!paths.get(0).equals("tree"))
- return false;
- ContentResolver resolver = context.getContentResolver();
- Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri, DocumentsContract.getTreeDocumentId(uri));
- if (!docUri.toString().startsWith(uri.toString()))
- return false;
- Cursor cur = resolver.query(docUri, new String[] { DocumentsContract.Document.COLUMN_MIME_TYPE }, null, null, null);
- if (cur != null) {
- if (cur.moveToFirst()) {
- final String dirStr = new String(DocumentsContract.Document.MIME_TYPE_DIR);
- isDir = cur.getString(0).equals(dirStr);
- if (isDir)
- m_knownDirs.add(contentUrl);
- }
- cur.close();
- }
- return isDir;
- } catch (IllegalArgumentException e) {
- Log.e(QtTAG, "checkIfDir(): Invalid Uri");
- e.printStackTrace();
- } catch (UnsupportedOperationException e) {
- Log.e(QtTAG, "checkIfDir(): Unsupported operation for given Uri");
- e.printStackTrace();
- } catch (SecurityException e) {
- Log.e(QtTAG, NoPermissionErrorMessage);
- }
- return false;
- }
- public static String[] listContentsFromTreeUri(Context context, String contentUrl)
- {
- Uri treeUri = Uri.parse(contentUrl);
- final ArrayList<String> results = new ArrayList<String>();
- if (treeUri == null) {
- Log.e(QtTAG, "listContentsFromTreeUri(): Invalid uri");
- return results.toArray(new String[results.size()]);
- }
- final ContentResolver resolver = context.getContentResolver();
- final Uri docUri = DocumentsContract.buildDocumentUriUsingTree(treeUri,
- DocumentsContract.getTreeDocumentId(treeUri));
- final Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(docUri,
- DocumentsContract.getDocumentId(docUri));
- Cursor c = null;
- final String dirStr = new String(DocumentsContract.Document.MIME_TYPE_DIR);
- try {
- c = resolver.query(childrenUri, new String[] {
- DocumentsContract.Document.COLUMN_DOCUMENT_ID, DocumentsContract.Document.COLUMN_DISPLAY_NAME, DocumentsContract.Document.COLUMN_MIME_TYPE }, null, null, null);
- while (c.moveToNext()) {
- final String fileString = c.getString(1);
- if (!m_cachedUris.containsKey(contentUrl + "/" + fileString)) {
- m_cachedUris.put(contentUrl + "/" + fileString,
- DocumentsContract.buildDocumentUriUsingTree(treeUri, c.getString(0)));
- }
- results.add(fileString);
- if (c.getString(2).equals(dirStr))
- m_knownDirs.add(contentUrl + "/" + fileString);
- }
- c.close();
- } catch (Exception e) {
- Log.w(QtTAG, "Failed query: " + e);
- return results.toArray(new String[results.size()]);
- }
- return results.toArray(new String[results.size()]);
- }
// this method loads full path libs
public static void loadQtLibraries(final ArrayList<String> libraries)
{