Qnx: Fix lifecycle of the BlackBerryConfigurationManager

This fixes a crash when this class tries to show a UI while it is
destructed.

Task-number: QTCREATORBUG-11712
Change-Id: If4aca14a3ca4792bec1a45903a1f38287d16dbc4
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Tobias Hunger
2014-03-19 12:04:04 +01:00
parent bfd6040224
commit 0e67b293b7
20 changed files with 94 additions and 102 deletions

View File

@@ -445,7 +445,7 @@ bool BlackBerryApiLevelConfiguration::activate()
if (qt5X86Version) if (qt5X86Version)
createKit(qt5X86Version, x86ToolChain, x86DebuggerItemId); createKit(qt5X86Version, x86ToolChain, x86DebuggerItemId);
BlackBerryConfigurationManager::instance().emitSettingsChanged(); BlackBerryConfigurationManager::instance()->emitSettingsChanged();
return true; return true;
} }
@@ -469,7 +469,7 @@ void BlackBerryApiLevelConfiguration::deactivate()
} }
} }
BlackBerryConfigurationManager::instance().emitSettingsChanged(); BlackBerryConfigurationManager::instance()->emitSettingsChanged();
} }
#ifdef WITH_TESTS #ifdef WITH_TESTS

View File

@@ -54,7 +54,7 @@ BlackBerryCertificate::BlackBerryCertificate(const QString &fileName,
{ {
m_process->setProcessChannelMode(QProcess::MergedChannels); m_process->setProcessChannelMode(QProcess::MergedChannels);
m_process->setEnvironment(Utils::EnvironmentItem::toStringList( m_process->setEnvironment(Utils::EnvironmentItem::toStringList(
BlackBerryConfigurationManager::instance().defaultConfigurationEnv())); BlackBerryConfigurationManager::instance()->defaultConfigurationEnv()));
} }
void BlackBerryCertificate::load() void BlackBerryCertificate::load()

View File

@@ -62,6 +62,8 @@ using namespace ProjectExplorer;
namespace Qnx { namespace Qnx {
namespace Internal { namespace Internal {
BlackBerryConfigurationManager *BlackBerryConfigurationManager::m_instance = 0;
namespace { namespace {
const QLatin1String SettingsGroup("BlackBerryConfiguration"); const QLatin1String SettingsGroup("BlackBerryConfiguration");
const QLatin1String NDKLocationKey("NDKLocation"); // For 10.1 NDK support (< QTC 3.0) const QLatin1String NDKLocationKey("NDKLocation"); // For 10.1 NDK support (< QTC 3.0)
@@ -93,6 +95,7 @@ BlackBerryConfigurationManager::BlackBerryConfigurationManager(QObject *parent)
m_writer = new Utils::PersistentSettingsWriter(bbConfigSettingsFileName(), m_writer = new Utils::PersistentSettingsWriter(bbConfigSettingsFileName(),
QLatin1String("BlackBerryConfigurations")); QLatin1String("BlackBerryConfigurations"));
connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), this, SLOT(saveSettings())); connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), this, SLOT(saveSettings()));
m_instance = this;
} }
void BlackBerryConfigurationManager::saveConfigurations() void BlackBerryConfigurationManager::saveConfigurations()
@@ -466,15 +469,14 @@ void BlackBerryConfigurationManager::saveSettings()
saveConfigurations(); saveConfigurations();
} }
BlackBerryConfigurationManager &BlackBerryConfigurationManager::instance() BlackBerryConfigurationManager *BlackBerryConfigurationManager::instance()
{ {
static BlackBerryConfigurationManager instance; return m_instance;
return instance;
} }
BlackBerryConfigurationManager::~BlackBerryConfigurationManager() BlackBerryConfigurationManager::~BlackBerryConfigurationManager()
{ {
m_instance = 0;
qDeleteAll(m_apiLevels); qDeleteAll(m_apiLevels);
qDeleteAll(m_runtimes); qDeleteAll(m_runtimes);
delete m_writer; delete m_writer;

View File

@@ -45,12 +45,13 @@ namespace Internal {
class BlackBerryApiLevelConfiguration; class BlackBerryApiLevelConfiguration;
class BlackBerryRuntimeConfiguration; class BlackBerryRuntimeConfiguration;
class QNXPlugin;
class BlackBerryConfigurationManager : public QObject class BlackBerryConfigurationManager : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
static BlackBerryConfigurationManager &instance(); static BlackBerryConfigurationManager *instance();
~BlackBerryConfigurationManager(); ~BlackBerryConfigurationManager();
bool addApiLevel(BlackBerryApiLevelConfiguration *config); bool addApiLevel(BlackBerryApiLevelConfiguration *config);
void removeApiLevel(BlackBerryApiLevelConfiguration *config); void removeApiLevel(BlackBerryApiLevelConfiguration *config);
@@ -92,6 +93,9 @@ signals:
private: private:
BlackBerryConfigurationManager(QObject *parent = 0); BlackBerryConfigurationManager(QObject *parent = 0);
static BlackBerryConfigurationManager *m_instance;
QList<BlackBerryApiLevelConfiguration*> m_apiLevels; QList<BlackBerryApiLevelConfiguration*> m_apiLevels;
QList<BlackBerryRuntimeConfiguration*> m_runtimes; QList<BlackBerryRuntimeConfiguration*> m_runtimes;
@@ -107,6 +111,8 @@ private:
void insertApiLevelByVersion(BlackBerryApiLevelConfiguration* apiLevel); void insertApiLevelByVersion(BlackBerryApiLevelConfiguration* apiLevel);
void insertRuntimeByVersion(BlackBerryRuntimeConfiguration* runtime); void insertRuntimeByVersion(BlackBerryRuntimeConfiguration* runtime);
friend class QNXPlugin;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -79,7 +79,7 @@ QString BlackBerryCreateCertificateDialog::author() const
QString BlackBerryCreateCertificateDialog::certPath() const QString BlackBerryCreateCertificateDialog::certPath() const
{ {
return BlackBerryConfigurationManager::instance().defaultKeystorePath(); return BlackBerryConfigurationManager::instance()->defaultKeystorePath();
} }
QString BlackBerryCreateCertificateDialog::keystorePassword() const QString BlackBerryCreateCertificateDialog::keystorePassword() const

View File

@@ -142,8 +142,6 @@ void BlackBerryDebugTokenRequestDialog::requestDebugToken()
} }
} }
BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance();
bool ok; bool ok;
const QString cskPassword = m_utils.cskPassword(this, &ok); const QString cskPassword = m_utils.cskPassword(this, &ok);
@@ -160,7 +158,7 @@ void BlackBerryDebugTokenRequestDialog::requestDebugToken()
} }
m_requester->requestDebugToken(m_ui->debugTokenPath->path(), m_requester->requestDebugToken(m_ui->debugTokenPath->path(),
cskPassword, configuration.defaultKeystorePath(), cskPassword, BlackBerryConfigurationManager::instance()->defaultKeystorePath(),
certificatePassword, m_ui->devicePin->text()); certificatePassword, m_ui->devicePin->text());
} }

View File

@@ -61,7 +61,7 @@ BlackBerryDeviceConnection::BlackBerryDeviceConnection() :
void BlackBerryDeviceConnection::connectDevice(const ProjectExplorer::IDevice::ConstPtr &device) void BlackBerryDeviceConnection::connectDevice(const ProjectExplorer::IDevice::ConstPtr &device)
{ {
Utils::Environment env = Utils::Environment::systemEnvironment(); Utils::Environment env = Utils::Environment::systemEnvironment();
env.modify(BlackBerryConfigurationManager::instance().defaultConfigurationEnv()); env.modify(BlackBerryConfigurationManager::instance()->defaultConfigurationEnv());
m_process->setEnvironment(env.toStringList()); m_process->setEnvironment(env.toStringList());

View File

@@ -114,9 +114,9 @@ void BlackBerryDeviceConnectionManager::connectDevice(Core::Id deviceId)
// BlackBerry Device connection needs the Qnx environments to be set // BlackBerry Device connection needs the Qnx environments to be set
// in order to find the Connect.jar package. // in order to find the Connect.jar package.
// Let's delay the device connections at startup till the Qnx settings are loaded. // Let's delay the device connections at startup till the Qnx settings are loaded.
if (BlackBerryConfigurationManager::instance().apiLevels().isEmpty()) { if (BlackBerryConfigurationManager::instance()->apiLevels().isEmpty()) {
m_pendingDeviceConnections << device; m_pendingDeviceConnections << device;
connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()), connect(BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()),
this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection); this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection);
return; return;
} }
@@ -308,14 +308,14 @@ void BlackBerryDeviceConnectionManager::handleProcessOutput(const QString &outpu
void BlackBerryDeviceConnectionManager::processPendingDeviceConnections() void BlackBerryDeviceConnectionManager::processPendingDeviceConnections()
{ {
if (m_pendingDeviceConnections.isEmpty() if (m_pendingDeviceConnections.isEmpty()
|| BlackBerryConfigurationManager::instance().apiLevels().isEmpty()) || BlackBerryConfigurationManager::instance()->apiLevels().isEmpty())
return; return;
foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections) foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections)
connectDevice(device); connectDevice(device);
m_pendingDeviceConnections.clear(); m_pendingDeviceConnections.clear();
disconnect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()), disconnect(BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()),
this, SLOT(processPendingDeviceConnections())); this, SLOT(processPendingDeviceConnections()));
} }

View File

@@ -57,7 +57,7 @@ void BlackBerryDeviceListDetector::detectDeviceList()
return; return;
m_process->setEnvironment(Utils::EnvironmentItem::toStringList( m_process->setEnvironment(Utils::EnvironmentItem::toStringList(
BlackBerryConfigurationManager::instance().defaultConfigurationEnv())); BlackBerryConfigurationManager::instance()->defaultConfigurationEnv()));
const QString command = BlackBerryNdkProcess::resolveNdkToolPath(QLatin1String("blackberry-deploy")); const QString command = BlackBerryNdkProcess::resolveNdkToolPath(QLatin1String("blackberry-deploy"));
QStringList arguments; QStringList arguments;
arguments << QLatin1String("-devices"); arguments << QLatin1String("-devices");

View File

@@ -485,7 +485,7 @@ void BlackBerryInstallWizardProcessPage::processTarget()
// deactivate target if activated before uninstalling // deactivate target if activated before uninstalling
if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) { if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) {
foreach (BlackBerryApiLevelConfiguration *config, BlackBerryConfigurationManager::instance().apiLevels()) { foreach (BlackBerryApiLevelConfiguration *config, BlackBerryConfigurationManager::instance()->apiLevels()) {
if (m_data.target.contains((config->targetName())) && config->isActive()) { if (m_data.target.contains((config->targetName())) && config->isActive()) {
config->deactivate(); config->deactivate();
break; break;
@@ -521,13 +521,13 @@ void BlackBerryInstallWizardFinalPage::initializePage()
layout->addWidget(label); layout->addWidget(label);
if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) { if (m_data.mode == BlackBerryInstallerDataHandler::ManuallMode) {
BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance(); BlackBerryConfigurationManager *configManager = BlackBerryConfigurationManager::instance();
BlackBerryApiLevelConfiguration *config = BlackBerryApiLevelConfiguration *config =
configManager.apiLevelFromEnvFile(Utils::FileName::fromString(m_data.ndkPath)); configManager->apiLevelFromEnvFile(Utils::FileName::fromString(m_data.ndkPath));
if (!config) { if (!config) {
config = new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(m_data.ndkPath)); config = new BlackBerryApiLevelConfiguration(Utils::FileName::fromString(m_data.ndkPath));
if (!configManager.addApiLevel(config)) { if (!configManager->addApiLevel(config)) {
delete config; delete config;
// TODO: more explicit error message! // TODO: more explicit error message!
label->setText(tr("An error has occurred while adding target from:\n %1").arg(m_data.ndkPath)); label->setText(tr("An error has occurred while adding target from:\n %1").arg(m_data.ndkPath));

View File

@@ -162,9 +162,7 @@ void BlackBerryKeysWidget::updateCertificateSection()
if (m_utils.hasDefaultCertificate()) { if (m_utils.hasDefaultCertificate()) {
setCreateCertificateVisible(false); setCreateCertificateVisible(false);
BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance(); m_ui->certificatePath->setText(BlackBerryConfigurationManager::instance()->defaultKeystorePath());
m_ui->certificatePath->setText(configManager.defaultKeystorePath());
const BlackBerryCertificate *certificate = m_utils.defaultCertificate(); const BlackBerryCertificate *certificate = m_utils.defaultCertificate();
@@ -279,8 +277,6 @@ void BlackBerryKeysWidget::removeDebugToken()
void BlackBerryKeysWidget::updateDebugToken(const QStringList &pins) void BlackBerryKeysWidget::updateDebugToken(const QStringList &pins)
{ {
BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance();
bool ok; bool ok;
const QString cskPassword = m_utils.cskPassword(this, &ok); const QString cskPassword = m_utils.cskPassword(this, &ok);
if (!ok) if (!ok)
@@ -292,7 +288,7 @@ void BlackBerryKeysWidget::updateDebugToken(const QStringList &pins)
const QString debugTokenPath = m_dtModel->item(m_ui->debugTokens->currentIndex().row(), 0)->text(); const QString debugTokenPath = m_dtModel->item(m_ui->debugTokens->currentIndex().row(), 0)->text();
m_requester->requestDebugToken(debugTokenPath, m_requester->requestDebugToken(debugTokenPath,
cskPassword, configuration.defaultKeystorePath(), cskPassword, BlackBerryConfigurationManager::instance()->defaultKeystorePath(),
certificatePassword, pins.join(QLatin1String(","))); certificatePassword, pins.join(QLatin1String(",")));
} }

View File

@@ -46,7 +46,7 @@ BlackBerryNdkProcess::BlackBerryNdkProcess(const QString &command, QObject *pare
{ {
m_process->setProcessChannelMode(QProcess::MergedChannels); m_process->setProcessChannelMode(QProcess::MergedChannels);
m_process->setEnvironment(Utils::EnvironmentItem::toStringList( m_process->setEnvironment(Utils::EnvironmentItem::toStringList(
BlackBerryConfigurationManager::instance().defaultConfigurationEnv())); BlackBerryConfigurationManager::instance()->defaultConfigurationEnv()));
connect(m_process, SIGNAL(started()), this, SIGNAL(started())); connect(m_process, SIGNAL(started()), this, SIGNAL(started()));
connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)),
@@ -59,7 +59,7 @@ const QString BlackBerryNdkProcess::resolveNdkToolPath(const QString &tool)
{ {
QString toolPath; QString toolPath;
QList<Utils::EnvironmentItem> qnxEnv = QList<Utils::EnvironmentItem> qnxEnv =
BlackBerryConfigurationManager::instance().defaultConfigurationEnv(); BlackBerryConfigurationManager::instance()->defaultConfigurationEnv();
foreach (const Utils::EnvironmentItem &item, qnxEnv) { foreach (const Utils::EnvironmentItem &item, qnxEnv) {
if (item.name == QLatin1String("QNX_HOST") && !item.value.isEmpty()) { if (item.name == QLatin1String("QNX_HOST") && !item.value.isEmpty()) {
toolPath = item.value toolPath = item.value

View File

@@ -72,9 +72,7 @@ void BlackBerryNDKSettingsPage::apply()
config->deactivate(); config->deactivate();
} }
BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance(); BlackBerryConfigurationManager::instance()->setDefaultConfiguration(m_widget->defaultApiLevel());
manager.setDefaultConfiguration(m_widget->defaultApiLevel());
} }
void BlackBerryNDKSettingsPage::finish() void BlackBerryNDKSettingsPage::finish()

View File

@@ -64,7 +64,7 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
updateInfoTable(0); updateInfoTable(0);
m_activatedApiLevel << m_bbConfigManager.activeApiLevels(); m_activatedApiLevel << m_bbConfigManager->activeApiLevels();
m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch); m_ui->ndksTreeWidget->header()->setResizeMode(QHeaderView::Stretch);
m_ui->ndksTreeWidget->header()->setStretchLastSection(false); m_ui->ndksTreeWidget->header()->setStretchLastSection(false);
@@ -105,12 +105,12 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
connect(&m_timer, SIGNAL(timeout()), this, SLOT(updatePage())); connect(&m_timer, SIGNAL(timeout()), this, SLOT(updatePage()));
updatePage(); updatePage();
connect(&m_bbConfigManager, SIGNAL(settingsChanged()), &m_timer, SLOT(start())); connect(m_bbConfigManager, SIGNAL(settingsChanged()), &m_timer, SLOT(start()));
} }
bool BlackBerryNDKSettingsWidget::hasActiveNdk() const bool BlackBerryNDKSettingsWidget::hasActiveNdk() const
{ {
return !m_bbConfigManager.apiLevels().isEmpty(); return !m_bbConfigManager->apiLevels().isEmpty();
} }
QList<BlackBerryApiLevelConfiguration *> BlackBerryNDKSettingsWidget::activatedApiLevels() QList<BlackBerryApiLevelConfiguration *> BlackBerryNDKSettingsWidget::activatedApiLevels()
@@ -170,7 +170,7 @@ void BlackBerryNDKSettingsWidget::updateConfigurationList()
qDeleteAll(m_runtimes->takeChildren()); qDeleteAll(m_runtimes->takeChildren());
bool enableCleanUp = false; bool enableCleanUp = false;
foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager.apiLevels()) { foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager->apiLevels()) {
QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualApiLevel; QTreeWidgetItem *parent = config->isAutoDetected() ? m_autoDetectedNdks : m_manualApiLevel;
QTreeWidgetItem *item = new QTreeWidgetItem(parent); QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, config->displayName()); item->setText(0, config->displayName());
@@ -206,7 +206,7 @@ void BlackBerryNDKSettingsWidget::updateConfigurationList()
} }
} }
foreach (BlackBerryRuntimeConfiguration *runtime, m_bbConfigManager.runtimes()) { foreach (BlackBerryRuntimeConfiguration *runtime, m_bbConfigManager->runtimes()) {
QTreeWidgetItem *item = new QTreeWidgetItem(m_runtimes); QTreeWidgetItem *item = new QTreeWidgetItem(m_runtimes);
item->setText(0, runtime->displayName()); item->setText(0, runtime->displayName());
item->setData(0, Qt::UserRole, QVariant::fromValue(static_cast<void*>(runtime))); item->setData(0, Qt::UserRole, QVariant::fromValue(static_cast<void*>(runtime)));
@@ -250,7 +250,7 @@ void BlackBerryNDKSettingsWidget::removeConfiguration()
if (button == QMessageBox::Yes) { if (button == QMessageBox::Yes) {
m_activatedApiLevel.removeOne(config); m_activatedApiLevel.removeOne(config);
m_deactivatedApiLevel.removeOne(config); m_deactivatedApiLevel.removeOne(config);
m_bbConfigManager.removeApiLevel(config); m_bbConfigManager->removeApiLevel(config);
m_manualApiLevel->removeChild(m_ui->ndksTreeWidget->currentItem()); m_manualApiLevel->removeChild(m_ui->ndksTreeWidget->currentItem());
emit configurationsUpdated(); emit configurationsUpdated();
} }
@@ -353,11 +353,11 @@ void BlackBerryNDKSettingsWidget::uninstallConfiguration(BlackBerryInstallerData
void BlackBerryNDKSettingsWidget::cleanUp() void BlackBerryNDKSettingsWidget::cleanUp()
{ {
foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager.apiLevels()) { foreach (BlackBerryApiLevelConfiguration *config, m_bbConfigManager->apiLevels()) {
if (!config->isValid()) { if (!config->isValid()) {
m_activatedApiLevel.removeOne(config); m_activatedApiLevel.removeOne(config);
m_deactivatedApiLevel.removeOne(config); m_deactivatedApiLevel.removeOne(config);
m_bbConfigManager.removeApiLevel(config); m_bbConfigManager->removeApiLevel(config);
} }
} }
@@ -366,8 +366,8 @@ void BlackBerryNDKSettingsWidget::cleanUp()
void BlackBerryNDKSettingsWidget::handleInstallationFinished() void BlackBerryNDKSettingsWidget::handleInstallationFinished()
{ {
m_bbConfigManager.loadAutoDetectedApiLevels(); m_bbConfigManager->loadAutoDetectedApiLevels();
m_bbConfigManager.loadAutoDetectedRuntimes(); m_bbConfigManager->loadAutoDetectedRuntimes();
updateConfigurationList(); updateConfigurationList();
} }
@@ -380,7 +380,7 @@ void BlackBerryNDKSettingsWidget::handleUninstallationFinished()
if (current->parent() == m_runtimes) { if (current->parent() == m_runtimes) {
BlackBerryRuntimeConfiguration *runtime = static_cast<BlackBerryRuntimeConfiguration*>( BlackBerryRuntimeConfiguration *runtime = static_cast<BlackBerryRuntimeConfiguration*>(
current->data(0, Qt::UserRole).value<void*>()); current->data(0, Qt::UserRole).value<void*>());
m_bbConfigManager.removeRuntime(runtime); m_bbConfigManager->removeRuntime(runtime);
updateConfigurationList(); updateConfigurationList();
return; return;
} }
@@ -399,7 +399,7 @@ void BlackBerryNDKSettingsWidget::handleUninstallationFinished()
else if (m_deactivatedApiLevel.contains(config)) else if (m_deactivatedApiLevel.contains(config))
m_deactivatedApiLevel.removeAt(m_deactivatedApiLevel.indexOf(config)); m_deactivatedApiLevel.removeAt(m_deactivatedApiLevel.indexOf(config));
m_bbConfigManager.removeApiLevel(config); m_bbConfigManager->removeApiLevel(config);
updateConfigurationList(); updateConfigurationList();
} }
@@ -409,7 +409,7 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
// prevent QComboBox::currentIndexChanged() from being emitted // prevent QComboBox::currentIndexChanged() from being emitted
m_ui->apiLevelCombo->clear(); m_ui->apiLevelCombo->clear();
QList<BlackBerryApiLevelConfiguration*> configurations = m_bbConfigManager.apiLevels(); QList<BlackBerryApiLevelConfiguration*> configurations = m_bbConfigManager->apiLevels();
m_ui->apiLevelCombo->addItem(tr("Newest Version"), m_ui->apiLevelCombo->addItem(tr("Newest Version"),
QVariant::fromValue(static_cast<void*>(0))); QVariant::fromValue(static_cast<void*>(0)));
@@ -419,7 +419,7 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
int configIndex = 0; int configIndex = 0;
BlackBerryApiLevelConfiguration *defaultConfig = m_bbConfigManager.defaultApiLevel(); BlackBerryApiLevelConfiguration *defaultConfig = m_bbConfigManager->defaultApiLevel();
foreach (BlackBerryApiLevelConfiguration *config, configurations) { foreach (BlackBerryApiLevelConfiguration *config, configurations) {
m_ui->apiLevelCombo->addItem(config->displayName(), m_ui->apiLevelCombo->addItem(config->displayName(),
@@ -429,7 +429,7 @@ void BlackBerryNDKSettingsWidget::populateDefaultConfigurationCombo()
configIndex = m_ui->apiLevelCombo->count() - 1; configIndex = m_ui->apiLevelCombo->count() - 1;
} }
const int currentIndex = (m_bbConfigManager.newestApiLevelEnabled()) ? 0 : configIndex; const int currentIndex = (m_bbConfigManager->newestApiLevelEnabled()) ? 0 : configIndex;
m_ui->apiLevelCombo->setCurrentIndex(currentIndex); m_ui->apiLevelCombo->setCurrentIndex(currentIndex);
} }

View File

@@ -86,7 +86,7 @@ private:
const QString& tagetVersion = QString()); const QString& tagetVersion = QString());
Ui_BlackBerryNDKSettingsWidget *m_ui; Ui_BlackBerryNDKSettingsWidget *m_ui;
BlackBerryConfigurationManager &m_bbConfigManager; BlackBerryConfigurationManager *m_bbConfigManager;
QTreeWidgetItem *m_apiLevels; QTreeWidgetItem *m_apiLevels;
QTreeWidgetItem *m_runtimes; QTreeWidgetItem *m_runtimes;

View File

@@ -66,7 +66,7 @@ bool BlackBerryPotentialKit::isEnabled() const
bool BlackBerryPotentialKit::shouldShow() bool BlackBerryPotentialKit::shouldShow()
{ {
QList<BlackBerryApiLevelConfiguration *> configs = QList<BlackBerryApiLevelConfiguration *> configs =
BlackBerryConfigurationManager::instance().apiLevels(); BlackBerryConfigurationManager::instance()->apiLevels();
if (configs.isEmpty()) if (configs.isEmpty())
return false; // do not display when we do not have any BlackBerry API Level registered return false; // do not display when we do not have any BlackBerry API Level registered
foreach (BlackBerryApiLevelConfiguration *config, configs) { foreach (BlackBerryApiLevelConfiguration *config, configs) {
@@ -104,7 +104,7 @@ BlackBerryPotentialKitWidget::BlackBerryPotentialKitWidget(QWidget *parent)
layout->addWidget(openOptions, 1, 1); layout->addWidget(openOptions, 1, 1);
connect(openOptions, SIGNAL(clicked()), this, SLOT(openOptions())); connect(openOptions, SIGNAL(clicked()), this, SLOT(openOptions()));
connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsChanged()), connect(BlackBerryConfigurationManager::instance(), SIGNAL(settingsChanged()),
this, SLOT(recheck())); this, SLOT(recheck()));
} }

View File

@@ -129,7 +129,7 @@ APILevelSetupItem::APILevelSetupItem(QWidget *parent)
" for building BlackBerry applications."), parent) " for building BlackBerry applications."), parent)
{ {
validate(); validate();
connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsChanged()), connect(BlackBerryConfigurationManager::instance(), SIGNAL(settingsChanged()),
this, SLOT(validateLater())); this, SLOT(validateLater()));
} }
@@ -158,7 +158,7 @@ void APILevelSetupItem::fix()
installAPILevel(); installAPILevel();
} else if (!found.testFlag(Active)) { } else if (!found.testFlag(Active)) {
foreach (BlackBerryApiLevelConfiguration *config, foreach (BlackBerryApiLevelConfiguration *config,
BlackBerryConfigurationManager::instance().apiLevels()) { BlackBerryConfigurationManager::instance()->apiLevels()) {
if (config->isValid() && !config->isActive()) { if (config->isValid() && !config->isActive()) {
config->activate(); config->activate();
break; break;
@@ -168,7 +168,7 @@ void APILevelSetupItem::fix()
// TODO: install filter for 10.2 only // TODO: install filter for 10.2 only
installAPILevel(); installAPILevel();
} else if (!found.testFlag(V_10_2_AS_DEFAULT)) { } else if (!found.testFlag(V_10_2_AS_DEFAULT)) {
BlackBerryConfigurationManager::instance().setDefaultConfiguration(0); BlackBerryConfigurationManager::instance()->setDefaultConfiguration(0);
} }
} }
@@ -179,7 +179,7 @@ APILevelSetupItem::FoundTypes APILevelSetupItem::resolvedFoundType()
// TODO: for now, all Trunk versions are understood as 10.2 compliant // TODO: for now, all Trunk versions are understood as 10.2 compliant
BlackBerryVersionNumber version_10_2(QLatin1String("10.2.0.0")); BlackBerryVersionNumber version_10_2(QLatin1String("10.2.0.0"));
foreach (BlackBerryApiLevelConfiguration *config, foreach (BlackBerryApiLevelConfiguration *config,
BlackBerryConfigurationManager::instance().apiLevels()) { BlackBerryConfigurationManager::instance()->apiLevels()) {
found |= Any; found |= Any;
if (config->isValid()) { if (config->isValid()) {
found |= Valid; found |= Valid;
@@ -191,7 +191,7 @@ APILevelSetupItem::FoundTypes APILevelSetupItem::resolvedFoundType()
} }
BlackBerryApiLevelConfiguration *config = BlackBerryApiLevelConfiguration *config =
BlackBerryConfigurationManager::instance().defaultApiLevel(); BlackBerryConfigurationManager::instance()->defaultApiLevel();
if (config && config->version() > version_10_2) if (config && config->version() > version_10_2)
found |= V_10_2_AS_DEFAULT; found |= V_10_2_AS_DEFAULT;
@@ -211,7 +211,7 @@ void APILevelSetupItem::handleInstallationFinished()
{ {
// manually-added API Levels are automatically registered by BlackBerryInstallWizard // manually-added API Levels are automatically registered by BlackBerryInstallWizard
// auto-detected API Levels needs to reloaded explicitly // auto-detected API Levels needs to reloaded explicitly
BlackBerryConfigurationManager::instance().loadAutoDetectedApiLevels(); BlackBerryConfigurationManager::instance()->loadAutoDetectedApiLevels();
validate(); validate();
} }
@@ -231,7 +231,7 @@ void SigningKeysSetupItem::validate()
set(Error, tr("Found legacy BlackBerry signing keys."), tr("Update")); set(Error, tr("Found legacy BlackBerry signing keys."), tr("Update"));
else if (!utils.hasRegisteredKeys()) else if (!utils.hasRegisteredKeys())
set(Error, tr("Cannot find BlackBerry signing keys."), tr("Request")); set(Error, tr("Cannot find BlackBerry signing keys."), tr("Request"));
else if (!QFileInfo(BlackBerryConfigurationManager::instance().defaultKeystorePath()).exists()) else if (!QFileInfo(BlackBerryConfigurationManager::instance()->defaultKeystorePath()).exists())
set(Error, tr("Cannot find developer certificate."), tr("Create")); set(Error, tr("Cannot find developer certificate."), tr("Create"));
else if (utils.defaultCertificateOpeningStatus() != BlackBerrySigningUtils::Opened) else if (utils.defaultCertificateOpeningStatus() != BlackBerrySigningUtils::Opened)
set(Info, tr("Developer certificate is not opened."), tr("Open")); set(Info, tr("Developer certificate is not opened."), tr("Open"));
@@ -246,7 +246,7 @@ void SigningKeysSetupItem::fix()
QDesktopServices::openUrl(QUrl(QLatin1String(Qnx::Constants::QNX_LEGACY_KEYS_URL))); QDesktopServices::openUrl(QUrl(QLatin1String(Qnx::Constants::QNX_LEGACY_KEYS_URL)));
} else if (!utils.hasRegisteredKeys()) { } else if (!utils.hasRegisteredKeys()) {
QDesktopServices::openUrl(QUrl(QLatin1String(Qnx::Constants::QNX_REGISTER_KEYS_URL))); QDesktopServices::openUrl(QUrl(QLatin1String(Qnx::Constants::QNX_REGISTER_KEYS_URL)));
} else if (!QFileInfo(BlackBerryConfigurationManager::instance().defaultKeystorePath()).exists()) { } else if (!QFileInfo(BlackBerryConfigurationManager::instance()->defaultKeystorePath()).exists()) {
set(Info, tr("Opening certificate...")); set(Info, tr("Opening certificate..."));
utils.createCertificate(); utils.createCertificate();
} else if (utils.defaultCertificateOpeningStatus() != BlackBerrySigningUtils::Opened) { } else if (utils.defaultCertificateOpeningStatus() != BlackBerrySigningUtils::Opened) {

View File

@@ -68,27 +68,21 @@ BlackBerrySigningUtils::BlackBerrySigningUtils(QObject *parent) :
bool BlackBerrySigningUtils::hasRegisteredKeys() bool BlackBerrySigningUtils::hasRegisteredKeys()
{ {
BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance(); QFileInfo cskFile(BlackBerryConfigurationManager::instance()->idTokenPath());
QFileInfo cskFile(configuration.idTokenPath());
return cskFile.exists(); return cskFile.exists();
} }
bool BlackBerrySigningUtils::hasLegacyKeys() bool BlackBerrySigningUtils::hasLegacyKeys()
{ {
BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance(); QFileInfo cskFile(BlackBerryConfigurationManager::instance()->barsignerCskPath());
QFileInfo cskFile(configuration.barsignerCskPath());
return cskFile.exists(); return cskFile.exists();
} }
bool BlackBerrySigningUtils::hasDefaultCertificate() bool BlackBerrySigningUtils::hasDefaultCertificate()
{ {
BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance(); QFileInfo keystore(BlackBerryConfigurationManager::instance()->defaultKeystorePath());
QFileInfo keystore(configuration.defaultKeystorePath());
return keystore.exists(); return keystore.exists();
} }
@@ -146,12 +140,10 @@ void BlackBerrySigningUtils::openDefaultCertificate(QWidget *passwordPromptParen
return; return;
} }
BlackBerryConfigurationManager &configManager = BlackBerryConfigurationManager::instance();
if (m_defaultCertificate) if (m_defaultCertificate)
m_defaultCertificate->deleteLater(); m_defaultCertificate->deleteLater();
m_defaultCertificate = new BlackBerryCertificate(configManager.defaultKeystorePath(), m_defaultCertificate = new BlackBerryCertificate(BlackBerryConfigurationManager::instance()->defaultKeystorePath(),
QString(), password, this); QString(), password, this);
connect(m_defaultCertificate, SIGNAL(finished(int)), this, SLOT(certificateLoaded(int))); connect(m_defaultCertificate, SIGNAL(finished(int)), this, SLOT(certificateLoaded(int)));
@@ -186,9 +178,7 @@ void BlackBerrySigningUtils::deleteDefaultCertificate()
m_defaultCertificate = 0; m_defaultCertificate = 0;
m_defaultCertificateStatus = NotOpened; m_defaultCertificateStatus = NotOpened;
BlackBerryConfigurationManager &configuration = BlackBerryConfigurationManager::instance(); QFile::remove(BlackBerryConfigurationManager::instance()->defaultKeystorePath());
QFile::remove(configuration.defaultKeystorePath());
} }
QStringList BlackBerrySigningUtils::debugTokens() const QStringList BlackBerrySigningUtils::debugTokens() const

View File

@@ -93,6 +93,7 @@ bool QNXPlugin::initialize(const QStringList &arguments, QString *errorString)
Q_UNUSED(errorString) Q_UNUSED(errorString)
// Handles BlackBerry // Handles BlackBerry
addAutoReleasedObject(new BlackBerryConfigurationManager);
addAutoReleasedObject(new BlackBerryQtVersionFactory); addAutoReleasedObject(new BlackBerryQtVersionFactory);
addAutoReleasedObject(new BlackBerryDeployConfigurationFactory); addAutoReleasedObject(new BlackBerryDeployConfigurationFactory);
addAutoReleasedObject(new BlackBerryDeviceConfigurationFactory); addAutoReleasedObject(new BlackBerryDeviceConfigurationFactory);
@@ -134,7 +135,8 @@ bool QNXPlugin::initialize(const QStringList &arguments, QString *errorString)
} }
addAutoReleasedObject(new BarDescriptorEditorFactory); addAutoReleasedObject(new BarDescriptorEditorFactory);
connect(ProjectExplorer::KitManager::instance(), SIGNAL(kitsLoaded()), &BlackBerryConfigurationManager::instance(), SLOT(loadSettings())); connect(ProjectExplorer::KitManager::instance(), SIGNAL(kitsLoaded()),
BlackBerryConfigurationManager::instance(), SLOT(loadSettings()));
return true; return true;
} }
@@ -479,12 +481,12 @@ void QNXPlugin::testConfigurationManager_data()
void QNXPlugin::testConfigurationManager() void QNXPlugin::testConfigurationManager()
{ {
BlackBerryConfigurationManager &manager = BlackBerryConfigurationManager::instance(); BlackBerryConfigurationManager *manager = BlackBerryConfigurationManager::instance();
QCOMPARE(manager.apiLevels().count(), 0); QCOMPARE(manager->apiLevels().count(), 0);
QCOMPARE(manager.activeApiLevels().count(), 0); QCOMPARE(manager->activeApiLevels().count(), 0);
QCOMPARE(manager.defaultApiLevel(), static_cast<BlackBerryApiLevelConfiguration*>(0)); QCOMPARE(manager->defaultApiLevel(), static_cast<BlackBerryApiLevelConfiguration*>(0));
QVERIFY(manager.newestApiLevelEnabled()); QVERIFY(manager->newestApiLevelEnabled());
QFETCH(QVariantMap, newerConfiguration); QFETCH(QVariantMap, newerConfiguration);
QFETCH(QVariantMap, olderConfiguration); QFETCH(QVariantMap, olderConfiguration);
@@ -495,32 +497,32 @@ void QNXPlugin::testConfigurationManager()
BlackBerryApiLevelConfiguration *oldConfig = BlackBerryApiLevelConfiguration *oldConfig =
new BlackBerryApiLevelConfiguration(olderConfiguration); new BlackBerryApiLevelConfiguration(olderConfiguration);
QVERIFY(manager.addApiLevel(oldConfig)); QVERIFY(manager->addApiLevel(oldConfig));
QVERIFY(manager.newestApiLevelEnabled()); QVERIFY(manager->newestApiLevelEnabled());
QCOMPARE(manager.defaultApiLevel(), oldConfig); QCOMPARE(manager->defaultApiLevel(), oldConfig);
manager.setDefaultConfiguration(oldConfig); manager->setDefaultConfiguration(oldConfig);
QCOMPARE(manager.defaultApiLevel(), oldConfig); QCOMPARE(manager->defaultApiLevel(), oldConfig);
QCOMPARE(manager.apiLevels().first(), oldConfig); QCOMPARE(manager->apiLevels().first(), oldConfig);
QVERIFY(!manager.newestApiLevelEnabled()); QVERIFY(!manager->newestApiLevelEnabled());
QVERIFY(manager.addApiLevel(newerConfig)); QVERIFY(manager->addApiLevel(newerConfig));
QCOMPARE(manager.apiLevels().first(), newerConfig); QCOMPARE(manager->apiLevels().first(), newerConfig);
QCOMPARE(manager.defaultApiLevel(), oldConfig); QCOMPARE(manager->defaultApiLevel(), oldConfig);
manager.setDefaultConfiguration(0); manager->setDefaultConfiguration(0);
QVERIFY(manager.newestApiLevelEnabled()); QVERIFY(manager->newestApiLevelEnabled());
QCOMPARE(manager.defaultApiLevel(), newerConfig); QCOMPARE(manager->defaultApiLevel(), newerConfig);
manager.setDefaultConfiguration(oldConfig); manager->setDefaultConfiguration(oldConfig);
manager.removeApiLevel(oldConfig); manager->removeApiLevel(oldConfig);
QCOMPARE(manager.defaultApiLevel(), newerConfig); QCOMPARE(manager->defaultApiLevel(), newerConfig);
QVERIFY(manager.newestApiLevelEnabled()); QVERIFY(manager->newestApiLevelEnabled());
manager.removeApiLevel(newerConfig); manager->removeApiLevel(newerConfig);
QCOMPARE(manager.defaultApiLevel(), static_cast<BlackBerryApiLevelConfiguration*>(0)); QCOMPARE(manager->defaultApiLevel(), static_cast<BlackBerryApiLevelConfiguration*>(0));
QVERIFY(manager.newestApiLevelEnabled()); QVERIFY(manager->newestApiLevelEnabled());
} }
#endif #endif

View File

@@ -87,8 +87,8 @@ ToolChainConfigWidget *QnxToolChain::configurationWidget()
void QnxToolChain::addToEnvironment(Utils::Environment &env) const void QnxToolChain::addToEnvironment(Utils::Environment &env) const
{ {
foreach (BlackBerryApiLevelConfiguration* config, foreach (BlackBerryApiLevelConfiguration *config,
BlackBerryConfigurationManager::instance().apiLevels()) { BlackBerryConfigurationManager::instance()->apiLevels()) {
if (config->gccCompiler() == compilerCommand()) { if (config->gccCompiler() == compilerCommand()) {
setQnxEnvironment(env, config->qnxEnv()); setQnxEnvironment(env, config->qnxEnv());
break; break;