From e57ed31c33ceb9f4f8eadedd15c7396952f7963d Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@theqtcompany.com>
Date: Fri, 16 Jan 2015 11:28:44 +0100
Subject: [PATCH] Android: Replace setting for input .json file and use active
 rc instead

That's a more natural approach to select the application .pro file

Task-number: QTCREATORBUG-13732
Change-Id: I8c6745bea4b408e1d4f7ed2cd4e1d50798c60881
Reviewed-by: BogDan Vatra <bogdan@kde.org>
---
 .../qmakeandroidbuildapkstep.cpp              | 36 ++++------------
 .../qmakeandroidbuildapkstep.h                |  8 ----
 .../qmakeandroidbuildapkwidget.cpp            | 42 +------------------
 .../qmakeandroidbuildapkwidget.h              |  2 -
 .../qmakeandroidbuildapkwidget.ui             | 14 -------
 .../qmakeandroidrunfactories.cpp              |  4 +-
 6 files changed, 10 insertions(+), 96 deletions(-)

diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
index cf77566d93d..95531c9722a 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp
@@ -31,6 +31,7 @@
 
 #include "qmakeandroidbuildapkstep.h"
 #include "qmakeandroidbuildapkwidget.h"
+#include "qmakeandroidrunconfiguration.h"
 
 #include <android/androidconfigurations.h>
 #include <android/androidconstants.h>
@@ -143,17 +144,14 @@ QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepLis
 
 QString QmakeAndroidBuildApkStep::proFilePathForInputFile() const
 {
-    return m_proFilePathForInputFile;
-}
-
-void QmakeAndroidBuildApkStep::setProFilePathForInputFile(const QString &path)
-{
-    m_proFilePathForInputFile = path;
+    ProjectExplorer::RunConfiguration *rc = target()->activeRunConfiguration();
+    if (auto *arc = qobject_cast<QmakeAndroidRunConfiguration *>(rc))
+        return arc->proFilePath();
+    return QString();
 }
 
 QmakeAndroidBuildApkStep::QmakeAndroidBuildApkStep(ProjectExplorer::BuildStepList *bc, QmakeAndroidBuildApkStep *other)
-    : Android::AndroidBuildApkStep(bc, other),
-      m_proFilePathForInputFile(other->m_proFilePathForInputFile)
+    : Android::AndroidBuildApkStep(bc, other)
 {
     ctor();
 }
@@ -162,7 +160,7 @@ Utils::FileName QmakeAndroidBuildApkStep::androidPackageSourceDir() const
 {
     QmakeProjectManager::QmakeProject *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
     const QmakeProjectManager::QmakeProFileNode *node
-            = pro->rootQmakeProjectNode()->findProFileFor(m_proFilePathForInputFile);
+            = pro->rootQmakeProjectNode()->findProFileFor(proFilePathForInputFile());
     if (!node)
         return Utils::FileName();
     return Utils::FileName::fromString(node->singleVariableValue(QmakeProjectManager::AndroidPackageSourceDir));
@@ -170,8 +168,6 @@ Utils::FileName QmakeAndroidBuildApkStep::androidPackageSourceDir() const
 
 void QmakeAndroidBuildApkStep::ctor()
 {
-    connect(project(), SIGNAL(proFilesEvaluated()),
-           this, SLOT(updateInputFile()));
 }
 
 bool QmakeAndroidBuildApkStep::init()
@@ -309,32 +305,14 @@ ProjectExplorer::BuildStepConfigWidget *QmakeAndroidBuildApkStep::createConfigWi
 
 bool QmakeAndroidBuildApkStep::fromMap(const QVariantMap &map)
 {
-    m_proFilePathForInputFile = map.value(ProFilePathForInputFile).toString();
     return Android::AndroidBuildApkStep::fromMap(map);
 }
 
 QVariantMap QmakeAndroidBuildApkStep::toMap() const
 {
     QVariantMap map = Android::AndroidBuildApkStep::toMap();
-    map.insert(ProFilePathForInputFile, m_proFilePathForInputFile);
     return map;
 }
 
-void QmakeAndroidBuildApkStep::updateInputFile()
-{
-    QmakeProject *pro = static_cast<QmakeProject *>(project());
-    QList<QmakeProFileNode *> nodes = pro->applicationProFiles();
-
-    const QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(m_proFilePathForInputFile);
-    if (!nodes.contains(const_cast<QmakeProFileNode *>(node))) {
-        if (!nodes.isEmpty())
-            m_proFilePathForInputFile = nodes.first()->path();
-        else
-            m_proFilePathForInputFile.clear();
-    }
-
-    emit inputFileChanged();
-}
-
 } // namespace Internal
 } // namespace QmakeProjectManager
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
index be1749d4354..b093914cc5a 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h
@@ -86,18 +86,10 @@ protected:
     bool fromMap(const QVariantMap &map);
     QVariantMap toMap() const;
 
-signals:
-    // also on purpose emitted if the possible values of this changed
-    void inputFileChanged();
-
-private slots:
-    void updateInputFile();
-
 private:
     void setupProcessParameters(ProjectExplorer::ProcessParameters *pp,
                                 ProjectExplorer::BuildConfiguration *bc,
                                 const QStringList &arguments, const QString &command);
-    QString m_proFilePathForInputFile;
     QString m_command;
     QString m_argumentsPasswordConcealed;
     bool m_skipBuilding;
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
index f551b7a4f87..187ecfe6aa5 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.cpp
@@ -39,6 +39,7 @@
 #include <qmakeprojectmanager/qmakeproject.h>
 
 #include <QFileDialog>
+#include <QLabel>
 
 using QmakeProjectManager::QmakeProject;
 using QmakeProjectManager::QmakeProFileNode;
@@ -86,13 +87,6 @@ QmakeAndroidBuildApkWidget::QmakeAndroidBuildApkWidget(QmakeAndroidBuildApkStep
     m_extraLibraryListModel = new AndroidExtraLibraryListModel(static_cast<QmakeProject *>(m_step->project()), this);
     m_ui->androidExtraLibsListView->setModel(m_extraLibraryListModel);
 
-    updateInputFileUi();
-    connect(m_step, SIGNAL(inputFileChanged()),
-            SLOT(updateInputFileUi()));
-
-    connect(m_ui->inputFileComboBox, SIGNAL(currentIndexChanged(int)),
-            SLOT(inputFileComboBoxIndexChanged()));
-
     connect(m_ui->createAndroidTemplatesButton, SIGNAL(clicked()),
             SLOT(createAndroidTemplatesButton()));
 
@@ -116,40 +110,6 @@ QmakeAndroidBuildApkWidget::~QmakeAndroidBuildApkWidget()
     delete m_ui;
 }
 
-void QmakeAndroidBuildApkWidget::updateInputFileUi()
-{
-    QmakeProject *project
-            = static_cast<QmakeProject *>(m_step->project());
-    QList<QmakeProFileNode *> nodes = project->applicationProFiles();
-    int size = nodes.size();
-    if (size == 0 || size == 1) {
-        // there's nothing to select, e.g. before parsing
-        m_ui->inputFileLabel->setVisible(false);
-        m_ui->inputFileComboBox->setVisible(false);
-    } else {
-        m_ignoreChange = true;
-        m_ui->inputFileLabel->setVisible(true);
-        m_ui->inputFileComboBox->setVisible(true);
-
-        m_ui->inputFileComboBox->clear();
-        foreach (QmakeProFileNode *node, nodes)
-            m_ui->inputFileComboBox->addItem(node->displayName(), node->path());
-
-        int index = m_ui->inputFileComboBox->findData(m_step->proFilePathForInputFile());
-        m_ui->inputFileComboBox->setCurrentIndex(index);
-        m_ignoreChange = false;
-    }
-}
-
-void QmakeAndroidBuildApkWidget::inputFileComboBoxIndexChanged()
-{
-    if (m_ignoreChange)
-        return;
-
-    QString proFilePath = m_ui->inputFileComboBox->itemData(m_ui->inputFileComboBox->currentIndex()).toString();
-    m_step->setProFilePathForInputFile(proFilePath);
-}
-
 void QmakeAndroidBuildApkWidget::createAndroidTemplatesButton()
 {
     CreateAndroidManifestWizard wizard(m_step->target());
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h
index a2d72203393..5d52cb3ed9c 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.h
@@ -61,8 +61,6 @@ public:
     ~QmakeAndroidBuildApkWidget();
 
 private slots:
-    void updateInputFileUi();
-    void inputFileComboBoxIndexChanged();
     void createAndroidTemplatesButton();
     void addAndroidExtraLib();
     void removeAndroidExtraLib();
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui
index 48c6d3a5cff..2b5322c5fbf 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkwidget.ui
@@ -50,20 +50,6 @@
         </item>
        </layout>
       </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
-        <item>
-         <widget class="QLabel" name="inputFileLabel">
-          <property name="text">
-           <string>Input file for androiddeployqt:</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QComboBox" name="inputFileComboBox"/>
-        </item>
-       </layout>
-      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp
index 98febcf6d3c..be0cbda87c1 100644
--- a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp
+++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp
@@ -104,7 +104,7 @@ QList<Core::Id> QmakeAndroidRunConfigurationFactory::availableCreationIds(Target
 RunConfiguration *QmakeAndroidRunConfigurationFactory::doCreate(Target *parent, Core::Id id)
 {
     if (parent->project()->rootProjectNode())
-        return new QmakeAndroidRunConfiguration(parent, id, parent->project()->rootProjectNode()->path());
+        return new QmakeAndroidRunConfiguration(parent, id, pathFromId(id));
     return new QmakeAndroidRunConfiguration(parent, id);
 }
 
@@ -113,7 +113,7 @@ RunConfiguration *QmakeAndroidRunConfigurationFactory::doRestore(Target *parent,
 {
     Core::Id id = ProjectExplorer::idFromMap(map);
     if (parent->project()->rootProjectNode())
-        return new QmakeAndroidRunConfiguration(parent, id, parent->project()->rootProjectNode()->path());
+        return new QmakeAndroidRunConfiguration(parent, id);
     return new QmakeAndroidRunConfiguration(parent, id);
 }
 
-- 
GitLab