diff -r 6bb1b21d2484 -r 2f8f8080a020 phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp Mon May 03 12:31:11 2010 +0300 @@ -0,0 +1,153 @@ +/*! +* 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 +#include + +#ifdef Q_OS_SYMBIAN +#include +#include +#include +#include +#endif + +PhoneIndicatorController::PhoneIndicatorController(QObject *parent): + QObject(parent), m_missedCallsFilter(0), m_logsModel(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"); + +#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::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 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(), + iconName ); + + m_indicator.activate(indicatorType, parameters); + } else { + m_indicator.deactivate( indicatorType ); + } +#endif +}