summaryrefslogtreecommitdiffstats
path: root/src/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/android')
-rw-r--r--src/android/jar/.gitignore6
-rw-r--r--src/android/jar/AndroidManifest.xml1
-rw-r--r--src/android/jar/build.gradle54
-rw-r--r--src/android/jar/settings.gradle1
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java28
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java8
-rw-r--r--src/android/java/src/org/qtproject/qt/android/bindings/QtService.java13
7 files changed, 91 insertions, 20 deletions
diff --git a/src/android/jar/.gitignore b/src/android/jar/.gitignore
new file mode 100644
index 0000000000..364420a59a
--- /dev/null
+++ b/src/android/jar/.gitignore
@@ -0,0 +1,6 @@
+.gradle/
+build/
+gradle/
+gradlew
+gradlew.bat
+local.properties
diff --git a/src/android/jar/AndroidManifest.xml b/src/android/jar/AndroidManifest.xml
index b461cac762..c53b90c912 100644
--- a/src/android/jar/AndroidManifest.xml
+++ b/src/android/jar/AndroidManifest.xml
@@ -1,5 +1,4 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="org.qtproject.qt.android">
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
- <uses-sdk android:minSdkVersion="9" />
</manifest>
diff --git a/src/android/jar/build.gradle b/src/android/jar/build.gradle
new file mode 100644
index 0000000000..f2dcb500ca
--- /dev/null
+++ b/src/android/jar/build.gradle
@@ -0,0 +1,54 @@
+// This is mainly used to allow Android Studio to easily read this folder as an android project.
+
+buildscript {
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:4.0.2'
+ }
+}
+
+apply plugin: 'com.android.library'
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+// implementation 'androidx.appcompat:appcompat:1.2.0' // for androidx
+}
+
+repositories {
+ google()
+ jcenter()
+}
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "30.0.3"
+
+ defaultConfig {
+ minSdkVersion 23
+ targetSdkVersion 30
+ }
+
+ sourceSets {
+ main {
+ java.srcDir 'src/'
+ resources.srcDir 'libs/'
+ manifest.srcFile 'AndroidManifest.xml'
+ res.srcDirs = ['res/']
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ android {
+ lintOptions {
+ abortOnError true
+ }
+ }
+}
diff --git a/src/android/jar/settings.gradle b/src/android/jar/settings.gradle
new file mode 100644
index 0000000000..3f935dd3e2
--- /dev/null
+++ b/src/android/jar/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = "QtAndroid"
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 3785eb4011..4cae9465ba 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
@@ -343,7 +343,7 @@ public class QtActivityDelegate
}
if ((inputHints & ImhHiddenText) != 0)
- inputType |= 0x10 /* TYPE_NUMBER_VARIATION_PASSWORD */;
+ inputType |= android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD;
} else if ((inputHints & ImhDialableCharactersOnly) != 0) {
inputType = android.text.InputType.TYPE_CLASS_PHONE;
} else if ((inputHints & (ImhDate | ImhTime)) != 0) {
@@ -351,29 +351,28 @@ public class QtActivityDelegate
if ((inputHints & (ImhDate | ImhTime)) != (ImhDate | ImhTime)) {
if ((inputHints & ImhDate) != 0)
inputType |= android.text.InputType.TYPE_DATETIME_VARIATION_DATE;
- if ((inputHints & ImhTime) != 0)
+ else
inputType |= android.text.InputType.TYPE_DATETIME_VARIATION_TIME;
} // else { TYPE_DATETIME_VARIATION_NORMAL(0) }
} else { // CLASS_TEXT
- if ((inputHints & (ImhEmailCharactersOnly | ImhUrlCharactersOnly)) != 0) {
- if ((inputHints & ImhUrlCharactersOnly) != 0) {
- inputType |= android.text.InputType.TYPE_TEXT_VARIATION_URI;
-
- if (enterKeyType == 0) // not explicitly overridden
- imeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_GO;
- } else if ((inputHints & ImhEmailCharactersOnly) != 0) {
- inputType |= android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
- }
- } else if ((inputHints & ImhHiddenText) != 0) {
+ if ((inputHints & ImhHiddenText) != 0) {
inputType |= android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD;
} else if ((inputHints & ImhSensitiveData) != 0 ||
((inputHints & ImhNoPredictiveText) != 0 &&
System.getenv("QT_ANDROID_ENABLE_WORKAROUND_TO_DISABLE_PREDICTIVE_TEXT") != null)) {
inputType |= android.text.InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
+ } else if ((inputHints & ImhUrlCharactersOnly) != 0) {
+ inputType |= android.text.InputType.TYPE_TEXT_VARIATION_URI;
+ if (enterKeyType == 0) // not explicitly overridden
+ imeOptions = android.view.inputmethod.EditorInfo.IME_ACTION_GO;
+ } else if ((inputHints & ImhEmailCharactersOnly) != 0) {
+ inputType |= android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
}
if ((inputHints & ImhMultiLine) != 0)
inputType |= android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE;
+ if ((inputHints & (ImhNoPredictiveText | ImhSensitiveData | ImhHiddenText)) != 0)
+ inputType |= android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
if ((inputHints & ImhUppercaseOnly) != 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_CHARACTERS;
@@ -382,11 +381,6 @@ public class QtActivityDelegate
initialCapsMode |= android.text.TextUtils.CAP_MODE_SENTENCES;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
}
-
- if ((inputHints & ImhNoPredictiveText) != 0 || (inputHints & ImhSensitiveData) != 0
- || (inputHints & ImhHiddenText) != 0) {
- inputType |= android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
- }
}
if (enterKeyType == 0 && (inputHints & ImhMultiLine) != 0)
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
index 8ac4395ac9..2fbc4a70be 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java
@@ -84,6 +84,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Objects;
public class QtServiceDelegate
{
@@ -118,7 +119,8 @@ public class QtServiceDelegate
QtNative.setApplicationDisplayMetrics(10, 10, 0, 0, 10, 10, 120, 120, 1.0, 1.0);
if (loaderParams.containsKey(STATIC_INIT_CLASSES_KEY)) {
- for (String className: loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY)) {
+ for (String className :
+ Objects.requireNonNull(loaderParams.getStringArray(STATIC_INIT_CLASSES_KEY))) {
if (className.length() == 0)
continue;
try {
@@ -128,9 +130,11 @@ public class QtServiceDelegate
Method m = initClass.getMethod("setService", Service.class, Object.class);
m.invoke(staticInitDataObject, m_service, this);
} catch (Exception e) {
- e.printStackTrace();
+ Log.d(QtNative.QtTAG,
+ "Class " + className + " does not implement setService method");
}
+ // For modules that don't need/have setService
try {
Method m = initClass.getMethod("setContext", Context.class);
m.invoke(staticInitDataObject, (Context)m_service);
diff --git a/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java b/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java
index cb24d1f541..afbe4350a0 100644
--- a/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java
+++ b/src/android/java/src/org/qtproject/qt/android/bindings/QtService.java
@@ -39,8 +39,11 @@ package org.qtproject.qt.android.bindings;
import android.app.Service;
import android.content.Intent;
import android.content.res.Configuration;
+import android.os.Bundle;
import android.os.IBinder;
+import org.qtproject.qt.android.QtNative;
+
public class QtService extends Service
{
QtServiceLoader m_loader = new QtServiceLoader(this);
@@ -153,4 +156,14 @@ public class QtService extends Service
return super.onUnbind(intent);
}
//---------------------------------------------------------------------------
+
+ public boolean loadApplication(Service service, ClassLoader classLoader, Bundle loaderParams)
+ {
+ return QtNative.serviceDelegate().loadApplication(service, classLoader, loaderParams);
+ }
+
+ public boolean startApplication()
+ {
+ return QtNative.serviceDelegate().startApplication();
+ }
}