diff -r 2eacb6118286 -r ba76fc04e6c2 phoneapp/phoneuiqtviewadapter/src/phoneindicatorcontroller.cpp --- /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 +#include + +#ifdef Q_OS_SYMBIAN +#include +#include +#include +#include +#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"); + +#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 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 +}