--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,189 @@
+/*!
+* 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: Handles phone indicators.
+*
+*/
+
+#include "phoneindicatorcontroller.h"
+#include "phoneindicators.h"
+
+#include <QList>
+#include <QPair>
+
+#ifdef Q_OS_SYMBIAN
+#include <logsmodel.h>
+#include <logsfilter.h>
+#include <logsdomaincrkeys.h>
+#include <hbicon.h>
+#endif
+
+PhoneIndicatorController::PhoneIndicatorController(QObject *parent):
+ QObject(parent), m_logsModel(0), m_missedCallsFilter(0)
+{
+#ifdef Q_OS_SYMBIAN
+ m_setManager = new XQSettingsManager(this);
+
+ XQSettingsKey settingsKey( XQSettingsKey::TargetCentralRepository,
+ KCRUidLogs.iUid, KLogsNewMissedCalls );
+
+ bool ok = 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);
+
+ qRegisterMetaType<PhoneIndicatorInfo>("PhoneIndicatorInfo");
+
+#endif
+}
+
+PhoneIndicatorController::~PhoneIndicatorController()
+{
+#ifdef Q_OS_SYMBIAN
+ XQPublishAndSubscribeSettingsKey missedCallCountKey(
+ (qint32)KCRUidLogs.iUid, (quint32)KLogsNewMissedCalls );
+ m_setManager->stopMonitoring(missedCallCountKey);
+ delete m_setManager;
+ delete m_missedCallsFilter;
+ delete m_logsModel;
+#endif
+}
+
+void PhoneIndicatorController::setActiveCallData(
+ const TDesC &text, const TDesC &icon )
+{
+ m_cli = QString::fromUtf16 (text.Ptr (), text.Length ());
+ m_callImage = QString::fromUtf16 (icon.Ptr (), icon.Length ());
+}
+
+void PhoneIndicatorController::clearActiveCallData()
+{
+ m_cli.clear();
+ m_callImage.clear();
+ disableActiveCallIndicator();
+}
+
+void PhoneIndicatorController::enableActiveCallIndicator()
+{
+ if (!m_cli.isEmpty()){
+ QString indicatorType(indicatorName(PhoneActiveCallIndicator));
+ QVariantMap parameters;
+
+ parameters.insert(
+ QVariant(HbIndicatorInterface::PrimaryTextRole ).toString(),
+ m_cli);
+
+ parameters.insert(QVariant( HbIndicatorInterface::DecorationNameRole).toString(),
+ m_callImage);
+
+ m_indicator.activate(indicatorType, parameters);
+ }
+}
+void PhoneIndicatorController::disableActiveCallIndicator()
+{
+ QString indicatorType(indicatorName(PhoneActiveCallIndicator));
+ m_indicator.deactivate(indicatorType);
+}
+
+void PhoneIndicatorController::updateMissedCallIndicator(
+ const XQSettingsKey &key, const QVariant &value)
+{
+#ifdef Q_OS_SYMBIAN
+ if ( key.key() == (quint32)KLogsNewMissedCalls ){
+ if ( value.toInt() == 0 ){
+ QString indicatorType(indicatorName(PhoneMissedCallIndicator));
+ m_indicator.deactivate(indicatorType);
+ delete m_missedCallsFilter;
+ m_missedCallsFilter = NULL;
+ delete m_logsModel;
+ m_logsModel = NULL;
+ } else {
+ m_logsModel = new LogsModel(LogsModel::LogsFullModel);
+ m_missedCallsFilter = new LogsFilter(LogsFilter::Missed);
+ connect( m_missedCallsFilter,
+ SIGNAL(rowsInserted(const QModelIndex &, int, int )),
+ this, SLOT(setMissedallIndicatorData()));
+ m_missedCallsFilter->setMaxSize(value.toInt() + 1);
+ m_missedCallsFilter->setSourceModel(m_logsModel);
+ }
+ }
+#endif
+}
+
+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();
+
+ if ( missedCallCount > 0 ) {
+ QVariantMap parameters;
+ QString lastMissedCallFrom;
+ int repeatedMissedCalls(0);
+
+ if ( m_missedCallsFilter->rowCount() > 0 ){
+ lastMissedCallFrom = m_missedCallsFilter->data(
+ m_missedCallsFilter->index(0,0),
+ Qt::DisplayRole).toStringList().takeFirst();
+ repeatedMissedCalls = 1;
+ }
+ for( int i = 1; i < missedCallCount && i
+ < m_missedCallsFilter->rowCount(); i++ ){
+ QStringList displayData = m_missedCallsFilter->data(
+ m_missedCallsFilter->index(i,0),
+ Qt::DisplayRole).toStringList();
+ if ( lastMissedCallFrom == displayData.at(0) ){
+ repeatedMissedCalls++;
+ } else {
+ i = missedCallCount; // Break
+ }
+ }
+ // First row
+ parameters.insert(
+ QVariant( HbIndicatorInterface::PrimaryTextRole ).toString(),
+ ( hbTrId("txt_phone_dblist_ln_missed_calls",
+ missedCallCount)));
+
+ // Second row
+ if ( missedCallCount >= repeatedMissedCalls )
+ {
+ parameters.insert(
+ 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(),
+ iconName );
+
+ m_indicator.activate(indicatorType, parameters);
+ } else {
+ m_indicator.deactivate( indicatorType );
+ }
+#endif
+}