/**************************************************************************** ** ** Copyright (C) 2016 BogDan Vatra ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #include "androidrunconfiguration.h" #include "androidconstants.h" #include "androidglobal.h" #include "androidtoolchain.h" #include "androidmanager.h" #include "adbcommandswidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Android::Internal; using namespace ProjectExplorer; using namespace Utils; namespace Android { BaseStringListAspect::BaseStringListAspect(const QString &settingsKey, Utils::Id id) { setSettingsKey(settingsKey); setId(id); } BaseStringListAspect::~BaseStringListAspect() = default; void BaseStringListAspect::addToLayout(LayoutBuilder &builder) { QTC_CHECK(!m_widget); m_widget = new AdbCommandsWidget; m_widget->setCommandList(m_value); m_widget->setTitleText(m_label); builder.addItem(m_widget.data()); connect(m_widget.data(), &AdbCommandsWidget::commandsChanged, this, [this] { m_value = m_widget->commandsList(); emit changed(); }); } void BaseStringListAspect::fromMap(const QVariantMap &map) { m_value = map.value(settingsKey()).toStringList(); } void BaseStringListAspect::toMap(QVariantMap &data) const { saveToMap(data, m_value, QStringList()); } QStringList BaseStringListAspect::value() const { return m_value; } void BaseStringListAspect::setValue(const QStringList &value) { m_value = value; if (m_widget) m_widget->setCommandList(m_value); } void BaseStringListAspect::setLabel(const QString &label) { m_label = label; } AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Utils::Id id) : RunConfiguration(target, id) { auto envAspect = addAspect(); envAspect->addSupportedBaseEnvironment(tr("Clean Environment"), {}); auto extraAppArgsAspect = addAspect(); connect(extraAppArgsAspect, &BaseAspect::changed, this, [target, extraAppArgsAspect]() { if (target->buildConfigurations().first()->buildType() == BuildConfiguration::BuildType::Release) { const QString buildKey = target->activeBuildKey(); target->buildSystem()->setExtraData(buildKey, Android::Constants::ANDROID_APPLICATION_ARGUMENTS, extraAppArgsAspect->arguments(target->macroExpander())); } }); auto amStartArgsAspect = addAspect(); amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS); amStartArgsAspect->setSettingsKey("Android.AmStartArgsKey"); amStartArgsAspect->setLabelText(tr("Activity manager start options:")); amStartArgsAspect->setDisplayStyle(StringAspect::LineEditDisplay); amStartArgsAspect->setHistoryCompleter("Android.AmStartArgs.History"); auto warning = addAspect(); warning->setDisplayStyle(StringAspect::LabelDisplay); warning->setLabelPixmap(Icons::WARNING.pixmap()); warning->setValue(tr("If the \"am start\" options conflict, the application might not start.\n" "%1 uses: am start -n / [-D].") .arg(Core::Constants::IDE_DISPLAY_NAME)); auto preStartShellCmdAspect = addAspect(); preStartShellCmdAspect->setId(Constants::ANDROID_PRESTARTSHELLCMDLIST); preStartShellCmdAspect->setSettingsKey("Android.PreStartShellCmdListKey"); preStartShellCmdAspect->setLabel(tr("Shell commands to run on Android device before application launch.")); auto postStartShellCmdAspect = addAspect(); postStartShellCmdAspect->setId(Constants::ANDROID_POSTFINISHSHELLCMDLIST); postStartShellCmdAspect->setSettingsKey("Android.PostStartShellCmdListKey"); postStartShellCmdAspect->setLabel(tr("Shell commands to run on Android device after application quits.")); setUpdater([this, target] { const BuildTargetInfo bti = buildTargetInfo(); setDisplayName(bti.displayName); setDefaultDisplayName(bti.displayName); AndroidManager::updateGradleProperties(target, buildKey()); }); connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update); } } // namespace Android