diff -r bab96b7ed1a4 -r f39ed5e045e0 phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp --- a/phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp Tue Jun 15 14:14:38 2010 +0100 +++ b/phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp Thu Jul 22 16:33:21 2010 +0100 @@ -17,43 +17,68 @@ #include "phoneindicatorcontroller.h" #include "phoneindicators.h" +#include "qtphonelog.h" -#include -#include +#include +#include #ifdef Q_OS_SYMBIAN #include #include -#include -#include +#include +#include #endif +namespace PhoneIndicatorControllerKeys{ + const XQSettingsKey missedCallsSettingsKey( XQSettingsKey::TargetCentralRepository, + KCRUidLogs.iUid, KLogsNewMissedCalls ); + + const XQSettingsKey unconditionalCFKey( XQSettingsKey::TargetCentralRepository, + KCRUidCtsyCallForwardingIndicator.iUid, KCtsyUnconditionalCFStatus ); + + const XQSettingsKey currentCFKey( XQSettingsKey::TargetCentralRepository, + KCRUidCtsyCallForwardingIndicator.iUid, KCtsyCallForwardingIndicator ); +} + + + PhoneIndicatorController::PhoneIndicatorController(QObject *parent): QObject(parent), m_logsModel(0), m_missedCallsFilter(0) { + PHONE_TRACE #ifdef Q_OS_SYMBIAN m_setManager = new XQSettingsManager(this); - - XQSettingsKey settingsKey( XQSettingsKey::TargetCentralRepository, - KCRUidLogs.iUid, KLogsNewMissedCalls ); - - bool ok = connect( m_setManager, + connect( m_setManager, SIGNAL( valueChanged(const XQSettingsKey & ,const QVariant &)), this, SLOT(updateMissedCallIndicator(XQSettingsKey, QVariant))); - ASSERT( ok ); - ok = false; - ok = m_setManager->startMonitoring( settingsKey ); - ASSERT(ok); + + connect( m_setManager, + SIGNAL( valueChanged(const XQSettingsKey & ,const QVariant &)), + this, SLOT(updateDivertIndicator(XQSettingsKey, + QVariant))); - qRegisterMetaType("PhoneIndicatorInfo"); - + m_setManager->startMonitoring( PhoneIndicatorControllerKeys::missedCallsSettingsKey ); + m_setManager->startMonitoring( PhoneIndicatorControllerKeys::unconditionalCFKey, + XQSettingsManager::TypeByteArray); + m_setManager->startMonitoring( PhoneIndicatorControllerKeys::currentCFKey, + XQSettingsManager::TypeByteArray); + + qRegisterMetaType("PhoneIndicatorInfo"); + QByteArray bytes = m_setManager->readItemValue( + PhoneIndicatorControllerKeys::unconditionalCFKey).toByteArray(); + if ( m_setManager->error() == XQSettingsManager::NoError ){ + int cfStatus=0; + memcpy(&cfStatus, bytes.data_ptr()->array, sizeof(int)); + updateDiverIndicator(cfStatus & KCFVoiceForwarded); + } #endif } PhoneIndicatorController::~PhoneIndicatorController() { #ifdef Q_OS_SYMBIAN + XQPublishAndSubscribeSettingsKey missedCallCountKey( (qint32)KCRUidLogs.iUid, (quint32)KLogsNewMissedCalls ); m_setManager->stopMonitoring(missedCallCountKey); @@ -63,11 +88,10 @@ #endif } -void PhoneIndicatorController::setActiveCallData( - const TDesC &text, const TDesC &icon ) +void PhoneIndicatorController::setActiveCallData() { - m_cli = QString::fromUtf16 (text.Ptr (), text.Length ()); - m_callImage = QString::fromUtf16 (icon.Ptr (), icon.Length ()); + m_cli = hbTrId("txt_phone_dblist_ongoing_call"); + m_callImage = "qtg_mono_call";//QString::fromUtf16 (icon.Ptr (), icon.Length ()); } void PhoneIndicatorController::clearActiveCallData() @@ -103,7 +127,8 @@ const XQSettingsKey &key, const QVariant &value) { #ifdef Q_OS_SYMBIAN - if ( key.key() == (quint32)KLogsNewMissedCalls ){ + + if (compareKeys(key, PhoneIndicatorControllerKeys::missedCallsSettingsKey) ){ if ( value.toInt() == 0 ){ QString indicatorType(indicatorName(PhoneMissedCallIndicator)); m_indicator.deactivate(indicatorType); @@ -124,16 +149,33 @@ #endif } +void PhoneIndicatorController::updateDivertIndicator( + const XQSettingsKey &key, const QVariant &value) +{ + PHONE_TRACE + if ( compareKeys( key, PhoneIndicatorControllerKeys::currentCFKey ) ){ + PHONE_DEBUG("currentCfKey"); + int cfStatus = value.toByteArray().toInt(); + updateDiverIndicator( cfStatus & KCFVoiceForwarded); + } else if (compareKeys(key, PhoneIndicatorControllerKeys::unconditionalCFKey )){ + QByteArray bytes = value.toByteArray(); + // Convert QByteArray elements into integer + // Conversation does not care about sign bit + int status; + memcpy(&status, bytes.data_ptr()->array, sizeof(int)); + updateDiverIndicator(status & KCFVoiceForwarded); + } +} + void PhoneIndicatorController::setMissedallIndicatorData() { #ifdef Q_OS_SYMBIAN - XQSettingsKey settingsKey( XQSettingsKey::TargetCentralRepository, - KCRUidLogs.iUid, KLogsNewMissedCalls ); QString indicatorType(indicatorName(PhoneMissedCallIndicator)); - int missedCallCount = m_setManager->readItemValue( settingsKey, - XQSettingsManager::TypeInt ).toInt(); + int missedCallCount = m_setManager->readItemValue( + PhoneIndicatorControllerKeys::missedCallsSettingsKey, + XQSettingsManager::TypeInt ).toInt(); if ( missedCallCount > 0 ) { QVariantMap parameters; @@ -170,12 +212,7 @@ QVariant( HbIndicatorInterface::SecondaryTextRole ).toString(), lastMissedCallFrom ); } - - // icon - //QList icons = m_missedCallsFilter->data( - // m_missedCallsFilter->index(0,0), - // Qt::DecorationRole).value >(); - //QString iconName = icons.first().value().iconName(); + QString iconName = "qtg_mono_missed_call_unseen"; parameters.insert( QVariant( HbIndicatorInterface::DecorationNameRole ).toString(), @@ -187,3 +224,33 @@ } #endif } + +void PhoneIndicatorController::updateDiverIndicator(bool activeDiverts) +{ + PHONE_TRACE + QString indicatorType(indicatorName(PhoneDivertIndidicator)); + if(activeDiverts){ + QVariantMap parameters; + + // First row + parameters.insert( + QVariant( HbIndicatorInterface::PrimaryTextRole ).toString(), + hbTrId("txt_phone_dblist_active_diverts" )); + + QString iconName = "qtg_mono_call_diverted"; + parameters.insert( + QVariant( HbIndicatorInterface::DecorationNameRole ).toString(), + iconName ); + + m_indicator.activate( indicatorType, parameters ); + }else{ + m_indicator.deactivate( indicatorType ); + } +} + +bool PhoneIndicatorController::compareKeys( + const XQSettingsKey &first, const XQSettingsKey &second) +{ + PHONE_TRACE + return ( first.key() == second.key() && first.uid() == second.uid() ); +}