diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-11-26 00:05:06 +0200 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2023-11-30 17:26:26 +0200 |
commit | ee874e7ca8b38a7f3034409688dc2586b09ba4d6 (patch) | |
tree | 1a10c7c4910eb8faff366d9644f6fd1b0bfb810b | |
parent | b044323c1656aeeec508afab8457755cc1e8c587 (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>
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"); }); |