--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/radiohswidget/src/radiohswidgetprofilereader.cpp Fri Jun 25 19:09:05 2010 +0300
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2009 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: FM Radio widget process handler
+*
+*/
+
+// System includes
+#include <QDateTime>
+// TODO: Profile information should be accessed from QtMobility when it is
+// ready.
+#include <ProfileEngineSDKCRKeys.h>
+#include "xqsettingsmanager.h"
+#include "xqsettingskey.h"
+#include "xqpublishandsubscribeutils.h"
+
+// User includes
+#include "radiohswidgetprofilereader.h"
+#include "radiohswidget.h"
+#include "radioservicedef.h"
+#include "radiologger.h"
+
+// Constants
+/** Constant for radio running undefined status. */
+const int RADIO_RUNNING_STATUS_UNDEFINED(-1);
+/** Constant for Off-line profile. */
+const int OFFLINE_PROFILE(5);
+
+/*!
+ \class RadioHsWidgetProfileReader
+ \brief Implementation of P&S key reader and monitor.
+
+ RadioHsWidgetProfileReader implements reader and monitor for P&S keys.
+*/
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+ Constructs a profile reader which is a child of \a parent.
+
+ Creates XQSettingsManager for monitoring and accessing the P&S keys.
+ Connects to the signals of XQSettingsManager.
+*/
+RadioHsWidgetProfileReader::RadioHsWidgetProfileReader(
+ RadioHsWidget *parent) :
+ QObject(parent),
+ mParent(*parent),
+ mSettingsManager(new XQSettingsManager(this)),
+ mRadioStatus(RADIO_RUNNING_STATUS_UNDEFINED)
+{
+ LOG_METHOD;
+ Radio::connect(mSettingsManager, SIGNAL(itemDeleted(XQSettingsKey)), this,
+ SLOT(handleDeletedItem(XQSettingsKey)));
+ Radio::connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
+ this, SLOT(handleChanges(XQSettingsKey, QVariant)));
+}
+
+/*!
+ Destructor
+ */
+RadioHsWidgetProfileReader::~RadioHsWidgetProfileReader()
+{
+ LOG_METHOD;
+ XQSettingsKey radioRunningKey(XQSettingsKey::TargetPublishAndSubscribe,
+ KRadioPSUid, KRadioStartupKey);
+ mSettingsManager->stopMonitoring(radioRunningKey);
+}
+
+/*!
+ Start monitoring of radio P&S key. Read also the initial value.
+ */
+void RadioHsWidgetProfileReader::startMonitoringRadioRunningStatus()
+{
+ LOG_METHOD;
+ XQSettingsKey radioRunningKey(XQSettingsKey::TargetPublishAndSubscribe,
+ KRadioPSUid, KRadioStartupKey);
+ // Start monitoring.
+ mSettingsManager->startMonitoring(radioRunningKey);
+ // Read current value.
+ radioRunningStatus(
+ mSettingsManager->readItemValue(radioRunningKey));
+}
+
+/*!
+ Reads the current profile of the device and \returns \c true if the
+ current profile is offline, \c false otherwise.
+ */
+bool RadioHsWidgetProfileReader::isCurrentProfileOffline()
+{
+ LOG_METHOD_RET("%d");
+ XQSettingsKey profileKey(XQSettingsKey::TargetCentralRepository,
+ KCRUidProfileEngine.iUid, KProEngActiveProfile);
+ // Read current value.
+ QVariant profile(mSettingsManager->readItemValue(profileKey));
+ if (profile.canConvert(QVariant::Int) && profile.toInt() == OFFLINE_PROFILE) {
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Handling of deletion of listened keys.
+
+ \param key Deleted key.
+ */
+void RadioHsWidgetProfileReader::handleDeletedItem(const XQSettingsKey &key)
+{
+ LOG_METHOD_ENTER;
+ if (key.uid() == KRadioPSUid && key.key() == KRadioStartupKey) {
+ LOG("KRadioStartupKey deleted");
+ startMonitoringRadioRunningStatus();
+ }
+}
+
+/*!
+ Notifications from settings manager are handled and routed to appropriate
+ private slots.
+
+ \param key Changed key.
+ \param value Value of changed key.
+ */
+void RadioHsWidgetProfileReader::handleChanges(const XQSettingsKey &key,
+ const QVariant& value)
+{
+ LOG_SLOT_CALLER;
+
+ if (key.uid() == KRadioPSUid && key.key()
+ == KRadioStartupKey) {
+ LOG("KRadioStartupKey changed");
+ radioRunningStatus(value);
+ }
+}
+
+/*!
+ Handling changes in radio running P&S key.
+
+ \param value is int representation of time in seconds when radio was
+ started.
+ */
+void RadioHsWidgetProfileReader::radioRunningStatus(
+ const QVariant &value)
+{
+ LOG_METHOD_ENTER;
+ if (value.canConvert(QVariant::Int)) {
+ mRadioStatus = value.toInt();
+ // Notify the observer that radio is running.
+ mParent.handleRadioStateChange(FmRadio::StateRunning);
+ } else {
+ mRadioStatus = RADIO_RUNNING_STATUS_UNDEFINED;
+ // Notify the observer that radio is not running.
+ mParent.handleRadioStateChange(FmRadio::StateNotRunning);
+ }
+}