diff -r c4687ff85147 -r 6757f1e2efd2 deviceupdatesui/deviceupdates/src/dmfotaview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deviceupdatesui/deviceupdates/src/dmfotaview.cpp Tue Aug 31 15:05:55 2010 +0300 @@ -0,0 +1,710 @@ +/* +* Copyright (c) 2002-2005 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: Methods for DmFotaView. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "nsmldmsyncprivatecrkeys.h" +#include "dmadvancedview.h" +#include "dmfotaview.h" +#include +#include "deviceupdatemoniter.h" +#include "DeviceUpdateDebug.h" +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// DMFotaView::DMFotaView +// ----------------------------------------------------------------------------- +// +DMFotaView::DMFotaView(HbMainWindow *mainWindow): + mMainWindow(mainWindow),profilesView(NULL),Connected(EFalse) +{ + qDebug("DMFotaView::DMFotaView >>"); + fotaPortraitView=0; + fotaLandscapeView=0; + mainDmInfo=0; + qDebug("DMFotaView::DMFotaView <<"); +} + +// ----------------------------------------------------------------------------- +// DMFotaView::~DMFotaView +// +// ----------------------------------------------------------------------------- +// +DMFotaView::~DMFotaView() +{ + qDebug("DMFotaView::~DMFotaView >>"); + if(mainDmInfo) + delete mainDmInfo; + + if (iFotaEngine.Handle()) + iFotaEngine.Close(); + + if (iMoniter) + { + iMoniter->Cancel(); + delete iMoniter; + } + qDebug("DMFotaView::~DMFotaView <<"); +} + +// ----------------------------------------------------------------------------- +// DMFotaView::addFotaView +// Creates and adds the Fota Portrait and Landscape View +// ----------------------------------------------------------------------------- +// +bool DMFotaView::addFotaView() + { + qDebug("DMFotaView::addFotaView >>"); + connect( mMainWindow, SIGNAL( orientationChanged(Qt::Orientation) ), this, SLOT( readSection(Qt::Orientation) ) ); + + bool ok = false; + QString val,val2; + loader.load(":/xml/devman.docml", &ok); + ok = false; + loader2.load(":/xml/devman.docml", &ok); + // Exit if the file format is invalid + Q_ASSERT_X(ok, "Device Manager", "Invalid docml file"); + + ok=false; + loader.load(":/xml/devman.docml","Portrait", &ok); + ok=false; + loader2.load(":/xml/devman.docml","Landscape", &ok); + + // Load the view by name from the xml file + fotaPortraitView = qobject_cast(loader.findWidget("p:view")); + fotaLandscapeView = qobject_cast(loader2.findWidget("l:view")); + + + HbAction *help = qobject_cast (loader.findObject("help")); + help->setText(QString("txt_common_menu_help")); + QObject::connect(help, SIGNAL(triggered()), this, SLOT(OnHelp())); + HbAction *exit = qobject_cast (loader.findObject("exit")); + exit->setText(QString("txt_common_menu_exit")); + QObject::connect(exit, SIGNAL(triggered()), this, SLOT(OnExit())); + + help = qobject_cast(loader2.findObject("help")); + help->setText(QString("txt_common_menu_help")); + QObject::connect(help, SIGNAL(triggered()), this, SLOT(OnHelp())); + exit = qobject_cast( loader2.findObject("exit")); + exit->setText(QString("txt_common_menu_exit")); + QObject::connect(exit, SIGNAL(triggered()), this, SLOT(OnExit())); + + mSoftKeyBackAction = new HbAction(Hb::BackNaviAction ,this); + mSoftKeyBackAction->setText("Back"); + connect(mSoftKeyBackAction, SIGNAL(triggered()), this, SLOT(backtoMainWindow())); + + + i=0; + QString str; + //Setting title text + label = qobject_cast (loader.findWidget("p:title")); + label2 = qobject_cast (loader2.findWidget("l:title")); + val = hbTrId("txt_device_update_subhead_device_updates"); + label->setPlainText(val); + label2->setPlainText(val); + + + + HbScrollArea* area = qobject_cast (loader.findWidget("scrollArea")); + area->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOn); + + + list1 << "label" << "label_1" << "label_2" << "label_3" << "label_4" << "label_5" << "label_6"<<"label_7"<<"label_8"<<"label_9"<<"label_10"<<"label_11"; + list2 << "label_13" << "label_14" << "label_15" << "label_16" << "label_17" << "label_18" << "label_19"<<"label_20"<<"label_21"<<"label_22"<<"label_23"<<"label_24"; + + + //Product Release + TBuf< KSysUtilVersionTextLength > prodrelease; + prodrelease.Zero(); + if(SysUtil::GetPRInformation(prodrelease)==KErrNone) + { + val = hbTrId("txt_device_update_dblist_product_release"); + str = QString::fromUtf16(prodrelease.Ptr(), prodrelease.Length()); + FormatList(val,str); + } + + //Software version + + TBuf< KSysUtilVersionTextLength > swversion; + TBuf< KSysUtilVersionTextLength > swversiondate; + TBuf< KSysUtilVersionTextLength > typedesignator; + TBuf< KSysUtilVersionTextLength > version; + swversion.Zero(); + version.Zero(); + typedesignator.Zero(); + swversiondate.Zero(); + if( SysUtil::GetSWVersion(version)==KErrNone) + { + TInt len= version.Length(); + TInt pos1 = version.Find(KSmlEOL); + if( pos1 != KErrNotFound && len > pos1 ) + { + TBuf version1; + version1.Zero(); + swversion.Append( version.Left(pos1)); + version1.Append( version.Right( len-pos1-1 )); + len= version1.Length(); + pos1 = version1.Find(KSmlEOL); + if( pos1 != KErrNotFound && len > pos1 ) + { + swversiondate.Append(version1.Left( pos1 )); + version.Zero(); + version.Append( version1.Right( len-pos1-1 )); + len= version.Length(); + pos1 = version.Find(KSmlEOL); + if( pos1 != KErrNotFound && len > pos1 ) + { + typedesignator.Append(version.Left(pos1)); + } + } + } + val = hbTrId("txt_device_update_dblist_software_version"); + str = QString::fromUtf16(swversion.Ptr(), swversion.Length()); + FormatList(val,str); + } + + //Model + TBuf<100> phoneName; + TInt error = SysVersionInfo::GetVersionInfo(SysVersionInfo::EModelVersion, phoneName); + if (error==KErrNone) + { + + //phoneName.Copy( telid.iModel ); + //imei.Copy(telid.iSerialNumber); + if( phoneName.Length()>0 ) + { + val = hbTrId("txt_device_update_dblist_model"); + str = QString::fromUtf16(phoneName.Ptr(), phoneName.Length()); + FormatList(val,str); + } + } + RTelServer telServer; + User::LeaveIfError( telServer.Connect() ); + RTelServer::TPhoneInfo teleinfo; + User::LeaveIfError( telServer.GetPhoneInfo( 0, teleinfo ) ); + RMobilePhone phone; + User::LeaveIfError( phone.Open( telServer, teleinfo.iName ) ); + User::LeaveIfError(phone.Initialise()); + TUint32 teleidentityCaps; + phone.GetIdentityCaps( teleidentityCaps ); + RMobilePhone::TMobilePhoneIdentityV1 telid; + TRequestStatus status; + phone.GetPhoneId( status, telid ); + User::WaitForRequest( status ); + TBuf <50> imei; + if (status==KErrNone) + { + TBuf<100> phoneName; + imei.Copy(telid.iSerialNumber); + } + phone.Close(); + telServer.Close(); + + //type + if(typedesignator.Length()>0) + { + val = hbTrId("txt_device_update_dblist_type"); + str = QString::fromUtf16(typedesignator.Ptr(), typedesignator.Length()); + FormatList(val,str); + } + + //Product Code + /* TInt runtimesupport(0); + CRepository* cenrep = NULL; + TRAPD( error, cenrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) ); + if(error) + { + runtimesupport=1; + } + if ( cenrep ) + { + cenrep->Get( KNsmlDmRuntimeVerSupport, runtimesupport ); + delete cenrep; cenrep = NULL; + } + if(runtimesupport) + { */ + TBuf productcode; + productcode.Zero(); + error = SysVersionInfo::GetVersionInfo(SysVersionInfo::EProductCode, productcode); + if(error ==KErrNone ) + { + if( productcode.Length()>0 ) + { + val = hbTrId("txt_device_update_dblist_product_code"); + str = QString::fromUtf16(productcode.Ptr(), productcode.Length()); + FormatList(val,str); + } + } + + //IMEI + if(imei.Length()>0) + { + val = hbTrId("txt_device_update_dblist_imei"); + str = QString::fromUtf16(imei.Ptr(), imei.Length()); + FormatList(val,str); + } + + + iFotaState = FotaEngineL().GetState(-1); + + TBuf8<80> Name; + TBuf8<80> Version; + TInt Size; + + if(iFotaState == RFotaEngineSession::EDownloadComplete || iFotaState == RFotaEngineSession::EStartingUpdate + || iFotaState == RFotaEngineSession::EStartingDownload || iFotaState == RFotaEngineSession::EDownloadProgressing) + { + label = qobject_cast (loader.findWidget("p:updatelabel")); + label2 = qobject_cast (loader2.findWidget("l:updatelabel")); + FotaEngineL().GetCurrentFirmwareDetailsL(Name, Version, Size); + + const QString + name = + QString::fromUtf8( + reinterpret_cast (Name.Ptr()), + Name.Length()); + const QString + ver = + QString::fromUtf8( + reinterpret_cast (Version.Ptr()), + Version.Length()); + + TInt sizeKB = Size / 1024; + if(sizeKB < 1024) + { + val = hbTrId("txt_device_update_setlabel_the_last_update_1_2_kb").arg(name) + .arg(ver).arg(sizeKB); + } + else + { + TInt sizeMB = sizeKB / 1024; + val = hbTrId("txt_device_update_setlabel_the_last_update_1_2_mb").arg(name) + .arg(ver).arg(sizeMB); + } + label->setPlainText(val); + label2->setPlainText(val); + + val = hbTrId("txt_device_update_button_resume_update"); + + updateButton = qobject_cast(loader.findWidget("p:update")); + updateButton->setText(val); + QObject::connect(updateButton, SIGNAL(clicked()), this, SLOT(ResumeUpdate())); + updateButtonLandscape = qobject_cast(loader2.findWidget("l:update")); + updateButtonLandscape->setText(val); + QObject::connect(updateButtonLandscape, SIGNAL(clicked()), this, SLOT(ResumeUpdate())); + Connected = ETrue; + } + else + { + //Setting help text for update button + label = qobject_cast (loader.findWidget("p:updatelabel")); + label2 = qobject_cast (loader2.findWidget("l:updatelabel")); + val = hbTrId("txt_device_update_setlabel_to_update_your_device_s"); + label->setPlainText(val); + label2->setPlainText(val); + + val = hbTrId("txt_device_update_button_update"); + updateButton = qobject_cast(loader.findWidget("p:update")); + updateButton->setText(val); + QObject::connect(updateButton, SIGNAL(clicked()), this, SLOT(CheckforUpdate())); + updateButtonLandscape = qobject_cast(loader2.findWidget("l:update")); + updateButtonLandscape->setText(val); + QObject::connect(updateButtonLandscape, SIGNAL(clicked()), this, SLOT(CheckforUpdate())); + Connected = ETrue; + } + + val = hbTrId("txt_device_update_button_advanced"); + advancedButton = qobject_cast(loader.findWidget("p:advanced")); + advancedButton->setText(val); + QObject::connect(advancedButton, SIGNAL(clicked()), this, SLOT(AdvancedDeviceManager())); + advancedButtonLandscape = qobject_cast(loader2.findWidget("l:advanced")); + advancedButtonLandscape->setText(val); + QObject::connect(advancedButtonLandscape, SIGNAL(clicked()), this, SLOT(AdvancedDeviceManager())); + fotaSupportEnabled(); + mMainWindow->addView(fotaPortraitView); + mMainWindow->addView(fotaLandscapeView); + + if(mMainWindow->orientation()==Qt::Vertical) + mMainWindow->setCurrentView(fotaPortraitView); + else + mMainWindow->setCurrentView(fotaLandscapeView); + + iMoniter = CDeviceUpdateMoniter::NewL(this); + //iMoniter->StartMoniter(); + qDebug("DMFotaView::addFotaView <<"); + return ETrue; + } + +// ----------------------------------------------------------------------------- +// DMFotaView::CheckforUpdate +// Checks for updates from the default server +// ----------------------------------------------------------------------------- +// +void DMFotaView::CheckforUpdate() + { + qDebug("omadm DeviceManagerUi::CheckforUpdate >>"); + + TInt profileId=NULL; + if(mainDmInfo==0) + { + if(!profilesView) + { + bool launchview = false; + AdvancedDeviceManager(launchview); + /* mainDmInfo = new DmInfo(); + mainDmInfo->refreshProfileList();*/ + } + // else + mainDmInfo = profilesView->dminfo; + } + if((profileId = mainDmInfo->DefaultFotaProfileIdL())==KErrNotFound) + { + + HbNotificationDialog* note = new HbNotificationDialog(); + QString val = hbTrId("txt_device_update_info_no_server_configured_to_get"); + note->setTitle(val); + note->setTitleTextWrapping(Hb::TextWordWrap); + note->setDismissPolicy(HbPopup::TapAnywhere); + note->setTimeout(HbPopup::StandardTimeout); + note->setAttribute(Qt::WA_DeleteOnClose, true); + note->open(); + } + else + { + mainDmInfo->sync(profileId); + //Connecting note to be displayed + //Buttons to be disabled + displayNoteAndDisableButtons(); + + } + qDebug("omadm DeviceManagerUi::CheckforUpdate >>"); + } + + +void DMFotaView::ResumeUpdate() + { + qDebug("omadm DeviceManagerUi::ResumeUpdate >>"); + + + if(iFotaState == RFotaEngineSession::EDownloadComplete || iFotaState == RFotaEngineSession::EStartingUpdate) + { + qDebug("Calling resuming of update"); + FotaEngineL().Update(-1,(TSmlProfileId)1, _L8(""), _L8("")); + } + else if(iFotaState == RFotaEngineSession::EStartingDownload || iFotaState == RFotaEngineSession::EDownloadProgressing) + { + qDebug("Calling resuming of download"); + FotaEngineL().TryResumeDownload(EFalse); + } + + qDebug("omadm DeviceManagerUi::ResumeUpdate <<"); + } + +// ----------------------------------------------------------------------------- +// DMFotaView::displayNoteAndDisableButtons +// Displays the connecting note and disable all buttons +// ----------------------------------------------------------------------------- +// +void DMFotaView::displayNoteAndDisableButtons() + { + qDebug("DMFotaView::displayNoteAndDisableButtons >>"); + updateButton->setEnabled(false); + advancedButton->setEnabled(false); + updateButtonLandscape->setEnabled(false); + advancedButtonLandscape->setEnabled(false); + HbNotificationDialog* note = new HbNotificationDialog(); + //QString val = hbTrId("txt_device_update_dpophead_device_update"); + note->setTitle(hbTrId("txt_device_update_dpophead_device_update")); + note->setTitleTextWrapping(Hb::TextWordWrap); + note->setText(hbTrId("txt_device_update_info_connecting")); + HbIcon icon1; + icon1.setIconName(":/icons/qgn_prop_sml_http.svg"); + note->setIcon(icon1); + note->setAttribute(Qt::WA_DeleteOnClose, true); + note->open(); + qDebug("DMFotaView::displayNoteAndDisableButtons <<"); + } + +// ----------------------------------------------------------------------------- +// DMFotaView::enableButtons +// Enables checkupdate and Advancedsetting buttons +// ----------------------------------------------------------------------------- +// +void DMFotaView::enableButtons() + { + qDebug("DMFotaView::enableButtons >>"); + TInt value (0); + RProperty::Get(TUid::Uid(KOmaDMAppUid), KFotaServerActive, value); + if (!value) + { + fotaSupportEnabled(); + advancedButtonLandscape->setEnabled(true); + advancedButton->setEnabled(true); + } + qDebug("DMFotaView::enableButtons <<"); + } + +// ----------------------------------------------------------------------------- +// DMFotaView::AdvancedDeviceManager +// Displays the Profiles view +// ----------------------------------------------------------------------------- +// +void DMFotaView::AdvancedDeviceManager(bool launchadvanceview) + { + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager"); + if(!profilesView) + { + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager 1"); + profilesView = new DmAdvancedView(mMainWindow,this,mainDmInfo); + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager 2"); + bool loadingok = profilesView->displayItems(); + if(loadingok) + { + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager 3"); + mMainWindow->addView(profilesView); + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager 4"); + profilesView->setBackBehavior(); + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager 5"); + if(launchadvanceview) + mMainWindow->setCurrentView(profilesView); + qDebug("omadm DeviceManagerUi::AdvancedDeviceManager 6"); + } + else + { + qFatal("omadm Unable to read groupbox.docml"); + + } + } + else + { + profilesView->setBackBehavior(); + mMainWindow->setCurrentView(profilesView); + } + qDebug("DMFotaView::AdvancedDeviceManager <<"); + } + +// ----------------------------------------------------------------------------- +// DMFotaView::FormatList +// Adds data to the details list +// ----------------------------------------------------------------------------- +// +void DMFotaView::FormatList(QString val,QString str) + { + qDebug("DMFotaView::FormatList >>"); + label = qobject_cast (loader.findWidget(list1[i])); + label2 = qobject_cast (loader2.findWidget(list2[i++])); + label3 = qobject_cast (loader.findWidget(list1[i])); + label4 = qobject_cast (loader2.findWidget(list2[i++])); + label->setPlainText(val); + label2->setPlainText(val); + label3->setPlainText(str); + label4->setPlainText(str); + label->setVisible(ETrue); + label2->setVisible(ETrue); + label3->setVisible(ETrue); + label4->setVisible(ETrue); + qDebug("DMFotaView::FormatList <<"); + } + + +inline RFotaEngineSession & DMFotaView::FotaEngineL() + { + qDebug("DMFotaView::FotaEngineL >>"); + if (!iFotaEngine.Handle()) + iFotaEngine.OpenL(); + qDebug("DMFotaView::FotaEngineL <<"); + return iFotaEngine; + } +// ----------------------------------------------------------------------------- +// DMFotaView::backtoMainWindow +// Enables switching between views +// ----------------------------------------------------------------------------- +// +void DMFotaView::backtoMainWindow() + { + qDebug("DMFotaView::backtoMainWindow >>"); + qApp->quit(); + qDebug("DMFotaView::backtoMainWindow <<"); + } + +// ----------------------------------------------------------------------------- +// DMFotaView::OnHelp +// Displays Help contents +// ----------------------------------------------------------------------------- +// +void DMFotaView::OnHelp() +{ +} + +// ----------------------------------------------------------------------------- +// DMFotaView::OnExit +// ----------------------------------------------------------------------------- +// +void DMFotaView::OnExit() +{ + qDebug("DMFotaView::OnExit >>"); + qApp->quit(); + qDebug("DMFotaView::OnExit <<"); +} + +void DMFotaView::readSection( Qt::Orientation orientation ) +{ + qDebug("DMFotaView::readSection >>"); + if(mMainWindow->currentView() == fotaPortraitView || mMainWindow->currentView() == fotaLandscapeView) + { + if( orientation == Qt::Vertical ) { + // reading "portrait" section + mMainWindow->setCurrentView(fotaPortraitView); + } + else { + // reading "landscape" section + mMainWindow->setCurrentView(fotaLandscapeView); + } + } + else if(mMainWindow->currentView()==profilesView) + { + profilesView->reLayout(orientation); + } + qDebug("DMFotaView::readSection <<"); + +} + + +void DMFotaView::UpdateDMUI(TBool aVal) + { + qDebug("DMFotaView::UpdateDMUI >>"); + qDebug("DMFotaView::UpdateDMUI >>"); + QString val; + if (aVal == 1) + { + qDebug("DMFotaView::aVal == 1 >>"); + if(Connected) + { + qDebug("DMFotaView::Connected >>"); + QObject::disconnect(updateButton,0,0,0); + QObject::disconnect(updateButtonLandscape,0,0,0); + Connected = EFalse; + } + + iFotaState = FotaEngineL().GetState(-1); + + if (iFotaState == RFotaEngineSession::EDownloadComplete || iFotaState + == RFotaEngineSession::EStartingUpdate || iFotaState + == RFotaEngineSession::EStartingDownload || iFotaState + == RFotaEngineSession::EDownloadProgressing) + { + qDebug("CDeviceUpdateMoniter::Resume >>"); + QString value = hbTrId("txt_device_update_button_resume_update"); + //updateButton = qobject_cast(loader.findWidget("p:update"); + updateButton->setText(value); + QObject::connect(updateButton, SIGNAL(clicked()), this,SLOT(ResumeUpdate())); + //updateButtonLandscape = qobject_cast(loader2.findWidget("l:update"); + updateButtonLandscape->setText(value); + QObject::connect(updateButtonLandscape, SIGNAL(clicked()), this, SLOT(ResumeUpdate())); + Connected = ETrue; + + TBuf8<80> Name; + TBuf8<80> Version; + TInt Size; + + FotaEngineL().GetCurrentFirmwareDetailsL(Name, Version, Size); + + const QString + name = + QString::fromUtf8( + reinterpret_cast (Name.Ptr()), + Name.Length()); + const QString + ver = + QString::fromUtf8( + reinterpret_cast (Version.Ptr()), + Version.Length()); + + TInt sizeKB = Size / 1024; + if(sizeKB < 1024) + { + val = hbTrId("txt_device_update_setlabel_the_last_update_1_2_kb").arg(name) + .arg(ver).arg(sizeKB); + } + else + { + TInt sizeMB = sizeKB / 1024; + val = hbTrId("txt_device_update_setlabel_the_last_update_1_2_mb").arg(name) + .arg(ver).arg(sizeMB); + } + + label->setPlainText(val); + label2->setPlainText(val); + } + else + { + qDebug("DMFotaView::Update >>"); + val = hbTrId("txt_device_update_setlabel_to_update_your_device_s"); + label->setPlainText(val); + label2->setPlainText(val); + val = hbTrId("txt_device_update_button_update"); + updateButton = qobject_cast(loader.findWidget("p:update")); + updateButton->setText(val); + QObject::connect(updateButton, SIGNAL(clicked()), this, SLOT(CheckforUpdate())); + updateButtonLandscape = qobject_cast(loader2.findWidget("l:update")); + updateButtonLandscape->setText(val); + QObject::connect(updateButtonLandscape, SIGNAL(clicked()), this, SLOT(CheckforUpdate())); + Connected = ETrue; + } + } + fotaSupportEnabled(); + if(fotaValue == 1 && aVal == 0) + { + updateButton->setEnabled(aVal); + updateButtonLandscape->setEnabled(aVal); + } + advancedButton->setEnabled(aVal); + advancedButtonLandscape->setEnabled(aVal); + qDebug("DMFotaView::UpdateDMUI <<"); + qDebug("DMFotaView::UpdateDMUI <<"); +} + +void DMFotaView::fotaSupportEnabled() + { + fotaValue = 1; + CRepository* centrep( NULL); + TUid uidValue = {0x101F9A08}; // KCRFotaAdapterEnabled + TInt err = KErrNone; + TRAP(err,centrep = CRepository::NewL( uidValue)); + if(centrep && err == KErrNone ) + { + centrep->Get( 1 , fotaValue ); // KCRFotaAdapterEnabled + delete centrep; + } + if(fotaValue == 0 || fotaValue == 1) + { + updateButton->setEnabled(fotaValue); + updateButtonLandscape->setEnabled(fotaValue); + } + } + +