From 4bd316ab62e31d2b631351bc9e33ccaff496639d Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 12 Feb 2020 18:25:11 +0100 Subject: [PATCH 1/4] Android: Access buildTargetSdk directly when possible Change-Id: I1f9996919d982f8e54c595abaa44ed0e10a79422 Reviewed-by: Assam Boudjelthia Reviewed-by: Alessandro Portale --- src/plugins/android/androidbuildapkstep.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 194c3c52296..7ef37b89ca9 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -234,8 +234,7 @@ bool AndroidBuildApkStep::init() return true; } - QString buildTargetSdk = AndroidManager::buildTargetSDK(target()); - if (buildTargetSdk.isEmpty()) { + if (m_buildTargetSdk.isEmpty()) { emit addOutput(tr("Android build SDK not defined. Check Android settings."), OutputFormat::Stderr); return false; @@ -243,7 +242,7 @@ bool AndroidBuildApkStep::init() QStringList arguments = {"--input", m_inputFile, "--output", outputDir, - "--android-platform", AndroidManager::buildTargetSDK(target()), + "--android-platform", m_buildTargetSdk, "--jdk", AndroidConfigurations::currentConfig().openJDKLocation().toString()}; if (m_verbose) From 7ba45c66ff31c19169fe66bbc3906405e3ec5dd3 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 13 Feb 2020 13:12:41 +0100 Subject: [PATCH 2/4] Android: Remove one more buildTargetSdk() finding roundtrip ... and avoid the implicit used of Target::activeBuildConfiguration() there, Change-Id: I08ec72be601ef7b854b5aec5784b0636c738faa4 Reviewed-by: Alessandro Portale --- src/plugins/android/androidbuildapkwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidbuildapkwidget.cpp b/src/plugins/android/androidbuildapkwidget.cpp index 3217f6b7b21..de49e79d06a 100644 --- a/src/plugins/android/androidbuildapkwidget.cpp +++ b/src/plugins/android/androidbuildapkwidget.cpp @@ -98,7 +98,7 @@ QWidget *AndroidBuildApkWidget::createApplicationGroup() auto targetSDKComboBox = new QComboBox(group); targetSDKComboBox->addItems(targets); - targetSDKComboBox->setCurrentIndex(targets.indexOf(AndroidManager::buildTargetSDK(step()->target()))); + targetSDKComboBox->setCurrentIndex(targets.indexOf(m_step->buildTargetSdk())); const auto cbActivated = QOverload::of(&QComboBox::activated); connect(targetSDKComboBox, cbActivated, this, [this, targetSDKComboBox](int idx) { From b18fceb15dacf32fa3bbe7ff1448a9ca57a6693b Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 13 Feb 2020 14:03:37 +0100 Subject: [PATCH 3/4] Android: Pass BuildSystem to CreateAndroidManifectWizard Instead of a Target and hoping that its activeBuildystem is the right one. Change-Id: Ieb384d89e8f580b24205ce46a38f151aa72e2f6e Reviewed-by: Assam Boudjelthia Reviewed-by: Alessandro Portale --- src/plugins/android/androidbuildapkwidget.cpp | 2 +- .../android/createandroidmanifestwizard.cpp | 32 ++++++++++--------- .../android/createandroidmanifestwizard.h | 8 ++--- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/plugins/android/androidbuildapkwidget.cpp b/src/plugins/android/androidbuildapkwidget.cpp index de49e79d06a..4e2a9f128b3 100644 --- a/src/plugins/android/androidbuildapkwidget.cpp +++ b/src/plugins/android/androidbuildapkwidget.cpp @@ -256,7 +256,7 @@ QWidget *AndroidBuildApkWidget::createCreateTemplatesGroup() auto createAndroidTemplatesButton = new QPushButton(tr("Create Templates")); connect(createAndroidTemplatesButton, &QAbstractButton::clicked, this, [this] { - CreateAndroidManifestWizard wizard(m_step->target()); + CreateAndroidManifestWizard wizard(m_step->buildConfiguration()->buildSystem()); wizard.exec(); }); diff --git a/src/plugins/android/createandroidmanifestwizard.cpp b/src/plugins/android/createandroidmanifestwizard.cpp index 31d65855556..1f050739563 100644 --- a/src/plugins/android/createandroidmanifestwizard.cpp +++ b/src/plugins/android/createandroidmanifestwizard.cpp @@ -31,6 +31,7 @@ #include +#include #include #include #include @@ -80,13 +81,13 @@ ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard) label->setText(tr("Select the .pro file for which you want to create the Android template files.")); fl->addRow(label); - Target *target = wizard->target(); + BuildSystem *buildSystem = wizard->buildSystem(); QString currentBuildTarget; - if (RunConfiguration *rc = target->activeRunConfiguration()) + if (RunConfiguration *rc = buildSystem->target()->activeRunConfiguration()) currentBuildTarget = rc->buildKey(); m_comboBox = new QComboBox(this); - for (const BuildTargetInfo &bti : wizard->target()->applicationTargets()) { + for (const BuildTargetInfo &bti : buildSystem->applicationTargets()) { const QString displayName = bti.buildKey; m_comboBox->addItem(displayName, QVariant(bti.buildKey)); // TODO something more? if (bti.buildKey == currentBuildTarget) @@ -147,7 +148,7 @@ ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard) void ChooseDirectoryPage::checkPackageSourceDir() { const QString buildKey = m_wizard->buildKey(); - const BuildTargetInfo bti = m_wizard->target()->buildTarget(buildKey); + const BuildTargetInfo bti = m_wizard->buildSystem()->buildTarget(buildKey); const QString projectDir = bti.projectFilePath.toFileInfo().absolutePath(); const QString newDir = m_androidPackageSourceDir->path(); @@ -168,7 +169,7 @@ bool ChooseDirectoryPage::isComplete() const void ChooseDirectoryPage::initializePage() { - const Target *target = m_wizard->target(); + const Target *target = m_wizard->buildSystem()->target(); const QString buildKey = m_wizard->buildKey(); const BuildTargetInfo bti = target->buildTarget(buildKey); const QString projectDir = bti.projectFilePath.toFileInfo().absolutePath(); @@ -198,13 +199,13 @@ void ChooseDirectoryPage::initializePage() // // CreateAndroidManifestWizard // -CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target *target) - : m_target(target), m_copyState(Ask) +CreateAndroidManifestWizard::CreateAndroidManifestWizard(BuildSystem *buildSystem) + : m_buildSystem(buildSystem), m_copyState(Ask) { setWindowTitle(tr("Create Android Template Files Wizard")); - const QList buildTargets = target->applicationTargets(); - QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); + const QList buildTargets = buildSystem->applicationTargets(); + QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(buildSystem->kit()); m_copyGradle = version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0); if (buildTargets.isEmpty()) { @@ -308,7 +309,8 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles() return; QStringList addedFiles; - QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(m_target->kit()); + Target *target = m_buildSystem->target(); + QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); if (!version) return; if (version->qtVersion() < QtSupport::QtVersionNumber(5, 4, 0)) { @@ -331,12 +333,12 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles() nullptr, [this, &addedFiles](QFileInfo src, QFileInfo dst, QString *){return copy(src, dst, &addedFiles);}); } - AndroidManager::updateGradleProperties(m_target, m_buildKey); + AndroidManager::updateGradleProperties(target, m_buildKey); } QString androidPackageDir; - ProjectNode *node = m_target->project()->findNodeForBuildKey(m_buildKey); + ProjectNode *node = target->project()->findNodeForBuildKey(m_buildKey); if (node) { node->addFiles(addedFiles); androidPackageDir = node->data(Android::Constants::AndroidPackageSourceDir).toString(); @@ -344,7 +346,7 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles() if (androidPackageDir.isEmpty()) { // and now time for some magic - const BuildTargetInfo bti = m_target->buildTarget(m_buildKey); + const BuildTargetInfo bti = target->buildTarget(m_buildKey); const QString value = "$$PWD/" + bti.projectFilePath.toFileInfo().absoluteDir().relativeFilePath(m_directory); bool result = node->setData(Android::Constants::AndroidPackageSourceDir, value); @@ -357,9 +359,9 @@ void CreateAndroidManifestWizard::createAndroidTemplateFiles() Core::EditorManager::openEditor(m_directory + QLatin1String("/AndroidManifest.xml")); } -ProjectExplorer::Target *CreateAndroidManifestWizard::target() const +BuildSystem *CreateAndroidManifestWizard::buildSystem() const { - return m_target; + return m_buildSystem; } void CreateAndroidManifestWizard::accept() diff --git a/src/plugins/android/createandroidmanifestwizard.h b/src/plugins/android/createandroidmanifestwizard.h index 3a5080f67ec..28aac0fa790 100644 --- a/src/plugins/android/createandroidmanifestwizard.h +++ b/src/plugins/android/createandroidmanifestwizard.h @@ -41,7 +41,7 @@ namespace Utils { class InfoLabel; } -namespace ProjectExplorer { class Target; } +namespace ProjectExplorer { class BuildSystem; } namespace Android { @@ -92,7 +92,7 @@ class ANDROID_EXPORT CreateAndroidManifestWizard : public Utils::Wizard { Q_OBJECT public: - CreateAndroidManifestWizard(ProjectExplorer::Target *target); + CreateAndroidManifestWizard(ProjectExplorer::BuildSystem *buildSystem); QString buildKey() const; void setBuildKey(const QString &buildKey); @@ -103,7 +103,7 @@ public: void setDirectory(const QString &directory); void setCopyGradle(bool copy); - ProjectExplorer::Target *target() const; + ProjectExplorer::BuildSystem *buildSystem() const; private: enum CopyState { @@ -115,7 +115,7 @@ private: void createAndroidManifestFile(); void createAndroidTemplateFiles(); - ProjectExplorer::Target *m_target; + ProjectExplorer::BuildSystem *m_buildSystem; QString m_buildKey; QString m_directory; CopyState m_copyState; From 644f1e4faa670977e61bfae07ca70d6f760e15c6 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 13 Feb 2020 14:15:54 +0100 Subject: [PATCH 4/4] Android: Un-export CreateAndroidManifestWizard Not needed outside. Change-Id: I390802c73d3d8c2a3fa95bc24e944913cea49393 Reviewed-by: Assam Boudjelthia Reviewed-by: Alessandro Portale Reviewed-by: hjk --- .../android/createandroidmanifestwizard.cpp | 60 +++++++++++++++++-- .../android/createandroidmanifestwizard.h | 59 ++---------------- 2 files changed, 58 insertions(+), 61 deletions(-) diff --git a/src/plugins/android/createandroidmanifestwizard.cpp b/src/plugins/android/createandroidmanifestwizard.cpp index 1f050739563..4a5e6968a77 100644 --- a/src/plugins/android/createandroidmanifestwizard.cpp +++ b/src/plugins/android/createandroidmanifestwizard.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -54,24 +55,49 @@ using namespace ProjectExplorer; using namespace Utils; namespace Android { +namespace Internal { // // NoApplicationProFilePage // -NoApplicationProFilePage::NoApplicationProFilePage(CreateAndroidManifestWizard *wizard) - : m_wizard(wizard) + +class NoApplicationProFilePage : public QWizardPage +{ + Q_DECLARE_TR_FUNCTIONS(Android::NoApplicationProFilePage) + +public: + NoApplicationProFilePage(CreateAndroidManifestWizard *wizard); +}; + +NoApplicationProFilePage::NoApplicationProFilePage(CreateAndroidManifestWizard *) { auto layout = new QVBoxLayout(this); - QLabel *label = new QLabel(this); + auto label = new QLabel(this); label->setWordWrap(true); label->setText(tr("No application .pro file found in this project.")); layout->addWidget(label); setTitle(tr("No Application .pro File")); } + // // ChooseProFilePage // + +class ChooseProFilePage : public QWizardPage +{ + Q_DECLARE_TR_FUNCTIONS(Android::ChooseProfilePage) + +public: + explicit ChooseProFilePage(CreateAndroidManifestWizard *wizard); + +private: + void nodeSelected(int index); + + CreateAndroidManifestWizard *m_wizard; + QComboBox *m_comboBox; +}; + ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard) : m_wizard(wizard) { @@ -112,8 +138,29 @@ void ChooseProFilePage::nodeSelected(int index) // // ChooseDirectoryPage // + +class ChooseDirectoryPage : public QWizardPage +{ + Q_DECLARE_TR_FUNCTIONS(Android::ChooseDirectoryPage) + +public: + ChooseDirectoryPage(CreateAndroidManifestWizard *wizard); + +private: + void initializePage(); + bool isComplete() const; + void checkPackageSourceDir(); + + CreateAndroidManifestWizard *m_wizard; + PathChooser *m_androidPackageSourceDir = nullptr; + InfoLabel *m_sourceDirectoryWarning = nullptr; + QLabel *m_label; + QFormLayout *m_layout; + bool m_complete = true; +}; + ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard) - : m_wizard(wizard), m_androidPackageSourceDir(nullptr), m_complete(true) + : m_wizard(wizard) { m_layout = new QFormLayout(this); m_label = new QLabel(this); @@ -125,8 +172,8 @@ ChooseDirectoryPage::ChooseDirectoryPage(CreateAndroidManifestWizard *wizard) m_layout->addRow(tr("Android package source directory:"), m_androidPackageSourceDir); m_sourceDirectoryWarning = - new Utils::InfoLabel(tr("The Android package source directory cannot be the same as " - "the project directory."), Utils::InfoLabel::Error, this); + new InfoLabel(tr("The Android package source directory cannot be the same as " + "the project directory."), InfoLabel::Error, this); m_sourceDirectoryWarning->setVisible(false); m_sourceDirectoryWarning->setElideMode(Qt::ElideNone); m_sourceDirectoryWarning->setWordWrap(true); @@ -370,4 +417,5 @@ void CreateAndroidManifestWizard::accept() Wizard::accept(); } +} // namespace Internal } // namespace Android diff --git a/src/plugins/android/createandroidmanifestwizard.h b/src/plugins/android/createandroidmanifestwizard.h index 28aac0fa790..eee030ff339 100644 --- a/src/plugins/android/createandroidmanifestwizard.h +++ b/src/plugins/android/createandroidmanifestwizard.h @@ -28,69 +28,17 @@ #include "android_global.h" #include -#include #include -QT_BEGIN_NAMESPACE -class QComboBox; -class QLabel; -class QFormLayout; -QT_END_NAMESPACE - -namespace Utils { -class InfoLabel; -} - namespace ProjectExplorer { class BuildSystem; } namespace Android { +namespace Internal { -class CreateAndroidManifestWizard; - -class NoApplicationProFilePage : public QWizardPage +class CreateAndroidManifestWizard : public Utils::Wizard { - Q_OBJECT -public: - NoApplicationProFilePage(CreateAndroidManifestWizard *wizard); -private: - CreateAndroidManifestWizard *m_wizard; -}; + Q_DECLARE_TR_FUNCTIONS(Android::CreateAndroidManifestWizard) -class ChooseProFilePage : public QWizardPage -{ - Q_OBJECT -public: - explicit ChooseProFilePage(CreateAndroidManifestWizard *wizard); - -private: - void nodeSelected(int index); -private: - CreateAndroidManifestWizard *m_wizard; - QComboBox *m_comboBox; -}; - -class ChooseDirectoryPage : public QWizardPage -{ - Q_OBJECT -public: - ChooseDirectoryPage(CreateAndroidManifestWizard *wizard); - void initializePage(); -protected: - bool isComplete() const; -private: - void checkPackageSourceDir(); -private: - CreateAndroidManifestWizard *m_wizard; - Utils::PathChooser *m_androidPackageSourceDir; - Utils::InfoLabel *m_sourceDirectoryWarning; - QLabel *m_label; - QFormLayout *m_layout; - bool m_complete; -}; - -class ANDROID_EXPORT CreateAndroidManifestWizard : public Utils::Wizard -{ - Q_OBJECT public: CreateAndroidManifestWizard(ProjectExplorer::BuildSystem *buildSystem); @@ -122,4 +70,5 @@ private: bool m_copyGradle; }; +} // namespace Internal } // namespace Android