summaryrefslogtreecommitdiff
path: root/src/plugins/android/androidmanifesteditorwidget.cpp
diff options
context:
space:
mode:
authorVille Voutilainen <ville.voutilainen@qt.io>2020-06-02 09:33:21 +0300
committerVille Voutilainen <ville.voutilainen@qt.io>2020-06-07 17:47:57 +0000
commita2cd1e45df2c5f9b9e9b1364cb7bb7eddce433ce (patch)
treefe7cd39cf610f6613f6b49aa9cd3fbbfb3b1a301 /src/plugins/android/androidmanifesteditorwidget.cpp
parent3fa6861e98dc4e6a4c1e4809a0f8c2a8a014ff91 (diff)
downloadqt-creator-a2cd1e45df2c5f9b9e9b1364cb7bb7eddce433ce.tar.gz
Android: add a splash screen editor to manifest editor
Task-number: QTCREATORBUG-24013 Task-number: QTCREATORBUG-24011 Change-Id: Iea7e8ff8f9bf616612827b70de67e01801ab1229 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/plugins/android/androidmanifesteditorwidget.cpp')
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.cpp119
1 files changed, 79 insertions, 40 deletions
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index 51827af221..fe8cafb631 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -31,6 +31,7 @@
#include "androidmanifestdocument.h"
#include "androidmanager.h"
#include "androidservicewidget.h"
+#include "splashiconcontainerwidget.h"
#include <coreplugin/icore.h>
#include <coreplugin/infobar.h>
@@ -250,11 +251,13 @@ void AndroidManifestEditorWidget::initializePage()
}
m_iconButtons = new AndroidManifestEditorIconContainerWidget(applicationGroupBox, m_textEditorWidget);
-
formLayout->addRow(tr("Application icon:"), new QLabel());
-
formLayout->addRow(QString(), m_iconButtons);
+ m_splashButtons = new SplashIconContainerWidget(applicationGroupBox, m_textEditorWidget);
+ formLayout->addRow(tr("Splash screen:"), new QLabel());
+ formLayout->addRow(QString(), m_splashButtons);
+
m_services = new AndroidServiceWidget(this);
formLayout->addRow(tr("Android services:"), m_services);
@@ -271,6 +274,8 @@ void AndroidManifestEditorWidget::initializePage()
this, setDirtyFunc);
connect(m_services, &AndroidServiceWidget::servicesModified,
this, setDirtyFunc);
+ connect(m_splashButtons, &SplashIconContainerWidget::splashScreensModified,
+ this, setDirtyFunc);
connect(m_services, &AndroidServiceWidget::servicesModified,
this, &AndroidManifestEditorWidget::clearInvalidServiceInfo);
connect(m_services, &AndroidServiceWidget::servicesInvalid,
@@ -801,21 +806,27 @@ void AndroidManifestEditorWidget::syncToWidgets(const QDomDocument &doc)
m_activityNameLineEdit->setText(activityElem.attribute(QLatin1String("android:label")));
QDomElement metadataElem = activityElem.firstChildElement(QLatin1String("meta-data"));
-
- const int parseItemsCount = 2;
- int counter = 0;
+ enum ActivityParseGuard {none = 0, libName = 1, styleExtract = 2, stickySplash = 4, done = 8};
+ int activityParseGuard = ActivityParseGuard::none;
while (!metadataElem.isNull()) {
- if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.lib_name")) {
+ if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.lib_name")
+ && !(activityParseGuard & ActivityParseGuard::libName)) {
m_targetLineEdit->setEditText(metadataElem.attribute(QLatin1String("android:value")));
- ++counter;
+ activityParseGuard |= ActivityParseGuard::libName;
} else if (metadataElem.attribute(QLatin1String("android:name"))
- == QLatin1String("android.app.extract_android_style")) {
+ == QLatin1String("android.app.extract_android_style")
+ && !(activityParseGuard & ActivityParseGuard::styleExtract)) {
m_styleExtractMethod->setCurrentText(
metadataElem.attribute(QLatin1String("android:value")));
- ++counter;
+ activityParseGuard |= ActivityParseGuard::styleExtract;
+ } else if (metadataElem.attribute(QLatin1String("android:name"))
+ == QLatin1String("android.app.splash_screen_sticky")
+ && !(activityParseGuard & ActivityParseGuard::stickySplash)) {
+ QString sticky = metadataElem.attribute(QLatin1String("android:value"));
+ m_splashButtons->setSticky(sticky == QLatin1String("true"));
+ activityParseGuard |= ActivityParseGuard::stickySplash;
}
-
- if (counter == parseItemsCount)
+ if (activityParseGuard == ActivityParseGuard::done)
break;
metadataElem = metadataElem.nextSiblingElement(QLatin1String("meta-data"));
}
@@ -887,6 +898,7 @@ void AndroidManifestEditorWidget::syncToWidgets(const QDomDocument &doc)
m_services->setServices(services);
m_iconButtons->loadIcons();
+ m_splashButtons->loadImages();
m_stayClean = false;
m_dirty = false;
@@ -1085,6 +1097,38 @@ void AndroidManifestEditorWidget::parseApplication(QXmlStreamReader &reader, QXm
}
}
+static void writeMetadataElement(const char *name,
+ const char *attributeName,
+ const QString &value,
+ QXmlStreamWriter &writer)
+{
+ writer.writeStartElement(QLatin1String("meta-data"));
+ writer.writeAttribute(QLatin1String("android:name"), QLatin1String(name));
+ writer.writeAttribute(QLatin1String(attributeName), value);
+ writer.writeEndElement();
+
+}
+
+void AndroidManifestEditorWidget::parseSplashScreen(QXmlStreamWriter &writer)
+{
+ if (m_splashButtons->hasImages())
+ writeMetadataElement("android.app.splash_screen_drawable",
+ "android:resource", "@drawable/logo",
+ writer);
+ if (m_splashButtons->hasPortraitImages())
+ writeMetadataElement("android.app.splash_screen_drawable_portrait",
+ "android:resource", "@drawable/logo_portrait",
+ writer);
+ if (m_splashButtons->hasLandscapeImages())
+ writeMetadataElement("android.app.splash_screen_drawable_landscape",
+ "android:resource", "@drawable/logo_landscape",
+ writer);
+ if (m_splashButtons->isSticky())
+ writeMetadataElement("android.app.splash_screen_sticky",
+ "android:value", "true",
+ writer);
+}
+
static int findService(const QString &name, const QList<AndroidServiceData> &data)
{
for (int i = 0; i < data.size(); ++i) {
@@ -1094,7 +1138,7 @@ static int findService(const QString &name, const QList<AndroidServiceData> &dat
return -1;
}
-static void writeServiceMetadataElement(const char *name,
+static void writeMetadataElement(const char *name,
const char *attributeName,
const char *value,
QXmlStreamWriter &writer)
@@ -1106,40 +1150,28 @@ static void writeServiceMetadataElement(const char *name,
}
-static void writeServiceMetadataElement(const char *name,
- const char *attributeName,
- const QString &value,
- QXmlStreamWriter &writer)
-{
- writer.writeStartElement(QLatin1String("meta-data"));
- writer.writeAttribute(QLatin1String("android:name"), QLatin1String(name));
- writer.writeAttribute(QLatin1String(attributeName), value);
- writer.writeEndElement();
-
-}
-
static void addServiceArgumentsAndLibName(const AndroidServiceData &service, QXmlStreamWriter &writer)
{
if (!service.isRunInExternalLibrary() && !service.serviceArguments().isEmpty())
- writeServiceMetadataElement("android.app.arguments", "android:value", service.serviceArguments(), writer);
+ writeMetadataElement("android.app.arguments", "android:value", service.serviceArguments(), writer);
if (service.isRunInExternalLibrary() && !service.externalLibraryName().isEmpty())
- writeServiceMetadataElement("android.app.lib_name", "android:value", service.externalLibraryName(), writer);
+ writeMetadataElement("android.app.lib_name", "android:value", service.externalLibraryName(), writer);
else
- writeServiceMetadataElement("android.app.lib_name", "android:value", "-- %%INSERT_APP_LIB_NAME%% --", writer);
+ writeMetadataElement("android.app.lib_name", "android:value", "-- %%INSERT_APP_LIB_NAME%% --", writer);
}
static void addServiceMetadata(QXmlStreamWriter &writer)
{
- writeServiceMetadataElement("android.app.qt_sources_resource_id", "android:resource", "@array/qt_sources", writer);
- writeServiceMetadataElement("android.app.repository", "android:value", "default", writer);
- writeServiceMetadataElement("android.app.qt_libs_resource_id", "android:resource", "@array/qt_libs", writer);
- writeServiceMetadataElement("android.app.bundled_libs_resource_id", "android:resource", "@array/bundled_libs", writer);
- writeServiceMetadataElement("android.app.bundle_local_qt_libs", "android:value", "-- %%BUNDLE_LOCAL_QT_LIBS%% --", writer);
- writeServiceMetadataElement("android.app.use_local_qt_libs", "android:value", "-- %%USE_LOCAL_QT_LIBS%% --", writer);
- writeServiceMetadataElement("android.app.libs_prefix", "android:value", "/data/local/tmp/qt/", writer);
- writeServiceMetadataElement("android.app.load_local_libs_resource_id", "android:resource", "@array/load_local_libs", writer);
- writeServiceMetadataElement("android.app.load_local_jars", "android:value", "-- %%INSERT_LOCAL_JARS%% --", writer);
- writeServiceMetadataElement("android.app.static_init_classes", "android:value", "-- %%INSERT_INIT_CLASSES%% --", writer);
+ writeMetadataElement("android.app.qt_sources_resource_id", "android:resource", "@array/qt_sources", writer);
+ writeMetadataElement("android.app.repository", "android:value", "default", writer);
+ writeMetadataElement("android.app.qt_libs_resource_id", "android:resource", "@array/qt_libs", writer);
+ writeMetadataElement("android.app.bundled_libs_resource_id", "android:resource", "@array/bundled_libs", writer);
+ writeMetadataElement("android.app.bundle_local_qt_libs", "android:value", "-- %%BUNDLE_LOCAL_QT_LIBS%% --", writer);
+ writeMetadataElement("android.app.use_local_qt_libs", "android:value", "-- %%USE_LOCAL_QT_LIBS%% --", writer);
+ writeMetadataElement("android.app.libs_prefix", "android:value", "/data/local/tmp/qt/", writer);
+ writeMetadataElement("android.app.load_local_libs_resource_id", "android:resource", "@array/load_local_libs", writer);
+ writeMetadataElement("android.app.load_local_jars", "android:value", "-- %%INSERT_LOCAL_JARS%% --", writer);
+ writeMetadataElement("android.app.static_init_classes", "android:value", "-- %%INSERT_INIT_CLASSES%% --", writer);
}
void AndroidManifestEditorWidget::parseService(QXmlStreamReader &reader, QXmlStreamWriter &writer)
@@ -1240,6 +1272,7 @@ void AndroidManifestEditorWidget::parseActivity(QXmlStreamReader &reader, QXmlSt
while (!reader.atEnd()) {
if (reader.isEndElement()) {
+ parseSplashScreen(writer);
if (!found) {
writer.writeEmptyElement(QLatin1String("meta-data"));
writer.writeAttribute(QLatin1String("android:name"),
@@ -1250,10 +1283,16 @@ void AndroidManifestEditorWidget::parseActivity(QXmlStreamReader &reader, QXmlSt
writer.writeCurrentToken(reader);
return;
} else if (reader.isStartElement()) {
- if (reader.name() == QLatin1String("meta-data"))
- found = parseMetaData(reader, writer) || found; // ORDER MATTERS
- else
+ if (reader.name() == QLatin1String("meta-data")) {
+ QString metaTagName = reader.attributes().value(QLatin1String("android:name")).toString();
+ if (metaTagName.startsWith(QLatin1String("android.app.splash_screen")))
+ parseUnknownElement(reader, writer, true);
+ else
+ found = parseMetaData(reader, writer) || found; // ORDER MATTERS
+ } else
parseUnknownElement(reader, writer);
+ } else if (reader.isWhitespace()) {
+ /* no copying of whitespace */
} else {
writer.writeCurrentToken(reader);
}