--- a/phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp Fri Jun 04 10:19:18 2010 +0100
+++ b/phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp Wed Jun 23 18:12:20 2010 +0300
@@ -17,43 +17,68 @@
#include "phoneindicatorcontroller.h"
#include "phoneindicators.h"
+#include "qtphonelog.h"
-#include <QList>
-#include <QPair>
+#include <QByteArray>
+#include <hbicon.h>
#ifdef Q_OS_SYMBIAN
#include <logsmodel.h>
#include <logsfilter.h>
-#include <logsdomaincrkeys.h>
-#include <hbicon.h>
+#include <LogsDomainCRKeys.h>
+#include <ctsydomaincrkeys.h>
#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>("PhoneIndicatorInfo");
-
+ m_setManager->startMonitoring( PhoneIndicatorControllerKeys::missedCallsSettingsKey );
+ m_setManager->startMonitoring( PhoneIndicatorControllerKeys::unconditionalCFKey,
+ XQSettingsManager::TypeByteArray);
+ m_setManager->startMonitoring( PhoneIndicatorControllerKeys::currentCFKey,
+ XQSettingsManager::TypeByteArray);
+
+ qRegisterMetaType<PhoneIndicatorInfo>("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.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<QVariant> icons = m_missedCallsFilter->data(
- // m_missedCallsFilter->index(0,0),
- // Qt::DecorationRole).value<QList<QVariant> >();
- //QString iconName = icons.first().value<HbIcon>().iconName();
+
QString iconName = "qtg_mono_missed_call_unseen";
parameters.insert(
QVariant( HbIndicatorInterface::DecorationNameRole ).toString(),
@@ -187,3 +224,37 @@
}
#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 );
+
+ // TODO: remove this when ready
+ parameters.insert(
+ QVariant( HbIndicatorInterface::SecondaryTextRole ).toString(),
+ "Feature not ready" );
+ 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() );
+}