diff -r 594d59766373 -r 7d48bed6ce0c telutils/keysequencerecognitionservice/src/lifetimerkeysequencehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telutils/keysequencerecognitionservice/src/lifetimerkeysequencehandler.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,208 @@ +/*! +* 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: Implements Life Timer key sequence handling. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "lifetimerkeysequencehandler.h" +#include "keysequencerecognitionservicedefs.h" +#include "telservicesinternalcrkeys.h" +#include "telservicesvariant.hrh" +#include "keysequencerecognitionservicelog.h" + +/*! + LifeTimerKeySequenceHandler::LifeTimerKeySequenceHandler. + */ +LifeTimerKeySequenceHandler::LifeTimerKeySequenceHandler( + QObject* parent) + : + KeySequenceHandler(parent), + m_messageBox(0), + m_repository(0) +{ + DPRINT_METHODENTRYEXIT; + + CRepository *repository = 0; + QT_TRAP_THROWING(repository = CRepository::NewL(KCRUidTelSrvVariation)) + m_repository.reset(repository); + + if (lifeTimerFeatureEnabled()) { + setKeySequenceValidator(QRegExp::escape(KCodeLifeTimer)); + } +} + + +/*! + LifeTimerKeySequenceHandler::~LifeTimerKeySequenceHandler. + */ +LifeTimerKeySequenceHandler::~LifeTimerKeySequenceHandler() +{ + DPRINT_METHODENTRYEXIT; + + destroyMessageBox(); +} + + +/*! + LifeTimerKeySequenceHandler::executeKeySequence. + */ +bool LifeTimerKeySequenceHandler::executeKeySequence( + const QString &keySequence) +{ + DPRINT_METHODENTRYEXIT; + + bool handled = true; + + if (KCodeLifeTimer == keySequence && lifeTimerFeatureEnabled()) { + launchLifeTimerDialog(); + } else { + handled = false; + } + + return handled; +} + + +/*! + LifeTimerKeySequenceHandler::launchLifeTimerDialog(). + */ +void LifeTimerKeySequenceHandler::launchLifeTimerDialog() +{ + DPRINT_METHODENTRYEXIT; + + destroyMessageBox(); + + QString lifeTimerData = constructLifeTimerData(); + QString lifeTimerNoteText = + hbTrId("txt_phone_info_life_timer").arg(lifeTimerData); + m_messageBox = new HbDeviceMessageBox( + lifeTimerNoteText, + HbMessageBox::MessageTypeInformation); + m_messageBox->setTimeout(HbPopup::NoTimeout); + + QObject::connect( + m_messageBox, SIGNAL(aboutToClose()), + this, SLOT(destroyMessageBox())); + + m_messageBox->show(); +} + + +/*! + LifeTimerKeySequenceHandler::constructLifeTimerData. + */ +QString LifeTimerKeySequenceHandler::constructLifeTimerData() +{ + DPRINT_METHODENTRYEXIT; + + QString lifeTimerText; + + RTelServer telephonyServer; + RMobilePhone mobilePhone; + RMmCustomAPI mmCustomApi; + QT_TRAP_THROWING( + openEtelConnectionL(telephonyServer, mobilePhone, mmCustomApi); + ) + + RMmCustomAPI::TLifeTimeData lifeTimeData; + RMmCustomAPI::TLifeTimeDataPckg dataPckg(lifeTimeData); + int lifeTimeDataQueryResult = mmCustomApi.GetLifeTime(dataPckg); + closeEtelConnection(telephonyServer, mobilePhone, mmCustomApi); + + if (KErrNone == lifeTimeDataQueryResult) { + lifeTimeData = dataPckg(); + + HbExtendedLocale locale = HbExtendedLocale::system(); + lifeTimerText.append(QString::number(lifeTimeData.iHours)); + const int KMinuteSeparatorInd = 2; + lifeTimerText.append(locale.timeSeparator(KMinuteSeparatorInd)); + lifeTimerText.append( + QString::number(static_cast(lifeTimeData.iMinutes))); + // pad hour field to a length of 6 digits + const int KLifeTimerDataFieldLength = 9; + lifeTimerText = lifeTimerText.rightJustified( + KLifeTimerDataFieldLength, QChar('0')); + } + + return lifeTimerText; +} + + +/*! + LifeTimerKeySequenceHandler::openEtelConnectionL. + */ +void LifeTimerKeySequenceHandler::openEtelConnectionL( + RTelServer &telephonyServer, + RMobilePhone &mobilePhone, + RMmCustomAPI &mmCustomApi) +{ + DPRINT_METHODENTRYEXIT; + + User::LeaveIfError(telephonyServer.Connect()); + User::LeaveIfError(mobilePhone.Open(telephonyServer, KMmTsyPhoneName())); + User::LeaveIfError(mmCustomApi.Open(mobilePhone)); +} + + +/*! + LifeTimerKeySequenceHandler::closeEtelConnection. + */ +void LifeTimerKeySequenceHandler::closeEtelConnection( + RTelServer &telephonyServer, + RMobilePhone &mobilePhone, + RMmCustomAPI &mmCustomApi) +{ + DPRINT_METHODENTRYEXIT; + + mmCustomApi.Close(); + mobilePhone.Close(); + telephonyServer.Close(); +} + + +/*! + LifeTimerKeySequenceHandler::lifeTimerFeatureEnabled. + */ +bool LifeTimerKeySequenceHandler::lifeTimerFeatureEnabled() +{ + DPRINT_METHODENTRYEXIT; + + TInt telephoneVariant = 0; + TInt result = m_repository->Get(KTelSrvVariationFlags, telephoneVariant); + return (KErrNone == result) + ? static_cast(telephoneVariant & KTelSrvLVFlagLifeTimer) + : false; +} + + +/*! + LifeTimerKeySequenceHandler::destroyMessageBox. + */ +void LifeTimerKeySequenceHandler::destroyMessageBox() +{ + DPRINT_METHODENTRYEXIT; + + if (m_messageBox) { + m_messageBox->deleteLater(); + m_messageBox = 0; + } +}