diff -r 7d88c1eb7da3 -r 751cd8585b82 applicationmanagement/server/src/appmgmtdownloadmgr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applicationmanagement/server/src/appmgmtdownloadmgr.cpp Thu Jul 22 16:30:53 2010 +0100 @@ -0,0 +1,933 @@ +/* + * Copyright (c) 2000 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: Implementation of applicationmanagement components + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ApplicationManagementUtility.h" +#include "debug.h" +#include "dmcommon.h" +#include "amstorage.h" +#include "appmgmtnotifier.h" +#include "appmgmtdownloadmgr.h" +#include "ServicePluginLogger.h" +using namespace NApplicationManagement; + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::appmgmtdownloadmgr +// ------------------------------------------------------------------------------------------------ +appmgmtdownloadmgr::appmgmtdownloadmgr(QWidget* parent, + MDownloadMgrQTCallback& callback,TRequestStatus& aStatus) : + QWidget(parent), m_callback(callback), iStatus(aStatus) + { + iProgressNote = NULL; + iSetFinalValue = 0; + iProgressCancelled = 0; + iDialogAccepted = 0; + mEndReported = 0; + mNetworkLoss = 0; + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::~appmgmtdownloadmgr +// ------------------------------------------------------------------------------------------------ +appmgmtdownloadmgr::~appmgmtdownloadmgr() + { + if (iProgressNote) + { + iProgressNote->closeAMProgDialog(); + delete iProgressNote; + iProgressNote = 0; + } + if(mNote) + { + delete mNote; + mNote=0; + } + + delete iFileName; + + delete iContentType; + + delete iURI; + delete iComp; + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::startDownload +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::startDownload(CDeploymentComponent *aComponent) + { + + RDEBUG( "appmgmtdownloadmgr::startDownload Start" ); + + QString m_appName = "ApplicationManagementServer"; + + iComp = aComponent; + iDownloadManager = new DownloadManager(m_appName); + // initialise the downloads of the last session + + connect(iDownloadManager, + SIGNAL(downloadManagerEvent(DownloadManagerEvent *)), this, + SLOT(downloadMgrEventRecieved(DownloadManagerEvent *))); + + iDownloadManager->initialize(); + + DownloadType m_type = Parallel; + + DownloadPriority m_priority = High; + #ifdef __WINS__ + iDownloadManager->setProxy("bswebproxy01.americas.nokia.com", 8080); + #endif + TBuf buf; + buf.Copy(aComponent->DownloadURI()); + + QString url((QChar*) buf.Ptr(), buf.Length()); + + TInt silentsession = 0; + RProperty::Get(KPSUidNSmlSOSServerKey,KNSmlDMSilentJob,silentsession); + + CApplicationManagementUtility::iSilentSession = silentsession; + + iDl = iDownloadManager->createDownload(url, m_type); + + bool t = connect(iDl, SIGNAL(downloadEvent(DownloadEvent *)), this, + SLOT(downloadEventRecieved(DownloadEvent *))); + + if (!iDl) + return; + + QString path("c:\\system\\appmgr\\"); + + iDl->setAttribute(Priority, m_priority); + iDl->setAttribute(DestinationPath, path); + iDl->start(); + + iOperationType = aComponent->DownloadTarget(); + + RDEBUG( "appmgmtdownloadmgr::startDownload End" ); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::convertSize +// ------------------------------------------------------------------------------------------------ +QString appmgmtdownloadmgr::convertSize() + { + RDEBUG( "appmgmtdownloadmgr::convertSize Start" ); + TBuf<64> size; + TReal filesize; + TRealFormat realFormat; + TInt64 fileKBytes; + realFormat.iWidth = 6; + + //converting size to Kb + fileKBytes = m_totalSize / KSizeDivisor; + filesize = (TReal) m_totalSize / (KSizeDivisor); + size.Num(fileKBytes); + + //get the length of the value in Kb before the decimal point. + //Accordingly convert it further. + int len = size.Length(); + QString text; + if (len >= 7) + { + //in gb + TReal mul = (KSizeDivisor * KSizeDivisor); + TReal temp = filesize / mul; + size.Num(temp, realFormat); + mSize = QString::fromUtf16(size.Ptr(), size.Length()); + text = hbTrId("txt_deviceupdate_info_size_1_Gb").arg(mSize); + mSizeFormat = "gb"; + } + else if (len >= 4) + { + //in mb + TReal temp = filesize / KSizeDivisor; + size.Num(temp, realFormat); + mSize = QString::fromUtf16(size.Ptr(), size.Length()); + text = hbTrId("txt_deviceupdate_info_size_1_mb").arg(mSize); + mSizeFormat = "mb"; + } + else + { + mSize = QString::fromUtf16(size.Ptr(), size.Length()); + text = hbTrId("txt_deviceupdate_info_size_1_kb").arg(mSize); + mSizeFormat = "kb"; + } + RDEBUG( "appmgmtdownloadmgr::convertSize End" ); + return text; + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::getAvailableDrives() +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::getAvailableDrives() + { + RDEBUG( "appmgmtdownloadmgr::getAvailableDrives start" ); + RFs iFs; + qt_symbian_throwIfError(iFs.Connect()); + TDriveList driveList; + TInt driveCount = 0; + TBuf<20> buf; + int i = 0; + QString val; + QStringList list; + TDriveInfo info; + TVolumeInfo volumeInfo; + qt_symbian_throwIfError(DriveInfo::GetUserVisibleDrives(iFs, driveList, + driveCount)); + TUint driveStatus = 0; + for (TInt index(0); index < KMaxDrives; index++) + { + if (driveList[index]) + { + TRealFormat realFormat; + qt_symbian_throwIfError(DriveInfo::GetDriveStatus(iFs, index, + driveStatus)); + TFileName path; + TDriveUnit driveUnit(index); + if (!(driveStatus & DriveInfo::EDriveRemote)) + { + TBuf<64> freeSpace; + TReal free; + TInt64 freeKBytes; + realFormat.iWidth = 6; + iFs.Drive(info, index); + if(iFs.Volume(volumeInfo, index)==KErrNone) + { + RDEBUG_2("free space: (%d)", volumeInfo.iFree ); + freeKBytes = 0; + freeKBytes = volumeInfo.iFree / KSizeDivisor; + free = volumeInfo.iFree / KSizeDivisor; + freeSpace.Num(freeKBytes); + TInt sizeUnit = EKb; + + //converting the drive freespace + int len = freeSpace.Length(); + if (len >= 7) + { + TReal nul = (KSizeDivisor * KSizeDivisor); + TReal temp = free / nul; + freeSpace.Num(temp, realFormat); + sizeUnit = EGb; + } + else + { + TReal temp = free / KSizeDivisor; + freeSpace.Num(temp, realFormat); + sizeUnit = EMb; + } + //Getting the drive name in QString + path.Zero(); + path.Append(driveUnit.Name()); + val = QString::fromUtf16(path.Ptr(), path.Length()); + drilist.Append(path); + //Getting the drive free space in QString + path.Zero(); + path.Append(freeSpace); + QString str1 = QString::fromUtf16(path.Ptr(), path.Length()); + QString driv; + if (sizeUnit == EKb) + { + driv + = hbTrId( + "txt_deviceupdate_setlabel_install_to_val_1_2_kb").arg( + val, str1); + } + else if (sizeUnit == EMb) + { + driv + = hbTrId( + "txt_deviceupdate_setlabel_install_to_val_1_2_Mb").arg( + val, str1); + } + else + { + driv + = hbTrId( + "txt_deviceupdate_setlabel_install_to_val_1_2_Gb").arg( + val, str1); + } + mDriveBox->insertItem(i++, driv); + } + } + } + } + RDEBUG( "appmgmtdownloadmgr::getAvailableDrives End" ); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::showInstalltoDialog() +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::showInstalltoDialog() + { + RDEBUG( "appmgmtdownloadmgr::showIntalltoDialog start" ); + HbDocumentLoader loader; + QString val; + bool ok = false; + HbLabel* label; + + loader.load(":/xml/sample.docml", &ok); + if (!ok) + { + return; + } + Q_ASSERT_X(ok, "Device Manager", "Invalid docml file"); + mDialog = qobject_cast (loader.findWidget("dialog")); + + //set title for the dialog + label = qobject_cast (loader.findWidget( + "qtl_dialog_pri_heading")); + if (iOperationType == EInstallAndActivate) + { + val = hbTrId("txt_device_update_title_download_and_install"); + label->setPlainText(val); + } + else + { + val = hbTrId("txt_device_update_title_install"); + label->setPlainText(val); + } + + //set the app name + label = qobject_cast (loader.findWidget("label")); + val = hbTrId("txt_deviceupdate_info_file_1_2").arg(m_appName); + label->setPlainText(val); + + //size + label = qobject_cast (loader.findWidget("label_1")); + if (m_totalSize != 0) + { + m_sizeStr = convertSize(); + label->setPlainText(m_sizeStr); + } + else + { + val = hbTrId("txt_device_update_info_details_not_available"); + label->setPlainText(val); + } + + //icon + label = qobject_cast (loader.findWidget("icon")); + HbIcon* icon = new HbIcon(":/icon/qgn_prop_sml_http.svg"); + label->setIcon(*icon); + + //"install to" label + label = qobject_cast (loader.findWidget("qtl_dialog_pri5")); + val = hbTrId("txt_device_update_setlabel_install_to"); + label->setPlainText(val); + + //getting the available free space in all drives and adding to combobox + + mDriveBox = qobject_cast (loader.findWidget("combobox")); + int err(KErrNone); + TRAP(err,QT_TRYCATCH_LEAVING(getAvailableDrives())); + + if(err!=KErrNone) + { + mDriveBox->setVisible(false); + } + iComp->SetDriveSelectionStatus(true); + CDeliveryComponentStorage* iStorage; + QT_TRAP_THROWING(iStorage = CDeliveryComponentStorage::NewL()); + TRAP( err, QT_TRYCATCH_LEAVING(iStorage->UpdateL(*iComp))); + delete iStorage; + iStorage = NULL; + + connect(mDriveBox, SIGNAL(currentIndexChanged(int)), this, + SLOT(defaultDriveChanged(int ))); + //setting the actions + mOkButton = qobject_cast (loader.findObject( + "qtl_dialog_softkey_2_left")); + mCancel = qobject_cast (loader.findObject( + "qtl_dialog_softkey_2_right")); + val = hbTrId("txt_common_button_ok"); + mOkButton->setText(val); + val = hbTrId("txt_common_button_cancel"); + mCancel->setText(val); + RDEBUG( "appmgmtdownloadmgr::showIntalltoDialog End" ); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::showDownloadDialog() +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::showDownloadDialog() + { + RDEBUG( "appmgmtdownloadmgr::showDownloadDialog start" ); + HbDocumentLoader loader; + QString val; + bool ok = false; + HbLabel* label; + + loader.load(":/xml/downloaddialog.docml", &ok); + + Q_ASSERT_X(ok, "Device Manager", "Invalid docml file"); + mDialog = qobject_cast (loader.findWidget("dialog")); + + //set title for the dialog + label = qobject_cast (loader.findWidget( + "qtl_dialog_pri_heading")); + val = hbTrId("txt_device_update_title_download"); + label->setPlainText(val); + + //set icon + label = qobject_cast (loader.findWidget("icon")); + HbIcon* icon = new HbIcon(":/icon/qgn_prop_sml_http.svg"); + label->setIcon(*icon); + + label = qobject_cast (loader.findWidget("qtl_dialog_pri5")); + + //set appname + val = hbTrId("txt_deviceupdate_info_file_1_2").arg(m_appName); + label->setPlainText(val); + + //size + label = qobject_cast (loader.findWidget("qtl_dialog_pri5_1")); + + //size + if (m_totalSize != 0) + { + m_sizeStr = convertSize(); + label->setPlainText(m_sizeStr); + } + else + { + val = hbTrId("txt_device_update_info_details_not_available"); + label->setPlainText(val); + } + //setting the actions + mOkButton = qobject_cast (loader.findObject( + "qtl_dialog_softkey_2_left")); + mCancel = qobject_cast (loader.findObject( + "qtl_dialog_softkey_2_right")); + val = hbTrId("txt_common_button_ok"); + mOkButton->setText(val); + val = hbTrId("txt_common_button_cancel"); + mCancel->setText(val); + RDEBUG( "appmgmtdownloadmgr::showDownloadDialog End" ); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::showDialog +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::showDialog(CDeploymentComponent *aComponent) + { + CCoeEnv* coe = CCoeEnv::Static(); + TApaTaskList taskList(coe->WsSession()); + TApaTask task1(taskList.FindApp(TUid::Uid(KAppMgmtServerUid))); + if (task1.Exists()) + { + task1.BringToForeground(); + } + + + + //get the Size of the install package + m_totalSize = iDl->attribute(TotalSize).toInt(); + + //get the name of the install package + TDeploymentComponentName name = aComponent->ComponentName(); + TBuf nameBuf; + nameBuf.Copy(name); + m_appName = QString::fromUtf16(nameBuf.Ptr(), nameBuf.Length()); + + (iOperationType == EInstallAndActivate)?showInstalltoDialog():showDownloadDialog(); + + mDialog->setTimeout(20000); + mNotifierdata = m_appName; + QString comma(","); + mNotifierdata.append(comma); + mNotifierdata.append(mSize); + mNotifierdata.append(comma); + mNotifierdata.append(mSizeFormat); + + mDialogData = m_appName; + mDialogData.append(comma); + mDialogData.append(m_sizeStr); + + CApplicationManagementUtility::mCurrDlg = mDialog; + mDialog->setAttribute(Qt::WA_DeleteOnClose); + mDialog->open(this,SLOT(dialogSlot(HbAction*))); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::defaultDriveChanged +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::defaultDriveChanged(int i) + { + TAMInstallOptions opts = iComp->InstallOpts(); + int err = KErrNone; + TChar drive = drilist[i*2]; + drive.LowerCase(); + opts.iOptions.iDrive = drive; + TPtrC8 buf; + TAMInstallOptionsPckg optsb(opts); + buf.Set(optsb); + TRAP( err, QT_TRYCATCH_LEAVING(iComp->SetInstallOptsL(buf))); + CDeliveryComponentStorage* iStorage; + TRAP( err, QT_TRYCATCH_LEAVING(iStorage = CDeliveryComponentStorage::NewL())); + TRAP( err, QT_TRYCATCH_LEAVING(iStorage->UpdateL(*iComp))); + delete iStorage; + iStorage = NULL; + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::dialogSlot +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::dialogSlot(HbAction* recAction) + { + RDEBUG("dialogslot"); + TRequestStatus* stat = &iWait->iStatus; + User::RequestComplete(stat,KErrNone); + if(recAction == mCancel) + { + mEndReported = 1; + sendSrvToBg(); + iWait->Stop(); + iDl->cancel(); + } + else + { + //visited if ok is selected or after timeout + iDialogAccepted = 1; + int err = RProperty::Set(TUid::Uid(KOmaDMAppUid), KDownloadActive, iDialogAccepted); + RDEBUG_2("RProperty set (%d)", err ); + } + CApplicationManagementUtility::mCurrDlg = 0; + mOkButton=0; + mCancel = 0; + RDEBUG("dialogslot end"); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::downloadMgrEventRecieved( +// ------------------------------------------------------------------------------------------------ +bool appmgmtdownloadmgr::downloadMgrEventRecieved(DownloadManagerEvent *event) + { + //DEventType type = (DEventType)event->type(); + //bool eventHandled = false; + switch (event->type()) + + { + case DownloadManagerEvent::Created: + { + RDEBUG("DownloadCreated"); + return true; + } + case DownloadManagerEvent::Removed: + { + RDEBUG("Removed"); + return true; + } + + default: + { + //QWidget::event(event); + return false; + } + } + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::FileName +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::FileName(QString& filename) + { + if (iDl) + filename = iDl->attribute(WRT::FileName).toString(); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::MimeType +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::MimeType(QString& mimetype) + { + mimetype=m_mimetype; + TBuf<1024> buffer(mimetype.utf16()); + RDEBUG_2( "appmgmtdownloadmgr::MimeType '%S'", &buffer ); + } +void appmgmtdownloadmgr::SetMimeType() + { + if (iDl) + m_mimetype = iDl->attribute(ContentType).toString(); + TBuf<1024> buffer(m_mimetype.utf16()); + RDEBUG_2( "appmgmtdownloadmgr::MimeType SetMimeType '%S'", &buffer ); + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::downloadEventRecieved +// ------------------------------------------------------------------------------------------------ +bool appmgmtdownloadmgr::downloadEventRecieved(DownloadEvent *event) + { + //DEventType type = (DEventType)event->type(); + bool eventHandled = true; + switch (event->type()) + { + case DownloadEvent::Started: + { + RDEBUG("Started"); + m_inProgress = false; + break; + } + + case DownloadEvent::HeadersReceived: + { + RDEBUG("HeaderReceived"); + m_inProgress = false; + SetMimeType(); + break; + } + + case DownloadEvent::InProgress: + { + RDEBUG("Progress"); + + //HandleAlreadyRunningL(downloadedsize, contentsize, *download, aEvent.iProgressState); + if (!iDialogAccepted) + { + if (!CApplicationManagementUtility::iSilentSession) + { + showDialog(iComp); + int err = KErrNone; + TRAP( err, QT_TRYCATCH_LEAVING(iWait = CDialogWait::NewL())); + iWait->StartWait(); + } + } + else + { + m_totalSize = iDl->attribute(TotalSize).toInt(); + RDEBUG_2("total size = %d",m_totalSize ); + m_currentDownloadedSize + = iDl->attribute(DownloadedSize).toInt(); + RDEBUG_2("m_currentDownloadedSize = %d",m_currentDownloadedSize ); + if (!CApplicationManagementUtility::iSilentSession) + updateProgress(m_currentDownloadedSize, m_totalSize); + } + break; + } + case DownloadEvent::Paused: + { + RDEBUG("Paused"); + break; + } + case DownloadEvent::Completed: + { + RDEBUG("Completed"); + m_inProgress = false; + closeProgress(); + QApplication::processEvents(); + if (iOperationType == EDeliver && !CApplicationManagementUtility::iSilentSession) + { + mNote = new AppMgmtNotifier(m_appName); + if(mNote) + mNote->showDownloadSuccessNote(); + delete mNote; + mNote=NULL; + } + m_callback.DownloadCompleted(); + iStatus = KErrNone; + break; + } + + case DownloadEvent::Failed: + { + RDEBUG("Failed"); + m_inProgress = false; + closeProgress(); + if(!CApplicationManagementUtility::iSilentSession) + { + mNote = new AppMgmtNotifier(m_appName); + if(mNote) + { + bool ret = mNote->showDownloadFailedNote(mNotifierdata); + RDEBUG_2( "device dialog : %d", ret ); + delete mNote; + mNote=NULL; + } + } + + break; + } + case DownloadEvent::Cancelled: + { + RDEBUG("Cancelled"); + m_inProgress = false; + + closeProgress(); + if(!mNetworkLoss) + { + m_callback.DownloadFailed(KStatusUserCancelled); + } + else + { + m_callback.DownloadFailed(KStatusDownloadFailed); + } + iStatus = KErrNone; + break; + } + case DownloadEvent::ConnectionNeeded: + case DownloadEvent::ConnectionDisconnected: + case DownloadEvent::NetworkLoss: + { + RDEBUG("NetworkLoss"); + m_inProgress = false; + int errornum; + int statusdwnld; + closeProgress(); + if(!mEndReported) + { + mNetworkLoss = 1; + mEndReported = 1; + if (!CApplicationManagementUtility::iSilentSession) + { + mNote = new AppMgmtNotifier(m_appName); + if(mNote) + mNote->showDownloadFailedNote(mNotifierdata); + delete mNote; + mNote=NULL; + } + iDl->cancel(); + } + break; + } + + case DownloadEvent::Error: + { + RDEBUG("Error"); + m_inProgress = false; + + int errornum; + int statusdwnld; + + Download::State state = + (Download::State) iDl->attribute(State).toInt(); + + errornum = iDl->attribute(LastError).toInt(); + + statusdwnld = currDwnldStatForGenericAlert(errornum); + closeProgress(); + if(!mEndReported) + { + if (!CApplicationManagementUtility::iSilentSession) + { + mNote = new AppMgmtNotifier(m_appName); + if(mNote) + mNote->showDownloadFailedNote(mNotifierdata); + delete mNote; + mNote=NULL; + } + m_callback.DownloadFailed(statusdwnld); + mEndReported = 1; + } + iStatus = KErrNone; + break; + } + + default: + { + eventHandled = false; + } + } + return eventHandled; + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::updateProgress +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::updateProgress(TInt32 aDownloadedSize, + TInt32 aContentSize) + { + if (!iProgressNote) + { + iProgressNote = new AppMgmtProgDialog(mDialogData,*iDl,mEndReported); + iProgressNote->startDialog(aContentSize, aDownloadedSize); + } + + //handles the progress dialog + //creating progress dialog and set final val and update + if (aContentSize >= 0) + { + iProgressNote->updateProgress(aDownloadedSize); + } + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::currDwnldStatForGenericAlert +// ------------------------------------------------------------------------------------------------ +int appmgmtdownloadmgr::currDwnldStatForGenericAlert(int dwnldstatus) + { + int status; + if(dwnldstatus == DiskFull ) + status = KStatusDowloadFailedOOM; + else if(dwnldstatus == TransactionFailed ||dwnldstatus== HostNotFoundError || dwnldstatus== TimeoutError || dwnldstatus== OperationCanceledError) + status = KStatusAltDowldUnavailable; + else if (dwnldstatus == AuthenticationRequiredError ) + status = KStatusAlternateDownldAuthFail; + else + status = KStatusDownloadFailed; + + return status; + + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::closeProgress +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::closeProgress() + { + if(iProgressNote) + { + iProgressNote->closeAMProgDialog(); + } + } + +// ------------------------------------------------------------------------------------------------ +// appmgmtdownloadmgr::sendSrvToBg +// ------------------------------------------------------------------------------------------------ +void appmgmtdownloadmgr::sendSrvToBg() +{ + { + CCoeEnv* coe = CCoeEnv::Static(); + TApaTaskList taskList(coe->WsSession()); + TApaTask task=taskList.FindApp(TUid::Uid(KAppMgmtServerUid)); + if(task.Exists()) + { + task.SendToBackground(); + } + } +} + + + +//--------------------------------------------------------------------------------- +// CDialogWait::CDialogWait +//--------------------------------------------------------------------------------- +CDialogWait::CDialogWait() +: CActive(0) + { + CActiveScheduler::Add(this); + } + +//--------------------------------------------------------------------------------- +// CDialogWait::ConstructL +//--------------------------------------------------------------------------------- +void CDialogWait::ConstructL() + { + iWait = new( ELeave ) CActiveSchedulerWait; + } + +//--------------------------------------------------------------------------------- +// CDialogWait::NewL +//--------------------------------------------------------------------------------- +CDialogWait* CDialogWait::NewL() + { + CDialogWait* self = new( ELeave ) CDialogWait(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +//--------------------------------------------------------------------------------- +// CDialogWait::~CDialogWait +// Destructor +//--------------------------------------------------------------------------------- +CDialogWait::~CDialogWait() + { + Cancel(); + delete iWait; + } + +//--------------------------------------------------------------------------------- +// CDialogWait::Stop +//--------------------------------------------------------------------------------- +void CDialogWait::Stop() + { + if (iWait && iWait->IsStarted() && iWait->CanStopNow()) + { + iWait->AsyncStop(); + } + } + +//--------------------------------------------------------------------------------- +// CDialogWait::WaitOnDialog +//--------------------------------------------------------------------------------- +void CDialogWait::StartWait() + { + RDEBUG("startwait start"); + if (!IsActive() ) + { + if(iWait) + { + if(!iWait->IsStarted()) + { + iStatus = KRequestPending; + SetActive(); + iWait->Start(); + } + } + } + RDEBUG("startwait end"); + } + +// -------------------------------------------------------------------------- +// CDialogWait::DoCancel() +// -------------------------------------------------------------------------- +// +void CDialogWait::DoCancel() + { + if (iWait && iWait->IsStarted() && iWait->CanStopNow()) + { + iWait->AsyncStop(); + } + } + +// -------------------------------------------------------------------------- +// CDialogWait::RunL() +// -------------------------------------------------------------------------- +// +void CDialogWait::RunL() + { + if (iWait && iWait->IsStarted() && iWait->CanStopNow()) + { + iWait->AsyncStop(); + } + } + +// -------------------------------------------------------------------------- +// CDialogWait::RunError() +// -------------------------------------------------------------------------- +// +TInt CDialogWait::RunError(TInt aError) + { + RDEBUG_2("CDialogWait::RunError %d",aError ); + return KErrNone; + }