summaryrefslogtreecommitdiffstats
path: root/src/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/android')
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java4
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java42
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java5
-rw-r--r--src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java4
-rw-r--r--src/android/templates/AndroidManifest.xml4
-rw-r--r--src/android/templates/build.gradle5
6 files changed, 36 insertions, 28 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index 9f7c040c17..184956d8ef 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -894,11 +894,11 @@ public class QtActivityDelegate
m_splashScreen.startAnimation(fadeOut);
}
- public void notifyAccessibilityLocationChange()
+ public void notifyAccessibilityLocationChange(int viewId)
{
if (m_accessibilityDelegate == null)
return;
- m_accessibilityDelegate.notifyLocationChange();
+ m_accessibilityDelegate.notifyLocationChange(viewId);
}
public void notifyObjectHide(int viewId, int parentId)
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 b077014b81..e019797cf6 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -117,6 +117,7 @@ public class QtNative
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
@@ -194,11 +195,10 @@ public class QtNative
return iterUri;
}
- // Android 6 and earlier could still manage to open the file so we can return the
- // parsed uri here
- if (Build.VERSION.SDK_INT < 24)
- return parsedUri;
- return null;
+ // if we only have transient permissions on uri all the above will fail,
+ // but we will be able to read the file anyway, so continue with uri here anyway
+ // and check for SecurityExceptions later
+ return parsedUri;
} catch (SecurityException e) {
e.printStackTrace();
return null;
@@ -245,7 +245,7 @@ public class QtNative
int error = -1;
if (uri == null) {
- Log.e(QtTAG, "openFdForContentUrl(): No permissions to open Uri");
+ Log.e(QtTAG, "openFdForContentUrl(): " + NoPermissionErrorMessage);
return error;
}
@@ -255,12 +255,13 @@ public class QtNative
return fdDesc.detachFd();
} catch (FileNotFoundException e) {
e.printStackTrace();
- return error;
} catch (IllegalArgumentException e) {
Log.e(QtTAG, "openFdForContentUrl(): Invalid Uri");
e.printStackTrace();
- return error;
+ } catch (SecurityException e) {
+ Log.e(QtTAG, NoPermissionErrorMessage);
}
+ return error;
}
public static long getSize(Context context, String contentUrl)
@@ -271,7 +272,7 @@ public class QtNative
uri = getUriWithValidPermission(context, contentUrl, "r");
if (uri == null) {
- Log.e(QtTAG, "getSize(): No permissions to open Uri");
+ Log.e(QtTAG, NoPermissionErrorMessage);
return size;
} else if (!m_cachedUris.containsKey(contentUrl)) {
m_cachedUris.put(contentUrl, uri);
@@ -289,12 +290,13 @@ public class QtNative
} catch (IllegalArgumentException e) {
Log.e(QtTAG, "getSize(): Invalid Uri");
e.printStackTrace();
- return size;
} catch (UnsupportedOperationException e) {
Log.e(QtTAG, "getSize(): Unsupported operation for given Uri");
e.printStackTrace();
- return size;
+ } catch (SecurityException e) {
+ Log.e(QtTAG, NoPermissionErrorMessage);
}
+ return size;
}
public static boolean checkFileExists(Context context, String contentUrl)
@@ -304,7 +306,7 @@ public class QtNative
if (uri == null)
uri = getUriWithValidPermission(context, contentUrl, "r");
if (uri == null) {
- Log.e(QtTAG, "checkFileExists(): No permissions to open Uri");
+ Log.e(QtTAG, NoPermissionErrorMessage);
return exists;
} else {
if (!m_cachedUris.containsKey(contentUrl))
@@ -322,12 +324,13 @@ public class QtNative
} catch (IllegalArgumentException e) {
Log.e(QtTAG, "checkFileExists(): Invalid Uri");
e.printStackTrace();
- return exists;
} catch (UnsupportedOperationException e) {
Log.e(QtTAG, "checkFileExists(): Unsupported operation for given Uri");
e.printStackTrace();
- return false;
+ } catch (SecurityException e) {
+ Log.e(QtTAG, NoPermissionErrorMessage);
}
+ return exists;
}
public static boolean checkIfWritable(Context context, String contentUrl)
@@ -345,7 +348,7 @@ public class QtNative
uri = getUriWithValidPermission(context, contentUrl, "r");
}
if (uri == null) {
- Log.e(QtTAG, "isDir(): No permissions to open Uri");
+ Log.e(QtTAG, NoPermissionErrorMessage);
return isDir;
} else {
if (!m_cachedUris.containsKey(contentUrl))
@@ -375,12 +378,13 @@ public class QtNative
} catch (IllegalArgumentException e) {
Log.e(QtTAG, "checkIfDir(): Invalid Uri");
e.printStackTrace();
- return false;
} catch (UnsupportedOperationException e) {
Log.e(QtTAG, "checkIfDir(): Unsupported operation for given Uri");
e.printStackTrace();
- return false;
+ } catch (SecurityException e) {
+ Log.e(QtTAG, NoPermissionErrorMessage);
}
+ return false;
}
public static String[] listContentsFromTreeUri(Context context, String contentUrl)
{
@@ -944,13 +948,13 @@ public class QtNative
return m_activityDelegate.isKeyboardVisible() && !m_isKeyboardHiding;
}
- private static void notifyAccessibilityLocationChange()
+ private static void notifyAccessibilityLocationChange(final int viewId)
{
runAction(new Runnable() {
@Override
public void run() {
if (m_activityDelegate != null) {
- m_activityDelegate.notifyAccessibilityLocationChange();
+ m_activityDelegate.notifyAccessibilityLocationChange(viewId);
}
}
});
diff --git a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
index 90e38231fc..3b910e288d 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
@@ -193,9 +193,10 @@ public class QtAccessibilityDelegate extends View.AccessibilityDelegate
return true;
}
- public void notifyLocationChange()
+ public void notifyLocationChange(int viewId)
{
- invalidateVirtualViewId(m_focusedVirtualViewId);
+ if (m_focusedVirtualViewId == viewId)
+ invalidateVirtualViewId(m_focusedVirtualViewId);
}
public void notifyObjectHide(int viewId, int parentId)
diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
index 5b3e330282..dd94d6267a 100644
--- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
+++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java
@@ -1122,9 +1122,9 @@ public class QtActivity extends Activity
QtNative.activityDelegate().setFullScreen(enterFullScreen);
}
- public void notifyAccessibilityLocationChange()
+ public void notifyAccessibilityLocationChange(int viewId)
{
- QtNative.activityDelegate().notifyAccessibilityLocationChange();
+ QtNative.activityDelegate().notifyAccessibilityLocationChange(viewId);
}
public void notifyObjectHide(int viewId, int parentId)
diff --git a/src/android/templates/AndroidManifest.xml b/src/android/templates/AndroidManifest.xml
index 7079f51a1b..c434c0cb0d 100644
--- a/src/android/templates/AndroidManifest.xml
+++ b/src/android/templates/AndroidManifest.xml
@@ -9,8 +9,8 @@
<!-- %%INSERT_FEATURES -->
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
- <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:extractNativeLibs="true" android:allowNativeHeapPointerTagging="false">
- <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop">
+ <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:allowNativeHeapPointerTagging="false" android:allowBackup="true" android:fullBackupOnly="false">
+ <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
diff --git a/src/android/templates/build.gradle b/src/android/templates/build.gradle
index 34371c3036..63e28adecb 100644
--- a/src/android/templates/build.gradle
+++ b/src/android/templates/build.gradle
@@ -35,8 +35,11 @@ android {
*******************************************************/
compileSdkVersion androidCompileSdkVersion.toInteger()
+ buildToolsVersion androidBuildToolsVersion
+ ndkVersion androidNdkVersion
- buildToolsVersion '28.0.3'
+ // Extract native libraries from the APK
+ packagingOptions.jniLibs.useLegacyPackaging true
sourceSets {
main {