Prioritize Android permissions without additional attributes

This is a manual cherry-pick from
87cc6bb8c81b93b5c806a821e22332c80c0c37d5

Android permissions may have additional attributes such as
'minSdkLevel' and 'maxSdkLevel'. When generating the default
AndroidManifest.xml there may be duplicate permission entries, stemming
for example from two different Qt modules.

With this change the permission without any additional attributes is
given priority. The underlying assumption is that such permission is
likely the most permissive.

Task-number: QTBUG-129944
Change-Id: Id0416290780b68289c2cca0bc03dde40997d3c16
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
(cherry picked from commit 87cc6bb8c81b93b5c806a821e22332c80c0c37d5)
This commit is contained in:
Juha Vuolle 2024-08-21 11:28:12 +03:00
parent e28adc19ed
commit 0df76339f0

View File

@ -2129,7 +2129,12 @@ bool readAndroidDependencyXml(Options *options,
} else if (reader.name() == "permission"_L1) {
QString name = reader.attributes().value("name"_L1).toString();
QString extras = reader.attributes().value("extras"_L1).toString();
options->permissions.insert(name, extras);
// With duplicate permissions prioritize the one without any attributes,
// as that is likely the most permissive
if (!options->permissions.contains(name)
|| !options->permissions.value(name).isEmpty()) {
options->permissions.insert(name, extras);
}
} else if (reader.name() == "feature"_L1) {
QString name = reader.attributes().value("name"_L1).toString();
options->features.append(name);