diff -r 7333d7932ef7 -r 8b7f4e561641 appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.cpp --- a/appinstaller/AppinstUi/sisxsifplugin/tsrc/testinstaller/testinstaller.cpp Tue Aug 31 15:21:33 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,475 +0,0 @@ -/* -* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Test installer that uses Usif::RSoftwareInstall API. -* -*/ - -#include "testinstaller.h" -#include "activerunner.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // XQApplicationManager -#include // RSoftwareComponentRegistry - -using namespace Usif; - -#define INSTALLS_PATH_1 "C:\\Data\\Installs\\" -#define INSTALLS_PATH_2 "E:\\Installs\\" -#define INSTALLS_PATH_3 "F:\\Installs\\" -#define INSTALLS_PATH_4 "C:\\" -#define INSTALLS_PATH_5 "E:\\" -#define INSTALLS_PATH_6 "F:\\" - - -TestInstaller::TestInstaller(int& argc, char* argv[]) : HbApplication(argc, argv), - mMainWindow(0), mInstallView(0), mRemoveView(0), - mUseSilentInstall(false), mUseSilentUninstall(false), mUseRFileInstall(false), mOcsp(false), - mInstallDirectories(0), mInstallableFiles(0), mRemovableApps(0), - mCurrentDirPath(), mCurrentFile(), mRunner(0) -{ - mMainWindow = new HbMainWindow(); - - // Install view - mInstallView = new HbView(); - mInstallView->setTitle(tr("Test Installer")); - - QGraphicsLinearLayout *installLayout = new QGraphicsLinearLayout(Qt::Vertical); - - HbLabel *installTitle = new HbLabel(tr("Install:")); - installLayout->addItem(installTitle); - - mInstallDirectories = new HbComboBox; - mInstallDirectories->setEditable(false); - QStringList dirList; - getInstallDirs(dirList); - mInstallDirectories->setItems(dirList); - connect(mInstallDirectories, SIGNAL(currentIndexChanged(int)), - this, SLOT(installableDirChanged(int))); - installLayout->addItem(mInstallDirectories); - - mInstallableFiles = new HbComboBox; - mInstallableFiles->setEditable(false); - connect(mInstallableFiles, SIGNAL(currentIndexChanged(int)), - this, SLOT(installableFileChanged(int))); - installLayout->addItem(mInstallableFiles); - - QGraphicsLinearLayout *checkboxesLayout = new QGraphicsLinearLayout(Qt::Horizontal); - HbCheckBox *silentInstallCheckBox = new HbCheckBox; - silentInstallCheckBox->setText(tr("Silent")); - connect(silentInstallCheckBox, SIGNAL(stateChanged(int)), - this, SLOT(silentInstallCheckChanged(int))); - checkboxesLayout->addItem(silentInstallCheckBox); - HbCheckBox *rfileCheckBox = new HbCheckBox; - rfileCheckBox->setText(tr("Use RFile")); - connect(rfileCheckBox, SIGNAL(stateChanged(int)), this, SLOT(rfileCheckChanged(int))); - checkboxesLayout->addItem(rfileCheckBox); - HbCheckBox *ocspCheckBox = new HbCheckBox; - ocspCheckBox->setText(tr("OCSP")); - connect(ocspCheckBox, SIGNAL(stateChanged(int)), this, SLOT(ocspCheckChanged(int))); - checkboxesLayout->addItem(ocspCheckBox); - installLayout->addItem(checkboxesLayout); - installLayout->addStretch(); - - HbPushButton *installNew = new HbPushButton(tr("Install using new API")); - installLayout->addItem(installNew); - HbPushButton *installOld = new HbPushButton(tr("Install using old API")); - installLayout->addItem(installOld); - HbPushButton *launchApp = new HbPushButton(tr("Install by opening file")); - installLayout->addItem(launchApp); - HbPushButton *cancelInstall = new HbPushButton(tr("Cancel installing")); - installLayout->addItem(cancelInstall); - installLayout->addStretch(); - connect(installNew, SIGNAL(clicked()), this, SLOT(installUsingNewApi())); - connect(installOld, SIGNAL(clicked()), this, SLOT(installUsingOldApi())); - connect(launchApp, SIGNAL(clicked()), this, SLOT(installByOpeningFile())); - connect(cancelInstall, SIGNAL(clicked()), this, SLOT(cancelInstalling())); - - HbToolBar *installToolBar = new HbToolBar(); - installToolBar->addAction(tr("RemoveView"), this, SLOT(removeViewActivated())); - installToolBar->addAction(tr("Exit"), this, SLOT(closeApp())); - mInstallView->setToolBar(installToolBar); - - mInstallView->setLayout(installLayout); - mMainWindow->addView(mInstallView); - - // Remove view - mRemoveView = new HbView(); - mRemoveView->setTitle(tr("Test Uninstaller")); - - QGraphicsLinearLayout *removeLayout = new QGraphicsLinearLayout(Qt::Vertical); - - HbLabel *uninstallTitle = new HbLabel(tr("Uninstall:")); - removeLayout->addItem(uninstallTitle); - - mRemovableApps = new HbComboBox; - mRemovableApps->setEditable(false); - removeLayout->addItem(mRemovableApps); - - HbCheckBox *silentRemoveCheckBox = new HbCheckBox; - silentRemoveCheckBox->setText(tr("Silent")); - connect(silentRemoveCheckBox, SIGNAL(stateChanged(int)), - this, SLOT(silentCheckChanged(int))); - removeLayout->addItem(silentRemoveCheckBox); - removeLayout->addStretch(); - - HbPushButton *removeNew = new HbPushButton(tr("Remove using new API")); - removeLayout->addItem(removeNew); - HbPushButton *removeOld = new HbPushButton(tr("Remove using old API")); - removeLayout->addItem(removeOld); - removeLayout->addStretch(); - connect(removeNew, SIGNAL(clicked()), this, SLOT(removeUsingNewApi())); - connect(removeOld, SIGNAL(clicked()), this, SLOT(removeUsingOldApi())); - - mRemoveView->setLayout(removeLayout); - mMainWindow->addView(mRemoveView); - - HbToolBar *removeToolBar = new HbToolBar(); - removeToolBar->addAction(tr("InstallView"), this, SLOT(installViewActivated())); - removeToolBar->addAction(tr("Exit"), this, SLOT(closeApp())); - mRemoveView->setToolBar(removeToolBar); - - mMainWindow->setCurrentView(mInstallView); - mMainWindow->show(); - - changeDir(mInstallDirectories->currentText()); - getRemovableApps(); -} - -TestInstaller::~TestInstaller() -{ - delete mRunner; - delete mInstallView; - delete mRemoveView; - delete mMainWindow; -} - -void TestInstaller::installViewActivated() -{ - mMainWindow->setCurrentView(mInstallView); -} - -void TestInstaller::removeViewActivated() -{ - mMainWindow->setCurrentView(mRemoveView); -} - -void TestInstaller::silentInstallCheckChanged(int state) -{ - Qt::CheckState s = static_cast(state); - mUseSilentInstall = (s == Qt::Checked); -} - -void TestInstaller::silentRemoveCheckChanged(int state) -{ - Qt::CheckState s = static_cast(state); - mUseSilentUninstall = (s == Qt::Checked); -} - -void TestInstaller::rfileCheckChanged(int state) -{ - Qt::CheckState s = static_cast(state); - mUseRFileInstall = (s == Qt::Checked); -} - -void TestInstaller::ocspCheckChanged(int state) -{ - Qt::CheckState s = static_cast(state); - mOcsp = (s == Qt::Checked); -} - -void TestInstaller::installableDirChanged(int /*index*/) -{ - if (mInstallDirectories) { - changeDir(mInstallDirectories->currentText()); - } -} - -void TestInstaller::installableFileChanged(int /*index*/) -{ - if (mInstallableFiles) { - mCurrentFile = mCurrentDirPath; - mCurrentFile.append(mInstallableFiles->currentText()); - } -} - -void TestInstaller::installUsingNewApi() -{ - if (isFileSelected() && createRunner(true)) { - doInstall(mCurrentFile); - } -} - -void TestInstaller::installUsingOldApi() -{ - if (isFileSelected() && createRunner(false)) { - doInstall(mCurrentFile); - } -} - -void TestInstaller::installByOpeningFile() -{ - if (mInstallableFiles) { - doOpenFile(mCurrentFile); - } -} - -void TestInstaller::cancelInstalling() -{ - if (mRunner) { - delete mRunner; - mRunner = 0; - HbMessageBox::warning(tr("Running operation deleted")); - } else { - HbMessageBox::warning(tr("No operation running")); - } -} - -void TestInstaller::removeUsingNewApi() -{ - if (isFileSelected() && createRunner(true)) { - removeSelectedUsingNewApi(); - } -} - -void TestInstaller::removeUsingOldApi() -{ - if (isFileSelected() && createRunner(false)) { - removeSelectedUsingOldApi(); - } -} - -void TestInstaller::handleComplete() -{ - HbMessageBox::information(tr("Completed")); - - delete mRunner; - mRunner = 0; - - changeDir(mCurrentDirPath); - getRemovableApps(); -} - -void TestInstaller::handleError(int error) -{ - QString messageText; - if (error == KErrCancel) { - messageText = tr("Cancelled"); - } else { - messageText = tr("Error %1").arg(error); - } - HbMessageBox::warning(messageText); - - delete mRunner; - mRunner = 0; -} - -void TestInstaller::closeApp() -{ - qApp->exit(); -} - -void TestInstaller::fileOpenOk(const QVariant &/*result*/) -{ - HbMessageBox::information(tr("Open ok")); -} - -void TestInstaller::fileOpenFailed(int errorCode, const QString &errorMsg) -{ - HbMessageBox::warning(tr("Open failed: %1: %2").arg(errorCode).arg(errorMsg)); -} - -void TestInstaller::getInstallDirs(QStringList& dirList) -{ - QStringList possibleDirs; - possibleDirs << INSTALLS_PATH_1 << INSTALLS_PATH_2 << INSTALLS_PATH_3 - << INSTALLS_PATH_4 << INSTALLS_PATH_5 << INSTALLS_PATH_6; - - QListIterator iter(possibleDirs); - while (iter.hasNext()) { - QString dirName(iter.next()); - QDir dir(dirName); - if (dir.exists()) { - dirList.append(dirName); - } - } -} - -void TestInstaller::changeDir(const QString& dirPath) -{ - QDir dir(dirPath); - if (dir.exists()) { - mCurrentDirPath = dirPath; - mInstallableFiles->clear(); - - QFileInfoList list = dir.entryInfoList(QDir::Files); - QListIterator iter(list); - while (iter.hasNext()) { - const QFileInfo &info(iter.next()); - mInstallableFiles->addItem(info.fileName()); - } - - mCurrentFile.clear(); - if (mInstallableFiles->count()) { - mCurrentFile = mCurrentDirPath; - mCurrentFile.append(mInstallableFiles->currentText()); - } - } -} - -void TestInstaller::getRemovableApps() -{ - TRAP_IGNORE(doGetRemovableAppsL()); -} - -void TestInstaller::doGetRemovableAppsL() -{ - mRemovableApps->clear(); - mRemovableComponentIds.clear(); - mRemovableUids.clear(); - mRemovableSoftwareTypes.clear(); - - RSoftwareComponentRegistry registry; - User::LeaveIfError(registry.Connect()); - CleanupClosePushL(registry); - - RArray componentIdList; - CleanupClosePushL( componentIdList ); - registry.GetComponentIdsL(componentIdList); - for (int i = 0; i < componentIdList.Count(); ++i) { - TComponentId compId = componentIdList[i]; - CComponentEntry *compEntry = CComponentEntry::NewLC(); - if (registry.GetComponentL(compId, *compEntry)) { - if (compEntry->IsRemovable()) { - TPtrC compName = compEntry->Name(); - QString name = QString::fromUtf16(compName.Ptr(), compName.Length()); - mRemovableApps->addItem(name); - - mRemovableComponentIds.append(compId); - - _LIT(KCompUid, "CompUid"); - CPropertyEntry *property = registry.GetComponentPropertyL(compId, KCompUid); - CleanupStack::PushL(property); - CIntPropertyEntry* intProperty = dynamic_cast(property); - mRemovableUids.append(TUid::Uid(intProperty->IntValue())); - CleanupStack::PopAndDestroy(property); - - TPtrC softwareType = compEntry->SoftwareType(); - if (softwareType == KSoftwareTypeNative) { - mRemovableSoftwareTypes.append(Native); - } else if (softwareType == KSoftwareTypeJava) { - mRemovableSoftwareTypes.append(Java); - } else { - mRemovableSoftwareTypes.append(Unknown); - } - } - } - CleanupStack::PopAndDestroy(compEntry); - } - - CleanupStack::PopAndDestroy(2, ®istry); // componentIdList, registry -} - -bool TestInstaller::isFileSelected() -{ - if (mCurrentFile.isEmpty()) { - HbMessageBox::warning(tr("No files selected")); - changeDir(mCurrentDirPath); - return false; - } - return true; -} - -bool TestInstaller::createRunner(bool useSif) -{ - if (!mRunner) { - mRunner = new ActiveRunner(useSif); - connect(mRunner, SIGNAL(opCompleted()), this, SLOT(handleComplete())); - connect(mRunner, SIGNAL(opFailed(int)), this, SLOT(handleError(int))); - } else { - HbMessageBox::warning(tr("Already running")); - return false; - } - return true; -} - -void TestInstaller::doInstall(const QString &fileName) -{ - if (mRunner) { - mRunner->install(fileName, mUseSilentInstall, mUseRFileInstall, mOcsp ); - } -} - -void TestInstaller::doOpenFile(const QString &fileName) -{ - QFile file(fileName); - if (file.exists()) { - XQApplicationManager appManager; - XQAiwRequest *request = appManager.create(file); - if (request) { - connect(request, SIGNAL(requestOk(const QVariant &)), - this, SLOT(fileOpenOk(const QVariant &))); - connect(request, SIGNAL(requestError(int, const QString &)), - this, SLOT(fileOpenFailed(int, const QString &))); - QList args; - args << file.fileName(); - request->setArguments(args); - if (request->send()) { - HbMessageBox::information(tr("Opening...")); - } else { - HbMessageBox::warning(tr("Cannot open")); - } - delete request; - } else { - HbMessageBox::warning(tr("No handler for file '%1'").arg(fileName)); - } - } -} - -void TestInstaller::removeSelectedUsingNewApi() -{ - if (mRemovableApps && mRunner) { - int index = mRemovableApps->currentIndex(); - const TComponentId &compId(mRemovableComponentIds.at(index)); - mRunner->remove(compId, mUseSilentUninstall); - } -} - -void TestInstaller::removeSelectedUsingOldApi() -{ - if (mRemovableApps && mRunner) { - int index = mRemovableApps->currentIndex(); - const TUid &uid(mRemovableUids.at(index)); - - if (mRemovableSoftwareTypes.at(index) == Native) { - _LIT8(KSisxMimeType, "x-epoc/x-sisx-app"); - mRunner->remove(uid, KSisxMimeType, mUseSilentInstall); - } else if (mRemovableSoftwareTypes.at(index) == Java) { - _LIT8(KJarMIMEType, "application/java-archive"); - mRunner->remove(uid, KJarMIMEType, mUseSilentInstall); - } else { - HbMessageBox::warning(tr("Not supported software type")); - delete mRunner; - mRunner = 0; - } - } -} -