diff options
Diffstat (limited to 'src/android')
-rw-r--r-- | src/android/jar/.gitignore | 6 | ||||
-rw-r--r-- | src/android/jar/AndroidManifest.xml | 1 | ||||
-rw-r--r-- | src/android/jar/build.gradle | 54 | ||||
-rw-r--r-- | src/android/jar/settings.gradle | 1 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java | 28 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtServiceDelegate.java | 8 | ||||
-rw-r--r-- | src/android/java/src/org/qtproject/qt/android/bindings/QtService.java | 13 |
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(); + } } |