summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2023-11-26 00:05:06 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2023-11-30 17:26:26 +0200
commitee874e7ca8b38a7f3034409688dc2586b09ba4d6 (patch)
tree1a10c7c4910eb8faff366d9644f6fd1b0bfb810b
parentb044323c1656aeeec508afab8457755cc1e8c587 (diff)
Android: accept both spaces and tabs separators for env vars and args
The requirement for separating the app args by tabs only is not justified, since the the args are passed as a string to C++ where QProcess::splitCommand() is used to get a list of single args and that knows how to handle the parsing properly anyway. As for env vars, QtLoader currently expects env vars to be separated by tabs only, however, to account for different use cases, it should handle both tabs and spaces. Task-number: QTBUG-115016 Task-number: QTBUG-106478 Task-number: QTQAINFRA-5703 Change-Id: I58258861477776b82294a4c2603b230f178f16a6 Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java13
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java4
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtLoader.java32
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtNative.java4
5 files changed, 26 insertions, 29 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java
index 1a4b0c6703..f3e23b9da1 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java
@@ -21,7 +21,7 @@ import android.view.Window;
public class QtActivityBase extends Activity
{
- private String m_applicationParams = null;
+ private String m_applicationParams = "";
private boolean m_isCustomThemeSet = false;
private boolean m_retainNonConfigurationInstance = false;
@@ -50,11 +50,16 @@ public class QtActivityBase extends Activity
intent.putExtra(extraSourceInfoKey, sourceInformation);
}
- // Append any parameters to your application,
- // the parameters must be "\t" separated.
+ // Append any parameters to your application.
+ // Either a whitespace or a tab is accepted as a separator between parameters.
/** @noinspection unused*/
public void appendApplicationParameters(String params)
{
+ if (params == null || params.isEmpty())
+ return;
+
+ if (!m_applicationParams.isEmpty())
+ m_applicationParams += " ";
m_applicationParams += params;
}
@@ -95,7 +100,7 @@ public class QtActivityBase extends Activity
addReferrer(getIntent());
QtActivityLoader loader = new QtActivityLoader(this);
- loader.setApplicationParameters(m_applicationParams);
+ loader.appendApplicationParameters(m_applicationParams);
loader.loadQtLibraries();
m_delegate.startNativeApplication(loader.getApplicationParameters(),
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 964a0a871c..35cc259126 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
@@ -114,7 +114,7 @@ class QtActivityDelegate
}
}
- public void startNativeApplication(ArrayList<String> appParams, String mainLib)
+ public void startNativeApplication(String appParams, String mainLib)
{
if (m_surfaces != null)
return;
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java
index 89185e3c45..6f15a7326e 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityLoader.java
@@ -125,7 +125,7 @@ class QtActivityLoader extends QtLoader {
String intentArgs = intent.getStringExtra("applicationArguments");
if (intentArgs != null)
- setApplicationParameters(intentArgs);
+ appendApplicationParameters(intentArgs);
Bundle extras = intent.getExtras();
if (extras == null) {
@@ -144,7 +144,7 @@ class QtActivityLoader extends QtLoader {
if (extras.containsKey("extraappparams")) {
String extraAppParams = extras.getString("extraappparams");
- setApplicationParameters(getDecodedUtfString(extraAppParams));
+ appendApplicationParameters(getDecodedUtfString(extraAppParams));
}
} else {
Log.d(QtNative.QtTAG, "Not in debug mode! It is not allowed to use extra arguments " +
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtLoader.java b/src/android/jar/src/org/qtproject/qt/android/QtLoader.java
index fa7277fc8b..352645fc07 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtLoader.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtLoader.java
@@ -38,7 +38,7 @@ abstract class QtLoader {
protected ComponentInfo m_contextInfo;
protected String m_mainLib;
- protected ArrayList<String> m_applicationParameters = new ArrayList<>();
+ protected String m_applicationParameters = "";
protected HashMap<String, String> m_environmentVariables = new HashMap<>();
/**
@@ -91,7 +91,7 @@ abstract class QtLoader {
String backgroundRunning = getMetaData("android.app.background_running");
setEnvironmentVariable("QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED", backgroundRunning);
setEnvironmentVariable("QTRACE_LOCATION", getMetaData("android.app.trace_location"));
- setApplicationParameters(getMetaData("android.app.arguments"));
+ appendApplicationParameters(getMetaData("android.app.arguments"));
}
private ArrayList<String> preferredAbiLibs(String[] libs) {
@@ -164,31 +164,22 @@ abstract class QtLoader {
* the main library's main() function. This is assembled from
* a combination of static values and also metadata dependent values.
**/
- public ArrayList<String> getApplicationParameters() {
+ public String getApplicationParameters() {
return m_applicationParameters;
}
/**
- * Adds a parameter string to the internal array list of parameters.
- **/
- public void setApplicationParameter(String param)
- {
- if (param == null || param.isEmpty())
- return;
- m_applicationParameters.add(param);
- }
-
- /**
* Adds a list of parameters to the internal array list of parameters.
- * This expects the parameters separated by '\t'.
+ * Either a whitespace or a tab is accepted as a separator between parameters.
**/
- public void setApplicationParameters(String params)
+ public void appendApplicationParameters(String params)
{
if (params == null || params.isEmpty())
return;
- for (String param : params.split("\t"))
- setApplicationParameter(param);
+ if (!m_applicationParameters.isEmpty())
+ m_applicationParameters += " ";
+ m_applicationParameters += params;
}
/**
@@ -208,15 +199,16 @@ abstract class QtLoader {
/**
* Sets a list of keys/values string to as environment variables.
* This expects the key/value to be separated by '=', and parameters
- * to be separated by '\t'.
- * Ex: key1=val1\tkey2=val2\tkey3=val3
+ * to be separated by tabs or space.
**/
public void setEnvironmentVariables(String environmentVariables)
{
if (environmentVariables == null || environmentVariables.isEmpty())
return;
- for (String variable : environmentVariables.split("\t")) {
+ environmentVariables = environmentVariables.replaceAll("\t", " ");
+
+ for (String variable : environmentVariables.split(" ")) {
String[] keyValue = variable.split("=", 2);
if (keyValue.length < 2 || keyValue[0].isEmpty())
continue;
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
index b321e1e052..ee67362fec 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
@@ -278,11 +278,11 @@ class QtNative
runAction(() -> view.setVisibility(visible ? View.VISIBLE : View.GONE));
}
- public static void startApplication(ArrayList<String> params, String mainLib)
+ public static void startApplication(String params, String mainLib)
{
synchronized (m_mainActivityMutex) {
m_qtThread.run(() -> {
- final String qtParams = mainLib + "\t" + String.join("\t", params);
+ final String qtParams = mainLib + " " + params;
if (!startQtAndroidPlugin(qtParams))
Log.e(QtTAG, "An error occurred while starting the Qt Android plugin");
});