phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp
branchGCC_SURGE
changeset 51 f39ed5e045e0
parent 30 ebdbd102c78a
parent 46 bc5a64e5bc3c
--- 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 <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.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<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,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() );
+}