# HG changeset patch # User William Roberts # Date 1279812825 -3600 # Node ID 451b2e1545b2341a750a095ebf15a496103b873e # Parent 6bcf277166c1af66592bc594cc29f7fe1751b789# Parent 11b6825f0862b5ce2ef015c3e72ab6e33845062a Catchup to latest Symbian^4 diff -r 6bcf277166c1 -r 451b2e1545b2 common/radio_global.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/radio_global.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,239 @@ +/* +* 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: +* +*/ + +#ifndef RADIO_GLOBAL_H_ +#define RADIO_GLOBAL_H_ + +// System includes +#include +#include + +// Constants + +/** + * Radio frequency multiplier + */ +const int FREQUENCY_MULTIPLIER = 1000000; + +const int ONE_HERTZ = FREQUENCY_MULTIPLIER; + +/** + * Desired amount of steps in the volume control in the UI + */ +const int MAXIMUM_VOLUME_LEVEL = 20; + +/** + * Default volume level that is used when no previous setting exists + */ +const int DEFAULT_VOLUME_LEVEL = 4; + +/** + * Roles used when interacting with the radio station model + */ +namespace RadioRole +{ + enum Role + { + RadioStationRole = Qt::UserRole + 1, + ToggleFavoriteRole, + IsFavoriteRole + }; +} + +/** + * Radio Text Plus tag ids + */ +namespace RtPlus +{ + enum Tag + { + Dummy = 0, + Title = 1, + Artist = 4, + Band = 9, + Homepage = 39 + }; +} + +namespace GenreTarget +{ + enum Target + { + Carousel, + StationsList, + HomeScreen + }; +} + +namespace Seek +{ + enum Direction + { + Down, + Up + }; + + enum State + { + NotSeeking, + SeekingUp, + SeekingDown + }; +} + +namespace Scan +{ + enum Status + { + NotScanning, + ScanningInMainView, + ScanningInStationsView + }; +} + +namespace Scroll +{ + enum Direction + { + Shortest, + Left, + Right + }; +} + +namespace StationSkip +{ + enum Mode + { + Previous, + Next, + PreviousFavorite, + NextFavorite + }; +} + +namespace TuneReason +{ + enum Reason + { + Unspecified, + FrequencyStrip, + ManualSeekUpdate, + ManualSeekTune, + StationCarousel, + StationsList, + Skip, + Seek, + StationScanInitialization, + StationScan, + StationScanFinalize, + StationScanNoStationsFound, + SkipFromEngine + }; +} + +namespace RadioRegion +{ + enum Region + { + None = -1, + Default, + Japan, + America, + Poland + }; +} + +namespace GenreEurope +{ + enum Europe + { + RdsNone, + RdsNews, + RdsCurrentAffairs, + RdsInformation, + RdsSport, + RdsEducation, + RdsDrama, + RdsCulture, + RdsScience, + RdsVariedSpeech, + RdsPopMusic, + RdsRockMusic, + RdsEasyListening, + RdsLightClassical, + RdsSeriousClassical, + RdsOtherMusic, + RdsWeather, + RdsFinance, + RdsChildrensProgrammes, + RdsSocialAffairs, + RdsReligion, + RdsPhoneIn, + RdsTravel, + RdsLeisure, + RdsJazzMusic, + RdsCountryMusic, + RdsNationalMusic, + RdsOldiesMusic, + RdsFolkMusic, + RdsDocumentary, + RdsAlarmTest, + RdsAlarm + }; +} + +namespace GenreAmerica +{ + enum America + { + RbdsNone, + RbdsNews, + RbdsInformation, + RbdsSports, + RbdsTalk, + RbdsRock, + RbdsClassicRock, + RbdsAdultHits, + RbdsSoftRock, + RbdsTop40, + RbdsCountry, + RbdsOldies, + RbdsSoft, + RbdsNostalgia, + RbdsJazz, + RbdsClassical, + RbdsRhythmAndBlues, + RbdsSoftRhythmAndBlues, + RbdsLanguage, + RbdsReligiousMusic, + RbdsReligiousTalk, + RbdsPersonality, + RbdsPublic, + RbdsCollege, + RbdsUnassigned1, + RbdsUnassigned2, + RbdsUnassigned3, + RbdsUnassigned4, + RbdsUnassigned5, + RbdsWeather, + RbdsEmergencyTest, + RbdsEmergency + }; +} + +#endif // RADIO_GLOBAL_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 common/radiologger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/radiologger.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,204 @@ +/* +* 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: +* +*/ + +// System includes +#include + +// User includes +#include "radiologger.h" + +/*! + * + */ +void RadioLogger::initCombinedLogger() +{ +#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER && !defined BUILD_WIN32 + TRAP_IGNORE( RadioEngineUtils::InitializeL() ); + if ( !MRadioEngineLogger::Logger() ) { + qDebug() << "FMRadioUi: Cannot combine logs with engine. Engine logger not active"; + } +#endif // LOGGING_ENABLED +} + +/*! + * + */ +void RadioLogger::releaseCombinedLogger() +{ +#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER && !defined BUILD_WIN32 + RadioEngineUtils::Release(); +#endif // LOGGING_ENABLED +} + +/*! + * enum Mode { Normal, MethodEnter, MethodExit, DecIndent }; + */ +void RadioLogger::logMsg( const char* msg, Mode mode ) +{ + Q_UNUSED( msg ); + Q_UNUSED( mode ); +#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER && !defined BUILD_WIN32 + MRadioEngineLogger* logger = MRadioEngineLogger::Logger(); + if ( logger ) { + if ( mode == RadioLogger::Normal ) { + logger->AddIndent(KMarkerUi()).Add( msg ).Commit(); + } else if ( mode == RadioLogger::MethodEnter ) { + logger->AddIndentClear( KMarkerUi() ).Add( msg ).Commit(); + logger->IncIndent(); + } else if ( mode == RadioLogger::MethodExit ) { + logger->DecIndent(); + logger->AddIndentClear( KMarkerUi() ).Add( msg ).Commit(); + } else if ( mode == RadioLogger::DecIndent ) { + logger->DecIndent(); + } else {} + } +#endif // LOGGING_ENABLED +} + + +#ifdef LOGGING_ENABLED + +#include +#include +#include +#include + +#ifdef TRACE_TO_FILE + QFile mDebugFile; + bool mFilterByLogMarker = false; +#endif + +const char* KLogEnter = "\\ %s"; +const char* KLogExit = "/ %s"; +const char* KLogExitRet = "/ %s, Returning %s"; +const char* KLogExitException = "/ %s, Exception raised"; +const char* KLogLine = "| "; + +/*! + * + */ +#if defined(__WINS__) +static QString formatString( const char* format, long val ) +{ + if ( strcmp( format, "" ) == 0 ) { + return ""; + } + QString string; + string.sprintf( format, val ); + return string; +} +#endif + +/*! + * + */ +MethodLogger::MethodLogger( const char* function, const char* format ) : + mFunction( function ), + mFormat( format ) +{ + QString msg; + msg.sprintf( KLogEnter, mFunction ); + WRITELOG_METHOD_ENTER( msg ); +} + +/*! + * + */ +MethodLogger::~MethodLogger() +{ + if ( std::uncaught_exception() ) { + QString msg; + msg.sprintf( KLogExitException, mFunction ); + WRITELOG_METHOD_EXIT( msg ); + } else { + QString msg; + if ( strlen( mFormat ) > 0 ) { + #if defined(__WINS__) + + long retVal = 0; + _asm( mov retVal, ebx ); + msg.sprintf( KLogExitRet, mFunction, formatString( mFormat, retVal ) ); + WRITELOG_METHOD_EXIT( msg ); + + #else + msg.sprintf( KLogExit, mFunction ); + WRITELOG_METHOD_EXIT( msg ); + #endif + } else { + msg.sprintf( KLogExit, mFunction ); + WRITELOG_METHOD_EXIT( msg ); + } + } +} +#else + +MethodLogger::MethodLogger( const char*, const char* ) +{ +} + +MethodLogger::~MethodLogger() +{ +} + +#endif // LOGGING_ENABLED + + +#ifdef TRACE_TO_FILE + +/*! + * + */ +void FileLogger::installMessageHandler( const QString& fileName, bool filterByMarker ) +{ + mDebugFile.setFileName( fileName ); + mFilterByLogMarker = filterByMarker; + + mDebugFile.open( QIODevice::Text | QIODevice::WriteOnly ); + + if ( mDebugFile.isOpen() ) { + qInstallMsgHandler( FileLogger::handleMessage ); + } +} + +/*! + * + */ +void FileLogger::uninstallMessageHandler() +{ + if ( mDebugFile.isOpen() ) { + qInstallMsgHandler( 0 ); + mDebugFile.close(); + } +} + +/*! + * + */ +void FileLogger::handleMessage( QtMsgType type, const char* msg ) +{ + QTextStream debugStream( &mDebugFile ); + QDateTime dateTime( QDateTime::currentDateTime() ); + + if ( type == QtDebugMsg ) { + QString message( msg ); + if ( mFilterByLogMarker && message.contains( QString( LOGMARKER ) ) ) + { + debugStream << dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz") << " : " << message << endl; + } + } +} +#endif // TRACE_TO_FILE diff -r 6bcf277166c1 -r 451b2e1545b2 common/radiologger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/radiologger.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,363 @@ +/* +* 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: +* +*/ + +#ifndef _RADIOLOGGER_H_ +#define _RADIOLOGGER_H_ + +// System includes +#include + +/** + * Logging level macro definitions + * Level 1 - No level macro needed. The trace is shown when logging is on. + * Level 2 - Wrap log line with LEVEL2 macro. Traces of level 1 and 2 are shown. + * Level 3 - Wrap log line with LEVEL3 macro. Traces of level 1, 2 and 3 are shown. + */ +#if LOGGING_LEVEL == 2 +# define LEVEL2( expr ) expr +# define LEVEL3( expr ) +#elif LOGGING_LEVEL == 3 +# define LEVEL2( expr ) expr +# define LEVEL3( expr ) expr +#else +# define LEVEL2( expr ) +# define LEVEL3( expr ) +#endif + +#if LOGGED_COMPONENT == 2 +# define LOGMARKER "FMRadioHsWidget:" +# define WRAPPER_DLL_EXPORT +#else +# define LOGMARKER "FMRadio:" +# ifdef BUILD_WRAPPER_DLL +# define WRAPPER_DLL_EXPORT Q_DECL_EXPORT +# else +# define WRAPPER_DLL_EXPORT Q_DECL_IMPORT +# endif +#endif + +class WRAPPER_DLL_EXPORT RadioLogger +{ +public: + + enum Mode { Normal, MethodEnter, MethodExit, DecIndent }; + + static void initCombinedLogger(); + static void releaseCombinedLogger(); + + static void logMsg( const char* msg, Mode mode = Normal ); + +private: + RadioLogger(); + ~RadioLogger(); +}; + +// ============================================================================ +// START TIMESTAMP LOGGING +// ============================================================================ + +#ifdef TIMESTAMP_LOGGING_ENABLED + +#include +#include + +/** + * Timestamp logging macro. + * When the macro is defined, timestamp logging is on + * + * Example. These lines in the code... + * LOG_TIMESTAMP( "Start operation" ); + * ... + * LOG_TIMESTAMP( "End operation" ); + * + * ... print the following log lines + * FMRadio: Start operation "14:13:09.042" + * FMRadio: End operation "14:13:09.250" + */ +//#define LOG_TIMESTAMP(comment) do{ qDebug() << LOGMARKER << comment << QTime::currentTime().toString("hh:mm:ss.zzz"); }while(0) +#define LOG_TIMESTAMP(comment) LOG_FORMAT( comment ## " %s", GETSTRING( QTime::currentTime().toString("hh:mm:ss.zzz") ) ) + +#else + +#define LOG_TIMESTAMP(comment) + +#endif // TIMESTAMP_LOGGING_ENABLED + +// ============================================================================ +// END TIMESTAMP LOGGING +// ============================================================================ + +// ============================================================================ +// START FULL LOGGING +// ============================================================================ + +#ifdef LOGGING_ENABLED + +#include +#include + +// Macro to hide a function variable that is used only when debugging is enabled. +// Expands to the variable name when debugging is enabled and to nothing when it is not +#if LOGGING_LEVEL == 2 +# define DEBUGVAR( var ) var +# define DEBUGVAR2( var ) var +# define DEBUGVAR3( var ) +#elif LOGGING_LEVEL == 3 +# define DEBUGVAR( var ) var +# define DEBUGVAR2( var ) var +# define DEBUGVAR3( var ) var +#else +# define DEBUGVAR( var ) var +# define DEBUGVAR2( var ) +# define DEBUGVAR3( var ) +#endif + +// UI logs can be combined with engine logs by making the UI feed its log prints into +// the engine logger. This requires that we initialize the radio engine utils right here +// because the engine won't start up until much later. This is a bit ugly since the macros +// call Symbian code directly, but it was considered to be worth it to see UI and engine +// traces in the same file. +#if defined COMBINE_WITH_ENGINE_LOGGER && defined LOGGING_ENABLED && !defined BUILD_WIN32 +# include "../../../radioengine/utils/api/mradioenginelogger.h" +# include "../../../radioengine/utils/api/radioengineutils.h" +# define WRITELOG(msg) RadioLogger::logMsg( msg ); +# define WRITELOG_METHOD_ENTER(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodEnter ); +# define WRITELOG_METHOD_EXIT(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodExit ); +# define LOGGER_DEC_INDENT RadioLogger::logMsg( "", RadioLogger::DecIndent ); +# define WRITELOG_GETSTRING(msg) WRITELOG( GETSTRING( msg ) ) +# define INIT_COMBINED_LOGGER RadioLogger::initCombinedLogger(); +# define RELEASE_COMBINED_LOGGER RadioLogger::releaseCombinedLogger(); +#else +# define WRITELOG(msg) qDebug() << LOGMARKER << msg; +# define WRITELOG_METHOD_ENTER(msg) WRITELOG(msg) +# define WRITELOG_METHOD_EXIT(msg) WRITELOG(msg) +# define WRITELOG_GETSTRING(msg) WRITELOG(msg) +# define LOGGER_INC_INDENT +# define LOGGER_DEC_INDENT +# define INIT_COMBINED_LOGGER +# define RELEASE_COMBINED_LOGGER +#endif + +// Macro that simply logs a string +// Example: +// LOG( "This is a test" ); +#define LOG(string) do{ WRITELOG( string ) }while(0) + +// Helper macro to get a const char* out of a QString so that it can be logged. Can be used with LOG_FORMAT() +#define GETSTRING(qstring) qstring.toAscii().constData() + +// Macro that logs a string with multiple parameters +// Examples: +// LOG_FORMAT( "This is an integer %d, and this is a float with two digits %.2f", 42, 3.14 ); +// LOG_FORMAT( "This is a QString %s", GETSTRING(someQString) ); +#define LOG_FORMAT(fmt,args...) do{ QString tmp; WRITELOG_GETSTRING( tmp.sprintf(fmt,args) ) }while(0) + +// Macro that logs function enter, exit and exception +// Example (Simply put it in the beginning of a function): +// LOG_METHOD; +// Output: +// -> SomeFunction(int,const char*) +// <- SomeFunction(int,const char*) +// <- SomeFunction(int,const char*): Exception raised! +#define LOG_METHOD MethodLogger ___methodLogger( __PRETTY_FUNCTION__, "" ) + +// Same as the previous function logging macro with the addition of logging the return value +// Note! The return value can only be retrieved in the emulator. +// Example (Simply put it in the beginning of a function): +// LOG_METHOD_RET( "%d" ); +// Output: +// -> SomeFunction(int,const char*) +// <- SomeFunction(int,const char*) returning 42 +#define LOG_METHOD_RET(fmt) MethodLogger ___methodLogger( __PRETTY_FUNCTION__, fmt ) + +// Logs function enter but does not log exit or leave. This is meant to be lighter than LOG_METHOD macro +#define LOG_METHOD_ENTER LOG_FORMAT( "Enter: %s", __PRETTY_FUNCTION__ ) + +// Assert macro for logging. If the condition is false, the expression is performed +// Example: +// LOG_ASSERT( thisMustBeTrue, LOG_FORMAT( "OMG! That was not true: %d", thisMustBeTrue ) ); +#define LOG_ASSERT(cond,expr) do{ if (!cond) { expr; } }while(0) + +// Macro to log slot function caller by its class name. +#define LOG_SLOT_CALLER do { \ + QObject* caller = sender(); \ + if ( caller ) { \ + LOG_FORMAT( "SLOT %s called by %s. Objectname: %s", __PRETTY_FUNCTION__, \ + caller->metaObject()->className(), GETSTRING( caller->objectName() ) ); \ + } else { \ + LOG_FORMAT( "SLOT %s called as regular function. ", __PRETTY_FUNCTION__ ); \ + } \ + } while (0) + +// Class declaration +class WRAPPER_DLL_EXPORT MethodLogger +{ +public: + + MethodLogger( const char* function, const char* format ); + ~MethodLogger(); + +private: + + const char* mFunction; + const char* mFormat; + +}; + +#else // LOGGING_ENABLED + +# define LOG(string) +# define GETSTRING(qstring) +# define LOG_FORMAT(fmt,args...) +# define LOG_METHOD +# define LOG_METHOD_RET(fmt) +# define LOG_METHOD_ENTER +# define LOG_ASSERT(cond,expr) +# define DEBUGVAR(a) +# define DEBUGVAR2(a) +# define DEBUGVAR3(a) +# define LOG_SLOT_CALLER +# define INIT_COMBINED_LOGGER +# define RELEASE_COMBINED_LOGGER + + +// Dummy class +class WRAPPER_DLL_EXPORT MethodLogger +{ +public: + MethodLogger( const char*, const char* ); + ~MethodLogger(); +}; + +#endif // LOGGING_ENABLED + +#ifdef TRACE_TO_FILE + +# define INSTALL_MESSAGE_HANDLER FileLogger::installMessageHandler(QString(TRACE_OUTPUT_FILE), FILTER_BY_LOGMARKER); +# define UNINSTALL_MESSAGE_HANDLER FileLogger::uninstallMessageHandler(); + +// Class declaration +class WRAPPER_DLL_EXPORT FileLogger +{ +public: + + static void installMessageHandler( const QString& fileName, bool filterByMarker = true ); + static void uninstallMessageHandler(); + +private: + + static void handleMessage( QtMsgType type, const char* msg ); + +}; + +#else +# define INSTALL_MESSAGE_HANDLER +# define UNINSTALL_MESSAGE_HANDLER +#endif // TRACE_TO_FILE + +// ============================================================================ +// END FULL LOGGING +// ============================================================================ + +class Radio +{ + Radio(); + ~Radio(); +public: + + // ============================================================================ + // SIGNAL/SLOT CONNECT CHECKER + // ============================================================================ + static bool connect( const QObject* sender, const char* signal, + const QObject* receiver, const char* member, + Qt::ConnectionType type = Qt::AutoConnection ) + { + bool connected = QObject::connect( sender, signal, receiver, member, type ); + + #ifdef CONNECT_TEST_MODE + + if ( !connected ) { + LOG( "Failed to make a signal-slot connection!" ); + LOG_FORMAT( "sender: %s", sender->metaObject()->className() ); + LOG_FORMAT( "signal: %s", signal ); + LOG_FORMAT( "receiver: %s", receiver->metaObject()->className() ); + LOG_FORMAT( "slot/signal: %s", signal ); + + #if CONNECT_TEST_MODE == 2 + Q_ASSERT( false ); + #endif + + // ---------------------------------------------------------------- + // SIGNAL-SLOT CONNECT FAILED! + // ---------------------------------------------------------------- + } + + #endif + + return connected; + } + + // ============================================================================ + // SIGNAL/SLOT DISCONNECT CHECKER + // ============================================================================ + static bool disconnect( const QObject* sender, const char* signal, + const QObject* receiver, const char* member ) + { + bool disconnected = QObject::disconnect( sender, signal, receiver, member ); + + #ifdef CONNECT_TEST_MODE + + if ( !disconnected ) { + LOG( "Failed to disconnect a signal-slot connection!" ); + LOG_FORMAT( "sender: %s", sender->metaObject()->className() ); + LOG_FORMAT( "signal: %s", signal ); + LOG_FORMAT( "receiver: %s", receiver->metaObject()->className() ); + LOG_FORMAT( "slot/signal: %s", signal ); + + #if CONNECT_TEST_MODE == 2 + Q_ASSERT( false ); + #endif + + // ---------------------------------------------------------------- + // SIGNAL-SLOT DISCONNECT FAILED! + // ---------------------------------------------------------------- + } + + #endif + + return disconnected; + } +}; + +#ifdef ENABLE_ASSERTS + + #define RADIO_ASSERT(cond,where,what) Q_ASSERT_X(cond,where,what) + +#else +# ifdef LOGGING_ENABLED +# define RADIO_ASSERT(cond,where,what) \ + do { \ + if ( !cond ) { \ + LOG_FORMAT( "ASSERT Failed! %s, %s", where, what ); \ + } \ + } while ( false ) +# else +# define RADIO_ASSERT(cond,where,what) +# endif // LOGGING_ENABLED +#endif // ENABLE_ASSERTS + +#endif // _RADIOLOGGER_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 common/radionotificationdata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/radionotificationdata.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,69 @@ +/* +* 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: +* +*/ + +#ifndef RADIONOTIFICATIONDATA_H +#define RADIONOTIFICATIONDATA_H + +// System includes +#include + +class RadioNotificationData +{ +public: + + RadioNotificationData() : mType( 0 ) {} + RadioNotificationData( int type, const QVariant& data ) : + mType( type ), + mData( data ) + {} + + virtual ~RadioNotificationData() {} + + #ifndef BUILD_WIN32 + template void serialize( Stream& stream ) const; + template void deserialize( Stream& stream ); + #endif // BUILD_WIN32 + + int mType; + QVariant mData; + +}; + +#ifndef BUILD_WIN32 + +Q_DECLARE_USER_METATYPE(RadioNotificationData) + +template void RadioNotificationData::serialize( Stream& stream ) const +{ + stream << mType; + stream << mData; +} + +template void RadioNotificationData::deserialize( Stream& stream ) +{ + stream >> mType; + stream >> mData; +} + +Q_IMPLEMENT_USER_METATYPE(RadioNotificationData) + +#else + +Q_DECLARE_METATYPE( RadioNotificationData ) + +#endif // BUILD_WIN32 +#endif // RADIONOTIFICATIONDATA_H diff -r 6bcf277166c1 -r 451b2e1545b2 common/radioservicedef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/radioservicedef.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,79 @@ +/* +* 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: +* +*/ + +#ifndef RADIOSERVICES_H +#define RADIOSERVICES_H + +#include + +static const QLatin1String RADIO_SERVICE( "fmradio" ); +static const QLatin1String RADIO_CONTROL_SERVICE( "com.nokia.symbian.IRadioControl" ); +static const QLatin1String RADIO_CONTROL_SERVICE_OPERATION( "command(int)" ); +static const QLatin1String RADIO_MONITOR_SERVICE( "com.nokia.symbian.IRadioMonitor" ); +static const QLatin1String RADIO_MONITOR_SERVICE_OPERATION( "requestNotifications()" ); +static const QLatin1String RADIO_MONITOR_SERVICE_REFRESH_OPERATION( "requestAllData()" ); + + +const long KRadioPSUid = 0x101FF976; +const unsigned long KRadioStartupKey = 0x00000014; + +const quint32 NOKIA_VENDORID = VID_DEFAULT; + +namespace RadioServiceCommand +{ + enum CommandId + { + PowerOn, + PowerOff, + Previous, + Next, + SeekUp, + SeekDown, + Foreground, + Background, + Mute, + UnMute + }; +} + +namespace RadioServiceNotification +{ + enum Type { + FavoriteCount = 1, + CurrentIsFavorite, + RadioStatus, + Frequency, + Name, + Genre, + RadioText, + DynamicPS + }; +} + +namespace RadioStatus +{ + enum Status { + UnSpecified, + Playing, + Muted, + Seeking, + NoAntenna, + PoweringOff + }; +} + +#endif // RADIOSERVICES_H diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/buildflags.pri --- a/hswidgetplugin/buildflags.pri Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -# -# 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: -# - -# $$_PRO_FILE_PWD_ points to the directory of the pro file -MOC_DIR = $$_PRO_FILE_PWD_/tmp -RCC_DIR = $$_PRO_FILE_PWD_/tmp -OBJECTS_DIR = $$_PRO_FILE_PWD_/tmp -UI_DIR = $$_PRO_FILE_PWD_/tmp -UI_HEADERS_DIR = $$_PRO_FILE_PWD_/tmp -UI_SOURCES_DIR = $$_PRO_FILE_PWD_/tmp diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro --- a/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -# -# 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: Example of home screen widget -# - -include(../buildflags.pri) - -TEMPLATE = lib -CONFIG += plugin mobility hb -MOBILITY = serviceframework - -LIBS += -lxqsettingsmanager \ - -lxqservice \ - -lxqserviceutil - -HEADERS += ./inc/*.h -SOURCES += ./src/*.cpp - -INCLUDEPATH += ./inc -INCLUDEPATH += ../../radioapp/commoninc - -UID = 2002E6D6 - -RESOURCES = resources.qrc -#exportResources(./resource/$${TARGET}_icon*.png, $$PLUGIN_SUBDIR) - -symbian: { - - DESTDIR = /private/20022F35/import/widgetregistry/$${UID} - INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE - - TARGET.UID3 = 0x$${UID} - TARGET.EPOCALLOWDLLDATA=1 - TARGET.CAPABILITY = ALL -TCB - - plugins.path = $${DESTDIR} - plugins.sources = $${TARGET}.dll - - widgetResources.path = $${DESTDIR} -# commented out -# widgetResources.sources += resource/$${TARGET}.s60xml -# Use this in emulator instead of xml in resources directory. -# widgetResources.sources += $${TARGET}.xml - widgetResources.sources += resource/$${TARGET}.xml - widgetResources.sources += resource/$${TARGET}.manifest -# icon is now removed to be able to unistall the widget more easily. -# widgetResources.sources += resource/$${TARGET}_icon*.png - - DEPLOYMENT += plugins \ - widgetResources -} - -win32: { - - CONFIG(debug, debug|release) { - SUBDIRPART = debug - } else { - SUBDIRPART = release - } - - PLUGIN_SUBDIR = /hsresources/import/widgetregistry/$${UID} - - DESTDIR = $$PWD/../../../../../bin/$${SUBDIRPART}/$${PLUGIN_SUBDIR} - - manifest.path = $${DESTDIR} - manifest.files = ./resource/*.manifest ./resource/*.xml ./resource/*.css #./resource/*.png - - INSTALLS += manifest - -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.xml --- a/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.xml Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - - fmradiohswidgetplugin - c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.qtplugin - FM Radio homescreen widget - - com.nokia.IHomeScreenWidget - 1.0 - FM Radio homescreen widget - - fmradiohswidgetplugin_icon.png - FM Radio Widget - - diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidget.h --- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidget.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,231 +0,0 @@ -/* -* 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: FM Radio home screen widget -* -*/ - -#ifndef FMRADIOHSWIDGET_H -#define FMRADIOHSWIDGET_H - -// System includes -#include - -// User includes -#include "fmradiohswidgetradioserviceclient.h" - -// Forward declarations -class HbLabel; -class HbPushButton; -class HbMarqueeItem; -class XQSettingsManager; -class XQSettingsKey; -class FmRadioHsWidgetProcessHandler; -class FmRadioHsWidgetProfileReader; -class QGraphicsLinearLayout; - -// Defines -const QString KDocml = ":/ui/resource/fmradiohswidget.docml"; -const QString KCss = ":/ui/resource/fmradiohswidgetplugin.css"; - -// Constants -/** Key for radio information hash. */ -const QString KRadioInformationStationName = "stationName"; -/** Key for radio information hash. */ -const QString KRadioInformationCallSign = "callSign"; -/** Key for radio information hash. */ -const QString KRadioInformationFrequency = "frequency"; -/** Key for radio information hash. */ -const QString KRadioInformationRt = "rt"; -/** Key for radio information hash. */ -const QString KRadioInformationDynamicPsName = "dynamicPsName"; -/** Key for radio information hash. */ -const QString KRadioInformationPty = "pty"; -/** Key for radio information hash. */ -const QString KRadioInformationHomePage = "homePage"; -/** Key for radio information hash. */ -const QString KRadioInformationSong = "song"; -/** Text to display in widget. */ -const QString KFmRadioText = "FM Radio"; -/** Information text to connect headset. */ -const QString KConnectHeadsetText = "Connect wired headset."; -/** Mhz text. */ -const QString KMhzText = "Mhz"; -/** DOCML object name for mainLayout */ -const QString KDocmlObjectNameMainLayout = "mainLayout"; -/** DOCML object name for radioIconPushButton */ -const QString KDocmlObjectNameRadioIconPushButton = "radioIconPushButton"; -/** DOCML object name for verticalSeparatorLabel */ -const QString KDocmlObjectNameVerticalSeparatorLabel = "verticalSeparatorLabel"; -/** DOCML object name for controlAreaLayout */ -const QString KDocmlObjectNameControlAreaLayout = "controlAreaLayout"; -/** DOCML object name for previousPushButton */ -const QString KDocmlObjectNamePreviousPushButton = "previousPushButton"; -/** DOCML object name for verticalButtonSeparatorLabel1 */ -const QString KDocmlObjectNameVerticalButtonSeparatorLabel1 = "verticalButtonSeparatorLabel1"; -/** DOCML object name for playPushButton */ -const QString KDocmlObjectNamePlayPushButton = "playPushButton"; -/** DOCML object name for verticalButtonSeparatorLabel2 */ -const QString KDocmlObjectNameVerticalButtonSeparatorLabel2 = "verticalButtonSeparatorLabel2"; -/** DOCML object name for nextPushButton */ -const QString KDocmlObjectNameNextPushButton = "nextPushButton"; -/** DOCML object name for twoRowsLayout */ -const QString KDocmlObjectNameTwoRowsLayout = "twoRowsLayout"; -/** DOCML object name for oneRowLayout */ -const QString KDocmlObjectNameOneRowLayout = "oneRowLayout"; -/** DOCML object name for animationLayout */ -const QString KDocmlObjectNameAnimationLayout = "animationLayout"; -/** DOCML object name for firstRowLabel */ -const QString KDocmlObjectNameFirstRowLabel = "firstRowLabel"; -/** DOCML object name for secondRowLabel */ -const QString KDocmlObjectNameSecondRowLabel = "secondRowLabel"; -/** DOCML object name for lonelyRowLabel */ -const QString KDocmlObjectNameLonelyRowLabel = "lonelyRowLabel"; -/** DOCML object name for animationIcon */ -const QString KDocmlObjectNameAnimationIcon = "animationIcon"; - -class FmRadioHsWidget : public HbWidget -{ - Q_OBJECT - -public: - FmRadioHsWidget(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0); - ~FmRadioHsWidget(); - - // enum for commands controlling FM Radio - enum FmRadioControlCommand - { - Mute, - Unmute, - PreviousChannel, - NextChannel - }; - - // enum for FM Radio states - enum FmRadioState - { - Undefined, - NotRunning, - Starting, - Running, - ControllingAudio, - NotControllingAudio, - Seeking, - AntennaNotConnected - }; - - // enum for information area layout states - enum InformationAreaLayout - { - OneRow, - TwoRows, - Animation - }; - - // enum for control button states - enum ControlButtonState - { - AllDisabledPlay, - AllDisabledStop, - ChannelsDisabledPlay, - ChannelsDisabledStop, - ChannelsEnabledPlay, - ChannelsEnabledStop - }; - - // enum for control button states - enum PlayButtonState - { - PlayDisabled, - PlayEnabled, - StopDisabled, - StopEnabled - }; - - enum ControlButtonPosition - { - Left, - Center, - Right - }; - -public slots: - //void onInitialize(); // Can be used in future to get on intialize event. - void onShow(); - void onHide(); - //void onUninitialize(); // Can be used in future to get on unintialize event. - - bool eventFilter(QObject *target, QEvent *event); - -private slots: - void load(const QString docml); - - void mute(); - void unMute(); - void previousChannel(); - void nextChannel(); - void radioToForeground(); - void radioToBackground(); - bool openUrl(QUrl url); - - void handleRadioInformationChange(int notificationId, QVariant value); - bool updateRadioInformation(const QString informationType, QString information); - void radioInformationChanged(); - void clearRadioInformation(); - void handleRadioStateChange(QVariant value); - - void changeInformationAreaLayout(InformationAreaLayout layout); - void changeControlButtonState(ControlButtonState buttonState); - void changePlayButtonState(PlayButtonState buttonState); - void changeChannelButtonsEnabledState(bool enabled); - void changeControlButtonFrameBackground(bool enabled, ControlButtonPosition position, - HbPushButton *button); - -private: - // Data - Q_DISABLE_COPY(FmRadioHsWidget) - - HbPushButton *mRadioPushButton; - HbLabel *mVerticalSeparatorLabel; - HbPushButton *mPreviousPushButton; - HbLabel *mVerticalButtonSeparatorLabel1; - HbPushButton *mPlayPushButton; - HbLabel *mVerticalButtonSeparatorLabel2; - HbPushButton *mNextPushButton; - QGraphicsWidget *mInformationAreaOneRowLayout; - QGraphicsWidget *mInformationAreaTwoRowsLayout; - QGraphicsWidget *mInformationAreaAnimationLayout; - HbLabel *mInformationFirstRowLabel; // This should be maybe a HbLineEdit for displaying and receiving click on url's. - //HbMarqueeItem *mInformationFirstRowMarquee; - HbLabel *mInformationSecondRowLabel;// HbLineEdit may also support marquee/scrolling. - //HbMarqueeItem *mInformationSecondRowMarquee; - HbLabel *mInformationLonelyRowLabel; - //HbMarqueeItem *mInformationLonelyRowMarquee; - HbLabel *mAnimationIcon; - - FmRadioState mFmRadioState; - PlayButtonState mPlayButtonState; - bool mIsFavoriteChannels; - - QHash mRadioInformation; // Stores the radio information - QString mRadioInformationFirstRow; - QString mRadioInformationSecondRow; - - FmRadioHsWidgetProcessHandler *mProcessHandler; // For launching the FM Radio application - FmRadioHsWidgetProfileReader *mProfileMonitor; - - FmRadioHsWidgetRadioServiceClient *mRadioServiceClient; // For communicating with the FM Radio through Qt Highway - -}; - -#endif // FMRADIOHSWIDGET_H diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetplugin.h --- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetplugin.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* 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: FM Radio home screen widget plugin -* -*/ - -#ifndef FMRADIOHSWIDGETPLUGIN_H -#define FMRADIOHSWIDGETPLUGIN_H - -#include -#include - -QTM_USE_NAMESPACE -class FmRadioHsWidgetPlugin : public QObject, public QServicePluginInterface -{ - Q_OBJECT - Q_INTERFACES(QtMobility::QServicePluginInterface) - -public: - QObject *createInstance(const QServiceInterfaceDescriptor &descriptor, - QServiceContext *context, - QAbstractSecuritySession *session); -}; - -#endif // FMRADIOHSWIDGETPLUGIN_H diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetprocesshandler.h --- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetprocesshandler.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* 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 -* -*/ - -#ifndef FMRADIOHSWIDGETPROCESSHANDLER_H_ -#define FMRADIOHSWIDGETPROCESSHANDLER_H_ - -// System includes -#include -#include - -// User includes - -// Forward declarations -#include - -// Constants -/** FM Radio application executable. */ -const QString KRadioExecutablePath = "/sys/bin/qtfmradio.exe"; // TODO: Remove the hard coded path and use some util to determine the path instead. -/** Arguments for FM Radio application executable. */ -const QString KRadioExecutableArguments = ""; - -class FmRadioHsWidgetProcessHandler : public QObject -{ -Q_OBJECT - -public: - FmRadioHsWidgetProcessHandler(QObject *parent = 0); - ~FmRadioHsWidgetProcessHandler(); - -public: - void startFmRadioApplication(); - -signals: - void fmRadioApplicationStateChanged(QVariant state); - -public slots: - void handleStateChange(QProcess::ProcessState state); - void handleError(QProcess::ProcessError error); - void handleFinish(int exitCode, QProcess::ExitStatus exitStatus); - -private: - QProcess* mProcess; - -}; - -#endif /* FMRADIOHSWIDGETPROCESSHANDLER_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetprofilereader.h --- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetprofilereader.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* 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 profile reader -* -*/ - -#ifndef FMRADIOHSWIDGETPROFILEREADER_H_ -#define FMRADIOHSWIDGETPROFILEREADER_H_ - -// System includes -#include -#include - -// Forward declarations -class XQSettingsManager; -class XQSettingsKey; - -class FmRadioHsWidgetProfileReader : public QObject -{ -Q_OBJECT - -public: - FmRadioHsWidgetProfileReader(QObject *parent = 0); - virtual ~FmRadioHsWidgetProfileReader(); - - QVariant radioStatus(); - -signals: - void profileChanged(int profile); - void radioRunning(QVariant state); - -public slots: - void itemDeleted(const XQSettingsKey& key); - //void handleChanges(const XQSettingsKey& key, const QVariant& value); - void handleRadioRunningChanges(const XQSettingsKey& key, const QVariant& value); - -private slots: - void currentProfileStatus(QVariant value); - void currentRadioRunningStatus(QVariant value); - - void startMonitoringRadioRunningStatus(); - -private: // data - XQSettingsManager *mSettingsManager; // For getting and P&S notifications - int mRadioStatus; - -}; - -#endif /* FMRADIOHSWIDGETPROFILEREADER_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h --- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/* -* 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 radio service client -* -*/ - -#ifndef FMRADIOHSWIDGETRADIOSERVICECLIENT_H_ -#define FMRADIOHSWIDGETRADIOSERVICECLIENT_H_ - -// System includes -#include -#include -#include - -// Constants -/** Radio service name. */ -const QString KRadioServiceName = "com.nokia.services.Radio"; -/** Radio control interface name. */ -const QString KRadioServiceControlInterfaceName = "IRadioControl"; -/** Radio monitor interface name. */ -const QString KRadioServiceControlOperation = "command(int)"; -/** Radio monitor interface name. */ -const QString KRadioServiceMonitorInterfaceName = "IRadioMonitor"; -/** Radio monitor interface name. */ -const QString KRadioServiceMonitorOperation = "requestNotifications()"; -/** Radio refresh operation name. */ -const QString KRadioServiceRefreshOperation = "requestAllData()"; - -class FmRadioHsWidgetRadioServiceClient : public QObject -{ -Q_OBJECT - -public: - FmRadioHsWidgetRadioServiceClient(QObject *parent = 0); - virtual ~FmRadioHsWidgetRadioServiceClient(); - - enum FmRadioStartupState - { - StartForeground, - StartBackground - }; - enum FmRadioChannelChangeCommand - { - PreviousFavouriteChannel, - NextFavouriteChannel - }; - enum FmRadioAudioControlCommand - { - Mute, - Unmute - }; - enum FmRadioInformationType - { - InformationTypeStationName, - InformationTypeCallSign, - InformationTypeFrequency, - InformationTypeRt, - InformationTypeDynamicPsName, - InformationTypePty - }; - enum FmRadioVisibilty - { - DoNotChange, - ToForeground, - ToBackground - }; - - void init(); - -signals: - void radioInformationChanged(int notificationId, QVariant value); - void radioStateChanged(QVariant value); - -public slots: - void doChangeFmRadioVisibility(FmRadioVisibilty visibility); - void test(); - void doChangeFmRadioChannel(FmRadioChannelChangeCommand command); - void doControlFmRadioAudio(FmRadioAudioControlCommand command); - void handleFmRadioInformationChange(const QVariant& value); - void handleFmRadioStateChange(QVariant& value); - void startMonitoring(FmRadioVisibilty visibility); - void stopMonitoring(); - -protected slots: - void requestCompleted(const QVariant& value); - -private slots: - //void handleOk(const QVariant &result); - void handleError(int errorCode, const QString& errorMessage); - void handleRequestError(int error); - - void createControlServiceRequest(); - void createMonitorServiceRequest(); - - void doSendMonitorRequest(FmRadioVisibilty visibility); - void doSendControlRequest(QVariant &argument, FmRadioVisibilty visibility); - - void prepareRequestInfo(XQAiwRequest *request, FmRadioVisibilty visibility); - -private: // data - bool mRequestPending; - XQApplicationManager mApplicationManager; - XQAiwRequest* mRadioMonitorRequest; - XQAiwRequest* mRadioControlRequest; - - bool mDataInitialized; - -}; - -#endif /* FMRADIOHSWIDGETRADIOSERVICECLIENT_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin --- a/hswidgetplugin/fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-04-23T11:50:39 diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidget.docml --- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidget.docml Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.css --- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.css Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -HbMarqueeItem#marquee1::text { - text-height: var(hb-param-text-height-tiny); - font-variant: secondary; - color: qtc_hs_list_item_title; - text-align: center center; - text-wrap-mode: no-wrap; -} - -HbMarqueeItem#marquee2::text { - text-height: var(hb-param-text-height-tiny); - font-variant: secondary; - color: qtc_hs_list_item_content; - text-align: center center; - text-wrap-mode: no-wrap; -} - -HbMarqueeItem#marquee3::text { - text-height: var(hb-param-text-height-tiny); - font-variant: secondary; - color: red; - text-align: center center; - text-wrap-mode: no-wrap; -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.manifest --- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.manifest Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml --- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - - fmradiohswidgetplugin - c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.qtplugin - FM Radio homescreen widget - - com.nokia.IHomeScreenWidget - 1.0 - FM Radio homescreen widget - - fmradiohswidgetplugin_icon.png - FM Radio Widget - - diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml --- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - - fmradiohswidgetplugin - fmradiohswidgetplugin - FM Radio homescreen widget - - com.nokia.symbian.IHomeScreenWidget - 1.0 - FM Radio homescreen widget - - fmradiohswidgetplugin_icon.png - FM Radio Widget - - diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin_icon.png Binary file hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin_icon.png has changed diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/resources.qrc --- a/hswidgetplugin/fmradiohswidgetplugin/resources.qrc Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ - - - resource/fmradiohswidget.docml - resource/fmradiohswidgetplugin.css - - diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp --- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,925 +0,0 @@ -/* -* 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: FM Radio home screen widget -* -*/ - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "fmradiohswidget.h" -#include "fmradiohswidgetprocesshandler.h" -#include "fmradiohswidgetprofilereader.h" -#include "fmradiohswidgetradioserviceclient.h" -#include "radioservicedef.h" -#include "radio_global.h" - -/*! - \ingroup group_fmradiohs_widget - \class FmRadioHsWidget - \brief Example implementation for home screen widget. - - FmRadioHsWidget derived from the HbWidget and implements - needed functions for the home screen widget. -*/ - -// ======== MEMBER FUNCTIONS ======== - -/*! - Constructs a widget which is a child of \a parent, with widget flags set to \a flags. -*/ -FmRadioHsWidget::FmRadioHsWidget(QGraphicsItem* parent, Qt::WindowFlags flags) - : HbWidget(parent, flags), - mRadioPushButton(0), - mPreviousPushButton(0), - mPlayPushButton(0), - mNextPushButton(0), - mInformationFirstRowLabel(0), - mInformationSecondRowLabel(0), - mFmRadioState(Undefined), - mPlayButtonState(PlayEnabled), - mIsFavoriteChannels(false), - mRadioInformation(QHash()), - mProcessHandler(0), - mProfileMonitor(new FmRadioHsWidgetProfileReader(this)), - mRadioServiceClient(new FmRadioHsWidgetRadioServiceClient(this)) -{ - connect(mRadioServiceClient, SIGNAL(radioInformationChanged(int, QVariant)), this, - SLOT(handleRadioInformationChange(int, QVariant))); - connect(mRadioServiceClient, SIGNAL(radioStateChanged(QVariant)), this, - SLOT(handleRadioStateChange(QVariant))); - connect(mProfileMonitor, SIGNAL(radioRunning(QVariant)), this, - SLOT(handleRadioStateChange(QVariant))); - - load(KDocml); - - handleRadioStateChange(mProfileMonitor->radioStatus()); - - //mRadioServiceClient->init(); -} - -/*! - Destructor -*/ -FmRadioHsWidget::~FmRadioHsWidget() -{ -} - -/*! - Called when widget is shown in the home screen -*/ -void FmRadioHsWidget::onShow() -{ -} - -/*! - Called when widget is hidden from the home screen -*/ -void FmRadioHsWidget::onHide() -{ -} - -/*! - Loads docml files. -*/ -void FmRadioHsWidget::load(const QString docml) -{ - bool loaded = false; - - HbDocumentLoader *documentLoader = new HbDocumentLoader(); - documentLoader->reset(); - documentLoader->load(docml, &loaded); - - if (loaded) { - HbWidget *widget = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameMainLayout)); - - HbFrameItem *frameItem = NULL; - - if (widget) { - //HbWidget *view = qobject_cast (widget); - QGraphicsLinearLayout *mWidgetLayout = new QGraphicsLinearLayout(Qt::Vertical, this); - - HbFrameDrawer *drawer = new HbFrameDrawer("qtg_fr_hswidget_normal", - HbFrameDrawer::NinePieces); - frameItem = new HbFrameItem(drawer, widget); - frameItem->setPreferredSize(widget->preferredSize()); - - mWidgetLayout->addItem(widget); - setLayout(mWidgetLayout); - } - - mRadioPushButton = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameRadioIconPushButton)); - if (mRadioPushButton) { - if (frameItem) { - frameItem->stackBefore(mRadioPushButton); - } - mRadioPushButton->setBackground(HbIcon("qtg_large_radio")); - mRadioPushButton->icon().setSize(mRadioPushButton->preferredSize()); - QObject::connect(mRadioPushButton, SIGNAL(clicked()), this, SLOT(radioToForeground())); - } - - mVerticalSeparatorLabel = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameVerticalSeparatorLabel)); - if (mVerticalSeparatorLabel) { - mVerticalSeparatorLabel->setIcon(HbIcon("qtg_graf_divider_v_thin")); - } - - HbWidget *controlAreaLayoutWidget = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameControlAreaLayout)); - if (controlAreaLayoutWidget) { - } - - mPreviousPushButton = qobject_cast (documentLoader->findWidget( - KDocmlObjectNamePreviousPushButton)); - if (mPreviousPushButton) { - changeControlButtonFrameBackground(false, Left, mPreviousPushButton); -/* - HbFrameDrawer *previousButtonFrameDrawer = new HbFrameDrawer("qtg_fr_hsbutton_disabled", - HbFrameDrawer::ThreePiecesHorizontal); - previousButtonFrameDrawer->setFileNameSuffixList(QStringList() << "_l" << "_c" << "_cr"); - mPreviousPushButton->setFrameBackground(previousButtonFrameDrawer); -*/ QObject::connect(mPreviousPushButton, SIGNAL(clicked()), this, SLOT(previousChannel())); - } - - mPlayPushButton = qobject_cast (documentLoader->findWidget( - KDocmlObjectNamePlayPushButton)); - if (mPlayPushButton) { - changeControlButtonFrameBackground(false, Center, mPlayPushButton); -/* HbFrameDrawer *playButtonFrameDrawer = new HbFrameDrawer("qtg_fr_hsbutton_disabled", - HbFrameDrawer::ThreePiecesHorizontal); - playButtonFrameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_cr"); - mPlayPushButton->setFrameBackground(playButtonFrameDrawer); -*/ QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, SLOT(radioToBackground())); - } - - mNextPushButton = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameNextPushButton)); - if (mNextPushButton) { - changeControlButtonFrameBackground(false, Right, mNextPushButton); -/* HbFrameDrawer *nextButtonFrameDrawer = new HbFrameDrawer("qtg_fr_hsbutton_disabled", - HbFrameDrawer::ThreePiecesHorizontal); - nextButtonFrameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_r"); - mNextPushButton->setFrameBackground(nextButtonFrameDrawer); -*/ QObject::connect(mNextPushButton, SIGNAL(clicked()), this, SLOT(nextChannel())); - } - - //bool b = QFile::exists(KCss); - bool a = HbStyleLoader::registerFilePath(KCss); - - mInformationAreaTwoRowsLayout = qobject_cast ( - documentLoader->findObject(KDocmlObjectNameTwoRowsLayout)); - if (mInformationAreaTwoRowsLayout) { - /* - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, mInformationAreaTwoRowsLayout); - mInformationFirstRowMarquee = new HbMarqueeItem(); - HbStyle::setItemName(mInformationFirstRowMarquee, "marquee1"); - mInformationFirstRowMarquee->setObjectName("marquee1"); - mInformationFirstRowMarquee->setText( - "Long text"); - mInformationFirstRowMarquee->setLoopCount(-1); - mInformationFirstRowMarquee->startAnimation(); - HbFontSpec fs(HbFontSpec::Secondary); - mInformationFirstRowMarquee->setFontSpec(fs); - mInformationFirstRowMarquee->setTextColor(HbColorScheme::color("qtc_hs_list_item_title")); - mInformationFirstRowMarquee->setPreferredSize(layout->preferredSize()); - layout->addItem(mInformationFirstRowMarquee); - - mInformationSecondRowMarquee = new HbMarqueeItem(); - mInformationSecondRowMarquee->setObjectName("marquee2"); - mInformationSecondRowMarquee->setText( - "Long text to test marquee, Long text to test marquee"); - mInformationSecondRowMarquee->setLoopCount(-1); - mInformationSecondRowMarquee->startAnimation(); - mInformationSecondRowMarquee->setFontSpec(fs); - mInformationSecondRowMarquee->setTextColor(HbColorScheme::color("qtc_hs_list_item_title")); - mInformationSecondRowMarquee->setPreferredSize(layout->preferredSize()); - layout->addItem(mInformationSecondRowMarquee); - */ - } - - mInformationAreaOneRowLayout = qobject_cast (documentLoader->findObject( - KDocmlObjectNameOneRowLayout)); - if (mInformationAreaOneRowLayout) { - /* - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, mInformationAreaOneRowLayout); - mInformationLonelyRowMarquee = new HbMarqueeItem(); - mInformationLonelyRowMarquee->setObjectName("marquee3"); - HbStyle::setItemName(mInformationLonelyRowMarquee, "marquee3"); - mInformationLonelyRowMarquee->setText( - "Long text"); - mInformationLonelyRowMarquee->setLoopCount(-1); - mInformationLonelyRowMarquee->startAnimation(); - HbFontSpec fs(HbFontSpec::Secondary); - mInformationLonelyRowMarquee->setFontSpec(fs); - mInformationLonelyRowMarquee->setTextColor(HbColorScheme::color("qtc_hs_list_item_title")); - mInformationLonelyRowMarquee->setPreferredSize(layout->preferredSize()); - layout->addItem(mInformationLonelyRowMarquee); - */ - } - - mInformationAreaAnimationLayout = qobject_cast ( - documentLoader->findObject(QString(KDocmlObjectNameAnimationLayout))); - if (mInformationAreaAnimationLayout) { - } - - mInformationFirstRowLabel = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameFirstRowLabel)); - if (mInformationFirstRowLabel) { - mInformationFirstRowLabel->setTextColor(HbColorScheme::color("qtc_hs_list_item_title")); - } - - mInformationSecondRowLabel = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameSecondRowLabel)); - if (mInformationSecondRowLabel) { - mInformationSecondRowLabel->setTextColor(HbColorScheme::color("qtc_hs_list_item_content")); - } - - mInformationLonelyRowLabel = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameLonelyRowLabel)); - if (mInformationLonelyRowLabel) { - mInformationLonelyRowLabel->setTextColor(HbColorScheme::color("qtc_hs_list_item_content")); - } - - mAnimationIcon = qobject_cast (documentLoader->findWidget( - KDocmlObjectNameAnimationIcon)); - if (mAnimationIcon) { - // Use animation manager to define the frame-by-frame animation. - HbIconAnimationManager *animationManager = HbIconAnimationManager::global(); - - // Create animation definition. - HbIconAnimationDefinition animationDefinition; - QList animationFrameList; - - HbIconAnimationDefinition::AnimationFrame animationFrame; - QString animationFrameIconName; - QString animationFrameIconNamePrefix = "qtg_anim_loading_"; - for (int i = 1; i < 11; i++) { - animationFrame.duration = 100; - animationFrameIconName.clear(); - animationFrameIconName.append(animationFrameIconNamePrefix); - animationFrameIconName.append(animationFrameIconName.number(i)); - animationFrame.iconName = animationFrameIconName; - animationFrameList.append(animationFrame); - } - animationDefinition.setPlayMode(HbIconAnimationDefinition::Loop); - animationDefinition.setFrameList(animationFrameList); - animationManager->addDefinition("animation", animationDefinition); - - // Construct an icon using the animation definition. - HbIcon icon("animation"); - - mAnimationIcon->setIcon(icon); - } - - } - delete documentLoader; -} - -/*! - Slot for grouping events. - */ -bool FmRadioHsWidget::eventFilter(QObject */*target*/, QEvent */*event*/) - { -// This event filter is used to get events from information area layout and from it's components. -// Not yet implemented. -/* - if (target == mFrequencyLabel) { - if (event->type() == QEvent::MouseButtonRelease) { - qDebug() << "MouseButtonRelease"; - return true; - } - else if (event->type() == QEvent::MouseButtonPress) { - qDebug() << "MouseButtonPress"; - return true; - } - else if (event->type() == QEvent::KeyPress) { - qDebug() << "KeyPress"; - return true; - } - else { - return false; - } - } - else { - // pass the event on to the parent class - return HbWidget::eventFilter(target, event); - } -*/ - return false; -} - -/*! - Mute FM Radio audio. - */ -void FmRadioHsWidget::mute() -{ - mRadioServiceClient->doControlFmRadioAudio(FmRadioHsWidgetRadioServiceClient::Mute); - //handleRadioStateChange(QVariant(NotControllingAudio)); -} - -/*! - Unmute FM Radio audio. - */ -void FmRadioHsWidget::unMute() -{ - mRadioServiceClient->doControlFmRadioAudio(FmRadioHsWidgetRadioServiceClient::Unmute); - //handleRadioStateChange(QVariant(ControllingAudio)); -} - -/*! - Slot for previous button clicked. - */ -void FmRadioHsWidget::previousChannel() -{ - mRadioServiceClient->doChangeFmRadioChannel(FmRadioHsWidgetRadioServiceClient::PreviousFavouriteChannel); -} - -/*! - Slot for next button clicked. - */ -void FmRadioHsWidget::nextChannel() -{ - mRadioServiceClient->doChangeFmRadioChannel(FmRadioHsWidgetRadioServiceClient::NextFavouriteChannel); -} - -/*! - Slot for radio button clicked. - */ -void FmRadioHsWidget::radioToForeground() -{ - if (mFmRadioState == NotRunning) { - handleRadioStateChange(QVariant(Starting)); - mRadioServiceClient->startMonitoring(FmRadioHsWidgetRadioServiceClient::ToForeground); - } - else { - mRadioServiceClient->doChangeFmRadioVisibility( - FmRadioHsWidgetRadioServiceClient::ToForeground); - } -} - -/*! - Slot for radio button clicked. - */ -void FmRadioHsWidget::radioToBackground() -{ - if (mFmRadioState == NotRunning) { - handleRadioStateChange(QVariant(Starting)); - mRadioServiceClient->startMonitoring(FmRadioHsWidgetRadioServiceClient::ToBackground); - } - else if (mFmRadioState == Starting) { - - } - else { - mRadioServiceClient->doChangeFmRadioVisibility( - FmRadioHsWidgetRadioServiceClient::ToBackground); - } -} - -/*! - Opening of url to the browser. - - /param url Url to be opened. - */ -bool FmRadioHsWidget::openUrl(QUrl url) -{ - return QDesktopServices::openUrl(url); -} - -/*! - Handles changes in FM Radio information. - - /param type Type of changed information. - /param value Information content. - */ -void FmRadioHsWidget::handleRadioInformationChange( - int notificationId, QVariant value) -{ - if (!value.isValid()) { - return; - } - switch ( notificationId ) { - - case RadioServiceNotification::FavoriteCount: - if (value.canConvert(QVariant::Int)) { - int favoriteCount = value.toInt(); - mIsFavoriteChannels = favoriteCount > 0 ? true : false; - changeChannelButtonsEnabledState(mIsFavoriteChannels); - } - break; - - case RadioServiceNotification::RadioStatus: - if (value.canConvert(QVariant::Int)) { - int status = value.toInt(); - switch (status) { - case RadioStatus::Playing: - handleRadioStateChange(QVariant(ControllingAudio)); - break; - case RadioStatus::Muted: - handleRadioStateChange(QVariant(NotControllingAudio)); - break; - case RadioStatus::Seeking: - handleRadioStateChange(QVariant(Seeking)); - break; - case RadioStatus::NoAntenna: - handleRadioStateChange(QVariant(AntennaNotConnected)); - break; - default: - break; - } - } - break; - - case RadioServiceNotification::Frequency: - if (value.canConvert(QVariant::UInt)) { - const uint frequency = value.toUInt(); - QString freqString; - freqString.sprintf("%.1f", qreal(frequency) / KFrequencyMultiplier); - bool frequencyCleared = false; - if (mRadioInformation.contains(KRadioInformationFrequency) - && mRadioInformation[KRadioInformationFrequency].compare(freqString) != 0) { - clearRadioInformation(); - frequencyCleared = true; - } - bool frequencyUpdated = updateRadioInformation(KRadioInformationFrequency, freqString); - if (frequencyCleared || frequencyUpdated) { - radioInformationChanged(); - } - } - break; - - case RadioServiceNotification::Name: - if (value.canConvert(QVariant::String)) { - if (updateRadioInformation(KRadioInformationStationName, value.toString())) { - radioInformationChanged(); - } - } - break; - - case RadioServiceNotification::Genre: - if (value.canConvert(QVariant::String)) { - if (updateRadioInformation(KRadioInformationPty, value.toString())) { - radioInformationChanged(); - } - } - break; - - case RadioServiceNotification::RadioText: - if (value.canConvert(QVariant::String)) { - if (updateRadioInformation(KRadioInformationRt, value.toString())) { - radioInformationChanged(); - } - } - break; - - case RadioServiceNotification::HomePage: - if (value.canConvert(QVariant::String)) { - if (updateRadioInformation(KRadioInformationHomePage, value.toString())) { - radioInformationChanged(); - } - } - break; - - case RadioServiceNotification::Song: - if (value.canConvert(QVariant::String)) { - if (updateRadioInformation(KRadioInformationSong, value.toString())) { - radioInformationChanged(); - } - } - break; - - -/* case FmRadioHsWidgetRadioServiceClient::InformationTypeCallSign: - if (updateRadioInformation(KRadioInformationCallSign, informationText)) { - - } - break; -*/ -/* case FmRadioHsWidgetRadioServiceClient::InformationTypeDynamicPsName: - if (updateRadioInformation(KRadioInformationDynamicPsName, - informationText)) { - - } - break; - */ - - default: - break; - } -} - -/*! - Check if the the radio information is changed. If it is changed update it. - - /param informationType Type of the information. - /param information Information text. - - /return bool If information is updated, return true. Return false otherwise. - */ -bool FmRadioHsWidget::updateRadioInformation(const QString informationType, QString information) -{ - // If hash contains this type - if (mRadioInformation.contains(informationType)) { - // If new information is empty - if (information.isEmpty()) { - // Remove it from the hash - mRadioInformation.remove(informationType); - // Return true to indicate the change - return true; - } - // If new information differs from the old one - if (mRadioInformation[informationType].compare(information) != 0) { - // Update the information - mRadioInformation[informationType] = information; - // And return true to indicate the change - return true; - } - } else { // Hash do not contain the information - // If new information is not empty - if (!information.isEmpty()) { - // Add it to the hash - mRadioInformation[informationType] = information; - // Return true to indicate the change - return true; - } - } - // Return false to indicate that nothing changed - return false; -} - -/*! - Formatting radio information texts after change. - */ -void FmRadioHsWidget::radioInformationChanged() -{ - mRadioInformationFirstRow = ""; - mRadioInformationSecondRow = ""; - - // Lets formulate the first row, first station name - if (mRadioInformation.contains(KRadioInformationStationName)) { - mRadioInformationFirstRow.append(mRadioInformation.value(KRadioInformationStationName)); - } - // Second call sign - if (mRadioInformation.contains(KRadioInformationCallSign)) { - mRadioInformationFirstRow.append(" " + mRadioInformation.value(KRadioInformationCallSign)); - } - // Third frequency - if (mRadioInformation.contains(KRadioInformationFrequency)) { - mRadioInformationFirstRow.append(" " + mRadioInformation.value(KRadioInformationFrequency) - + " " + KMhzText); - } - // Second row of information contains first rt - if (mRadioInformation.contains(KRadioInformationRt)) { - mRadioInformationSecondRow.append(mRadioInformation.value(KRadioInformationRt)); - } - // Second is dynamic ps name - if (mRadioInformation.contains(KRadioInformationDynamicPsName)) { - mRadioInformationSecondRow.append(" " + mRadioInformation.value( - KRadioInformationDynamicPsName)); - } - // Third is pty - if (mRadioInformation.contains(KRadioInformationPty)) { - mRadioInformationSecondRow.append(" " + mRadioInformation.value(KRadioInformationPty)); - } - - if (mRadioInformationSecondRow.isEmpty()) { - mInformationLonelyRowLabel->setPlainText(mRadioInformationFirstRow); - changeInformationAreaLayout(OneRow); - } - else { - mInformationFirstRowLabel->setPlainText(mRadioInformationFirstRow); - mInformationSecondRowLabel->setPlainText(mRadioInformationSecondRow); - changeInformationAreaLayout(TwoRows); - } -} - -/*! - Clears the radio station information. For example, when the channel is - changed, old information should be cleared. - */ -void FmRadioHsWidget::clearRadioInformation() -{ - if (!mRadioInformation.isEmpty()) { - mRadioInformation.clear(); - } -} - -/*! - Handles changes in FM Radio state. - - /param value Information content. - */ -void FmRadioHsWidget::handleRadioStateChange(QVariant value) -{ - int state; - if (value.canConvert(QVariant::Int)) { - state = value.toInt(); - } else { - return; - } - - if (state == mFmRadioState) { - // State did not change, so return. - return; - } - - switch (state) { - case Undefined: - // TODO: Some error occured because we do not have the state information. Handle this. - mFmRadioState = Undefined; - break; - case NotRunning: - mFmRadioState = NotRunning; - mRadioServiceClient->stopMonitoring(); - //changeControlButtonState(ChannelsDisabledPlay); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - changePlayButtonState(PlayEnabled); - mIsFavoriteChannels = false; - changeChannelButtonsEnabledState(false); - mInformationFirstRowLabel->setPlainText(""); - mInformationSecondRowLabel->setPlainText(""); - mInformationLonelyRowLabel->setPlainText(KFmRadioText); - changeInformationAreaLayout(OneRow); - break; - case Starting: - mFmRadioState = Starting; - //changeControlButtonState(ChannelsDisabledStop); - changePlayButtonState(StopDisabled); - // TODO: What should the stop button do? Should it close the radio? - changeChannelButtonsEnabledState(false); - changeInformationAreaLayout(Animation); - break; - case Running: - mFmRadioState = Running; - mRadioServiceClient->startMonitoring(FmRadioHsWidgetRadioServiceClient::DoNotChange); - //changeControlButtonState(ChannelsEnabledStop); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - changePlayButtonState(StopEnabled); - changeChannelButtonsEnabledState(mIsFavoriteChannels); - changeInformationAreaLayout(OneRow); - break; - case ControllingAudio: - mFmRadioState = ControllingAudio; - //changeControlButtonState(ChannelsEnabledStop); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - changePlayButtonState(StopEnabled); - changeChannelButtonsEnabledState(mIsFavoriteChannels); - radioInformationChanged(); - break; - case NotControllingAudio: - mFmRadioState = NotControllingAudio; - //changeControlButtonState(ChannelsEnabledPlay); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - changePlayButtonState(PlayEnabled); - changeChannelButtonsEnabledState(mIsFavoriteChannels); - radioInformationChanged(); - break; - case Seeking: - mFmRadioState = Seeking; - //changeControlButtonState(AllDisabledStop); - changePlayButtonState(StopDisabled); - changeChannelButtonsEnabledState(false); - changeInformationAreaLayout(Animation); - break; - case AntennaNotConnected: - mFmRadioState = AntennaNotConnected; - //changeControlButtonState(AllDisabledPlay); - changePlayButtonState(StopDisabled); - changeChannelButtonsEnabledState(false); - mInformationFirstRowLabel->setPlainText(""); - mInformationSecondRowLabel->setPlainText(""); - mInformationLonelyRowLabel->setPlainText(KConnectHeadsetText); - changeInformationAreaLayout(OneRow); - break; - default: - break; - } -} - -/*! - Changes visible layout of information area. - - /param InformationAreaLayout The layout to switch visible. - */ -void FmRadioHsWidget::changeInformationAreaLayout(InformationAreaLayout layout) -{ - switch (layout) { - case OneRow: - mInformationAreaOneRowLayout->show(); - ((QGraphicsWidget*) mInformationAreaTwoRowsLayout)->hide(); - mInformationAreaAnimationLayout->hide(); - break; - case TwoRows: - mInformationAreaOneRowLayout->hide(); - ((QGraphicsWidget*) mInformationAreaTwoRowsLayout)->show(); - mInformationAreaAnimationLayout->hide(); - break; - case Animation: - mInformationAreaOneRowLayout->hide(); - ((QGraphicsWidget*) mInformationAreaTwoRowsLayout)->hide(); - mInformationAreaAnimationLayout->show(); - break; - default: - break; - } -} - -/*! - Changes state of the control buttons. - - /param ControlButtonState State of the control buttons. - */ -void FmRadioHsWidget::changeControlButtonState(ControlButtonState buttonState) -{ - QString iconName; - switch (buttonState) { - case AllDisabledPlay: - changeControlButtonFrameBackground(false, Left, mPreviousPushButton); - iconName.append("qtg_mono_play"); - mPlayPushButton->setIcon(HbIcon(iconName)); - changeControlButtonFrameBackground(false, Center, mPlayPushButton); - changeControlButtonFrameBackground(false, Right, mNextPushButton); - break; - case AllDisabledStop: - changeControlButtonFrameBackground(false, Left, mPreviousPushButton); - iconName.append("qtg_mono_stop"); - mPlayPushButton->setIcon(HbIcon(iconName)); - changeControlButtonFrameBackground(false, Center, mPlayPushButton); - changeControlButtonFrameBackground(false, Right, mNextPushButton); - break; - case ChannelsDisabledPlay: - changeControlButtonFrameBackground(false, Left, mPreviousPushButton); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - iconName.append("qtg_mono_play"); - mPlayPushButton->setIcon(HbIcon(iconName)); - changeControlButtonFrameBackground(true, Center, mPlayPushButton); - changeControlButtonFrameBackground(false, Right, mNextPushButton); - break; - case ChannelsDisabledStop: - changeControlButtonFrameBackground(false, Left, mPreviousPushButton); - iconName.append("qtg_mono_stop"); - mPlayPushButton->setIcon(HbIcon(iconName)); - changeControlButtonFrameBackground(true, Center, mPlayPushButton); - changeControlButtonFrameBackground(false, Right, mNextPushButton); - break; - case ChannelsEnabledPlay: - changeControlButtonFrameBackground(true, Left, mPreviousPushButton); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - iconName.append("qtg_mono_play"); - mPlayPushButton->setIcon(HbIcon(iconName)); - changeControlButtonFrameBackground(true, Center, mPlayPushButton); - changeControlButtonFrameBackground(true, Right, mNextPushButton); - break; - case ChannelsEnabledStop: - changeControlButtonFrameBackground(true, Left, mPreviousPushButton); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(radioToBackground())); - QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(unMute())); - QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, - SLOT(mute())); - iconName.append("qtg_mono_stop"); - mPlayPushButton->setIcon(HbIcon(iconName)); - changeControlButtonFrameBackground(true, Center, mPlayPushButton); - changeControlButtonFrameBackground(true, Right, mNextPushButton); - break; - default: - break; - } -} - -/*! - Changes enabled state of channel buttons. - - */ -void FmRadioHsWidget::changePlayButtonState(PlayButtonState buttonState) -{ - QString iconName; - bool enabled = false; - switch (buttonState) { - case PlayDisabled: - iconName.append("qtg_mono_play"); - mPlayPushButton->setIcon(HbIcon(iconName)); - enabled = false; - break; - case PlayEnabled: - iconName.append("qtg_mono_play"); - mPlayPushButton->setIcon(HbIcon(iconName)); - enabled = true; - break; - case StopDisabled: - iconName.append("qtg_mono_stop"); - mPlayPushButton->setIcon(HbIcon(iconName)); - enabled = false; - break; - case StopEnabled: - iconName.append("qtg_mono_stop"); - mPlayPushButton->setIcon(HbIcon(iconName)); - enabled = true; - break; - default: - break; - } - changeControlButtonFrameBackground(enabled, Center, mPlayPushButton); -} - -/*! - Changes enabled state of channel buttons. - - */ -void FmRadioHsWidget::changeChannelButtonsEnabledState(bool enabled) -{ - changeControlButtonFrameBackground(enabled, Left, mPreviousPushButton); - changeControlButtonFrameBackground(enabled, Right, mNextPushButton); -} - -/*! - Changes background of control button. - - /param enabled Is button enabled or disabled. - /param position Position of the control button in button group. - /param button The button to change the background. - */ -void FmRadioHsWidget::changeControlButtonFrameBackground(bool enabled, - ControlButtonPosition position, HbPushButton *button) -{ - QString frameGraphicsName("qtg_fr_hsbutton_"); - if (enabled) { - frameGraphicsName.append("normal"); - } else { - frameGraphicsName.append("disabled"); - } - HbFrameDrawer *frameDrawer = new HbFrameDrawer(frameGraphicsName, - HbFrameDrawer::ThreePiecesHorizontal); - switch (position) { - case Left: - frameDrawer->setFileNameSuffixList(QStringList() << "_l" << "_c" << "_cr"); - break; - case Center: - frameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_cr"); - break; - case Right: - frameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_r"); - break; - default: - break; - } - button->setFrameBackground(frameDrawer); - button->setEnabled(enabled); -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetplugin.cpp --- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetplugin.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* -* 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: FM Radio home screen widget plugin -* -*/ - -#include -#include -#include - -#include "fmradiohswidgetplugin.h" -#include "fmradiohswidget.h" - - -/*! - Initialize plugin for FM Radio home screen widget. Contains necessary information about - the fm radio widget that it can be loaded through QT Service Framework. -*/ -QObject *FmRadioHsWidgetPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, - QServiceContext *context, - QAbstractSecuritySession *session) -{ - Q_UNUSED(context); - Q_UNUSED(session); - - if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenWidget")) { - return new FmRadioHsWidget(); - } else { - return 0; - } -} - -Q_EXPORT_PLUGIN2(fmradiohswidgetplugin, FmRadioHsWidgetPlugin) diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetprocesshandler.cpp --- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetprocesshandler.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* 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 - -// User includes -#include "fmradiohswidgetprocesshandler.h" -#include "fmradiohswidget.h" - -/*! - Constructor - */ -FmRadioHsWidgetProcessHandler::FmRadioHsWidgetProcessHandler(QObject *parent) : - QObject(parent), mProcess(new QProcess(this)) -{ - QObject::connect(mProcess, SIGNAL(stateChanged(QProcess::ProcessState)), - this, SLOT(handleStateChange(QProcess::ProcessState))); - QObject::connect(mProcess, SIGNAL(error(QProcess::ProcessError error)), - this, SLOT(handleError(QProcess::ProcessError error))); - QObject::connect(mProcess, - SIGNAL(finished(int exitCode, QProcess::ExitStatus exitStatus)), - this, - SLOT(handleFinish(int exitCode, QProcess::ExitStatus exitStatus))); -} - -/*! - Destructor - */ -FmRadioHsWidgetProcessHandler::~FmRadioHsWidgetProcessHandler() -{ -} - -/*! - Launching of FM Radio application process. - */ -void FmRadioHsWidgetProcessHandler::startFmRadioApplication() -{ - if (mProcess->pid() == qint64(0)) { - QString executablePath = KRadioExecutablePath; - QStringList arguments; - arguments << KRadioExecutableArguments; - mProcess->start(executablePath, arguments); - } -} - -/*! - Handles state change notifications from FM Radio application process. - */ -void FmRadioHsWidgetProcessHandler::handleStateChange( - QProcess::ProcessState state) -{ - switch (state) { - case QProcess::NotRunning: - emit fmRadioApplicationStateChanged(QVariant(FmRadioHsWidget::NotRunning)); - break; - case QProcess::Starting: - emit fmRadioApplicationStateChanged(QVariant(FmRadioHsWidget::Starting)); - break; - case QProcess::Running: - emit fmRadioApplicationStateChanged(QVariant(FmRadioHsWidget::Running)); - break; - default: - break; - } -} - -/*! - Handles error notifications from FM Radio application process. - */ -void FmRadioHsWidgetProcessHandler::handleError( - QProcess::ProcessError error) -{ - switch (error) { - case QProcess::FailedToStart: - break; - case QProcess::Crashed: - break; - case QProcess::Timedout: - break; - case QProcess::WriteError: - break; - case QProcess::ReadError: - break; - case QProcess::UnknownError: - break; - default: - break; - } -} - -/*! - Handles finished process notifications from FM Radio application process. - */ -void FmRadioHsWidgetProcessHandler::handleFinish(int /*exitCode*/, - QProcess::ExitStatus exitStatus) -{ - switch (exitStatus) { - case QProcess::NormalExit: - break; - case QProcess::CrashExit: - break; - default: - break; - } -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetprofilereader.cpp --- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetprofilereader.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -/* -* 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 -#include "xqsettingsmanager.h" -#include "xqsettingskey.h" -#include "xqpublishandsubscribeutils.h" -#include - -// User includes -#include "fmradiohswidgetprofilereader.h" -#include "fmradiohswidget.h" -#include "radioservicedef.h" - -/*! - Constructor - */ -FmRadioHsWidgetProfileReader::FmRadioHsWidgetProfileReader(QObject *parent) : - QObject(parent), - mSettingsManager(new XQSettingsManager(this)), - mRadioStatus(-1) -{ -/* - // Monitors devices profile. - XQSettingsKey profileKey(XQSettingsKey::TargetCentralRepository, - KCRUidProfileEngine.iUid, KProEngActiveProfile); - mSettingsManager->startMonitoring(profileKey); - currentProfileStatus(mSettingsManager->readItemValue(profileKey)); - - connect(mSettingsManager, SIGNAL(itemDeleted(XQSettingsKey)), this, - SLOT(itemDeleted(XQSettingsKey))); - connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)), - this, SLOT(handleChanges(XQSettingsKey, QVariant))); -*/ - startMonitoringRadioRunningStatus(); - bool d = connect(mSettingsManager, SIGNAL(itemDeleted(XQSettingsKey)), this, - SLOT(itemDeleted(XQSettingsKey))); - bool h = connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)), - this, SLOT(handleRadioRunningChanges(XQSettingsKey, QVariant))); -} - -/*! - Destructor - */ -FmRadioHsWidgetProfileReader::~FmRadioHsWidgetProfileReader() -{ -} - - -/*! - Handling of deletion of listened P&S key. - - \param key Deleted key. - */ -void FmRadioHsWidgetProfileReader::itemDeleted(const XQSettingsKey& key) -{ -/* - if (key.uid() == KCRUidProfileEngine.iUid && key.key() - == KProEngActiveProfile) { - } -*/ - if (key.uid() == KRadioPSUid && key.key() == KRadioStartupKey) { - startMonitoringRadioRunningStatus(); - } -} - -/*! - Notifications from settings manager are handled and routed to appropriate - private slots. - - \param key Changed key. - \param value Value of changed key. - */ -/* -void FmRadioHsWidgetProfileReader::handleChanges(const XQSettingsKey& key, - const QVariant& value) -{ - if (key.uid() == KCRUidProfileEngine.iUid && key.key() - == KProEngActiveProfile) { - currentProfileStatus(value); - } -} -*/ - -/*! - Handling changes in profile information. - - \param value Originally information is of int type. Valid values after - conversion are described by KProEngActiveProfile in ProfileEngineSDKCRKeys.h. - */ -void FmRadioHsWidgetProfileReader::currentProfileStatus(QVariant value) -{ - if (value.canConvert(QVariant::Int)) { - emit profileChanged(value.toInt()); - } -} - -/*! - Notifications from settings manager are handled and routed to appropriate - private slots. - - \param key Changed key. - \param value Value of changed key. - */ -void FmRadioHsWidgetProfileReader::handleRadioRunningChanges(const XQSettingsKey& key, - const QVariant& value) -{ - if (key.uid() == KRadioPSUid && key.key() - == KRadioStartupKey) { - currentRadioRunningStatus(value); - } -} - -/*! - Handling changes in profile information. - - \param value Originally information is of int type. Valid values after - conversion are described by KProEngActiveProfile in ProfileEngineSDKCRKeys.h. - */ -void FmRadioHsWidgetProfileReader::currentRadioRunningStatus(QVariant value) -{ - if (value.isValid()) { - if (value.canConvert(QVariant::Int)) { - mRadioStatus = value.toInt(); - QVariant state(FmRadioHsWidget::Running); - emit radioRunning(state); - } - } else { - mRadioStatus = -1; - QVariant state(FmRadioHsWidget::NotRunning); - emit radioRunning(state); - } -} - -QVariant FmRadioHsWidgetProfileReader::radioStatus() -{ - QVariant state; - if (mRadioStatus != -1) { - state = QVariant(FmRadioHsWidget::Running); - return state; - } else { - state = QVariant(FmRadioHsWidget::NotRunning); - return state; - } -} - -void FmRadioHsWidgetProfileReader::startMonitoringRadioRunningStatus() -{ - XQSettingsKey radioRunningKey(XQSettingsKey::TargetPublishAndSubscribe, KRadioPSUid, - KRadioStartupKey); - bool a = mSettingsManager->startMonitoring(radioRunningKey); - currentRadioRunningStatus(mSettingsManager->readItemValue(radioRunningKey)); -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp --- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,497 +0,0 @@ -/* -* 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 radio service client -* -*/ - -// System includes -#include - -// User includes -#include "fmradiohswidgetradioserviceclient.h" -#include "fmradiohswidget.h" -#include "radioservicedef.h" -#include "radionotificationdata.h" - -/*! - Constructor - */ -FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) : - QObject(parent), - mRequestPending(false), - mRadioMonitorRequest(0), - mRadioControlRequest(0), - mDataInitialized(false) -{ -} - -/*! - Destructor - */ -FmRadioHsWidgetRadioServiceClient::~FmRadioHsWidgetRadioServiceClient() -{ - stopMonitoring(); -} - -/*! - * Initialize all data - */ -void FmRadioHsWidgetRadioServiceClient::init() -{ - const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now - if ( radioIsRunning ) { - //startMonitoring(); - } -} - - -/*! - Starting of FM Radio. - - /param startupState - */ -/* -void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState) -{ - if (!mRadioControlRequest) { - createControlServiceRequest(); - } - - QVariant commandArgument; - switch (startupState) { - case StartForeground: - // TODO: Include header and remove comment. - commandArgument.setValue(*//*RadioServiceCommand::Foreground*/ //6); -/* break; - case StartBackground: - // TODO: Include header and remove comment. - commandArgument.setValue(*//*RadioServiceCommand::Background*/ //7); -/* break; - default: - break; - } - QList arguments; - arguments.append(commandArgument); - mRadioControlRequest->setArguments(arguments); - - bool res = mRadioControlRequest->send(); -} -*/ -/*! - Bring FM Radio to foreground. - - */ -void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioVisibility(FmRadioVisibilty visibility) -{ - QVariant commandArgument; - switch (visibility) { - case ToForeground: - commandArgument.setValue((int) RadioServiceCommand::Foreground); - break; - case ToBackground: - commandArgument.setValue((int) RadioServiceCommand::Background); - case DoNotChange: - default: - break; - } - doSendControlRequest(commandArgument, visibility); -} - -/*! - Changing of FM Radio channel. - - /param command Command to execute. - */ -void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel( - FmRadioChannelChangeCommand command) -{ - QVariant commandArgument; - switch (command) { - case PreviousFavouriteChannel: - commandArgument.setValue((int) RadioServiceCommand::Previous); - break; - case NextFavouriteChannel: - commandArgument.setValue((int) RadioServiceCommand::Next); - break; - default: - break; - } - doSendControlRequest(commandArgument, DoNotChange); -} - -/*! - Changing of FM Radio channel. - - /param command Command to execute. - */ -void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio( - FmRadioAudioControlCommand command) -{ - QVariant commandArgument; - switch (command) { - case Mute: - commandArgument.setValue((int) RadioServiceCommand::Pause); - break; - case Unmute: - commandArgument.setValue((int) RadioServiceCommand::Play); - break; - default: - break; - } - doSendControlRequest(commandArgument, DoNotChange); -} - -/*! - Start FM Radio information listening. - */ -void FmRadioHsWidgetRadioServiceClient::doSendControlRequest(QVariant &argument, - FmRadioVisibilty visibility) -{ - if (!mRadioControlRequest) { - createControlServiceRequest(); - } - - QList arguments; - arguments.append(argument); - mRadioControlRequest->setArguments(arguments); - - prepareRequestInfo(mRadioControlRequest, visibility); - - bool res = mRadioControlRequest->send(); - - if (!res) { - int error = mRadioControlRequest->lastError(); - handleRequestError(error); - } - - //stopMonitoring(); - //startMonitoring(); -} - -/*! - Start FM Radio information listening. - */ -void FmRadioHsWidgetRadioServiceClient::doSendMonitorRequest(FmRadioVisibilty visibility) -{ - prepareRequestInfo(mRadioMonitorRequest, visibility); - if (!mRequestPending) { - //FmRadioHsWidgetRadioServiceSingleton::instance()->sendRequest(); - mRequestPending = mRadioMonitorRequest->send(); - } -} - -/*! - Handle changes in FM Radio information texts. - - /param value - */ -void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value) -{ - mRequestPending = false; - if (!mDataInitialized) { - mRadioMonitorRequest->setOperation(KRadioServiceMonitorOperation); - mDataInitialized = true; - } - startMonitoring(DoNotChange); - if ( value.isValid() && value.canConvert( QVariant::List ) ) { - QVariantList notificationList = value.toList(); - foreach ( const QVariant& variant, notificationList ) { - RadioNotificationData notification = variant.value(); - const int notificationId = notification.mType; - emit radioInformationChanged( notificationId, notification.mData ); - } - } -} - -/*! - Handles request error. - - /param int Error value. - */ -void FmRadioHsWidgetRadioServiceClient::handleRequestError(int error) -{ - QString errorStr; - QVariant var(FmRadioHsWidget::NotRunning); - switch (error) { - case XQService::ENoError: - errorStr = "No error"; - break; - case XQService::EConnectionError: - errorStr = "(/*!< Error in IPC Connection */"; - break; - case XQService::EConnectionClosed: - errorStr = "/*!< IPC Connection is closed */"; - stopMonitoring(); - handleFmRadioStateChange(var); - break; - case XQService::EServerNotFound: - errorStr = "/*!< Can not find server */"; - break; - case XQService::EIPCError: - errorStr = "/*!< Known IPC error defined by SDK */"; - break; - case XQService::EUnknownError: - errorStr = "/*!< Unknown IPC error */"; - break; - case XQService::ERequestPending: - errorStr = "/*!< Already pending request */"; - break; - default: - break; - } -} - -/*! - Handle changes in FM Radio state. - - /param value New state of FM Radio. - */ -void FmRadioHsWidgetRadioServiceClient::handleFmRadioStateChange(QVariant& value) -{ - if (value.isValid()) { - emit radioStateChanged(value); - } -} - -/*! - Handle request completion. - - /param value - */ -void FmRadioHsWidgetRadioServiceClient::requestCompleted(const QVariant& value) -{ - if (value.isValid()) { - } -} - -/*! - Handle error. - - /param errorCode - /param errorMessage - */ -void FmRadioHsWidgetRadioServiceClient::handleError(int errorCode, const QString& errorMessage) -{ - int e = errorCode; - QString em = errorMessage; - handleRequestError(e); -} - -/*! - Creates control service request object. - */ -void FmRadioHsWidgetRadioServiceClient::createControlServiceRequest() -{ - if (!mRadioControlRequest) { - QString fullInterfaceName = /*KRadioServiceName +"."+*/ KRadioServiceControlInterfaceName; - mRadioControlRequest = mApplicationManager.create(fullInterfaceName, - KRadioServiceControlOperation, false); - - if (mRadioControlRequest) { - mRadioControlRequest->setEmbedded(false); - mRadioControlRequest->setSynchronous(true); - //TODO: Do backgound set through XQRequestInfo in MCL wk14. - //mRadioControlRequest->setBackground(true); - - /* - bool b = connect(mRadioControlRequest, SIGNAL(requestOk(const QVariant&)), this, - SLOT(requestCompleted(const QVariant&))); - bool t = connect(mRadioControlRequest, SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&))); - */ - } - } -} - -/*! - Creates monitor service request object. - */ -void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest() -{ - if (!mRadioMonitorRequest) { - QString operation = mDataInitialized ? KRadioServiceMonitorOperation - : KRadioServiceRefreshOperation; - QString fullInterfaceName = /*KRadioServiceName +"."+*/ KRadioServiceMonitorInterfaceName; - - /* - QList list; - list = mApplicationManager.list(KRadioServiceName, fullInterfaceName, ""); - XQAiwInterfaceDescriptor interfaceDescriptor; - foreach (XQAiwInterfaceDescriptor d, list) - { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - if (sn == KRadioServiceName && in == fullInterfaceName) { - interfaceDescriptor = d; - } - } - */ - - /* - mRadioMonitorRequest = mApplicationManager.create(interfaceDescriptor, - KRadioServiceMonitorOperation, false); - */ - - mRadioMonitorRequest = mApplicationManager.create( - fullInterfaceName, operation, false); - - if (mRadioMonitorRequest) { - connect(mRadioMonitorRequest, SIGNAL(requestOk(const QVariant&)), - this, SLOT(handleFmRadioInformationChange(const QVariant&))); - connect(mRadioMonitorRequest, - SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&))); - - mRadioMonitorRequest->setSynchronous(false); - mRadioMonitorRequest->setEmbedded(false); - } - } -} - -/*! - Start radio monitoring. - */ -void FmRadioHsWidgetRadioServiceClient::startMonitoring(FmRadioVisibilty visibility) -{ - //FmRadioHsWidgetRadioServiceSingleton::instance(this)->requestNotifications(this); - - if (!mRadioMonitorRequest) { - createMonitorServiceRequest(); - } - doSendMonitorRequest(visibility); -} - -/*! - Stops radio monitoring. - */ -void FmRadioHsWidgetRadioServiceClient::stopMonitoring() -{ - //FmRadioHsWidgetRadioServiceSingleton::instance(this)->cancelNotifications(this); - - if (mRadioMonitorRequest) { - delete mRadioMonitorRequest; - mRadioMonitorRequest = NULL; - } - mRequestPending = false; - mDataInitialized = false; -} - -/*! - Prepares the visibility of the request. - */ -void FmRadioHsWidgetRadioServiceClient::prepareRequestInfo(XQAiwRequest *request, - FmRadioVisibilty visibility) -{ - XQRequestInfo info; - switch (visibility) { - case ToForeground: - //info.setForeground(true); - break; - case ToBackground: - info.setBackground(true); - break; - case DoNotChange: - default: - break; - } - if (request) { - request->setInfo(info); - bool a = request->isBackground(); - } - //bool f = info.isForeground(); - bool b = info.isBackground(); -} - -void FmRadioHsWidgetRadioServiceClient::test() -{ - // Test is kept for example. We have to switch to use the XQAiwRequest and this includes workin example code. - //XQAiwRequest* req; -/* - QUrl uri("application://101FF976"); - QString a = "Uri=" + uri.toString(); - if (uri.isValid()) { - QString b = "isValid"; - } - QString c = "Uri authority=" + uri.authority(); -*/ -/* - QList list = mApplicationManager.list(KRadioServiceName, KRadioServiceMonitorInterfaceName); - foreach (XQAiwInterfaceDescriptor d, list) { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - } - - list = mApplicationManager.list(KRadioServiceName, KRadioServiceMonitorInterfaceName, ""); - foreach (XQAiwInterfaceDescriptor d, list) { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - } - - list = mApplicationManager.list(KRadioServiceMonitorInterfaceName, ""); - foreach (XQAiwInterfaceDescriptor d, list) { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - } -*/ - //req = mApplicationManager.create(uri, false); - - /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation, - false);*/ - -/* /// - if (!mRadioMonitorRequest) { - createMonitorServiceRequest(); - } - bool res = mRadioMonitorRequest->send(); -/// -*/ - - /*if (req) {*/ -/* - // Connect signals once - bool a = connect(req, SIGNAL(requestOk(const QVariant&)), this, - SLOT(handleOk(const QVariant&))); - bool b = connect(req, SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&))); -*/ - /*bool b = connect(req, SIGNAL(requestOk(const QVariant&)), this, - SLOT(handleFmRadioInformationChange(QVariant))); - bool c = connect(req, SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&)));*/ -/* - QList arg; - arg << ""; - req->setArguments(arg); -*/ -/* - QString op = req->operation(); - req->setOperation(KRadioServiceMonitorOperation); - op = req->operation(); -*/ - /*bool res = req->send();*/ - - /*if (res) { - //QTimer::singleShot(40000, this, SLOT(doSendMonitorRequest())); - } - else { - // Request failed. - int x = 2; - } - - } - else { - int r; - r = 5; - }*/ -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin_exports_to_rom.pri --- a/hswidgetplugin/fmradiohswidgetplugin_exports_to_rom.pri Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -# -# 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: -# - -BLD_INF_RULES.prj_exports += \ -"$${LITERAL_HASH}include " - -#iby exports to core -BLD_INF_RULES.prj_exports += \ -"rom/fmradiohswidgetplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(fmradiohswidgetplugin.iby)" - -#iby exports to install -BLD_INF_RULES.prj_exports += \ -"rom/fmradiohswidgetplugininstaller.iby CORE_APP_LAYER_IBY_EXPORT_PATH(fmradiohswidgetplugininstaller.iby)" - -#iby exports to language -#BLD_INF_RULES.prj_exports += \ -#"rom/homescreenapp_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(homescreenapp_resources.iby)" - -BLD_INF_RULES.prj_extensions += \ -$$LITERAL_HASH"ifdef MARM" \ - " START EXTENSION app-services/buildstubsis" \ - " OPTION SRCDIR rom" \ - " OPTION SISNAME fmradiohswidgetplugin_stub" \ - " END" \ -$$LITERAL_HASH"endif" diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.cpp --- a/hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* 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: Example of home screen widget -* -*/ - -#include -#include -#include - -QTM_USE_NAMESPACE - -const QString KXml = "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml"; - -int main(int argc, char *argv[]) -{ - QCoreApplication app(argc, argv); - - QServiceManager s; - - if (QFile::exists(KXml)) { - s.addService(KXml); - } else { - s.removeService("fmradiohswidgetplugin"); - } -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.pro --- a/hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.pro Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -# -# 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: Example of home screen widget -# - -include(../buildflags.pri) - -TEMPLATE = app - -QT = core -CONFIG += no_icon - -CONFIG += mobility -MOBILITY = serviceframework - -SOURCES += fmradiohswidgetplugininstaller.cpp - -symbian { - TARGET.CAPABILITY = ALL -TCB -} diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/hswidgetplugin.pro --- a/hswidgetplugin/hswidgetplugin.pro Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -# -# 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: Example of home screen widget -# - -CONFIG += ordered -TEMPLATE = subdirs -SUBDIRS = fmradiohswidgetplugin \ - fmradiohswidgetplugininstaller - -symbian:include(fmradiohswidgetplugin_exports_to_rom.pri) diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/rom/fmradiohswidgetplugin.iby --- a/hswidgetplugin/rom/fmradiohswidgetplugin.iby Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef __FMRADIOHSWIDGETPLUGIN_IBY__ -#define __FMRADIOHSWIDGETPLUGIN_IBY__ - -file=ABI_DIR\BUILD_DIR\fmradiohswidgetplugin.dll SHARED_LIB_DIR\fmradiohswidgetplugin.dll -data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.qtplugin private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.qtplugin -data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.manifest private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.manifest -data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.xml private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.xml - - -#endif //__FMRADIOHSWIDGETPLUGIN_IBY__ diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/rom/fmradiohswidgetplugin_stub.pkg --- a/hswidgetplugin/rom/fmradiohswidgetplugin_stub.pkg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -; -; 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: Stub package file for FM Radio home screen widget -; - -; Languages -&EN - -; Header -#{"fmradiohswidgetplugin"}, (0x2002E6D6), 1, 0, 0, TYPE=SA - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/rom/fmradiohswidgetplugininstaller.iby --- a/hswidgetplugin/rom/fmradiohswidgetplugininstaller.iby Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef __FMRADIOHSWIDGETPLUGININSTALLER_IBY__ -#define __FMRADIOHSWIDGETPLUGININSTALLER_IBY__ - -S60_APP_EXE(fmradiohswidgetplugininstaller) - -#endif //__FMRADIOHSWIDGETPLUGININSTALLER_IBY__ diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/sis/fmradiohswidgetplugin.pkg --- a/hswidgetplugin/sis/fmradiohswidgetplugin.pkg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -; -; 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: -; - -; Language -&EN - -; SIS header: name, uid, version -#{"fmradiohswidgetplugin"},(0x2002E6D6),1,0,0 - -; Localised Vendor name -%{"Vendor"} - -; Unique Vendor name -:"Vendor" - -; Manual PKG pre-rules from PRO files -; Default HW/platform dependencies -[0x101F7961],0,0,0,{"S60ProductID"} -[0x102032BE],0,0,0,{"S60ProductID"} -[0x102752AE],0,0,0,{"S60ProductID"} -[0x1028315F],0,0,0,{"S60ProductID"} - -"/epoc32/release/armv5/urel/fmradiohswidgetplugin.dll" - "c:/sys/bin/fmradiohswidgetplugin.dll" -"../fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin" - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.qtplugin" -"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.manifest" - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.manifest" -"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml" - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml" -"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.css" - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.css" -;"/epoc32/data/z/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.s60xml" - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml" -;"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml" - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml" -;"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin_icon.png" - "!:\private\20022F35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin_icon.png" - -"/epoc32/release/armv5/urel/fmradiohswidgetplugininstaller.exe" - "c:/sys/bin/fmradiohswidgetplugininstaller.exe", FR, RB, RW diff -r 6bcf277166c1 -r 451b2e1545b2 layers.sysdef.xml diff -r 6bcf277166c1 -r 451b2e1545b2 radio.pro --- a/radio.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radio.pro Thu Jul 22 16:33:45 2010 +0100 @@ -20,5 +20,5 @@ symbian: { BLD_INF_RULES.prj_mmpfiles += $$LITERAL_HASH"include \"radioengine/group/bld.inf\"" SUBDIRS += radioapp - SUBDIRS += hswidgetplugin + SUBDIRS += radiohswidget } \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bin/fmradio_en_US.qm Binary file radioapp/bin/fmradio_en_US.qm has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/buildflags.pri --- a/radioapp/buildflags.pri Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/buildflags.pri Thu Jul 22 16:33:45 2010 +0100 @@ -23,18 +23,12 @@ # Use of some debugging controls that are not part of official UI spec # RADIOFLAGS += USE_DEBUGGING_CONTROLS -# Reads the layout docml files and images from e:/radiotest/ folder -# RADIOFLAGS += USE_LAYOUT_FROM_E_DRIVE - # Flag to use dummy radio data read from XML file # RADIOFLAGS += USE_DUMMY_RADIO_DATA # Functional testing # RADIOFLAGS += SHOW_CALLSIGN_IN_ANY_REGION -# Build flag to enable usage of the new preset utility -RADIOFLAGS += COMPILE_WITH_NEW_PRESET_UTILITY - # Build flag to add EXPORTUNFROZEN to the pro file # RADIOFLAGS += USE_UNFROZEN_EXPORTS @@ -47,10 +41,10 @@ # Full logging flag that enables the full logging including also timestamps # Enabled by default in debug builds - CONFIG(debug, debug|release) : LOGGING_FLAGS += LOGGING_ENABLED +# CONFIG(debug, debug|release) : LOGGING_FLAGS += LOGGING_ENABLED # Uncomment to enable full logging in release builds -# LOGGING_FLAGS *= LOGGING_ENABLED +LOGGING_FLAGS *= LOGGING_ENABLED # Timestamp logging flag that enables only timestamp logging # LOGGING_FLAGS += TIMESTAMP_LOGGING_ENABLED @@ -58,6 +52,17 @@ # Combines Ui and Engine logs by feeding UI traces to the engine logger LOGGING_FLAGS += COMBINE_WITH_ENGINE_LOGGER +# Logging level +# 1 - Normal level +# 2 - More verbose level +# 3 - Most verbose level +LOGGING_FLAGS += LOGGING_LEVEL=1 + +# Select which radio component is being logged +# 1 - Radio application +# 2 - Radio homescreen widget +LOGGING_FLAGS += LOGGED_COMPONENT=1 + contains(LOGGING_FLAGS, TIMESTAMP_LOGGING_ENABLED)|contains(LOGGING_FLAGS, LOGGING_ENABLED) { # Writes debug prints to file if enabled @@ -75,6 +80,11 @@ # 2 - Log failed connection and halt debugger LOGGING_FLAGS += CONNECT_TEST_MODE=2 +win32: { + LOGGING_FLAGS *= LOGGING_ENABLED # Logging is always enabled in Win32 environment + RADIOFLAGS += VID_DEFAULT=0 +} + DEFINES += $$LOGGING_FLAGS # ########################################################## @@ -87,28 +97,36 @@ CONFIG += $$LOGGING_FLAGS symbian: { - DEFINES += SYMBIAN + DEFINES += SYMBIAN TARGET.EPOCALLOWDLLDATA = 1 TARGET.VID = VID_DEFAULT TARGET.CAPABILITY = CAP_GENERAL_DLL + INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + SYMBIAN_PLATFORMS = WINSCW ARMV5 + MMP_RULES += SMPSAFE } +# QT 4.7 changes the def file location so force them to stay where they are +defFilePath = .. + win32: { DEFINES += BUILD_WIN32 DESTDIR = ../bin LIBS += -L../bin INCLUDEPATH += ../radioenginewrapper/inc + INCLUDEPATH += ../../internal/win32_stubs + HEADERS += ../../internal/win32_stubs/qsysteminfo.h + HEADERS += ../../internal/win32_stubs/xqserviceutil.h + HEADERS += ../../internal/win32_stubs/xqserviceprovider.h + SOURCES += ../../internal/win32_stubs/win32_stubs.cpp } USE_UNFROZEN_EXPORTS { - symbian:MMP_RULES += "exportunfrozen" + symbian:MMP_RULES += "exportunfrozen" symbian:DEF_FILE = not_used.def } -# $$_PRO_FILE_PWD_ points to the directory of the pro file -MOC_DIR = $$_PRO_FILE_PWD_/tmp -RCC_DIR = $$_PRO_FILE_PWD_/tmp -OBJECTS_DIR = $$_PRO_FILE_PWD_/tmp -UI_DIR = $$_PRO_FILE_PWD_/tmp -UI_HEADERS_DIR = $$_PRO_FILE_PWD_/tmp -UI_SOURCES_DIR = $$_PRO_FILE_PWD_/tmp +# Place generated files away from the source folder +MOC_DIR = /epoc32/build/radioapp/$$TMP_DIR_NAME +RCC_DIR = /epoc32/build/radioapp/$$TMP_DIR_NAME +OBJECTS_DIR = /epoc32/build/radioapp/$$TMP_DIR_NAME diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/fmradioenginewrapperu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/bwins/fmradioenginewrapperu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,47 @@ +EXPORTS + ?skipPrevious@RadioEngineWrapperObserver@@UAEXXZ @ 1 NONAME ; void RadioEngineWrapperObserver::skipPrevious(void) + ?volumeChanged@RadioEngineWrapperObserver@@UAEXH@Z @ 2 NONAME ; void RadioEngineWrapperObserver::volumeChanged(int) + ?init@RadioEngineWrapper@@QAE_NXZ @ 3 NONAME ; bool RadioEngineWrapper::init(void) + ?settings@RadioEngineWrapper@@QAEAAVRadioSettingsIf@@XZ @ 4 NONAME ; class RadioSettingsIf & RadioEngineWrapper::settings(void) + ?region@RadioEngineWrapper@@QBE?AW4Region@RadioRegion@@XZ @ 5 NONAME ; enum RadioRegion::Region RadioEngineWrapper::region(void) const + ?initCombinedLogger@RadioLogger@@SAXXZ @ 6 NONAME ; void RadioLogger::initCombinedLogger(void) + ?removeObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 7 NONAME ; void RadioEngineWrapper::removeObserver(class RadioEngineWrapperObserver *) + ?decreaseVolume@RadioEngineWrapper@@QAEXXZ @ 8 NONAME ; void RadioEngineWrapper::decreaseVolume(void) + ?isRadioOn@RadioEngineWrapper@@QBE_NXZ @ 9 NONAME ; bool RadioEngineWrapper::isRadioOn(void) const + ?addObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 10 NONAME ; void RadioEngineWrapper::addObserver(class RadioEngineWrapperObserver *) + ?isAntennaAttached@RadioEngineWrapper@@QBE_NXZ @ 11 NONAME ; bool RadioEngineWrapper::isAntennaAttached(void) const + ?toggleAudioRoute@RadioEngineWrapper@@QAEXXZ @ 12 NONAME ; void RadioEngineWrapper::toggleAudioRoute(void) + ?setVolume@RadioEngineWrapper@@QAEXH@Z @ 13 NONAME ; void RadioEngineWrapper::setVolume(int) + ?setMute@RadioEngineWrapper@@QAEX_N0@Z @ 14 NONAME ; void RadioEngineWrapper::setMute(bool, bool) + ??0RadioEngineWrapper@@QAE@AAVRadioStationHandlerIf@@@Z @ 15 NONAME ; RadioEngineWrapper::RadioEngineWrapper(class RadioStationHandlerIf &) + ?cancelSeeking@RadioEngineWrapper@@QAEXXZ @ 16 NONAME ; void RadioEngineWrapper::cancelSeeking(void) + ?d_func@RadioEngineWrapper@@AAEPAVRadioEngineWrapperPrivate@@XZ @ 17 NONAME ; class RadioEngineWrapperPrivate * RadioEngineWrapper::d_func(void) + ?d_func@RadioEngineWrapper@@ABEPBVRadioEngineWrapperPrivate@@XZ @ 18 NONAME ; class RadioEngineWrapperPrivate const * RadioEngineWrapper::d_func(void) const + ?releaseCombinedLogger@RadioLogger@@SAXXZ @ 19 NONAME ; void RadioLogger::releaseCombinedLogger(void) + ??1RadioEngineWrapper@@QAE@XZ @ 20 NONAME ; RadioEngineWrapper::~RadioEngineWrapper(void) + ?radioStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 21 NONAME ; void RadioEngineWrapperObserver::radioStatusChanged(bool) + ?increaseVolume@RadioEngineWrapperObserver@@UAEXXZ @ 22 NONAME ; void RadioEngineWrapperObserver::increaseVolume(void) + ?frequencyStepSize@RadioEngineWrapper@@QBEIXZ @ 23 NONAME ; unsigned int RadioEngineWrapper::frequencyStepSize(void) const + ??0MethodLogger@@QAE@PBD0@Z @ 24 NONAME ; MethodLogger::MethodLogger(char const *, char const *) + ?isFrequencyValid@RadioEngineWrapper@@QBE_NI@Z @ 25 NONAME ; bool RadioEngineWrapper::isFrequencyValid(unsigned int) const + ?setFrequency@RadioEngineWrapper@@QAEXIH@Z @ 26 NONAME ; void RadioEngineWrapper::setFrequency(unsigned int, int) + ?setRdsEnabled@RadioEngineWrapper@@QAEX_N@Z @ 27 NONAME ; void RadioEngineWrapper::setRdsEnabled(bool) + ?logMsg@RadioLogger@@SAXPBDW4Mode@1@@Z @ 28 NONAME ; void RadioLogger::logMsg(char const *, enum RadioLogger::Mode) + ?audioRouteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 29 NONAME ; void RadioEngineWrapperObserver::audioRouteChanged(bool) + ?isMuted@RadioEngineWrapper@@QBE_NXZ @ 30 NONAME ; bool RadioEngineWrapper::isMuted(void) const + ?isUsingLoudspeaker@RadioEngineWrapper@@QBE_NXZ @ 31 NONAME ; bool RadioEngineWrapper::isUsingLoudspeaker(void) const + ?currentFrequency@RadioEngineWrapper@@QBEIXZ @ 32 NONAME ; unsigned int RadioEngineWrapper::currentFrequency(void) const + ?skipNext@RadioEngineWrapperObserver@@UAEXXZ @ 33 NONAME ; void RadioEngineWrapperObserver::skipNext(void) + ?isInManualSeekMode@RadioEngineWrapper@@QBE_NXZ @ 34 NONAME ; bool RadioEngineWrapper::isInManualSeekMode(void) const + ?muteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 35 NONAME ; void RadioEngineWrapperObserver::muteChanged(bool) + ?startSeeking@RadioEngineWrapper@@QAEXW4Direction@Seek@@H@Z @ 36 NONAME ; void RadioEngineWrapper::startSeeking(enum Seek::Direction, int) + ?decreaseVolume@RadioEngineWrapperObserver@@UAEXXZ @ 37 NONAME ; void RadioEngineWrapperObserver::decreaseVolume(void) + ?minFrequency@RadioEngineWrapper@@QBEIXZ @ 38 NONAME ; unsigned int RadioEngineWrapper::minFrequency(void) const + ?rdsAvailabilityChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 39 NONAME ; void RadioEngineWrapperObserver::rdsAvailabilityChanged(bool) + ?tunedToFrequency@RadioEngineWrapperObserver@@UAEXIH@Z @ 40 NONAME ; void RadioEngineWrapperObserver::tunedToFrequency(unsigned int, int) + ??1MethodLogger@@QAE@XZ @ 41 NONAME ; MethodLogger::~MethodLogger(void) + ?antennaStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 42 NONAME ; void RadioEngineWrapperObserver::antennaStatusChanged(bool) + ?setManualSeekMode@RadioEngineWrapper@@QAEX_N@Z @ 43 NONAME ; void RadioEngineWrapper::setManualSeekMode(bool) + ?increaseVolume@RadioEngineWrapper@@QAEXXZ @ 44 NONAME ; void RadioEngineWrapper::increaseVolume(void) + ?maxFrequency@RadioEngineWrapper@@QBEIXZ @ 45 NONAME ; unsigned int RadioEngineWrapper::maxFrequency(void) const + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/fmradiopresetstorageu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/bwins/fmradiopresetstorageu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,14 @@ +EXPORTS + ??1RadioPresetStorage@@QAE@XZ @ 1 NONAME ; RadioPresetStorage::~RadioPresetStorage(void) + ?savePreset@RadioPresetStorage@@QAE_NABVRadioStationIf@@@Z @ 2 NONAME ; bool RadioPresetStorage::savePreset(class RadioStationIf const &) + ?maxNumberOfPresets@RadioPresetStorage@@QBEHXZ @ 3 NONAME ; int RadioPresetStorage::maxNumberOfPresets(void) const + ??0RadioPresetStorage@@QAE@XZ @ 4 NONAME ; RadioPresetStorage::RadioPresetStorage(void) + ?nextPreset@RadioPresetStorage@@QBEHH@Z @ 5 NONAME ; int RadioPresetStorage::nextPreset(int) const + ?deletePreset@RadioPresetStorage@@QAE_NH@Z @ 6 NONAME ; bool RadioPresetStorage::deletePreset(int) + ?firstPreset@RadioPresetStorage@@QBEHXZ @ 7 NONAME ; int RadioPresetStorage::firstPreset(void) const + ?readPreset@RadioPresetStorage@@QAE_NHAAVRadioStationIf@@@Z @ 8 NONAME ; bool RadioPresetStorage::readPreset(int, class RadioStationIf &) + ?presetCount@RadioPresetStorage@@QBEHXZ @ 9 NONAME ; int RadioPresetStorage::presetCount(void) const + ?d_func@RadioPresetStorage@@AAEPAVRadioPresetStoragePrivate@@XZ @ 10 NONAME ; class RadioPresetStoragePrivate * RadioPresetStorage::d_func(void) + ?d_func@RadioPresetStorage@@ABEPBVRadioPresetStoragePrivate@@XZ @ 11 NONAME ; class RadioPresetStoragePrivate const * RadioPresetStorage::d_func(void) const + ?readFrequencies@RadioPresetStorage@@QAEXAAV?$QList@I@@@Z @ 12 NONAME ; void RadioPresetStorage::readFrequencies(class QList &) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/fmradiouiengineu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/bwins/fmradiouiengineu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,255 @@ +EXPORTS + ?tr@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString RadioUiEngine::tr(char const *, char const *) + ?setFrequency@RadioHistoryItem@@QAEXI@Z @ 2 NONAME ; void RadioHistoryItem::setFrequency(unsigned int) + ?currentStation@RadioStationModel@@QBEABVRadioStation@@XZ @ 3 NONAME ; class RadioStation const & RadioStationModel::currentStation(void) const + ?rowCount@RadioHistoryModel@@UBEHABVQModelIndex@@@Z @ 4 NONAME ; int RadioHistoryModel::rowCount(class QModelIndex const &) const + ?contains@RadioStationModel@@QBE_NI@Z @ 5 NONAME ; bool RadioStationModel::contains(unsigned int) const + ?qt_metacast@RadioUiEngine@@UAEPAXPBD@Z @ 6 NONAME ; void * RadioUiEngine::qt_metacast(char const *) + ?parseFrequency@RadioStation@@SA?AVQString@@I@Z @ 7 NONAME ; class QString RadioStation::parseFrequency(unsigned int) + ??0RadioStation@@QAE@ABV0@@Z @ 8 NONAME ; RadioStation::RadioStation(class RadioStation const &) + ?skipStation@RadioUiEngine@@QAEIW4Mode@StationSkip@@I@Z @ 9 NONAME ; unsigned int RadioUiEngine::skipStation(enum StationSkip::Mode, unsigned int) + ?region@RadioUiEngine@@QBE?AW4Region@RadioRegion@@XZ @ 10 NONAME ; enum RadioRegion::Region RadioUiEngine::region(void) const + ?frequency@RadioStation@@QBEIXZ @ 11 NONAME ; unsigned int RadioStation::frequency(void) const + ?setFavoriteByFrequency@RadioStationModel@@QAEXI_N@Z @ 12 NONAME ; void RadioStationModel::setFavoriteByFrequency(unsigned int, bool) + ?isInitialized@RadioUiEngine@@QBE_NXZ @ 13 NONAME ; bool RadioUiEngine::isInitialized(void) const + ?staticMetaObject@RadioUiEngine@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const RadioUiEngine::staticMetaObject + ?indexFromFrequency@RadioStationModel@@QAEHI@Z @ 15 NONAME ; int RadioStationModel::indexFromFrequency(unsigned int) + ?stationsInRange@RadioStationModel@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 16 NONAME ; class QList RadioStationModel::stationsInRange(unsigned int, unsigned int) + ?settings@RadioUiEngine@@QAEAAVRadioSettingsIf@@XZ @ 17 NONAME ; class RadioSettingsIf & RadioUiEngine::settings(void) + ?emitAntennaStatusChanged@RadioUiEngine@@AAEX_N@Z @ 18 NONAME ; void RadioUiEngine::emitAntennaStatusChanged(bool) + ?hasPiCode@RadioStation@@QBE_NXZ @ 19 NONAME ; bool RadioStation::hasPiCode(void) const + ??_ERadioScannerEngine@@UAE@I@Z @ 20 NONAME ; RadioScannerEngine::~RadioScannerEngine(unsigned int) + ?setFavoriteByPreset@RadioStationModel@@QAEXH_N@Z @ 21 NONAME ; void RadioStationModel::setFavoriteByPreset(int, bool) + ?rdsAvailabilityChanged@RadioUiEngine@@IAEX_N@Z @ 22 NONAME ; void RadioUiEngine::rdsAvailabilityChanged(bool) + ?findPresetIndex@RadioStationModel@@QAEHHAAVRadioStation@@@Z @ 23 NONAME ; int RadioStationModel::findPresetIndex(int, class RadioStation &) + ?stationHandlerIf@RadioStationModel@@QAEAAVRadioStationHandlerIf@@XZ @ 24 NONAME ; class RadioStationHandlerIf & RadioStationModel::stationHandlerIf(void) + ?qt_metacall@RadioHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 25 NONAME ; int RadioHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *) + ?frequencyString@RadioStation@@QBE?AVQString@@XZ @ 26 NONAME ; class QString RadioStation::frequencyString(void) const + ?emitVolumeChanged@RadioUiEngine@@AAEXH@Z @ 27 NONAME ; void RadioUiEngine::emitVolumeChanged(int) + ?qt_metacall@RadioUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 28 NONAME ; int RadioUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *) + ?reset@RadioStation@@AAEXXZ @ 29 NONAME ; void RadioStation::reset(void) + ?createScannerEngine@RadioUiEngine@@QAE?AV?$QSharedPointer@VRadioScannerEngine@@@@XZ @ 30 NONAME ; class QSharedPointer RadioUiEngine::createScannerEngine(void) + ?emitAudioRouteChanged@RadioUiEngine@@AAEX_N@Z @ 31 NONAME ; void RadioUiEngine::emitAudioRouteChanged(bool) + ?addItem@RadioHistoryModel@@AAEXABVQString@@0ABVRadioStation@@@Z @ 32 NONAME ; void RadioHistoryModel::addItem(class QString const &, class QString const &, class RadioStation const &) + ?d_func@RadioScannerEngine@@ABEPBVRadioScannerEnginePrivate@@XZ @ 33 NONAME ; class RadioScannerEnginePrivate const * RadioScannerEngine::d_func(void) const + ??4RadioStation@@QAEAAV0@ABV0@@Z @ 34 NONAME ; class RadioStation & RadioStation::operator=(class RadioStation const &) + ?toggleAudioRoute@RadioUiEngine@@QAEXXZ @ 35 NONAME ; void RadioUiEngine::toggleAudioRoute(void) + ?stationModel@RadioUiEngine@@QAEAAVRadioStationModel@@XZ @ 36 NONAME ; class RadioStationModel & RadioUiEngine::stationModel(void) + ?unsetType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 37 NONAME ; void RadioStation::unsetType(class QFlags) + ?toggleTagging@RadioHistoryModel@@QAEXABVRadioHistoryItem@@H@Z @ 38 NONAME ; void RadioHistoryModel::toggleTagging(class RadioHistoryItem const &, int) + ?muteChanged@RadioUiEngine@@IAEX_N@Z @ 39 NONAME ; void RadioUiEngine::muteChanged(bool) + ?maxFrequency@RadioUiEngine@@QBEIXZ @ 40 NONAME ; unsigned int RadioUiEngine::maxFrequency(void) const + ?setIcons@RadioStationModel@@QAEXABVQIcon@@0@Z @ 41 NONAME ; void RadioStationModel::setIcons(class QIcon const &, class QIcon const &) + ?saveStation@RadioStationModel@@QAEXAAVRadioStation@@@Z @ 42 NONAME ; void RadioStationModel::saveStation(class RadioStation &) + ?getStaticMetaObject@RadioHistoryModel@@SAABUQMetaObject@@XZ @ 43 NONAME ; struct QMetaObject const & RadioHistoryModel::getStaticMetaObject(void) + ?findUnusedPresetIndex@RadioStationModel@@AAEHXZ @ 44 NONAME ; int RadioStationModel::findUnusedPresetIndex(void) + ?hasChanged@RadioStation@@QBE_NXZ @ 45 NONAME ; bool RadioStation::hasChanged(void) const + ?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 46 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *, int) + ?isScanning@RadioUiEngine@@QBE_NXZ @ 47 NONAME ; bool RadioUiEngine::isScanning(void) const + ?dynamicPsCheckEnded@RadioStationModel@@AAEXXZ @ 48 NONAME ; void RadioStationModel::dynamicPsCheckEnded(void) + ?d_func@RadioHistoryModel@@AAEPAVRadioHistoryModelPrivate@@XZ @ 49 NONAME ; class RadioHistoryModelPrivate * RadioHistoryModel::d_func(void) + ?setFrequency@RadioStation@@AAEXI@Z @ 50 NONAME ; void RadioStation::setFrequency(unsigned int) + ?piCodeToCallSign@RadioStation@@AAE?AVQString@@I@Z @ 51 NONAME ; class QString RadioStation::piCodeToCallSign(unsigned int) + ?seekStation@RadioUiEngine@@QAEXH@Z @ 52 NONAME ; void RadioUiEngine::seekStation(int) + ?favoriteChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 53 NONAME ; void RadioStationModel::favoriteChanged(class RadioStation const &) + ?radioStatusChanged@RadioUiEngine@@IAEX_N@Z @ 54 NONAME ; void RadioUiEngine::radioStatusChanged(bool) + ?setIcons@RadioHistoryModel@@QAEXABVQIcon@@0@Z @ 55 NONAME ; void RadioHistoryModel::setIcons(class QIcon const &, class QIcon const &) + ?isCurrentSongRecognized@RadioHistoryModel@@QBE_NXZ @ 56 NONAME ; bool RadioHistoryModel::isCurrentSongRecognized(void) const + ?addStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 57 NONAME ; void RadioStationModel::addStation(class RadioStation const &) + ?clearRadioTextPlus@RadioHistoryModel@@AAEXXZ @ 58 NONAME ; void RadioHistoryModel::clearRadioTextPlus(void) + ?favoriteCount@RadioStationModel@@QAEHXZ @ 59 NONAME ; int RadioStationModel::favoriteCount(void) + ??1RadioScannerEngine@@UAE@XZ @ 60 NONAME ; RadioScannerEngine::~RadioScannerEngine(void) + ?tunedToFrequency@RadioUiEngine@@IAEXIH@Z @ 61 NONAME ; void RadioUiEngine::tunedToFrequency(unsigned int, int) + ?tr@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 62 NONAME ; class QString RadioUiEngine::tr(char const *, char const *, int) + ?launchBrowser@RadioUiEngine@@QAEXABVQString@@@Z @ 63 NONAME ; void RadioUiEngine::launchBrowser(class QString const &) + ?isScanning@RadioScannerEngine@@QBE_NXZ @ 64 NONAME ; bool RadioScannerEngine::isScanning(void) const + ??1RadioHistoryItem@@QAE@XZ @ 65 NONAME ; RadioHistoryItem::~RadioHistoryItem(void) + ?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 66 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *) + ?hasName@RadioStation@@QBE_NXZ @ 67 NONAME ; bool RadioStation::hasName(void) const + ?emitDataChanged@RadioStationModel@@AAEXABVRadioStation@@@Z @ 68 NONAME ; void RadioStationModel::emitDataChanged(class RadioStation const &) + ?setPowerOff@RadioUiEngine@@QAEXH@Z @ 69 NONAME ; void RadioUiEngine::setPowerOff(int) + ?isRadioOn@RadioUiEngine@@QBE_NXZ @ 70 NONAME ; bool RadioUiEngine::isRadioOn(void) const + ?continueScanning@RadioScannerEngine@@QAEXXZ @ 71 NONAME ; void RadioScannerEngine::continueScanning(void) + ?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 72 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *, int) + ?list@RadioStationModel@@QBEABV?$QMap@IVRadioStation@@@@XZ @ 73 NONAME ; class QMap const & RadioStationModel::list(void) const + ?tr@RadioStationModel@@SA?AVQString@@PBD0@Z @ 74 NONAME ; class QString RadioStationModel::tr(char const *, char const *) + ?hasRds@RadioStation@@QBE_NXZ @ 75 NONAME ; bool RadioStation::hasRds(void) const + ?findClosest@RadioStationModel@@QAE?AVRadioStation@@IW4Mode@StationSkip@@@Z @ 76 NONAME ; class RadioStation RadioStationModel::findClosest(unsigned int, enum StationSkip::Mode) + ?flags@RadioStationModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 77 NONAME ; class QFlags RadioStationModel::flags(class QModelIndex const &) const + ?launchRadioServer@RadioUiEngine@@SAXXZ @ 78 NONAME ; void RadioUiEngine::launchRadioServer(void) + ?staticMetaObject@RadioScannerEngine@@2UQMetaObject@@B @ 79 NONAME ; struct QMetaObject const RadioScannerEngine::staticMetaObject + ?id@RadioHistoryItem@@QBEHXZ @ 80 NONAME ; int RadioHistoryItem::id(void) const + ?stationsInRange@RadioUiEngine@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 81 NONAME ; class QList RadioUiEngine::stationsInRange(unsigned int, unsigned int) + ?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 82 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *) + ?tr@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 83 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *, int) + ?setPiCode@RadioStation@@AAE_NHW4Region@RadioRegion@@@Z @ 84 NONAME ; bool RadioStation::setPiCode(int, enum RadioRegion::Region) + ?data_ptr@RadioHistoryItem@@QAEAAV?$QSharedDataPointer@VRadioHistoryItemPrivate@@@@XZ @ 85 NONAME ; class QSharedDataPointer & RadioHistoryItem::data_ptr(void) + ?radioText@RadioStation@@QBE?AVQString@@XZ @ 86 NONAME ; class QString RadioStation::radioText(void) const + ?setData@RadioStationModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 87 NONAME ; bool RadioStationModel::setData(class QModelIndex const &, class QVariant const &, int) + ?isInManualSeekMode@RadioUiEngine@@QBE_NXZ @ 88 NONAME ; bool RadioUiEngine::isInManualSeekMode(void) const + ?itemAtIndex@RadioHistoryModel@@QBE?AVRadioHistoryItem@@ABVQModelIndex@@@Z @ 89 NONAME ; class RadioHistoryItem RadioHistoryModel::itemAtIndex(class QModelIndex const &) const + ?setVolume@RadioUiEngine@@QAEXH@Z @ 90 NONAME ; void RadioUiEngine::setVolume(int) + ?setFavorite@RadioStation@@QAEX_N@Z @ 91 NONAME ; void RadioStation::setFavorite(bool) + ?d_func@RadioStationModel@@ABEPBVRadioStationModelPrivate@@XZ @ 92 NONAME ; class RadioStationModelPrivate const * RadioStationModel::d_func(void) const + ?emitChangeSignals@RadioStationModel@@AAEXABVRadioStation@@V?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 93 NONAME ; void RadioStationModel::emitChangeSignals(class RadioStation const &, class QFlags) + ?tr@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 94 NONAME ; class QString RadioStationModel::tr(char const *, char const *, int) + ?hasUrl@RadioStation@@QBE_NXZ @ 95 NONAME ; bool RadioStation::hasUrl(void) const + ??1RadioStationModel@@UAE@XZ @ 96 NONAME ; RadioStationModel::~RadioStationModel(void) + ?isMuted@RadioUiEngine@@QBE_NXZ @ 97 NONAME ; bool RadioUiEngine::isMuted(void) const + ?renameStation@RadioStationModel@@QAEXHABVQString@@@Z @ 98 NONAME ; void RadioStationModel::renameStation(int, class QString const &) + ?currentFrequency@RadioUiEngine@@QBEIXZ @ 99 NONAME ; unsigned int RadioUiEngine::currentFrequency(void) const + ?emitItemAdded@RadioHistoryModel@@AAEXXZ @ 100 NONAME ; void RadioHistoryModel::emitItemAdded(void) + ?setUserDefinedName@RadioStation@@QAEXABVQString@@@Z @ 101 NONAME ; void RadioStation::setUserDefinedName(class QString const &) + ?setUrl@RadioStation@@AAEXABVQString@@@Z @ 102 NONAME ; void RadioStation::setUrl(class QString const &) + ?hasDynamicPs@RadioStation@@QBE_NXZ @ 103 NONAME ; bool RadioStation::hasDynamicPs(void) const + ??1RadioStation@@UAE@XZ @ 104 NONAME ; RadioStation::~RadioStation(void) + ?getStaticMetaObject@RadioScannerEngine@@SAABUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const & RadioScannerEngine::getStaticMetaObject(void) + ?callSignString@RadioStation@@AAE?AVQString@@I@Z @ 106 NONAME ; class QString RadioStation::callSignString(unsigned int) + ?isValid@RadioStation@@QBE_NXZ @ 107 NONAME ; bool RadioStation::isValid(void) const + ?data_ptr@RadioStation@@QAEAAV?$QSharedDataPointer@VRadioStationPrivate@@@@XZ @ 108 NONAME ; class QSharedDataPointer & RadioStation::data_ptr(void) + ?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 109 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *, int) + ?reset@RadioHistoryItem@@QAEXXZ @ 110 NONAME ; void RadioHistoryItem::reset(void) + ?trUtf8@RadioStationModel@@SA?AVQString@@PBD0@Z @ 111 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *) + ?setRadioTextPlus@RadioStation@@AAEXHABVQString@@@Z @ 112 NONAME ; void RadioStation::setRadioTextPlus(int, class QString const &) + ?setChangeFlags@RadioStation@@AAEXV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 113 NONAME ; void RadioStation::setChangeFlags(class QFlags) + ??0RadioStationModel@@QAE@AAVRadioUiEnginePrivate@@@Z @ 114 NONAME ; RadioStationModel::RadioStationModel(class RadioUiEnginePrivate &) + ?stationDataChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 115 NONAME ; void RadioStationModel::stationDataChanged(class RadioStation const &) + ?frequency@RadioHistoryItem@@QBEIXZ @ 116 NONAME ; unsigned int RadioHistoryItem::frequency(void) const + ?currentStation@RadioStationModel@@QAEAAVRadioStation@@XZ @ 117 NONAME ; class RadioStation & RadioStationModel::currentStation(void) + ?isDetached@RadioHistoryItem@@QBE_NXZ @ 118 NONAME ; bool RadioHistoryItem::isDetached(void) const + ?genre@RadioStation@@QBEHXZ @ 119 NONAME ; int RadioStation::genre(void) const + ?qt_metacall@RadioScannerEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 120 NONAME ; int RadioScannerEngine::qt_metacall(enum QMetaObject::Call, int, void * *) + ?emitTunedToFrequency@RadioUiEngine@@AAEXIH@Z @ 121 NONAME ; void RadioUiEngine::emitTunedToFrequency(unsigned int, int) + ??0RadioStation@@QAE@XZ @ 122 NONAME ; RadioStation::RadioStation(void) + ?psType@RadioStation@@QBE?AV?$QFlags@W4PsTypeFlag@RadioStation@@@@XZ @ 123 NONAME ; class QFlags RadioStation::psType(void) const + ??1RadioHistoryModel@@UAE@XZ @ 124 NONAME ; RadioHistoryModel::~RadioHistoryModel(void) + ?d_func@RadioUiEngine@@ABEPBVRadioUiEnginePrivate@@XZ @ 125 NONAME ; class RadioUiEnginePrivate const * RadioUiEngine::d_func(void) const + ?findStation@RadioStationModel@@QBE?AVRadioStation@@IW4Criteria@FindCriteria@@@Z @ 126 NONAME ; class RadioStation RadioStationModel::findStation(unsigned int, enum FindCriteria::Criteria) const + ?scannerEngine@RadioUiEngine@@QAEPAVRadioScannerEngine@@XZ @ 127 NONAME ; class RadioScannerEngine * RadioUiEngine::scannerEngine(void) + ?setManualSeekMode@RadioUiEngine@@QAEX_N@Z @ 128 NONAME ; void RadioUiEngine::setManualSeekMode(bool) + ?isSongRecognitionAppAvailable@RadioUiEngine@@QAE_NXZ @ 129 NONAME ; bool RadioUiEngine::isSongRecognitionAppAvailable(void) + ?startScanning@RadioScannerEngine@@QAEXXZ @ 130 NONAME ; void RadioScannerEngine::startScanning(void) + ?emitStationFound@RadioScannerEngine@@AAEXABVRadioStation@@@Z @ 131 NONAME ; void RadioScannerEngine::emitStationFound(class RadioStation const &) + ?isValid@RadioHistoryItem@@QBE_NXZ @ 132 NONAME ; bool RadioHistoryItem::isValid(void) const + ?setPsType@RadioStation@@AAEXV?$QFlags@W4PsTypeFlag@RadioStation@@@@@Z @ 133 NONAME ; void RadioStation::setPsType(class QFlags) + ?setFrequency@RadioUiEngine@@QAEXIH@Z @ 134 NONAME ; void RadioUiEngine::setFrequency(unsigned int, int) + ?data@RadioHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 135 NONAME ; class QVariant RadioHistoryModel::data(class QModelIndex const &, int) const + ??4RadioHistoryItem@@QAEAAV0@ABV0@@Z @ 136 NONAME ; class RadioHistoryItem & RadioHistoryItem::operator=(class RadioHistoryItem const &) + ?url@RadioStation@@QBE?AVQString@@XZ @ 137 NONAME ; class QString RadioStation::url(void) const + ?historyModel@RadioUiEngine@@QAEAAVRadioHistoryModel@@XZ @ 138 NONAME ; class RadioHistoryModel & RadioUiEngine::historyModel(void) + ?emitRdsAvailabilityChanged@RadioUiEngine@@AAEX_N@Z @ 139 NONAME ; void RadioUiEngine::emitRdsAvailabilityChanged(bool) + ?isAntennaAttached@RadioUiEngine@@QBE_NXZ @ 140 NONAME ; bool RadioUiEngine::isAntennaAttached(void) const + ?setStation@RadioHistoryItem@@QAEXABVQString@@@Z @ 141 NONAME ; void RadioHistoryItem::setStation(class QString const &) + ?qt_metacast@RadioStationModel@@UAEPAXPBD@Z @ 142 NONAME ; void * RadioStationModel::qt_metacast(char const *) + ?presetIndex@RadioStation@@QBEHXZ @ 143 NONAME ; int RadioStation::presetIndex(void) const + ?cancel@RadioScannerEngine@@QAEXXZ @ 144 NONAME ; void RadioScannerEngine::cancel(void) + ?staticMetaObject@RadioStationModel@@2UQMetaObject@@B @ 145 NONAME ; struct QMetaObject const RadioStationModel::staticMetaObject + ?addRecognizedSong@RadioUiEngine@@QAEXABVQString@@0ABVRadioStation@@@Z @ 146 NONAME ; void RadioUiEngine::addRecognizedSong(class QString const &, class QString const &, class RadioStation const &) + ?emitMuteChanged@RadioUiEngine@@AAEX_N@Z @ 147 NONAME ; void RadioUiEngine::emitMuteChanged(bool) + ?setDynamicPsText@RadioStation@@AAEXABVQString@@@Z @ 148 NONAME ; void RadioStation::setDynamicPsText(class QString const &) + ?currentSongReset@RadioHistoryModel@@IAEXXZ @ 149 NONAME ; void RadioHistoryModel::currentSongReset(void) + ?removeByPresetIndex@RadioStationModel@@QAEXH@Z @ 150 NONAME ; void RadioStationModel::removeByPresetIndex(int) + ?d_func@RadioScannerEngine@@AAEPAVRadioScannerEnginePrivate@@XZ @ 151 NONAME ; class RadioScannerEnginePrivate * RadioScannerEngine::d_func(void) + ?isRenamed@RadioStation@@QBE_NXZ @ 152 NONAME ; bool RadioStation::isRenamed(void) const + ?stationAt@RadioStationModel@@QBE?AVRadioStation@@H@Z @ 153 NONAME ; class RadioStation RadioStationModel::stationAt(int) const + ?removeStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 154 NONAME ; void RadioStationModel::removeStation(class RadioStation const &) + ?openMusicStore@RadioUiEngine@@QAEXABVRadioHistoryItem@@W4MusicStore@1@@Z @ 155 NONAME ; void RadioUiEngine::openMusicStore(class RadioHistoryItem const &, enum RadioUiEngine::MusicStore) + ?metaObject@RadioUiEngine@@UBEPBUQMetaObject@@XZ @ 156 NONAME ; struct QMetaObject const * RadioUiEngine::metaObject(void) const + ?dynamicPsChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 157 NONAME ; void RadioStationModel::dynamicPsChanged(class RadioStation const &) + ?setType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 158 NONAME ; void RadioStation::setType(class QFlags) + ??0RadioHistoryItem@@QAE@XZ @ 159 NONAME ; RadioHistoryItem::RadioHistoryItem(void) + ?removeByFrequency@RadioStationModel@@QAEXI@Z @ 160 NONAME ; void RadioStationModel::removeByFrequency(unsigned int) + ?isUsingLoudspeaker@RadioUiEngine@@QBE_NXZ @ 161 NONAME ; bool RadioUiEngine::isUsingLoudspeaker(void) const + ?findPresetIndex@RadioStationModel@@QAEHH@Z @ 162 NONAME ; int RadioStationModel::findPresetIndex(int) + ??0RadioHistoryItem@@QAE@ABV0@@Z @ 163 NONAME ; RadioHistoryItem::RadioHistoryItem(class RadioHistoryItem const &) + ?metaObject@RadioStationModel@@UBEPBUQMetaObject@@XZ @ 164 NONAME ; struct QMetaObject const * RadioStationModel::metaObject(void) const + ?getStaticMetaObject@RadioStationModel@@SAABUQMetaObject@@XZ @ 165 NONAME ; struct QMetaObject const & RadioStationModel::getStaticMetaObject(void) + ?isPoweringOff@RadioUiEngine@@QBE_NXZ @ 166 NONAME ; bool RadioUiEngine::isPoweringOff(void) const + ?lastTunedFrequency@RadioUiEngine@@SAII@Z @ 167 NONAME ; unsigned int RadioUiEngine::lastTunedFrequency(unsigned int) + ?tr@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 168 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *) + ?removeAll@RadioHistoryModel@@QAEX_N@Z @ 169 NONAME ; void RadioHistoryModel::removeAll(bool) + ?hasGenre@RadioStation@@QBE_NXZ @ 170 NONAME ; bool RadioStation::hasGenre(void) const + ?audioRouteChanged@RadioUiEngine@@IAEX_N@Z @ 171 NONAME ; void RadioUiEngine::audioRouteChanged(bool) + ?setPowerOn@RadioUiEngine@@QAEXXZ @ 172 NONAME ; void RadioUiEngine::setPowerOn(void) + ?tr@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 173 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *, int) + ?dynamicPsText@RadioStation@@QBE?AVQString@@XZ @ 174 NONAME ; class QString RadioStation::dynamicPsText(void) const + ?isFirstTimeStart@RadioUiEngine@@QAE_NXZ @ 175 NONAME ; bool RadioUiEngine::isFirstTimeStart(void) + ?setMute@RadioUiEngine@@QAEX_N@Z @ 176 NONAME ; void RadioUiEngine::setMute(bool) + ?setGenre@RadioStation@@AAEXH@Z @ 177 NONAME ; void RadioStation::setGenre(int) + ??0RadioScannerEngine@@QAE@AAVRadioUiEnginePrivate@@@Z @ 178 NONAME ; RadioScannerEngine::RadioScannerEngine(class RadioUiEnginePrivate &) + ?emitRadioStatusChanged@RadioUiEngine@@AAEX_N@Z @ 179 NONAME ; void RadioUiEngine::emitRadioStatusChanged(bool) + ??_ERadioUiEngine@@UAE@I@Z @ 180 NONAME ; RadioUiEngine::~RadioUiEngine(unsigned int) + ?init@RadioUiEngine@@QAE_NXZ @ 181 NONAME ; bool RadioUiEngine::init(void) + ?setRadioText@RadioStation@@AAEXABVQString@@@Z @ 182 NONAME ; void RadioStation::setRadioText(class QString const &) + ?changeFlags@RadioStation@@QBE?AV?$QFlags@W4ChangeFlag@RadioStation@@@@XZ @ 183 NONAME ; class QFlags RadioStation::changeFlags(void) const + ?findFrequency@RadioStationModel@@QBE_NIAAVRadioStation@@W4Criteria@FindCriteria@@@Z @ 184 NONAME ; bool RadioStationModel::findFrequency(unsigned int, class RadioStation &, enum FindCriteria::Criteria) const + ?d_func@RadioStationModel@@AAEPAVRadioStationModelPrivate@@XZ @ 185 NONAME ; class RadioStationModelPrivate * RadioStationModel::d_func(void) + ?addRadioTextPlus@RadioHistoryModel@@AAEXHABVQString@@ABVRadioStation@@@Z @ 186 NONAME ; void RadioHistoryModel::addRadioTextPlus(int, class QString const &, class RadioStation const &) + ?qt_metacast@RadioHistoryModel@@UAEPAXPBD@Z @ 187 NONAME ; void * RadioHistoryModel::qt_metacast(char const *) + ?setDetail@RadioStationModel@@QAEXV?$QFlags@W4DetailFlag@RadioStationModel@@@@@Z @ 188 NONAME ; void RadioStationModel::setDetail(class QFlags) + ??1RadioUiEngine@@UAE@XZ @ 189 NONAME ; RadioUiEngine::~RadioUiEngine(void) + ?tr@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 190 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *) + ?time@RadioHistoryItem@@QBE?AVQString@@XZ @ 191 NONAME ; class QString RadioHistoryItem::time(void) const + ?reportChangedData@RadioHistoryModel@@AAEXHH@Z @ 192 NONAME ; void RadioHistoryModel::reportChangedData(int, int) + ?artist@RadioHistoryItem@@QBE?AVQString@@XZ @ 193 NONAME ; class QString RadioHistoryItem::artist(void) const + ?initialize@RadioStationModel@@QAEXPAVRadioPresetStorage@@PAVRadioEngineWrapper@@@Z @ 194 NONAME ; void RadioStationModel::initialize(class RadioPresetStorage *, class RadioEngineWrapper *) + ?isType@RadioStation@@QBE_NV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 195 NONAME ; bool RadioStation::isType(class QFlags) const + ?resetCurrentSong@RadioHistoryModel@@QAEXXZ @ 196 NONAME ; void RadioHistoryModel::resetCurrentSong(void) + ?d_func@RadioHistoryModel@@ABEPBVRadioHistoryModelPrivate@@XZ @ 197 NONAME ; class RadioHistoryModelPrivate const * RadioHistoryModel::d_func(void) const + ?volumeChanged@RadioUiEngine@@IAEXH@Z @ 198 NONAME ; void RadioUiEngine::volumeChanged(int) + ?title@RadioHistoryItem@@QBE?AVQString@@XZ @ 199 NONAME ; class QString RadioHistoryItem::title(void) const + ?stationFound@RadioScannerEngine@@IAEXABVRadioStation@@@Z @ 200 NONAME ; void RadioScannerEngine::stationFound(class RadioStation const &) + ?resetChangeFlags@RadioStation@@QAEXXZ @ 201 NONAME ; void RadioStation::resetChangeFlags(void) + ?powerOffRequested@RadioUiEngine@@IAEXXZ @ 202 NONAME ; void RadioUiEngine::powerOffRequested(void) + ?metaObject@RadioScannerEngine@@UBEPBUQMetaObject@@XZ @ 203 NONAME ; struct QMetaObject const * RadioScannerEngine::metaObject(void) const + ?qt_metacast@RadioScannerEngine@@UAEPAXPBD@Z @ 204 NONAME ; void * RadioScannerEngine::qt_metacast(char const *) + ?callSignChar@RadioStation@@AAEDI@Z @ 205 NONAME ; char RadioStation::callSignChar(unsigned int) + ??_ERadioStation@@UAE@I@Z @ 206 NONAME ; RadioStation::~RadioStation(unsigned int) + ?antennaStatusChanged@RadioUiEngine@@IAEX_N@Z @ 207 NONAME ; void RadioUiEngine::antennaStatusChanged(bool) + ?staticMetaObject@RadioHistoryModel@@2UQMetaObject@@B @ 208 NONAME ; struct QMetaObject const RadioHistoryModel::staticMetaObject + ?setFirstTimeStartPerformed@RadioUiEngine@@QAEX_N@Z @ 209 NONAME ; void RadioUiEngine::setFirstTimeStartPerformed(bool) + ??0RadioStation@@AAE@HI@Z @ 210 NONAME ; RadioStation::RadioStation(int, unsigned int) + ?qt_metacall@RadioStationModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 211 NONAME ; int RadioStationModel::qt_metacall(enum QMetaObject::Call, int, void * *) + ?isDetached@RadioStation@@QBE_NXZ @ 212 NONAME ; bool RadioStation::isDetached(void) const + ??0RadioHistoryItem@@QAE@ABVQString@@0@Z @ 213 NONAME ; RadioHistoryItem::RadioHistoryItem(class QString const &, class QString const &) + ?name@RadioStation@@QBE?AVQString@@XZ @ 214 NONAME ; class QString RadioStation::name(void) const + ?hasDataChanged@RadioStation@@QBE_NV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 215 NONAME ; bool RadioStation::hasDataChanged(class QFlags) const + ?removeAll@RadioStationModel@@QAEXW4RemoveMode@1@@Z @ 216 NONAME ; void RadioStationModel::removeAll(enum RadioStationModel::RemoveMode) + ?data@RadioStationModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 217 NONAME ; class QVariant RadioStationModel::data(class QModelIndex const &, int) const + ?itemAdded@RadioHistoryModel@@IAEXXZ @ 218 NONAME ; void RadioHistoryModel::itemAdded(void) + ?getStaticMetaObject@RadioUiEngine@@SAABUQMetaObject@@XZ @ 219 NONAME ; struct QMetaObject const & RadioUiEngine::getStaticMetaObject(void) + ?setShowDetails@RadioHistoryModel@@QAEX_N@Z @ 220 NONAME ; void RadioHistoryModel::setShowDetails(bool) + ?launchSongRecognition@RadioUiEngine@@QAEXXZ @ 221 NONAME ; void RadioUiEngine::launchSongRecognition(void) + ?rowCount@RadioStationModel@@UBEHABVQModelIndex@@@Z @ 222 NONAME ; int RadioStationModel::rowCount(class QModelIndex const &) const + ?iterateCallSign@RadioStation@@AAE?AVQString@@HH@Z @ 223 NONAME ; class QString RadioStation::iterateCallSign(int, int) + ?toggleMute@RadioUiEngine@@QAEXXZ @ 224 NONAME ; void RadioUiEngine::toggleMute(void) + ?piCode@RadioStation@@QBEHXZ @ 225 NONAME ; int RadioStation::piCode(void) const + ?genreToString@RadioUiEngine@@QAE?AVQString@@HW4Target@GenreTarget@@@Z @ 226 NONAME ; class QString RadioUiEngine::genreToString(int, enum GenreTarget::Target) + ??0RadioUiEngine@@QAE@PAVQObject@@@Z @ 227 NONAME ; RadioUiEngine::RadioUiEngine(class QObject *) + ?hasRadiotext@RadioStation@@QBE_NXZ @ 228 NONAME ; bool RadioStation::hasRadiotext(void) const + ?setCurrentTime@RadioHistoryItem@@QAEXXZ @ 229 NONAME ; void RadioHistoryItem::setCurrentTime(void) + ?d_func@RadioUiEngine@@AAEPAVRadioUiEnginePrivate@@XZ @ 230 NONAME ; class RadioUiEnginePrivate * RadioUiEngine::d_func(void) + ?station@RadioHistoryItem@@QBE?AVQString@@XZ @ 231 NONAME ; class QString RadioHistoryItem::station(void) const + ??_ERadioHistoryModel@@UAE@I@Z @ 232 NONAME ; RadioHistoryModel::~RadioHistoryModel(unsigned int) + ?minFrequency@RadioUiEngine@@QBEIXZ @ 233 NONAME ; unsigned int RadioUiEngine::minFrequency(void) const + ?isTagged@RadioHistoryItem@@QBE_NXZ @ 234 NONAME ; bool RadioHistoryItem::isTagged(void) const + ?addScannedFrequency@RadioScannerEngine@@QAEXI@Z @ 235 NONAME ; void RadioScannerEngine::addScannedFrequency(unsigned int) + ?setShowTagged@RadioHistoryModel@@QAEX_N@Z @ 236 NONAME ; void RadioHistoryModel::setShowTagged(bool) + ?setPresetIndex@RadioStation@@AAEXH@Z @ 237 NONAME ; void RadioStation::setPresetIndex(int) + ?setName@RadioStation@@AAEXABVQString@@@Z @ 238 NONAME ; void RadioStation::setName(class QString const &) + ?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 239 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *) + ?frequencyStepSize@RadioUiEngine@@QBEIXZ @ 240 NONAME ; unsigned int RadioUiEngine::frequencyStepSize(void) const + ??0RadioHistoryModel@@AAE@AAVRadioUiEngine@@@Z @ 241 NONAME ; RadioHistoryModel::RadioHistoryModel(class RadioUiEngine &) + ?trUtf8@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 242 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *, int) + ?radioTextReceived@RadioStationModel@@IAEXABVRadioStation@@@Z @ 243 NONAME ; void RadioStationModel::radioTextReceived(class RadioStation const &) + ?isFavorite@RadioStation@@QBE_NXZ @ 244 NONAME ; bool RadioStation::isFavorite(void) const + ?metaObject@RadioHistoryModel@@UBEPBUQMetaObject@@XZ @ 245 NONAME ; struct QMetaObject const * RadioHistoryModel::metaObject(void) const + ?seekingStarted@RadioUiEngine@@IAEXH@Z @ 246 NONAME ; void RadioUiEngine::seekingStarted(int) + ?emitSeekingStarted@RadioUiEngine@@AAEXW4Direction@Seek@@@Z @ 247 NONAME ; void RadioUiEngine::emitSeekingStarted(enum Seek::Direction) + ?isRecognizedByRds@RadioHistoryItem@@QBE_NXZ @ 248 NONAME ; bool RadioHistoryItem::isRecognizedByRds(void) const + ?setFavorites@RadioStationModel@@QAEXABV?$QList@VQModelIndex@@@@@Z @ 249 NONAME ; void RadioStationModel::setFavorites(class QList const &) + ?setArtist@RadioHistoryItem@@QAEXABVQString@@@Z @ 250 NONAME ; void RadioHistoryItem::setArtist(class QString const &) + ??_ERadioStationModel@@UAE@I@Z @ 251 NONAME ; RadioStationModel::~RadioStationModel(unsigned int) + ?setTitle@RadioHistoryItem@@QAEXABVQString@@@Z @ 252 NONAME ; void RadioHistoryItem::setTitle(class QString const &) + ?lastVolume@RadioUiEngine@@SAHXZ @ 253 NONAME ; int RadioUiEngine::lastVolume(void) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/fmradiowidgetsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/bwins/fmradiowidgetsu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,165 @@ +EXPORTS + ?trUtf8@RadioWindow@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString RadioWindow::trUtf8(char const *, char const *, int) + ?nextIndex@RadioStationCarousel@@AAEHH@Z @ 2 NONAME ; int RadioStationCarousel::nextIndex(int) + ?scrollToIndex@RadioStationCarousel@@AAEXHW4Direction@Scroll@@V?$QFlags@W4ScrollFlag@RadioStationCarousel@@@@@Z @ 3 NONAME ; void RadioStationCarousel::scrollToIndex(int, enum Scroll::Direction, class QFlags) + ?drawOffScreen@RadioStationCarousel@@QAEXAAVQPainter@@@Z @ 4 NONAME ; void RadioStationCarousel::drawOffScreen(class QPainter &) + ?updateItem@RadioFrequencyStrip@@AAEXPAVRadioFrequencyItem@@II@Z @ 5 NONAME ; void RadioFrequencyStrip::updateItem(class RadioFrequencyItem *, unsigned int, unsigned int) + ?qt_metacast@RadioFadingLabel@@UAEPAXPBD@Z @ 6 NONAME ; void * RadioFadingLabel::qt_metacast(char const *) + ?findStation@RadioStationCarousel@@EAE?AVRadioStation@@I@Z @ 7 NONAME ; class RadioStation RadioStationCarousel::findStation(unsigned int) + ?animateNewStation@RadioStationCarousel@@QAEXABVRadioStation@@@Z @ 8 NONAME ; void RadioStationCarousel::animateNewStation(class RadioStation const &) + ?nonFavoriteIcon@RadioStationCarousel@@UBE?AVHbIcon@@XZ @ 9 NONAME ; class HbIcon RadioStationCarousel::nonFavoriteIcon(void) const + ?gestureEvent@RadioStationCarousel@@EAEXPAVQGestureEvent@@@Z @ 10 NONAME ; void RadioStationCarousel::gestureEvent(class QGestureEvent *) + ?setFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 11 NONAME ; void RadioStationCarousel::setFavoriteIcon(class HbIcon const &) + ?update@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 12 NONAME ; void RadioStationCarousel::update(class RadioStation const &) + ?addFrequencyPos@RadioFrequencyStrip@@AAEXHIPAVRadioFrequencyItem@@@Z @ 13 NONAME ; void RadioFrequencyStrip::addFrequencyPos(int, unsigned int, class RadioFrequencyItem *) + ?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *) + ?setScanningMode@RadioFrequencyStrip@@QAEX_N@Z @ 15 NONAME ; void RadioFrequencyStrip::setScanningMode(bool) + ?handleUrlClicked@RadioStationCarousel@@EAEXABVRadioStation@@@Z @ 16 NONAME ; void RadioStationCarousel::handleUrlClicked(class RadioStation const &) + ?createItemPrimitive@RadioFrequencyStrip@@EAEPAVQGraphicsItem@@PAV2@@Z @ 17 NONAME ; class QGraphicsItem * RadioFrequencyStrip::createItemPrimitive(class QGraphicsItem *) + ?skipRequested@RadioStationCarousel@@IAEXH@Z @ 18 NONAME ; void RadioStationCarousel::skipRequested(int) + ?setTextWithoutFading@RadioFadingLabel@@QAEXABVQString@@@Z @ 19 NONAME ; void RadioFadingLabel::setTextWithoutFading(class QString const &) + ?updateAntennaStatus@RadioWindow@@AAEX_N@Z @ 20 NONAME ; void RadioWindow::updateAntennaStatus(bool) + ?handleIconClicked@RadioStationCarousel@@EAEXABVRadioStation@@@Z @ 21 NONAME ; void RadioStationCarousel::handleIconClicked(class RadioStation const &) + ?resizeEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneResizeEvent@@@Z @ 22 NONAME ; void RadioFrequencyStrip::resizeEvent(class QGraphicsSceneResizeEvent *) + ?init@RadioFrequencyStrip@@QAEXPAVRadioUiEngine@@AAVRadioUiLoader@@@Z @ 23 NONAME ; void RadioFrequencyStrip::init(class RadioUiEngine *, class RadioUiLoader &) + ?initButtons@RadioFrequencyStrip@@AAEXXZ @ 24 NONAME ; void RadioFrequencyStrip::initButtons(void) + ?qt_metacall@RadioStationCarousel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 25 NONAME ; int RadioStationCarousel::qt_metacall(enum QMetaObject::Call, int, void * *) + ?isInitialized@RadioStationCarousel@@ABE_NXZ @ 26 NONAME ; bool RadioStationCarousel::isInitialized(void) const + ?init@RadioStationCarousel@@QAEXAAVRadioUiLoader@@PAVRadioUiEngine@@@Z @ 27 NONAME ; void RadioStationCarousel::init(class RadioUiLoader &, class RadioUiEngine *) + ?manualSeekChanged@RadioFrequencyStrip@@IAEX_N@Z @ 28 NONAME ; void RadioFrequencyStrip::manualSeekChanged(bool) + ?scrollPosChanged@RadioStationCarousel@@AAEXABVQPointF@@@Z @ 29 NONAME ; void RadioStationCarousel::scrollPosChanged(class QPointF const &) + ?frequencyChanged@RadioFrequencyStrip@@IAEXIHH@Z @ 30 NONAME ; void RadioFrequencyStrip::frequencyChanged(unsigned int, int, int) + ?setAutoScrollTime@RadioStationCarousel@@QAEXH@Z @ 31 NONAME ; void RadioStationCarousel::setAutoScrollTime(int) + ?prevIndex@RadioStationCarousel@@AAEHH@Z @ 32 NONAME ; int RadioStationCarousel::prevIndex(int) + ?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 33 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *) + ?tr@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 34 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *) + ?skip@RadioStationCarousel@@AAEXW4Mode@StationSkip@@@Z @ 35 NONAME ; void RadioStationCarousel::skip(enum StationSkip::Mode) + ?selectorPos@RadioFrequencyStrip@@ABEHXZ @ 36 NONAME ; int RadioFrequencyStrip::selectorPos(void) const + ??1RadioWindow@@UAE@XZ @ 37 NONAME ; RadioWindow::~RadioWindow(void) + ?skipRequested@RadioFrequencyStrip@@IAEXH@Z @ 38 NONAME ; void RadioFrequencyStrip::skipRequested(int) + ?setText@RadioFadingLabel@@QAEXABVQString@@@Z @ 39 NONAME ; void RadioFadingLabel::setText(class QString const &) + ?showEvent@RadioStationCarousel@@EAEXPAVQShowEvent@@@Z @ 40 NONAME ; void RadioStationCarousel::showEvent(class QShowEvent *) + ?mousePressEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 41 NONAME ; void RadioStationCarousel::mousePressEvent(class QGraphicsSceneMouseEvent *) + ?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 42 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *) + ?handleScrollingEnd@RadioFrequencyStrip@@AAEXXZ @ 43 NONAME ; void RadioFrequencyStrip::handleScrollingEnd(void) + ?activateView@RadioWindow@@AAEXPAVRadioViewBase@@ABVQString@@V?$QFlags@W4ViewSwitchFlag@Hb@@@@@Z @ 44 NONAME ; void RadioWindow::activateView(class RadioViewBase *, class QString const &, class QFlags) + ?calculateDifference@RadioStationCarousel@@AAEHHAAW4Direction@Scroll@@@Z @ 45 NONAME ; int RadioStationCarousel::calculateDifference(int, enum Scroll::Direction &) + ?orientationSection@RadioWindow@@QAE?AVQString@@XZ @ 46 NONAME ; class QString RadioWindow::orientationSection(void) + ?updateStation@RadioFrequencyStrip@@AAEXABVQModelIndex@@HH@Z @ 47 NONAME ; void RadioFrequencyStrip::updateStation(class QModelIndex const &, int, int) + ??1RadioFrequencyStrip@@UAE@XZ @ 48 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(void) + ?setItemHeight@RadioFrequencyStrip@@QAEXH@Z @ 49 NONAME ; void RadioFrequencyStrip::setItemHeight(int) + ?queryOfflineUsage@RadioWindow@@AAEXW4Profile@QSystemDeviceInfo@QtMobility@@@Z @ 50 NONAME ; void RadioWindow::queryOfflineUsage(enum QtMobility::QSystemDeviceInfo::Profile) + ?cancelAnimation@RadioStationCarousel@@QAEXXZ @ 51 NONAME ; void RadioStationCarousel::cancelAnimation(void) + ?changeEvent@RadioFrequencyStrip@@EAEXPAVQEvent@@@Z @ 52 NONAME ; void RadioFrequencyStrip::changeEvent(class QEvent *) + ?staticMetaObject@RadioStationCarousel@@2UQMetaObject@@B @ 53 NONAME ; struct QMetaObject const RadioStationCarousel::staticMetaObject + ?qt_metacall@RadioFadingLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 54 NONAME ; int RadioFadingLabel::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0RadioFrequencyStrip@@QAE@XZ @ 55 NONAME ; RadioFrequencyStrip::RadioFrequencyStrip(void) + ?timerEvent@RadioFrequencyStrip@@EAEXPAVQTimerEvent@@@Z @ 56 NONAME ; void RadioFrequencyStrip::timerEvent(class QTimerEvent *) + ?setCenterIndex@RadioStationCarousel@@AAEXHV?$QFlags@W4ScrollFlag@RadioStationCarousel@@@@@Z @ 57 NONAME ; void RadioStationCarousel::setCenterIndex(int, class QFlags) + ?resizeEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneResizeEvent@@@Z @ 58 NONAME ; void RadioStationCarousel::resizeEvent(class QGraphicsSceneResizeEvent *) + ?scrollPosChanged@RadioFrequencyStrip@@EAEXXZ @ 59 NONAME ; void RadioFrequencyStrip::scrollPosChanged(void) + ?updateStations@RadioStationCarousel@@AAEXXZ @ 60 NONAME ; void RadioStationCarousel::updateStations(void) + ??_ERadioWindow@@UAE@I@Z @ 61 NONAME ; RadioWindow::~RadioWindow(unsigned int) + ?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 62 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *) + ?initSelector@RadioFrequencyStrip@@AAEXXZ @ 63 NONAME ; void RadioFrequencyStrip::initSelector(void) + ?qt_metacall@RadioWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 64 NONAME ; int RadioWindow::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@RadioFrequencyStrip@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 65 NONAME ; int RadioFrequencyStrip::qt_metacall(enum QMetaObject::Call, int, void * *) + ?metaObject@RadioFrequencyStrip@@UBEPBUQMetaObject@@XZ @ 66 NONAME ; struct QMetaObject const * RadioFrequencyStrip::metaObject(void) const + ?startEffect@RadioFadingLabel@@AAEXABVQString@@PBD@Z @ 67 NONAME ; void RadioFadingLabel::startEffect(class QString const &, char const *) + ?setFrequency@RadioFrequencyStrip@@QAEXIHW4Direction@Scroll@@@Z @ 68 NONAME ; void RadioFrequencyStrip::setFrequency(unsigned int, int, enum Scroll::Direction) + ?activateHistoryView@RadioWindow@@QAEXXZ @ 69 NONAME ; void RadioWindow::activateHistoryView(void) + ??_ERadioStationCarousel@@UAE@I@Z @ 70 NONAME ; RadioStationCarousel::~RadioStationCarousel(unsigned int) + ?initPositions@RadioFrequencyStrip@@AAEXXZ @ 71 NONAME ; void RadioFrequencyStrip::initPositions(void) + ?tr@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 72 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *) + ?getStaticMetaObject@RadioFadingLabel@@SAABUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const & RadioFadingLabel::getStaticMetaObject(void) + ?itemHeight@RadioFrequencyStrip@@QBEHXZ @ 74 NONAME ; int RadioFrequencyStrip::itemHeight(void) const + ?setManualSeekMode@RadioStationCarousel@@QAEX_N@Z @ 75 NONAME ; void RadioStationCarousel::setManualSeekMode(bool) + ?qt_metacast@RadioWindow@@UAEPAXPBD@Z @ 76 NONAME ; void * RadioWindow::qt_metacast(char const *) + ?trimHtml@RadioFadingLabel@@AAE?AVQString@@ABV2@@Z @ 77 NONAME ; class QString RadioFadingLabel::trimHtml(class QString const &) + ?tr@RadioWindow@@SA?AVQString@@PBD0@Z @ 78 NONAME ; class QString RadioWindow::tr(char const *, char const *) + ?favoriteIcon@RadioStationCarousel@@UBE?AVHbIcon@@XZ @ 79 NONAME ; class HbIcon RadioStationCarousel::favoriteIcon(void) const + ?mouseReleaseEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 80 NONAME ; void RadioFrequencyStrip::mouseReleaseEvent(class QGraphicsSceneMouseEvent *) + ?updateItemPrimitive@RadioFrequencyStrip@@EAEXPAVQGraphicsItem@@H@Z @ 81 NONAME ; void RadioFrequencyStrip::updateItemPrimitive(class QGraphicsItem *, int) + ?getStaticMetaObject@RadioFrequencyStrip@@SAABUQMetaObject@@XZ @ 82 NONAME ; struct QMetaObject const & RadioFrequencyStrip::getStaticMetaObject(void) + ?showErrorMessage@RadioWindow@@QAEXABVQString@@@Z @ 83 NONAME ; void RadioWindow::showErrorMessage(class QString const &) + ??0RadioFadingLabel@@QAE@PAVQGraphicsItem@@@Z @ 84 NONAME ; RadioFadingLabel::RadioFadingLabel(class QGraphicsItem *) + ?updateStationsInRange@RadioFrequencyStrip@@AAEXHH_N@Z @ 85 NONAME ; void RadioFrequencyStrip::updateStationsInRange(int, int, bool) + ?initModel@RadioFrequencyStrip@@AAEXXZ @ 86 NONAME ; void RadioFrequencyStrip::initModel(void) + ?frequency@RadioFrequencyStrip@@QBEIXZ @ 87 NONAME ; unsigned int RadioFrequencyStrip::frequency(void) const + ?isInManualSeek@RadioStationCarousel@@EBE_NXZ @ 88 NONAME ; bool RadioStationCarousel::isInManualSeek(void) const + ??1RadioStationCarousel@@UAE@XZ @ 89 NONAME ; RadioStationCarousel::~RadioStationCarousel(void) + ??_ERadioFrequencyStrip@@UAE@I@Z @ 90 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(unsigned int) + ?setFadingEnabled@RadioFadingLabel@@QAEX_N@Z @ 91 NONAME ; void RadioFadingLabel::setFadingEnabled(bool) + ?localizeGenre@RadioStationCarousel@@EAE?AVQString@@H@Z @ 92 NONAME ; class QString RadioStationCarousel::localizeGenre(int) + ?mousePressEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 93 NONAME ; void RadioFrequencyStrip::mousePressEvent(class QGraphicsSceneMouseEvent *) + ?showVolumeLevel@RadioWindow@@AAEXH@Z @ 94 NONAME ; void RadioWindow::showVolumeLevel(int) + ?getStaticMetaObject@RadioWindow@@SAABUQMetaObject@@XZ @ 95 NONAME ; struct QMetaObject const & RadioWindow::getStaticMetaObject(void) + ?trUtf8@RadioWindow@@SA?AVQString@@PBD0@Z @ 96 NONAME ; class QString RadioWindow::trUtf8(char const *, char const *) + ?toggleManualSeek@RadioFrequencyStrip@@AAEXXZ @ 97 NONAME ; void RadioFrequencyStrip::toggleManualSeek(void) + ?timerFired@RadioStationCarousel@@AAEXXZ @ 98 NONAME ; void RadioStationCarousel::timerFired(void) + ?handleRadiotextClicked@RadioStationCarousel@@EAEXABVRadioStation@@@Z @ 99 NONAME ; void RadioStationCarousel::handleRadiotextClicked(class RadioStation const &) + ?drawPixmap@RadioFrequencyStrip@@AAE?AVQPixmap@@IV?$QList@VRadioStation@@@@PAVRadioFrequencyItem@@@Z @ 100 NONAME ; class QPixmap RadioFrequencyStrip::drawPixmap(unsigned int, class QList, class RadioFrequencyItem *) + ?initEmptyItems@RadioFrequencyStrip@@AAEXXZ @ 101 NONAME ; void RadioFrequencyStrip::initEmptyItems(void) + ?tr@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 102 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *, int) + ??0RadioWindow@@QAE@PAVQWidget@@@Z @ 103 NONAME ; RadioWindow::RadioWindow(class QWidget *) + ?updateRadioText@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 104 NONAME ; void RadioStationCarousel::updateRadioText(class RadioStation const &) + ?updateAntennaStatus@RadioStationCarousel@@QAEX_N@Z @ 105 NONAME ; void RadioStationCarousel::updateAntennaStatus(bool) + ?updateFavorite@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 106 NONAME ; void RadioFrequencyStrip::updateFavorite(class RadioStation const &) + ?setFrequency@RadioStationCarousel@@QAEXIHW4Direction@Scroll@@@Z @ 107 NONAME ; void RadioStationCarousel::setFrequency(unsigned int, int, enum Scroll::Direction) + ?setInfoText@RadioStationCarousel@@QAEXW4Type@CarouselInfoText@@@Z @ 108 NONAME ; void RadioStationCarousel::setInfoText(enum CarouselInfoText::Type) + ?staticMetaObject@RadioFadingLabel@@2UQMetaObject@@B @ 109 NONAME ; struct QMetaObject const RadioFadingLabel::staticMetaObject + ?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 110 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *, int) + ?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 111 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *, int) + ?getStaticMetaObject@RadioStationCarousel@@SAABUQMetaObject@@XZ @ 112 NONAME ; struct QMetaObject const & RadioStationCarousel::getStaticMetaObject(void) + ?metaObject@RadioFadingLabel@@UBEPBUQMetaObject@@XZ @ 113 NONAME ; struct QMetaObject const * RadioFadingLabel::metaObject(void) const + ?metaObject@RadioWindow@@UBEPBUQMetaObject@@XZ @ 114 NONAME ; struct QMetaObject const * RadioWindow::metaObject(void) const + ?staticMetaObject@RadioFrequencyStrip@@2UQMetaObject@@B @ 115 NONAME ; struct QMetaObject const RadioFrequencyStrip::staticMetaObject + ?autoScrollTime@RadioStationCarousel@@QBEHXZ @ 116 NONAME ; int RadioStationCarousel::autoScrollTime(void) const + ?handleRightButton@RadioFrequencyStrip@@AAEXXZ @ 117 NONAME ; void RadioFrequencyStrip::handleRightButton(void) + ?qt_metacast@RadioStationCarousel@@UAEPAXPBD@Z @ 118 NONAME ; void * RadioStationCarousel::qt_metacast(char const *) + ?tr@RadioWindow@@SA?AVQString@@PBD0H@Z @ 119 NONAME ; class QString RadioWindow::tr(char const *, char const *, int) + ?addScannedStation@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 120 NONAME ; void RadioFrequencyStrip::addScannedStation(class RadioStation const &) + ?handleLongRightButton@RadioFrequencyStrip@@AAEXXZ @ 121 NONAME ; void RadioFrequencyStrip::handleLongRightButton(void) + ?seekRequested@RadioFrequencyStrip@@IAEXH@Z @ 122 NONAME ; void RadioFrequencyStrip::seekRequested(int) + ?isInManualSeekMode@RadioFrequencyStrip@@QBE_NXZ @ 123 NONAME ; bool RadioFrequencyStrip::isInManualSeekMode(void) const + ?scrollToFrequency@RadioFrequencyStrip@@AAEXIW4Direction@Scroll@@HW4Reason@TuneReason@@@Z @ 124 NONAME ; void RadioFrequencyStrip::scrollToFrequency(unsigned int, enum Scroll::Direction, int, enum TuneReason::Reason) + ??0RadioStationCarousel@@QAE@PAVQGraphicsItem@@@Z @ 125 NONAME ; RadioStationCarousel::RadioStationCarousel(class QGraphicsItem *) + ?adjustAfterScroll@RadioStationCarousel@@AAEXXZ @ 126 NONAME ; void RadioStationCarousel::adjustAfterScroll(void) + ?metaObject@RadioStationCarousel@@UBEPBUQMetaObject@@XZ @ 127 NONAME ; struct QMetaObject const * RadioStationCarousel::metaObject(void) const + ?effectFinished@RadioFadingLabel@@AAEXUEffectStatus@HbEffect@@@Z @ 128 NONAME ; void RadioFadingLabel::effectFinished(struct HbEffect::EffectStatus) + ?updateOrientation@RadioWindow@@AAEXW4Orientation@Qt@@@Z @ 129 NONAME ; void RadioWindow::updateOrientation(enum Qt::Orientation) + ?init@RadioWindow@@QAEXPAVQSystemDeviceInfo@QtMobility@@@Z @ 130 NONAME ; void RadioWindow::init(class QtMobility::QSystemDeviceInfo *) + ?showButtons@RadioFrequencyStrip@@AAEXXZ @ 131 NONAME ; void RadioFrequencyStrip::showButtons(void) + ?uiEngine@RadioStationCarousel@@QAEPAVRadioUiEngine@@XZ @ 132 NONAME ; class RadioUiEngine * RadioStationCarousel::uiEngine(void) + ?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 133 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *, int) + ?activateMainView@RadioWindow@@QAEXXZ @ 134 NONAME ; void RadioWindow::activateMainView(void) + ?setScanningMode@RadioStationCarousel@@QAEX_N@Z @ 135 NONAME ; void RadioStationCarousel::setScanningMode(bool) + ??1RadioFadingLabel@@UAE@XZ @ 136 NONAME ; RadioFadingLabel::~RadioFadingLabel(void) + ?setNonFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 137 NONAME ; void RadioStationCarousel::setNonFavoriteIcon(class HbIcon const &) + ?isInScanningMode@RadioStationCarousel@@QBE_NXZ @ 138 NONAME ; bool RadioStationCarousel::isInScanningMode(void) const + ?isAntennaAttached@RadioStationCarousel@@QBE_NXZ @ 139 NONAME ; bool RadioStationCarousel::isAntennaAttached(void) const + ?activateStationsView@RadioWindow@@QAEXXZ @ 140 NONAME ; void RadioWindow::activateStationsView(void) + ?removeStation@RadioFrequencyStrip@@AAEXABVQModelIndex@@HH@Z @ 141 NONAME ; void RadioFrequencyStrip::removeStation(class QModelIndex const &, int, int) + ?tr@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 142 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *, int) + ?trimIndex@RadioStationCarousel@@AAEHH@Z @ 143 NONAME ; int RadioStationCarousel::trimIndex(int) + ?frequencyChanged@RadioStationCarousel@@IAEXIHH@Z @ 144 NONAME ; void RadioStationCarousel::frequencyChanged(unsigned int, int, int) + ?setAlternateSkippingMode@RadioStationCarousel@@QAEX_N@Z @ 145 NONAME ; void RadioStationCarousel::setAlternateSkippingMode(bool) + ?initView@RadioWindow@@AAEXXZ @ 146 NONAME ; void RadioWindow::initView(void) + ?gestureEvent@RadioFrequencyStrip@@EAEXPAVQGestureEvent@@@Z @ 147 NONAME ; void RadioFrequencyStrip::gestureEvent(class QGestureEvent *) + ?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 148 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *, int) + ?handleLongLeftButton@RadioFrequencyStrip@@AAEXXZ @ 149 NONAME ; void RadioFrequencyStrip::handleLongLeftButton(void) + ?hideButtons@RadioFrequencyStrip@@AAEXXZ @ 150 NONAME ; void RadioFrequencyStrip::hideButtons(void) + ?emitFrequencyChanged@RadioFrequencyStrip@@AAEXI@Z @ 151 NONAME ; void RadioFrequencyStrip::emitFrequencyChanged(unsigned int) + ?handleLeftButton@RadioFrequencyStrip@@AAEXXZ @ 152 NONAME ; void RadioFrequencyStrip::handleLeftButton(void) + ??_ERadioFadingLabel@@UAE@I@Z @ 153 NONAME ; RadioFadingLabel::~RadioFadingLabel(unsigned int) + ?cancelManualSeek@RadioFrequencyStrip@@QAEXXZ @ 154 NONAME ; void RadioFrequencyStrip::cancelManualSeek(void) + ?isScrollingAllowed@RadioStationCarousel@@ABE_NXZ @ 155 NONAME ; bool RadioStationCarousel::isScrollingAllowed(void) const + ?qt_metacast@RadioFrequencyStrip@@UAEPAXPBD@Z @ 156 NONAME ; void * RadioFrequencyStrip::qt_metacast(char const *) + ?staticMetaObject@RadioWindow@@2UQMetaObject@@B @ 157 NONAME ; struct QMetaObject const RadioWindow::staticMetaObject + ?cleanRdsData@RadioStationCarousel@@QAEXXZ @ 158 NONAME ; void RadioStationCarousel::cleanRdsData(void) + ?clearInfoText@RadioStationCarousel@@QAEXXZ @ 159 NONAME ; void RadioStationCarousel::clearInfoText(void) + ?updateAllItems@RadioFrequencyStrip@@AAEXXZ @ 160 NONAME ; void RadioFrequencyStrip::updateAllItems(void) + ?adjustPos@RadioStationCarousel@@AAEXH@Z @ 161 NONAME ; void RadioStationCarousel::adjustPos(int) + ?scanAnimationFinished@RadioStationCarousel@@IAEXXZ @ 162 NONAME ; void RadioStationCarousel::scanAnimationFinished(void) + ?makeTab@RadioFrequencyStrip@@AAE?AVQLineF@@MH@Z @ 163 NONAME ; class QLineF RadioFrequencyStrip::makeTab(float, int) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/radioenginewrapperu.def --- a/radioapp/bwins/radioenginewrapperu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -EXPORTS - ?skipPrevious@RadioEngineWrapperObserver@@UAEXXZ @ 1 NONAME ; void RadioEngineWrapperObserver::skipPrevious(void) - ?volumeChanged@RadioEngineWrapperObserver@@UAEXH@Z @ 2 NONAME ; void RadioEngineWrapperObserver::volumeChanged(int) - ?settings@RadioEngineWrapper@@QAEAAVRadioSettingsIf@@XZ @ 3 NONAME ; class RadioSettingsIf & RadioEngineWrapper::settings(void) - ?region@RadioEngineWrapper@@QBE?AW4Region@RadioRegion@@XZ @ 4 NONAME ; enum RadioRegion::Region RadioEngineWrapper::region(void) const - ?tuneFrequency@RadioEngineWrapper@@QAEXIH@Z @ 5 NONAME ; void RadioEngineWrapper::tuneFrequency(unsigned int, int) - ?initCombinedLogger@RadioLogger@@SAXXZ @ 6 NONAME ; void RadioLogger::initCombinedLogger(void) - ?removeObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 7 NONAME ; void RadioEngineWrapper::removeObserver(class RadioEngineWrapperObserver *) - ?startSeeking@RadioEngineWrapper@@QAEXW4Direction@Seeking@@H@Z @ 8 NONAME ; void RadioEngineWrapper::startSeeking(enum Seeking::Direction, int) - ?isRadioOn@RadioEngineWrapper@@QBE_NXZ @ 9 NONAME ; bool RadioEngineWrapper::isRadioOn(void) const - ?addObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 10 NONAME ; void RadioEngineWrapper::addObserver(class RadioEngineWrapperObserver *) - ?isAntennaAttached@RadioEngineWrapper@@QBE_NXZ @ 11 NONAME ; bool RadioEngineWrapper::isAntennaAttached(void) const - ?isEngineConstructed@RadioEngineWrapper@@QAE_NXZ @ 12 NONAME ; bool RadioEngineWrapper::isEngineConstructed(void) - ?toggleAudioRoute@RadioEngineWrapper@@QAEXXZ @ 13 NONAME ; void RadioEngineWrapper::toggleAudioRoute(void) - ?setVolume@RadioEngineWrapper@@QAEXH@Z @ 14 NONAME ; void RadioEngineWrapper::setVolume(int) - ??0RadioEngineWrapper@@QAE@AAVRadioStationHandlerIf@@@Z @ 15 NONAME ; RadioEngineWrapper::RadioEngineWrapper(class RadioStationHandlerIf &) - ?cancelSeeking@RadioEngineWrapper@@QAEXXZ @ 16 NONAME ; void RadioEngineWrapper::cancelSeeking(void) - ?d_func@RadioEngineWrapper@@AAEPAVRadioEngineWrapperPrivate@@XZ @ 17 NONAME ; class RadioEngineWrapperPrivate * RadioEngineWrapper::d_func(void) - ?d_func@RadioEngineWrapper@@ABEPBVRadioEngineWrapperPrivate@@XZ @ 18 NONAME ; class RadioEngineWrapperPrivate const * RadioEngineWrapper::d_func(void) const - ?setMute@RadioEngineWrapper@@QAEX_N@Z @ 19 NONAME ; void RadioEngineWrapper::setMute(bool) - ?releaseCombinedLogger@RadioLogger@@SAXXZ @ 20 NONAME ; void RadioLogger::releaseCombinedLogger(void) - ??1RadioEngineWrapper@@QAE@XZ @ 21 NONAME ; RadioEngineWrapper::~RadioEngineWrapper(void) - ?radioStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 22 NONAME ; void RadioEngineWrapperObserver::radioStatusChanged(bool) - ?frequencyStepSize@RadioEngineWrapper@@QBEIXZ @ 23 NONAME ; unsigned int RadioEngineWrapper::frequencyStepSize(void) const - ??0MethodLogger@@QAE@PBD0@Z @ 24 NONAME ; MethodLogger::MethodLogger(char const *, char const *) - ?logMsg@RadioLogger@@SAXPBDW4Mode@1@@Z @ 25 NONAME ; void RadioLogger::logMsg(char const *, enum RadioLogger::Mode) - ?audioRouteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 26 NONAME ; void RadioEngineWrapperObserver::audioRouteChanged(bool) - ?isMuted@RadioEngineWrapper@@QBE_NXZ @ 27 NONAME ; bool RadioEngineWrapper::isMuted(void) const - ?isUsingLoudspeaker@RadioEngineWrapper@@QBE_NXZ @ 28 NONAME ; bool RadioEngineWrapper::isUsingLoudspeaker(void) const - ?currentFrequency@RadioEngineWrapper@@QBEIXZ @ 29 NONAME ; unsigned int RadioEngineWrapper::currentFrequency(void) const - ?skipNext@RadioEngineWrapperObserver@@UAEXXZ @ 30 NONAME ; void RadioEngineWrapperObserver::skipNext(void) - ?muteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 31 NONAME ; void RadioEngineWrapperObserver::muteChanged(bool) - ?isFrequencyValid@RadioEngineWrapper@@QAE_NI@Z @ 32 NONAME ; bool RadioEngineWrapper::isFrequencyValid(unsigned int) - ?minFrequency@RadioEngineWrapper@@QBEIXZ @ 33 NONAME ; unsigned int RadioEngineWrapper::minFrequency(void) const - ?rdsAvailabilityChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 34 NONAME ; void RadioEngineWrapperObserver::rdsAvailabilityChanged(bool) - ?tunedToFrequency@RadioEngineWrapperObserver@@UAEXIH@Z @ 35 NONAME ; void RadioEngineWrapperObserver::tunedToFrequency(unsigned int, int) - ?tuneWithDelay@RadioEngineWrapper@@QAEXIH@Z @ 36 NONAME ; void RadioEngineWrapper::tuneWithDelay(unsigned int, int) - ??1MethodLogger@@QAE@XZ @ 37 NONAME ; MethodLogger::~MethodLogger(void) - ?antennaStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 38 NONAME ; void RadioEngineWrapperObserver::antennaStatusChanged(bool) - ?maxFrequency@RadioEngineWrapper@@QBEIXZ @ 39 NONAME ; unsigned int RadioEngineWrapper::maxFrequency(void) const - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/radiopresetstorageu.def --- a/radioapp/bwins/radiopresetstorageu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -EXPORTS - ??1RadioPresetStorage@@QAE@XZ @ 1 NONAME ; RadioPresetStorage::~RadioPresetStorage(void) - ?savePreset@RadioPresetStorage@@QAE_NABVRadioStationIf@@@Z @ 2 NONAME ; bool RadioPresetStorage::savePreset(class RadioStationIf const &) - ?maxNumberOfPresets@RadioPresetStorage@@QBEHXZ @ 3 NONAME ; int RadioPresetStorage::maxNumberOfPresets(void) const - ??0RadioPresetStorage@@QAE@XZ @ 4 NONAME ; RadioPresetStorage::RadioPresetStorage(void) - ?nextPreset@RadioPresetStorage@@QBEHH@Z @ 5 NONAME ; int RadioPresetStorage::nextPreset(int) const - ?deletePreset@RadioPresetStorage@@QAE_NH@Z @ 6 NONAME ; bool RadioPresetStorage::deletePreset(int) - ?firstPreset@RadioPresetStorage@@QBEHXZ @ 7 NONAME ; int RadioPresetStorage::firstPreset(void) const - ?readPreset@RadioPresetStorage@@QAE_NHAAVRadioStationIf@@@Z @ 8 NONAME ; bool RadioPresetStorage::readPreset(int, class RadioStationIf &) - ?presetCount@RadioPresetStorage@@QBEHXZ @ 9 NONAME ; int RadioPresetStorage::presetCount(void) const - ?d_func@RadioPresetStorage@@AAEPAVRadioPresetStoragePrivate@@XZ @ 10 NONAME ; class RadioPresetStoragePrivate * RadioPresetStorage::d_func(void) - ?d_func@RadioPresetStorage@@ABEPBVRadioPresetStoragePrivate@@XZ @ 11 NONAME ; class RadioPresetStoragePrivate const * RadioPresetStorage::d_func(void) const - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/radiouiengineu.def --- a/radioapp/bwins/radiouiengineu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,279 +0,0 @@ -EXPORTS - ?setFrequency@RadioHistoryItem@@QAEXI@Z @ 1 NONAME ; void RadioHistoryItem::setFrequency(unsigned int) - ?qt_metacast@RadioUiEngine@@UAEPAXPBD@Z @ 2 NONAME ; void * RadioUiEngine::qt_metacast(char const *) - ?index@RadioStationFilterModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 3 NONAME ; class QModelIndex RadioStationFilterModel::index(int, int, class QModelIndex const &) const - ?parseFrequency@RadioStation@@SA?AVQString@@I@Z @ 4 NONAME ; class QString RadioStation::parseFrequency(unsigned int) - ??0RadioStation@@QAE@ABV0@@Z @ 5 NONAME ; RadioStation::RadioStation(class RadioStation const &) - ?frequency@RadioStation@@QBEIXZ @ 6 NONAME ; unsigned int RadioStation::frequency(void) const - ?setFavoriteByFrequency@RadioStationModel@@QAEXI_N@Z @ 7 NONAME ; void RadioStationModel::setFavoriteByFrequency(unsigned int, bool) - ??_ERadioHistoryItem@@UAE@I@Z @ 8 NONAME ; RadioHistoryItem::~RadioHistoryItem(unsigned int) - ?staticMetaObject@RadioUiEngine@@2UQMetaObject@@B @ 9 NONAME ; struct QMetaObject const RadioUiEngine::staticMetaObject - ?setName@RadioStation@@QAEXABVQString@@@Z @ 10 NONAME ; void RadioStation::setName(class QString const &) - ?qt_metacast@RadioCarouselModel@@UAEPAXPBD@Z @ 11 NONAME ; void * RadioCarouselModel::qt_metacast(char const *) - ?setFavoriteByPreset@RadioStationModel@@QAEXH_N@Z @ 12 NONAME ; void RadioStationModel::setFavoriteByPreset(int, bool) - ?decrementReferenceCount@RadioHistoryItem@@AAEXXZ @ 13 NONAME ; void RadioHistoryItem::decrementReferenceCount(void) - ?qt_metacall@RadioHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 14 NONAME ; int RadioHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?emitVolumeChanged@RadioUiEngine@@AAEXH@Z @ 15 NONAME ; void RadioUiEngine::emitVolumeChanged(int) - ?qt_metacall@RadioUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 16 NONAME ; int RadioUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *) - ?addItem@RadioHistoryModel@@AAEXABVQString@@0ABVRadioStation@@@Z @ 17 NONAME ; void RadioHistoryModel::addItem(class QString const &, class QString const &, class RadioStation const &) - ?trUtf8@RadioCarouselModel@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString RadioCarouselModel::trUtf8(char const *, char const *, int) - ?setGenre@RadioStation@@QAEXH@Z @ 19 NONAME ; void RadioStation::setGenre(int) - ??4RadioStation@@QAEAAV0@ABV0@@Z @ 20 NONAME ; class RadioStation & RadioStation::operator=(class RadioStation const &) - ?stationModel@RadioUiEngine@@QAEAAVRadioStationModel@@XZ @ 21 NONAME ; class RadioStationModel & RadioUiEngine::stationModel(void) - ?toggleTagging@RadioHistoryModel@@QAEXABVRadioHistoryItem@@H@Z @ 22 NONAME ; void RadioHistoryModel::toggleTagging(class RadioHistoryItem const &, int) - ?muteChanged@RadioUiEngine@@IAEX_N@Z @ 23 NONAME ; void RadioUiEngine::muteChanged(bool) - ?maxFrequency@RadioUiEngine@@QBEIXZ @ 24 NONAME ; unsigned int RadioUiEngine::maxFrequency(void) const - ?saveStation@RadioStationModel@@QAEXAAVRadioStation@@@Z @ 25 NONAME ; void RadioStationModel::saveStation(class RadioStation &) - ?hasChanged@RadioStation@@QBE_NXZ @ 26 NONAME ; bool RadioStation::hasChanged(void) const - ??0RadioCarouselModel@@AAE@AAVRadioUiEngine@@AAVRadioStationModel@@@Z @ 27 NONAME ; RadioCarouselModel::RadioCarouselModel(class RadioUiEngine &, class RadioStationModel &) - ?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 28 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *, int) - ?isScanning@RadioUiEngine@@QBE_NXZ @ 29 NONAME ; bool RadioUiEngine::isScanning(void) const - ?d_func@RadioHistoryModel@@AAEPAVRadioHistoryModelPrivate@@XZ @ 30 NONAME ; class RadioHistoryModelPrivate * RadioHistoryModel::d_func(void) - ?piCodeToCallSign@RadioStation@@AAE?AVQString@@I@Z @ 31 NONAME ; class QString RadioStation::piCodeToCallSign(unsigned int) - ?hasLooped@RadioStationFilterModel@@QBE_NABVQModelIndex@@@Z @ 32 NONAME ; bool RadioStationFilterModel::hasLooped(class QModelIndex const &) const - ?favoriteChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 33 NONAME ; void RadioStationModel::favoriteChanged(class RadioStation const &) - ?radioStatusChanged@RadioUiEngine@@IAEX_N@Z @ 34 NONAME ; void RadioUiEngine::radioStatusChanged(bool) - ?setIcons@RadioHistoryModel@@QAEXABVQIcon@@0@Z @ 35 NONAME ; void RadioHistoryModel::setIcons(class QIcon const &, class QIcon const &) - ?isCurrentSongRecognized@RadioHistoryModel@@QBE_NXZ @ 36 NONAME ; bool RadioHistoryModel::isCurrentSongRecognized(void) const - ?clearRadioTextPlus@RadioHistoryModel@@AAEXXZ @ 37 NONAME ; void RadioHistoryModel::clearRadioTextPlus(void) - ?addStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 38 NONAME ; void RadioStationModel::addStation(class RadioStation const &) - ?favoriteCount@RadioStationModel@@QAEHXZ @ 39 NONAME ; int RadioStationModel::favoriteCount(void) - ?createNewFilterModel@RadioUiEngine@@QAEPAVRadioStationFilterModel@@PAVQObject@@@Z @ 40 NONAME ; class RadioStationFilterModel * RadioUiEngine::createNewFilterModel(class QObject *) - ??1RadioScannerEngine@@UAE@XZ @ 41 NONAME ; RadioScannerEngine::~RadioScannerEngine(void) - ?isScanning@RadioScannerEngine@@QBE_NXZ @ 42 NONAME ; bool RadioScannerEngine::isScanning(void) const - ?tunePreset@RadioUiEngine@@QAEXH@Z @ 43 NONAME ; void RadioUiEngine::tunePreset(int) - ?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *) - ?emitDataChanged@RadioStationModel@@AAEXABVRadioStation@@@Z @ 45 NONAME ; void RadioStationModel::emitDataChanged(class RadioStation const &) - ?isRadioOn@RadioUiEngine@@QBE_NXZ @ 46 NONAME ; bool RadioUiEngine::isRadioOn(void) const - ?continueScanning@RadioScannerEngine@@QAEXXZ @ 47 NONAME ; void RadioScannerEngine::continueScanning(void) - ?modelIndexFromFrequency@RadioStationModel@@QAE?AVQModelIndex@@I@Z @ 48 NONAME ; class QModelIndex RadioStationModel::modelIndexFromFrequency(unsigned int) - ?list@RadioStationModel@@QBEABV?$QMap@IVRadioStation@@@@XZ @ 49 NONAME ; class QMap const & RadioStationModel::list(void) const - ?tr@RadioStationModel@@SA?AVQString@@PBD0@Z @ 50 NONAME ; class QString RadioStationModel::tr(char const *, char const *) - ?tr@RadioCarouselModel@@SA?AVQString@@PBD0H@Z @ 51 NONAME ; class QString RadioCarouselModel::tr(char const *, char const *, int) - ?setChangeFlags@RadioStation@@QAEXV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 52 NONAME ; void RadioStation::setChangeFlags(class QFlags) - ?hasRds@RadioStation@@QBE_NXZ @ 53 NONAME ; bool RadioStation::hasRds(void) const - ?findClosest@RadioStationModel@@QAE?AVRadioStation@@IW4Mode@StationSkip@@@Z @ 54 NONAME ; class RadioStation RadioStationModel::findClosest(unsigned int, enum StationSkip::Mode) - ?flags@RadioStationModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 55 NONAME ; class QFlags RadioStationModel::flags(class QModelIndex const &) const - ?id@RadioHistoryItem@@QBEHXZ @ 56 NONAME ; int RadioHistoryItem::id(void) const - ?stationsInRange@RadioUiEngine@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 57 NONAME ; class QList RadioUiEngine::stationsInRange(unsigned int, unsigned int) - ?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 58 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *) - ?tr@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 59 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *, int) - ??_ERadioCarouselModel@@UAE@I@Z @ 60 NONAME ; RadioCarouselModel::~RadioCarouselModel(unsigned int) - ??0RadioStation@@QAE@HI@Z @ 61 NONAME ; RadioStation::RadioStation(int, unsigned int) - ?setVolume@RadioUiEngine@@QAEXH@Z @ 62 NONAME ; void RadioUiEngine::setVolume(int) - ?setFavorite@RadioStation@@QAEX_N@Z @ 63 NONAME ; void RadioStation::setFavorite(bool) - ?d_func@RadioStationModel@@ABEPBVRadioStationModelPrivate@@XZ @ 64 NONAME ; class RadioStationModelPrivate const * RadioStationModel::d_func(void) const - ?setCyclic@RadioStationFilterModel@@QAEX_N@Z @ 65 NONAME ; void RadioStationFilterModel::setCyclic(bool) - ??1RadioStationModel@@UAE@XZ @ 66 NONAME ; RadioStationModel::~RadioStationModel(void) - ?isMuted@RadioUiEngine@@QBE_NXZ @ 67 NONAME ; bool RadioUiEngine::isMuted(void) const - ?isValid@RadioStation@@QBE_NXZ @ 68 NONAME ; bool RadioStation::isValid(void) const - ?isEqual@RadioStationFilterModel@@QBE_NABVQModelIndex@@0@Z @ 69 NONAME ; bool RadioStationFilterModel::isEqual(class QModelIndex const &, class QModelIndex const &) const - ?decrementReferenceCount@RadioStation@@AAEXXZ @ 70 NONAME ; void RadioStation::decrementReferenceCount(void) - ?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 71 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *, int) - ?reset@RadioHistoryItem@@QAEXXZ @ 72 NONAME ; void RadioHistoryItem::reset(void) - ?trUtf8@RadioStationModel@@SA?AVQString@@PBD0@Z @ 73 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *) - ??0RadioStationModel@@QAE@AAVRadioUiEnginePrivate@@@Z @ 74 NONAME ; RadioStationModel::RadioStationModel(class RadioUiEnginePrivate &) - ?tuneFrequency@RadioUiEngine@@QAEXIH@Z @ 75 NONAME ; void RadioUiEngine::tuneFrequency(unsigned int, int) - ?frequency@RadioHistoryItem@@QBEIXZ @ 76 NONAME ; unsigned int RadioHistoryItem::frequency(void) const - ?qt_metacall@RadioScannerEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 77 NONAME ; int RadioScannerEngine::qt_metacall(enum QMetaObject::Call, int, void * *) - ?emitTunedToFrequency@RadioUiEngine@@AAEXIH@Z @ 78 NONAME ; void RadioUiEngine::emitTunedToFrequency(unsigned int, int) - ?psType@RadioStation@@QBE?AV?$QFlags@W4PsTypeFlag@RadioStation@@@@XZ @ 79 NONAME ; class QFlags RadioStation::psType(void) const - ?d_func@RadioUiEngine@@ABEPBVRadioUiEnginePrivate@@XZ @ 80 NONAME ; class RadioUiEnginePrivate const * RadioUiEngine::d_func(void) const - ?rowCount@RadioCarouselModel@@UBEHABVQModelIndex@@@Z @ 81 NONAME ; int RadioCarouselModel::rowCount(class QModelIndex const &) const - ?scannerEngine@RadioUiEngine@@QAEPAVRadioScannerEngine@@XZ @ 82 NONAME ; class RadioScannerEngine * RadioUiEngine::scannerEngine(void) - ?startScanning@RadioScannerEngine@@QAEXXZ @ 83 NONAME ; void RadioScannerEngine::startScanning(void) - ?emitStationFound@RadioScannerEngine@@AAEXABVRadioStation@@@Z @ 84 NONAME ; void RadioScannerEngine::emitStationFound(class RadioStation const &) - ?findCurrentStation@RadioStationModel@@AAE?AVRadioStation@@I@Z @ 85 NONAME ; class RadioStation RadioStationModel::findCurrentStation(unsigned int) - ??4RadioHistoryItem@@QAEAAV0@ABV0@@Z @ 86 NONAME ; class RadioHistoryItem & RadioHistoryItem::operator=(class RadioHistoryItem const &) - ?url@RadioStation@@QBE?AVQString@@XZ @ 87 NONAME ; class QString RadioStation::url(void) const - ?historyModel@RadioUiEngine@@QAEAAVRadioHistoryModel@@XZ @ 88 NONAME ; class RadioHistoryModel & RadioUiEngine::historyModel(void) - ?frequencyMhz@RadioStation@@QBE?AVQString@@XZ @ 89 NONAME ; class QString RadioStation::frequencyMhz(void) const - ?setStation@RadioHistoryItem@@QAEXABVQString@@@Z @ 90 NONAME ; void RadioHistoryItem::setStation(class QString const &) - ?qt_metacast@RadioStationModel@@UAEPAXPBD@Z @ 91 NONAME ; void * RadioStationModel::qt_metacast(char const *) - ?getStaticMetaObject@RadioCarouselModel@@SAABUQMetaObject@@XZ @ 92 NONAME ; struct QMetaObject const & RadioCarouselModel::getStaticMetaObject(void) - ?filterAcceptsRow@RadioStationFilterModel@@EBE_NHABVQModelIndex@@@Z @ 93 NONAME ; bool RadioStationFilterModel::filterAcceptsRow(int, class QModelIndex const &) const - ?cancel@RadioScannerEngine@@QAEXXZ @ 94 NONAME ; void RadioScannerEngine::cancel(void) - ?addRecognizedSong@RadioUiEngine@@QAEXABVQString@@0ABVRadioStation@@@Z @ 95 NONAME ; void RadioUiEngine::addRecognizedSong(class QString const &, class QString const &, class RadioStation const &) - ?emitMuteChanged@RadioUiEngine@@AAEX_N@Z @ 96 NONAME ; void RadioUiEngine::emitMuteChanged(bool) - ?removeByPresetIndex@RadioStationModel@@QAEXH@Z @ 97 NONAME ; void RadioStationModel::removeByPresetIndex(int) - ?d_func@RadioScannerEngine@@AAEPAVRadioScannerEnginePrivate@@XZ @ 98 NONAME ; class RadioScannerEnginePrivate * RadioScannerEngine::d_func(void) - ?stationAt@RadioStationModel@@QBE?AVRadioStation@@H@Z @ 99 NONAME ; class RadioStation RadioStationModel::stationAt(int) const - ?dynamicPsChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 100 NONAME ; void RadioStationModel::dynamicPsChanged(class RadioStation const &) - ?setType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 101 NONAME ; void RadioStation::setType(class QFlags) - ??0RadioHistoryItem@@QAE@XZ @ 102 NONAME ; RadioHistoryItem::RadioHistoryItem(void) - ?findPresetIndex@RadioStationModel@@QAEHH@Z @ 103 NONAME ; int RadioStationModel::findPresetIndex(int) - ?setRadioTextPlus@RadioStation@@QAEXHABVQString@@@Z @ 104 NONAME ; void RadioStation::setRadioTextPlus(int, class QString const &) - ?metaObject@RadioStationModel@@UBEPBUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const * RadioStationModel::metaObject(void) const - ?getStaticMetaObject@RadioStationModel@@SAABUQMetaObject@@XZ @ 106 NONAME ; struct QMetaObject const & RadioStationModel::getStaticMetaObject(void) - ?tr@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 107 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *) - ?dynamicPsText@RadioStation@@QBE?AVQString@@XZ @ 108 NONAME ; class QString RadioStation::dynamicPsText(void) const - ?isFirstTimeStart@RadioUiEngine@@QAE_NXZ @ 109 NONAME ; bool RadioUiEngine::isFirstTimeStart(void) - ?setMute@RadioUiEngine@@QAEX_N@Z @ 110 NONAME ; void RadioUiEngine::setMute(bool) - ?init@RadioUiEngine@@QAE_NXZ @ 111 NONAME ; bool RadioUiEngine::init(void) - ?changeFlags@RadioStation@@QBE?AV?$QFlags@W4ChangeFlag@RadioStation@@@@XZ @ 112 NONAME ; class QFlags RadioStation::changeFlags(void) const - ?qt_metacast@RadioHistoryModel@@UAEPAXPBD@Z @ 113 NONAME ; void * RadioHistoryModel::qt_metacast(char const *) - ??1RadioUiEngine@@UAE@XZ @ 114 NONAME ; RadioUiEngine::~RadioUiEngine(void) - ?tr@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *) - ?metaObject@RadioCarouselModel@@UBEPBUQMetaObject@@XZ @ 116 NONAME ; struct QMetaObject const * RadioCarouselModel::metaObject(void) const - ?d_func@RadioCarouselModel@@AAEPAVRadioCarouselModelPrivate@@XZ @ 117 NONAME ; class RadioCarouselModelPrivate * RadioCarouselModel::d_func(void) - ?initialize@RadioStationModel@@QAEXPAVRadioPresetStorage@@PAVRadioEngineWrapper@@@Z @ 118 NONAME ; void RadioStationModel::initialize(class RadioPresetStorage *, class RadioEngineWrapper *) - ?resetCurrentSong@RadioHistoryModel@@QAEXXZ @ 119 NONAME ; void RadioHistoryModel::resetCurrentSong(void) - ?d_func@RadioHistoryModel@@ABEPBVRadioHistoryModelPrivate@@XZ @ 120 NONAME ; class RadioHistoryModelPrivate const * RadioHistoryModel::d_func(void) const - ?stationFound@RadioScannerEngine@@IAEXABVRadioStation@@@Z @ 121 NONAME ; void RadioScannerEngine::stationFound(class RadioStation const &) - ?resetChangeFlags@RadioStation@@QAEXXZ @ 122 NONAME ; void RadioStation::resetChangeFlags(void) - ??_ERadioStationFilterModel@@UAE@I@Z @ 123 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(unsigned int) - ?metaObject@RadioScannerEngine@@UBEPBUQMetaObject@@XZ @ 124 NONAME ; struct QMetaObject const * RadioScannerEngine::metaObject(void) const - ?callSignChar@RadioStation@@AAEDI@Z @ 125 NONAME ; char RadioStation::callSignChar(unsigned int) - ??_ERadioStation@@UAE@I@Z @ 126 NONAME ; RadioStation::~RadioStation(unsigned int) - ?detach@RadioHistoryItem@@QAEXXZ @ 127 NONAME ; void RadioHistoryItem::detach(void) - ?staticMetaObject@RadioHistoryModel@@2UQMetaObject@@B @ 128 NONAME ; struct QMetaObject const RadioHistoryModel::staticMetaObject - ?isDetached@RadioStation@@QBE_NXZ @ 129 NONAME ; bool RadioStation::isDetached(void) const - ??0RadioHistoryItem@@QAE@ABVQString@@0@Z @ 130 NONAME ; RadioHistoryItem::RadioHistoryItem(class QString const &, class QString const &) - ?removeAll@RadioStationModel@@QAEXW4RemoveMode@1@@Z @ 131 NONAME ; void RadioStationModel::removeAll(enum RadioStationModel::RemoveMode) - ?data_ptr@RadioHistoryItem@@QAEAAPAVRadioHistoryItemPrivate@@XZ @ 132 NONAME ; class RadioHistoryItemPrivate * & RadioHistoryItem::data_ptr(void) - ?setShowDetails@RadioHistoryModel@@QAEX_N@Z @ 133 NONAME ; void RadioHistoryModel::setShowDetails(bool) - ?rowCount@RadioStationModel@@UBEHABVQModelIndex@@@Z @ 134 NONAME ; int RadioStationModel::rowCount(class QModelIndex const &) const - ?toggleMute@RadioUiEngine@@QAEXXZ @ 135 NONAME ; void RadioUiEngine::toggleMute(void) - ?genreToString@RadioUiEngine@@QAE?AVQString@@HW4Target@GenreTarget@@@Z @ 136 NONAME ; class QString RadioUiEngine::genreToString(int, enum GenreTarget::Target) - ?d_func@RadioUiEngine@@AAEPAVRadioUiEnginePrivate@@XZ @ 137 NONAME ; class RadioUiEnginePrivate * RadioUiEngine::d_func(void) - ?station@RadioHistoryItem@@QBE?AVQString@@XZ @ 138 NONAME ; class QString RadioHistoryItem::station(void) const - ??_ERadioHistoryModel@@UAE@I@Z @ 139 NONAME ; RadioHistoryModel::~RadioHistoryModel(unsigned int) - ??1RadioCarouselModel@@UAE@XZ @ 140 NONAME ; RadioCarouselModel::~RadioCarouselModel(void) - ?addScannedFrequency@RadioScannerEngine@@QAEXI@Z @ 141 NONAME ; void RadioScannerEngine::addScannedFrequency(unsigned int) - ?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 142 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *) - ?frequencyStepSize@RadioUiEngine@@QBEIXZ @ 143 NONAME ; unsigned int RadioUiEngine::frequencyStepSize(void) const - ??0RadioHistoryModel@@AAE@AAVRadioUiEngine@@@Z @ 144 NONAME ; RadioHistoryModel::RadioHistoryModel(class RadioUiEngine &) - ?trUtf8@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 145 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *, int) - ?metaObject@RadioHistoryModel@@UBEPBUQMetaObject@@XZ @ 146 NONAME ; struct QMetaObject const * RadioHistoryModel::metaObject(void) const - ?setFavorites@RadioStationModel@@QAEXABV?$QList@VQModelIndex@@@@@Z @ 147 NONAME ; void RadioStationModel::setFavorites(class QList const &) - ?setArtist@RadioHistoryItem@@QAEXABVQString@@@Z @ 148 NONAME ; void RadioHistoryItem::setArtist(class QString const &) - ?setTitle@RadioHistoryItem@@QAEXABVQString@@@Z @ 149 NONAME ; void RadioHistoryItem::setTitle(class QString const &) - ?isOfflineProfile@RadioUiEngine@@SA_NXZ @ 150 NONAME ; bool RadioUiEngine::isOfflineProfile(void) - ?tr@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 151 NONAME ; class QString RadioUiEngine::tr(char const *, char const *) - ?currentStation@RadioStationModel@@QBEABVRadioStation@@XZ @ 152 NONAME ; class RadioStation const & RadioStationModel::currentStation(void) const - ?rowCount@RadioHistoryModel@@UBEHABVQModelIndex@@@Z @ 153 NONAME ; int RadioHistoryModel::rowCount(class QModelIndex const &) const - ?region@RadioUiEngine@@QBE?AW4Region@RadioRegion@@XZ @ 154 NONAME ; enum RadioRegion::Region RadioUiEngine::region(void) const - ?skipStation@RadioUiEngine@@QAEIW4Mode@StationSkip@@I@Z @ 155 NONAME ; unsigned int RadioUiEngine::skipStation(enum StationSkip::Mode, unsigned int) - ?isInitialized@RadioUiEngine@@QBE_NXZ @ 156 NONAME ; bool RadioUiEngine::isInitialized(void) const - ?findFrequency@RadioStationModel@@QAE_NIAAVRadioStation@@@Z @ 157 NONAME ; bool RadioStationModel::findFrequency(unsigned int, class RadioStation &) - ?stationsInRange@RadioStationModel@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 158 NONAME ; class QList RadioStationModel::stationsInRange(unsigned int, unsigned int) - ?tuneWithDelay@RadioUiEngine@@QAEXIH@Z @ 159 NONAME ; void RadioUiEngine::tuneWithDelay(unsigned int, int) - ?emitAntennaStatusChanged@RadioUiEngine@@AAEX_N@Z @ 160 NONAME ; void RadioUiEngine::emitAntennaStatusChanged(bool) - ?settings@RadioUiEngine@@QAEAAVRadioSettingsIf@@XZ @ 161 NONAME ; class RadioSettingsIf & RadioUiEngine::settings(void) - ??_ERadioScannerEngine@@UAE@I@Z @ 162 NONAME ; RadioScannerEngine::~RadioScannerEngine(unsigned int) - ?hasPiCode@RadioStation@@QBE_NXZ @ 163 NONAME ; bool RadioStation::hasPiCode(void) const - ?rdsAvailabilityChanged@RadioUiEngine@@IAEX_N@Z @ 164 NONAME ; void RadioUiEngine::rdsAvailabilityChanged(bool) - ?qt_metacall@RadioCarouselModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 165 NONAME ; int RadioCarouselModel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?findPresetIndex@RadioStationModel@@QAEHHAAVRadioStation@@@Z @ 166 NONAME ; int RadioStationModel::findPresetIndex(int, class RadioStation &) - ?stationHandlerIf@RadioStationModel@@QAEAAVRadioStationHandlerIf@@XZ @ 167 NONAME ; class RadioStationHandlerIf & RadioStationModel::stationHandlerIf(void) - ?emitSeekingStarted@RadioUiEngine@@AAEXW4Direction@Seeking@@@Z @ 168 NONAME ; void RadioUiEngine::emitSeekingStarted(enum Seeking::Direction) - ??1RadioStationFilterModel@@UAE@XZ @ 169 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(void) - ?emitAudioRouteChanged@RadioUiEngine@@AAEX_N@Z @ 170 NONAME ; void RadioUiEngine::emitAudioRouteChanged(bool) - ?d_func@RadioScannerEngine@@ABEPBVRadioScannerEnginePrivate@@XZ @ 171 NONAME ; class RadioScannerEnginePrivate const * RadioScannerEngine::d_func(void) const - ?toggleAudioRoute@RadioUiEngine@@QAEXXZ @ 172 NONAME ; void RadioUiEngine::toggleAudioRoute(void) - ?unsetType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 173 NONAME ; void RadioStation::unsetType(class QFlags) - ?setIcons@RadioStationModel@@QAEXABVQIcon@@0@Z @ 174 NONAME ; void RadioStationModel::setIcons(class QIcon const &, class QIcon const &) - ?findUnusedPresetIndex@RadioStationModel@@AAEHXZ @ 175 NONAME ; int RadioStationModel::findUnusedPresetIndex(void) - ?getStaticMetaObject@RadioHistoryModel@@SAABUQMetaObject@@XZ @ 176 NONAME ; struct QMetaObject const & RadioHistoryModel::getStaticMetaObject(void) - ?dynamicPsCheckEnded@RadioStationModel@@AAEXXZ @ 177 NONAME ; void RadioStationModel::dynamicPsCheckEnded(void) - ?seekStation@RadioUiEngine@@QAEXH@Z @ 178 NONAME ; void RadioUiEngine::seekStation(int) - ?setPiCode@RadioStation@@QAE_NHW4Region@RadioRegion@@@Z @ 179 NONAME ; bool RadioStation::setPiCode(int, enum RadioRegion::Region) - ?lastTunedFrequency@RadioUiEngine@@SAIXZ @ 180 NONAME ; unsigned int RadioUiEngine::lastTunedFrequency(void) - ?tunedToFrequency@RadioUiEngine@@IAEXIH@Z @ 181 NONAME ; void RadioUiEngine::tunedToFrequency(unsigned int, int) - ?tr@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 182 NONAME ; class QString RadioUiEngine::tr(char const *, char const *, int) - ?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 183 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *, int) - ?data@RadioStationFilterModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 184 NONAME ; class QVariant RadioStationFilterModel::data(class QModelIndex const &, int) const - ?detach@RadioStation@@QAEXXZ @ 185 NONAME ; void RadioStation::detach(void) - ?d_func@RadioCarouselModel@@ABEPBVRadioCarouselModelPrivate@@XZ @ 186 NONAME ; class RadioCarouselModelPrivate const * RadioCarouselModel::d_func(void) const - ?staticMetaObject@RadioScannerEngine@@2UQMetaObject@@B @ 187 NONAME ; struct QMetaObject const RadioScannerEngine::staticMetaObject - ?radioText@RadioStation@@QBE?AVQString@@XZ @ 188 NONAME ; class QString RadioStation::radioText(void) const - ?setData@RadioStationModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 189 NONAME ; bool RadioStationModel::setData(class QModelIndex const &, class QVariant const &, int) - ?setPsType@RadioStation@@QAEXV?$QFlags@W4PsTypeFlag@RadioStation@@@@@Z @ 190 NONAME ; void RadioStation::setPsType(class QFlags) - ?itemAtIndex@RadioHistoryModel@@QBE?AVRadioHistoryItem@@ABVQModelIndex@@@Z @ 191 NONAME ; class RadioHistoryItem RadioHistoryModel::itemAtIndex(class QModelIndex const &) const - ?emitChangeSignals@RadioStationModel@@AAEXABVRadioStation@@V?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 192 NONAME ; void RadioStationModel::emitChangeSignals(class RadioStation const &, class QFlags) - ?setPresetIndex@RadioStation@@QAEXH@Z @ 193 NONAME ; void RadioStation::setPresetIndex(int) - ?tr@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 194 NONAME ; class QString RadioStationModel::tr(char const *, char const *, int) - ?trUtf8@RadioCarouselModel@@SA?AVQString@@PBD0@Z @ 195 NONAME ; class QString RadioCarouselModel::trUtf8(char const *, char const *) - ?renameStation@RadioStationModel@@QAEXHABVQString@@@Z @ 196 NONAME ; void RadioStationModel::renameStation(int, class QString const &) - ?currentFrequency@RadioUiEngine@@QBEIXZ @ 197 NONAME ; unsigned int RadioUiEngine::currentFrequency(void) const - ?emitItemAdded@RadioHistoryModel@@AAEXXZ @ 198 NONAME ; void RadioHistoryModel::emitItemAdded(void) - ?setUserDefinedName@RadioStation@@QAEXABVQString@@@Z @ 199 NONAME ; void RadioStation::setUserDefinedName(class QString const &) - ??1RadioStation@@UAE@XZ @ 200 NONAME ; RadioStation::~RadioStation(void) - ?callSignString@RadioStation@@AAE?AVQString@@I@Z @ 201 NONAME ; class QString RadioStation::callSignString(unsigned int) - ?getStaticMetaObject@RadioScannerEngine@@SAABUQMetaObject@@XZ @ 202 NONAME ; struct QMetaObject const & RadioScannerEngine::getStaticMetaObject(void) - ?removeFrequency@RadioCarouselModel@@AAEXABVQModelIndex@@HH@Z @ 203 NONAME ; void RadioCarouselModel::removeFrequency(class QModelIndex const &, int, int) - ?modelIndexFromFrequency@RadioStationFilterModel@@QAE?AVQModelIndex@@I@Z @ 204 NONAME ; class QModelIndex RadioStationFilterModel::modelIndexFromFrequency(unsigned int) - ?stationDataChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 205 NONAME ; void RadioStationModel::stationDataChanged(class RadioStation const &) - ?currentStation@RadioStationModel@@QAEAAVRadioStation@@XZ @ 206 NONAME ; class RadioStation & RadioStationModel::currentStation(void) - ?genre@RadioStation@@QBEHXZ @ 207 NONAME ; int RadioStation::genre(void) const - ?isDetached@RadioHistoryItem@@QBE_NXZ @ 208 NONAME ; bool RadioHistoryItem::isDetached(void) const - ?reset@RadioStation@@QAEXXZ @ 209 NONAME ; void RadioStation::reset(void) - ??0RadioStation@@QAE@XZ @ 210 NONAME ; RadioStation::RadioStation(void) - ??1RadioHistoryModel@@UAE@XZ @ 211 NONAME ; RadioHistoryModel::~RadioHistoryModel(void) - ?data@RadioCarouselModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 212 NONAME ; class QVariant RadioCarouselModel::data(class QModelIndex const &, int) const - ?isSongRecognitionAppAvailable@RadioUiEngine@@QAE_NXZ @ 213 NONAME ; bool RadioUiEngine::isSongRecognitionAppAvailable(void) - ?isValid@RadioHistoryItem@@QBE_NXZ @ 214 NONAME ; bool RadioHistoryItem::isValid(void) const - ?setUrl@RadioStation@@QAEXABVQString@@@Z @ 215 NONAME ; void RadioStation::setUrl(class QString const &) - ?realIndex@RadioStationFilterModel@@QBE?AVQModelIndex@@ABV2@@Z @ 216 NONAME ; class QModelIndex RadioStationFilterModel::realIndex(class QModelIndex const &) const - ?data@RadioHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 217 NONAME ; class QVariant RadioHistoryModel::data(class QModelIndex const &, int) const - ?modelIndexFromFrequency@RadioCarouselModel@@QAE?AVQModelIndex@@I@Z @ 218 NONAME ; class QModelIndex RadioCarouselModel::modelIndexFromFrequency(unsigned int) - ?isAntennaAttached@RadioUiEngine@@QBE_NXZ @ 219 NONAME ; bool RadioUiEngine::isAntennaAttached(void) const - ?emitRdsAvailabilityChanged@RadioUiEngine@@AAEX_N@Z @ 220 NONAME ; void RadioUiEngine::emitRdsAvailabilityChanged(bool) - ??0RadioStationFilterModel@@QAE@AAVRadioUiEngine@@PAVQObject@@@Z @ 221 NONAME ; RadioStationFilterModel::RadioStationFilterModel(class RadioUiEngine &, class QObject *) - ?presetIndex@RadioStation@@QBEHXZ @ 222 NONAME ; int RadioStation::presetIndex(void) const - ?staticMetaObject@RadioStationModel@@2UQMetaObject@@B @ 223 NONAME ; struct QMetaObject const RadioStationModel::staticMetaObject - ?currentSongReset@RadioHistoryModel@@IAEXXZ @ 224 NONAME ; void RadioHistoryModel::currentSongReset(void) - ?setFrequency@RadioStation@@QAEXI@Z @ 225 NONAME ; void RadioStation::setFrequency(unsigned int) - ?isRenamed@RadioStation@@QBE_NXZ @ 226 NONAME ; bool RadioStation::isRenamed(void) const - ?metaObject@RadioUiEngine@@UBEPBUQMetaObject@@XZ @ 227 NONAME ; struct QMetaObject const * RadioUiEngine::metaObject(void) const - ?removeStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 228 NONAME ; void RadioStationModel::removeStation(class RadioStation const &) - ?isUsingLoudspeaker@RadioUiEngine@@QBE_NXZ @ 229 NONAME ; bool RadioUiEngine::isUsingLoudspeaker(void) const - ?removeByFrequency@RadioStationModel@@QAEXI@Z @ 230 NONAME ; void RadioStationModel::removeByFrequency(unsigned int) - ??0RadioHistoryItem@@QAE@ABV0@@Z @ 231 NONAME ; RadioHistoryItem::RadioHistoryItem(class RadioHistoryItem const &) - ?audioRouteChanged@RadioUiEngine@@IAEX_N@Z @ 232 NONAME ; void RadioUiEngine::audioRouteChanged(bool) - ?findClosest@RadioCarouselModel@@QAE?AVRadioStation@@IW4Mode@StationSkip@@@Z @ 233 NONAME ; class RadioStation RadioCarouselModel::findClosest(unsigned int, enum StationSkip::Mode) - ?tr@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 234 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *, int) - ?emitRadioStatusChanged@RadioUiEngine@@AAEX_N@Z @ 235 NONAME ; void RadioUiEngine::emitRadioStatusChanged(bool) - ??0RadioScannerEngine@@QAE@AAVRadioUiEnginePrivate@@@Z @ 236 NONAME ; RadioScannerEngine::RadioScannerEngine(class RadioUiEnginePrivate &) - ??_ERadioUiEngine@@UAE@I@Z @ 237 NONAME ; RadioUiEngine::~RadioUiEngine(unsigned int) - ?setDynamicPsText@RadioStation@@QAEXABVQString@@@Z @ 238 NONAME ; void RadioStation::setDynamicPsText(class QString const &) - ?addRadioTextPlus@RadioHistoryModel@@AAEXHABVQString@@ABVRadioStation@@@Z @ 239 NONAME ; void RadioHistoryModel::addRadioTextPlus(int, class QString const &, class RadioStation const &) - ?d_func@RadioStationModel@@AAEPAVRadioStationModelPrivate@@XZ @ 240 NONAME ; class RadioStationModelPrivate * RadioStationModel::d_func(void) - ?setDetail@RadioStationModel@@QAEXV?$QFlags@W4DetailFlag@RadioStationModel@@@@@Z @ 241 NONAME ; void RadioStationModel::setDetail(class QFlags) - ?removeAll@RadioHistoryModel@@QAEXXZ @ 242 NONAME ; void RadioHistoryModel::removeAll(void) - ?rowCount@RadioStationFilterModel@@UBEHABVQModelIndex@@@Z @ 243 NONAME ; int RadioStationFilterModel::rowCount(class QModelIndex const &) const - ?artist@RadioHistoryItem@@QBE?AVQString@@XZ @ 244 NONAME ; class QString RadioHistoryItem::artist(void) const - ?reportChangedData@RadioHistoryModel@@AAEXHH@Z @ 245 NONAME ; void RadioHistoryModel::reportChangedData(int, int) - ?time@RadioHistoryItem@@QBE?AVQString@@XZ @ 246 NONAME ; class QString RadioHistoryItem::time(void) const - ?isType@RadioStation@@QBE_NV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 247 NONAME ; bool RadioStation::isType(class QFlags) const - ?carouselModel@RadioUiEngine@@QAEPAVRadioCarouselModel@@XZ @ 248 NONAME ; class RadioCarouselModel * RadioUiEngine::carouselModel(void) - ?setTypeFilter@RadioStationFilterModel@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 249 NONAME ; void RadioStationFilterModel::setTypeFilter(class QFlags) - ?volumeChanged@RadioUiEngine@@IAEXH@Z @ 250 NONAME ; void RadioUiEngine::volumeChanged(int) - ?title@RadioHistoryItem@@QBE?AVQString@@XZ @ 251 NONAME ; class QString RadioHistoryItem::title(void) const - ?data_ptr@RadioStation@@QAEAAPAVRadioStationPrivate@@XZ @ 252 NONAME ; class RadioStationPrivate * & RadioStation::data_ptr(void) - ?qt_metacast@RadioScannerEngine@@UAEPAXPBD@Z @ 253 NONAME ; void * RadioScannerEngine::qt_metacast(char const *) - ?tr@RadioCarouselModel@@SA?AVQString@@PBD0@Z @ 254 NONAME ; class QString RadioCarouselModel::tr(char const *, char const *) - ??1RadioHistoryItem@@UAE@XZ @ 255 NONAME ; RadioHistoryItem::~RadioHistoryItem(void) - ?antennaStatusChanged@RadioUiEngine@@IAEX_N@Z @ 256 NONAME ; void RadioUiEngine::antennaStatusChanged(bool) - ?qt_metacall@RadioStationModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 257 NONAME ; int RadioStationModel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?setRadioText@RadioStation@@QAEXABVQString@@@Z @ 258 NONAME ; void RadioStation::setRadioText(class QString const &) - ?hasDataChanged@RadioStation@@QBE_NV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 259 NONAME ; bool RadioStation::hasDataChanged(class QFlags) const - ?name@RadioStation@@QBE?AVQString@@XZ @ 260 NONAME ; class QString RadioStation::name(void) const - ?data@RadioStationModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 261 NONAME ; class QVariant RadioStationModel::data(class QModelIndex const &, int) const - ?itemAdded@RadioHistoryModel@@IAEXXZ @ 262 NONAME ; void RadioHistoryModel::itemAdded(void) - ?getStaticMetaObject@RadioUiEngine@@SAABUQMetaObject@@XZ @ 263 NONAME ; struct QMetaObject const & RadioUiEngine::getStaticMetaObject(void) - ?launchSongRecognition@RadioUiEngine@@QAEXXZ @ 264 NONAME ; void RadioUiEngine::launchSongRecognition(void) - ?iterateCallSign@RadioStation@@AAE?AVQString@@HH@Z @ 265 NONAME ; class QString RadioStation::iterateCallSign(int, int) - ??0RadioUiEngine@@QAE@PAVQObject@@@Z @ 266 NONAME ; RadioUiEngine::RadioUiEngine(class QObject *) - ?setCurrentTime@RadioHistoryItem@@QAEXXZ @ 267 NONAME ; void RadioHistoryItem::setCurrentTime(void) - ?isTagged@RadioHistoryItem@@QBE_NXZ @ 268 NONAME ; bool RadioHistoryItem::isTagged(void) const - ?minFrequency@RadioUiEngine@@QBEIXZ @ 269 NONAME ; unsigned int RadioUiEngine::minFrequency(void) const - ?setShowTagged@RadioHistoryModel@@QAEX_N@Z @ 270 NONAME ; void RadioHistoryModel::setShowTagged(bool) - ?isFavorite@RadioStation@@QBE_NXZ @ 271 NONAME ; bool RadioStation::isFavorite(void) const - ?radioTextReceived@RadioStationModel@@IAEXABVRadioStation@@@Z @ 272 NONAME ; void RadioStationModel::radioTextReceived(class RadioStation const &) - ?staticMetaObject@RadioCarouselModel@@2UQMetaObject@@B @ 273 NONAME ; struct QMetaObject const RadioCarouselModel::staticMetaObject - ?seekingStarted@RadioUiEngine@@IAEXH@Z @ 274 NONAME ; void RadioUiEngine::seekingStarted(int) - ?isRecognizedByRds@RadioHistoryItem@@QBE_NXZ @ 275 NONAME ; bool RadioHistoryItem::isRecognizedByRds(void) const - ??_ERadioStationModel@@UAE@I@Z @ 276 NONAME ; RadioStationModel::~RadioStationModel(unsigned int) - ?openMusicStore@RadioUiEngine@@QAEXABVRadioHistoryItem@@W4MusicStore@1@@Z @ 277 NONAME ; void RadioUiEngine::openMusicStore(class RadioHistoryItem const &, enum RadioUiEngine::MusicStore) - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/bwins/radiowidgetsu.def --- a/radioapp/bwins/radiowidgetsu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -EXPORTS - ?trUtf8@RadioWindow@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString RadioWindow::trUtf8(char const *, char const *, int) - ?qt_metacast@RadioHistoryView@@UAEPAXPBD@Z @ 2 NONAME ; void * RadioHistoryView::qt_metacast(char const *) - ?qt_metacast@RadioFadingLabel@@UAEPAXPBD@Z @ 3 NONAME ; void * RadioFadingLabel::qt_metacast(char const *) - ?tr@RadioBannerLabel@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString RadioBannerLabel::tr(char const *, char const *) - ?toggleButtons@RadioFrequencyStrip@@AAEXXZ @ 5 NONAME ; void RadioFrequencyStrip::toggleButtons(void) - ?animateNewStation@RadioStationCarousel@@QAEXABVRadioStation@@@Z @ 6 NONAME ; void RadioStationCarousel::animateNewStation(class RadioStation const &) - ?getStaticMetaObject@RadioBannerLabel@@SAABUQMetaObject@@XZ @ 7 NONAME ; struct QMetaObject const & RadioBannerLabel::getStaticMetaObject(void) - ?frequencyChanged@RadioFrequencyStrip@@IAEXIH@Z @ 8 NONAME ; void RadioFrequencyStrip::frequencyChanged(unsigned int, int) - ?toggleTagging@RadioHistoryView@@AAEXXZ @ 9 NONAME ; void RadioHistoryView::toggleTagging(void) - ?tr@RadioMainView@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString RadioMainView::tr(char const *, char const *, int) - ?rename@RadioStationsView@@AAEXXZ @ 11 NONAME ; void RadioStationsView::rename(void) - ?gestureEvent@RadioStationCarousel@@EAEXPAVQGestureEvent@@@Z @ 12 NONAME ; void RadioStationCarousel::gestureEvent(class QGestureEvent *) - ??1RadioBannerLabel@@UAE@XZ @ 13 NONAME ; RadioBannerLabel::~RadioBannerLabel(void) - ?setFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 14 NONAME ; void RadioStationCarousel::setFavoriteIcon(class HbIcon const &) - ?update@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 15 NONAME ; void RadioStationCarousel::update(class RadioStation const &) - ?taggedIcon@RadioHistoryView@@QBE?AVHbIcon@@XZ @ 16 NONAME ; class HbIcon RadioHistoryView::taggedIcon(void) const - ?seekingStarted@RadioMainView@@AAEXXZ @ 17 NONAME ; void RadioMainView::seekingStarted(void) - ?addFrequencyPos@RadioFrequencyStrip@@AAEXHIPAVRadioFrequencyItem@@@Z @ 18 NONAME ; void RadioFrequencyStrip::addFrequencyPos(int, unsigned int, class RadioFrequencyItem *) - ?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 19 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *) - ?setScanningMode@RadioFrequencyStrip@@QAEX_N@Z @ 20 NONAME ; void RadioFrequencyStrip::setScanningMode(bool) - ?createItemPrimitive@RadioFrequencyStrip@@EAEPAVQGraphicsItem@@PAV2@@Z @ 21 NONAME ; class QGraphicsItem * RadioFrequencyStrip::createItemPrimitive(class QGraphicsItem *) - ??_ERadioStationsView@@UAE@I@Z @ 22 NONAME ; RadioStationsView::~RadioStationsView(unsigned int) - ?setTextWithoutFading@RadioFadingLabel@@QAEXABVQString@@@Z @ 23 NONAME ; void RadioFadingLabel::setTextWithoutFading(class QString const &) - ?updateAntennaStatus@RadioWindow@@AAEX_N@Z @ 24 NONAME ; void RadioWindow::updateAntennaStatus(bool) - ?resizeEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneResizeEvent@@@Z @ 25 NONAME ; void RadioFrequencyStrip::resizeEvent(class QGraphicsSceneResizeEvent *) - ?addOneSong@RadioHistoryView@@AAEXXZ @ 26 NONAME ; void RadioHistoryView::addOneSong(void) - ?startScanning@RadioStationsView@@AAEXXZ @ 27 NONAME ; void RadioStationsView::startScanning(void) - ?initButtons@RadioFrequencyStrip@@AAEXXZ @ 28 NONAME ; void RadioFrequencyStrip::initButtons(void) - ?setOrientation@RadioMainView@@EAEXXZ @ 29 NONAME ; void RadioMainView::setOrientation(void) - ?qt_metacall@RadioStationCarousel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 30 NONAME ; int RadioStationCarousel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?leftButtonIcon@RadioFrequencyStrip@@QBE?AVHbIcon@@XZ @ 31 NONAME ; class HbIcon RadioFrequencyStrip::leftButtonIcon(void) const - ?init@RadioStationCarousel@@QAEXAAVRadioUiLoader@@PAVRadioUiEngine@@@Z @ 32 NONAME ; void RadioStationCarousel::init(class RadioUiLoader &, class RadioUiEngine *) - ?insertFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 33 NONAME ; void RadioStationCarousel::insertFrequency(class QModelIndex const &, int, int) - ?toggleScanning@RadioMainView@@AAEXXZ @ 34 NONAME ; void RadioMainView::toggleScanning(void) - ?staticMetaObject@RadioMainView@@2UQMetaObject@@B @ 35 NONAME ; struct QMetaObject const RadioMainView::staticMetaObject - ?tr@RadioBannerLabel@@SA?AVQString@@PBD0H@Z @ 36 NONAME ; class QString RadioBannerLabel::tr(char const *, char const *, int) - ?getStaticMetaObject@RadioMainView@@SAABUQMetaObject@@XZ @ 37 NONAME ; struct QMetaObject const & RadioMainView::getStaticMetaObject(void) - ?prepareToRemoveFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 38 NONAME ; void RadioStationCarousel::prepareToRemoveFrequency(class QModelIndex const &, int, int) - ?setAutoScrollTime@RadioStationCarousel@@QAEXH@Z @ 39 NONAME ; void RadioStationCarousel::setAutoScrollTime(int) - ?setLeftButtonIcon@RadioFrequencyStrip@@QAEXABVHbIcon@@@Z @ 40 NONAME ; void RadioFrequencyStrip::setLeftButtonIcon(class HbIcon const &) - ?setItemVisible@RadioStationCarousel@@QAEX_N@Z @ 41 NONAME ; void RadioStationCarousel::setItemVisible(bool) - ?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 42 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *) - ?tr@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 43 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *) - ?skip@RadioStationCarousel@@AAEXW4Mode@StationSkip@@@Z @ 44 NONAME ; void RadioStationCarousel::skip(enum StationSkip::Mode) - ?selectorPos@RadioFrequencyStrip@@ABEHXZ @ 45 NONAME ; int RadioFrequencyStrip::selectorPos(void) const - ?currentStationItem@RadioStationCarousel@@AAEPAVRadioStationItem@@XZ @ 46 NONAME ; class RadioStationItem * RadioStationCarousel::currentStationItem(void) - ??1RadioWindow@@UAE@XZ @ 47 NONAME ; RadioWindow::~RadioWindow(void) - ?updateFrequencies@RadioStationCarousel@@AAEXXZ @ 48 NONAME ; void RadioStationCarousel::updateFrequencies(void) - ?metaObject@RadioBannerLabel@@UBEPBUQMetaObject@@XZ @ 49 NONAME ; struct QMetaObject const * RadioBannerLabel::metaObject(void) const - ?skipRequested@RadioFrequencyStrip@@IAEXH@Z @ 50 NONAME ; void RadioFrequencyStrip::skipRequested(int) - ?setTaggedIcon@RadioHistoryView@@QAEXABVHbIcon@@@Z @ 51 NONAME ; void RadioHistoryView::setTaggedIcon(class HbIcon const &) - ?setText@RadioFadingLabel@@QAEXABVQString@@@Z @ 52 NONAME ; void RadioFadingLabel::setText(class QString const &) - ?setNowPlayingIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 53 NONAME ; void RadioStationsView::setNowPlayingIcon(class HbIcon const &) - ?mousePressEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 54 NONAME ; void RadioStationCarousel::mousePressEvent(class QGraphicsSceneMouseEvent *) - ?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 55 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *) - ?tr@RadioStationsView@@SA?AVQString@@PBD0@Z @ 56 NONAME ; class QString RadioStationsView::tr(char const *, char const *) - ?favoriteIcon@RadioStationCarousel@@QBE?AVHbIcon@@XZ @ 57 NONAME ; class HbIcon RadioStationCarousel::favoriteIcon(void) const - ?qt_metacall@RadioBannerLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 58 NONAME ; int RadioBannerLabel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?orientationSection@RadioWindow@@QAE?AVQString@@XZ @ 59 NONAME ; class QString RadioWindow::orientationSection(void) - ?updateStation@RadioFrequencyStrip@@AAEXABVQModelIndex@@HH@Z @ 60 NONAME ; void RadioFrequencyStrip::updateStation(class QModelIndex const &, int, int) - ?setScanningMode@RadioMainView@@QAEX_N@Z @ 61 NONAME ; void RadioMainView::setScanningMode(bool) - ?favoriteIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 62 NONAME ; class HbIcon RadioStationsView::favoriteIcon(void) const - ?trUtf8@RadioMainView@@SA?AVQString@@PBD0H@Z @ 63 NONAME ; class QString RadioMainView::trUtf8(char const *, char const *, int) - ??1RadioFrequencyStrip@@UAE@XZ @ 64 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(void) - ?trUtf8@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 65 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *, int) - ?tr@RadioMainView@@SA?AVQString@@PBD0@Z @ 66 NONAME ; class QString RadioMainView::tr(char const *, char const *) - ?updateFavorites@RadioFrequencyStrip@@AAEXPAVRadioFrequencyItem@@@Z @ 67 NONAME ; void RadioFrequencyStrip::updateFavorites(class RadioFrequencyItem *) - ?showContextMenu@RadioHistoryView@@AAEXABVQModelIndex@@@Z @ 68 NONAME ; void RadioHistoryView::showContextMenu(class QModelIndex const &) - ?changeEvent@RadioFrequencyStrip@@EAEXPAVQEvent@@@Z @ 69 NONAME ; void RadioFrequencyStrip::changeEvent(class QEvent *) - ?updatePos@RadioStationCarousel@@AAEXH@Z @ 70 NONAME ; void RadioStationCarousel::updatePos(int) - ?staticMetaObject@RadioStationCarousel@@2UQMetaObject@@B @ 71 NONAME ; struct QMetaObject const RadioStationCarousel::staticMetaObject - ?qt_metacall@RadioFadingLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 72 NONAME ; int RadioFadingLabel::qt_metacall(enum QMetaObject::Call, int, void * *) - ?finishScanning@RadioStationsView@@AAEXXZ @ 73 NONAME ; void RadioStationsView::finishScanning(void) - ??0RadioFrequencyStrip@@QAE@XZ @ 74 NONAME ; RadioFrequencyStrip::RadioFrequencyStrip(void) - ?trUtf8@RadioBannerLabel@@SA?AVQString@@PBD0H@Z @ 75 NONAME ; class QString RadioBannerLabel::trUtf8(char const *, char const *, int) - ?skip@RadioMainView@@AAEXH@Z @ 76 NONAME ; void RadioMainView::skip(int) - ??0RadioMainView@@QAE@XZ @ 77 NONAME ; RadioMainView::RadioMainView(void) - ?setRightButtonIcon@RadioFrequencyStrip@@QAEXABVHbIcon@@@Z @ 78 NONAME ; void RadioFrequencyStrip::setRightButtonIcon(class HbIcon const &) - ?openContextMenu@RadioStationCarousel@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 79 NONAME ; void RadioStationCarousel::openContextMenu(class HbAbstractViewItem *, class QPointF const &) - ?staticMetaObject@RadioStationsView@@2UQMetaObject@@B @ 80 NONAME ; struct QMetaObject const RadioStationsView::staticMetaObject - ??_ERadioBannerLabel@@UAE@I@Z @ 81 NONAME ; RadioBannerLabel::~RadioBannerLabel(unsigned int) - ??_ERadioMainView@@UAE@I@Z @ 82 NONAME ; RadioMainView::~RadioMainView(unsigned int) - ??_ERadioWindow@@UAE@I@Z @ 83 NONAME ; RadioWindow::~RadioWindow(unsigned int) - ?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 84 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *) - ?qt_metacast@RadioStationsView@@UAEPAXPBD@Z @ 85 NONAME ; void * RadioStationsView::qt_metacast(char const *) - ?initSelector@RadioFrequencyStrip@@AAEXXZ @ 86 NONAME ; void RadioFrequencyStrip::initSelector(void) - ?addSongs@RadioHistoryView@@AAEXXZ @ 87 NONAME ; void RadioHistoryView::addSongs(void) - ?qt_metacall@RadioWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 88 NONAME ; int RadioWindow::qt_metacall(enum QMetaObject::Call, int, void * *) - ?qt_metacall@RadioFrequencyStrip@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 89 NONAME ; int RadioFrequencyStrip::qt_metacall(enum QMetaObject::Call, int, void * *) - ?openOtherStore@RadioHistoryView@@AAEXXZ @ 90 NONAME ; void RadioHistoryView::openOtherStore(void) - ?metaObject@RadioFrequencyStrip@@UBEPBUQMetaObject@@XZ @ 91 NONAME ; struct QMetaObject const * RadioFrequencyStrip::metaObject(void) const - ?startEffect@RadioFadingLabel@@AAEXABVQString@@PBD@Z @ 92 NONAME ; void RadioFadingLabel::startEffect(class QString const &, char const *) - ?trUtf8@RadioStationsView@@SA?AVQString@@PBD0@Z @ 93 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *) - ?qt_metacast@RadioBannerLabel@@UAEPAXPBD@Z @ 94 NONAME ; void * RadioBannerLabel::qt_metacast(char const *) - ?qt_metacall@RadioStationsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 95 NONAME ; int RadioStationsView::qt_metacall(enum QMetaObject::Call, int, void * *) - ?historyModel@RadioHistoryView@@ABEAAVRadioHistoryModel@@XZ @ 96 NONAME ; class RadioHistoryModel & RadioHistoryView::historyModel(void) const - ?activateHistoryView@RadioWindow@@QAEXXZ @ 97 NONAME ; void RadioWindow::activateHistoryView(void) - ??_ERadioStationCarousel@@UAE@I@Z @ 98 NONAME ; RadioStationCarousel::~RadioStationCarousel(unsigned int) - ?initPositions@RadioFrequencyStrip@@AAEXXZ @ 99 NONAME ; void RadioFrequencyStrip::initPositions(void) - ?carouselModel@RadioStationCarousel@@ABEPAVRadioCarouselModel@@XZ @ 100 NONAME ; class RadioCarouselModel * RadioStationCarousel::carouselModel(void) const - ?tr@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 101 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *) - ?getStaticMetaObject@RadioFadingLabel@@SAABUQMetaObject@@XZ @ 102 NONAME ; struct QMetaObject const & RadioFadingLabel::getStaticMetaObject(void) - ?trUtf8@RadioHistoryView@@SA?AVQString@@PBD0@Z @ 103 NONAME ; class QString RadioHistoryView::trUtf8(char const *, char const *) - ?metaObject@RadioMainView@@UBEPBUQMetaObject@@XZ @ 104 NONAME ; struct QMetaObject const * RadioMainView::metaObject(void) const - ?clearList@RadioHistoryView@@AAEXXZ @ 105 NONAME ; void RadioHistoryView::clearList(void) - ?qt_metacast@RadioWindow@@UAEPAXPBD@Z @ 106 NONAME ; void * RadioWindow::qt_metacast(char const *) - ?trimHtml@RadioFadingLabel@@AAE?AVQString@@ABV2@@Z @ 107 NONAME ; class QString RadioFadingLabel::trimHtml(class QString const &) - ?tr@RadioWindow@@SA?AVQString@@PBD0@Z @ 108 NONAME ; class QString RadioWindow::tr(char const *, char const *) - ?nonTaggedIcon@RadioHistoryView@@QBE?AVHbIcon@@XZ @ 109 NONAME ; class HbIcon RadioHistoryView::nonTaggedIcon(void) const - ?mouseReleaseEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 110 NONAME ; void RadioFrequencyStrip::mouseReleaseEvent(class QGraphicsSceneMouseEvent *) - ?updateItemPrimitive@RadioFrequencyStrip@@EAEXPAVQGraphicsItem@@H@Z @ 111 NONAME ; void RadioFrequencyStrip::updateItemPrimitive(class QGraphicsItem *, int) - ?showErrorMessage@RadioWindow@@QAEXABVQString@@@Z @ 112 NONAME ; void RadioWindow::showErrorMessage(class QString const &) - ?getStaticMetaObject@RadioFrequencyStrip@@SAABUQMetaObject@@XZ @ 113 NONAME ; struct QMetaObject const & RadioFrequencyStrip::getStaticMetaObject(void) - ?removeFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 114 NONAME ; void RadioStationCarousel::removeFrequency(class QModelIndex const &, int, int) - ??0RadioFadingLabel@@QAE@PAVQGraphicsItem@@@Z @ 115 NONAME ; RadioFadingLabel::RadioFadingLabel(class QGraphicsItem *) - ?activateView@RadioWindow@@AAEXAAV?$QPointer@VRadioViewBase@@@@ABVQString@@V?$QFlags@W4ViewSwitchFlag@Hb@@@@@Z @ 116 NONAME ; void RadioWindow::activateView(class QPointer &, class QString const &, class QFlags) - ?initListView@RadioStationsView@@AAEXXZ @ 117 NONAME ; void RadioStationsView::initListView(void) - ?initModel@RadioFrequencyStrip@@AAEXXZ @ 118 NONAME ; void RadioFrequencyStrip::initModel(void) - ?scrollToIndex@RadioStationCarousel@@AAEXABVQModelIndex@@V?$QFlags@W4ScrollFlag@RadioStationCarousel@@@@@Z @ 119 NONAME ; void RadioStationCarousel::scrollToIndex(class QModelIndex const &, class QFlags) - ??0RadioStationsView@@QAE@XZ @ 120 NONAME ; RadioStationsView::RadioStationsView(void) - ?frequency@RadioFrequencyStrip@@QBEIXZ @ 121 NONAME ; unsigned int RadioFrequencyStrip::frequency(void) const - ?updateItems@RadioFrequencyStrip@@AAEXXZ @ 122 NONAME ; void RadioFrequencyStrip::updateItems(void) - ??0RadioBannerLabel@@QAE@PAVQGraphicsItem@@@Z @ 123 NONAME ; RadioBannerLabel::RadioBannerLabel(class QGraphicsItem *) - ??1RadioStationCarousel@@UAE@XZ @ 124 NONAME ; RadioStationCarousel::~RadioStationCarousel(void) - ?deckButtonPressed@RadioHistoryView@@AAEXXZ @ 125 NONAME ; void RadioHistoryView::deckButtonPressed(void) - ?setNonTaggedIcon@RadioHistoryView@@QAEXABVHbIcon@@@Z @ 126 NONAME ; void RadioHistoryView::setNonTaggedIcon(class HbIcon const &) - ??_ERadioFrequencyStrip@@UAE@I@Z @ 127 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(unsigned int) - ?uiEngine@RadioWindow@@QAEAAVRadioUiEngine@@XZ @ 128 NONAME ; class RadioUiEngine & RadioWindow::uiEngine(void) - ?trUtf8@RadioMainView@@SA?AVQString@@PBD0@Z @ 129 NONAME ; class QString RadioMainView::trUtf8(char const *, char const *) - ?setCarouselModel@RadioStationCarousel@@QAEXPAVRadioCarouselModel@@@Z @ 130 NONAME ; void RadioStationCarousel::setCarouselModel(class RadioCarouselModel *) - ?setFadingEnabled@RadioFadingLabel@@QAEX_N@Z @ 131 NONAME ; void RadioFadingLabel::setFadingEnabled(bool) - ?showVolumeLevel@RadioWindow@@AAEXH@Z @ 132 NONAME ; void RadioWindow::showVolumeLevel(int) - ?frequencyChanged@RadioStationCarousel@@IAEXIH@Z @ 133 NONAME ; void RadioStationCarousel::frequencyChanged(unsigned int, int) - ?mousePressEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 134 NONAME ; void RadioFrequencyStrip::mousePressEvent(class QGraphicsSceneMouseEvent *) - ?getStaticMetaObject@RadioWindow@@SAABUQMetaObject@@XZ @ 135 NONAME ; struct QMetaObject const & RadioWindow::getStaticMetaObject(void) - ?trUtf8@RadioWindow@@SA?AVQString@@PBD0@Z @ 136 NONAME ; class QString RadioWindow::trUtf8(char const *, char const *) - ?timerFired@RadioStationCarousel@@AAEXXZ @ 137 NONAME ; void RadioStationCarousel::timerFired(void) - ?drawPixmap@RadioFrequencyStrip@@AAE?AVQPixmap@@IV?$QList@VRadioStation@@@@PAVRadioFrequencyItem@@@Z @ 138 NONAME ; class QPixmap RadioFrequencyStrip::drawPixmap(unsigned int, class QList, class RadioFrequencyItem *) - ?getStaticMetaObject@RadioStationsView@@SAABUQMetaObject@@XZ @ 139 NONAME ; struct QMetaObject const & RadioStationsView::getStaticMetaObject(void) - ?initEmptyItems@RadioFrequencyStrip@@AAEXXZ @ 140 NONAME ; void RadioFrequencyStrip::initEmptyItems(void) - ?listItemClicked@RadioStationsView@@AAEXABVQModelIndex@@@Z @ 141 NONAME ; void RadioStationsView::listItemClicked(class QModelIndex const &) - ?updateCurrentItem@RadioStationCarousel@@QAEXXZ @ 142 NONAME ; void RadioStationCarousel::updateCurrentItem(void) - ?updateAntennaStatus@RadioStationsView@@AAEX_N@Z @ 143 NONAME ; void RadioStationsView::updateAntennaStatus(bool) - ?tr@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 144 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *, int) - ??0RadioWindow@@QAE@PAVQWidget@@@Z @ 145 NONAME ; RadioWindow::RadioWindow(class QWidget *) - ?updateRadioText@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 146 NONAME ; void RadioStationCarousel::updateRadioText(class RadioStation const &) - ?updateAntennaStatus@RadioStationCarousel@@QAEX_N@Z @ 147 NONAME ; void RadioStationCarousel::updateAntennaStatus(bool) - ?paint@RadioBannerLabel@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 148 NONAME ; void RadioBannerLabel::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) - ?updateFavorite@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 149 NONAME ; void RadioFrequencyStrip::updateFavorite(class RadioStation const &) - ?setInfoText@RadioStationCarousel@@QAEXW4Type@CarouselInfoText@@@Z @ 150 NONAME ; void RadioStationCarousel::setInfoText(enum CarouselInfoText::Type) - ?initToLastTunedFrequency@RadioStationCarousel@@AAEXXZ @ 151 NONAME ; void RadioStationCarousel::initToLastTunedFrequency(void) - ?staticMetaObject@RadioFadingLabel@@2UQMetaObject@@B @ 152 NONAME ; struct QMetaObject const RadioFadingLabel::staticMetaObject - ?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 153 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *, int) - ?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 154 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *, int) - ?trUtf8@RadioBannerLabel@@SA?AVQString@@PBD0@Z @ 155 NONAME ; class QString RadioBannerLabel::trUtf8(char const *, char const *) - ?setFrequencyFromWidget@RadioMainView@@AAEXIH@Z @ 156 NONAME ; void RadioMainView::setFrequencyFromWidget(unsigned int, int) - ?getStaticMetaObject@RadioStationCarousel@@SAABUQMetaObject@@XZ @ 157 NONAME ; struct QMetaObject const & RadioStationCarousel::getStaticMetaObject(void) - ?metaObject@RadioFadingLabel@@UBEPBUQMetaObject@@XZ @ 158 NONAME ; struct QMetaObject const * RadioFadingLabel::metaObject(void) const - ?metaObject@RadioWindow@@UBEPBUQMetaObject@@XZ @ 159 NONAME ; struct QMetaObject const * RadioWindow::metaObject(void) const - ?staticMetaObject@RadioFrequencyStrip@@2UQMetaObject@@B @ 160 NONAME ; struct QMetaObject const RadioFrequencyStrip::staticMetaObject - ?updateClampingStyle@RadioStationCarousel@@AAEXXZ @ 161 NONAME ; void RadioStationCarousel::updateClampingStyle(void) - ?tr@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 162 NONAME ; class QString RadioStationsView::tr(char const *, char const *, int) - ?autoScrollTime@RadioStationCarousel@@QBEHXZ @ 163 NONAME ; int RadioStationCarousel::autoScrollTime(void) const - ?handleRightButton@RadioFrequencyStrip@@AAEXXZ @ 164 NONAME ; void RadioFrequencyStrip::handleRightButton(void) - ?initCurrentStationItem@RadioStationCarousel@@AAEXXZ @ 165 NONAME ; void RadioStationCarousel::initCurrentStationItem(void) - ?qt_metacast@RadioStationCarousel@@UAEPAXPBD@Z @ 166 NONAME ; void * RadioStationCarousel::qt_metacast(char const *) - ?clearList@RadioStationsView@@AAEXXZ @ 167 NONAME ; void RadioStationsView::clearList(void) - ?openOviStore@RadioHistoryView@@AAEXXZ @ 168 NONAME ; void RadioHistoryView::openOviStore(void) - ?showEvent@RadioFrequencyStrip@@EAEXPAVQShowEvent@@@Z @ 169 NONAME ; void RadioFrequencyStrip::showEvent(class QShowEvent *) - ?tr@RadioWindow@@SA?AVQString@@PBD0H@Z @ 170 NONAME ; class QString RadioWindow::tr(char const *, char const *, int) - ?seekRequested@RadioFrequencyStrip@@IAEXH@Z @ 171 NONAME ; void RadioFrequencyStrip::seekRequested(int) - ?handleLongRightButton@RadioFrequencyStrip@@AAEXXZ @ 172 NONAME ; void RadioFrequencyStrip::handleLongRightButton(void) - ?setFrequency@RadioFrequencyStrip@@QAEXIH@Z @ 173 NONAME ; void RadioFrequencyStrip::setFrequency(unsigned int, int) - ?init@RadioHistoryView@@EAEXXZ @ 174 NONAME ; void RadioHistoryView::init(void) - ?setFrequencyFromEngine@RadioMainView@@AAEXIH@Z @ 175 NONAME ; void RadioMainView::setFrequencyFromEngine(unsigned int, int) - ?tr@RadioHistoryView@@SA?AVQString@@PBD0H@Z @ 176 NONAME ; class QString RadioHistoryView::tr(char const *, char const *, int) - ?setFavoriteIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 177 NONAME ; void RadioStationsView::setFavoriteIcon(class HbIcon const &) - ??0RadioHistoryView@@QAE@XZ @ 178 NONAME ; RadioHistoryView::RadioHistoryView(void) - ?metaObject@RadioStationCarousel@@UBEPBUQMetaObject@@XZ @ 179 NONAME ; struct QMetaObject const * RadioStationCarousel::metaObject(void) const - ?effectFinished@RadioFadingLabel@@AAEXUEffectStatus@HbEffect@@@Z @ 180 NONAME ; void RadioFadingLabel::effectFinished(struct HbEffect::EffectStatus) - ?updateOrientation@RadioWindow@@AAEXW4Orientation@Qt@@@Z @ 181 NONAME ; void RadioWindow::updateOrientation(enum Qt::Orientation) - ?updateCurrentStation@RadioStationsView@@AAEXXZ @ 182 NONAME ; void RadioStationsView::updateCurrentStation(void) - ?setOrientation@RadioHistoryView@@EAEXXZ @ 183 NONAME ; void RadioHistoryView::setOrientation(void) - ?showButtons@RadioFrequencyStrip@@AAEXXZ @ 184 NONAME ; void RadioFrequencyStrip::showButtons(void) - ?nonFavoriteIcon@RadioStationCarousel@@QBE?AVHbIcon@@XZ @ 185 NONAME ; class HbIcon RadioStationCarousel::nonFavoriteIcon(void) const - ?scrollToFrequency@RadioFrequencyStrip@@AAEXIH@Z @ 186 NONAME ; void RadioFrequencyStrip::scrollToFrequency(unsigned int, int) - ?uiEngine@RadioStationCarousel@@QAEPAVRadioUiEngine@@XZ @ 187 NONAME ; class RadioUiEngine * RadioStationCarousel::uiEngine(void) - ?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 188 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *, int) - ?scrollPosChanged@RadioFrequencyStrip@@EAEXVQPointF@@@Z @ 189 NONAME ; void RadioFrequencyStrip::scrollPosChanged(class QPointF) - ?deleteStation@RadioStationsView@@AAEXXZ @ 190 NONAME ; void RadioStationsView::deleteStation(void) - ?activateMainView@RadioWindow@@QAEXXZ @ 191 NONAME ; void RadioWindow::activateMainView(void) - ?rightButtonIcon@RadioFrequencyStrip@@QBE?AVHbIcon@@XZ @ 192 NONAME ; class HbIcon RadioFrequencyStrip::rightButtonIcon(void) const - ?setScanningMode@RadioStationCarousel@@QAEX_N@Z @ 193 NONAME ; void RadioStationCarousel::setScanningMode(bool) - ?setNonFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 194 NONAME ; void RadioStationCarousel::setNonFavoriteIcon(class HbIcon const &) - ??1RadioFadingLabel@@UAE@XZ @ 195 NONAME ; RadioFadingLabel::~RadioFadingLabel(void) - ?isInScanningMode@RadioStationCarousel@@QBE_NXZ @ 196 NONAME ; bool RadioStationCarousel::isInScanningMode(void) const - ?tr@RadioHistoryView@@SA?AVQString@@PBD0@Z @ 197 NONAME ; class QString RadioHistoryView::tr(char const *, char const *) - ?staticMetaObject@RadioBannerLabel@@2UQMetaObject@@B @ 198 NONAME ; struct QMetaObject const RadioBannerLabel::staticMetaObject - ?checkIllegalPos@RadioFrequencyStrip@@AAEXXZ @ 199 NONAME ; void RadioFrequencyStrip::checkIllegalPos(void) - ?setFrequency@RadioStationCarousel@@QAEXIH@Z @ 200 NONAME ; void RadioStationCarousel::setFrequency(unsigned int, int) - ?getStaticMetaObject@RadioHistoryView@@SAABUQMetaObject@@XZ @ 201 NONAME ; struct QMetaObject const & RadioHistoryView::getStaticMetaObject(void) - ?activateStationsView@RadioWindow@@QAEXXZ @ 202 NONAME ; void RadioWindow::activateStationsView(void) - ?isAntennaAttached@RadioStationCarousel@@QBE_NXZ @ 203 NONAME ; bool RadioStationCarousel::isAntennaAttached(void) const - ?metaObject@RadioHistoryView@@UBEPBUQMetaObject@@XZ @ 204 NONAME ; struct QMetaObject const * RadioHistoryView::metaObject(void) const - ?tr@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 205 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *, int) - ??_ERadioHistoryView@@UAE@I@Z @ 206 NONAME ; RadioHistoryView::~RadioHistoryView(unsigned int) - ?updateAudioRoute@RadioMainView@@AAEX_N@Z @ 207 NONAME ; void RadioMainView::updateAudioRoute(bool) - ?gestureEvent@RadioFrequencyStrip@@EAEXPAVQGestureEvent@@@Z @ 208 NONAME ; void RadioFrequencyStrip::gestureEvent(class QGestureEvent *) - ?initView@RadioWindow@@AAEXXZ @ 209 NONAME ; void RadioWindow::initView(void) - ?qt_metacall@RadioHistoryView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 210 NONAME ; int RadioHistoryView::qt_metacall(enum QMetaObject::Call, int, void * *) - ?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 211 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *, int) - ?nowPlayingIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 212 NONAME ; class HbIcon RadioStationsView::nowPlayingIcon(void) const - ?toggleFavorite@RadioStationsView@@AAEXXZ @ 213 NONAME ; void RadioStationsView::toggleFavorite(void) - ?qt_metacast@RadioMainView@@UAEPAXPBD@Z @ 214 NONAME ; void * RadioMainView::qt_metacast(char const *) - ??1RadioStationsView@@UAE@XZ @ 215 NONAME ; RadioStationsView::~RadioStationsView(void) - ?handleLongLeftButton@RadioFrequencyStrip@@AAEXXZ @ 216 NONAME ; void RadioFrequencyStrip::handleLongLeftButton(void) - ?init@RadioMainView@@EAEXXZ @ 217 NONAME ; void RadioMainView::init(void) - ?showEvent@RadioStationsView@@EAEXPAVQShowEvent@@@Z @ 218 NONAME ; void RadioStationsView::showEvent(class QShowEvent *) - ??1RadioMainView@@UAE@XZ @ 219 NONAME ; RadioMainView::~RadioMainView(void) - ?hideButtons@RadioFrequencyStrip@@AAEXXZ @ 220 NONAME ; void RadioFrequencyStrip::hideButtons(void) - ?emitFrequencyChanged@RadioFrequencyStrip@@AAEXI@Z @ 221 NONAME ; void RadioFrequencyStrip::emitFrequencyChanged(unsigned int) - ?handleLeftButton@RadioFrequencyStrip@@AAEXXZ @ 222 NONAME ; void RadioFrequencyStrip::handleLeftButton(void) - ??_ERadioFadingLabel@@UAE@I@Z @ 223 NONAME ; RadioFadingLabel::~RadioFadingLabel(unsigned int) - ?trUtf8@RadioHistoryView@@SA?AVQString@@PBD0H@Z @ 224 NONAME ; class QString RadioHistoryView::trUtf8(char const *, char const *, int) - ?init@RadioFrequencyStrip@@QAEXPAVRadioUiEngine@@@Z @ 225 NONAME ; void RadioFrequencyStrip::init(class RadioUiEngine *) - ?init@RadioStationsView@@EAEXXZ @ 226 NONAME ; void RadioStationsView::init(void) - ?updateVisibilities@RadioHistoryView@@AAEXXZ @ 227 NONAME ; void RadioHistoryView::updateVisibilities(void) - ?updateControlVisibilities@RadioStationsView@@AAEXXZ @ 228 NONAME ; void RadioStationsView::updateControlVisibilities(void) - ?init@RadioWindow@@QAEXXZ @ 229 NONAME ; void RadioWindow::init(void) - ?listItemLongPressed@RadioStationsView@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 230 NONAME ; void RadioStationsView::listItemLongPressed(class HbAbstractViewItem *, class QPointF const &) - ?qt_metacall@RadioMainView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 231 NONAME ; int RadioMainView::qt_metacall(enum QMetaObject::Call, int, void * *) - ??1RadioHistoryView@@UAE@XZ @ 232 NONAME ; RadioHistoryView::~RadioHistoryView(void) - ?deckButtonPressed@RadioStationsView@@AAEXXZ @ 233 NONAME ; void RadioStationsView::deckButtonPressed(void) - ?qt_metacast@RadioFrequencyStrip@@UAEPAXPBD@Z @ 234 NONAME ; void * RadioFrequencyStrip::qt_metacast(char const *) - ??0RadioStationCarousel@@QAE@PAVRadioUiEngine@@@Z @ 235 NONAME ; RadioStationCarousel::RadioStationCarousel(class RadioUiEngine *) - ?staticMetaObject@RadioWindow@@2UQMetaObject@@B @ 236 NONAME ; struct QMetaObject const RadioWindow::staticMetaObject - ?staticMetaObject@RadioHistoryView@@2UQMetaObject@@B @ 237 NONAME ; struct QMetaObject const RadioHistoryView::staticMetaObject - ?metaObject@RadioStationsView@@UBEPBUQMetaObject@@XZ @ 238 NONAME ; struct QMetaObject const * RadioStationsView::metaObject(void) const - ?clearInfoText@RadioStationCarousel@@QAEXXZ @ 239 NONAME ; void RadioStationCarousel::clearInfoText(void) - ?cleanRdsData@RadioStationCarousel@@QAEXXZ @ 240 NONAME ; void RadioStationCarousel::cleanRdsData(void) - ?scanAnimationFinished@RadioStationCarousel@@IAEXXZ @ 241 NONAME ; void RadioStationCarousel::scanAnimationFinished(void) - ?userAccepted@RadioMainView@@EAEXXZ @ 242 NONAME ; void RadioMainView::userAccepted(void) - ?userAccepted@RadioStationsView@@EAEXXZ @ 243 NONAME ; void RadioStationsView::userAccepted(void) - ?renameDone@RadioStationsView@@AAEXPAVHbAction@@@Z @ 244 NONAME ; void RadioStationsView::renameDone(class HbAction *) - ?userAccepted@RadioHistoryView@@EAEXXZ @ 245 NONAME ; void RadioHistoryView::userAccepted(void) - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/commoninc/radio_global.h --- a/radioapp/commoninc/radio_global.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIO_GLOBAL_H_ -#define RADIO_GLOBAL_H_ - -// System includes -#include - -// Constants - -/** - * Radio frequency multiplier - */ -const int KFrequencyMultiplier = 1000000; - -const int KOneHertz = KFrequencyMultiplier; - -/** - * Desired amount of steps in the volume control in the UI - */ -const int KMaximumVolumeLevel = 20; - -/** - * Id of the offline profile - */ -const int KOfflineProfileId = 5; - -/** - * Radio Text Plus tag ids - */ -namespace RtPlus -{ - enum Tag { Dummy = 0, Title = 1, Artist = 4, Homepage = 39 }; -} - -namespace Seeking -{ - enum Direction - { - Down, - Up - }; - - enum State - { - NotSeeking, - SeekingUp, - SeekingDown - }; -} - -namespace StationSkip -{ - enum Mode - { - Previous, - Next, - PreviousFavorite, - NextFavorite - }; -} - -namespace TuneReason -{ - enum Reason - { - Unspecified, - FrequencyStrip, - StationCarousel, - StationsList, - Skip, - Seek, - StationScanInitialization, - StationScan, - }; -} - -namespace RadioRegion -{ - enum Region - { - None = -1, - Default, - Japan, - America, - Poland - }; -} - -namespace GenreEurope -{ - enum Europe - { - RdsNone, - RdsNews, - RdsCurrentAffairs, - RdsInformation, - RdsSport, - RdsEducation, - RdsDrama, - RdsCulture, - RdsScience, - RdsVariedSpeech, - RdsPopMusic, - RdsRockMusic, - RdsEasyListening, - RdsLightClassical, - RdsSeriousClassical, - RdsOtherMusic, - RdsWeather, - RdsFinance, - RdsChildrensProgrammes, - RdsSocialAffairs, - RdsReligion, - RdsPhoneIn, - RdsTravel, - RdsLeisure, - RdsJazzMusic, - RdsCountryMusic, - RdsNationalMusic, - RdsOldiesMusic, - RdsFolkMusic, - RdsDocumentary, - RdsAlarmTest, - RdsAlarm - }; -} - -namespace GenreAmerica -{ - enum America - { - RbdsNone, - RbdsNews, - RbdsInformation, - RbdsSports, - RbdsTalk, - RbdsRock, - RbdsClassicRock, - RbdsAdultHits, - RbdsSoftRock, - RbdsTop40, - RbdsCountry, - RbdsOldies, - RbdsSoft, - RbdsNostalgia, - RbdsJazz, - RbdsClassical, - RbdsRhythmAndBlues, - RbdsSoftRhythmAndBlues, - RbdsLanguage, - RbdsReligiousMusic, - RbdsReligiousTalk, - RbdsPersonality, - RbdsPublic, - RbdsCollege, - RbdsUnassigned1, - RbdsUnassigned2, - RbdsUnassigned3, - RbdsUnassigned4, - RbdsUnassigned5, - RbdsWeather, - RbdsEmergencyTest, - RbdsEmergency - }; -} - -#endif // RADIO_GLOBAL_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/commoninc/radiologger.h --- a/radioapp/commoninc/radiologger.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,294 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef _RADIOLOGGER_H_ -#define _RADIOLOGGER_H_ - -// System includes -#include - -// User includes - -#ifdef BUILD_WRAPPER_DLL - #define WRAPPER_DLL_EXPORT Q_DECL_EXPORT -#else - #define WRAPPER_DLL_EXPORT Q_DECL_IMPORT -#endif - -class WRAPPER_DLL_EXPORT RadioLogger -{ -public: - - enum Mode { Normal, MethodEnter, MethodExit, DecIndent }; - - static void initCombinedLogger(); - static void releaseCombinedLogger(); - - static void logMsg( const char* msg, Mode mode = Normal ); - -private: - RadioLogger(); - ~RadioLogger(); -}; - -// ============================================================================ -// START TIMESTAMP LOGGING -// ============================================================================ - -#ifdef TIMESTAMP_LOGGING_ENABLED - -#include -#include - -/** - * Timestamp logging macro. - * When the macro is defined, timestamp logging is on - * - * Example. These lines in the code... - * LOG_TIMESTAMP( "Start operation" ); - * ... - * LOG_TIMESTAMP( "End operation" ); - * - * ... print the following log lines - * FMRadio: Start operation "14:13:09.042" - * FMRadio: End operation "14:13:09.250" - */ -//#define LOG_TIMESTAMP(comment) do{ qDebug() << LOGMARKER << comment << QTime::currentTime().toString("hh:mm:ss.zzz"); }while(0) -#define LOG_TIMESTAMP(comment) LOG_FORMAT( comment ## " %s", GETSTRING( QTime::currentTime().toString("hh:mm:ss.zzz") ) ) - -#else - -#define LOG_TIMESTAMP(comment) - -#endif // TIMESTAMP_LOGGING_ENABLED - -// ============================================================================ -// END TIMESTAMP LOGGING -// ============================================================================ - -// ============================================================================ -// START FULL LOGGING -// ============================================================================ - -#ifdef LOGGING_ENABLED - -#include -#include - -// Log marker that is printed in the beginnig of each line -#define LOGMARKER "FMRadio:" - -// UI logs can be combined with engine logs by making the UI feed its log prints into -// the engine logger. This requires that we initialize the radio engine utils right here -// because the engine won't start up until much later. This is a bit ugly since the macros -// call Symbian code directly, but it was considered to be worth it to see UI and engine -// traces in the same file. -#if defined COMBINE_WITH_ENGINE_LOGGER && defined LOGGING_ENABLED && !defined BUILD_WIN32 -# include "../../../radioengine/utils/api/mradioenginelogger.h" -# include "../../../radioengine/utils/api/radioengineutils.h" -# define WRITELOG(msg) RadioLogger::logMsg( msg ); -# define WRITELOG_METHOD_ENTER(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodEnter ); -# define WRITELOG_METHOD_EXIT(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodExit ); -# define LOGGER_DEC_INDENT RadioLogger::logMsg( "", RadioLogger::DecIndent ); -# define WRITELOG_GETSTRING(msg) WRITELOG( GETSTRING( msg ) ) -# define INIT_COMBINED_LOGGER RadioLogger::initCombinedLogger(); -# define RELEASE_COMBINED_LOGGER RadioLogger::releaseCombinedLogger(); -#else -# define WRITELOG(msg) qDebug() << LOGMARKER << msg; -# define WRITELOG_METHOD_ENTER(msg) WRITELOG(msg) -# define WRITELOG_METHOD_EXIT(msg) WRITELOG(msg) -# define WRITELOG_GETSTRING(msg) WRITELOG(msg) -# define LOGGER_INC_INDENT -# define LOGGER_DEC_INDENT -# define INIT_COMBINED_LOGGER -# define RELEASE_COMBINED_LOGGER -#endif - -// Macro that simply logs a string -// Example: -// LOG( "This is a test" ); -#define LOG(string) do{ WRITELOG( string ) }while(0) - -// Helper macro to get a const char* out of a QString so that it can be logged. Can be used with LOG_FORMAT() -#define GETSTRING(qstring) qstring.toAscii().constData() - -// Macro that logs a string with multiple parameters -// Examples: -// LOG_FORMAT( "This is an integer %d, and this is a float with two digits %.2f", 42, 3.14 ); -// LOG_FORMAT( "This is a QString %s", GETSTRING(someQString) ); -#define LOG_FORMAT(fmt,args...) do{ QString tmp; WRITELOG_GETSTRING( tmp.sprintf(fmt,args) ) }while(0) - -// Macro that logs function enter, exit and exception -// Example (Simply put it in the beginning of a function): -// LOG_METHOD; -// Output: -// -> SomeFunction(int,const char*) -// <- SomeFunction(int,const char*) -// <- SomeFunction(int,const char*): Exception raised! -#define LOG_METHOD MethodLogger ___methodLogger( __PRETTY_FUNCTION__, "" ) - -// Same as the previous function logging macro with the addition of logging the return value -// Note! The return value can only be retrieved in the emulator. -// Example (Simply put it in the beginning of a function): -// LOG_METHOD_RET( "%d" ); -// Output: -// -> SomeFunction(int,const char*) -// <- SomeFunction(int,const char*) returning 42 -#define LOG_METHOD_RET(fmt) MethodLogger ___methodLogger( __PRETTY_FUNCTION__, fmt ) - -// Logs function enter but does not log exit or leave. This is meant to be lighter than LOG_METHOD macro -#define LOG_METHOD_ENTER LOG_FORMAT( "Enter: %s", __PRETTY_FUNCTION__ ) - -// Assert macro for logging. If the condition is false, the expression is performed -// Example: -// LOG_ASSERT( thisMustBeTrue, LOG_FORMAT( "OMG! That was not true: %d", thisMustBeTrue ) ); -#define LOG_ASSERT(cond,expr) do{ if (!cond) { expr; } }while(0) - -// Macro to hide a function variable that is used only when debugging is enabled. -// Expands to the variable name when debugging is enabled and to nothing when it is not -#define DEBUGVAR(a) a - -// Macro to log slot function caller by its class name. -#define LOG_SLOT_CALLER do { \ - QObject* caller = sender(); \ - if ( caller ) { \ - LOG_FORMAT( "SLOT %s called by %s. Objectname: %s", __PRETTY_FUNCTION__, \ - caller->metaObject()->className(), GETSTRING( caller->objectName() ) ); \ - } else { \ - LOG_FORMAT( "SLOT %s called as regular function. ", __PRETTY_FUNCTION__ ); \ - } \ - } while (0) - -// Class declaration -class WRAPPER_DLL_EXPORT MethodLogger -{ -public: - - MethodLogger( const char* function, const char* format ); - ~MethodLogger(); - -private: - - const char* mFunction; - const char* mFormat; - -}; - -#else // LOGGING_ENABLED - -# define LOG(string) -# define GETSTRING(qstring) -# define LOG_FORMAT(fmt,args...) -# define LOG_METHOD -# define LOG_METHOD_RET(fmt) -# define LOG_METHOD_ENTER -# define LOG_ASSERT(cond,expr) -# define DEBUGVAR(a) -# define LOG_SLOT_CALLER -# define INIT_COMBINED_LOGGER -# define RELEASE_COMBINED_LOGGER - - -// Dummy class -class WRAPPER_DLL_EXPORT MethodLogger -{ -public: - MethodLogger( const char*, const char* ); - ~MethodLogger(); -}; - -#endif // LOGGING_ENABLED - -#ifdef TRACE_TO_FILE - -# define INSTALL_MESSAGE_HANDLER FileLogger::installMessageHandler(QString(TRACE_OUTPUT_FILE), FILTER_BY_LOGMARKER); -# define UNINSTALL_MESSAGE_HANDLER FileLogger::uninstallMessageHandler(); - -// Class declaration -class WRAPPER_DLL_EXPORT FileLogger -{ -public: - - static void installMessageHandler( const QString& fileName, bool filterByMarker = true ); - static void uninstallMessageHandler(); - -private: - - static void handleMessage( QtMsgType type, const char* msg ); - -}; - -#else -# define INSTALL_MESSAGE_HANDLER -# define UNINSTALL_MESSAGE_HANDLER -#endif // TRACE_TO_FILE - -// ============================================================================ -// END FULL LOGGING -// ============================================================================ - -// ============================================================================ -// SIGNAL/SLOT CONNECTION CHECKER -// ============================================================================ -static bool connectAndTest( const QObject* sender, const char* signal, - const QObject* receiver, const char* member, - Qt::ConnectionType type = Qt::AutoConnection ) -{ - bool connected = QObject::connect( sender, signal, receiver, member, type ); - -# ifdef CONNECT_TEST_MODE - - if ( !connected ) - { - LOG( "Failed to make a signal-slot connection!" ); - LOG_FORMAT( "sender: %s", sender->metaObject()->className() ); - LOG_FORMAT( "signal: %s", signal ); - LOG_FORMAT( "receiver: %s", receiver->metaObject()->className() ); - LOG_FORMAT( "slot/signal: %s", signal ); - - #if CONNECT_TEST_MODE == 2 - Q_ASSERT( false ); - #endif - - // ---------------------------------------------------------------- - // SIGNAL-SLOT CONNECTION FAILED! - // ---------------------------------------------------------------- - } - -# endif - - return connected; -} - -#ifdef ENABLE_ASSERTS - - #define RADIO_ASSERT(cond,where,what) Q_ASSERT_X(cond,where,what) - -#else -# ifdef LOGGING_ENABLED -# define RADIO_ASSERT(cond,where,what) \ - do { \ - if ( !cond ) { \ - LOG_FORMAT( "ASSERT Failed! %s, %s", where, what ); \ - } \ - } while ( false ) -# else -# define RADIO_ASSERT(cond,where,what) -# endif // LOGGING_ENABLED -#endif // ENABLE_ASSERTS - -#endif // _RADIOLOGGER_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/commoninc/radionotificationdata.h --- a/radioapp/commoninc/radionotificationdata.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIONOTIFICATIONDATA_H -#define RADIONOTIFICATIONDATA_H - -class RadioNotificationData -{ -public: - - RadioNotificationData() : mType( 0 ) {} - RadioNotificationData( int type, const QVariant& data ) : - mType( type ), - mData( data ) - {} - - virtual ~RadioNotificationData() {} - - template void serialize( Stream& stream ) const; - template void deserialize( Stream& stream ); - - int mType; - QVariant mData; - -}; - -Q_DECLARE_USER_METATYPE(RadioNotificationData) - -template void RadioNotificationData::serialize( Stream& stream ) const -{ - stream << mType; - stream << mData; -} - -template void RadioNotificationData::deserialize( Stream& stream ) -{ - stream >> mType; - stream >> mData; -} - -Q_IMPLEMENT_USER_METATYPE(RadioNotificationData) - -#endif // RADIONOTIFICATIONDATA_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/commoninc/radioservicedef.h --- a/radioapp/commoninc/radioservicedef.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOSERVICES_H -#define RADIOSERVICES_H - -static QString RADIO_CONTROL_SERVICE = "com.nokia.services.Radio.IRadioControl"; -static QString RADIO_MONITOR_SERVICE = "com.nokia.services.Radio.IRadioMonitor"; - -const long KRadioPSUid = 0x101FF976; -const unsigned long KRadioStartupKey = 0x00000014; - -namespace RadioServiceCommand -{ - enum CommandId - { - Play, - Pause, - Previous, - Next, - SeekUp, - SeekDown, - Foreground, - Background - }; -} - -namespace RadioServiceNotification -{ - enum Type { - FavoriteCount = 1, - RadioStatus, - Frequency, - Name, - Genre, - RadioText, - HomePage, - Song - }; -} - -namespace RadioStatus -{ - enum Status { - UnSpecified, - Playing, - Muted, - Seeking, - NoAntenna - }; -} - -#endif // RADIOSERVICES_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/fmradioenginewrapperu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/eabi/fmradioenginewrapperu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,51 @@ +EXPORTS + _ZN11RadioLogger18initCombinedLoggerEv @ 1 NONAME + _ZN11RadioLogger21releaseCombinedLoggerEv @ 2 NONAME + _ZN11RadioLogger6logMsgEPKcNS_4ModeE @ 3 NONAME + _ZN12MethodLoggerC1EPKcS1_ @ 4 NONAME + _ZN12MethodLoggerC2EPKcS1_ @ 5 NONAME + _ZN12MethodLoggerD1Ev @ 6 NONAME + _ZN12MethodLoggerD2Ev @ 7 NONAME + _ZN18RadioEngineWrapper11addObserverEP26RadioEngineWrapperObserver @ 8 NONAME + _ZN18RadioEngineWrapper12setFrequencyEji @ 9 NONAME + _ZN18RadioEngineWrapper12startSeekingEN4Seek9DirectionEi @ 10 NONAME + _ZN18RadioEngineWrapper13cancelSeekingEv @ 11 NONAME + _ZN18RadioEngineWrapper13setRdsEnabledEb @ 12 NONAME + _ZN18RadioEngineWrapper14decreaseVolumeEv @ 13 NONAME + _ZN18RadioEngineWrapper14increaseVolumeEv @ 14 NONAME + _ZN18RadioEngineWrapper14removeObserverEP26RadioEngineWrapperObserver @ 15 NONAME + _ZN18RadioEngineWrapper16toggleAudioRouteEv @ 16 NONAME + _ZN18RadioEngineWrapper17setManualSeekModeEb @ 17 NONAME + _ZN18RadioEngineWrapper4initEv @ 18 NONAME + _ZN18RadioEngineWrapper7setMuteEbb @ 19 NONAME + _ZN18RadioEngineWrapper8settingsEv @ 20 NONAME + _ZN18RadioEngineWrapper9setVolumeEi @ 21 NONAME + _ZN18RadioEngineWrapperC1ER21RadioStationHandlerIf @ 22 NONAME + _ZN18RadioEngineWrapperC2ER21RadioStationHandlerIf @ 23 NONAME + _ZN18RadioEngineWrapperD1Ev @ 24 NONAME + _ZN18RadioEngineWrapperD2Ev @ 25 NONAME + _ZN26RadioEngineWrapperObserver11muteChangedEb @ 26 NONAME + _ZN26RadioEngineWrapperObserver12skipPreviousEv @ 27 NONAME + _ZN26RadioEngineWrapperObserver13volumeChangedEi @ 28 NONAME + _ZN26RadioEngineWrapperObserver14decreaseVolumeEv @ 29 NONAME + _ZN26RadioEngineWrapperObserver14increaseVolumeEv @ 30 NONAME + _ZN26RadioEngineWrapperObserver16tunedToFrequencyEji @ 31 NONAME + _ZN26RadioEngineWrapperObserver17audioRouteChangedEb @ 32 NONAME + _ZN26RadioEngineWrapperObserver18radioStatusChangedEb @ 33 NONAME + _ZN26RadioEngineWrapperObserver20antennaStatusChangedEb @ 34 NONAME + _ZN26RadioEngineWrapperObserver22rdsAvailabilityChangedEb @ 35 NONAME + _ZN26RadioEngineWrapperObserver8skipNextEv @ 36 NONAME + _ZNK18RadioEngineWrapper12maxFrequencyEv @ 37 NONAME + _ZNK18RadioEngineWrapper12minFrequencyEv @ 38 NONAME + _ZNK18RadioEngineWrapper16currentFrequencyEv @ 39 NONAME + _ZNK18RadioEngineWrapper16isFrequencyValidEj @ 40 NONAME + _ZNK18RadioEngineWrapper17frequencyStepSizeEv @ 41 NONAME + _ZNK18RadioEngineWrapper17isAntennaAttachedEv @ 42 NONAME + _ZNK18RadioEngineWrapper18isInManualSeekModeEv @ 43 NONAME + _ZNK18RadioEngineWrapper18isUsingLoudspeakerEv @ 44 NONAME + _ZNK18RadioEngineWrapper6regionEv @ 45 NONAME + _ZNK18RadioEngineWrapper7isMutedEv @ 46 NONAME + _ZNK18RadioEngineWrapper9isRadioOnEv @ 47 NONAME + _ZTI26RadioEngineWrapperObserver @ 48 NONAME + _ZTV26RadioEngineWrapperObserver @ 49 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/fmradiopresetstorageu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/eabi/fmradiopresetstorageu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,14 @@ +EXPORTS + _ZN18RadioPresetStorage10readPresetEiR14RadioStationIf @ 1 NONAME + _ZN18RadioPresetStorage10savePresetERK14RadioStationIf @ 2 NONAME + _ZN18RadioPresetStorage12deletePresetEi @ 3 NONAME + _ZN18RadioPresetStorageC1Ev @ 4 NONAME + _ZN18RadioPresetStorageC2Ev @ 5 NONAME + _ZN18RadioPresetStorageD1Ev @ 6 NONAME + _ZN18RadioPresetStorageD2Ev @ 7 NONAME + _ZNK18RadioPresetStorage10nextPresetEi @ 8 NONAME + _ZNK18RadioPresetStorage11firstPresetEv @ 9 NONAME + _ZNK18RadioPresetStorage11presetCountEv @ 10 NONAME + _ZNK18RadioPresetStorage18maxNumberOfPresetsEv @ 11 NONAME + _ZN18RadioPresetStorage15readFrequenciesER5QListIjE @ 12 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/fmradiouiengineu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/eabi/fmradiouiengineu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,248 @@ +EXPORTS + _ZN12RadioStation11setFavoriteEb @ 1 NONAME + _ZN12RadioStation12callSignCharEj @ 2 NONAME + _ZN12RadioStation12setFrequencyEj @ 3 NONAME + _ZN12RadioStation12setRadioTextERK7QString @ 4 NONAME + _ZN12RadioStation14callSignStringEj @ 5 NONAME + _ZN12RadioStation14parseFrequencyEj @ 6 NONAME + _ZN12RadioStation14setChangeFlagsE6QFlagsINS_10ChangeFlagEE @ 7 NONAME + _ZN12RadioStation14setPresetIndexEi @ 8 NONAME + _ZN12RadioStation15iterateCallSignEii @ 9 NONAME + _ZN12RadioStation16piCodeToCallSignEj @ 10 NONAME + _ZN12RadioStation16resetChangeFlagsEv @ 11 NONAME + _ZN12RadioStation16setDynamicPsTextERK7QString @ 12 NONAME + _ZN12RadioStation16setRadioTextPlusEiRK7QString @ 13 NONAME + _ZN12RadioStation18setUserDefinedNameERK7QString @ 14 NONAME + _ZN12RadioStation5resetEv @ 15 NONAME + _ZN12RadioStation6setUrlERK7QString @ 16 NONAME + _ZN12RadioStation7setNameERK7QString @ 17 NONAME + _ZN12RadioStation7setTypeE6QFlagsINS_8TypeFlagEE @ 18 NONAME + _ZN12RadioStation8setGenreEi @ 19 NONAME + _ZN12RadioStation9setPiCodeEiN11RadioRegion6RegionE @ 20 NONAME + _ZN12RadioStation9setPsTypeE6QFlagsINS_10PsTypeFlagEE @ 21 NONAME + _ZN12RadioStation9unsetTypeE6QFlagsINS_8TypeFlagEE @ 22 NONAME + _ZN12RadioStationC1ERKS_ @ 23 NONAME + _ZN12RadioStationC1Eij @ 24 NONAME + _ZN12RadioStationC1Ev @ 25 NONAME + _ZN12RadioStationC2ERKS_ @ 26 NONAME + _ZN12RadioStationC2Eij @ 27 NONAME + _ZN12RadioStationC2Ev @ 28 NONAME + _ZN12RadioStationD0Ev @ 29 NONAME + _ZN12RadioStationD1Ev @ 30 NONAME + _ZN12RadioStationD2Ev @ 31 NONAME + _ZN12RadioStationaSERKS_ @ 32 NONAME + _ZN13RadioUiEngine10setPowerOnEv @ 33 NONAME + _ZN13RadioUiEngine10toggleMuteEv @ 34 NONAME + _ZN13RadioUiEngine11muteChangedEb @ 35 NONAME + _ZN13RadioUiEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 36 NONAME + _ZN13RadioUiEngine11qt_metacastEPKc @ 37 NONAME + _ZN13RadioUiEngine11seekStationEi @ 38 NONAME + _ZN13RadioUiEngine11setPowerOffEi @ 39 NONAME + _ZN13RadioUiEngine11skipStationEN11StationSkip4ModeEj @ 40 NONAME + _ZN13RadioUiEngine12historyModelEv @ 41 NONAME + _ZN13RadioUiEngine12setFrequencyEji @ 42 NONAME + _ZN13RadioUiEngine12stationModelEv @ 43 NONAME + _ZN13RadioUiEngine13genreToStringEiN11GenreTarget6TargetE @ 44 NONAME + _ZN13RadioUiEngine13launchBrowserERK7QString @ 45 NONAME + _ZN13RadioUiEngine13scannerEngineEv @ 46 NONAME + _ZN13RadioUiEngine13volumeChangedEi @ 47 NONAME + _ZN13RadioUiEngine14openMusicStoreERK16RadioHistoryItemNS_10MusicStoreE @ 48 NONAME + _ZN13RadioUiEngine14seekingStartedEi @ 49 NONAME + _ZN13RadioUiEngine15emitMuteChangedEb @ 50 NONAME + _ZN13RadioUiEngine15stationsInRangeEjj @ 51 NONAME + _ZN13RadioUiEngine16isFirstTimeStartEv @ 52 NONAME + _ZN13RadioUiEngine16staticMetaObjectE @ 53 NONAME DATA 16 + _ZN13RadioUiEngine16toggleAudioRouteEv @ 54 NONAME + _ZN13RadioUiEngine16tunedToFrequencyEji @ 55 NONAME + _ZN13RadioUiEngine17addRecognizedSongERK7QStringS2_RK12RadioStation @ 56 NONAME + _ZN13RadioUiEngine17audioRouteChangedEb @ 57 NONAME + _ZN13RadioUiEngine17emitVolumeChangedEi @ 58 NONAME + _ZN13RadioUiEngine17launchRadioServerEv @ 59 NONAME + _ZN13RadioUiEngine17powerOffRequestedEv @ 60 NONAME + _ZN13RadioUiEngine17setManualSeekModeEb @ 61 NONAME + _ZN13RadioUiEngine18emitSeekingStartedEN4Seek9DirectionE @ 62 NONAME + _ZN13RadioUiEngine18lastTunedFrequencyEj @ 63 NONAME + _ZN13RadioUiEngine18radioStatusChangedEb @ 64 NONAME + _ZN13RadioUiEngine19createScannerEngineEv @ 65 NONAME + _ZN13RadioUiEngine19getStaticMetaObjectEv @ 66 NONAME + _ZN13RadioUiEngine20antennaStatusChangedEb @ 67 NONAME + _ZN13RadioUiEngine20emitTunedToFrequencyEji @ 68 NONAME + _ZN13RadioUiEngine21emitAudioRouteChangedEb @ 69 NONAME + _ZN13RadioUiEngine21launchSongRecognitionEv @ 70 NONAME + _ZN13RadioUiEngine22emitRadioStatusChangedEb @ 71 NONAME + _ZN13RadioUiEngine22rdsAvailabilityChangedEb @ 72 NONAME + _ZN13RadioUiEngine24emitAntennaStatusChangedEb @ 73 NONAME + _ZN13RadioUiEngine26emitRdsAvailabilityChangedEb @ 74 NONAME + _ZN13RadioUiEngine26setFirstTimeStartPerformedEb @ 75 NONAME + _ZN13RadioUiEngine29isSongRecognitionAppAvailableEv @ 76 NONAME + _ZN13RadioUiEngine4initEv @ 77 NONAME + _ZN13RadioUiEngine7setMuteEb @ 78 NONAME + _ZN13RadioUiEngine8settingsEv @ 79 NONAME + _ZN13RadioUiEngine9setVolumeEi @ 80 NONAME + _ZN13RadioUiEngineC1EP7QObject @ 81 NONAME + _ZN13RadioUiEngineC2EP7QObject @ 82 NONAME + _ZN13RadioUiEngineD0Ev @ 83 NONAME + _ZN13RadioUiEngineD1Ev @ 84 NONAME + _ZN13RadioUiEngineD2Ev @ 85 NONAME + _ZN16RadioHistoryItem10setStationERK7QString @ 86 NONAME + _ZN16RadioHistoryItem12setFrequencyEj @ 87 NONAME + _ZN16RadioHistoryItem14setCurrentTimeEv @ 88 NONAME + _ZN16RadioHistoryItem5resetEv @ 89 NONAME + _ZN16RadioHistoryItem8setTitleERK7QString @ 90 NONAME + _ZN16RadioHistoryItem9setArtistERK7QString @ 91 NONAME + _ZN16RadioHistoryItemC1ERK7QStringS2_ @ 92 NONAME + _ZN16RadioHistoryItemC1ERKS_ @ 93 NONAME + _ZN16RadioHistoryItemC1Ev @ 94 NONAME + _ZN16RadioHistoryItemC2ERK7QStringS2_ @ 95 NONAME + _ZN16RadioHistoryItemC2ERKS_ @ 96 NONAME + _ZN16RadioHistoryItemC2Ev @ 97 NONAME + _ZN16RadioHistoryItemD1Ev @ 98 NONAME + _ZN16RadioHistoryItemD2Ev @ 99 NONAME + _ZN16RadioHistoryItemaSERKS_ @ 100 NONAME + _ZN17RadioHistoryModel11qt_metacallEN11QMetaObject4CallEiPPv @ 101 NONAME + _ZN17RadioHistoryModel11qt_metacastEPKc @ 102 NONAME + _ZN17RadioHistoryModel13emitItemAddedEv @ 103 NONAME + _ZN17RadioHistoryModel13setShowTaggedEb @ 104 NONAME + _ZN17RadioHistoryModel13toggleTaggingERK16RadioHistoryItemi @ 105 NONAME + _ZN17RadioHistoryModel14setShowDetailsEb @ 106 NONAME + _ZN17RadioHistoryModel16addRadioTextPlusEiRK7QStringRK12RadioStation @ 107 NONAME + _ZN17RadioHistoryModel16currentSongResetEv @ 108 NONAME + _ZN17RadioHistoryModel16resetCurrentSongEv @ 109 NONAME + _ZN17RadioHistoryModel16staticMetaObjectE @ 110 NONAME DATA 16 + _ZN17RadioHistoryModel17reportChangedDataEii @ 111 NONAME + _ZN17RadioHistoryModel18clearRadioTextPlusEv @ 112 NONAME + _ZN17RadioHistoryModel19getStaticMetaObjectEv @ 113 NONAME + _ZN17RadioHistoryModel7addItemERK7QStringS2_RK12RadioStation @ 114 NONAME + _ZN17RadioHistoryModel8setIconsERK5QIconS2_ @ 115 NONAME + _ZN17RadioHistoryModel9itemAddedEv @ 116 NONAME + _ZN17RadioHistoryModel9removeAllEb @ 117 NONAME + _ZN17RadioHistoryModelC1ER13RadioUiEngine @ 118 NONAME + _ZN17RadioHistoryModelC2ER13RadioUiEngine @ 119 NONAME + _ZN17RadioHistoryModelD0Ev @ 120 NONAME + _ZN17RadioHistoryModelD1Ev @ 121 NONAME + _ZN17RadioHistoryModelD2Ev @ 122 NONAME + _ZN17RadioStationModel10addStationERK12RadioStation @ 123 NONAME + _ZN17RadioStationModel10initializeEP18RadioPresetStorageP18RadioEngineWrapper @ 124 NONAME + _ZN17RadioStationModel11findClosestEjN11StationSkip4ModeE @ 125 NONAME + _ZN17RadioStationModel11qt_metacallEN11QMetaObject4CallEiPPv @ 126 NONAME + _ZN17RadioStationModel11qt_metacastEPKc @ 127 NONAME + _ZN17RadioStationModel11saveStationER12RadioStation @ 128 NONAME + _ZN17RadioStationModel12setFavoritesERK5QListI11QModelIndexE @ 129 NONAME + _ZN17RadioStationModel13favoriteCountEv @ 130 NONAME + _ZN17RadioStationModel13removeStationERK12RadioStation @ 131 NONAME + _ZN17RadioStationModel13renameStationEiRK7QString @ 132 NONAME + _ZN17RadioStationModel14currentStationEv @ 133 NONAME + _ZN17RadioStationModel15emitDataChangedERK12RadioStation @ 134 NONAME + _ZN17RadioStationModel15favoriteChangedERK12RadioStation @ 135 NONAME + _ZN17RadioStationModel15findPresetIndexEi @ 136 NONAME + _ZN17RadioStationModel15findPresetIndexEiR12RadioStation @ 137 NONAME + _ZN17RadioStationModel15stationsInRangeEjj @ 138 NONAME + _ZN17RadioStationModel16dynamicPsChangedERK12RadioStation @ 139 NONAME + _ZN17RadioStationModel16staticMetaObjectE @ 140 NONAME DATA 16 + _ZN17RadioStationModel16stationHandlerIfEv @ 141 NONAME + _ZN17RadioStationModel17emitChangeSignalsERK12RadioStation6QFlagsINS0_10ChangeFlagEE @ 142 NONAME + _ZN17RadioStationModel17radioTextReceivedERK12RadioStation @ 143 NONAME + _ZN17RadioStationModel17removeByFrequencyEj @ 144 NONAME + _ZN17RadioStationModel18indexFromFrequencyEj @ 145 NONAME + _ZN17RadioStationModel18stationDataChangedERK12RadioStation @ 146 NONAME + _ZN17RadioStationModel19dynamicPsCheckEndedEv @ 147 NONAME + _ZN17RadioStationModel19getStaticMetaObjectEv @ 148 NONAME + _ZN17RadioStationModel19removeByPresetIndexEi @ 149 NONAME + _ZN17RadioStationModel19setFavoriteByPresetEib @ 150 NONAME + _ZN17RadioStationModel21findUnusedPresetIndexEv @ 151 NONAME + _ZN17RadioStationModel22setFavoriteByFrequencyEjb @ 152 NONAME + _ZN17RadioStationModel7setDataERK11QModelIndexRK8QVarianti @ 153 NONAME + _ZN17RadioStationModel8setIconsERK5QIconS2_ @ 154 NONAME + _ZN17RadioStationModel9removeAllENS_10RemoveModeE @ 155 NONAME + _ZN17RadioStationModel9setDetailE6QFlagsINS_10DetailFlagEE @ 156 NONAME + _ZN17RadioStationModelC1ER20RadioUiEnginePrivate @ 157 NONAME + _ZN17RadioStationModelC2ER20RadioUiEnginePrivate @ 158 NONAME + _ZN17RadioStationModelD0Ev @ 159 NONAME + _ZN17RadioStationModelD1Ev @ 160 NONAME + _ZN17RadioStationModelD2Ev @ 161 NONAME + _ZN18RadioScannerEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 162 NONAME + _ZN18RadioScannerEngine11qt_metacastEPKc @ 163 NONAME + _ZN18RadioScannerEngine12stationFoundERK12RadioStation @ 164 NONAME + _ZN18RadioScannerEngine13startScanningEv @ 165 NONAME + _ZN18RadioScannerEngine16continueScanningEv @ 166 NONAME + _ZN18RadioScannerEngine16emitStationFoundERK12RadioStation @ 167 NONAME + _ZN18RadioScannerEngine16staticMetaObjectE @ 168 NONAME DATA 16 + _ZN18RadioScannerEngine19addScannedFrequencyEj @ 169 NONAME + _ZN18RadioScannerEngine19getStaticMetaObjectEv @ 170 NONAME + _ZN18RadioScannerEngine6cancelEv @ 171 NONAME + _ZN18RadioScannerEngineC1ER20RadioUiEnginePrivate @ 172 NONAME + _ZN18RadioScannerEngineC2ER20RadioUiEnginePrivate @ 173 NONAME + _ZN18RadioScannerEngineD0Ev @ 174 NONAME + _ZN18RadioScannerEngineD1Ev @ 175 NONAME + _ZN18RadioScannerEngineD2Ev @ 176 NONAME + _ZNK12RadioStation10hasChangedEv @ 177 NONAME + _ZNK12RadioStation10isDetachedEv @ 178 NONAME + _ZNK12RadioStation10isFavoriteEv @ 179 NONAME + _ZNK12RadioStation11changeFlagsEv @ 180 NONAME + _ZNK12RadioStation11presetIndexEv @ 181 NONAME + _ZNK12RadioStation13dynamicPsTextEv @ 182 NONAME + _ZNK12RadioStation14hasDataChangedE6QFlagsINS_10ChangeFlagEE @ 183 NONAME + _ZNK12RadioStation15frequencyStringEv @ 184 NONAME + _ZNK12RadioStation3urlEv @ 185 NONAME + _ZNK12RadioStation4nameEv @ 186 NONAME + _ZNK12RadioStation5genreEv @ 187 NONAME + _ZNK12RadioStation6isTypeE6QFlagsINS_8TypeFlagEE @ 188 NONAME + _ZNK12RadioStation6piCodeEv @ 189 NONAME + _ZNK12RadioStation6psTypeEv @ 190 NONAME + _ZNK12RadioStation7isValidEv @ 191 NONAME + _ZNK12RadioStation9frequencyEv @ 192 NONAME + _ZNK12RadioStation9isRenamedEv @ 193 NONAME + _ZNK12RadioStation9radioTextEv @ 194 NONAME + _ZNK13RadioUiEngine10isScanningEv @ 195 NONAME + _ZNK13RadioUiEngine10metaObjectEv @ 196 NONAME + _ZNK13RadioUiEngine12maxFrequencyEv @ 197 NONAME + _ZNK13RadioUiEngine12minFrequencyEv @ 198 NONAME + _ZNK13RadioUiEngine13isInitializedEv @ 199 NONAME + _ZNK13RadioUiEngine13isPoweringOffEv @ 200 NONAME + _ZNK13RadioUiEngine16currentFrequencyEv @ 201 NONAME + _ZNK13RadioUiEngine17frequencyStepSizeEv @ 202 NONAME + _ZNK13RadioUiEngine17isAntennaAttachedEv @ 203 NONAME + _ZNK13RadioUiEngine18isInManualSeekModeEv @ 204 NONAME + _ZNK13RadioUiEngine18isUsingLoudspeakerEv @ 205 NONAME + _ZNK13RadioUiEngine6regionEv @ 206 NONAME + _ZNK13RadioUiEngine7isMutedEv @ 207 NONAME + _ZNK13RadioUiEngine9isRadioOnEv @ 208 NONAME + _ZNK16RadioHistoryItem10isDetachedEv @ 209 NONAME + _ZNK16RadioHistoryItem17isRecognizedByRdsEv @ 210 NONAME + _ZNK16RadioHistoryItem2idEv @ 211 NONAME + _ZNK16RadioHistoryItem4timeEv @ 212 NONAME + _ZNK16RadioHistoryItem5titleEv @ 213 NONAME + _ZNK16RadioHistoryItem6artistEv @ 214 NONAME + _ZNK16RadioHistoryItem7isValidEv @ 215 NONAME + _ZNK16RadioHistoryItem7stationEv @ 216 NONAME + _ZNK16RadioHistoryItem8isTaggedEv @ 217 NONAME + _ZNK16RadioHistoryItem9frequencyEv @ 218 NONAME + _ZNK17RadioHistoryModel10metaObjectEv @ 219 NONAME + _ZNK17RadioHistoryModel11itemAtIndexERK11QModelIndex @ 220 NONAME + _ZNK17RadioHistoryModel23isCurrentSongRecognizedEv @ 221 NONAME + _ZNK17RadioHistoryModel4dataERK11QModelIndexi @ 222 NONAME + _ZNK17RadioHistoryModel8rowCountERK11QModelIndex @ 223 NONAME + _ZNK17RadioStationModel10metaObjectEv @ 224 NONAME + _ZNK17RadioStationModel11findStationEjN12FindCriteria8CriteriaE @ 225 NONAME + _ZNK17RadioStationModel13findFrequencyEjR12RadioStationN12FindCriteria8CriteriaE @ 226 NONAME + _ZNK17RadioStationModel14currentStationEv @ 227 NONAME + _ZNK17RadioStationModel4dataERK11QModelIndexi @ 228 NONAME + _ZNK17RadioStationModel4listEv @ 229 NONAME + _ZNK17RadioStationModel5flagsERK11QModelIndex @ 230 NONAME + _ZNK17RadioStationModel8containsEj @ 231 NONAME + _ZNK17RadioStationModel8rowCountERK11QModelIndex @ 232 NONAME + _ZNK17RadioStationModel9stationAtEi @ 233 NONAME + _ZNK18RadioScannerEngine10isScanningEv @ 234 NONAME + _ZNK18RadioScannerEngine10metaObjectEv @ 235 NONAME + _ZTI12RadioStation @ 236 NONAME + _ZTI13RadioUiEngine @ 237 NONAME + _ZTI17RadioHistoryModel @ 238 NONAME + _ZTI17RadioStationModel @ 239 NONAME + _ZTI18RadioScannerEngine @ 240 NONAME + _ZTV12RadioStation @ 241 NONAME + _ZTV13RadioUiEngine @ 242 NONAME + _ZTV17RadioHistoryModel @ 243 NONAME + _ZTV17RadioStationModel @ 244 NONAME + _ZTV18RadioScannerEngine @ 245 NONAME + _ZN13RadioUiEngine10lastVolumeEv @ 246 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/fmradiowidgetsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/eabi/fmradiowidgetsu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,169 @@ +EXPORTS + _ZN11RadioWindow11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME + _ZN11RadioWindow11qt_metacastEPKc @ 2 NONAME + _ZN11RadioWindow12activateViewEP13RadioViewBaseRK7QString6QFlagsIN2Hb14ViewSwitchFlagEE @ 3 NONAME + _ZN11RadioWindow15showVolumeLevelEi @ 4 NONAME + _ZN11RadioWindow16activateMainViewEv @ 5 NONAME + _ZN11RadioWindow16showErrorMessageERK7QString @ 6 NONAME + _ZN11RadioWindow16staticMetaObjectE @ 7 NONAME DATA 16 + _ZN11RadioWindow17queryOfflineUsageEN10QtMobility17QSystemDeviceInfo7ProfileE @ 8 NONAME + _ZN11RadioWindow17updateOrientationEN2Qt11OrientationE @ 9 NONAME + _ZN11RadioWindow18orientationSectionEv @ 10 NONAME + _ZN11RadioWindow19activateHistoryViewEv @ 11 NONAME + _ZN11RadioWindow19getStaticMetaObjectEv @ 12 NONAME + _ZN11RadioWindow19updateAntennaStatusEb @ 13 NONAME + _ZN11RadioWindow20activateStationsViewEv @ 14 NONAME + _ZN11RadioWindow4initEPN10QtMobility17QSystemDeviceInfoE @ 15 NONAME + _ZN11RadioWindow8initViewEv @ 16 NONAME + _ZN11RadioWindowC1EP7QWidget @ 17 NONAME + _ZN11RadioWindowC2EP7QWidget @ 18 NONAME + _ZN11RadioWindowD0Ev @ 19 NONAME + _ZN11RadioWindowD1Ev @ 20 NONAME + _ZN11RadioWindowD2Ev @ 21 NONAME + _ZN16RadioFadingLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 22 NONAME + _ZN16RadioFadingLabel11qt_metacastEPKc @ 23 NONAME + _ZN16RadioFadingLabel11startEffectERK7QStringPKc @ 24 NONAME + _ZN16RadioFadingLabel14effectFinishedEN8HbEffect12EffectStatusE @ 25 NONAME + _ZN16RadioFadingLabel16setFadingEnabledEb @ 26 NONAME + _ZN16RadioFadingLabel16staticMetaObjectE @ 27 NONAME DATA 16 + _ZN16RadioFadingLabel19getStaticMetaObjectEv @ 28 NONAME + _ZN16RadioFadingLabel20setTextWithoutFadingERK7QString @ 29 NONAME + _ZN16RadioFadingLabel7setTextERK7QString @ 30 NONAME + _ZN16RadioFadingLabel8trimHtmlERK7QString @ 31 NONAME + _ZN16RadioFadingLabelC1EP13QGraphicsItem @ 32 NONAME + _ZN16RadioFadingLabelC2EP13QGraphicsItem @ 33 NONAME + _ZN19RadioFrequencyStrip10drawPixmapEj5QListI12RadioStationEP18RadioFrequencyItem @ 34 NONAME + _ZN19RadioFrequencyStrip10timerEventEP11QTimerEvent @ 35 NONAME + _ZN19RadioFrequencyStrip10updateItemEP18RadioFrequencyItemjj @ 36 NONAME + _ZN19RadioFrequencyStrip11changeEventEP6QEvent @ 37 NONAME + _ZN19RadioFrequencyStrip11hideButtonsEv @ 38 NONAME + _ZN19RadioFrequencyStrip11initButtonsEv @ 39 NONAME + _ZN19RadioFrequencyStrip11qt_metacallEN11QMetaObject4CallEiPPv @ 40 NONAME + _ZN19RadioFrequencyStrip11qt_metacastEPKc @ 41 NONAME + _ZN19RadioFrequencyStrip11resizeEventEP25QGraphicsSceneResizeEvent @ 42 NONAME + _ZN19RadioFrequencyStrip11showButtonsEv @ 43 NONAME + _ZN19RadioFrequencyStrip12gestureEventEP13QGestureEvent @ 44 NONAME + _ZN19RadioFrequencyStrip12initSelectorEv @ 45 NONAME + _ZN19RadioFrequencyStrip12setFrequencyEjiN6Scroll9DirectionE @ 46 NONAME + _ZN19RadioFrequencyStrip13initPositionsEv @ 47 NONAME + _ZN19RadioFrequencyStrip13removeStationERK11QModelIndexii @ 48 NONAME + _ZN19RadioFrequencyStrip13seekRequestedEi @ 49 NONAME + _ZN19RadioFrequencyStrip13setItemHeightEi @ 50 NONAME + _ZN19RadioFrequencyStrip13skipRequestedEi @ 51 NONAME + _ZN19RadioFrequencyStrip13updateStationERK11QModelIndexii @ 52 NONAME + _ZN19RadioFrequencyStrip14initEmptyItemsEv @ 53 NONAME + _ZN19RadioFrequencyStrip14updateAllItemsEv @ 54 NONAME + _ZN19RadioFrequencyStrip14updateFavoriteERK12RadioStation @ 55 NONAME + _ZN19RadioFrequencyStrip15addFrequencyPosEijP18RadioFrequencyItem @ 56 NONAME + _ZN19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 57 NONAME + _ZN19RadioFrequencyStrip15setScanningModeEb @ 58 NONAME + _ZN19RadioFrequencyStrip16cancelManualSeekEv @ 59 NONAME + _ZN19RadioFrequencyStrip16frequencyChangedEjii @ 60 NONAME + _ZN19RadioFrequencyStrip16handleLeftButtonEv @ 61 NONAME + _ZN19RadioFrequencyStrip16scrollPosChangedEv @ 62 NONAME + _ZN19RadioFrequencyStrip16staticMetaObjectE @ 63 NONAME DATA 16 + _ZN19RadioFrequencyStrip16toggleManualSeekEv @ 64 NONAME + _ZN19RadioFrequencyStrip17addScannedStationERK12RadioStation @ 65 NONAME + _ZN19RadioFrequencyStrip17handleRightButtonEv @ 66 NONAME + _ZN19RadioFrequencyStrip17manualSeekChangedEb @ 67 NONAME + _ZN19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 68 NONAME + _ZN19RadioFrequencyStrip17scrollToFrequencyEjN6Scroll9DirectionEiN10TuneReason6ReasonE @ 69 NONAME + _ZN19RadioFrequencyStrip18handleScrollingEndEv @ 70 NONAME + _ZN19RadioFrequencyStrip19createItemPrimitiveEP13QGraphicsItem @ 71 NONAME + _ZN19RadioFrequencyStrip19getStaticMetaObjectEv @ 72 NONAME + _ZN19RadioFrequencyStrip19updateItemPrimitiveEP13QGraphicsItemi @ 73 NONAME + _ZN19RadioFrequencyStrip20emitFrequencyChangedEj @ 74 NONAME + _ZN19RadioFrequencyStrip20handleLongLeftButtonEv @ 75 NONAME + _ZN19RadioFrequencyStrip21handleLongRightButtonEv @ 76 NONAME + _ZN19RadioFrequencyStrip21updateStationsInRangeEiib @ 77 NONAME + _ZN19RadioFrequencyStrip4initEP13RadioUiEngineR13RadioUiLoader @ 78 NONAME + _ZN19RadioFrequencyStrip9initModelEv @ 79 NONAME + _ZN19RadioFrequencyStripC1Ev @ 80 NONAME + _ZN19RadioFrequencyStripC2Ev @ 81 NONAME + _ZN20RadioStationCarousel10timerFiredEv @ 82 NONAME + _ZN20RadioStationCarousel11findStationEj @ 83 NONAME + _ZN20RadioStationCarousel11qt_metacallEN11QMetaObject4CallEiPPv @ 84 NONAME + _ZN20RadioStationCarousel11qt_metacastEPKc @ 85 NONAME + _ZN20RadioStationCarousel11resizeEventEP25QGraphicsSceneResizeEvent @ 86 NONAME + _ZN20RadioStationCarousel11setInfoTextEN16CarouselInfoText4TypeE @ 87 NONAME + _ZN20RadioStationCarousel12cleanRdsDataEv @ 88 NONAME + _ZN20RadioStationCarousel12gestureEventEP13QGestureEvent @ 89 NONAME + _ZN20RadioStationCarousel12setFrequencyEjiN6Scroll9DirectionE @ 90 NONAME + _ZN20RadioStationCarousel13clearInfoTextEv @ 91 NONAME + _ZN20RadioStationCarousel13drawOffScreenER8QPainter @ 92 NONAME + _ZN20RadioStationCarousel13localizeGenreEi @ 93 NONAME + _ZN20RadioStationCarousel13scrollToIndexEiN6Scroll9DirectionE6QFlagsINS_10ScrollFlagEE @ 94 NONAME + _ZN20RadioStationCarousel13skipRequestedEi @ 95 NONAME + _ZN20RadioStationCarousel14setCenterIndexEi6QFlagsINS_10ScrollFlagEE @ 96 NONAME + _ZN20RadioStationCarousel14updateStationsEv @ 97 NONAME + _ZN20RadioStationCarousel15cancelAnimationEv @ 98 NONAME + _ZN20RadioStationCarousel15mousePressEventEP24QGraphicsSceneMouseEvent @ 99 NONAME + _ZN20RadioStationCarousel15setFavoriteIconERK6HbIcon @ 100 NONAME + _ZN20RadioStationCarousel15setScanningModeEb @ 101 NONAME + _ZN20RadioStationCarousel15updateRadioTextERK12RadioStation @ 102 NONAME + _ZN20RadioStationCarousel16frequencyChangedEjii @ 103 NONAME + _ZN20RadioStationCarousel16handleUrlClickedERK12RadioStation @ 104 NONAME + _ZN20RadioStationCarousel16scrollPosChangedERK7QPointF @ 105 NONAME + _ZN20RadioStationCarousel16staticMetaObjectE @ 106 NONAME DATA 16 + _ZN20RadioStationCarousel17adjustAfterScrollEv @ 107 NONAME + _ZN20RadioStationCarousel17animateNewStationERK12RadioStation @ 108 NONAME + _ZN20RadioStationCarousel17handleIconClickedERK12RadioStation @ 109 NONAME + _ZN20RadioStationCarousel17setAutoScrollTimeEi @ 110 NONAME + _ZN20RadioStationCarousel17setManualSeekModeEb @ 111 NONAME + _ZN20RadioStationCarousel18setNonFavoriteIconERK6HbIcon @ 112 NONAME + _ZN20RadioStationCarousel19calculateDifferenceEiRN6Scroll9DirectionE @ 113 NONAME + _ZN20RadioStationCarousel19getStaticMetaObjectEv @ 114 NONAME + _ZN20RadioStationCarousel19updateAntennaStatusEb @ 115 NONAME + _ZN20RadioStationCarousel21scanAnimationFinishedEv @ 116 NONAME + _ZN20RadioStationCarousel22handleRadiotextClickedERK12RadioStation @ 117 NONAME + _ZN20RadioStationCarousel24setAlternateSkippingModeEb @ 118 NONAME + _ZN20RadioStationCarousel4initER13RadioUiLoaderP13RadioUiEngine @ 119 NONAME + _ZN20RadioStationCarousel4skipEN11StationSkip4ModeE @ 120 NONAME + _ZN20RadioStationCarousel6updateERK12RadioStation @ 121 NONAME + _ZN20RadioStationCarousel8uiEngineEv @ 122 NONAME + _ZN20RadioStationCarousel9adjustPosEi @ 123 NONAME + _ZN20RadioStationCarousel9nextIndexEi @ 124 NONAME + _ZN20RadioStationCarousel9prevIndexEi @ 125 NONAME + _ZN20RadioStationCarousel9showEventEP10QShowEvent @ 126 NONAME + _ZN20RadioStationCarousel9trimIndexEi @ 127 NONAME + _ZN20RadioStationCarouselC1EP13QGraphicsItem @ 128 NONAME + _ZN20RadioStationCarouselC2EP13QGraphicsItem @ 129 NONAME + _ZNK11RadioWindow10metaObjectEv @ 130 NONAME + _ZNK16RadioFadingLabel10metaObjectEv @ 131 NONAME + _ZNK19RadioFrequencyStrip10itemHeightEv @ 132 NONAME + _ZNK19RadioFrequencyStrip10metaObjectEv @ 133 NONAME + _ZNK19RadioFrequencyStrip11selectorPosEv @ 134 NONAME + _ZNK19RadioFrequencyStrip18isInManualSeekModeEv @ 135 NONAME + _ZNK19RadioFrequencyStrip9frequencyEv @ 136 NONAME + _ZNK20RadioStationCarousel10metaObjectEv @ 137 NONAME + _ZNK20RadioStationCarousel12favoriteIconEv @ 138 NONAME + _ZNK20RadioStationCarousel13isInitializedEv @ 139 NONAME + _ZNK20RadioStationCarousel14autoScrollTimeEv @ 140 NONAME + _ZNK20RadioStationCarousel14isInManualSeekEv @ 141 NONAME + _ZNK20RadioStationCarousel15nonFavoriteIconEv @ 142 NONAME + _ZNK20RadioStationCarousel16isInScanningModeEv @ 143 NONAME + _ZNK20RadioStationCarousel17isAntennaAttachedEv @ 144 NONAME + _ZNK20RadioStationCarousel18isScrollingAllowedEv @ 145 NONAME + _ZTI11RadioWindow @ 146 NONAME + _ZTI16RadioFadingLabel @ 147 NONAME + _ZTI19RadioFrequencyStrip @ 148 NONAME + _ZTI20RadioStationCarousel @ 149 NONAME + _ZTV11RadioWindow @ 150 NONAME + _ZTV16RadioFadingLabel @ 151 NONAME + _ZTV19RadioFrequencyStrip @ 152 NONAME + _ZTV20RadioStationCarousel @ 153 NONAME + _ZThn28_N20RadioStationCarousel11findStationEj @ 154 NONAME + _ZThn28_N20RadioStationCarousel13localizeGenreEi @ 155 NONAME + _ZThn28_N20RadioStationCarousel16handleUrlClickedERK12RadioStation @ 156 NONAME + _ZThn28_N20RadioStationCarousel17handleIconClickedERK12RadioStation @ 157 NONAME + _ZThn28_N20RadioStationCarousel22handleRadiotextClickedERK12RadioStation @ 158 NONAME + _ZThn28_NK20RadioStationCarousel12favoriteIconEv @ 159 NONAME + _ZThn28_NK20RadioStationCarousel14isInManualSeekEv @ 160 NONAME + _ZThn28_NK20RadioStationCarousel15nonFavoriteIconEv @ 161 NONAME + _ZThn8_N11RadioWindowD0Ev @ 162 NONAME + _ZThn8_N11RadioWindowD1Ev @ 163 NONAME + _ZThn8_N19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 164 NONAME + _ZThn8_N19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 165 NONAME + _ZThn8_N20RadioStationCarousel15mousePressEventEP24QGraphicsSceneMouseEvent @ 166 NONAME + _ZN19RadioFrequencyStrip7makeTabEfi @ 167 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/radioenginewrapperu.def --- a/radioapp/eabi/radioenginewrapperu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -EXPORTS - _ZN11RadioLogger18initCombinedLoggerEv @ 1 NONAME - _ZN11RadioLogger21releaseCombinedLoggerEv @ 2 NONAME - _ZN11RadioLogger6logMsgEPKcNS_4ModeE @ 3 NONAME - _ZN12MethodLoggerC1EPKcS1_ @ 4 NONAME - _ZN12MethodLoggerC2EPKcS1_ @ 5 NONAME - _ZN12MethodLoggerD1Ev @ 6 NONAME - _ZN12MethodLoggerD2Ev @ 7 NONAME - _ZN18RadioEngineWrapper11addObserverEP26RadioEngineWrapperObserver @ 8 NONAME - _ZN18RadioEngineWrapper12startSeekingEN7Seeking9DirectionEi @ 9 NONAME - _ZN18RadioEngineWrapper13cancelSeekingEv @ 10 NONAME - _ZN18RadioEngineWrapper13tuneFrequencyEji @ 11 NONAME - _ZN18RadioEngineWrapper13tuneWithDelayEji @ 12 NONAME - _ZN18RadioEngineWrapper14removeObserverEP26RadioEngineWrapperObserver @ 13 NONAME - _ZN18RadioEngineWrapper16isFrequencyValidEj @ 14 NONAME - _ZN18RadioEngineWrapper16toggleAudioRouteEv @ 15 NONAME - _ZN18RadioEngineWrapper19isEngineConstructedEv @ 16 NONAME - _ZN18RadioEngineWrapper7setMuteEb @ 17 NONAME - _ZN18RadioEngineWrapper8settingsEv @ 18 NONAME - _ZN18RadioEngineWrapper9setVolumeEi @ 19 NONAME - _ZN18RadioEngineWrapperC1ER21RadioStationHandlerIf @ 20 NONAME - _ZN18RadioEngineWrapperC2ER21RadioStationHandlerIf @ 21 NONAME - _ZN18RadioEngineWrapperD1Ev @ 22 NONAME - _ZN18RadioEngineWrapperD2Ev @ 23 NONAME - _ZN26RadioEngineWrapperObserver11muteChangedEb @ 24 NONAME - _ZN26RadioEngineWrapperObserver12skipPreviousEv @ 25 NONAME - _ZN26RadioEngineWrapperObserver13volumeChangedEi @ 26 NONAME - _ZN26RadioEngineWrapperObserver16tunedToFrequencyEji @ 27 NONAME - _ZN26RadioEngineWrapperObserver17audioRouteChangedEb @ 28 NONAME - _ZN26RadioEngineWrapperObserver18radioStatusChangedEb @ 29 NONAME - _ZN26RadioEngineWrapperObserver20antennaStatusChangedEb @ 30 NONAME - _ZN26RadioEngineWrapperObserver22rdsAvailabilityChangedEb @ 31 NONAME - _ZN26RadioEngineWrapperObserver8skipNextEv @ 32 NONAME - _ZNK18RadioEngineWrapper12maxFrequencyEv @ 33 NONAME - _ZNK18RadioEngineWrapper12minFrequencyEv @ 34 NONAME - _ZNK18RadioEngineWrapper16currentFrequencyEv @ 35 NONAME - _ZNK18RadioEngineWrapper17frequencyStepSizeEv @ 36 NONAME - _ZNK18RadioEngineWrapper17isAntennaAttachedEv @ 37 NONAME - _ZNK18RadioEngineWrapper18isUsingLoudspeakerEv @ 38 NONAME - _ZNK18RadioEngineWrapper6regionEv @ 39 NONAME - _ZNK18RadioEngineWrapper7isMutedEv @ 40 NONAME - _ZNK18RadioEngineWrapper9isRadioOnEv @ 41 NONAME - _ZTI26RadioEngineWrapperObserver @ 42 NONAME - _ZTV26RadioEngineWrapperObserver @ 43 NONAME - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/radiopresetstorageu.def --- a/radioapp/eabi/radiopresetstorageu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -EXPORTS - _ZN18RadioPresetStorage10readPresetEiR14RadioStationIf @ 1 NONAME - _ZN18RadioPresetStorage10savePresetERK14RadioStationIf @ 2 NONAME - _ZN18RadioPresetStorage12deletePresetEi @ 3 NONAME - _ZN18RadioPresetStorageC1Ev @ 4 NONAME - _ZN18RadioPresetStorageC2Ev @ 5 NONAME - _ZN18RadioPresetStorageD1Ev @ 6 NONAME - _ZN18RadioPresetStorageD2Ev @ 7 NONAME - _ZNK18RadioPresetStorage10nextPresetEi @ 8 NONAME - _ZNK18RadioPresetStorage11firstPresetEv @ 9 NONAME - _ZNK18RadioPresetStorage11presetCountEv @ 10 NONAME - _ZNK18RadioPresetStorage18maxNumberOfPresetsEv @ 11 NONAME - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/radiouiengineu.def --- a/radioapp/eabi/radiouiengineu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -EXPORTS - _ZN12RadioStation11setFavoriteEb @ 1 NONAME - _ZN12RadioStation12callSignCharEj @ 2 NONAME - _ZN12RadioStation12setFrequencyEj @ 3 NONAME - _ZN12RadioStation12setRadioTextERK7QString @ 4 NONAME - _ZN12RadioStation14callSignStringEj @ 5 NONAME - _ZN12RadioStation14parseFrequencyEj @ 6 NONAME - _ZN12RadioStation14setChangeFlagsE6QFlagsINS_10ChangeFlagEE @ 7 NONAME - _ZN12RadioStation14setPresetIndexEi @ 8 NONAME - _ZN12RadioStation15iterateCallSignEii @ 9 NONAME - _ZN12RadioStation16piCodeToCallSignEj @ 10 NONAME - _ZN12RadioStation16resetChangeFlagsEv @ 11 NONAME - _ZN12RadioStation16setDynamicPsTextERK7QString @ 12 NONAME - _ZN12RadioStation16setRadioTextPlusEiRK7QString @ 13 NONAME - _ZN12RadioStation18setUserDefinedNameERK7QString @ 14 NONAME - _ZN12RadioStation23decrementReferenceCountEv @ 15 NONAME - _ZN12RadioStation5resetEv @ 16 NONAME - _ZN12RadioStation6detachEv @ 17 NONAME - _ZN12RadioStation6setUrlERK7QString @ 18 NONAME - _ZN12RadioStation7setNameERK7QString @ 19 NONAME - _ZN12RadioStation7setTypeE6QFlagsINS_8TypeFlagEE @ 20 NONAME - _ZN12RadioStation8setGenreEi @ 21 NONAME - _ZN12RadioStation9setPiCodeEiN11RadioRegion6RegionE @ 22 NONAME - _ZN12RadioStation9setPsTypeE6QFlagsINS_10PsTypeFlagEE @ 23 NONAME - _ZN12RadioStation9unsetTypeE6QFlagsINS_8TypeFlagEE @ 24 NONAME - _ZN12RadioStationC1ERKS_ @ 25 NONAME - _ZN12RadioStationC1Eij @ 26 NONAME - _ZN12RadioStationC1Ev @ 27 NONAME - _ZN12RadioStationC2ERKS_ @ 28 NONAME - _ZN12RadioStationC2Eij @ 29 NONAME - _ZN12RadioStationC2Ev @ 30 NONAME - _ZN12RadioStationD0Ev @ 31 NONAME - _ZN12RadioStationD1Ev @ 32 NONAME - _ZN12RadioStationD2Ev @ 33 NONAME - _ZN12RadioStationaSERKS_ @ 34 NONAME - _ZN13RadioUiEngine10toggleMuteEv @ 35 NONAME - _ZN13RadioUiEngine10tunePresetEi @ 36 NONAME - _ZN13RadioUiEngine11muteChangedEb @ 37 NONAME - _ZN13RadioUiEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 38 NONAME - _ZN13RadioUiEngine11qt_metacastEPKc @ 39 NONAME - _ZN13RadioUiEngine11seekStationEi @ 40 NONAME - _ZN13RadioUiEngine11skipStationEN11StationSkip4ModeEj @ 41 NONAME - _ZN13RadioUiEngine12historyModelEv @ 42 NONAME - _ZN13RadioUiEngine12stationModelEv @ 43 NONAME - _ZN13RadioUiEngine13carouselModelEv @ 44 NONAME - _ZN13RadioUiEngine13genreToStringEiN11GenreTarget6TargetE @ 45 NONAME - _ZN13RadioUiEngine13scannerEngineEv @ 46 NONAME - _ZN13RadioUiEngine13tuneFrequencyEji @ 47 NONAME - _ZN13RadioUiEngine13tuneWithDelayEji @ 48 NONAME - _ZN13RadioUiEngine13volumeChangedEi @ 49 NONAME - _ZN13RadioUiEngine14seekingStartedEi @ 50 NONAME - _ZN13RadioUiEngine15emitMuteChangedEb @ 51 NONAME - _ZN13RadioUiEngine15stationsInRangeEjj @ 52 NONAME - _ZN13RadioUiEngine16isFirstTimeStartEv @ 53 NONAME - _ZN13RadioUiEngine16isOfflineProfileEv @ 54 NONAME - _ZN13RadioUiEngine16staticMetaObjectE @ 55 NONAME DATA 16 - _ZN13RadioUiEngine16toggleAudioRouteEv @ 56 NONAME - _ZN13RadioUiEngine16tunedToFrequencyEji @ 57 NONAME - _ZN13RadioUiEngine17addRecognizedSongERK7QStringS2_RK12RadioStation @ 58 NONAME - _ZN13RadioUiEngine17audioRouteChangedEb @ 59 NONAME - _ZN13RadioUiEngine17emitVolumeChangedEi @ 60 NONAME - _ZN13RadioUiEngine18emitSeekingStartedEN7Seeking9DirectionE @ 61 NONAME - _ZN13RadioUiEngine18lastTunedFrequencyEv @ 62 NONAME - _ZN13RadioUiEngine18radioStatusChangedEb @ 63 NONAME - _ZN13RadioUiEngine19getStaticMetaObjectEv @ 64 NONAME - _ZN13RadioUiEngine20antennaStatusChangedEb @ 65 NONAME - _ZN13RadioUiEngine20createNewFilterModelEP7QObject @ 66 NONAME - _ZN13RadioUiEngine20emitTunedToFrequencyEji @ 67 NONAME - _ZN13RadioUiEngine21emitAudioRouteChangedEb @ 68 NONAME - _ZN13RadioUiEngine21launchSongRecognitionEv @ 69 NONAME - _ZN13RadioUiEngine22emitRadioStatusChangedEb @ 70 NONAME - _ZN13RadioUiEngine22rdsAvailabilityChangedEb @ 71 NONAME - _ZN13RadioUiEngine24emitAntennaStatusChangedEb @ 72 NONAME - _ZN13RadioUiEngine26emitRdsAvailabilityChangedEb @ 73 NONAME - _ZN13RadioUiEngine29isSongRecognitionAppAvailableEv @ 74 NONAME - _ZN13RadioUiEngine4initEv @ 75 NONAME - _ZN13RadioUiEngine7setMuteEb @ 76 NONAME - _ZN13RadioUiEngine8settingsEv @ 77 NONAME - _ZN13RadioUiEngine9setVolumeEi @ 78 NONAME - _ZN13RadioUiEngineC1EP7QObject @ 79 NONAME - _ZN13RadioUiEngineC2EP7QObject @ 80 NONAME - _ZN13RadioUiEngineD0Ev @ 81 NONAME - _ZN13RadioUiEngineD1Ev @ 82 NONAME - _ZN13RadioUiEngineD2Ev @ 83 NONAME - _ZN16RadioHistoryItem10setStationERK7QString @ 84 NONAME - _ZN16RadioHistoryItem12setFrequencyEj @ 85 NONAME - _ZN16RadioHistoryItem14setCurrentTimeEv @ 86 NONAME - _ZN16RadioHistoryItem23decrementReferenceCountEv @ 87 NONAME - _ZN16RadioHistoryItem5resetEv @ 88 NONAME - _ZN16RadioHistoryItem6detachEv @ 89 NONAME - _ZN16RadioHistoryItem8setTitleERK7QString @ 90 NONAME - _ZN16RadioHistoryItem9setArtistERK7QString @ 91 NONAME - _ZN16RadioHistoryItemC1ERK7QStringS2_ @ 92 NONAME - _ZN16RadioHistoryItemC1ERKS_ @ 93 NONAME - _ZN16RadioHistoryItemC1Ev @ 94 NONAME - _ZN16RadioHistoryItemC2ERK7QStringS2_ @ 95 NONAME - _ZN16RadioHistoryItemC2ERKS_ @ 96 NONAME - _ZN16RadioHistoryItemC2Ev @ 97 NONAME - _ZN16RadioHistoryItemD0Ev @ 98 NONAME - _ZN16RadioHistoryItemD1Ev @ 99 NONAME - _ZN16RadioHistoryItemD2Ev @ 100 NONAME - _ZN16RadioHistoryItemaSERKS_ @ 101 NONAME - _ZN17RadioHistoryModel11qt_metacallEN11QMetaObject4CallEiPPv @ 102 NONAME - _ZN17RadioHistoryModel11qt_metacastEPKc @ 103 NONAME - _ZN17RadioHistoryModel13emitItemAddedEv @ 104 NONAME - _ZN17RadioHistoryModel13setShowTaggedEb @ 105 NONAME - _ZN17RadioHistoryModel13toggleTaggingERK16RadioHistoryItemi @ 106 NONAME - _ZN17RadioHistoryModel14setShowDetailsEb @ 107 NONAME - _ZN17RadioHistoryModel16addRadioTextPlusEiRK7QStringRK12RadioStation @ 108 NONAME - _ZN17RadioHistoryModel16currentSongResetEv @ 109 NONAME - _ZN17RadioHistoryModel16resetCurrentSongEv @ 110 NONAME - _ZN17RadioHistoryModel16staticMetaObjectE @ 111 NONAME DATA 16 - _ZN17RadioHistoryModel17reportChangedDataEii @ 112 NONAME - _ZN17RadioHistoryModel18clearRadioTextPlusEv @ 113 NONAME - _ZN17RadioHistoryModel19getStaticMetaObjectEv @ 114 NONAME - _ZN17RadioHistoryModel7addItemERK7QStringS2_RK12RadioStation @ 115 NONAME - _ZN17RadioHistoryModel8setIconsERK5QIconS2_ @ 116 NONAME - _ZN17RadioHistoryModel9itemAddedEv @ 117 NONAME - _ZN17RadioHistoryModel9removeAllEv @ 118 NONAME - _ZN17RadioHistoryModelC1ER13RadioUiEngine @ 119 NONAME - _ZN17RadioHistoryModelC2ER13RadioUiEngine @ 120 NONAME - _ZN17RadioHistoryModelD0Ev @ 121 NONAME - _ZN17RadioHistoryModelD1Ev @ 122 NONAME - _ZN17RadioHistoryModelD2Ev @ 123 NONAME - _ZN17RadioStationModel10addStationERK12RadioStation @ 124 NONAME - _ZN17RadioStationModel10initializeEP18RadioPresetStorageP18RadioEngineWrapper @ 125 NONAME - _ZN17RadioStationModel11findClosestEjN11StationSkip4ModeE @ 126 NONAME - _ZN17RadioStationModel11qt_metacallEN11QMetaObject4CallEiPPv @ 127 NONAME - _ZN17RadioStationModel11qt_metacastEPKc @ 128 NONAME - _ZN17RadioStationModel11saveStationER12RadioStation @ 129 NONAME - _ZN17RadioStationModel12setFavoritesERK5QListI11QModelIndexE @ 130 NONAME - _ZN17RadioStationModel13favoriteCountEv @ 131 NONAME - _ZN17RadioStationModel13findFrequencyEjR12RadioStation @ 132 NONAME - _ZN17RadioStationModel13removeStationERK12RadioStation @ 133 NONAME - _ZN17RadioStationModel13renameStationEiRK7QString @ 134 NONAME - _ZN17RadioStationModel14currentStationEv @ 135 NONAME - _ZN17RadioStationModel15emitDataChangedERK12RadioStation @ 136 NONAME - _ZN17RadioStationModel15favoriteChangedERK12RadioStation @ 137 NONAME - _ZN17RadioStationModel15findPresetIndexEi @ 138 NONAME - _ZN17RadioStationModel15findPresetIndexEiR12RadioStation @ 139 NONAME - _ZN17RadioStationModel15stationsInRangeEjj @ 140 NONAME - _ZN17RadioStationModel16dynamicPsChangedERK12RadioStation @ 141 NONAME - _ZN17RadioStationModel16staticMetaObjectE @ 142 NONAME DATA 16 - _ZN17RadioStationModel16stationHandlerIfEv @ 143 NONAME - _ZN17RadioStationModel17emitChangeSignalsERK12RadioStation6QFlagsINS0_10ChangeFlagEE @ 144 NONAME - _ZN17RadioStationModel17radioTextReceivedERK12RadioStation @ 145 NONAME - _ZN17RadioStationModel17removeByFrequencyEj @ 146 NONAME - _ZN17RadioStationModel18findCurrentStationEj @ 147 NONAME - _ZN17RadioStationModel18stationDataChangedERK12RadioStation @ 148 NONAME - _ZN17RadioStationModel19dynamicPsCheckEndedEv @ 149 NONAME - _ZN17RadioStationModel19getStaticMetaObjectEv @ 150 NONAME - _ZN17RadioStationModel19removeByPresetIndexEi @ 151 NONAME - _ZN17RadioStationModel19setFavoriteByPresetEib @ 152 NONAME - _ZN17RadioStationModel21findUnusedPresetIndexEv @ 153 NONAME - _ZN17RadioStationModel22setFavoriteByFrequencyEjb @ 154 NONAME - _ZN17RadioStationModel23modelIndexFromFrequencyEj @ 155 NONAME - _ZN17RadioStationModel7setDataERK11QModelIndexRK8QVarianti @ 156 NONAME - _ZN17RadioStationModel8setIconsERK5QIconS2_ @ 157 NONAME - _ZN17RadioStationModel9removeAllENS_10RemoveModeE @ 158 NONAME - _ZN17RadioStationModel9setDetailE6QFlagsINS_10DetailFlagEE @ 159 NONAME - _ZN17RadioStationModelC1ER20RadioUiEnginePrivate @ 160 NONAME - _ZN17RadioStationModelC2ER20RadioUiEnginePrivate @ 161 NONAME - _ZN17RadioStationModelD0Ev @ 162 NONAME - _ZN17RadioStationModelD1Ev @ 163 NONAME - _ZN17RadioStationModelD2Ev @ 164 NONAME - _ZN18RadioCarouselModel11findClosestEjN11StationSkip4ModeE @ 165 NONAME - _ZN18RadioCarouselModel11qt_metacallEN11QMetaObject4CallEiPPv @ 166 NONAME - _ZN18RadioCarouselModel11qt_metacastEPKc @ 167 NONAME - _ZN18RadioCarouselModel15removeFrequencyERK11QModelIndexii @ 168 NONAME - _ZN18RadioCarouselModel16staticMetaObjectE @ 169 NONAME DATA 16 - _ZN18RadioCarouselModel19getStaticMetaObjectEv @ 170 NONAME - _ZN18RadioCarouselModel23modelIndexFromFrequencyEj @ 171 NONAME - _ZN18RadioCarouselModelC1ER13RadioUiEngineR17RadioStationModel @ 172 NONAME - _ZN18RadioCarouselModelC2ER13RadioUiEngineR17RadioStationModel @ 173 NONAME - _ZN18RadioCarouselModelD0Ev @ 174 NONAME - _ZN18RadioCarouselModelD1Ev @ 175 NONAME - _ZN18RadioCarouselModelD2Ev @ 176 NONAME - _ZN18RadioScannerEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 177 NONAME - _ZN18RadioScannerEngine11qt_metacastEPKc @ 178 NONAME - _ZN18RadioScannerEngine12stationFoundERK12RadioStation @ 179 NONAME - _ZN18RadioScannerEngine13startScanningEv @ 180 NONAME - _ZN18RadioScannerEngine16continueScanningEv @ 181 NONAME - _ZN18RadioScannerEngine16emitStationFoundERK12RadioStation @ 182 NONAME - _ZN18RadioScannerEngine16staticMetaObjectE @ 183 NONAME DATA 16 - _ZN18RadioScannerEngine19addScannedFrequencyEj @ 184 NONAME - _ZN18RadioScannerEngine19getStaticMetaObjectEv @ 185 NONAME - _ZN18RadioScannerEngine6cancelEv @ 186 NONAME - _ZN18RadioScannerEngineC1ER20RadioUiEnginePrivate @ 187 NONAME - _ZN18RadioScannerEngineC2ER20RadioUiEnginePrivate @ 188 NONAME - _ZN18RadioScannerEngineD0Ev @ 189 NONAME - _ZN18RadioScannerEngineD1Ev @ 190 NONAME - _ZN18RadioScannerEngineD2Ev @ 191 NONAME - _ZN23RadioStationFilterModel13setTypeFilterE6QFlagsIN12RadioStation8TypeFlagEE @ 192 NONAME - _ZN23RadioStationFilterModel23modelIndexFromFrequencyEj @ 193 NONAME - _ZN23RadioStationFilterModel9setCyclicEb @ 194 NONAME - _ZN23RadioStationFilterModelC1ER13RadioUiEngineP7QObject @ 195 NONAME - _ZN23RadioStationFilterModelC2ER13RadioUiEngineP7QObject @ 196 NONAME - _ZN23RadioStationFilterModelD0Ev @ 197 NONAME - _ZN23RadioStationFilterModelD1Ev @ 198 NONAME - _ZN23RadioStationFilterModelD2Ev @ 199 NONAME - _ZNK12RadioStation10hasChangedEv @ 200 NONAME - _ZNK12RadioStation10isDetachedEv @ 201 NONAME - _ZNK12RadioStation10isFavoriteEv @ 202 NONAME - _ZNK12RadioStation11changeFlagsEv @ 203 NONAME - _ZNK12RadioStation11presetIndexEv @ 204 NONAME - _ZNK12RadioStation12frequencyMhzEv @ 205 NONAME - _ZNK12RadioStation13dynamicPsTextEv @ 206 NONAME - _ZNK12RadioStation14hasDataChangedE6QFlagsINS_10ChangeFlagEE @ 207 NONAME - _ZNK12RadioStation3urlEv @ 208 NONAME - _ZNK12RadioStation4nameEv @ 209 NONAME - _ZNK12RadioStation5genreEv @ 210 NONAME - _ZNK12RadioStation6hasRdsEv @ 211 NONAME - _ZNK12RadioStation6isTypeE6QFlagsINS_8TypeFlagEE @ 212 NONAME - _ZNK12RadioStation6psTypeEv @ 213 NONAME - _ZNK12RadioStation7isValidEv @ 214 NONAME - _ZNK12RadioStation9frequencyEv @ 215 NONAME - _ZNK12RadioStation9hasPiCodeEv @ 216 NONAME - _ZNK12RadioStation9isRenamedEv @ 217 NONAME - _ZNK12RadioStation9radioTextEv @ 218 NONAME - _ZNK13RadioUiEngine10isScanningEv @ 219 NONAME - _ZNK13RadioUiEngine10metaObjectEv @ 220 NONAME - _ZNK13RadioUiEngine12maxFrequencyEv @ 221 NONAME - _ZNK13RadioUiEngine12minFrequencyEv @ 222 NONAME - _ZNK13RadioUiEngine13isInitializedEv @ 223 NONAME - _ZNK13RadioUiEngine16currentFrequencyEv @ 224 NONAME - _ZNK13RadioUiEngine17frequencyStepSizeEv @ 225 NONAME - _ZNK13RadioUiEngine17isAntennaAttachedEv @ 226 NONAME - _ZNK13RadioUiEngine18isUsingLoudspeakerEv @ 227 NONAME - _ZNK13RadioUiEngine6regionEv @ 228 NONAME - _ZNK13RadioUiEngine7isMutedEv @ 229 NONAME - _ZNK13RadioUiEngine9isRadioOnEv @ 230 NONAME - _ZNK16RadioHistoryItem10isDetachedEv @ 231 NONAME - _ZNK16RadioHistoryItem17isRecognizedByRdsEv @ 232 NONAME - _ZNK16RadioHistoryItem2idEv @ 233 NONAME - _ZNK16RadioHistoryItem4timeEv @ 234 NONAME - _ZNK16RadioHistoryItem5titleEv @ 235 NONAME - _ZNK16RadioHistoryItem6artistEv @ 236 NONAME - _ZNK16RadioHistoryItem7isValidEv @ 237 NONAME - _ZNK16RadioHistoryItem7stationEv @ 238 NONAME - _ZNK16RadioHistoryItem8isTaggedEv @ 239 NONAME - _ZNK16RadioHistoryItem9frequencyEv @ 240 NONAME - _ZNK17RadioHistoryModel10metaObjectEv @ 241 NONAME - _ZNK17RadioHistoryModel11itemAtIndexERK11QModelIndex @ 242 NONAME - _ZNK17RadioHistoryModel23isCurrentSongRecognizedEv @ 243 NONAME - _ZNK17RadioHistoryModel4dataERK11QModelIndexi @ 244 NONAME - _ZNK17RadioHistoryModel8rowCountERK11QModelIndex @ 245 NONAME - _ZNK17RadioStationModel10metaObjectEv @ 246 NONAME - _ZNK17RadioStationModel14currentStationEv @ 247 NONAME - _ZNK17RadioStationModel4dataERK11QModelIndexi @ 248 NONAME - _ZNK17RadioStationModel4listEv @ 249 NONAME - _ZNK17RadioStationModel5flagsERK11QModelIndex @ 250 NONAME - _ZNK17RadioStationModel8rowCountERK11QModelIndex @ 251 NONAME - _ZNK17RadioStationModel9stationAtEi @ 252 NONAME - _ZNK18RadioCarouselModel10metaObjectEv @ 253 NONAME - _ZNK18RadioCarouselModel4dataERK11QModelIndexi @ 254 NONAME - _ZNK18RadioCarouselModel8rowCountERK11QModelIndex @ 255 NONAME - _ZNK18RadioScannerEngine10isScanningEv @ 256 NONAME - _ZNK18RadioScannerEngine10metaObjectEv @ 257 NONAME - _ZNK23RadioStationFilterModel16filterAcceptsRowEiRK11QModelIndex @ 258 NONAME - _ZNK23RadioStationFilterModel4dataERK11QModelIndexi @ 259 NONAME - _ZNK23RadioStationFilterModel5indexEiiRK11QModelIndex @ 260 NONAME - _ZNK23RadioStationFilterModel7isEqualERK11QModelIndexS2_ @ 261 NONAME - _ZNK23RadioStationFilterModel8rowCountERK11QModelIndex @ 262 NONAME - _ZNK23RadioStationFilterModel9hasLoopedERK11QModelIndex @ 263 NONAME - _ZNK23RadioStationFilterModel9realIndexERK11QModelIndex @ 264 NONAME - _ZTI12RadioStation @ 265 NONAME - _ZTI13RadioUiEngine @ 266 NONAME - _ZTI16RadioHistoryItem @ 267 NONAME - _ZTI17RadioHistoryModel @ 268 NONAME - _ZTI17RadioStationModel @ 269 NONAME - _ZTI18RadioCarouselModel @ 270 NONAME - _ZTI18RadioScannerEngine @ 271 NONAME - _ZTI23RadioStationFilterModel @ 272 NONAME - _ZTV12RadioStation @ 273 NONAME - _ZTV13RadioUiEngine @ 274 NONAME - _ZTV16RadioHistoryItem @ 275 NONAME - _ZTV17RadioHistoryModel @ 276 NONAME - _ZTV17RadioStationModel @ 277 NONAME - _ZTV18RadioCarouselModel @ 278 NONAME - _ZTV18RadioScannerEngine @ 279 NONAME - _ZTV23RadioStationFilterModel @ 280 NONAME - _ZN13RadioUiEngine14openMusicStoreERK16RadioHistoryItemNS_10MusicStoreE @ 281 NONAME - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/eabi/radiowidgetsu.def --- a/radioapp/eabi/radiowidgetsu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -EXPORTS - _ZN11RadioWindow11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME - _ZN11RadioWindow11qt_metacastEPKc @ 2 NONAME - _ZN11RadioWindow12activateViewER8QPointerI13RadioViewBaseERK7QString6QFlagsIN2Hb14ViewSwitchFlagEE @ 3 NONAME - _ZN11RadioWindow15showVolumeLevelEi @ 4 NONAME - _ZN11RadioWindow16activateMainViewEv @ 5 NONAME - _ZN11RadioWindow16showErrorMessageERK7QString @ 6 NONAME - _ZN11RadioWindow16staticMetaObjectE @ 7 NONAME DATA 16 - _ZN11RadioWindow17updateOrientationEN2Qt11OrientationE @ 8 NONAME - _ZN11RadioWindow18orientationSectionEv @ 9 NONAME - _ZN11RadioWindow19activateHistoryViewEv @ 10 NONAME - _ZN11RadioWindow19getStaticMetaObjectEv @ 11 NONAME - _ZN11RadioWindow19updateAntennaStatusEb @ 12 NONAME - _ZN11RadioWindow20activateStationsViewEv @ 13 NONAME - _ZN11RadioWindow4initEv @ 14 NONAME - _ZN11RadioWindow8initViewEv @ 15 NONAME - _ZN11RadioWindow8uiEngineEv @ 16 NONAME - _ZN11RadioWindowC1EP7QWidget @ 17 NONAME - _ZN11RadioWindowC2EP7QWidget @ 18 NONAME - _ZN11RadioWindowD0Ev @ 19 NONAME - _ZN11RadioWindowD1Ev @ 20 NONAME - _ZN11RadioWindowD2Ev @ 21 NONAME - _ZN13RadioMainView11qt_metacallEN11QMetaObject4CallEiPPv @ 22 NONAME - _ZN13RadioMainView11qt_metacastEPKc @ 23 NONAME - _ZN13RadioMainView14seekingStartedEv @ 24 NONAME - _ZN13RadioMainView14setOrientationEv @ 25 NONAME - _ZN13RadioMainView14toggleScanningEv @ 26 NONAME - _ZN13RadioMainView15setScanningModeEb @ 27 NONAME - _ZN13RadioMainView16staticMetaObjectE @ 28 NONAME DATA 16 - _ZN13RadioMainView16updateAudioRouteEb @ 29 NONAME - _ZN13RadioMainView19getStaticMetaObjectEv @ 30 NONAME - _ZN13RadioMainView22setFrequencyFromEngineEji @ 31 NONAME - _ZN13RadioMainView22setFrequencyFromWidgetEji @ 32 NONAME - _ZN13RadioMainView4initEv @ 33 NONAME - _ZN13RadioMainView4skipEi @ 34 NONAME - _ZN13RadioMainViewC1Ev @ 35 NONAME - _ZN13RadioMainViewC2Ev @ 36 NONAME - _ZN13RadioMainViewD0Ev @ 37 NONAME - _ZN13RadioMainViewD1Ev @ 38 NONAME - _ZN13RadioMainViewD2Ev @ 39 NONAME - _ZN16RadioBannerLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 40 NONAME - _ZN16RadioBannerLabel11qt_metacastEPKc @ 41 NONAME - _ZN16RadioBannerLabel16staticMetaObjectE @ 42 NONAME DATA 16 - _ZN16RadioBannerLabel19getStaticMetaObjectEv @ 43 NONAME - _ZN16RadioBannerLabel5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 44 NONAME - _ZN16RadioBannerLabelC1EP13QGraphicsItem @ 45 NONAME - _ZN16RadioBannerLabelC2EP13QGraphicsItem @ 46 NONAME - _ZN16RadioFadingLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 47 NONAME - _ZN16RadioFadingLabel11qt_metacastEPKc @ 48 NONAME - _ZN16RadioFadingLabel11startEffectERK7QStringPKc @ 49 NONAME - _ZN16RadioFadingLabel14effectFinishedEN8HbEffect12EffectStatusE @ 50 NONAME - _ZN16RadioFadingLabel16setFadingEnabledEb @ 51 NONAME - _ZN16RadioFadingLabel16staticMetaObjectE @ 52 NONAME DATA 16 - _ZN16RadioFadingLabel19getStaticMetaObjectEv @ 53 NONAME - _ZN16RadioFadingLabel20setTextWithoutFadingERK7QString @ 54 NONAME - _ZN16RadioFadingLabel7setTextERK7QString @ 55 NONAME - _ZN16RadioFadingLabel8trimHtmlERK7QString @ 56 NONAME - _ZN16RadioFadingLabelC1EP13QGraphicsItem @ 57 NONAME - _ZN16RadioFadingLabelC2EP13QGraphicsItem @ 58 NONAME - _ZN16RadioHistoryView10addOneSongEv @ 59 NONAME - _ZN16RadioHistoryView11qt_metacallEN11QMetaObject4CallEiPPv @ 60 NONAME - _ZN16RadioHistoryView11qt_metacastEPKc @ 61 NONAME - _ZN16RadioHistoryView12openOviStoreEv @ 62 NONAME - _ZN16RadioHistoryView13setTaggedIconERK6HbIcon @ 63 NONAME - _ZN16RadioHistoryView13toggleTaggingEv @ 64 NONAME - _ZN16RadioHistoryView14openOtherStoreEv @ 65 NONAME - _ZN16RadioHistoryView14setOrientationEv @ 66 NONAME - _ZN16RadioHistoryView15showContextMenuERK11QModelIndex @ 67 NONAME - _ZN16RadioHistoryView16setNonTaggedIconERK6HbIcon @ 68 NONAME - _ZN16RadioHistoryView16staticMetaObjectE @ 69 NONAME DATA 16 - _ZN16RadioHistoryView17deckButtonPressedEv @ 70 NONAME - _ZN16RadioHistoryView18updateVisibilitiesEv @ 71 NONAME - _ZN16RadioHistoryView19getStaticMetaObjectEv @ 72 NONAME - _ZN16RadioHistoryView4initEv @ 73 NONAME - _ZN16RadioHistoryView8addSongsEv @ 74 NONAME - _ZN16RadioHistoryView9clearListEv @ 75 NONAME - _ZN16RadioHistoryViewC1Ev @ 76 NONAME - _ZN16RadioHistoryViewC2Ev @ 77 NONAME - _ZN16RadioHistoryViewD0Ev @ 78 NONAME - _ZN16RadioHistoryViewD1Ev @ 79 NONAME - _ZN16RadioHistoryViewD2Ev @ 80 NONAME - _ZN17RadioStationsView11qt_metacallEN11QMetaObject4CallEiPPv @ 81 NONAME - _ZN17RadioStationsView11qt_metacastEPKc @ 82 NONAME - _ZN17RadioStationsView12initListViewEv @ 83 NONAME - _ZN17RadioStationsView13deleteStationEv @ 84 NONAME - _ZN17RadioStationsView13startScanningEv @ 85 NONAME - _ZN17RadioStationsView14finishScanningEv @ 86 NONAME - _ZN17RadioStationsView14toggleFavoriteEv @ 87 NONAME - _ZN17RadioStationsView15listItemClickedERK11QModelIndex @ 88 NONAME - _ZN17RadioStationsView15setFavoriteIconERK6HbIcon @ 89 NONAME - _ZN17RadioStationsView16staticMetaObjectE @ 90 NONAME DATA 16 - _ZN17RadioStationsView17deckButtonPressedEv @ 91 NONAME - _ZN17RadioStationsView17setNowPlayingIconERK6HbIcon @ 92 NONAME - _ZN17RadioStationsView19getStaticMetaObjectEv @ 93 NONAME - _ZN17RadioStationsView19listItemLongPressedEP18HbAbstractViewItemRK7QPointF @ 94 NONAME - _ZN17RadioStationsView19updateAntennaStatusEb @ 95 NONAME - _ZN17RadioStationsView20updateCurrentStationEv @ 96 NONAME - _ZN17RadioStationsView25updateControlVisibilitiesEv @ 97 NONAME - _ZN17RadioStationsView4initEv @ 98 NONAME - _ZN17RadioStationsView6renameEv @ 99 NONAME - _ZN17RadioStationsView9clearListEv @ 100 NONAME - _ZN17RadioStationsView9showEventEP10QShowEvent @ 101 NONAME - _ZN17RadioStationsViewC1Ev @ 102 NONAME - _ZN17RadioStationsViewC2Ev @ 103 NONAME - _ZN17RadioStationsViewD0Ev @ 104 NONAME - _ZN17RadioStationsViewD1Ev @ 105 NONAME - _ZN17RadioStationsViewD2Ev @ 106 NONAME - _ZN19RadioFrequencyStrip10drawPixmapEj5QListI12RadioStationEP18RadioFrequencyItem @ 107 NONAME - _ZN19RadioFrequencyStrip11changeEventEP6QEvent @ 108 NONAME - _ZN19RadioFrequencyStrip11hideButtonsEv @ 109 NONAME - _ZN19RadioFrequencyStrip11initButtonsEv @ 110 NONAME - _ZN19RadioFrequencyStrip11qt_metacallEN11QMetaObject4CallEiPPv @ 111 NONAME - _ZN19RadioFrequencyStrip11qt_metacastEPKc @ 112 NONAME - _ZN19RadioFrequencyStrip11resizeEventEP25QGraphicsSceneResizeEvent @ 113 NONAME - _ZN19RadioFrequencyStrip11showButtonsEv @ 114 NONAME - _ZN19RadioFrequencyStrip11updateItemsEv @ 115 NONAME - _ZN19RadioFrequencyStrip12gestureEventEP13QGestureEvent @ 116 NONAME - _ZN19RadioFrequencyStrip12initSelectorEv @ 117 NONAME - _ZN19RadioFrequencyStrip12setFrequencyEji @ 118 NONAME - _ZN19RadioFrequencyStrip13initPositionsEv @ 119 NONAME - _ZN19RadioFrequencyStrip13seekRequestedEi @ 120 NONAME - _ZN19RadioFrequencyStrip13skipRequestedEi @ 121 NONAME - _ZN19RadioFrequencyStrip13toggleButtonsEv @ 122 NONAME - _ZN19RadioFrequencyStrip13updateStationERK11QModelIndexii @ 123 NONAME - _ZN19RadioFrequencyStrip14initEmptyItemsEv @ 124 NONAME - _ZN19RadioFrequencyStrip14updateFavoriteERK12RadioStation @ 125 NONAME - _ZN19RadioFrequencyStrip15addFrequencyPosEijP18RadioFrequencyItem @ 126 NONAME - _ZN19RadioFrequencyStrip15checkIllegalPosEv @ 127 NONAME - _ZN19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 128 NONAME - _ZN19RadioFrequencyStrip15setScanningModeEb @ 129 NONAME - _ZN19RadioFrequencyStrip15updateFavoritesEP18RadioFrequencyItem @ 130 NONAME - _ZN19RadioFrequencyStrip16frequencyChangedEji @ 131 NONAME - _ZN19RadioFrequencyStrip16handleLeftButtonEv @ 132 NONAME - _ZN19RadioFrequencyStrip16scrollPosChangedE7QPointF @ 133 NONAME - _ZN19RadioFrequencyStrip16staticMetaObjectE @ 134 NONAME DATA 16 - _ZN19RadioFrequencyStrip17handleRightButtonEv @ 135 NONAME - _ZN19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 136 NONAME - _ZN19RadioFrequencyStrip17scrollToFrequencyEji @ 137 NONAME - _ZN19RadioFrequencyStrip17setLeftButtonIconERK6HbIcon @ 138 NONAME - _ZN19RadioFrequencyStrip18setRightButtonIconERK6HbIcon @ 139 NONAME - _ZN19RadioFrequencyStrip19createItemPrimitiveEP13QGraphicsItem @ 140 NONAME - _ZN19RadioFrequencyStrip19getStaticMetaObjectEv @ 141 NONAME - _ZN19RadioFrequencyStrip19updateItemPrimitiveEP13QGraphicsItemi @ 142 NONAME - _ZN19RadioFrequencyStrip20emitFrequencyChangedEj @ 143 NONAME - _ZN19RadioFrequencyStrip20handleLongLeftButtonEv @ 144 NONAME - _ZN19RadioFrequencyStrip21handleLongRightButtonEv @ 145 NONAME - _ZN19RadioFrequencyStrip4initEP13RadioUiEngine @ 146 NONAME - _ZN19RadioFrequencyStrip9initModelEv @ 147 NONAME - _ZN19RadioFrequencyStrip9showEventEP10QShowEvent @ 148 NONAME - _ZN19RadioFrequencyStripC1Ev @ 149 NONAME - _ZN19RadioFrequencyStripC2Ev @ 150 NONAME - _ZN20RadioStationCarousel10timerFiredEv @ 151 NONAME - _ZN20RadioStationCarousel11qt_metacallEN11QMetaObject4CallEiPPv @ 152 NONAME - _ZN20RadioStationCarousel11qt_metacastEPKc @ 153 NONAME - _ZN20RadioStationCarousel11setInfoTextEN16CarouselInfoText4TypeE @ 154 NONAME - _ZN20RadioStationCarousel12cleanRdsDataEv @ 155 NONAME - _ZN20RadioStationCarousel12gestureEventEP13QGestureEvent @ 156 NONAME - _ZN20RadioStationCarousel12setFrequencyEji @ 157 NONAME - _ZN20RadioStationCarousel13clearInfoTextEv @ 158 NONAME - _ZN20RadioStationCarousel13scrollToIndexERK11QModelIndex6QFlagsINS_10ScrollFlagEE @ 159 NONAME - _ZN20RadioStationCarousel14setItemVisibleEb @ 160 NONAME - _ZN20RadioStationCarousel15insertFrequencyERK11QModelIndexii @ 161 NONAME - _ZN20RadioStationCarousel15mousePressEventEP24QGraphicsSceneMouseEvent @ 162 NONAME - _ZN20RadioStationCarousel15openContextMenuEP18HbAbstractViewItemRK7QPointF @ 163 NONAME - _ZN20RadioStationCarousel15removeFrequencyERK11QModelIndexii @ 164 NONAME - _ZN20RadioStationCarousel15setFavoriteIconERK6HbIcon @ 165 NONAME - _ZN20RadioStationCarousel15setScanningModeEb @ 166 NONAME - _ZN20RadioStationCarousel15updateRadioTextERK12RadioStation @ 167 NONAME - _ZN20RadioStationCarousel16frequencyChangedEji @ 168 NONAME - _ZN20RadioStationCarousel16setCarouselModelEP18RadioCarouselModel @ 169 NONAME - _ZN20RadioStationCarousel16staticMetaObjectE @ 170 NONAME DATA 16 - _ZN20RadioStationCarousel17animateNewStationERK12RadioStation @ 171 NONAME - _ZN20RadioStationCarousel17setAutoScrollTimeEi @ 172 NONAME - _ZN20RadioStationCarousel17updateCurrentItemEv @ 173 NONAME - _ZN20RadioStationCarousel17updateFrequenciesEv @ 174 NONAME - _ZN20RadioStationCarousel18currentStationItemEv @ 175 NONAME - _ZN20RadioStationCarousel18setNonFavoriteIconERK6HbIcon @ 176 NONAME - _ZN20RadioStationCarousel19getStaticMetaObjectEv @ 177 NONAME - _ZN20RadioStationCarousel19updateAntennaStatusEb @ 178 NONAME - _ZN20RadioStationCarousel19updateClampingStyleEv @ 179 NONAME - _ZN20RadioStationCarousel21scanAnimationFinishedEv @ 180 NONAME - _ZN20RadioStationCarousel22initCurrentStationItemEv @ 181 NONAME - _ZN20RadioStationCarousel24initToLastTunedFrequencyEv @ 182 NONAME - _ZN20RadioStationCarousel24prepareToRemoveFrequencyERK11QModelIndexii @ 183 NONAME - _ZN20RadioStationCarousel4initER13RadioUiLoaderP13RadioUiEngine @ 184 NONAME - _ZN20RadioStationCarousel4skipEN11StationSkip4ModeE @ 185 NONAME - _ZN20RadioStationCarousel6updateERK12RadioStation @ 186 NONAME - _ZN20RadioStationCarousel8uiEngineEv @ 187 NONAME - _ZN20RadioStationCarousel9updatePosEi @ 188 NONAME - _ZN20RadioStationCarouselC1EP13RadioUiEngine @ 189 NONAME - _ZN20RadioStationCarouselC2EP13RadioUiEngine @ 190 NONAME - _ZNK11RadioWindow10metaObjectEv @ 191 NONAME - _ZNK13RadioMainView10metaObjectEv @ 192 NONAME - _ZNK16RadioBannerLabel10metaObjectEv @ 193 NONAME - _ZNK16RadioFadingLabel10metaObjectEv @ 194 NONAME - _ZNK16RadioHistoryView10metaObjectEv @ 195 NONAME - _ZNK16RadioHistoryView10taggedIconEv @ 196 NONAME - _ZNK16RadioHistoryView12historyModelEv @ 197 NONAME - _ZNK16RadioHistoryView13nonTaggedIconEv @ 198 NONAME - _ZNK17RadioStationsView10metaObjectEv @ 199 NONAME - _ZNK17RadioStationsView12favoriteIconEv @ 200 NONAME - _ZNK17RadioStationsView14nowPlayingIconEv @ 201 NONAME - _ZNK19RadioFrequencyStrip10metaObjectEv @ 202 NONAME - _ZNK19RadioFrequencyStrip11selectorPosEv @ 203 NONAME - _ZNK19RadioFrequencyStrip14leftButtonIconEv @ 204 NONAME - _ZNK19RadioFrequencyStrip15rightButtonIconEv @ 205 NONAME - _ZNK19RadioFrequencyStrip9frequencyEv @ 206 NONAME - _ZNK20RadioStationCarousel10metaObjectEv @ 207 NONAME - _ZNK20RadioStationCarousel12favoriteIconEv @ 208 NONAME - _ZNK20RadioStationCarousel13carouselModelEv @ 209 NONAME - _ZNK20RadioStationCarousel14autoScrollTimeEv @ 210 NONAME - _ZNK20RadioStationCarousel15nonFavoriteIconEv @ 211 NONAME - _ZNK20RadioStationCarousel16isInScanningModeEv @ 212 NONAME - _ZNK20RadioStationCarousel17isAntennaAttachedEv @ 213 NONAME - _ZTI11RadioWindow @ 214 NONAME - _ZTI13RadioMainView @ 215 NONAME - _ZTI16RadioBannerLabel @ 216 NONAME - _ZTI16RadioFadingLabel @ 217 NONAME - _ZTI16RadioHistoryView @ 218 NONAME - _ZTI17RadioStationsView @ 219 NONAME - _ZTI19RadioFrequencyStrip @ 220 NONAME - _ZTI20RadioStationCarousel @ 221 NONAME - _ZTV11RadioWindow @ 222 NONAME - _ZTV13RadioMainView @ 223 NONAME - _ZTV16RadioBannerLabel @ 224 NONAME - _ZTV16RadioFadingLabel @ 225 NONAME - _ZTV16RadioHistoryView @ 226 NONAME - _ZTV17RadioStationsView @ 227 NONAME - _ZTV19RadioFrequencyStrip @ 228 NONAME - _ZTV20RadioStationCarousel @ 229 NONAME - _ZThn16_N13RadioMainViewD0Ev @ 230 NONAME - _ZThn16_N13RadioMainViewD1Ev @ 231 NONAME - _ZThn16_N16RadioHistoryViewD0Ev @ 232 NONAME - _ZThn16_N16RadioHistoryViewD1Ev @ 233 NONAME - _ZThn16_N17RadioStationsViewD0Ev @ 234 NONAME - _ZThn16_N17RadioStationsViewD1Ev @ 235 NONAME - _ZThn8_N11RadioWindowD0Ev @ 236 NONAME - _ZThn8_N11RadioWindowD1Ev @ 237 NONAME - _ZThn8_N13RadioMainViewD0Ev @ 238 NONAME - _ZThn8_N13RadioMainViewD1Ev @ 239 NONAME - _ZThn8_N16RadioBannerLabel5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 240 NONAME - _ZThn8_N16RadioHistoryViewD0Ev @ 241 NONAME - _ZThn8_N16RadioHistoryViewD1Ev @ 242 NONAME - _ZThn8_N17RadioStationsViewD0Ev @ 243 NONAME - _ZThn8_N17RadioStationsViewD1Ev @ 244 NONAME - _ZThn8_N19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 245 NONAME - _ZThn8_N19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 246 NONAME - _ZThn8_N20RadioStationCarousel15mousePressEventEP24QGraphicsSceneMouseEvent @ 247 NONAME - _ZN13RadioMainView12userAcceptedEv @ 248 NONAME - _ZN16RadioHistoryView12userAcceptedEv @ 249 NONAME - _ZN17RadioStationsView10renameDoneEP8HbAction @ 250 NONAME - _ZN17RadioStationsView12userAcceptedEv @ 251 NONAME - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapp.pro diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/inc/radioapplication.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/inc/testwindow_win32.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/radioapplication.pro --- a/radioapp/radioapplication/radioapplication.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/radioapplication.pro Thu Jul 22 16:33:45 2010 +0100 @@ -14,37 +14,48 @@ # Description: # +TMP_DIR_NAME = app include(../buildflags.pri) TEMPLATE = app -TARGET = qtfmradio +TARGET = fmradio TRANSLATIONS += fmradio.ts symbian: { TARGET.CAPABILITY = CAP_APPLICATION MultimediaDD - TARGET.VID = VID_DEFAULT - TARGET.UID3 = 0x101FF976 # Old visual radio uid + TARGET.UID3 = 0x2002FF4E TARGET.EPOCSTACKSIZE = 0x14000 TARGET.EPOCHEAPSIZE = 0x020000 0x2400000 + SKINICON = qtg_large_radio + ICON = resources/qtg_large_radio.svg # Fallback icon in case theme doesn't have one + + LIBS += -lxqserviceutil + + BLD_INF_RULES.prj_exports += "resources/fmradio.docml /epoc32/release/winscw/udeb/z/resource/hb/splashml/fmradio.docml" \ + "resources/fmradio.splashml /epoc32/release/winscw/udeb/z/resource/hb/splashml/fmradio.splashml" \ + "resources/fmradio.docml /epoc32/data/z/resource/hb/splashml/fmradio.docml" \ + "resources/fmradio.splashml /epoc32/data/z/resource/hb/splashml/fmradio.splashml" } CONFIG += hb service +CONFIG += mobility +MOBILITY = systeminfo # Service provider specific configuration. SERVICE.FILE = resources/service_conf.xml INCLUDEPATH += . inc -INCLUDEPATH += ../commoninc +INCLUDEPATH += ../../common INCLUDEPATH += ../radiouiengine/inc INCLUDEPATH += ../radiowidgets/inc -LIBS += -lradiouiengine -LIBS += -lradiowidgets +LIBS += -lfmradiouiengine +LIBS += -lfmradiowidgets # UI does not normally depend on the wrapper, but it does on two special cases # 1. Logging is enabled. The logger is in the wrapper module # 2. Radio is built for win32 target. The test window needs to access the wrapper -LOGGING_ENABLED:LIBS += -lradioenginewrapper +LOGGING_ENABLED:LIBS += -lfmradioenginewrapper # Sources HEADERS += radioapplication.h @@ -54,7 +65,7 @@ # Win32 specific stuff win32: { - LIBS += -lradioenginewrapper + LIBS += -lfmradioenginewrapper HEADERS += testwindow_win32.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/resources/compile_ts.bat --- a/radioapp/radioapplication/resources/compile_ts.bat Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/resources/compile_ts.bat Thu Jul 22 16:33:45 2010 +0100 @@ -1,18 +1,19 @@ -@rem -@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -@rem All rights reserved. -@rem This component and the accompanying materials are made available -@rem under the terms of "Eclipse Public License v1.0" -@rem which accompanies this distribution, and is available -@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -@rem -@rem Initial Contributors: -@rem Nokia Corporation - initial contribution. -@rem -@rem Contributors: -@rem -@rem Description: -@rem +:: +:: 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: +:: + @echo off set QM_FILE_US=fmradio_en_US.qm diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/resources/fmradio.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioapplication/resources/fmradio.docml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,6 @@ + + + + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/resources/fmradio.splashml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioapplication/resources/fmradio.splashml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,7 @@ + + + fmradio.docml + splashView + 0x2002FF4E + fmradio + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/resources/fmradio.ts --- a/radioapp/radioapplication/resources/fmradio.ts Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/resources/fmradio.ts Thu Jul 22 16:33:45 2010 +0100 @@ -17,9 +17,9 @@ Rock Music Rock Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -27,9 +27,9 @@ Personality Personality txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -47,49 +47,19 @@ Play history Play history qtl_menu_pri - rad_01 + FmRadio_001 opt - ra - False - - - Info text in main pane area if Recently played songs has no item (e.g. after the user has emptied the list). Note that "Identify song" must be the same string as txt_rad_list_identify_song. "Recently played songs" text must be the same as "Recently played songs" text must be the same as txt_rad_button_recently_played_songs. Displayed if Shazam (song identification) application is NOT installed to the device. - Recently played songs collects song information from radio stations which send the song information using RDS+ technology. - Recently played songs collects song information from radio stations which send the song information using RDS+ technology. - qtl_view_empty_description_sec - rad_03 - info - ra - False - - - Button. Ignores the dialog and returns previous view - Cancel - Cancel - qtl_dialog_softkey - common - button - co - False - - - Displayed in FM Radio home screen widget's information area. - Alarm - Alarm - txt_rad_info_news_hs - rad_05 - info - ra + Fm False - Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 1. + Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 1. Custom layout ID parent. News News txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -102,24 +72,14 @@ ra False - - Displayed in FM Radio home screen widget's information area. - Light classical - Light classical - txt_rad_info_news_hs - rad_05 - info - ra - False - Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 7. Culture Culture txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -127,9 +87,9 @@ Soft rhythm and blues Soft rhythm and blues qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -137,9 +97,9 @@ Country Music Country Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -157,9 +117,9 @@ %L1 MHz %L1 MHz qtl_list_sec2_graphic - rad_03 + FmRadio_003 dblist_val - ra + Fm False @@ -167,9 +127,9 @@ Rock Music Rock Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -177,9 +137,9 @@ Tagged songs Tagged songs qtl_toolbar_tiny_2 - rad_03 + FmRadio_003 button - ra + Fm False @@ -187,19 +147,9 @@ Soft rock Soft rock txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Religious talk - Religious talk - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -207,19 +157,19 @@ Culture Culture qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False - - Item specific menu item. Opens a Shazam application where user can search song related services. - Search via Shazam - Search via Shazam - qtl_menu_sec - rad_03 - menu - ra + + A button text in main view. Adds currently active station to Favourite station's list. + Add to favourites + Add to favourites + txt_rad_button_stations + FmRadio_001 + button + Fm False @@ -227,9 +177,9 @@ Nostalgia Nostalgia txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -237,9 +187,9 @@ Social Affairs Social Affairs txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -247,9 +197,9 @@ Clear list Clear list qtl_menu_pri - rad_03 + FmRadio_003 opt - ra + Fm False @@ -257,29 +207,9 @@ Other Music Other Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Classical - Classical - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - National Music - National Music - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -287,9 +217,9 @@ Rhythm and blues Rhythm and blues txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -297,9 +227,9 @@ Religious talk Religious talk qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -307,29 +237,9 @@ Activate loudspeaker Activate loudspeaker txt_rad_button_stations - rad_01 + FmRadio_001 button - ra - False - - - Displayed in FM Radio home screen widget's information area. - Other Music - Other Music - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Religion - Religion - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -337,19 +247,9 @@ Nostalgia Nostalgia qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Item specific menu item. Allows the user to delete a station. - Delete - Delete - qtl_menu_sec - common - menu - co + Fm False @@ -357,9 +257,9 @@ Language Language txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -367,19 +267,9 @@ Talk Talk txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Item specific menu item. Allows the user to define a new name for a station. - Rename - Rename - qtl_menu_sec - common - menu - co + Fm False @@ -387,29 +277,9 @@ Soft rhythm and blues Soft rhythm and blues txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Documentary - Documentary - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Education - Education - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -417,9 +287,9 @@ National Music National Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -427,29 +297,9 @@ Science Science txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Pop Music - Pop Music - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - Text in a home screen widget information area. %L1 is the radio station's frequency. - %L1 Mhz - %L1 Mhz - txt_rad_list_l1_mhz - rad_05 - list - ra + Fm False @@ -457,9 +307,9 @@ Weather Weather qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -467,9 +317,9 @@ Drama Drama qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -477,29 +327,9 @@ National Music National Music txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Culture - Culture - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Finance - Finance - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -507,9 +337,9 @@ Religious music Religious music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -517,9 +347,9 @@ Oldies Music Oldies Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -527,49 +357,29 @@ Education Education txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Button. Pressing this button rejects the selected operation. - No - No - qtl_dialog_softkey - common - button - co + Fm False - - Button. Allows the user to accept the dialog and return to previous view - OK - OK - qtl_dialog_softkey - common - button - co - False - - - Displayed in FM Radio home screen widget's information area. - Social Affairs - Social Affairs - txt_rad_info_news_hs - rad_05 + + Dialog text which is displayed if all found stations do not fit to the Stations list after doing a Search all stations function. Displayed also if user tries to mark station as favorite in main view or in stations view and there is not enough room for stations in the Stations list. + Station list is full. Please remove some stations and try again. + Station list is full. Please remove some stations and try again. + qtl_dialog_pri5 + rad info ra False Info text in main pane if "Favourites" list has no items. "Favourite stations" text must be same localization as txt_rad_subhead_favorite_stations. Favourite icon refers to a star -icon in the main view. - You can mark your favourite stations in All stations view by long tapping the station and selecting Add favourite. You can also tap the favourite icon in main view to mark it as a favorite. - You can mark your favourite stations in All stations view by long tapping the station and selecting Add favourite. You can also tap the favourite icon in main view to mark it as a favorite. + Tap the star icon or Add to favourite button in main view to mark currently playing station as a favorite. + Tap the star icon or Add to favourite button in main view to mark currently playing station as a favorite. qtl_view_empty_description_sec - rad_02 + FmRadio_002 info - ra + Fm False @@ -587,9 +397,9 @@ Adult hits Adult hits txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -597,29 +407,19 @@ (No favourite stations) (No favourite stations) qtl_view_empty_title_pri - rad_02 + FmRadio_002 info - ra + Fm False - A button text in main view. Opens a Stations list view, which lists All stations and Favourite stations views. + A button text in main view. Opens a Stations list view, which lists All stations and Favourite stations views. Custom layout ID parent. Stations Stations txt_rad_button_stations - rad_01 + FmRadio_001 button - ra - False - - - Help text displayed in main view station information area. Displayed if no stations have been marked as favourites and user presses previous or next button. - Mark favourite stations by pressing the star icon to enable navigation with short arrow presses. You can also swipe here to navigate between all stations. Long press arrow keys to search strong signal stations. - Mark favourite stations by pressing the star icon to enable navigation with short arrow presses. You can also swipe here to navigate between all stations. Long press arrow keys to search strong signal stations. - txt_rad_dialog_long_press_arrow_keys_to_search_str - rad_01 - info - ra + Fm False @@ -627,9 +427,19 @@ Pop Music Pop Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm + False + + + A button text in main view. Removes currently active station from Favourite station's list. + Remove from favourites + Remove from favourites + txt_rad_button_stations + FmRadio_001 + button + Fm False @@ -637,19 +447,9 @@ Varied Varied txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Alarm Test - Alarm Test - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -657,9 +457,9 @@ Alarm Alarm txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -667,9 +467,9 @@ Other Music Other Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -687,9 +487,9 @@ Children’s programmes Children’s programmes txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -697,9 +497,9 @@ Varied Varied qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -707,9 +507,9 @@ Leisure Leisure txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -717,9 +517,9 @@ Alarm Alarm qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -727,9 +527,9 @@ Information Information qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -737,21 +537,9 @@ Remove from favourites Remove from favourites qtl_menu_sec - rad_02 + FmRadio_002 menu - ra - False - - - Info text in main pane area if Recently played songs list has no item (e.g. after the user has emptied the list). Note that "Identify song" must be the same string as txt_rad_list_identify_song. "Recently played songs" text must be the same as txt_rad_button_recently_played_songs. Displayed if Shazam (song identification) application is installed to the device. - Recently played songs collects song information from radio stations which send the song information using RDS+ technology. -Also songs which are identified with â€Identify song†functionality in main view are displayed here. - Recently played songs collects song information from radio stations which send the song information using RDS+ technology. -Also songs which are identified with â€Identify song†functionality in main view are displayed here. - qtl_view_empty_description_sec - rad_03 - info - ra + Fm False @@ -769,19 +557,9 @@ Cancel Cancel txt_rad_button_cancel - rad_01 + FmRadio_001 button - ra - False - - - Displayed in FM Radio home screen widget's information area. - Religious music - Religious music - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -799,19 +577,9 @@ Religion Religion qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Soft rock - Soft rock - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -819,9 +587,9 @@ Add to favourites Add to favourites qtl_menu_sec - rad_02 + FmRadio_002 menu - ra + Fm False @@ -829,29 +597,19 @@ Current affairs Current affairs txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Drama - Drama - txt_rad_info_news_hs - rad_05 - info - ra + Fm False Info text in main pane area if Tagged songs list has no item (e.g. after the user has deleted all content from the list). Note that "tagged songs" must use the same localisation as txt_rad_button_tagged_songs. Recently played songs must be same as "Recently played songs" text must be the same as txt_rad_button_recently_played_songs.. - You can add song to the tagged songs list from Recently played songs or from main view if song is identified by FM Radio. - You can add song to the tagged songs list from Recently played songs or from main view if song is identified by FM Radio. + You can add song to the tagged songs list from Recently played songs or from main view if song information is available. + You can add song to the tagged songs list from Recently played songs or from main view if song information is available. qtl_view_empty_description_sec - rad_03 + FmRadio_003 info - ra + Fm False @@ -859,9 +617,9 @@ Social Affairs Social Affairs qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -869,9 +627,9 @@ Education Education qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -879,9 +637,9 @@ Jazz Music Jazz Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -889,9 +647,9 @@ Religious music Religious music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -909,9 +667,9 @@ (Unknown) - %1 (Unknown) - %1 qtl_list_pri_large_graphic - rad_03 + FmRadio_003 dblist - ra + Fm False @@ -919,19 +677,19 @@ Travel Travel qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False - - Displayed in FM Radio home screen widget's information area. - Soft rhythm and blues - Soft rhythm and blues - txt_rad_info_news_hs - rad_05 + + Info text in main pane area if Recently played songs has no item (e.g. after the user has emptied the list). Note that "Identify song" must be the same string as txt_rad_list_identify_song. "Recently played songs" text must be the same as "Recently played songs" text must be the same as txt_rad_button_recently_played_songs. Displayed if Shazam (song identification) application is NOT installed to the device. + Song information is collected automatically from radio stations which send the song information using the RDS+ technology. + Song information is collected automatically from radio stations which send the song information using the RDS+ technology. + qtl_view_empty_description_sec + FmRadio_003 info - ra + Fm False @@ -949,9 +707,9 @@ Classical Classical qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -969,19 +727,9 @@ Talk Talk qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Button. Pressing this button confirms the selected operation. - Yes - Yes - qtl_dialog_softkey - common - button - co + Fm False @@ -989,19 +737,9 @@ Finance Finance qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Country Music - Country Music - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1019,9 +757,9 @@ Searching local stations. Please wait. Searching local stations. Please wait. qtl_dialog_pri3 - rad_04 + FmRadio_004 info - ra + Fm False @@ -1029,19 +767,9 @@ %L1 MHz %L1 MHz qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Soft - Soft - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1049,19 +777,9 @@ Drama Drama txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Options list item. Deactivates the loudspeaker. Only available if audio can be routed to the headset - Deactivate loudspeaker - Deactivate loudspeaker - qtl_menu_pri - common - opt - co + Fm False @@ -1079,39 +797,19 @@ Top 40 Top 40 qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Phone In - Phone In - txt_rad_info_news_hs - rad_05 - info - ra + Fm False Main pane Information area item. Displayed below the tuning animation during the first time startup. Searching all available stations. Please wait. Searching all available stations. Please wait. - txt_rad_info_connect_wired_headset - rad_01 + txt_rad_list_searching_all_available_stations_ple + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Leisure - Leisure - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1119,9 +817,9 @@ College College qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1149,9 +847,9 @@ Search stations automatically by tapping here. Search stations automatically by tapping here. qtl_view_empty_description_sec - rad_02 + FmRadio_002 info - ra + Fm False @@ -1159,29 +857,9 @@ College College txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - News - News - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - Text in a home screen widget information area. Displayed when no station is tuned. - FM Radio - FM Radio - txt_rad_list_fm_radio - rad_05 - list - ra + Fm False @@ -1189,19 +867,9 @@ Pop Music Pop Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Top 40 - Top 40 - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1209,19 +877,9 @@ Public Public qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Nostalgia - Nostalgia - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1239,9 +897,9 @@ (No stations) (No stations) qtl_view_empty_title_pri - rad_02 + FmRadio_002 info - ra + Fm False @@ -1254,24 +912,14 @@ fm False - - Options list item. With the exit option, the user can close the currently active application and return to the Home screen. - Exit - Exit - qtl_menu_pri - common - opt - co - False - Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 14. Serious classical Serious classical txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1279,9 +927,9 @@ Religion Religion txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1289,9 +937,9 @@ Easy Listening Easy Listening txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1299,19 +947,9 @@ Classical Classical txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Rock Music - Rock Music - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1329,16 +967,16 @@ Sport Sport qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False Application name in Task switcher. FM Radio FM Radio - txt_tsw_caption_fmradio + qtl_grid_taskswitcher_tiny tsw_01 caption ts @@ -1349,19 +987,9 @@ Play history Play history qtl_groupbox_simple_sec - rad_03 + FmRadio_003 subhead - ra - False - - - Displayed in FM Radio home screen widget's information area. - Oldies Music - Oldies Music - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1369,29 +997,9 @@ Remove tag Remove tag qtl_menu_sec - rad_03 + FmRadio_003 menu - ra - False - - - Displayed in FM Radio home screen widget's information area. - Sport - Sport - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Classic rock - Classic rock - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1399,9 +1007,9 @@ Personality Personality qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1409,9 +1017,9 @@ Language Language qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1419,9 +1027,9 @@ Current affairs Current affairs qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1429,9 +1037,9 @@ Soft Soft txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1439,9 +1047,9 @@ All stations All stations qtl_toolbar_tiny_2 - rad_02 + FmRadio_002 button - ra + Fm False @@ -1449,9 +1057,9 @@ Serious classical Serious classical qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1459,9 +1067,9 @@ Sport Sport txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1469,9 +1077,9 @@ Weather Weather txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1479,9 +1087,9 @@ Science Science qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1489,9 +1097,9 @@ Classic rock Classic rock qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1499,9 +1107,9 @@ Soft rock Soft rock qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1509,9 +1117,9 @@ Light classical Light classical txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1519,9 +1127,9 @@ Folk Music Folk Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1529,9 +1137,9 @@ Phone In Phone In txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1539,19 +1147,9 @@ Favourite stations Favourite stations qtl_toolbar_tiny_2 - rad_02 + FmRadio_002 button - ra - False - - - Displayed in FM Radio home screen widget's information area. - Weather - Weather - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1559,39 +1157,9 @@ %1 - %2 %1 - %2 qtl_list_pri2_graphic_add - rad_03 + FmRadio_003 dblist - ra - False - - - Displayed in FM Radio home screen widget's information area. - Personality - Personality - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Rhythm and blues - Rhythm and blues - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Information - Information - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1599,9 +1167,9 @@ Leisure Leisure qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1609,29 +1177,9 @@ Alarm Test Alarm Test txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Current affairs - Current affairs - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Children’s programmes - Children’s programmes - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1639,9 +1187,9 @@ Recently played songs Recently played songs qtl_toolbar_tiny_2 - rad_03 + FmRadio_003 button - ra + Fm False @@ -1649,9 +1197,9 @@ Jazz Music Jazz Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1659,9 +1207,9 @@ Soft Soft qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1669,9 +1217,9 @@ Information Information txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1679,9 +1227,9 @@ Alarm Test Alarm Test qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1689,19 +1237,19 @@ Rhythm and blues Rhythm and blues qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False - Heading text for the Stations view's Favorite stations view + Heading text for the Stations view's "Favorite stations" view Favorite stations Favorite stations qtl_groupbox_simple_sec - rad_02 + FmRadio_002 subhead - ra + Fm False @@ -1709,29 +1257,9 @@ (Unknown) (Unknown) qtl_list_pri_large_graphic - rad_03 + FmRadio_003 dblist - ra - False - - - Item specific menu item. Starts to play the station when selected. Not displayed if station is already playing. - Play - Play - qtl_menu_sec - common - menu - co - False - - - Displayed in FM Radio home screen widget's information area. - Easy Listening - Easy Listening - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1739,9 +1267,9 @@ Adult hits Adult hits qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1749,29 +1277,9 @@ (No songs) (No songs) qtl_view_empty_title_pri - rad_03 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Public - Public - txt_rad_info_news_hs - rad_05 + FmRadio_003 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Varied - Varied - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1784,74 +1292,24 @@ ra False - - A button text in main view. Allows the user to identify the currently playing song. Launches Shazam application which does the actual song identification. Displayed if Shazam application is available in the device. - Identify song - Identify song - txt_rad_button_stations - rad_01 - button - ra - False - - - Displayed in FM Radio home screen widget's information area. - Science - Science - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Jazz Music - Jazz Music - txt_rad_info_news_hs - rad_05 - info - ra - False - Second row on the Stations list item (PTY=Program type information). Documentary Documentary qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False Main pane Information area item. Displayed on the center of the area when searching for a strong signal station. Seeking Seeking - txt_rad_info_connect_wired_headset - rad_01 + txt_rad_list_seeking + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Folk Music - Folk Music - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Main pane information area item for the frequency. %L1 is the radio station's frequency. Displayed in big font. Displayed if station name is not available. Note that the "Mhz" text is displayed smaller than the actual frequency. - %L1 MHz - %L1 MHz - txt_rad_list_l1_mhz_big - rad_01 - list - ra + Fm False @@ -1859,29 +1317,29 @@ Top 40 Top 40 txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False - Second row on the Stations list item (PTY=Program type information). + Second row on the Stations list item (PTY=Program type information). News News qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False Main pane Information area item. Displayed if an antenna is not connected and no internal antenna is available. Connect wired headset. Connect wired headset. - txt_rad_info_connect_wired_headset - rad_01 + txt_rad_info_connect_wired_headset1 + FmRadio_001 info - ra + Fm False @@ -1889,9 +1347,9 @@ Easy Listening Easy Listening qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1899,9 +1357,9 @@ Finance Finance txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -1909,29 +1367,9 @@ Children’s programmes Children’s programmes qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra - False - - - Displayed in FM Radio home screen widget's information area. - Adult hits - Adult hits - txt_rad_info_news_hs - rad_05 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Serious classical - Serious classical - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -1939,49 +1377,19 @@ Documentary Documentary txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - College - College - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - A button text in main view. Adds the currently playing song to the Tagged songs list. - Tag song - Tag song - txt_rad_button_stations - rad_01 - button - ra - False - - - Notification text which is displayed in home screen widget, when the headset antenna is not connected. - Connect wired headset. - Connect wired headset. - txt_rad_info_news - rad_05 - info - ra + Fm False Text displayed in main view station information area (in place of station name) during the FM radio startup when the station information is waited to be loaded on the screen. FM Radio FM Radio - txt_rad_info_fm_radio - rad_01 + txt_rad_info_connect_wired_headset1 + FmRadio_001 info - ra + Fm False @@ -1989,9 +1397,9 @@ Light classical Light classical qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -1999,9 +1407,9 @@ Deactivate loudspeaker Deactivate loudspeaker txt_rad_button_stations - rad_01 + FmRadio_001 button - ra + Fm False @@ -2009,29 +1417,9 @@ Religious talk Religious talk txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Language - Language - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - A button text in main view. Starts the automatic frequency scanning for seeking all the available local stations - Search all stations - Search all stations - txt_rad_button_stations - rad_01 - button - ra + Fm False @@ -2039,9 +1427,9 @@ Travel Travel txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -2059,9 +1447,9 @@ Phone In Phone In qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -2069,9 +1457,9 @@ Oldies Music Oldies Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False @@ -2089,19 +1477,9 @@ Public Public txt_rad_info_news - rad_01 + FmRadio_001 info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Talk - Talk - txt_rad_info_news_hs - rad_05 - info - ra + Fm False @@ -2109,9 +1487,9 @@ %L1 MHz %L1 MHz qtl_list_pri_graphic_add - rad_02 + FmRadio_002 dblist - ra + Fm False @@ -2119,9 +1497,9 @@ %L1 MHz %L1 MHz txt_rad_list_l1_mhz_small - rad_01 + FmRadio_001 list - ra + Fm False @@ -2129,9 +1507,9 @@ Country Music Country Music qtl_list_sec_graphic - rad_02 + FmRadio_002 dblist_val - ra + Fm False @@ -2149,39 +1527,19 @@ Classic rock Classic rock txt_rad_info_news - rad_01 - info - ra - False - - - Displayed in FM Radio home screen widget's information area. - Travel - Travel - txt_rad_info_news_hs - rad_05 + FmRadio_001 info - ra - False - - - Options list item. Switches the audio from handset or handsfree to loudspeaker. Only available if audio can be routed to the loudspeaker. - Activate loudspeaker - Activate loudspeaker - qtl_menu_pri - common - opt - co + Fm False - Heading text for the Stations view's Play history view + Heading text for the Stations view's "All stations" view All stations All stations qtl_groupbox_simple_sec - rad_02 + FmRadio_002 subhead - ra + Fm False @@ -2189,9 +1547,9 @@ Folk Music Folk Music txt_rad_info_news - rad_01 + FmRadio_001 info - ra + Fm False diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/resources/qtg_large_radio.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioapplication/resources/qtg_large_radio.svg Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/resources/service_conf.xml --- a/radioapp/radioapplication/resources/service_conf.xml Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/resources/service_conf.xml Thu Jul 22 16:33:45 2010 +0100 @@ -1,15 +1,15 @@ - com.nokia.services.Radio + fmradio No path Radio services - IRadioControl + com.nokia.symbian.IRadioControl 1.0 Interface to control radio playback - IRadioMonitor + com.nokia.symbian.IRadioMonitor 1.0 Interface to monitor radio status changes diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/src/main.cpp --- a/radioapp/radioapplication/src/main.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/src/main.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -22,12 +22,6 @@ #include "radioapplication.h" #include "radiologger.h" -// Constants -#ifdef BUILD_WIN32 - const char* TRANSLATIONS_FOLDER = ""; -#else - const char* TRANSLATIONS_FOLDER = "/resource/qt/translations/"; -#endif // BUILD_WIN32 /*! * Runs the application @@ -40,7 +34,7 @@ RadioApplication app( argc, argv ); - HbTranslator translator( TRANSLATIONS_FOLDER, "fmradio" ); // TODO: Rename exe to fmradio.exe to get rid of this + HbTranslator translator; const int returnValue = app.exec(); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/src/radioapplication.cpp --- a/radioapp/radioapplication/src/radioapplication.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/src/radioapplication.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -17,7 +17,10 @@ // System includes #include +#include #include +#include +#include // User includes #include "radioapplication.h" @@ -44,7 +47,7 @@ * Constructor */ RadioApplication::RadioApplication( int &argc, char *argv[] ) : - HbApplication( argc, argv ) + HbApplication( argc, argv, Hb::NoSplash ) { // Initializes the radio engine utils if UI logs are entered into the engine log INIT_COMBINED_LOGGER @@ -52,6 +55,10 @@ LOG_TIMESTAMP( "Start radio" ); setApplicationName( hbTrId( "txt_rad_title_fm_radio" ) ); + if ( !XQServiceUtil::isService() ) { + HbSplashScreen::start(); + } + QTimer::singleShot( 0, this, SLOT(init()) ); } @@ -66,25 +73,33 @@ } /*! - *Private slot + * Private slot * */ void RadioApplication::init() { - bool okToStart = !RadioUiEngine::isOfflineProfile(); + // If started as a service, there is no need for offline-check + bool okToStart = XQServiceUtil::isService(); + QScopedPointer deviceInfo( new QtMobility::QSystemDeviceInfo() ); if ( !okToStart ) { - HbDeviceMessageBox box( hbTrId( "txt_rad_info_activate_radio_in_offline_mode" ), HbMessageBox::MessageTypeQuestion ); - box.setTimeout( HbPopup::NoTimeout ); - box.exec(); - okToStart = box.isAcceptAction( box.triggeredAction() ); + if ( deviceInfo->currentProfile() != QtMobility::QSystemDeviceInfo::OfflineProfile ) { + okToStart = true; + } else { + // Device is in offline profile, ask the user for permission to start + HbDeviceMessageBox box( hbTrId( "txt_rad_info_activate_radio_in_offline_mode" ), HbMessageBox::MessageTypeQuestion ); + box.setTimeout( HbPopup::NoTimeout ); + box.exec(); + okToStart = box.isAcceptAction( box.triggeredAction() ); + } } if ( okToStart ) { - // MainWindow needs to be alive to be able to show the offline query dialog. - // The window is only constructed half-way at this point because we may need to shut down if - // offline usage is not allowed + // Try to optimize startup time by launching the radio server process as soon as possible. + // This way the server and UI are being initialized at the same time and the startup is faster. +// RadioUiEngine::launchRadioServer(); + mMainWindow.reset( new RadioWindow() ); CREATE_WIN32_TEST_WINDOW @@ -92,7 +107,7 @@ INIT_WIN32_TEST_WINDOW // Construct the real views - mMainWindow->init(); + mMainWindow->init( deviceInfo.take() ); mMainWindow->show(); } else { diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioapplication/src/testwindow_win32.cpp --- a/radioapp/radioapplication/src/testwindow_win32.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioapplication/src/testwindow_win32.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -37,9 +37,10 @@ #include "radio_global.h" #include "radioenginewrapper_win32_p.h" -const int KWindowWidth = 360; -const int KWindowHeight = 640; -const int KToolbarHeight = 140; +const int WINDOW_WIDTH = 360; +const int WINDOW_HEIGHT = 640; +const int TOOLBAR_HEIGHT = 120; +const int WINDOW_EXTRA_WIDTH = 5; const QString KBtnDisconnectHeadset = "Disconnect Headset"; const QString KBtnConnectHeadset = "Connect Headset"; @@ -87,14 +88,14 @@ mThemeBox->setEditable( false ); initThemes(); - connectAndTest( mOrientationButton, SIGNAL(clicked()), this, SLOT(changeOrientation()) ); - connectAndTest( mVolUpButton, SIGNAL(clicked()), this, SLOT(volumeUp()) ); - connectAndTest( mVolDownButton, SIGNAL(clicked()), this, SLOT(volumeDown()) ); - connectAndTest( mHeadsetButton, SIGNAL(clicked()), this, SLOT(toggleHeadsetStatus()) ); - connectAndTest( mAddSongButton, SIGNAL(clicked()), this, SLOT(addSong()) ); - connectAndTest( mClearSongButton, SIGNAL(clicked()), this, SLOT(clearSong()) ); - connectAndTest( mOfflineButton, SIGNAL(clicked()), this, SLOT(toggleOffline()) ); - connectAndTest( mThemeBox, SIGNAL(activated(QString)), this, SLOT(changeTheme(QString)) ); + Radio::connect( mOrientationButton, SIGNAL(clicked()), this, SLOT(changeOrientation()) ); + Radio::connect( mVolUpButton, SIGNAL(clicked()), this, SLOT(volumeUp()) ); + Radio::connect( mVolDownButton, SIGNAL(clicked()), this, SLOT(volumeDown()) ); + Radio::connect( mHeadsetButton, SIGNAL(clicked()), this, SLOT(toggleHeadsetStatus()) ); + Radio::connect( mAddSongButton, SIGNAL(clicked()), this, SLOT(addSong()) ); + Radio::connect( mClearSongButton, SIGNAL(clicked()), this, SLOT(clearSong()) ); + Radio::connect( mOfflineButton, SIGNAL(clicked()), this, SLOT(toggleOffline()) ); + Radio::connect( mThemeBox, SIGNAL(activated(QString)), this, SLOT(changeTheme(QString)) ); QTimer::singleShot( 0, this, SLOT(updateWindowSize()) ); } @@ -186,8 +187,8 @@ */ void Win32Window::volumeUp() { - if ( ++mVolume > KMaximumVolumeLevel ) { - mVolume = KMaximumVolumeLevel; + if ( ++mVolume > MAXIMUM_VOLUME_LEVEL ) { + mVolume = MAXIMUM_VOLUME_LEVEL; } RadioEngineWrapperPrivate::instance()->setVolume( mVolume ); } @@ -223,9 +224,9 @@ void Win32Window::updateWindowSize() { if ( mOrientation == Qt::Horizontal ) { - resize( KWindowHeight, KWindowWidth + KToolbarHeight ); + resize( WINDOW_HEIGHT + WINDOW_EXTRA_WIDTH, WINDOW_WIDTH + TOOLBAR_HEIGHT ); } else { - resize( KWindowWidth, KWindowHeight + KToolbarHeight ); + resize( WINDOW_WIDTH + WINDOW_EXTRA_WIDTH, WINDOW_HEIGHT + TOOLBAR_HEIGHT ); } } @@ -267,6 +268,7 @@ */ void Win32Window::changeTheme( const QString& theme ) { + LOG_FORMAT( "Changing to theme %s", GETSTRING( theme ) ); QLocalSocket socket; socket.connectToServer( "hbthemeserver" ); if ( socket.waitForConnected( 3000 ) ) { @@ -341,7 +343,11 @@ rootDirs << envDir; } - rootDirs << HB_RESOURCES_DIR; + QString resourcesDir = HB_RESOURCES_DIR; + if ( resourcesDir.isEmpty() ) { + resourcesDir = "/hb_dev/src/hbcore/resources"; + } + rootDirs << resourcesDir; return rootDirs; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/cradioenginehandler.h --- a/radioapp/radioenginewrapper/inc/cradioenginehandler.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef _CRADIOENGINEHANDLER_H_ -#define _CRADIOENGINEHANDLER_H_ - -// System includes -#include - -#include - -// User includes -#include "radio_global.h" -#include "mradioengineinitializer.h" - -// Forward declarations -class CRadioEngine; -class MRadioScanObserver; -class MRadioRdsDataObserver; -class CRadioRepositoryManager; -class MRadioEngineHandlerObserver; -class MRadioApplicationSettings; - -// Class declaration -class CRadioEngineHandler : public CBase - , public MRadioEngineInitializer - { -public: - - CRadioEngineHandler( MRadioEngineHandlerObserver& aObserver ); - - ~CRadioEngineHandler(); - - void ConstructL(); - - /** - * Sets the rds data observer - */ - void SetRdsObserver( MRadioRdsDataObserver* aObserver ); - - /** - * Returns the radio status - * @return ETrue = radio is on, EFalse = radio is off - */ - TBool IsRadioOn(); - - /** - * Tune to the specified frequency - * @param aFrequency - frequency to lock onto. - */ - void Tune( TUint aFrequency ); - - /** - * Tune to the specified frequency after a delay - * @param aFrequency - frequency to lock onto. - */ - void TuneWithDelay( TUint aFrequency ); - - /** - * Sets the audio mute state - * @param aMuted - flag to determine whether mute should be turned on or off - */ - void SetMuted( const TBool aMuted ); - - /** - * Gets the audio mute state - * @return ETrue or EFalse to indicate whether mute is currently on. - */ - TBool IsMuted() const; - - /** - * Sets the volume level of the FM radio - * @param aVolume - the volume to be used. - */ - void SetVolume( TInt aVolume ); - - /** - * Gets the volumelevel. - * @return the current volume - */ - TInt Volume() const; - - /** - * Gets the max volumelevel. - * @return the max volume - */ - TInt MaxVolume() const; - - /** - * Increases the volume by one increment - */ - void IncreaseVolume(); - - /** - * Decreases the volume by one increment - */ - void DecreaseVolume(); - - /** - * Checks if the antenna is attached - * @return ETrue or EFalse to indicate whether antenna is currently attached. - */ - TBool IsAntennaAttached() const; - - /** - * Retrieves the current frequency. - * @return the frequency in hertz - */ - TUint TunedFrequency() const; - - /** - * Returns the minimum allowed frequency in the current region - */ - TUint MinFrequency() const; - - /** - * Returns the maximum allowed frequency in the current region - */ - TUint MaxFrequency() const; - - /** - * Checks if the given frequency is valid in the current region - */ - TBool IsFrequencyValid( TUint aFrequency ) const; - - /** - * Scan up to the next available frequency. - */ - void Seek( Seeking::Direction direction ); - - /** - * Cancel previously requested scan. - */ - void CancelSeek(); - - /** - * Returns the engine seeking state - */ - Seeking::State SeekingState() const; - - void StartScan( MRadioScanObserver& aObserver ); - - void StopScan( TInt aError = KErrCancel ); - - /** - * Rreturn step size for tuning. - * @return step size - */ - TUint32 FrequencyStepSize() const; - - /** - * Determine current region - * @return fmradio region. In case of error, returns EFMRadioRegionNone. - */ - RadioRegion::Region Region() const; - - /** - * Sets whether or not audio should be routed to loudspeaker - * @param aLoudspeaker ETrue if loudspeaker should be used, EFalse if not - */ - void SetAudioRouteToLoudspeaker( TBool aLoudspeaker ); - - /** - * Checks if audio is routed to loudspeaker - * @return ETrue if loudspeaker is used, EFalse if headset is used - */ - TBool IsAudioRoutedToLoudspeaker() const; - - /** - * Returns ar reference to the publish & subscribe handler - */ - CRadioPubSub& PubSub(); - - /** - * Returns the repository manager. - * - * @return The repository manager. - */ - CRadioRepositoryManager& Repository() const; - - MRadioApplicationSettings& ApplicationSettings() const; - -private: - -// from base class MRadioEngineInitializer - - CRadioAudioRouter* InitAudioRouterL(); - CRadioSystemEventCollector* InitSystemEventCollectorL(); - CRadioSettings* InitSettingsL(); - CRadioPubSub* InitPubSubL(); - -// New functions - - /** - * Static callback function to be used by the tune delay timer - * @param aSelf Pointer to this - * @return not used - */ - static TInt TuneDelayCallback( TAny* aSelf ); - -private: // data - - /** - * Radio engine holder - * Own. - */ - CRadioEngine* iEngine; - - /** - * Radio handler observer - * Not own. - */ - MRadioEngineHandlerObserver& iObserver; - - /** - * Frequency used by delayed tuning - */ - TUint iFrequency; - - /** - * Timer used for delayed tuning - * Own. - */ - CPeriodic* iDelayTimer; - - /** - * Selected radio region - */ - RadioRegion::Region iRegion; - - }; - -#endif //_CRADIOENGINEHANDLER_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/mradioenginehandlerobserver.h --- a/radioapp/radioenginewrapper/inc/mradioenginehandlerobserver.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/mradioenginehandlerobserver.h Thu Jul 22 16:33:45 2010 +0100 @@ -22,13 +22,11 @@ #include "mradioengineobserver.h" #include "mradioaudioroutingobserver.h" #include "mradiosystemeventobserver.h" -#include "mradiorepositoryentityobserver.h" // Class declaration NONSHARABLE_CLASS( MRadioEngineHandlerObserver ) : public MRadioEngineObserver , public MRadioAudioRoutingObserver , public MRadioSystemEventObserver - , public MRadioRepositoryEntityObserver { public: diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radiocontroleventlistener.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radioenginehandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/inc/radioenginehandler.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,220 @@ +/* +* 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: +* +*/ + +#ifndef _RADIOENGINEHANDLER_H_ +#define _RADIOENGINEHANDLER_H_ + +// System includes +#include + +// User includes +#include "radio_global.h" +#include "mradioengineinitializer.h" + +// Forward declarations +class CRadioEngine; +class MRadioRdsDataObserver; +class MRadioEngineHandlerObserver; +class MRadioApplicationSettings; + +// Class declaration +class RadioEngineHandler : public MRadioEngineInitializer +{ +public: + + RadioEngineHandler( MRadioEngineHandlerObserver& observer ); + + ~RadioEngineHandler(); + + /*! + * Attempts to construct the radio engine + */ + bool constructEngine(); + + /*! + * Sets the rds data observer + */ + void setRdsObserver( MRadioRdsDataObserver* observer ); + + /*! + * Starts or stops receiving RDS data + */ + void setRdsEnabled( bool rdsEnabled ); + + /*! + * Returns the radio status + * @return ETrue = radio is on, EFalse = radio is off + */ + bool isRadioOn(); + + /*! + * Sets the manual seek status + */ + void setManualSeekMode( bool manualSeek ); + + /*! + * Returns the manual seek status + */ + bool isInManualSeekMode() const; + + /*! + * Tune to the specified frequency + * @param aFrequency - frequency to lock onto. + */ + void setFrequency( uint frequency ); + + /*! + * Sets the audio mute state + * @param aMuted - flag to determine whether mute should be turned on or off + */ + void setMute( const bool muted, const bool updateSettings = true ); + + /*! + * Gets the audio mute state + * @return ETrue or EFalse to indicate whether mute is currently on. + */ + bool isMuted() const; + + /*! + * Sets the volume level of the FM radio + * @param aVolume - the volume to be used. + */ + void setVolume( int newVolume ); + + /*! + * Gets the volumelevel. + * @return the current volume + */ + int volume() const; + + /*! + * Gets the max volumelevel. + * @return the max volume + */ + int maxVolume() const; + + /*! + * Increases the volume by one increment + */ + void increaseVolume(); + + /*! + * Decreases the volume by one increment + */ + void decreaseVolume(); + + /*! + * Checks if the antenna is attached + * @return ETrue or EFalse to indicate whether antenna is currently attached. + */ + bool isAntennaAttached() const; + + /*! + * Retrieves the current frequency. + * @return the frequency in hertz + */ + uint currentFrequency() const; + + /*! + * Returns the minimum allowed frequency in the current region + */ + uint minFrequency() const; + + /*! + * Returns the maximum allowed frequency in the current region + */ + uint maxFrequency() const; + + /*! + * Checks if the given frequency is valid in the current region + */ + bool isFrequencyValid( uint frequency ) const; + + /*! + * Scan up to the next available frequency. + */ + void seek( Seek::Direction direction ); + + /*! + * Cancel previously requested scan. + */ + void cancelSeek(); + + /*! + * Returns the engine seeking state + */ + Seek::State seekingState() const; + + /*! + * Rreturn step size for tuning. + * @return step size + */ + uint frequencyStepSize() const; + + /*! + * Determine current region + * @return fmradio region. In case of error, returns EFMRadioRegionNone. + */ + RadioRegion::Region region() const; + + /*! + * Sets whether or not audio should be routed to loudspeaker + * @param aLoudspeaker ETrue if loudspeaker should be used, EFalse if not + */ + void setAudioRouteToLoudspeaker( bool loudspeaker ); + + /*! + * Checks if audio is routed to loudspeaker + * @return ETrue if loudspeaker is used, EFalse if headset is used + */ + bool isAudioRoutedToLoudspeaker() const; + + /*! + * Returns a reference to the application settings + */ + MRadioApplicationSettings& applicationSettings() const; + +private: + +// from base class MRadioEngineInitializer + + CRadioAudioRouter* InitAudioRouterL(); + CRadioSystemEventCollector* InitSystemEventCollectorL(); + CRadioSettings* InitSettingsL(); + +private: // data + + /*! + * Radio engine holder + * Own. + */ + QScopedPointer mEngine; + + /*! + * Radio handler observer + * Not own. + */ + MRadioEngineHandlerObserver& mObserver; + + /*! + * Selected radio region + */ + RadioRegion::Region mRegion; + +}; + +#endif //_RADIOENGINEHANDLER_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radioenginewrapper.h --- a/radioapp/radioenginewrapper/inc/radioenginewrapper.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radioenginewrapper.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,6 +19,7 @@ #define RADIOENGINEWRAPPER_H // System includes +#include // User includes #include "radiowrapperexport.h" @@ -33,7 +34,7 @@ // Class declaration class WRAPPER_DLL_EXPORT RadioEngineWrapper { - Q_DECLARE_PRIVATE_D( d_ptr, RadioEngineWrapper ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioEngineWrapper ) Q_DISABLE_COPY( RadioEngineWrapper ) public: @@ -44,15 +45,12 @@ RadioEngineWrapper( RadioStationHandlerIf& stationHandler ); ~RadioEngineWrapper(); + bool init(); + void addObserver( RadioEngineWrapperObserver* observer ); void removeObserver( RadioEngineWrapperObserver* observer ); /** - * Checks if the radio engine has been constructed properly - */ - bool isEngineConstructed(); - - /** * Getters for things owned by the engine */ RadioSettingsIf& settings(); @@ -64,7 +62,7 @@ uint minFrequency() const; uint maxFrequency() const; uint frequencyStepSize() const; - bool isFrequencyValid( uint frequency ); + bool isFrequencyValid( uint frequency ) const; /** * Getters for current radio status @@ -75,20 +73,26 @@ bool isAntennaAttached() const; bool isUsingLoudspeaker() const; + void setManualSeekMode( bool manualSeek ); + bool isInManualSeekMode() const; + + void setRdsEnabled( bool rdsEnabled ); + /** - * Functions to tune to given frequency or preset + * Tunes to the given frequency */ - void tuneFrequency( uint frequency, const int reason = TuneReason::Unspecified ); - void tuneWithDelay( uint frequency, const int reason = TuneReason::Unspecified ); + void setFrequency( uint frequency, const int reason = TuneReason::Unspecified ); /*! * Audio update command functions for the engine */ + void increaseVolume(); + void decreaseVolume(); void setVolume( int volume ); - void setMute( bool muted ); + void setMute( bool muted, bool updateSettings = true ); void toggleAudioRoute(); - void startSeeking( Seeking::Direction direction, const int reason = TuneReason::Unspecified ); + void startSeeking( Seek::Direction direction, const int reason = TuneReason::Unspecified ); void cancelSeeking(); private: // data @@ -96,7 +100,7 @@ /** * Unmodifiable pointer to the private implementation */ - RadioEngineWrapperPrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radioenginewrapper_p.h --- a/radioapp/radioenginewrapper/inc/radioenginewrapper_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radioenginewrapper_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -28,7 +28,7 @@ #include "mradioenginehandlerobserver.h" // Forward declarations -class CRadioEngineHandler; +class RadioEngineHandler; class RadioControlEventListener; class RadioRdsListener; class RadioSettingsIf; @@ -63,8 +63,7 @@ /** * Initialization and startup */ - void init(); - bool isEngineConstructed(); + bool init(); /** * Returns the radio settings @@ -75,17 +74,16 @@ * Getter for CRadioEngineHandler instance. * Returns reference to the CRadioEngineHandler */ - CRadioEngineHandler& RadioEnginehandler(); + RadioEngineHandler& radioEnginehandler(); /** - * Functions called from slots to tune to given frequency or preset + * Tunes to given frequency */ - void tuneFrequency( uint frequency, const int reason ); - void tuneWithDelay( uint frequency, const int reason ); + void setFrequency( uint frequency, const int reason ); ObserverList& observers(); - void startSeeking( Seeking::Direction direction, const int reason = TuneReason::Unspecified ); + void startSeeking( Seek::Direction direction, const int reason = TuneReason::Unspecified ); private: @@ -110,13 +108,6 @@ void HandleSystemEventL( TRadioSystemEventType aEventType ); -// from base class MRadioRepositoryEntityObserver - - void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, TInt aValue, TInt aError ); - void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TReal& /*aValue*/, TInt /*aError*/ ) {} - void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TDesC8& /*aValue*/, TInt /*aError*/ ) {} - void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TDesC16& /*aValue*/, TInt /*aError*/ ) {} - private: // data /** @@ -146,7 +137,7 @@ * Radio engine handler. * Own. */ - QScopedPointer mEngineHandler; + QScopedPointer mEngineHandler; /** * RemCon listener. diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h --- a/radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -65,8 +65,7 @@ /** * Initialization and startup */ - void init(); - bool isEngineConstructed(); + bool init(); /** * Returns the radio settings @@ -74,14 +73,13 @@ RadioSettingsIf& settings(); /** - * Functions called from slots to tune to given frequency or preset + * Tunes to the given frequency */ - void tuneFrequency( uint frequency, const int reason ); - void tuneWithDelay( uint frequency, const int reason ); + void setFrequency( uint frequency, const int reason ); ObserverList& observers(); - void startSeeking( Seeking::Direction direction, const int reason ); + void startSeeking( Seek::Direction direction, const int reason ); void cancelSeeking(); void toggleAudioRoute(); @@ -139,12 +137,6 @@ QTimer* mTuneTimer; - /** - * Preset scanning handler - * Own. - */ -// QScopedPointer mFrequencyScanningHandler; - // QScopedPointer mDataParser; QString mParsingError; @@ -177,6 +169,8 @@ QString mArtist; QString mTitle; + bool mManualSeekMode; + }; #endif // RADIOENGINEWRAPPER_P_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radioenginewrapperobserver.h --- a/radioapp/radioenginewrapper/inc/radioenginewrapperobserver.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radioenginewrapperobserver.h Thu Jul 22 16:33:45 2010 +0100 @@ -31,6 +31,8 @@ virtual void rdsAvailabilityChanged( bool available ); + virtual void increaseVolume(); + virtual void decreaseVolume(); virtual void volumeChanged( int volume ); virtual void muteChanged( bool muted ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radioenummapper.h --- a/radioapp/radioenginewrapper/inc/radioenummapper.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radioenummapper.h Thu Jul 22 16:33:45 2010 +0100 @@ -31,7 +31,7 @@ */ #define BEGIN_ENUM_MAP(name) const RadioEnumMapper::EnumMap name[] = { #define ENUM_MAP_ITEM(ui_enum, engine_enum ) { ui_enum, engine_enum } -#define END_ENUM_MAP(name) }; const TInt name ## Count = sizeof ( name ) / sizeof ( name[0] ); +#define END_ENUM_MAP(name) }; const int name ## Count = sizeof ( name ) / sizeof ( name[0] ); /*! * Convenience macros to do the mappings diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radiosettings.h --- a/radioapp/radioenginewrapper/inc/radiosettings.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radiosettings.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ // System includes #include +#include // User includes #include "radiosettingsif.h" @@ -30,7 +31,7 @@ // Class declaration class RadioSettings : public RadioSettingsIf { - Q_DECLARE_PRIVATE_D( d_ptr, RadioSettings ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioSettings ) Q_DISABLE_COPY( RadioSettings ) friend class RadioEngineWrapperPrivate; @@ -46,6 +47,7 @@ // from base class RadioSettingsIf bool isFirstTimeStart(); + void setFirstTimeStartPerformed( bool firstTimeStartPerformed ); bool showFavorites() const; void setShowFavorites( bool showFavorites ); bool toggleShowFavorites(); @@ -55,7 +57,7 @@ /** * Unmodifiable pointer to the private implementation */ - RadioSettingsPrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radiosettings_p.h --- a/radioapp/radioenginewrapper/inc/radiosettings_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radiosettings_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -51,6 +51,7 @@ // First time start bool isFirstTimeStart(); + void setFirstTimeStartPerformed( bool firstTimeStartPerformed ); bool isFlagSet( ToggleFlag flag ) const; void toggleFlag( ToggleFlag flag ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radiosettingsif.h --- a/radioapp/radioenginewrapper/inc/radiosettingsif.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/inc/radiosettingsif.h Thu Jul 22 16:33:45 2010 +0100 @@ -25,6 +25,7 @@ // First time start virtual bool isFirstTimeStart() = 0; + virtual void setFirstTimeStartPerformed( bool firstTimeStartPerformed ) = 0; // Favorites virtual bool showFavorites() const = 0; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/radiostationhandlerif.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/inc/t_radiodataparser.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/radioenginewrapper.pro --- a/radioapp/radioenginewrapper/radioenginewrapper.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/radioenginewrapper.pro Thu Jul 22 16:33:45 2010 +0100 @@ -14,17 +14,20 @@ # Description: # +TMP_DIR_NAME = enginewrapper include(../buildflags.pri) TEMPLATE = lib -TARGET = radioenginewrapper +TARGET = fmradioenginewrapper CONFIG += dll DEFINES += BUILD_WRAPPER_DLL +symbian:TARGET.UID3 = 0x2002EAD8 + USE_DUMMY_RADIO_DATA:QT += xml INCLUDEPATH += inc -INCLUDEPATH += ../commoninc +INCLUDEPATH += ../../common # Common headers HEADERS += radiowrapperexport.h @@ -51,11 +54,11 @@ INCLUDEPATH += ../../radioengine/settings/api INCLUDEPATH += ../../radioengine/engine/api - LIBS *= -lradioengineutils - LIBS *= -lradioenginesettings - LIBS *= -lradioengine + LIBS *= -lfmradioengineutils + LIBS *= -lfmradioenginesettings + LIBS *= -lfmradioengine - HEADERS += cradioenginehandler.h + HEADERS += radioenginehandler.h HEADERS += mradioenginehandlerobserver.h HEADERS += radiocontroleventlistener.h HEADERS += radiordslistener.h @@ -65,7 +68,7 @@ SOURCES += radiosettings_p.cpp SOURCES += radioenginewrapper.cpp SOURCES += radioenginewrapper_p.cpp - SOURCES += cradioenginehandler.cpp + SOURCES += radioenginehandler.cpp SOURCES += radiocontroleventlistener.cpp SOURCES += radiordslistener.cpp } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/cradioenginehandler.cpp --- a/radioapp/radioenginewrapper/src/cradioenginehandler.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,461 +0,0 @@ -/* -* 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: -* -*/ - -// User includes -#include "cradioengine.h" -#include "cradioaudiorouter.h" -#include "cradiosystemeventcollector.h" -#include "cradiosettings.h" -#include "mradioenginesettings.h" -#include "cradiopubsub.h" -#include "cradiorepositorymanager.h" -#include "mradiordsreceiver.h" -#include "cradioenginehandler.h" -#include "mradioenginehandlerobserver.h" -#include "radio_global.h" -#include "radiologger.h" -#include "radioenummapper.h" - -/** - * Delayed tuning delay - */ -const TInt KTuneDelay = 100000; - -/*! - * Map to translate seek direction enum from its definition in the engine to - * its definition in the ui and vice versa - */ -BEGIN_ENUM_MAP( KSeekDirectionMap ) - ENUM_MAP_ITEM( Seeking::Down, RadioEngine::ERadioDown ), - ENUM_MAP_ITEM( Seeking::Up, RadioEngine::ERadioUp ) -END_ENUM_MAP( KSeekDirectionMap ) - -/*! - * Convenience macro to do the mapping of seek directions - */ -#define MAP_FROM_UI_DIRECTION(ui_enum) MAP_FROM_UI_ENUM( RadioEngine::TRadioTuneDirection, ui_enum, KSeekDirectionMap ) - -/*! - * Map to translate radio region enum from its definition in the engine to - * its definition in the ui and vice versa - */ -BEGIN_ENUM_MAP( KRegionMap ) - ENUM_MAP_ITEM( RadioRegion::None, ERadioRegionNone ), - ENUM_MAP_ITEM( RadioRegion::Default, ERadioRegionDefault ), - ENUM_MAP_ITEM( RadioRegion::Japan, ERadioRegionJapan ), - ENUM_MAP_ITEM( RadioRegion::America, ERadioRegionAmerica ), - ENUM_MAP_ITEM( RadioRegion::Poland, ERadioRegionPoland ), -END_ENUM_MAP( KRegionMap ) - -/*! - * Convenience macros to do the mapping of radio regions - */ -#define MAP_FROM_UI_REGION(ui_enum) MAP_FROM_UI_ENUM( TRadioRegion, ui_enum, KRegionMap ) -#define MAP_TO_UI_REGION(engine_enum) MAP_TO_UI_ENUM( RadioRegion::Region, engine_enum, KRegionMap ) - -/*! - * Map to translate seeking state enum from its definition in the engine to - * its definition in the ui and vice versa - */ -BEGIN_ENUM_MAP( KSeekingStateMap ) - ENUM_MAP_ITEM( Seeking::NotSeeking, RadioEngine::ERadioNotSeeking ), - ENUM_MAP_ITEM( Seeking::SeekingUp, RadioEngine::ERadioSeekingUp ), - ENUM_MAP_ITEM( Seeking::SeekingDown, RadioEngine::ERadioSeekingDown ) -END_ENUM_MAP( KSeekingStateMap ) - -/*! - * Convenience macro to do the mapping of seeking states - */ -#define MAP_TO_UI_SEEKING_STATE(ui_enum) MAP_TO_UI_ENUM( Seeking::State, ui_enum, KSeekingStateMap ) - - -// ======== MEMBER FUNCTIONS ======== - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioEngineHandler::CRadioEngineHandler( MRadioEngineHandlerObserver& aObserver ) - : iObserver( aObserver ) - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioEngineHandler::~CRadioEngineHandler() - { - if ( iEngine ) { - iEngine->Settings().Repository().RemoveObserver( &iObserver ); - } - - delete iEngine; - delete iDelayTimer; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::ConstructL() - { - LOG_METHOD; - - iDelayTimer = CPeriodic::NewL( CActive::EPriorityStandard ); - - iEngine = CRadioEngine::NewL( *this ); - - iEngine->SystemEventCollector().AddObserverL( &iObserver ); - iEngine->Settings().Repository().AddObserverL( &iObserver ); - iEngine->AudioRouter().SetAudioRouteL( RadioEngine::ERadioHeadset ); - iEngine->AddObserverL( &iObserver ); - - iRegion = MAP_TO_UI_REGION( iEngine->Settings().EngineSettings().RegionId() ); - -// iEngineHolder->PubSub().SetControlEventObserver( &iObserver ); - -// iRadioEngine->SetVolumeMuted( EFalse ); -// iRadioEngine->SetVolume( MaxVolume() ); - -// CVRRepositoryManager::GetRepositoryValueL( KVRCRUid, KVRCRLaunchCount, usageCount ); -// CVRRepositoryManager::SetRepositoryValueL( KVRCRUid, KVRCRLaunchCount, ++usageCount ); -// iControlEventObserver = CVRControlEventObserverImpl::NewL( *this ); -// doc->PubSubL().SetControlEventObserver( iControlEventObserver ); - } - -// --------------------------------------------------------------------------- -// Sets the rds data observer -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::SetRdsObserver( MRadioRdsDataObserver* aObserver ) - { - TRAP_IGNORE( iEngine->RdsReceiver().AddObserverL( aObserver ) ); - } - -// --------------------------------------------------------------------------- -// Returns the radio status. -// --------------------------------------------------------------------------- -// -TBool CRadioEngineHandler::IsRadioOn() - { - return iEngine->Settings().EngineSettings().IsPowerOn(); - } - -// --------------------------------------------------------------------------- -// Tune to the specified frequency -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::Tune( TUint aFrequency ) - { - iEngine->SetFrequency( aFrequency ); - } - -// --------------------------------------------------------------------------- -// Tune to the specified frequency after a delay -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::TuneWithDelay( TUint aFrequency ) - { - iFrequency = aFrequency; - iDelayTimer->Cancel(); - iDelayTimer->Start( KTuneDelay, KTuneDelay, TCallBack( TuneDelayCallback, this ) ); - } - -// --------------------------------------------------------------------------- -// Sets the audio mute state -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::SetMuted( const TBool aMuted ) - { - iEngine->SetVolumeMuted( aMuted ); - } - -// --------------------------------------------------------------------------- -// Gets the audio mute state -// --------------------------------------------------------------------------- -// -TBool CRadioEngineHandler::IsMuted() const - { - return iEngine->Settings().EngineSettings().IsVolMuted(); - } - -// --------------------------------------------------------------------------- -// Sets the volume level of the FM radio -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::SetVolume( TInt aVolume ) - { - if ( Volume() != aVolume ) - { - if ( aVolume > 0 ) - { - iEngine->SetVolumeMuted( EFalse ); - } - - iEngine->SetVolume( aVolume ); - } - } - -// --------------------------------------------------------------------------- -// Gets the volumelevel. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineHandler::Volume() const - { - return iEngine->Settings().EngineSettings().Volume(); - } - -// --------------------------------------------------------------------------- -// Gets the max volumelevel. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineHandler::MaxVolume() const - { - return iEngine->MaxVolumeLevel(); - } - -// --------------------------------------------------------------------------- -// Increases the volume by one increment -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::IncreaseVolume() - { - iEngine->AdjustVolume( RadioEngine::ERadioIncVolume ); - } - -// --------------------------------------------------------------------------- -// Decreases the volume by one increment -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::DecreaseVolume() - { - iEngine->AdjustVolume( RadioEngine::ERadioDecVolume ); - } - -// --------------------------------------------------------------------------- -// Checks if the antenna is attached -// --------------------------------------------------------------------------- -// -TBool CRadioEngineHandler::IsAntennaAttached() const - { - return iEngine->IsAntennaAttached(); - } - -// --------------------------------------------------------------------------- -// Retrieves the current frequency. -// --------------------------------------------------------------------------- -// -TUint CRadioEngineHandler::TunedFrequency() const - { - return iEngine->Settings().EngineSettings().TunedFrequency(); - } - -// --------------------------------------------------------------------------- -// Returns the minimum allowed frequency in the current region -// --------------------------------------------------------------------------- -// -TUint CRadioEngineHandler::MinFrequency() const - { - return iEngine->Settings().EngineSettings().MinFrequency(); - } - -// --------------------------------------------------------------------------- -// Returns the maximum allowed frequency in the current region -// --------------------------------------------------------------------------- -// -TUint CRadioEngineHandler::MaxFrequency() const - { - return iEngine->Settings().EngineSettings().MaxFrequency(); - } - -// --------------------------------------------------------------------------- -// Checks if the given frequency is valid in the current region -// --------------------------------------------------------------------------- -// -TBool CRadioEngineHandler::IsFrequencyValid( TUint aFrequency ) const - { - return iEngine->IsFrequencyValid( aFrequency ); - } - -// --------------------------------------------------------------------------- -// Scan up to the next available frequency -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::Seek( Seeking::Direction direction ) - { - LOG_TIMESTAMP( "Seek" ); - iEngine->Seek( MAP_FROM_UI_DIRECTION( direction ) ); - } - -// --------------------------------------------------------------------------- -// Cancel previously requested scan, and return to the -// already tuned frequency -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::CancelSeek() - { - iEngine->CancelSeek(); - } - -// --------------------------------------------------------------------------- -// Returns the engine seeking state -// --------------------------------------------------------------------------- -// -Seeking::State CRadioEngineHandler::SeekingState() const - { - return MAP_TO_UI_SEEKING_STATE( iEngine->Seeking() ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::StartScan( MRadioScanObserver& aObserver ) - { - iEngine->StartScan( aObserver ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::StopScan( TInt aError ) - { - iEngine->StopScan( aError ); - } - -// --------------------------------------------------------------------------- -// return step size for tuning. -// --------------------------------------------------------------------------- -// -TUint32 CRadioEngineHandler::FrequencyStepSize() const - { - return iEngine->Settings().EngineSettings().FrequencyStepSize(); - } - -// ---------------------------------------------------------------------------------------------------- -// Returns the selected radio region -// ---------------------------------------------------------------------------------------------------- -// -RadioRegion::Region CRadioEngineHandler::Region() const - { - return iRegion; - } - -// --------------------------------------------------------------------------- -// Sets whether or not audio should be routed to loudspeaker -// --------------------------------------------------------------------------- -// -void CRadioEngineHandler::SetAudioRouteToLoudspeaker( TBool aLoudspeaker ) - { - TRAPD( err, iEngine->AudioRouter().SetAudioRouteL( aLoudspeaker ? RadioEngine::ERadioSpeaker - : RadioEngine::ERadioHeadset ) ); - if ( err ) - { - LOG_FORMAT( "Failed to set audioroute: UseLoudspeadker: %d", aLoudspeaker ); - } - } - -// --------------------------------------------------------------------------- -// Checks if audio is routed to loudspeaker -// --------------------------------------------------------------------------- -// -TBool CRadioEngineHandler::IsAudioRoutedToLoudspeaker() const - { - return iEngine->Settings().EngineSettings().AudioRoute() == RadioEngine::ERadioSpeaker; - } - -// --------------------------------------------------------------------------- -// Returns ar reference to the publish & subscribe handler -// --------------------------------------------------------------------------- -// -CRadioPubSub& CRadioEngineHandler::PubSub() - { - return *iEngine->PubSub(); - } - -// --------------------------------------------------------------------------- -// Returns the repository manager. -// --------------------------------------------------------------------------- -// -CRadioRepositoryManager& CRadioEngineHandler::Repository() const - { - return iEngine->Settings().Repository(); - } - -// --------------------------------------------------------------------------- -// Returns the repository manager. -// --------------------------------------------------------------------------- -// -MRadioApplicationSettings& CRadioEngineHandler::ApplicationSettings() const - { - return iEngine->Settings().ApplicationSettings(); - } - -// --------------------------------------------------------------------------- -// From MRadioEngineInitializer -// -// --------------------------------------------------------------------------- -// -CRadioAudioRouter* CRadioEngineHandler::InitAudioRouterL() - { - return CRadioAudioRouter::NewL( iObserver ); - } - -// --------------------------------------------------------------------------- -// From MRadioEngineInitializer -// -// --------------------------------------------------------------------------- -// -CRadioSystemEventCollector* CRadioEngineHandler::InitSystemEventCollectorL() - { - return CRadioSystemEventCollector::NewL(); - } - -// --------------------------------------------------------------------------- -// From MRadioEngineInitializer -// -// --------------------------------------------------------------------------- -// -CRadioSettings* CRadioEngineHandler::InitSettingsL() - { - return CRadioSettings::NewL(); - } - -// --------------------------------------------------------------------------- -// From MRadioEngineInitializer -// -// --------------------------------------------------------------------------- -// -CRadioPubSub* CRadioEngineHandler::InitPubSubL() - { - return CRadioPubSub::NewL(); - } - -// -------------------------------------------------------------------------------- -// Static callback function to be used by the tune delay timer -// -------------------------------------------------------------------------------- -// -TInt CRadioEngineHandler::TuneDelayCallback( TAny* aSelf ) - { - CRadioEngineHandler* self = static_cast( aSelf ); - self->iDelayTimer->Cancel(); - self->Tune( self->iFrequency ); - return 0; // Not used by CPeriodic - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radiocontroleventlistener.cpp --- a/radioapp/radioenginewrapper/src/radiocontroleventlistener.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radiocontroleventlistener.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -18,7 +18,7 @@ #include "radiocontroleventlistener.h" #include "radioenginewrapper_p.h" #include "radioenginewrapperobserver.h" -#include "cradioenginehandler.h" +#include "radioenginehandler.h" #include "radiologger.h" #include "cradioremcontarget.h" /*! @@ -41,10 +41,12 @@ */ void RadioControlEventListener::init() { - TRAPD( err, mRemCon.reset( CRadioRemConTarget::NewL() ) ); + CRadioRemConTarget* target = NULL; + TRAPD( err, target = CRadioRemConTarget::NewL() ); LOG_ASSERT( !err, LOG_FORMAT( "RadioControlEventListener::init Failed with err, %d", err ) ); if ( !err ) { + mRemCon.reset( target ); mRemCon->SetControlEventObserver( this ); } } @@ -71,7 +73,7 @@ void RadioControlEventListener::SeekL( RadioEngine::TRadioTuneDirection aDirection ) { LOG_FORMAT( "RadioControlEventListener::SeekL: Direction: %d", aDirection ); - mEngine.startSeeking( aDirection == RadioEngine::ERadioDown ? Seeking::Down : Seeking::Up ); + mEngine.startSeeking( aDirection == RadioEngine::ERadioDown ? Seek::Down : Seek::Up ); } /*! @@ -104,7 +106,7 @@ void RadioControlEventListener::MuteL( TBool aMute ) { LOG_FORMAT( "RadioControlEventListener::MuteL: Mute: %d", aMute ); - mEngine.RadioEnginehandler().SetMuted( aMute ); + mEngine.radioEnginehandler().setMute( aMute ); } /*! @@ -112,10 +114,9 @@ */ void RadioControlEventListener::PlayL( TBool aDownPressed ) { - if( aDownPressed ) - { - mEngine.RadioEnginehandler().SetMuted( false ); - } + if ( aDownPressed ) { + mEngine.radioEnginehandler().setMute( false ); + } } /*! @@ -123,10 +124,9 @@ */ void RadioControlEventListener::PauseL( TBool aDownPressed ) { - if( aDownPressed ) - { - mEngine.RadioEnginehandler().SetMuted( true ); - } + if ( aDownPressed ) { + mEngine.radioEnginehandler().setMute( true ); + } } /*! @@ -134,11 +134,10 @@ */ void RadioControlEventListener::PausePlayL( TBool aDownPressed ) { - if( aDownPressed ) - { - const TBool muted = !mEngine.RadioEnginehandler().IsMuted(); - mEngine.RadioEnginehandler().SetMuted( muted ); - } + if ( aDownPressed ) { + const bool muted = !mEngine.radioEnginehandler().isMuted(); + mEngine.radioEnginehandler().setMute( muted ); + } } /*! @@ -146,10 +145,9 @@ */ void RadioControlEventListener::StopL( TBool aDownPressed ) { - if( aDownPressed ) - { - mEngine.RadioEnginehandler().SetMuted( ETrue ); - } + if ( aDownPressed ) { + mEngine.radioEnginehandler().setMute( true ); + } } /*! @@ -157,7 +155,7 @@ */ void RadioControlEventListener::ForwardL( TBool aDownPressed ) { - if( aDownPressed ) { + if ( aDownPressed ) { RUN_NOTIFY_LOOP( mEngine.observers(), skipNext() ); } } @@ -167,9 +165,8 @@ */ void RadioControlEventListener::FastForwardL( TBool aDownPressed ) { - if( aDownPressed ) - { - mEngine.startSeeking( Seeking::Up ); + if ( aDownPressed ) { + mEngine.startSeeking( Seek::Up ); } } @@ -178,7 +175,7 @@ */ void RadioControlEventListener::BackwardL( TBool aDownPressed ) { - if( aDownPressed ) { + if ( aDownPressed ) { RUN_NOTIFY_LOOP( mEngine.observers(), skipPrevious() ); } } @@ -188,8 +185,8 @@ */ void RadioControlEventListener::RewindL( TBool aDownPressed ) { - if( aDownPressed ) { - mEngine.startSeeking( Seeking::Down ); + if ( aDownPressed ) { + mEngine.startSeeking( Seek::Down ); } } @@ -215,7 +212,7 @@ void RadioControlEventListener::VolumeUpL( TBool aDownPressed ) { if ( aDownPressed ) { - mEngine.RadioEnginehandler().IncreaseVolume(); + RUN_NOTIFY_LOOP( mEngine.observers(), increaseVolume() ); } } @@ -225,7 +222,7 @@ void RadioControlEventListener::VolumeDownL( TBool aDownPressed ) { if ( aDownPressed ) { - mEngine.RadioEnginehandler().DecreaseVolume(); + RUN_NOTIFY_LOOP( mEngine.observers(), decreaseVolume() ); } } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radioenginehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/src/radioenginehandler.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,366 @@ +/* +* 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: +* +*/ + +// User includes +#include "cradioengine.h" +#include "cradioaudiorouter.h" +#include "cradiosystemeventcollector.h" +#include "cradiosettings.h" +#include "mradioenginesettings.h" +#include "cradiorepositorymanager.h" +#include "mradiordsreceiver.h" +#include "radioenginehandler.h" +#include "mradioenginehandlerobserver.h" +#include "radio_global.h" +#include "radiologger.h" +#include "radioenummapper.h" + +/*! + * Map to translate seek direction enum from its definition in the engine to + * its definition in the ui and vice versa + */ +BEGIN_ENUM_MAP( KSeekDirectionMap ) + ENUM_MAP_ITEM( Seek::Down, RadioEngine::ERadioDown ), + ENUM_MAP_ITEM( Seek::Up, RadioEngine::ERadioUp ) +END_ENUM_MAP( KSeekDirectionMap ) + +/*! + * Convenience macro to do the mapping of seek directions + */ +#define MAP_FROM_UI_DIRECTION(ui_enum) MAP_FROM_UI_ENUM( RadioEngine::TRadioTuneDirection, ui_enum, KSeekDirectionMap ) + +/*! + * Map to translate radio region enum from its definition in the engine to + * its definition in the ui and vice versa + */ +BEGIN_ENUM_MAP( KRegionMap ) + ENUM_MAP_ITEM( RadioRegion::None, ERadioRegionNone ), + ENUM_MAP_ITEM( RadioRegion::Default, ERadioRegionDefault ), + ENUM_MAP_ITEM( RadioRegion::Japan, ERadioRegionJapan ), + ENUM_MAP_ITEM( RadioRegion::America, ERadioRegionAmerica ), + ENUM_MAP_ITEM( RadioRegion::Poland, ERadioRegionPoland ), +END_ENUM_MAP( KRegionMap ) + +/*! + * Convenience macros to do the mapping of radio regions + */ +#define MAP_FROM_UI_REGION(ui_enum) MAP_FROM_UI_ENUM( TRadioRegion, ui_enum, KRegionMap ) +#define MAP_TO_UI_REGION(engine_enum) MAP_TO_UI_ENUM( RadioRegion::Region, engine_enum, KRegionMap ) + +/*! + * Map to translate seeking state enum from its definition in the engine to + * its definition in the ui and vice versa + */ +BEGIN_ENUM_MAP( KSeekingStateMap ) + ENUM_MAP_ITEM( Seek::NotSeeking, RadioEngine::ERadioNotSeeking ), + ENUM_MAP_ITEM( Seek::SeekingUp, RadioEngine::ERadioSeekingUp ), + ENUM_MAP_ITEM( Seek::SeekingDown, RadioEngine::ERadioSeekingDown ) +END_ENUM_MAP( KSeekingStateMap ) + +/*! + * Convenience macro to do the mapping of seeking states + */ +#define MAP_TO_UI_SEEKING_STATE(ui_enum) MAP_TO_UI_ENUM( Seek::State, ui_enum, KSeekingStateMap ) + +/*! + * + */ +RadioEngineHandler::RadioEngineHandler( MRadioEngineHandlerObserver& observer ) + : mObserver( observer ) +{ +} + +/*! + * + */ +RadioEngineHandler::~RadioEngineHandler() +{ +} + +/*! + * Attempts to construct the radio engine + */ +bool RadioEngineHandler::constructEngine() +{ + LOG_METHOD; + + CRadioEngine* engine = NULL; + TRAPD( err, engine = CRadioEngine::NewL( *this ) ); + if ( err ) { + return false; + } + + mEngine.reset( engine ); + TRAP( err, + mEngine->SystemEventCollector().AddObserverL( &mObserver ); + mEngine->AddObserverL( &mObserver ); + ); + if ( err ) { + return false; + } + + mRegion = MAP_TO_UI_REGION( mEngine->Settings().EngineSettings().RegionId() ); + return true; +} + +/*! + * Sets the rds data observer + */ +void RadioEngineHandler::setRdsObserver( MRadioRdsDataObserver* observer ) +{ + TRAP_IGNORE( mEngine->RdsReceiver().AddObserverL( observer ) ); +} + +/*! + * Starts or stops receiving RDS data + */ +void RadioEngineHandler::setRdsEnabled( bool rdsEnabled ) +{ + if ( rdsEnabled ) { + mEngine->RdsReceiver().StartReceiver(); + } else { + mEngine->RdsReceiver().StopReceiver(); + } +} + +/*! + * Returns the radio status. + */ +bool RadioEngineHandler::isRadioOn() +{ + return mEngine->Settings().EngineSettings().IsPowerOn(); +} + +/*! + * Sets the manual seek status + */ +void RadioEngineHandler::setManualSeekMode( bool manualSeek ) +{ + mEngine->SetManualSeekMode( manualSeek ); +} + +/*! + * Returns the manual seek status + */ +bool RadioEngineHandler::isInManualSeekMode() const +{ + return mEngine->IsInManualSeekMode(); +} + +/*! + * Tune to the specified frequency + */ +void RadioEngineHandler::setFrequency( uint frequency ) +{ + mEngine->SetFrequency( frequency ); +} + +/*! + * Sets the audio mute state + */ +void RadioEngineHandler::setMute( const bool muted, const bool updateSettings ) +{ + mEngine->SetVolumeMuted( muted, updateSettings ); +} + +/*! + * Gets the audio mute state + */ +bool RadioEngineHandler::isMuted() const +{ + return mEngine->Settings().EngineSettings().IsVolMuted(); +} + +/*! + * Sets the volume level of the FM radio + */ +void RadioEngineHandler::setVolume( int newVolume ) +{ + if ( volume() != newVolume ) { + if ( newVolume > 0 ) { + mEngine->SetVolumeMuted( EFalse ); + } + + mEngine->SetVolume( newVolume ); + } +} + +/*! + * Gets the volumelevel. + */ +int RadioEngineHandler::volume() const +{ + return mEngine->Settings().EngineSettings().Volume(); +} + +/*! + * Gets the max volumelevel. + */ +int RadioEngineHandler::maxVolume() const +{ + return mEngine->MaxVolumeLevel(); +} + +/*! + * Increases the volume by one increment + */ +void RadioEngineHandler::increaseVolume() +{ + mEngine->AdjustVolume( RadioEngine::ERadioIncVolume ); +} + +/*! + * Decreases the volume by one increment + */ +void RadioEngineHandler::decreaseVolume() +{ + mEngine->AdjustVolume( RadioEngine::ERadioDecVolume ); +} + + +/*! + * Checks if the antenna is attached + */ +bool RadioEngineHandler::isAntennaAttached() const +{ + return mEngine->IsAntennaAttached(); +} + +/*! + * Retrieves the current frequency. + */ +uint RadioEngineHandler::currentFrequency() const +{ + return mEngine->Settings().EngineSettings().TunedFrequency(); +} + +/*! + * Returns the minimum allowed frequency in the current region + */ +uint RadioEngineHandler::minFrequency() const +{ + return mEngine->Settings().EngineSettings().MinFrequency(); +} + +/*! + * Returns the maximum allowed frequency in the current region + */ +uint RadioEngineHandler::maxFrequency() const +{ + return mEngine->Settings().EngineSettings().MaxFrequency(); +} + +/*! + * Checks if the given frequency is valid in the current region + */ +bool RadioEngineHandler::isFrequencyValid( uint frequency ) const +{ + return mEngine->IsFrequencyValid( frequency ); +} + +/*! + * Scan up to the next available frequency + */ +void RadioEngineHandler::seek( Seek::Direction direction ) +{ + LOG_TIMESTAMP( "Seek" ); + mEngine->Seek( MAP_FROM_UI_DIRECTION( direction ) ); +} + +/*! + * Cancel previously requested scan, and return to the already tuned frequency + */ +void RadioEngineHandler::cancelSeek() +{ + mEngine->CancelSeek(); +} + +/*! + * Returns the engine seeking state + */ +Seek::State RadioEngineHandler::seekingState() const +{ + return MAP_TO_UI_SEEKING_STATE( mEngine->Seeking() ); +} + +/*! + * return step size for tuning. + */ +uint RadioEngineHandler::frequencyStepSize() const +{ + return mEngine->Settings().EngineSettings().FrequencyStepSize(); +} + +/*! + * Returns the selected radio region + */ +RadioRegion::Region RadioEngineHandler::region() const +{ + return mRegion; +} + +/*! + * Sets whether or not audio should be routed to loudspeaker + */ +void RadioEngineHandler::setAudioRouteToLoudspeaker( bool loudspeaker ) +{ + TRAPD( err, mEngine->AudioRouter().SetAudioRouteL( loudspeaker ? RadioEngine::ERadioSpeaker + : RadioEngine::ERadioHeadset ) ); + if ( err ) { + LOG_FORMAT( "Failed to set audioroute: UseLoudspeadker: %d", loudspeaker ); + } +} + +/*! + * Checks if audio is routed to loudspeaker + */ +bool RadioEngineHandler::isAudioRoutedToLoudspeaker() const +{ + return mEngine->Settings().EngineSettings().AudioRoute() == RadioEngine::ERadioSpeaker; +} + +/*! + * Returns the repository manager. + */ +MRadioApplicationSettings& RadioEngineHandler::applicationSettings() const +{ + return mEngine->Settings().ApplicationSettings(); +} + +/*! + * \reimp + */ +CRadioAudioRouter* RadioEngineHandler::InitAudioRouterL() +{ + return CRadioAudioRouter::NewL( mObserver ); +} + +/*! + * \reimp + */ +CRadioSystemEventCollector* RadioEngineHandler::InitSystemEventCollectorL() +{ + return CRadioSystemEventCollector::NewL(); +} + +/*! + * \reimp + */ +CRadioSettings* RadioEngineHandler::InitSettingsL() +{ + return CRadioSettings::NewL(); +} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radioenginewrapper.cpp --- a/radioapp/radioenginewrapper/src/radioenginewrapper.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radioenginewrapper.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -17,8 +17,9 @@ // User includes #include "radioenginewrapper.h" +#include "radioenginewrapperobserver.h" #include "radioenginewrapper_p.h" -#include "cradioenginehandler.h" +#include "radioenginehandler.h" /*! * Constructor @@ -26,8 +27,6 @@ RadioEngineWrapper::RadioEngineWrapper( RadioStationHandlerIf& stationHandler ) : d_ptr( new RadioEngineWrapperPrivate( this, stationHandler ) ) { - Q_D( RadioEngineWrapper ); - d->init(); } /*! @@ -35,7 +34,15 @@ */ RadioEngineWrapper::~RadioEngineWrapper() { - delete d_ptr; +} + +/*! + * + */ +bool RadioEngineWrapper::init() +{ + Q_D( RadioEngineWrapper ); + return d->init(); } /*! @@ -57,15 +64,6 @@ } /*! - * Checks if the radio engine has been constructed properly - */ -bool RadioEngineWrapper::isEngineConstructed() -{ - Q_D( RadioEngineWrapper ); - return d->isEngineConstructed(); -} - -/*! * Returns the settings handler owned by the engine */ RadioSettingsIf& RadioEngineWrapper::settings() @@ -80,7 +78,7 @@ RadioRegion::Region RadioEngineWrapper::region() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->Region(); + return d->mEngineHandler->region(); } /*! @@ -89,7 +87,7 @@ uint RadioEngineWrapper::minFrequency() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->MinFrequency(); + return d->mEngineHandler->minFrequency(); } /*! @@ -98,7 +96,7 @@ uint RadioEngineWrapper::maxFrequency() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->MaxFrequency(); + return d->mEngineHandler->maxFrequency(); } /*! @@ -107,16 +105,15 @@ uint RadioEngineWrapper::frequencyStepSize() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->FrequencyStepSize(); + return d->mEngineHandler->frequencyStepSize(); } /*! - * Returns the frequency step size from the selected region + * Returns true if frequency is valid, otherwise false */ -bool RadioEngineWrapper::isFrequencyValid( uint frequency ) +bool RadioEngineWrapper::isFrequencyValid( uint frequency ) const { - Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->IsFrequencyValid( frequency ); + return frequency >= minFrequency() && frequency <= maxFrequency(); } /*! @@ -125,7 +122,7 @@ bool RadioEngineWrapper::isRadioOn() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->IsRadioOn(); + return d->mEngineHandler->isRadioOn(); } /*! @@ -134,7 +131,7 @@ uint RadioEngineWrapper::currentFrequency() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->TunedFrequency(); + return d->mEngineHandler->currentFrequency(); } /*! @@ -143,7 +140,7 @@ bool RadioEngineWrapper::isMuted() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->IsMuted(); + return d->mEngineHandler->isMuted(); } /*! @@ -152,7 +149,7 @@ bool RadioEngineWrapper::isAntennaAttached() const { Q_D( const RadioEngineWrapper ); - return d->mEngineHandler->IsAntennaAttached(); + return d->mEngineHandler->isAntennaAttached(); } /*! @@ -165,21 +162,60 @@ } /*! - * Tunes to the given frequency + * Sets or unsets the engine to manual seek mode */ -void RadioEngineWrapper::tuneFrequency( uint frequency, const int reason ) +void RadioEngineWrapper::setManualSeekMode( bool manualSeek ) { Q_D( RadioEngineWrapper ); - d->tuneFrequency( frequency, reason ); + d->mEngineHandler->setManualSeekMode( manualSeek ); + if ( !manualSeek ) { + RUN_NOTIFY_LOOP( d->observers(), tunedToFrequency( currentFrequency(), TuneReason::ManualSeekTune ) ); + } +} + +/*! + * Checks if the engine is in manual seek mode + */ +bool RadioEngineWrapper::isInManualSeekMode() const +{ + Q_D( const RadioEngineWrapper ); + return d->mEngineHandler->isInManualSeekMode(); } /*! - * Tunes to the given frequency after a delay + * */ -void RadioEngineWrapper::tuneWithDelay( uint frequency, const int reason ) +void RadioEngineWrapper::setRdsEnabled( bool rdsEnabled ) +{ + Q_D( RadioEngineWrapper ); + d->mEngineHandler->setRdsEnabled( rdsEnabled ); +} + +/*! + * Tunes to the given frequency + */ +void RadioEngineWrapper::setFrequency( uint frequency, const int reason ) { Q_D( RadioEngineWrapper ); - d->tuneWithDelay( frequency, reason ); + d->setFrequency( frequency, reason ); +} + +/*! + * volume increase command for the engine + */ +void RadioEngineWrapper::increaseVolume() +{ + Q_D( RadioEngineWrapper ); + d->mEngineHandler->increaseVolume(); +} + +/*! + * volume decrease command for the engine + */ +void RadioEngineWrapper::decreaseVolume() +{ + Q_D( RadioEngineWrapper ); + d->mEngineHandler->decreaseVolume(); } /*! @@ -188,16 +224,16 @@ void RadioEngineWrapper::setVolume( int volume ) { Q_D( RadioEngineWrapper ); - d->mEngineHandler->SetVolume( volume ); + d->mEngineHandler->setVolume( volume ); } /*! * */ -void RadioEngineWrapper::setMute( bool muted ) +void RadioEngineWrapper::setMute( bool muted, bool updateSettings ) { Q_D( RadioEngineWrapper ); - d->mEngineHandler->SetMuted( muted ); + d->mEngineHandler->setMute( muted, updateSettings ); } /*! @@ -207,13 +243,13 @@ { Q_D( RadioEngineWrapper ); d->mUseLoudspeaker = !d->mUseLoudspeaker; - d->mEngineHandler->SetAudioRouteToLoudspeaker( d->mUseLoudspeaker ); + d->mEngineHandler->setAudioRouteToLoudspeaker( d->mUseLoudspeaker ); } /*! * */ -void RadioEngineWrapper::startSeeking( Seeking::Direction direction, const int reason ) +void RadioEngineWrapper::startSeeking( Seek::Direction direction, const int reason ) { Q_D( RadioEngineWrapper ); d->startSeeking( direction, reason ); @@ -225,5 +261,5 @@ void RadioEngineWrapper::cancelSeeking() { Q_D( RadioEngineWrapper ); - d->mEngineHandler->CancelSeek(); + d->mEngineHandler->cancelSeek(); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp --- a/radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -23,12 +23,10 @@ #include "radiosettings_p.h" #include "radiologger.h" #include "radio_global.h" -#include "cradioenginehandler.h" +#include "radioenginehandler.h" #include "radiostationhandlerif.h" -#include "cradiopubsub.h" #include "radiocontroleventlistener.h" #include "radiordslistener.h" -#include "cradiorepositorymanager.h" #include "radioenginewrapperobserver.h" // Constants @@ -40,10 +38,10 @@ RadioStationHandlerIf& stationHandler ) : q_ptr( wrapper ), mStationHandler( stationHandler ), - mEngineHandler( new CRadioEngineHandler( *this ) ), + mEngineHandler( new RadioEngineHandler( *this ) ), mControlEventListener( new RadioControlEventListener( *this ) ), mRdsListener ( new RadioRdsListener( mStationHandler, *this ) ), - mTuneReason( 0 ), + mTuneReason( TuneReason::Unspecified ), mUseLoudspeaker( false ) { } @@ -61,37 +59,23 @@ /*! * Initializes the private implementation */ -void RadioEngineWrapperPrivate::init() +bool RadioEngineWrapperPrivate::init() { - TRAPD( err, mEngineHandler->ConstructL() ); - if ( err != KErrNone ) { - LOG_FORMAT( "RadioEngineWrapperPrivate::init, EngineHandler construct failed: %d", err ); + if ( !mEngineHandler->constructEngine() ) { + LOG( "RadioEngineWrapperPrivate::init, EngineHandler construct failed" ); mEngineHandler.reset(); - return; - //TODO: Error handling? + return false; } - mEngineHandler->SetRdsObserver( mRdsListener.data() ); - mEngineHandler->PubSub().SetControlEventObserver( mControlEventListener.data() ); + mEngineHandler->setRdsObserver( mRdsListener.data() ); mControlEventListener->init(); - // Start observing profile changes - mEngineHandler->Repository().AddEntityL( KCRUidProfileEngine, - KProEngActiveProfile, - CRadioRepositoryManager::ERadioEntityInt ); - - mUseLoudspeaker = mEngineHandler->IsAudioRoutedToLoudspeaker(); + mUseLoudspeaker = mEngineHandler->isAudioRoutedToLoudspeaker(); if ( !mUseLoudspeaker ) { RUN_NOTIFY_LOOP( mObservers, audioRouteChanged( false ) ); } -} -/*! - * Starts up the radio engine - */ -bool RadioEngineWrapperPrivate::isEngineConstructed() -{ - return mEngineHandler != 0; + return true; } /*! @@ -101,7 +85,7 @@ { if ( !mSettings ) { mSettings.reset( new RadioSettings() ); - mSettings->d_func()->init( &mEngineHandler->ApplicationSettings() ); + mSettings->d_func()->init( &mEngineHandler->applicationSettings() ); } return *mSettings; } @@ -109,7 +93,7 @@ /*! * Returns the enginehandler owned by the engine */ -CRadioEngineHandler& RadioEngineWrapperPrivate::RadioEnginehandler() +RadioEngineHandler& RadioEngineWrapperPrivate::radioEnginehandler() { return *mEngineHandler; } @@ -117,22 +101,11 @@ /*! * Tunes to the given frequency */ -void RadioEngineWrapperPrivate::tuneFrequency( uint frequency, const int reason ) +void RadioEngineWrapperPrivate::setFrequency( uint frequency, const int reason ) { - if ( mEngineHandler->TunedFrequency() != frequency ) { + if ( mEngineHandler->currentFrequency() != frequency ) { mTuneReason = reason; - mEngineHandler->Tune( frequency ); - } -} - -/*! - * Tunes to the given frequency after a delay - */ -void RadioEngineWrapperPrivate::tuneWithDelay( uint frequency, const int reason ) -{ - if ( mEngineHandler->TunedFrequency() != frequency ) { - mTuneReason = reason; - mEngineHandler->TuneWithDelay( frequency ); + mEngineHandler->setFrequency( frequency ); } } @@ -147,10 +120,10 @@ /*! * */ -void RadioEngineWrapperPrivate::startSeeking( Seeking::Direction direction, const int reason ) +void RadioEngineWrapperPrivate::startSeeking( Seek::Direction direction, const int reason ) { mTuneReason = reason; - mEngineHandler->Seek( direction ); + mEngineHandler->seek( direction ); } /*! @@ -170,11 +143,13 @@ TInt aError ) { Q_UNUSED( aReason ); - LOG_FORMAT( "RadioEngineWrapperPrivate::FrequencyEventL - Frequency: %d, Reason: %d, Error: %d", aFrequency, aReason, aError ); + LOG_FORMAT( "RadioEngineWrapperPrivate::FrequencyEventL - Freq: %d, TuneReason: %d, Err: %d", aFrequency, mTuneReason, aError ); if ( !aError ) { const uint frequency = static_cast( aFrequency ); RUN_NOTIFY_LOOP( mObservers, tunedToFrequency( frequency, mTuneReason ) ); + } else { + RUN_NOTIFY_LOOP( mObservers, tunedToFrequency( mEngineHandler->minFrequency(), TuneReason::StationScanNoStationsFound ) ); // no frequencies found } } @@ -225,10 +200,9 @@ /*! * \reimp */ -void RadioEngineWrapperPrivate::SeekingEventL( TInt aSeekingState, TInt aError ) +void RadioEngineWrapperPrivate::SeekingEventL( TInt DEBUGVAR( aSeekingState ), TInt DEBUGVAR( aError ) ) { - Q_UNUSED( aSeekingState ); - Q_UNUSED( aError ); + LOG_FORMAT( "RadioEngineWrapperPrivate::SeekingEventL, aSeekingState: %d, Error: %d", aSeekingState, aError ); } /*! @@ -268,13 +242,3 @@ // ERadioAudioResourcesAvailable, ///< Audio resources have become available // ERadioAudioAutoResumeForbidden ///< Audio auto resuming is forbidden } - -/*! - * \reimp - */ -void RadioEngineWrapperPrivate::HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, TInt aValue, TInt aError ) -{ - if ( aUid == KCRUidProfileEngine && aKey == KProEngActiveProfile && !aError && aValue == KOfflineProfileId ) { - LOG( "RadioEngineWrapperPrivate::HandleRepositoryValueChangeL: Offline profile activated" ); - } -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp --- a/radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -26,8 +26,6 @@ RadioEngineWrapper::RadioEngineWrapper( RadioStationHandlerIf& stationHandler ) : d_ptr( new RadioEngineWrapperPrivate( this, stationHandler ) ) { - Q_D( RadioEngineWrapper ); - d->init(); } /*! @@ -35,7 +33,15 @@ */ RadioEngineWrapper::~RadioEngineWrapper() { - delete d_ptr; +} + +/*! + * + */ +bool RadioEngineWrapper::init() +{ + Q_D( RadioEngineWrapper ); + return d->init(); } /*! @@ -57,15 +63,6 @@ } /*! - * Checks if the radio engine has been constructed properly - */ -bool RadioEngineWrapper::isEngineConstructed() -{ - Q_D( RadioEngineWrapper ); - return d->isEngineConstructed(); -} - -/*! * Returns the settings handler owned by the engine */ RadioSettingsIf& RadioEngineWrapper::settings() @@ -113,10 +110,10 @@ /*! * Returns the frequency step size from the selected region */ -bool RadioEngineWrapper::isFrequencyValid( uint frequency ) +bool RadioEngineWrapper::isFrequencyValid( uint frequency ) const { Q_UNUSED( frequency ); - return true; + return frequency >= minFrequency() && frequency <= maxFrequency() && frequency % frequencyStepSize() == 0; } /*! @@ -163,21 +160,55 @@ } /*! - * Tunes to the given frequency + * Sets or unsets the engine to manual seek mode */ -void RadioEngineWrapper::tuneFrequency( uint frequency, const int sender ) +void RadioEngineWrapper::setManualSeekMode( bool manualSeek ) { Q_D( RadioEngineWrapper ); - d->tuneFrequency( frequency, sender ); + d->mManualSeekMode = manualSeek; + if ( !manualSeek ) { + RUN_NOTIFY_LOOP( d->mObservers, tunedToFrequency( d->mFrequency, d->mTuneReason ) ); + } +} + +/*! + * Checks if the engine is in manual seek mode + */ +bool RadioEngineWrapper::isInManualSeekMode() const +{ + Q_D( const RadioEngineWrapper ); + return d->mManualSeekMode; } /*! - * Tunes to the given frequency after a delay + * */ -void RadioEngineWrapper::tuneWithDelay( uint frequency, const int sender ) +void RadioEngineWrapper::setRdsEnabled( bool rdsEnabled ) +{ + Q_UNUSED( rdsEnabled ); +} + +/*! + * Tunes to the given frequency + */ +void RadioEngineWrapper::setFrequency( uint frequency, const int reason ) { Q_D( RadioEngineWrapper ); - d->tuneWithDelay( frequency, sender ); + d->setFrequency( frequency, reason ); +} + +/*! + * + */ +void RadioEngineWrapper::increaseVolume() +{ +} + +/*! + * + */ +void RadioEngineWrapper::decreaseVolume() +{ } /*! @@ -192,8 +223,10 @@ /*! * */ -void RadioEngineWrapper::setMute( bool muted ) +void RadioEngineWrapper::setMute( bool muted, bool updateSettings ) { + Q_UNUSED( muted ); + Q_UNUSED( updateSettings ); } /*! @@ -208,7 +241,7 @@ /*! * */ -void RadioEngineWrapper::startSeeking( Seeking::Direction direction, const int reason ) +void RadioEngineWrapper::startSeeking( Seek::Direction direction, const int reason ) { Q_D( RadioEngineWrapper ); d->startSeeking( direction, reason ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp --- a/radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -69,7 +69,8 @@ mFrequencyStepSize( 50000 ), mRegionId( RadioRegion::Default ), mMinFrequency( 87500000 ), - mMaxFrequency( 108000000 ) + mMaxFrequency( 108000000 ), + mManualSeekMode( false ) { ::theInstance = this; mEngineSettings.reset( new QSettings( "Nokia", "QtFmRadio" ) ); @@ -78,7 +79,7 @@ mFrequency = mMinFrequency; } - connectAndTest( mTuneTimer, SIGNAL(timeout()), this, SLOT(frequencyEvent()) ); + Radio::connect( mTuneTimer, SIGNAL(timeout()), this, SLOT(frequencyEvent()) ); mTuneTimer->setSingleShot( true ); } @@ -103,7 +104,7 @@ /*! * Initializes the private implementation */ -void RadioEngineWrapperPrivate::init() +bool RadioEngineWrapperPrivate::init() { mUseLoudspeaker = false; if ( !mUseLoudspeaker ) { @@ -111,13 +112,6 @@ } parseData(); -} - -/*! - * Starts up the radio engine - */ -bool RadioEngineWrapperPrivate::isEngineConstructed() -{ return true; } @@ -136,23 +130,17 @@ /*! * Tunes to the given frequency */ -void RadioEngineWrapperPrivate::tuneFrequency( uint frequency, const int reason ) +void RadioEngineWrapperPrivate::setFrequency( uint frequency, const int reason ) { mNextFrequency = frequency; mTuneReason = reason; + mTuneTimer->stop(); - mTuneTimer->start( 500 ); -} - -/*! - * Tunes to the given frequency after a delay - */ -void RadioEngineWrapperPrivate::tuneWithDelay( uint frequency, const int reason ) -{ - mNextFrequency = frequency; - mTuneReason = reason; - mTuneTimer->stop(); - mTuneTimer->start( 1500 ); + if ( !mManualSeekMode ) { + mTuneTimer->start( 500 ); + } else { + frequencyEvent(); + } } /*! @@ -166,9 +154,10 @@ /*! * */ -void RadioEngineWrapperPrivate::startSeeking( Seeking::Direction direction, const int reason ) +void RadioEngineWrapperPrivate::startSeeking( Seek::Direction direction, const int reason ) { mTuneReason = reason; + mNextFrequency = 0; // Find the previous and next favorite from current frequency uint previous = 0; @@ -183,7 +172,7 @@ } - if ( direction == Seeking::Up ) { + if ( direction == Seek::Up ) { if ( next == 0 ) { next = KScanFrequencies[0]; } @@ -286,10 +275,14 @@ */ void RadioEngineWrapperPrivate::frequencyEvent() { - mFrequency = mNextFrequency; - mEngineSettings->setValue( KKeyFrequency, mFrequency ); + if ( mNextFrequency > 0 ) { + mFrequency = mNextFrequency; + mEngineSettings->setValue( KKeyFrequency, mFrequency ); + } - RUN_NOTIFY_LOOP( mObservers, tunedToFrequency( mFrequency, mTuneReason ) ); + if ( !mManualSeekMode ) { + RUN_NOTIFY_LOOP( mObservers, tunedToFrequency( mNextFrequency, mTuneReason ) ); + } } /*! diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radioenginewrapperobserver.cpp --- a/radioapp/radioenginewrapper/src/radioenginewrapperobserver.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radioenginewrapperobserver.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -51,6 +51,22 @@ /*! * + */ +void RadioEngineWrapperObserver::increaseVolume() +{ + // Default implementation does nothing +} + +/*! + * + */ +void RadioEngineWrapperObserver::decreaseVolume() +{ + // Default implementation does nothing +} + +/*! + * * @param volume */ void RadioEngineWrapperObserver::volumeChanged( int volume ) diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radiologger.cpp --- a/radioapp/radioenginewrapper/src/radiologger.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,202 +0,0 @@ -/* -* 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: -* -*/ - -// System includes -#include - -// User includes -#include "radiologger.h" - -/*! - * - */ -void RadioLogger::initCombinedLogger() -{ -#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER && !defined BUILD_WIN32 - TRAP_IGNORE( RadioEngineUtils::InitializeL() ); - if ( !MRadioEngineLogger::Logger() ) { - qDebug() << "FMRadioUi: Cannot combine logs with engine. Engine logger not active"; - } -#endif // LOGGING_ENABLED -} - -/*! - * - */ -void RadioLogger::releaseCombinedLogger() -{ -#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER && !defined BUILD_WIN32 - RadioEngineUtils::Release(); -#endif // LOGGING_ENABLED -} - -/*! - * enum Mode { Normal, MethodEnter, MethodExit, DecIndent }; - */ -void RadioLogger::logMsg( const char* msg, Mode mode ) -{ - Q_UNUSED( msg ); - Q_UNUSED( mode ); -#if defined LOGGING_ENABLED && defined COMBINE_WITH_ENGINE_LOGGER && !defined BUILD_WIN32 - MRadioEngineLogger* logger = MRadioEngineLogger::Logger(); - if ( logger ) { - if ( mode == RadioLogger::Normal ) { - logger->AddIndent(KMarkerUi()).Add( msg ).Commit(); - } else if ( mode == RadioLogger::MethodEnter ) { - logger->AddIndentClear( KMarkerUi() ).Add( msg ).Commit(); - logger->IncIndent(); - } else if ( mode == RadioLogger::MethodExit ) { - logger->DecIndent(); - logger->AddIndentClear( KMarkerUi() ).Add( msg ).Commit(); - } else if ( mode == RadioLogger::DecIndent ) { - logger->DecIndent(); - } else {} - } -#endif // LOGGING_ENABLED -} - - -#ifdef LOGGING_ENABLED - -#include -#include -#include -#include - -#ifdef TRACE_TO_FILE - QFile mDebugFile; - bool mFilterByLogMarker = false; -#endif - -const char* KLogEnter = "\\ %s"; -const char* KLogExit = "/ %s"; -const char* KLogExitRet = "/ %s, Returning %s"; -const char* KLogExitException = "/ %s, Exception raised"; -const char* KLogLine = "| "; - -/*! - * - */ -static QString formatString( const char* format, long val ) -{ - if ( strcmp( format, "" ) == 0 ) { - return ""; - } - QString string; - string.sprintf( format, val ); - return string; -} - -/*! - * - */ -MethodLogger::MethodLogger( const char* function, const char* format ) : - mFunction( function ), - mFormat( format ) -{ - QString msg; - msg.sprintf( KLogEnter, mFunction ); - WRITELOG_METHOD_ENTER( msg ); -} - -/*! - * - */ -MethodLogger::~MethodLogger() -{ - if ( std::uncaught_exception() ) { - QString msg; - msg.sprintf( KLogExitException, mFunction ); - WRITELOG_METHOD_EXIT( msg ); - } else { - QString msg; - if ( strlen( mFormat ) > 0 ) { - #if defined(__WINS__) - - long retVal = 0; - _asm( mov retVal, ebx ); - msg.sprintf( KLogExitRet, mFunction, formatString( mFormat, retVal ) ); - WRITELOG_METHOD_EXIT( msg ); - - #else - msg.sprintf( KLogExit, mFunction ); - WRITELOG_METHOD_EXIT( msg ); - #endif - } else { - msg.sprintf( KLogExit, mFunction ); - WRITELOG_METHOD_EXIT( msg ); - } - } -} -#else - -MethodLogger::MethodLogger( const char*, const char* ) -{ -} - -MethodLogger::~MethodLogger() -{ -} - -#endif // LOGGING_ENABLED - - -#ifdef TRACE_TO_FILE - -/*! - * - */ -void FileLogger::installMessageHandler( const QString& fileName, bool filterByMarker ) -{ - mDebugFile.setFileName( fileName ); - mFilterByLogMarker = filterByMarker; - - mDebugFile.open( QIODevice::Text | QIODevice::WriteOnly ); - - if ( mDebugFile.isOpen() ) { - qInstallMsgHandler( FileLogger::handleMessage ); - } -} - -/*! - * - */ -void FileLogger::uninstallMessageHandler() -{ - if ( mDebugFile.isOpen() ) { - qInstallMsgHandler( 0 ); - mDebugFile.close(); - } -} - -/*! - * - */ -void FileLogger::handleMessage( QtMsgType type, const char* msg ) -{ - QTextStream debugStream( &mDebugFile ); - QDateTime dateTime( QDateTime::currentDateTime() ); - - if ( type == QtDebugMsg ) { - QString message( msg ); - if ( mFilterByLogMarker && message.contains( QString( LOGMARKER ) ) ) - { - debugStream << dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz") << " : " << message << endl; - } - } -} -#endif // TRACE_TO_FILE diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radiordslistener.cpp --- a/radioapp/radioenginewrapper/src/radiordslistener.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radiordslistener.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -27,7 +27,7 @@ */ static QString convertString( const TDesC& aDesc ) { - return QString( (QChar*)aDesc.Ptr(), aDesc.Length() ); + return QString::fromUtf16( aDesc.Ptr(), aDesc.Length() ); } /*! @@ -102,10 +102,13 @@ const TInt aRadioTextPlusClass, const TDesC& aRadioText ) { - if ( aRadioText.Length() > 0 ) { - const uint frequency = static_cast( aFrequency ); - mStationHandler.setCurrentRadioTextPlus( frequency, aRadioTextPlusClass, convertString( aRadioText ) ); + TInt rtClass = aRadioTextPlusClass; + if ( aRadioTextPlusClass == RtPlus::Band ) { + rtClass = RtPlus::Artist; } + + const uint frequency = static_cast( aFrequency ); + mStationHandler.setCurrentRadioTextPlus( frequency, rtClass, convertString( aRadioText ) ); } /*! diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radiosettings.cpp --- a/radioapp/radioenginewrapper/src/radiosettings.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radiosettings.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -45,7 +45,6 @@ */ RadioSettings::~RadioSettings() { - delete d_ptr; } /*! @@ -60,6 +59,15 @@ /*! * \reimp */ +void RadioSettings::setFirstTimeStartPerformed( bool firstTimeStartPerformed ) +{ + Q_D( RadioSettings ); + d->setFirstTimeStartPerformed( firstTimeStartPerformed ); +} + +/*! + * \reimp + */ bool RadioSettings::showFavorites() const { Q_D( const RadioSettings ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radiosettings_p.cpp --- a/radioapp/radioenginewrapper/src/radiosettings_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radiosettings_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -53,7 +53,7 @@ bool RadioSettingsPrivate::isFirstTimeStart() { if ( mSettingsStorage ) { - return mSettingsStorage->UpdateStartCount() == 0; + return mSettingsStorage->IsFirstTimeStart(); } return false; } @@ -61,6 +61,16 @@ /*! * */ +void RadioSettingsPrivate::setFirstTimeStartPerformed( bool firstTimeStartPerformed ) +{ + if ( mSettingsStorage ) { + mSettingsStorage->SetFirstTimeStartPerformed( firstTimeStartPerformed ); + } +} + +/*! + * + */ bool RadioSettingsPrivate::isFlagSet( ToggleFlag flag ) const { return mFlags.testFlag( flag ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/src/radiosettings_win32_p.cpp --- a/radioapp/radioenginewrapper/src/radiosettings_win32_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radioenginewrapper/src/radiosettings_win32_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -58,6 +58,14 @@ /*! * */ +void RadioSettingsPrivate::setFirstTimeStartPerformed( bool firstTimeStartPerformed ) +{ + Q_UNUSED( firstTimeStartPerformed ); +} + +/*! + * + */ bool RadioSettingsPrivate::isFlagSet( ToggleFlag flag ) const { return mFlags.testFlag( flag ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/stub/radioenginewrapper_stub.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/stub/radioenginewrapper_stub.pro Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,100 @@ +# +# 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 the License "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: +# + +include(../../buildflags.pri) + +TEMPLATE = lib +TARGET = radioenginewrapper_stub +CONFIG += dll +DEFINES += BUILD_WRAPPER_DLL +win32:DESTDIR = ../bin + +# Wrapper does not depend on QtGui or Orbit +QT = core +CONFIG -= gui hb +USE_DUMMY_RADIO_DATA:QT += xml + +symbian: { + DEFINES += SYMBIAN + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = CAP_GENERAL_DLL + + INCLUDEPATH += ../../../radioengine/utils/api + INCLUDEPATH += ../../../radioengine/settings/api + INCLUDEPATH += ../../../radioengine/engine/api + MMP_RULES += SMPSAFE +} + +win32: { + INCLUDEPATH += inc/win32 +} +INCLUDEPATH += ../inc +INCLUDEPATH += ../commoninc + + +symbian:LIBS *= -lradioengineutils_stub +symbian:LIBS *= -lradioenginesettings_stub +symbian:LIBS *= -lradioengine_stub +symbian:LIBS *= -lflogger + +DEPENDPATH += $$INCLUDEPATH ../src + +# $$_PRO_FILE_PWD_ points to the directory of the pro file +MOC_DIR = $$_PRO_FILE_PWD_/tmp + +# Input +HEADERS += radiowrapperexport.h +HEADERS += radio_global.h +HEADERS += radiologger.h +HEADERS += radioenginewrapper.h +HEADERS += radiosettings.h +HEADERS += radiostationhandlerif.h + +INTERNAL_HEADERS += radiosettings_p.h + +symbian: { + HEADERS += cradioenginehandler.h + HEADERS += mradioenginehandlerobserver.h + HEADERS += radiofrequencyscanninghandler.h + HEADERS += radiocontroleventlistener.h + HEADERS += radiordslistener.h + + INTERNAL_HEADERS += radioenginewrapper_p.h +} + +#USE_DUMMY_RADIO_DATA:HEADERS += t_radiodataparser.h + +win32:HEADERS += radioenginewrapper_win32_p.h +win32:HEADERS += $$INTERNAL_HEADERS + +SOURCES += radiosettings.cpp +SOURCES += radiologger.cpp + +symbian: { + SOURCES += radiosettings_p.cpp + SOURCES += radioenginewrapper.cpp + SOURCES += radioenginewrapper_p.cpp + SOURCES += cradioenginehandler.cpp + SOURCES += radiofrequencyscanninghandler.cpp + SOURCES += radiocontroleventlistener.cpp + SOURCES += radiordslistener.cpp +} + +#USE_DUMMY_RADIO_DATA:SOURCES += t_radiodataparser.cpp + +win32:SOURCES += radiosettings_win32_p.cpp +win32:SOURCES += radioenginewrapper_win32.cpp +win32:SOURCES += radioenginewrapper_win32_p.cpp diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/inc/mschedulerstartandstoptimerobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/inc/mschedulerstartandstoptimerobserver.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,59 @@ +/* +* 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: Callback interface for observer of CAccSrvResetInactivityTimeTimer object. +* +*/ + + + + +#ifndef M_SCHEDULERSTARTANDSTOPTIMEROBSERVER_H +#define M_SCHEDULERSTARTANDSTOPTIMEROBSERVER_H + + +#include + + +/** + * Callback interface for observer of CSchedulerStopAndStartTimer object. + * + * This callback interface has to be implemented by observer class. + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib AccServer.exe + * @since S60 10.1 + */ +NONSHARABLE_CLASS( MSchedulerStartAndStopTimerObserver ) + { + +public: + + /** + * Function is called by timer watcher every time when timer elapses. + * + * @since S60 10.1 + * @param none. + * @return none + */ + virtual void Timeout( TUint aTimerId ) = 0; + + virtual void CreateMUT() = 0; + virtual void DeleteMUT() = 0; + + }; + + +#endif // M_SCHEDULERSTARTANDSTOPTIMEROBSERVER_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/inc/t_radioenginewrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/inc/t_radioenginewrapper.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,201 @@ +/* +* 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: +* +*/ + + +#ifndef T_RADIOENGINEWRAPPER_H_ +#define T_RADIOENGINEWRAPPER_H_ + + +// INCLUDES +#include +#include +#include + +#include "radioenginewrapperobserver.h" +#include "radiostationhandlerif.h" +//#include "radiostation.h" +#include "radiostubmanager.h" +#include "t_schedulerstartandstoptimer.h" + +class RadioUiEngine; +class RadioStationModel; +class RadioPlayLogModel; +class RadioPresetStorage; +class RadioEngineWrapper; +//class RadioStationHandlerIf; + +class TestRadioEngineWrapper : public QObject, RadioStationHandlerIf, RadioEngineWrapperObserver, MSchedulerStartAndStopTimerObserver +{ + Q_OBJECT + + /** + * Flags to indicate which slots have been entered since calling API method. + * Declared to use QFlags<> to ease flag usage and to enforce type safety. + */ + enum SlotEnteredFlag + { + NoSlotsEntered = 0 + ,HeadsetConnected = 1 << 0 + ,SeekingStarted = 1 << 1 + ,TunedToFrequency = 1 << 2 + ,MuteChanged = 1 << 3 + ,VolumeChanged = 1 << 4 + ,ItemAdded = 1 << 5 + }; + Q_DECLARE_FLAGS( Slots, SlotEnteredFlag ) + +public: + + TestRadioEngineWrapper(); + ~TestRadioEngineWrapper(); + +public slots: +// void dataChanged(const QModelIndex topLeft, const QModelIndex bottomRight); +// void stationAdded( RadioStation addedStation ); +// void stationDataChanged( RadioStation station ); +// void favoriteChanged( RadioStation station ); +// void itemAdded(); + +private slots: + // test framework called slots + void initTestCase(); + void init(); + void cleanup(); + + void testIsEngineConstructed(); + + void testRadioSettingsReference(); + + void testRegion(); + + void testRadioOnOff(); + + void testTuning(); + + void testTuningWithDelay(); + + void testMuteToggling(); + + void testVolumeSetting(); + + void testLoudSpeakerUsage(); + + void testScanning(); + + void cleanupTestCase(); + +private: + + // from base class RadioStationHandlerIf => + uint currentFrequency() const; + int currentPresetIndex() const; + + void setCurrentStation( uint frequency ); + + bool containsFrequency( uint frequency ); + + bool containsPresetIndex( int presetIndex ); + + void startDynamicPsCheck(); + + void addScannedFrequency( uint frequency ); + + void removeLocalStations(); + + void setCurrentPsName( uint frequency, const QString& name ); + void setCurrentRadioText( uint frequency, const QString& radioText ); + void setCurrentRadioTextPlus( uint frequency, int rtClass, const QString& rtItem ); + void setCurrentPiCode( uint frequency, int piCode ); + void setCurrentGenre( uint frequency, int genre ); + // <= from base class RadioStationHandlerIf + + // c => + void tunedToFrequency( uint frequency, int commandSender ); + void seekingStarted( Seeking::Direction direction ); + void radioStatusChanged( bool radioIsOn ); + + void rdsAvailabilityChanged( bool available ); + + void volumeChanged( int volume ); + void muteChanged( bool muted ); + + void audioRouteChanged( bool loudspeaker ); + void scanAndSaveFinished(); + void headsetStatusChanged( bool connected ); + + void skipPrevious(); + void skipNext(); + // <= from base class RadioStationHandlerIf + + // subfunctions used by the test framework called slots => + // void testRadioStationModelInit(); + + // from base class MSchedulerStartAndStopTimerObserver => + void Timeout( TUint aTimerId ); + void CreateMUT(); + void DeleteMUT(); + // <= + + void tstSetTunerCababilities(uint category = 0); + void tstSetFrequency( TUint aFrequency ); + TInt tstGetFrequency(); + void tstSetScanningData( TUint aCount, TInt aMinFreq, TInt aFrequencyStepSize ); + void tstDefineAndAttachRadioServerProperties(); + void tstCreateCRObjects(); + +private: + RadioEngineWrapper* mEngineWrapper; + + // RadioStubManager pointer points inside RadioStubManagerChunk + SRadioStubManager* mRadioStubManager; + + // RadioStubManagerChunk handle + RChunk mRadioStubManagerChunk; + + // Active scheduler + // Workaround for the below panic, occured after porting to 10.1 + // Main Panic E32USER-CBase 44 + // Create and install the active scheduler + CActiveScheduler* mScheduler; + + //QScopedPointer mEngineWrapper; + + //int mExpectedStationCount; + + Slots mEnteredSlots; + //QString mStationToBeAdded; + + CSchedulerStopAndStartTimer* mSchedulerTimer; + + RProperty mPropertyPlayerState; + RProperty mPropertyAntennaStatus; + RProperty mPropertyOfflineMode; + RProperty mPropertyTransmitterStatus; + RProperty mPropertyFrequency; + RProperty mPropertyFrequencyRange; + RProperty mPropertyForceMonoReception; + RProperty mPropertySquelch; + RProperty mPropertyVolume; + RProperty mPropertyMuteStatus; + RProperty mPropertyBalance; + + CRepository* mRadioCR; + + TInt mLastRecordedVolume; +}; + +#endif /* T_RADIOENGINEWRAPPER_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/inc/t_schedulerstartandstoptimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/inc/t_schedulerstartandstoptimer.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,144 @@ +/* +* 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: Timer for Starting and Stopping current Active Scheduler. +* +*/ + + + +#ifndef C_ACCSRVRESETINACTIVITYTIMETIMER_H +#define C_ACCSRVRESETINACTIVITYTIMETIMER_H + + + +#include + + +#include "mschedulerstartandstoptimerobserver.h" + + +/** Timer's default value in micro seconds */ +const TInt KTimerDefaultValue = 400; + + +/** + * Timer class for Starting and Stopping current Active Scheduler. + * + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib AccServer.exe + * @since S60 10.1 + */ +NONSHARABLE_CLASS( CSchedulerStopAndStartTimer ): public CTimer + { + +public: + enum TTimerId{ + ETimerIdRunMUT = 0, + ETimerIdCreateMUT = 1, + ETimerIdDeleteMUT = 2 + }; + + + /** + * Two-phased constructor. + * @param aSchedulerStartAndStopTimerObserver Observer callback interface. + */ + static CSchedulerStopAndStartTimer* NewL( + MSchedulerStartAndStopTimerObserver& aSchedulerStartAndStopTimerObserver ); + + /** + * Destructor. + */ + virtual ~CSchedulerStopAndStartTimer(); + + /** + * Starts the timer. + * @since S60 10.1 + * @param aTime Time out value. + * @param aTimeId Timer Id. + * @return void + */ + void StartTimer( TInt aTime = KTimerDefaultValue, + TUint aTimerId = ETimerIdRunMUT ); + + +protected: + + /** + * From CActive. + * Handles an active object's request completion event. + * + * @since S60 10.1 + * @param void + */ + void RunL(); + + /** + * From CActive. + * Handles RunL's leave cases + * + * @since S60 10.1 + * @param aError Error code. + */ + TInt RunError( TInt aError ); + + +private: + + /** + * C++ default constructor. + * @param aSchedulerStartAndStopTimerObserver Observer callback interface. + */ + CSchedulerStopAndStartTimer( + MSchedulerStartAndStopTimerObserver& aSchedulerStartAndStopTimerObserver ); + + /** + * By default Symbian OS constructor is private. + * @param none. + */ + void ConstructL(); + + +private: // data + enum TTmerPhase + { + ETimerPhaseUndefined = 0, + ETimerPhaseStarting = 1, + ETimerPhaseStarted = 2 + }; + + /** + * TimeOut time + */ + TInt iTime; + + /** + * Timer id. Client specific i.e same value is returned to observer. + */ + TUint iTimerId; + + /** + * ResetInactivityTimeTimerObserver object. + */ + MSchedulerStartAndStopTimerObserver& iSchedulerStartAndStopTimerObserver; + + TTmerPhase iPhase; + }; + + +#endif // C_ACCSRVRESETINACTIVITYTIMETIMER_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/inc/trace.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/inc/trace.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,596 @@ +/* +* 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: +* Trace macro definitions. +* +*/ + +#ifndef TRACE_H +#define TRACE_H + +#include // TCleanupItem +#include "traceconfiguration.hrh" + +#ifdef TRACE_INTO_FILE +#include // RFileLogger +#else +#include // RDebug +#endif + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- +// + +// NOTE! +// Replace all COMPONENT_NAME occurnaces with your own component / module name. + +/** +* Prefix trace macro to complete tracing with component name. +* Returns TDesC which can be used directly with RDebug or RFileLogger. +*/ +#define _PREFIX_TRACE( aMsg ) TPtrC( (const TText*)L"[t_radioenginewrapper]: " L##aMsg ) + +/** +* Prefix error trace +*/ +#define _PREFIX_ERROR( aMsg ) _PREFIX_TRACE( "[ERROR: %d]: " L##aMsg ) + +/** +* Prefix info trace. +*/ +#define _PREFIX_INFO( aMsg ) _PREFIX_TRACE( "[INFO]: " L##aMsg ) + +/** +* Prefix macro for strings +*/ +#define _PREFIX_CHAR( aMsg ) (const char*)"[t_radioenginewrapper]: " ##aMsg + +/** +* Define needed directories if TRACE_INTO_FILE macro in use +*/ +#ifdef TRACE_INTO_FILE + + _LIT( KDir, "radio" ); + _LIT( KFile, "radio.txt" ); + _LIT( KFullPath, "c:\\logs\\radio\\" ); + +#endif + +//----------------------------------------------------------------------------- +// Error trace macros +//----------------------------------------------------------------------------- +// +#ifdef ERROR_TRACE + + /** + * Error trace definitions. + */ + #ifdef TRACE_INTO_FILE + + #define ERROR( aErr, aMsg )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr );\ + }\ + } + #define ERROR_1( aErr, aMsg, aP1 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1 );\ + }\ + } + #define ERROR_2( aErr, aMsg, aP1, aP2 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2 );\ + }\ + } + #define ERROR_3( aErr, aMsg, aP1, aP2, aP3 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3 );\ + }\ + } + #define ERROR_4( aErr, aMsg, aP1, aP2, aP3, aP4 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4 );\ + }\ + } + #define ERROR_5( aErr, aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5 );\ + }\ + } + #define ERROR_6( aErr, aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5 );\ + }\ + } + + #else//TRACE_INTO_FILE not defined + + #define ERROR( aErr, aMsg )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr );\ + }\ + } + #define ERROR_1( aErr, aMsg, aP1 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1 );\ + }\ + } + #define ERROR_2( aErr, aMsg, aP1, aP2 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2 );\ + }\ + } + #define ERROR_3( aErr, aMsg, aP1, aP2, aP3 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3 );\ + }\ + } + #define ERROR_4( aErr, aMsg, aP1, aP2, aP3, aP4 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4 );\ + }\ + } + #define ERROR_5( aErr, aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5 );\ + }\ + } + #define ERROR_6( aErr, aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5, aP6 );\ + }\ + } + + #endif//TRACE_INTO_FILE + + #define ERROR_GEN( aMsg ) ERROR( KErrGeneral, aMsg ) + #define ERROR_GEN_1( aMsg, aP1 ) ERROR_1( KErrGeneral, aMsg, aP1 ) + #define ERROR_GEN_2( aMsg, aP1, aP2 ) ERROR_2( KErrGeneral, aMsg, aP1, aP2 ) + #define ERROR_GEN_3( aMsg, aP1, aP2, aP3 ) ERROR_3( KErrGeneral, aMsg, aP1, aP3 ) + #define ERROR_GEN_4( aMsg, aP1, aP2, aP3, aP4 ) ERROR_4( KErrGeneral, aMsg, aP1, aP3, aP4 ) + #define ERROR_GEN_5( aMsg, aP1, aP2, aP3, aP4, aP5 ) ERROR_5( KErrGeneral, aMsg, aP1, aP3, aP4, aP5 ) + #define ERROR_GEN_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) ERROR_6( KErrGeneral, aMsg, aP1, aP3, aP4, aP5, aP6 ) + +#else//ERROR_TRACE not defined + + #define ERROR( aErr, aMsg ) + #define ERROR_1( aErr, aMsg, aP1 ) + #define ERROR_2( aErr, aMsg, aP1, aP2 ) + #define ERROR_3( aErr, aMsg, aP1, aP2, aP3 ) + #define ERROR_4( aErr, aMsg, aP1, aP2, aP3, aP4 ) + #define ERROR_5( aErr, aMsg, aP1, aP2, aP3, aP4, aP5 ) + #define ERROR_6( aErr, aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) + + #define ERROR_GEN( aMsg ) + #define ERROR_GEN_1( aMsg, aP1 ) + #define ERROR_GEN_2( aMsg, aP1, aP2 ) + #define ERROR_GEN_3( aMsg, aP1, aP2, aP3 ) + #define ERROR_GEN_4( aMsg, aP1, aP2, aP3, aP4 ) + #define ERROR_GEN_5( aMsg, aP1, aP2, aP3, aP4, aP5 ) + #define ERROR_GEN_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) + +#endif//ERROR_TRACE + +//----------------------------------------------------------------------------- +// TRAP and trace with error macro +//----------------------------------------------------------------------------- +// +#define TRAP_ERROR( aErr, aFunction )\ + {\ + TRAP( aErr, aFunction );\ + TPtrC8 file( ( TText8* )__FILE__ );\ + ERROR_2( aErr, "Trapped leave in '%S' line %d", &file, __LINE__);\ + } + +//----------------------------------------------------------------------------- +// Info trace macros +//----------------------------------------------------------------------------- +// +#ifdef INFO_TRACE + + /** + * Info log message definitions. + */ + #ifdef TRACE_INTO_FILE + + #define INFO( aMsg )\ + {\ + RFileLogger::Write( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ) );\ + } + #define INFO_1( aMsg, aP1 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1 );\ + } + #define INFO_2( aMsg, aP1, aP2 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2 );\ + } + #define INFO_3( aMsg, aP1, aP2, aP3 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3 );\ + } + #define INFO_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4 );\ + } + #define INFO_5( aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5 );\ + } + #define INFO_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5, aP6 );\ + } + + #else//TRACE_INTO_FILE not defined + + #define INFO( aMsg )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ) );\ + } + #define INFO_1( aMsg, aP1 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1 );\ + } + #define INFO_2( aMsg, aP1, aP2 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2 );\ + } + #define INFO_3( aMsg, aP1, aP2, aP3 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3 );\ + } + #define INFO_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4 );\ + } + #define INFO_5( aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5 );\ + } + #define INFO_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5, aP6 );\ + } + + #endif//TRACE_INTO_FILE + +#else//INFO_TRACE not defined + + #define INFO( aMsg ) + #define INFO_1( aMsg, aP1 ) + #define INFO_2( aMsg, aP1, aP2 ) + #define INFO_3( aMsg, aP1, aP2, aP3 ) + #define INFO_4( aMsg, aP1, aP2, aP3, aP4 ) + #define INFO_5( aMsg, aP1, aP2, aP3, aP4, aP5 ) + #define INFO_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) + +#endif//INFO_TRACE + +//----------------------------------------------------------------------------- +// Trace current client thread name and process id +//----------------------------------------------------------------------------- +// +#ifdef CLIENT_TRACE + + #define CLIENT_PROCESS\ + {\ + CLIENT_PROCESS_PREFIX( "" );\ + } + + #define CLIENT_PROCESS_PREFIX( aPrefix )\ + {\ + RProcess process;\ + TPtrC name( process.Name() );\ + TSecureId sid( process.SecureId() );\ + TPtrC prefix( _S( aPrefix ) );\ + if( prefix.Length() )\ + {\ + INFO_3( "%S: CLIENT - Name: [%S], Sid: [0x%x]", &prefix, &name, sid.iId );\ + }\ + else\ + {\ + INFO_2( "CLIENT - Name: [%S], Sid: [0x%x]", &name, sid.iId );\ + }\ + process.Close();\ + } + + #define CLIENT_MESSAGE( aMsg )\ + {\ + CLIENT_MESSAGE_PREFIX( "", aMsg );\ + } + + #define CLIENT_MESSAGE_PREFIX( aPrefix, aMsg )\ + {\ + RThread thread;\ + TInt err = aMsg.Client( thread );\ + if( err == KErrNone )\ + {\ + RProcess process;\ + err = thread.Process( process );\ + if( err == KErrNone )\ + {\ + TPtrC threadName( thread.Name() );\ + TUid processUid( process.SecureId() );\ + TPtrC prefix( _S( aPrefix ) );\ + if( prefix.Length() )\ + {\ + INFO_4( "%S: MSG - Name: [%S], Sid: [0x%x], Message ID: [%d]",\ + &prefix,\ + &threadName,\ + processUid,\ + aMsg.Function() );\ + }\ + else\ + {\ + INFO_3( "MSG - Name: [%S], Sid: [0x%x], Message ID: [%d]",\ + &threadName,\ + processUid,\ + aMsg.Function() );\ + }\ + }\ + process.Close();\ + }\ + thread.Close();\ + } + +#else + + #define CLIENT_PROCESS + #define CLIENT_PROCESS_PREFIX( aPrefix ) + #define CLIENT_MESSAGE( aMsg ) + #define CLIENT_MESSAGE_PREFIX( aPrefix, aMsg ) + +#endif + +//----------------------------------------------------------------------------- +// Function trace macros +//----------------------------------------------------------------------------- +// +#ifdef FUNC_TRACE + + /** + * Function logging definitions. + */ + #ifdef TRACE_INTO_FILE + + #define FUNC( aMsg, aP1 )\ + {\ + TPtrC8 trace( _S8( aMsg ) );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, trace, aP1 );\ + }\ + + #else//TRACE_INTO_FILE not defined + + #define FUNC( aMsg, aP1 )\ + {\ + RDebug::Printf( aMsg, aP1 );\ + }\ + + #endif//TRACE_INTO_FILE + + /** + * Function trace helper class. + * + * NOTE: + * LC -methods cannot be trapped. Therefore if LC -method leaves + * END trace is used instead of LEAVE trace. + * If you have an idea how to round this problem please tell. + */ + _LIT8( KFuncNameTerminator, "(" ); + _LIT8( KFuncLeavePatternL, "L" ); + class TFuncLog + { + public: + static void Cleanup( TAny* aPtr ) + { + TFuncLog* self = static_cast< TFuncLog* >( aPtr ); + self->iLeft = ETrue; + FUNC( _PREFIX_CHAR("%S-LEAVE"), &self->iFunc ); // Leave detected + } + inline TFuncLog( const char* aFunc ) : + iFunc( aFunc ? _S8( aFunc ) : _S8("") ), + iLeft( EFalse ), + iCleanupItem( Cleanup, this ), + iCanLeave( EFalse ) + { + TInt pos( iFunc.Find( KFuncNameTerminator ) ); + if( pos != KErrNotFound ) + { + iFunc.Set( iFunc.Left( pos ) ); + iCanLeave = !iFunc.Right( KFuncLeavePatternL().Length() ).Compare( KFuncLeavePatternL ); + if ( iCanLeave ) + { + CleanupStack::PushL( iCleanupItem ); // Ignore warnings + } + } + FUNC( _PREFIX_CHAR("%S-START"), &iFunc ); + } + + inline ~TFuncLog() + { + if ( !iLeft ) + { + if ( iCanLeave ) + { + CleanupStack::Pop( this ); // Pop the cleanup item + } + FUNC( _PREFIX_CHAR("%S-END"), &iFunc ); // Normally finished + } + } + + private: // Data + TPtrC8 iFunc; + TBool iLeft; + TCleanupItem iCleanupItem; + TBool iCanLeave; + }; + #define FUNC_LOG TFuncLog _fl( __PRETTY_FUNCTION__ ); + +#else//FUNC_TRACE not defined + + #define FUNC_LOG + +#endif//FUNC_TRACE + +//----------------------------------------------------------------------------- +// Timestamp trace macros +//----------------------------------------------------------------------------- +// +#ifdef TIMESTAMP_TRACE + + #ifdef TRACE_INTO_FILE + + #define TIMESTAMP( aCaption )\ + {\ + TTime t;\ + t.HomeTime();\ + TDateTime dt = t.DateTime();\ + _LIT( KCaption, aCaption );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend,\ + _PREFIX_TRACE("[TIMESTAMP] %S %d:%02d:%02d.%d us"),\ + &KCaption, dt.Hour(), dt.Minute(), dt.Second(), dt.MicroSecond() );\ + } + + #else//TRACE_INTO_FILE not defined + + #define TIMESTAMP( aCaption )\ + {\ + TTime t;\ + t.HomeTime();\ + TDateTime dt = t.DateTime();\ + _LIT( KCaption, aCaption );\ + RDebug::Print( _PREFIX_TRACE("[TIMESTAMP] %S %d:%02d:%02d.%d us"),\ + &KCaption, dt.Hour(), dt.Minute(), dt.Second(), dt.MicroSecond() );\ + } + + #endif//TRACE_INTO_FILE + +#else//TIMESTAMP_TRACE not defined + + #define TIMESTAMP( aCaption ) + +#endif//TIMESTAMP_TRACE + +#ifdef HEAP_TRACE + + #ifdef TRACE_INTO_FILE + + #define HEAP( aMsg )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace );\ + } + #define HEAP_1( aMsg, aP1 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1 );\ + } + #define HEAP_2( aMsg, aP1, aP2 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2 );\ + } + #define HEAP_3( aMsg, aP1, aP2, aP3 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3 );\ + } + #define HEAP_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3, aP4 );\ + } + + #else//TRACE_INTO_FILE not defined + + #define HEAP( aMsg )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace );\ + } + #define HEAP_1( aMsg, aP1 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1 );\ + } + #define HEAP_2( aMsg, aP1, aP2 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2 );\ + } + #define HEAP_3( aMsg, aP1, aP2, aP3 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3 );\ + } + #define HEAP_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3, aP4 );\ + } + + #endif//TRACE_INTO_FILE + +#else//HEAP_TRACE not defined + + #define HEAP( aMsg ) + #define HEAP_1( aMsg, aP1 ) + #define HEAP_2( aMsg, aP1, aP2 ) + #define HEAP_3( aMsg, aP1, aP2, aP3 ) + #define HEAP_4( aMsg, aP1, aP2, aP3, aP4 ) + +#endif//HEAP_TRACE + +#endif + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/inc/traceconfiguration.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/inc/traceconfiguration.hrh Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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: +* Trace Macro Configurations. +* +*/ + +#ifndef TRACECONFIGURATION_HRH +#define TRACECONFIGURATION_HRH + +//----------------------------------------------------------------------------- +// Trace definitions +//----------------------------------------------------------------------------- +// + +/** +* Error trace enabled +*/ +#ifdef _DEBUG + #define ERROR_TRACE +#else + #undef ERROR_TRACE +#endif + +/** +* Info trace enabled +*/ +#ifdef _DEBUG + #define INFO_TRACE +#else + #undef INFO_TRACE +#endif + +/** +* Timestamp tracing on +*/ +#ifdef _DEBUG + #define TIMESTAMP_TRACE +#else + #undef TIMESTAMP_TRACE +#endif + +/** +* Tracing current client process and thread +*/ +#ifdef _DEBUG + #define CLIENT_TRACE +#else + #undef CLIENT_TRACE +#endif + +/** +* Function trace enabled +*/ +#ifdef _DEBUG + #define FUNC_TRACE +#else + #undef FUNC_TRACE +#endif + +/** +* Tracing into file enabled, default RDebug +*/ +#undef TRACE_INTO_FILE + +#endif + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/src/t_radioenginewrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/src/t_radioenginewrapper.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,621 @@ +/* +* 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: radiostation test implementation +* +*/ + +#include +#include +#include +#include + +#include "t_radioenginewrapper.h" +//#include "radiopresetstorage.h" +//#include "radiostation.h" +//#include "radiostationmodel.h" +//#include "radioplaylogmodel.h" +#include "radioenginewrapper.h" +#include "radiologger.h" //Radio::connect +#include +#include "mradioenginesettings.h" +#include +#include "trace.h" +#include "RadioClientServer.h" +#include "radiointernalcrkeys.h" + +#define STUB mRadioStubManager +#define TUNER mRadioStubManager->iTuner +#define PLAYER mRadioStubManager->iPlayer +#define RDS mRadioStubManager->iRds +#define ACCESSORYOBSERVER mRadioStubManager->iAccessoryObserver +#define REMCONTARGET mRadioStubManager->iRemConTarget + +// Constants +const uint KTestFrequency1 = 89000000; +const QString KTestStationName1 = "Radio Noice"; + +// CONSTANTS +_LIT_SECURITY_POLICY_PASS(KRadioServerReadPolicy); +_LIT_SECURITY_POLICY_C1(KRadioServerWritePolicy, ECapabilityWriteUserData); + +/*! + * + */ +int main(int /* argc*/, char *argv[]) +{ +FUNC_LOG; + TestRadioEngineWrapper tv; + + char *pass[3]; + pass[0] = argv[0]; + pass[1] = "-o"; + pass[2] = "c:\\data\\testradiouiengine.txt"; + + int res = QTest::qExec(&tv, 3, pass); + + return res; +} + +TestRadioEngineWrapper::TestRadioEngineWrapper() +{ +FUNC_LOG; +} + +// from base class RadioStationHandlerIf + +uint TestRadioEngineWrapper::currentFrequency() const +{ +FUNC_LOG; +return 0; +} + +int TestRadioEngineWrapper::currentPresetIndex() const +{ +FUNC_LOG; +return 0; +} + +void TestRadioEngineWrapper::setCurrentStation( uint /*frequency*/ ) +{ +FUNC_LOG; +} + +bool TestRadioEngineWrapper::containsFrequency( uint /*frequency*/ ) +{ +FUNC_LOG; +return 1; +} + +bool TestRadioEngineWrapper::containsPresetIndex( int /*presetIndex*/ ) +{ +FUNC_LOG; +return 1; +} + +void TestRadioEngineWrapper::startDynamicPsCheck() +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::addScannedFrequency( uint /*frequency*/ ) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::removeLocalStations() +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::setCurrentPsName( uint /*frequency*/, const QString& /*name*/ ) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::setCurrentRadioText( uint /*frequency*/, const QString& /*radioText*/ ) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::setCurrentRadioTextPlus( uint /*frequency*/, int /*rtClass*/, const QString& /*rtItem*/ ) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::setCurrentPiCode( uint /*frequency*/, int /*piCode*/ ) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::setCurrentGenre( uint /*frequency*/, int /*genre*/ ) +{ +FUNC_LOG; +} + +// from base class RadioEngineWrapperObserver + +void TestRadioEngineWrapper::tunedToFrequency( uint frequency, int /* commandSender */) +{ + FUNC_LOG; + mEnteredSlots |= TunedToFrequency; + TInt err = mRadioCR->Set( KRadioCRTunedFrequency , (TInt)frequency ); + QVERIFY2( KErrNone == err, "Setting key KRadioCRTunedFrequency failed!" ); +} + + +void TestRadioEngineWrapper::seekingStarted( Seeking::Direction /* direction */) +{ +FUNC_LOG; +mEnteredSlots |= SeekingStarted; +} + +void TestRadioEngineWrapper::radioStatusChanged( bool /* radioIsOn */) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::rdsAvailabilityChanged( bool /* available */) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::volumeChanged( int volume ) +{ +FUNC_LOG; +mEnteredSlots |= VolumeChanged; +mLastRecordedVolume = volume; +} + +void TestRadioEngineWrapper::muteChanged( bool /* muted */) +{ +FUNC_LOG; +mEnteredSlots |= MuteChanged; +} + +void TestRadioEngineWrapper::audioRouteChanged( bool /* loudspeaker */) +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::scanAndSaveFinished() +{ +FUNC_LOG; +} + + +void TestRadioEngineWrapper::headsetStatusChanged( bool /* connected */) +{ +FUNC_LOG; +mEnteredSlots |= HeadsetConnected; +} + +void TestRadioEngineWrapper::skipPrevious() +{ +FUNC_LOG; +} + +void TestRadioEngineWrapper::skipNext() +{ +FUNC_LOG; +} + +/*! + * Destructor + */ +TestRadioEngineWrapper::~TestRadioEngineWrapper() +{ +FUNC_LOG; +mRadioStubManagerChunk.Close(); +delete mEngineWrapper; +mEngineWrapper = NULL; +delete mScheduler; +mScheduler = NULL; +} + +/*! + * called before each testfunction is executed + */ +void TestRadioEngineWrapper::init() +{ +FUNC_LOG; +} + +/*! + * called after every testfunction + */ +void TestRadioEngineWrapper::cleanup() +{ +FUNC_LOG; +} + +/*! + * called before the first testfunction is executed + */ + void TestRadioEngineWrapper::initTestCase() +{ + FUNC_LOG; + // Workaround for the below panic, occured after porting to 10.1 + // Main Panic E32USER-CBase 44 + // Create and install the active scheduler + mScheduler = new(ELeave) CActiveScheduler; + CActiveScheduler::Install(mScheduler); + + TInt err = mRadioStubManagerChunk.CreateGlobal( + KRadioStubManagerLocalChunkName, + sizeof(SRadioStubManager), + sizeof(SRadioStubManager), + EOwnerThread ); + QVERIFY2( KErrNone == err, "Creation of memory chunk KRadioStubManagerLocalChunkName failed." ); + QVERIFY2( sizeof(SRadioStubManager) <= mRadioStubManagerChunk.MaxSize(), "Improper size for memory chunk KRadioStubManagerLocalChunkName." ); + TUint8* basePtr = mRadioStubManagerChunk.Base(); + QVERIFY2( 0 != basePtr, "Getting base pointer of memory chunk KRadioStubManagerLocalChunkName failed." ); + mRadioStubManager = (SRadioStubManager*)basePtr; + // Zero configuration/control data + + mRadioStubManager->FillZ(); + TRAP( err, mSchedulerTimer = CSchedulerStopAndStartTimer::NewL( *this ) ); + QVERIFY2( KErrNone == err, "CSchedulerStopAndStartTimer not constructed!" ); + mSchedulerTimer->StartTimer( 1000000, CSchedulerStopAndStartTimer::ETimerIdCreateMUT ); +} + +void TestRadioEngineWrapper::testIsEngineConstructed() +{ + FUNC_LOG; + QVERIFY2( mEngineWrapper->isEngineConstructed(), "Radio Engine not constructed!" );; +} + +void TestRadioEngineWrapper::testRadioSettingsReference() +{ + FUNC_LOG; + QVERIFY2( 0 != &mEngineWrapper->settings(), "Settings reference illegal!" ); +} + +void TestRadioEngineWrapper::testRegion() +{ + FUNC_LOG; + QVERIFY2( mEngineWrapper->region() >= RadioRegion::None, "Illegal Region Id!"); + QVERIFY2( mEngineWrapper->region() <= RadioRegion::Poland, "Illegal Region Id!"); + QVERIFY2( mEngineWrapper->frequencyStepSize() != 0, "Region Step Size illegal!" ); + QVERIFY2( mEngineWrapper->minFrequency() < mEngineWrapper->maxFrequency(), "Region Minimum Frequency illegal!" ); + QVERIFY2( mEngineWrapper->maxFrequency() > mEngineWrapper->minFrequency(), "Region Maximum Frequency illegal!" ); + QVERIFY2( mEngineWrapper->isFrequencyValid( mEngineWrapper->minFrequency() + mEngineWrapper->frequencyStepSize() ), "Legal frequency not accepted!" ); + QVERIFY2( mEngineWrapper->isFrequencyValid( mEngineWrapper->maxFrequency() - mEngineWrapper->frequencyStepSize() ), "Legal frequency not accepted!" ); + QVERIFY2( mEngineWrapper->isFrequencyValid( mEngineWrapper->minFrequency() ), "Legal minimum frequency not accepted!" ); + QVERIFY2( mEngineWrapper->isFrequencyValid( mEngineWrapper->maxFrequency() ), "Legal maximum frequency not accepted!" ); + QVERIFY2( !mEngineWrapper->isFrequencyValid( mEngineWrapper->maxFrequency() + mEngineWrapper->frequencyStepSize() ), "Illegal frequency accepted!" ); + QVERIFY2( !mEngineWrapper->isFrequencyValid( mEngineWrapper->minFrequency() - mEngineWrapper->frequencyStepSize() ), "Illegal frequency accepted!" ); + QVERIFY2( !mEngineWrapper->isFrequencyValid( 0 + mEngineWrapper->frequencyStepSize() ), "Illegal frequency accepted!" ); + QVERIFY2( !mEngineWrapper->isFrequencyValid( 0 - mEngineWrapper->frequencyStepSize() ), "Illegal frequency accepted!" ); +} + +void TestRadioEngineWrapper::testRadioOnOff() +{ + FUNC_LOG; + QVERIFY2( !mEngineWrapper->isRadioOn(), "Radio is not off!" ); + + TInt err(KErrNone); + TBool antennaAttached = ETrue; + QVERIFY2(KErrNone == err, "Attaching property ERadioServPsAntennaStatus failed!" ); + err = RProperty::Set( KStub_KRadioServerPropertyCategory, ERadioServPsAntennaStatus, antennaAttached ); + INFO_1("RProperty::Set( KStub_KRadioServerPropertyCategory, ERadioServPsAntennaStatus, antennaAttached ) err: %d", err); + QVERIFY2( KErrNone == err, "Setting property ERadioServPsAntennaStatus failed!" ); + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->isAntennaAttached(), "Headset/Antenna not connected!"); + QVERIFY2( mEnteredSlots &= HeadsetConnected, "Headset/Antenna not connected!"); + + err = mRadioCR->Set( KRadioCRVisualRadioPowerState, ETrue ); + QVERIFY2( KErrNone == err, "Setting key KRadioCRVisualRadioPowerState failed!" ); + + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + //QVERIFY2( !mEngineWrapper->isFrequencyValid( 0 ), "Zero frequency accepted!" ); +} + +void TestRadioEngineWrapper::testTuning() + { + FUNC_LOG; + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + + mEngineWrapper->tuneFrequency( mEngineWrapper->minFrequency() ); + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->currentFrequency() == mEngineWrapper->minFrequency(), "Tuning to minimum frequency failed!"); + + uint freq_A = mEngineWrapper->currentFrequency(); + mSchedulerTimer->StartTimer( 1000 ); + tstSetFrequency( freq_A + mEngineWrapper->frequencyStepSize() ); + mEngineWrapper->startSeeking( Seeking::Up ); + QVERIFY2( mEnteredSlots &= SeekingStarted, "Seeking upwards not started!"); + mEnteredSlots &= !SeekingStarted; + + TInt err = mPropertyFrequency.Set( KStub_KRadioServerPropertyCategory, ERadioServPsFrequency, tstGetFrequency() ); + QVERIFY2( KErrNone == err, "Setting property ERadioServPsFrequency failed!" ); + mSchedulerTimer->StartTimer( 1000000 ); + + QVERIFY2( mEnteredSlots &= TunedToFrequency, "Not Tuned to next upward frequency!"); + mEnteredSlots &= !TunedToFrequency; + uint freq_B = mEngineWrapper->currentFrequency(); + QVERIFY2( (freq_B - mEngineWrapper->frequencyStepSize()) == freq_A, "Seeking upwards failed!"); + + + tstSetFrequency( mEngineWrapper->maxFrequency() ); + mEngineWrapper->tuneFrequency( mEngineWrapper->maxFrequency() ); + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->currentFrequency() == mEngineWrapper->maxFrequency(), "Current frequency not the maximum one!" ); + + mEngineWrapper->startSeeking( Seeking::Down ); + QVERIFY2( mEnteredSlots &= SeekingStarted, "Seeking downwards not started!"); + mEnteredSlots &= !SeekingStarted; + + tstSetFrequency( mEngineWrapper->currentFrequency() - (2 * mEngineWrapper->frequencyStepSize()) ); + err = mPropertyFrequency.Set( KStub_KRadioServerPropertyCategory, ERadioServPsFrequency, tstGetFrequency() ); + QVERIFY2( KErrNone == err, "Setting property ERadioServPsFrequency failed!" ); + mSchedulerTimer->StartTimer( 1000000 ); + + QVERIFY2( mEnteredSlots &= TunedToFrequency, "Not Tuned to next downward frequency!"); + mEnteredSlots &= !TunedToFrequency; + QVERIFY2( mEngineWrapper->currentFrequency() == mEngineWrapper->maxFrequency()- (2 * mEngineWrapper->frequencyStepSize()), "Seeking downwards failed!"); + + mEngineWrapper->tuneFrequency( (mEngineWrapper->maxFrequency() + mEngineWrapper->minFrequency())/2 ); + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->currentFrequency() == (mEngineWrapper->maxFrequency() + mEngineWrapper->minFrequency())/2, "Tuning to average frequency failed!"); + + uint freq_C = mEngineWrapper->currentFrequency(); + TUNER.iSetFrequencyError.SetStubError( KRadioServErrFrequencyOutOfBandRange ); + mEngineWrapper->tuneFrequency( mEngineWrapper->maxFrequency() + mEngineWrapper->frequencyStepSize() ); + mSchedulerTimer->StartTimer( 1000000 ); + + // Should be == not != as now. This is to continue after bug + QVERIFY2( mEngineWrapper->currentFrequency() != freq_C, "Tuning over maximum frequency succeeded?"); + QVERIFY2( !mEngineWrapper->isFrequencyValid( mEngineWrapper->currentFrequency() ), "A frequency over maximum accepted?"); + + uint freq_D = mEngineWrapper->currentFrequency(); + TUNER.iSetFrequencyError.SetStubError( KRadioServErrFrequencyOutOfBandRange ); + mEngineWrapper->tuneFrequency( mEngineWrapper->minFrequency() - mEngineWrapper->frequencyStepSize() ); + mSchedulerTimer->StartTimer( 1000000 ); + // Should be == not != as now. This is to continue after bug + QVERIFY2( mEngineWrapper->currentFrequency() != freq_D, "Tuning below minimum frequency succeeded?"); + QVERIFY2( !mEngineWrapper->isFrequencyValid( mEngineWrapper->currentFrequency() ), "A frequency below minimum accepted?"); + } + +void TestRadioEngineWrapper::testTuningWithDelay() + { + FUNC_LOG; + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + uint freq_A = mEngineWrapper->currentFrequency(); + uint freq_B = mEngineWrapper->currentFrequency(); + mEngineWrapper->tuneWithDelay( freq_B ); + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->currentFrequency() == freq_B, "Tuning with delay failed?"); + mEngineWrapper->tuneWithDelay( freq_A ); + mSchedulerTimer->StartTimer( 1000000 ); + QVERIFY2( mEngineWrapper->currentFrequency() == freq_A, "Tuning with delay failed?"); + } + +void TestRadioEngineWrapper::testMuteToggling() + { + FUNC_LOG; + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + TBool muted_1( mEngineWrapper->isMuted() ); + mEngineWrapper->toggleMute(); + + mSchedulerTimer->StartTimer( 1000000 ); + + TBool muted_2( mEngineWrapper->isMuted() ); + QVERIFY2( mEnteredSlots &= MuteChanged, "Mute not changed!"); + mEnteredSlots &= !MuteChanged; + QVERIFY2( muted_1 != muted_2, "Mute() not working!" ); + mEngineWrapper->toggleMute(); + + mSchedulerTimer->StartTimer( 1000000 ); + + TBool muted_3( mEngineWrapper->isMuted() ); + QVERIFY2( mEnteredSlots &= MuteChanged, "Mute not changed!"); + mEnteredSlots &= !MuteChanged; + QVERIFY2( muted_1 == muted_3, "Mute status not changed to original value!") ; + } + + +void TestRadioEngineWrapper::testVolumeSetting() + { + FUNC_LOG; + // SetVoliúme(() seems to accept any value. Probably because the real check point + // is missing from test constellation. + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + INFO_1( "mLastRecordedVolume: %i", mLastRecordedVolume ); + TInt volume_1( 1000 ); + mEngineWrapper->setVolume( volume_1 ); + + mSchedulerTimer->StartTimer( 1000000 ); + + INFO_1( "mLastRecordedVolume: %i", mLastRecordedVolume ); + QVERIFY2( mEnteredSlots &= VolumeChanged, "Volume not changed!"); + mEnteredSlots &= !VolumeChanged; + QVERIFY2( volume_1 == mLastRecordedVolume, "Volume has unexpected value!") ; + + volume_1 = mLastRecordedVolume; + TInt volume_2( mLastRecordedVolume * 30 ); + mEngineWrapper->setVolume( volume_2 ); + + mSchedulerTimer->StartTimer( 1000000 ); + + INFO_1( "mLastRecordedVolume: %i", mLastRecordedVolume ); + QVERIFY2( volume_2 == mLastRecordedVolume, "Volume has unexpected value!") ; + } + +void TestRadioEngineWrapper::testLoudSpeakerUsage() + { + FUNC_LOG; + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + TBool isLoudSpeakerUsed( mEngineWrapper->isUsingLoudspeaker() ); + INFO_1( "isLoudSpeakerUsed: %i", isLoudSpeakerUsed ); + } + +void TestRadioEngineWrapper::testScanning() + { + FUNC_LOG; + QVERIFY2( mEngineWrapper->isRadioOn(), "Radio is not on!" ); + tstSetScanningData( 10, mEngineWrapper->minFrequency(), mEngineWrapper->frequencyStepSize() ); + QVERIFY2( TUNER.iScanStations.iCount == 10, "Scanning not initialized!" ); + mEngineWrapper->scanFrequencyBand(); + mSchedulerTimer->StartTimer( 1000000 ); + + INFO_1( "TUNER.iScanStations.iCount: %i", TUNER.iScanStations.iCount ); + QVERIFY2( TUNER.iScanStations.iCount == 0, "Scanning not completed!" ); + } + +/*! + * called after the last testfunction was executed + */ +void TestRadioEngineWrapper::cleanupTestCase() +{ + FUNC_LOG; + delete mEngineWrapper; + mEngineWrapper = NULL; + + //mSchedulerTimer->StartTimer( 1000000, CSchedulerStopAndStartTimer::ETimerIdDeleteMUT ); + + delete mScheduler; + mScheduler = NULL; + mRadioStubManagerChunk.Close(); + mPropertyPlayerState.Close(); + mPropertyAntennaStatus.Close(); + mPropertyOfflineMode.Close(); + mPropertyTransmitterStatus.Close(); + mPropertyFrequency.Close(); + mPropertyFrequencyRange.Close(); + mPropertyForceMonoReception.Close(); + mPropertySquelch.Close(); + mPropertyVolume.Close(); + mPropertyMuteStatus.Close(); + mPropertyBalance.Close(); +} + +void TestRadioEngineWrapper::tstSetTunerCababilities(uint /*category*/) + { + FUNC_LOG; + TUNER.iCaps.iFrequencyRange = ERsRangeFmEuroAmerica; + TUNER.iCaps.iCapabilities = + TRsTunerCapabilities::ETunerFunctionAvailableInOfflineMode | + TRsTunerCapabilities::ETunerFunctionRds | + TRsTunerCapabilities::ETunerFunctionDualTuner; + } + +void TestRadioEngineWrapper::Timeout( TUint aTimerId ) + { + FUNC_LOG; + if ( CSchedulerStopAndStartTimer::ETimerIdCreateMUT == aTimerId ) + { + INFO("ETimerIdCreateMUT elapsed"); + } + else if ( CSchedulerStopAndStartTimer::ETimerIdDeleteMUT == aTimerId ) + { + INFO("ETimerIdDeleteMUT elapsed"); + } + else if ( CSchedulerStopAndStartTimer::ETimerIdRunMUT == aTimerId ) + { + INFO("ETimerIdRunMUT elapsed"); + } + else + { + INFO("Unknown timer elapsed"); + } + } + +void TestRadioEngineWrapper::CreateMUT() + { + FUNC_LOG; + tstDefineAndAttachRadioServerProperties(); + tstCreateCRObjects(); + TInt err( KErrNone ); + TRAP( err, mEngineWrapper = new (ELeave) RadioEngineWrapper( *this, *this ) ); + QVERIFY2( KErrNone == err, "Radio Engine not constructed!" ); + tstSetTunerCababilities(); + } + +void TestRadioEngineWrapper::DeleteMUT() + { + FUNC_LOG; + delete mEngineWrapper; + mEngineWrapper = NULL; + } + +void TestRadioEngineWrapper::tstSetFrequency( TUint aFrequency ) + { + FUNC_LOG; + TUNER.iFrequency = aFrequency; + } + +TInt TestRadioEngineWrapper::tstGetFrequency() + { + FUNC_LOG; + return TUNER.iFrequency; + } + +void TestRadioEngineWrapper::tstSetScanningData( TUint aCount, TInt aMinFreq, TInt aFrequencyStepSize ) + { + FUNC_LOG; + TUNER.iScanStations.iCount = aCount; + TUNER.iScanStations.iMinFreq = aMinFreq; + TUNER.iScanStations.iFrequencyStepSize = aFrequencyStepSize; + } + + +void TestRadioEngineWrapper::tstDefineAndAttachRadioServerProperties() + { + FUNC_LOG; + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsPlayerState, RProperty::EByteArray, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsAntennaStatus, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsOfflineMode, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsTransmitterStatus, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsFrequency, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsFrequencyRange, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsForceMonoReception, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsSquelch, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsVolume, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsMuteStatus, RProperty::EInt, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + QVERIFY2(KErrNone == RProperty::Define(KStub_KRadioServerPropertyCategory, ERadioServPsBalance, RProperty::EByteArray, + KRadioServerReadPolicy, KRadioServerWritePolicy), "Property Define() failed!"); + + + QVERIFY2(KErrNone == mPropertyPlayerState.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsPlayerState ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyAntennaStatus.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsAntennaStatus ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyOfflineMode.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsOfflineMode ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyTransmitterStatus.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsTransmitterStatus ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyFrequency.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsFrequency ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyFrequencyRange.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsFrequencyRange ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyForceMonoReception.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsForceMonoReception ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertySquelch.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsSquelch ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyVolume.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsVolume ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyMuteStatus.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsMuteStatus ), "Property Attach() failed!"); + QVERIFY2(KErrNone == mPropertyBalance.Attach( KStub_KRadioServerPropertyCategory, ERadioServPsBalance ), "Property Attach() failed!"); + } + +void TestRadioEngineWrapper::tstCreateCRObjects() + { + TInt err( KErrNone ); + TRAP( err, mRadioCR = CRepository::NewL(KStub_KRadioCRUid) ); + QVERIFY2( KErrNone == err, "Radio Central Repository create/open failed!" ); + } + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/src/t_schedulerstartandstoptimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/src/t_schedulerstartandstoptimer.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,153 @@ +/* +* 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: Implementation of a timer interface. +* +*/ + + + +#include "t_schedulerstartandstoptimer.h" +#include "trace.h" + + +// ======== LOCAL FUNCTIONS ======== + + +// ======== MEMBER FUNCTIONS ======== + + +// ----------------------------------------------------------------------------- +// CAccSrvResetInactivityTimeTimer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSchedulerStopAndStartTimer* CSchedulerStopAndStartTimer::NewL( + MSchedulerStartAndStopTimerObserver& aSchedulerStartAndStopTimerObserver ) + { + FUNC_LOG; + + CSchedulerStopAndStartTimer* self = new ( ELeave ) CSchedulerStopAndStartTimer( + aSchedulerStartAndStopTimerObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// Destructor +CSchedulerStopAndStartTimer::~CSchedulerStopAndStartTimer() + { + FUNC_LOG; + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CSchedulerStopAndStartTimer::StartTimer +// . +// ----------------------------------------------------------------------------- +// +void CSchedulerStopAndStartTimer::StartTimer( + TInt aTime, + TUint aTimerId ) + { + FUNC_LOG; + INFO_2( "Timer Id: %d, Time: %d", aTimerId, aTime) + iTime = aTime; + iTimerId = aTimerId; + + if ( ETimerIdRunMUT == iTimerId ) + { + After( ( TTimeIntervalMicroSeconds32 ) iTime ); + } + else + { + After( ( TTimeIntervalMicroSeconds32 ) 1 ); + } + CActiveScheduler::Start(); + } + +// ----------------------------------------------------------------------------- +// CSchedulerStopAndStartTimer::RunL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSchedulerStopAndStartTimer::RunL() + { + FUNC_LOG; + if ( ETimerIdCreateMUT == iTimerId ) + { + iSchedulerStartAndStopTimerObserver.CreateMUT(); + iTimerId = ETimerIdRunMUT; + After( ( TTimeIntervalMicroSeconds32 ) iTime ); + } + else if ( ETimerIdDeleteMUT == iTimerId ) + { + iSchedulerStartAndStopTimerObserver.DeleteMUT(); + CActiveScheduler::Stop(); + } + else + { + CActiveScheduler::Stop(); + iSchedulerStartAndStopTimerObserver.Timeout( iTimerId ); + } + } + + +// ----------------------------------------------------------------------------- +// CSchedulerStopAndStartTimer::RunError +// Returns KErrNone +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CSchedulerStopAndStartTimer::RunError( TInt aError ) + { + FUNC_LOG; + // Avoid Panic in CActiveScheduler + aError = KErrNone; + return aError; + } + + +// ----------------------------------------------------------------------------- +// CSchedulerStopAndStartTimer::CSchedulerStopAndStartTimer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSchedulerStopAndStartTimer::CSchedulerStopAndStartTimer( + MSchedulerStartAndStopTimerObserver& aSchedulerStartAndStopTimerObserver) : + CTimer( CActive::EPriorityStandard ), + iSchedulerStartAndStopTimerObserver( aSchedulerStartAndStopTimerObserver ) + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CAccSrvProcessCommandTimer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSchedulerStopAndStartTimer::ConstructL() + { + FUNC_LOG; + CTimer::ConstructL(); + CActiveScheduler* AS = CActiveScheduler::Current(); + CActiveScheduler::Add( this ); + } + + +// ======== GLOBAL FUNCTIONS ======== + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radioenginewrapper/tsrc/t_radioenginewrapper.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/tsrc/t_radioenginewrapper.pro Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,46 @@ +# 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: project file for radiouiengine's unit tests +# Description: +TEMPLATE = app +TARGET = t_radioenginewrapper +symbian: { + TARGET.CAPABILITY = CAP_GENERAL_DLL + TARGET.SID = 0x101FF976 # Tried testUids(0x01000111 and 0x01001005) but failed + MMP_RULES += SMPSAFE +} +DEPENDPATH += . \ + inc \ + src +INCLUDEPATH += . \ + ../../../inc \ + ../inc \ + ../commoninc \ + ../../../../inc \ + /sf/app/radio/radioengine/utils/Stub/inc \ + /sf/app/radio/radioengine/utils/api \ + /sf/app/radio/radioengine/utils/inc \ + /sf/app/radio/radioengine/settings/api \ + /epoc32/include/internal \ + /sf/mw/mmmw/mmserv/radioutility/radio_utility/src \ + /sf/mw/mmmw/mmserv/radioutility/inc \ + /sf/mw/mmmw/mmserv/inc \ + /sf/mw/mmmw/inc \ + /sf/mw/mmmw/mmserv/radioutility/radioserver/inc +CONFIG += qtestlib +symbian:LIBS += -lradioenginewrapper_stub +symbian:LIBS += -lRadioSession_Stub +symbian:LIBS += -leuser +symbian:LIBS += -lcentralrepository +symbian:LIBS += -lflogger +HEADERS += inc/t_radioenginewrapper.h +HEADERS += inc\t_schedulerstartandstoptimer.h +SOURCES += src/t_radioenginewrapper.cpp +SOURCES += src/t_schedulerstartandstoptimer.cpp \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/inc/radiopresetstorage.h --- a/radioapp/radiopresetstorage/inc/radiopresetstorage.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiopresetstorage/inc/radiopresetstorage.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,8 @@ // System includes #include +#include +#include #include "radiopresetstorageexport.h" @@ -29,7 +31,7 @@ class STORAGE_DLL_EXPORT RadioPresetStorage { - Q_DECLARE_PRIVATE_D( d_ptr, RadioPresetStorage ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioPresetStorage ) Q_DISABLE_COPY( RadioPresetStorage ) public: @@ -44,13 +46,14 @@ bool deletePreset( int presetIndex ); bool savePreset( const RadioStationIf& station ); bool readPreset( int index, RadioStationIf& station ); + void readFrequencies( QList& frequencyList ); private: // data /** * Unmodifiable pointer to the private implementation */ - RadioPresetStoragePrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/inc/radiopresetstorage_p.h --- a/radioapp/radiopresetstorage/inc/radiopresetstorage_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiopresetstorage/inc/radiopresetstorage_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,28 +19,14 @@ #define RADIOPRESETSTORAGE_P_H_ // System includes -#ifndef COMPILE_WITH_NEW_PRESET_UTILITY -# include -#endif // COMPILE_WITH_NEW_PRESET_UTILITY - #include -#include // User includes // Forward declarations -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY - class CPresetUtility; - typedef QScopedPointer PresetUtilityPtr; -#else - class CRadioFmPresetUtility; - typedef QScopedPointer PresetUtilityPtr; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY +class CPresetUtility; class RadioPresetStoragePrivate -#ifndef COMPILE_WITH_NEW_PRESET_UTILITY - : public MRadioPresetObserver -#endif // COMPILE_WITH_NEW_PRESET_UTILITY { public: @@ -49,14 +35,9 @@ bool init(); -#ifndef COMPILE_WITH_NEW_PRESET_UTILITY -private: - void MrpeoPresetChanged( TPresetChangeEvent /*aChange*/, TInt /*aIndex*/ ) {} -#endif // COMPILE_WITH_NEW_PRESET_UTILITY - public: // data - PresetUtilityPtr mPresetUtility; + QScopedPointer mPresetUtility; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/inc/radiopresetstorage_win32_p.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/inc/radiopresetstorageexport.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/inc/radiostationif.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/radiopresetstorage.pro --- a/radioapp/radiopresetstorage/radiopresetstorage.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiopresetstorage/radiopresetstorage.pro Thu Jul 22 16:33:45 2010 +0100 @@ -14,21 +14,20 @@ # Description: # +TMP_DIR_NAME = presetstorage include(../buildflags.pri) TEMPLATE = lib -TARGET = radiopresetstorage +TARGET = fmradiopresetstorage CONFIG += dll DEFINES += BUILD_PRESET_STORAGE_DLL -INCLUDEPATH += inc +symbian:TARGET.UID3 = 0x2002EAD9 -COMPILE_WITH_NEW_PRESET_UTILITY { - INCLUDEPATH += /epoc32/include/newfmpresetutility - symbian:LIBS += -lpresetutility -} else { - symbian:LIBS += -lfmpresetutility -} +INCLUDEPATH += inc +INCLUDEPATH += ../../common + +symbian:LIBS += -lpresetutility DEPENDPATH += $$INCLUDEPATH src diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/src/radiopresetstorage.cpp --- a/radioapp/radiopresetstorage/src/radiopresetstorage.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiopresetstorage/src/radiopresetstorage.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -16,13 +16,8 @@ */ // System includes -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY #include #include -#else -# include -#endif // COMPILE_WITH_NEW_PRESET_UTILITY - #include // User includes @@ -35,7 +30,7 @@ */ static QString convertString( const TDesC& aDesc ) { - return QString( (QChar*)aDesc.Ptr(), aDesc.Length() ); + return QString::fromUtf16( aDesc.Ptr(), aDesc.Length() ); } /*! @@ -53,7 +48,6 @@ */ RadioPresetStorage::~RadioPresetStorage() { - delete d_ptr; } /*! @@ -62,13 +56,7 @@ int RadioPresetStorage::maxNumberOfPresets() const { Q_D( const RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY return d->mPresetUtility->MaxNumberOfPresets(); -#else - TInt maxPresets = 0; - d->mPresetUtility->GetMaxNumberOfPresets( maxPresets ); - return maxPresets; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -77,13 +65,7 @@ int RadioPresetStorage::presetCount() const { Q_D( const RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY return d->mPresetUtility->PresetCount(); -#else - TInt presetCount = 0; - d->mPresetUtility->GetNumberOfPresets( presetCount ); - return presetCount; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -92,16 +74,7 @@ int RadioPresetStorage::firstPreset() const { Q_D( const RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY return d->mPresetUtility->FirstPreset(); -#else - TInt firstIndex = -1; - TRAPD( err, d->mPresetUtility->GetFirstPresetL( firstIndex ) ); - if ( err ) { - firstIndex = -1; - } - return firstIndex; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -110,16 +83,7 @@ int RadioPresetStorage::nextPreset( int fromIndex ) const { Q_D( const RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY return d->mPresetUtility->NextPreset( fromIndex ); -#else - TInt nextIndex = -1; - TRAPD( err, d->mPresetUtility->GetNextPresetL( fromIndex, nextIndex ) ); - if ( err ) { - nextIndex = -1; - } - return nextIndex; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -128,12 +92,7 @@ bool RadioPresetStorage::deletePreset( int presetIndex ) { Q_D( RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY return d->mPresetUtility->DeletePreset( presetIndex ) == KErrNone; -#else - TRAPD( err, d->mPresetUtility->DeletePresetL( presetIndex ) ); - return err; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -142,14 +101,13 @@ bool RadioPresetStorage::savePreset( const RadioStationIf& station ) { Q_D( RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY TPreset preset; preset.SetFrequency( station.frequency() ); - TPresetName name( station.name().utf16() ); + TPresetName name( station.name().left( KPresetNameLength ).utf16() ); preset.SetName( name ); preset.SetRenamedByUser( station.isRenamedByUser() ); preset.SetGenre( station.genre() ); - TRadioUrl url( station.url().utf16() ); + TRadioUrl url( station.url().left( KUrlMaxLength ).utf16() ); preset.SetUrl( url ); preset.SetPiCode( station.piCode() ); preset.SetFavorite( station.isFavorite() ); @@ -157,11 +115,6 @@ TRAPD( err, d->mPresetUtility->SavePresetL( preset, station.presetIndex() ) ); return err == KErrNone; -#else - TFmPresetName name( station.name().utf16() ); - TRAPD( err, d->mPresetUtility->SetPresetL( station.presetIndex(), name, station.frequency() ) ); - return err == KErrNone; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -170,7 +123,6 @@ bool RadioPresetStorage::readPreset( int index, RadioStationIf& station ) { Q_D( RadioPresetStorage ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY TPreset preset; TRAPD( err, d->mPresetUtility->ReadPresetL( index, preset ) ); if ( !err ) { @@ -188,19 +140,25 @@ return true; } return false; -#else - TFmPresetName nameDesc; - TInt frequency = 0; - TRAPD( err, d->mPresetUtility->GetPresetL( index, nameDesc, frequency ) ); - if ( !err ) - { - station.setPresetIndex( index ); - station.setName( convertString( nameDesc ) ); - station.setFrequency( static_cast( frequency ) ); - station.setLocalStation( true ); +} + +/*! + * + */ +void RadioPresetStorage::readFrequencies( QList& frequencyList ) +{ + Q_D( RadioPresetStorage ); + + TPreset preset; + int index = firstPreset(); + while ( index >= 0 ) { + TRAPD( err, d->mPresetUtility->ReadPresetL( index, preset ) ); + if ( !err ) { + frequencyList.append( preset.Frequency() ); + } + + index = nextPreset( index ); } - return err == KErrNone; -#endif // COMPILE_WITH_NEW_PRESET_UTILITY } /*! @@ -222,11 +180,6 @@ */ bool RadioPresetStoragePrivate::init() { -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY TRAPD( err, mPresetUtility.reset( CPresetUtility::NewL() ) ); - -#else - TRAPD( err, mPresetUtility.reset( CRadioFmPresetUtility::NewL( *this ) ) ); -#endif // COMPILE_WITH_NEW_PRESET_UTILITY return err == KErrNone; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/src/radiopresetstorage_win32.cpp diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiopresetstorage/tsrc/t_radiopresetstorage.pro --- a/radioapp/radiopresetstorage/tsrc/t_radiopresetstorage.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiopresetstorage/tsrc/t_radiopresetstorage.pro Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ symbian: { TARGET.CAPABILITY = CAP_GENERAL_DLL TARGET.SID = 0x101FF976 # Old visual radio uid + MMP_RULES += SMPSAFE } DEPENDPATH += . \ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiocarouselmodel.h --- a/radioapp/radiouiengine/inc/radiocarouselmodel.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOCAROUSELMODEL_H -#define RADIOCAROUSELMODEL_H - -// System includes -#include - -// User includes -#include "radiouiengineexport.h" -#include "radio_global.h" - -// Forward declarations -class RadioCarouselModelPrivate; -class RadioUiEngine; -class RadioStation; -class RadioStationModel; - -class UI_ENGINE_DLL_EXPORT RadioCarouselModel : public QAbstractListModel -{ - Q_OBJECT - Q_DECLARE_PRIVATE_D( d_ptr, RadioCarouselModel ) - Q_DISABLE_COPY( RadioCarouselModel ) - - friend class RadioUiEngine; - friend class RadioStationModelPrivate; - -public: - - ~RadioCarouselModel(); - -// from base class QAbstractListModel - - int rowCount( const QModelIndex& parent = QModelIndex() ) const; - QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const; - -// New functions - - /*! - * Finds the closest station from the given frequency - */ - RadioStation findClosest( const uint frequency, StationSkip::Mode mode ); - - /*! - * Returns the model index corresponding to the given frequency - */ - QModelIndex modelIndexFromFrequency( uint frequency ); - -private slots: - - void removeFrequency( const QModelIndex& parent, int first, int last ); - -private: - - explicit RadioCarouselModel( RadioUiEngine& uiEngine, RadioStationModel& stationModel ); - -private: // data - - /** - * Unmodifiable pointer to the private implementation - */ - RadioCarouselModelPrivate* const d_ptr; - -}; - -#endif // RADIOCAROUSELMODEL_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiocarouselmodel_p.h --- a/radioapp/radiouiengine/inc/radiocarouselmodel_p.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOCAROUSELMODEL_P_H -#define RADIOCAROUSELMODEL_P_H - -// System includes - -// Forward declarations -class RadioCarouselModel; -class RadioUiEngine; -class RadioStationModel; - -class RadioCarouselModelPrivate -{ -public: - - explicit RadioCarouselModelPrivate( RadioCarouselModel* model, - RadioUiEngine& uiEngine, - RadioStationModel& stationModel ); - - ~RadioCarouselModelPrivate(); - -public: // data - - /** - * Pointer to the public class - * Not own. - */ - RadioCarouselModel* q_ptr; - - /** - * Reference to the ui engine - */ - RadioUiEngine& mUiEngine; - - RadioStationModel& mStationModel; - -}; - -#endif // RADIOCAROUSELMODEL_P_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiocontrolservice.h --- a/radioapp/radiouiengine/inc/radiocontrolservice.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiocontrolservice.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,12 +19,7 @@ #define RADIOCONTROLSERVICE_H // System includes -#ifndef BUILD_WIN32 -# include -#else -# include -typedef QObject XQServiceProvider; -#endif +#include // User includes diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiogenrelocalizer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiouiengine/inc/radiogenrelocalizer.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,140 @@ +/* +* 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: Small helper utility to localize radio genres +* +*/ + +#ifndef RADIOGENRELOCALIZER_H +#define RADIOGENRELOCALIZER_H + +#include "radio_global.h" + +// Constants + +namespace RadioGenreLocalizer +{ + + struct GenreMap + { + int mGenreCode; + const char* mInCarousel; + const char* mInStationsList; + const char* mInHomeScreen; + }; + + static QString genreToString( RadioRegion::Region region, int genre, GenreTarget::Target target ); +} + +// Convenience macros to help in the construction of the localization tables +#define BEGIN_GENRE_MAP(name) const RadioGenreLocalizer::GenreMap name[] = { +#define EUROPEAN_GENRE(code, inCarousel, inStationsList, inHomescreen ) { GenreEurope::code, inCarousel, inStationsList, inHomescreen } +#define AMERICAN_GENRE(code, inCarousel, inStationsList, inHomescreen ) { GenreAmerica::code, inCarousel, inStationsList, inHomescreen } +#define END_GENRE_MAP(name) }; const int name ## Count = sizeof ( name ) / sizeof ( name[0] ); + +BEGIN_GENRE_MAP( EuropeanGenres ) + // Genre code // Text in Carousel // Text in Stations list // Text in Homescreen widget + EUROPEAN_GENRE( RdsNone, "", "", "" ), + EUROPEAN_GENRE( RdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" ), + EUROPEAN_GENRE( RdsCurrentAffairs, "txt_rad_info_current_affairs", "txt_rad_dblist_l1_mhz_val_current_affairs", "txt_rad_info_current_affairs_hs" ), + EUROPEAN_GENRE( RdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" ), + EUROPEAN_GENRE( RdsSport, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" ), + EUROPEAN_GENRE( RdsEducation, "txt_rad_info_education", "txt_rad_dblist_l1_mhz_val_education", "txt_rad_info_education_hs" ), + EUROPEAN_GENRE( RdsDrama, "txt_rad_info_drama", "txt_rad_dblist_l1_mhz_val_drama", "txt_rad_info_drama_hs" ), + EUROPEAN_GENRE( RdsCulture, "txt_rad_info_culture", "txt_rad_dblist_l1_mhz_val_culture", "txt_rad_info_culture_hs" ), + EUROPEAN_GENRE( RdsScience, "txt_rad_info_science", "txt_rad_dblist_l1_mhz_val_science", "txt_rad_info_science_hs" ), + EUROPEAN_GENRE( RdsVariedSpeech, "txt_rad_info_varied", "txt_rad_dblist_l1_mhz_val_varied", "txt_rad_info_varied_hs" ), + EUROPEAN_GENRE( RdsPopMusic, "txt_rad_info_pop_music", "txt_rad_dblist_l1_mhz_val_pop_music", "txt_rad_info_pop_music_hs" ), + EUROPEAN_GENRE( RdsRockMusic, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" ), + EUROPEAN_GENRE( RdsEasyListening, "txt_rad_info_easy_listening", "txt_rad_dblist_l1_mhz_val_easy_listening", "txt_rad_info_easy_listening_hs" ), + EUROPEAN_GENRE( RdsLightClassical, "txt_rad_info_light_classical", "txt_rad_dblist_l1_mhz_val_light_classical", "txt_rad_info_light_classical_hs" ), + EUROPEAN_GENRE( RdsSeriousClassical, "txt_rad_info_serious_classical", "txt_rad_dblist_l1_mhz_val_serious_classical", "txt_rad_info_serious_classical_hs" ), + EUROPEAN_GENRE( RdsOtherMusic, "txt_rad_info_other_music", "txt_rad_dblist_l1_mhz_val_other_music", "txt_rad_info_other_music_hs" ), + EUROPEAN_GENRE( RdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" ), + EUROPEAN_GENRE( RdsFinance, "txt_rad_info_finance", "txt_rad_dblist_l1_mhz_val_finance", "txt_rad_info_finance_hs" ), + EUROPEAN_GENRE( RdsChildrensProgrammes, "txt_rad_info_childrens_programmes", "txt_rad_dblist_l1_mhz_val_childrens_programmes", "txt_rad_info_childrens_programmes_hs" ), + EUROPEAN_GENRE( RdsSocialAffairs, "txt_rad_info_social_affairs", "txt_rad_dblist_l1_mhz_val_social_affairs", "txt_rad_info_social_affairs_hs" ), + EUROPEAN_GENRE( RdsReligion, "txt_rad_info_religion", "txt_rad_dblist_l1_mhz_val_religion", "txt_rad_info_religion_hs" ), + EUROPEAN_GENRE( RdsPhoneIn, "txt_rad_info_phone_in", "txt_rad_dblist_l1_mhz_val_phone_in", "txt_rad_info_phone_in_hs" ), + EUROPEAN_GENRE( RdsTravel, "txt_rad_info_travel", "txt_rad_dblist_l1_mhz_val_travel", "txt_rad_info_travel_hs" ), + EUROPEAN_GENRE( RdsLeisure, "txt_rad_info_leisure", "txt_rad_dblist_l1_mhz_val_leisure", "txt_rad_info_leisure_hs" ), + EUROPEAN_GENRE( RdsJazzMusic, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" ), + EUROPEAN_GENRE( RdsCountryMusic, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" ), + EUROPEAN_GENRE( RdsNationalMusic, "txt_rad_info_national_music", "txt_rad_dblist_l1_mhz_val_national_music", "txt_rad_info_national_music_hs" ), + EUROPEAN_GENRE( RdsOldiesMusic, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" ), + EUROPEAN_GENRE( RdsFolkMusic, "txt_rad_info_folk_music", "txt_rad_dblist_l1_mhz_val_folk_music", "txt_rad_info_folk_music_hs" ), + EUROPEAN_GENRE( RdsDocumentary, "txt_rad_info_documentary", "txt_rad_dblist_l1_mhz_val_documentary", "txt_rad_info_documentary_hs" ), + EUROPEAN_GENRE( RdsAlarmTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" ), + EUROPEAN_GENRE( RdsAlarm, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" ) +END_GENRE_MAP( EuropeanGenres ) + +BEGIN_GENRE_MAP( AmericanGenres ) + // Genre code // Text in Carousel // Text in Stations list // Text in Homescreen widget + AMERICAN_GENRE( RbdsNone, "", "", "" ), + AMERICAN_GENRE( RbdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" ), + AMERICAN_GENRE( RbdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" ), + AMERICAN_GENRE( RbdsSports, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" ), + AMERICAN_GENRE( RbdsTalk, "txt_rad_info_talk", "txt_rad_dblist_l1_mhz_val_talk", "txt_rad_info_talk_hs" ), + AMERICAN_GENRE( RbdsRock, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" ), + AMERICAN_GENRE( RbdsClassicRock, "txt_rad_info_classic_rock", "txt_rad_dblist_l1_mhz_val_classic_rock", "txt_rad_info_classic_rock_hs" ), + AMERICAN_GENRE( RbdsAdultHits, "txt_rad_info_adult_hits", "txt_rad_dblist_l1_mhz_val_adult_hits", "txt_rad_info_adult_hits_hs" ), + AMERICAN_GENRE( RbdsSoftRock, "txt_rad_info_soft_rock", "txt_rad_dblist_l1_mhz_val_soft_rock", "txt_rad_info_soft_rock_hs" ), + AMERICAN_GENRE( RbdsTop40, "txt_rad_info_top_40", "txt_rad_dblist_l1_mhz_val_top_40", "txt_rad_info_top_40_hs" ), + AMERICAN_GENRE( RbdsCountry, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" ), + AMERICAN_GENRE( RbdsOldies, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" ), + AMERICAN_GENRE( RbdsSoft, "txt_rad_info_soft", "txt_rad_dblist_l1_mhz_val_soft", "txt_rad_info_soft_hs" ), + AMERICAN_GENRE( RbdsNostalgia, "txt_rad_info_nostalgia", "txt_rad_dblist_l1_mhz_val_nostalgia", "txt_rad_info_nostalgia_hs" ), + AMERICAN_GENRE( RbdsJazz, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" ), + AMERICAN_GENRE( RbdsClassical, "txt_rad_info_classical", "txt_rad_dblist_l1_mhz_val_classical", "txt_rad_info_classical_hs" ), + AMERICAN_GENRE( RbdsRhythmAndBlues, "txt_rad_info_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_rhythm_and_blues", "txt_rad_info_rhythm_and_blues_hs" ), + AMERICAN_GENRE( RbdsSoftRhythmAndBlues, "txt_rad_info_soft_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_soft_rhythm_and_blues", "txt_rad_info_soft_rhythm_and_blues_hs" ), + AMERICAN_GENRE( RbdsLanguage, "txt_rad_info_language", "txt_rad_dblist_l1_mhz_val_language", "txt_rad_info_language_hs" ), + AMERICAN_GENRE( RbdsReligiousMusic, "txt_rad_info_religious_music", "txt_rad_dblist_l1_mhz_val_religious_music", "txt_rad_info_religious_music_hs" ), + AMERICAN_GENRE( RbdsReligiousTalk, "txt_rad_info_religious_talk", "txt_rad_dblist_l1_mhz_val_religious_talk", "txt_rad_info_religious_talk_hs" ), + AMERICAN_GENRE( RbdsPersonality, "txt_rad_info_personality", "txt_rad_dblist_l1_mhz_val_personality", "txt_rad_info_personality_hs" ), + AMERICAN_GENRE( RbdsPublic, "txt_rad_info_public", "txt_rad_dblist_l1_mhz_val_public", "txt_rad_info_public_hs" ), + AMERICAN_GENRE( RbdsCollege, "txt_rad_info_college", "txt_rad_dblist_l1_mhz_val_college", "txt_rad_info_college_hs" ), + AMERICAN_GENRE( RbdsUnassigned1, "", "", "" ), + AMERICAN_GENRE( RbdsUnassigned2, "", "", "" ), + AMERICAN_GENRE( RbdsUnassigned3, "", "", "" ), + AMERICAN_GENRE( RbdsUnassigned4, "", "", "" ), + AMERICAN_GENRE( RbdsUnassigned5, "", "", "" ), + AMERICAN_GENRE( RbdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" ), + AMERICAN_GENRE( RbdsEmergencyTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" ), + AMERICAN_GENRE( RbdsEmergency, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" ), +END_GENRE_MAP( AmericanGenres ) + +/*! + * Function to find the localized text of the given frequency in the given region and target + */ +static QString RadioGenreLocalizer::genreToString( RadioRegion::Region region, int genre, GenreTarget::Target target ) +{ + const RadioGenreLocalizer::GenreMap* genreArray = region == RadioRegion::America ? AmericanGenres : EuropeanGenres; + const int genreCount = region == RadioRegion::America ? AmericanGenresCount : EuropeanGenresCount; + + for( int i = 0; i < genreCount; ++i ) { + if ( genreArray[i].mGenreCode == genre ) { + if ( target == GenreTarget::Carousel ) { + return qtTrId( genreArray[i].mInCarousel ); + } else if ( target == GenreTarget::StationsList ) { + return qtTrId( genreArray[i].mInStationsList ); + } else if ( target == GenreTarget::HomeScreen ) { + return qtTrId( genreArray[i].mInHomeScreen ); + } + } + } + + return ""; +} + +#endif // RADIOGENRELOCALIZER_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiohistorydatabase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiouiengine/inc/radiohistorydatabase.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,58 @@ +/* +* 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: +* +*/ + +#ifndef RADIOHISTORYDATABASE_H +#define RADIOHISTORYDATABASE_H + +// System includes +#include + +// User includes + +// Forward declarations +class QSqlDatabase; +class QSqlQuery; + +/*! + * + */ +class RadioHistoryDatabase +{ +public: + + RadioHistoryDatabase(); + ~RadioHistoryDatabase(); + + void addItem( const QString& artist, const QString& title, + const QString& stationName, uint frequency, bool fromRds ); + + void clearRecent(); + void clearTagged(); + +private: + + bool connectToDatabase(); + + void commitTransaction( QSqlQuery& query ); + +private: // data + + QScopedPointer mDatabase; + +}; + +#endif // RADIOHISTORYDATABASE_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiohistoryitem.h --- a/radioapp/radiouiengine/inc/radiohistoryitem.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiohistoryitem.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,8 +19,8 @@ #define RADIOHISTORYITEM_H // System includes +#include #include -#include // User includes #include "radiouiengineexport.h" @@ -30,12 +30,8 @@ /*! * Radio history item implements a song recognized from the radio broadcast - * - * Note! It is derived from QObject even though architecturally it shouldn't be. - * It is done only to satisfy the WINSCW build which doesn't export the destructor in UREL - * build. This causes mismatching def files and annoying warnings. Deriving from QObject fixes this */ -class UI_ENGINE_DLL_EXPORT RadioHistoryItem : public QObject +class UI_ENGINE_DLL_EXPORT RadioHistoryItem { public: @@ -71,36 +67,23 @@ bool isRecognizedByRds() const; -private: - - /** - * Decrements the reference count of the implicitly shared data. - * Data is deleted if no instance uses it anymore. - */ - void decrementReferenceCount(); - private: // data - /** + /*! * Pointer to the implicitly shared private implementation * Own. */ - class RadioHistoryItemPrivate* mData; + QSharedDataPointer mData; public: /** - * Detach from the implicitly shared data - */ - void detach(); - - /** * Checks if the class is detached from implicitly shared data * Required by many QT convenience functions for implicitly shared classes */ bool isDetached() const; - typedef RadioHistoryItemPrivate* DataPtr; + typedef QSharedDataPointer DataPtr; inline DataPtr &data_ptr() { return mData; } }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiohistoryitem_p.h --- a/radioapp/radiouiengine/inc/radiohistoryitem_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiohistoryitem_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,6 +19,7 @@ #define RADIOHISTORYITEM_H // System includes +#include #include #include @@ -43,11 +44,12 @@ }; } -class RadioHistoryItemPrivate +class RadioHistoryItemPrivate : public QSharedData { public: RadioHistoryItemPrivate(); + RadioHistoryItemPrivate( const RadioHistoryItemPrivate& other ); RadioHistoryItemPrivate( const QString& artist, const QString& title ); void init( const QString& artist, const QString& title ); @@ -56,13 +58,6 @@ public: // data - /** - * Reference count used for implicit sharing. - * Has to be named "ref" instead having the 'm' prefix like all other member variables in Radio - * This is because convenience functions like qAtomicAssign() expect it to be named "ref" - */ - QAtomicInt ref; - int mId; QString mArtist; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiohistorymodel.h --- a/radioapp/radiouiengine/inc/radiohistorymodel.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiohistorymodel.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ // System includes #include +#include // User includes #include "radiouiengineexport.h" @@ -35,7 +36,7 @@ class UI_ENGINE_DLL_EXPORT RadioHistoryModel : public QAbstractListModel { Q_OBJECT - Q_DECLARE_PRIVATE_D( d_ptr, RadioHistoryModel ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioHistoryModel ) Q_DISABLE_COPY( RadioHistoryModel ) friend class RadioUiEngine; @@ -73,6 +74,8 @@ RadioHistoryItem itemAtIndex( const QModelIndex& index ) const; + void removeAll( bool removeTagged ); + signals: void itemAdded(); @@ -81,7 +84,6 @@ public slots: void resetCurrentSong(); - void removeAll(); private: @@ -101,7 +103,7 @@ /** * Unmodifiable pointer to the private implementation */ - RadioHistoryModelPrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiohistorymodel_p.h --- a/radioapp/radiouiengine/inc/radiohistorymodel_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiohistorymodel_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -52,7 +52,7 @@ int rowCount() const; QVariant data( const int row, const int role ) const; - void removeAll(); + void removeAll( bool removeTagged ); enum ViewMode{ ShowAll, ShowTagged }; void setViewMode( ViewMode mode ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiomonitorservice.h --- a/radioapp/radiouiengine/inc/radiomonitorservice.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiomonitorservice.h Thu Jul 22 16:33:45 2010 +0100 @@ -28,6 +28,7 @@ // Forward declarations class RadioUiEnginePrivate; class RadioStation; +class QTimer; class RadioMonitorService : public XQServiceProvider , public RadioEngineWrapperObserver @@ -41,8 +42,6 @@ void init(); - void notifySong( const QString& song ); - public slots: void requestNotifications(); // Slot called by Qt Highway @@ -53,9 +52,10 @@ void notifyRadioStatus(); void notifyFavoriteCount(); void notifyStationChange( const RadioStation& station ); + void sendNotifications(); private: - + // from base class RadioEngineWrapperObserver void tunedToFrequency( uint frequency, int reason ); @@ -63,17 +63,26 @@ // New functions RadioStatus::Status determineRadioStatus() const; + + void checkIfCurrentStationIsFavorite(); + + QString trimHtmlTags( const QString& html ); + void notify( const QVariant& notification ); void notifyList( const QVariantList& list ); - + private: // data RadioUiEnginePrivate& mUiEngine; QList mRequestIndexes; - + RadioStatus::Status mRadioStatus; + QVariantList mNotificationList; + + QTimer* mNotificationTimer; + }; #endif // RADIOMONITORSERVICE_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiomonitorservice_win32.h --- a/radioapp/radiouiengine/inc/radiomonitorservice_win32.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOMONITORSERVICE_H -#define RADIOMONITORSERVICE_H - -// System includes -#include - -// User includes -#include "radioservicedef.h" - -// Forward declarations -class RadioUiEnginePrivate; - -class RadioMonitorService : public QObject -{ - Q_OBJECT - -public: - - RadioMonitorService( RadioUiEnginePrivate& engine ); - virtual ~RadioMonitorService(); - - void init(); - - void notifySong( const QString& song ); - -private: - -private: // data - - RadioUiEnginePrivate& mUiEngine; - -}; - -#endif // RADIOMONITORSERVICE_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radioscannerengine.h --- a/radioapp/radiouiengine/inc/radioscannerengine.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radioscannerengine.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ // System includes #include +#include #include // User includes @@ -37,11 +38,11 @@ class UI_ENGINE_DLL_EXPORT RadioScannerEngine : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE_D( d_ptr, RadioScannerEngine ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioScannerEngine ) Q_DISABLE_COPY( RadioScannerEngine ) friend class RadioUiEngine; - + public: explicit RadioScannerEngine( RadioUiEnginePrivate& uiEngine ); @@ -88,7 +89,7 @@ /** * Unmodifiable pointer to the private implementation */ - RadioScannerEnginePrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radioscannerengine_p.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiostation.h --- a/radioapp/radiouiengine/inc/radiostation.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiostation.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,22 +19,16 @@ #define RADIOSTATION_H_ // System includes +#include +#include #include #include -#include // User includes #include "radiouiengineexport.h" #include "radio_global.h" // Constants -const int KLastCallSignCharCode = 25; -const uint KThreeLetterCallSignCount = 72; -const uint KKxxxCallSignPiFirst = 0x1000; -const uint KWxxxCallSignPiFirst = 0x54A8; -const uint KWxxxCallSignPiLast = 0x994F; -const uint KxxxCallSignPiFirst = 0x9950; -const uint KxxxCallSignPiLast = 0x99B9; // Forward declarations class RadioStationPrivate; @@ -56,7 +50,7 @@ friend class RadioStationModelPrivate; friend class TestRadioUiEngine; friend class TestRadioPresetStorage; - + public: /** @@ -88,7 +82,7 @@ Favorite = 1 << 0, LocalStation = 1 << 1, PreDefined = 1 << 2, - Temporary = 1 << 3 + ManualStation = 1 << 3 }; Q_DECLARE_FLAGS( Type, TypeFlag ) @@ -108,6 +102,7 @@ * Magical values used as preset indexes to signify certain conditions. * NotFound means that a find function could not find a station * Invalid means that the station instance has not been initialized + * SharedNull identifies the empty "null" station that every newly created station points to */ enum PresetFlag { NotFound = -1, Invalid = -100, SharedNull = -200 }; @@ -123,7 +118,7 @@ RadioStation& operator=( const RadioStation& other ); -public: +private: explicit RadioStation( int presetIndex, uint frequency ); @@ -156,7 +151,7 @@ int genre() const; - QString frequencyMhz() const; + QString frequencyString() const; uint frequency() const; int presetIndex() const; @@ -165,13 +160,23 @@ QString url() const; - bool hasPiCode() const; - bool hasRds() const; + int piCode() const; void setType( RadioStation::Type type ); void unsetType( RadioStation::Type type ); bool isType( RadioStation::Type type ) const; + // Convenience checkers + + inline bool hasPiCode() const { return piCode() != -1; } + inline bool hasName() const { return !name().isEmpty(); } + inline bool hasUrl() const { return !url().isEmpty(); } + inline bool hasRadiotext() const { return !radioText().isEmpty(); } + inline bool hasDynamicPs() const { return !dynamicPsText().isEmpty(); } + inline bool hasGenre() const { return genre() != -1; } + inline bool hasRds() const { return hasPiCode() || hasGenre() || hasDynamicPs() || + hasRadiotext() || hasUrl() || ( !hasName() && !isRenamed() ); } + // Getters for non-persistent data PsType psType() const; @@ -184,12 +189,6 @@ private: - /** - * Decrements the reference count of the implicitly shared data. - * Data is deleted if no instance uses it anymore. - */ - void decrementReferenceCount(); - // Methods for converting PI code into call sign QString piCodeToCallSign( uint programmeIdentification ); QString iterateCallSign( int piBase, int programmeIdentification ); @@ -202,23 +201,18 @@ * Pointer to the implicitly shared private implementation * Own. */ - class RadioStationPrivate* mData; + QSharedDataPointer mData; public: /** - * Detach from the implicitly shared data - */ - void detach(); - - /** * Checks if the class is detached from implicitly shared data * Required by many QT convenience functions for implicitly shared classes */ bool isDetached() const; - typedef RadioStationPrivate* DataPtr; - inline DataPtr &data_ptr() { return mData; } + typedef QSharedDataPointer DataPtr; + inline DataPtr& data_ptr() { return mData; } }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiostation_p.h --- a/radioapp/radiouiengine/inc/radiostation_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiostation_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,6 +19,7 @@ #define RADIOSTATIONINFO_P_H_ // System includes +#include #include // User includes @@ -26,12 +27,13 @@ #include "radiostationif.h" // Class declaration -class RadioStationPrivate : public RadioStationIf +class RadioStationPrivate : public QSharedData + , public RadioStationIf { public: explicit RadioStationPrivate( int presetIndex = RadioStation::Invalid, uint frequency = 0 ); - explicit RadioStationPrivate( RadioStation::PresetFlag flag ); + explicit RadioStationPrivate( const RadioStationPrivate& other ); virtual ~RadioStationPrivate(); @@ -62,24 +64,11 @@ public: // data - /** - * Reference count used for implicit sharing. - * Has to be named "ref" instead having the 'm' prefix like all other member variables in Radio - * This is because convenience functions like qAtomicAssign() expect it to be named "ref" - */ - QAtomicInt ref; - // ======================================================================== // Persistent data. Saved to Central repository // ======================================================================== /** - * Station frequency. The most important bit of information about a radio station. - * Is checked to be non-null in the isValid() function - */ - uint mFrequency; - - /** * Station index in the Preset Utility. * Negative values signify an invalid RadioStation that has not and will not be saved. * Initialized to -100 by default to indicate and invalid station. @@ -87,6 +76,12 @@ int mPresetIndex; /** + * Station frequency. The most important bit of information about a radio station. + * Is checked to be non-null in the isValid() function + */ + uint mFrequency; + + /** * Station name. Contains a name that is set in one of the following ways: * 1) Received through RDS as the stations PS name and station does not use dynamic PS * 2) Entered by the user. In this case the mRenamedByUser flag will be set and the name diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiostationfiltermodel.h --- a/radioapp/radiouiengine/inc/radiostationfiltermodel.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOSTATIONFILTERMODEL_H_ -#define RADIOSTATIONFILTERMODEL_H_ - -// System includes -#include -#include - -// User includes -#include "radiouiengineexport.h" -#include "radiostation.h" - -// Forward declarations -class RadioUiEngine; - -class UI_ENGINE_DLL_EXPORT RadioStationFilterModel : public QSortFilterProxyModel -{ -public: - - RadioStationFilterModel( RadioUiEngine& uiEngine, QObject* parent = 0 ); - - ~RadioStationFilterModel(); - -// from QAbstractItemModel - - int rowCount( const QModelIndex& parent = QModelIndex() ) const; - QModelIndex index( int row, int column, - const QModelIndex &parent = QModelIndex() ) const; - QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const; - -// New functions - - void setTypeFilter( RadioStation::Type filter ); - - /*! - * Returns the model index corresponding to the given frequency - */ - QModelIndex modelIndexFromFrequency( uint frequency ); - - void setCyclic( bool cyclic ); - - bool hasLooped( const QModelIndex& index ) const; - - QModelIndex realIndex( const QModelIndex& shadowIndex ) const; - - bool isEqual( const QModelIndex& first, const QModelIndex& second ) const; - -private: - -// from base class QSortFilterProxyModel - - bool filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const; - -private: // data - - RadioUiEngine& mUiEngine; - - RadioStation::Type mFilter; - - bool mIsCyclic; - - QMap mShadowIndexes; - -}; - -#endif // RADIOSTATIONFILTERMODEL_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiostationmodel.h --- a/radioapp/radiouiengine/inc/radiostationmodel.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiostationmodel.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ // System includes #include +#include #include // User includes @@ -39,21 +40,24 @@ // Constants typedef QMap Stations; +namespace FindCriteria +{ + enum Criteria + { + OnlySavedStations, + IncludeManualStation + }; +} + // Class declaration class UI_ENGINE_DLL_EXPORT RadioStationModel : public QAbstractListModel { Q_OBJECT - Q_DECLARE_PRIVATE_D( d_ptr, RadioStationModel ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioStationModel ) Q_DISABLE_COPY( RadioStationModel ) public: - enum RadioRole - { - RadioStationRole = Qt::UserRole + 1, - ToggleFavoriteRole - }; - enum DetailFlag { Minimal = 1 << 0, @@ -102,9 +106,15 @@ RadioStation stationAt( int index ) const; /*! - * Functions to find stations by frequency + * Finds a station by frequency */ - bool findFrequency( uint frequency, RadioStation& station ); + bool findFrequency( uint frequency, RadioStation& station, FindCriteria::Criteria criteria = FindCriteria::OnlySavedStations ) const; + + /*! + * Convenience function to find a radio station. + * Internally uses findFrequency() and returns an invalid station if the given frequency is not found + */ + RadioStation findStation( uint frequency, FindCriteria::Criteria criteria = FindCriteria::OnlySavedStations ) const; /*! * Functions to find stations by preset index @@ -118,6 +128,11 @@ RadioStation findClosest( const uint frequency, StationSkip::Mode mode ); /*! + * Checks if the model contains the given frequency + */ + bool contains( const uint frequency ) const; + + /*! * Functions to remove stations */ void removeByFrequency( uint frequency ); @@ -168,7 +183,7 @@ /*! * Returns the model index corresponding to the given frequency */ - QModelIndex modelIndexFromFrequency( uint frequency ); + int indexFromFrequency( uint frequency ); signals: @@ -201,18 +216,12 @@ */ int findUnusedPresetIndex(); - /** - * Used by the RDS data setters to find the correct station where the data is set - * First tries the currentStation variable and if the frequency doesn't match, finds the right one - */ - RadioStation findCurrentStation( uint frequency ); - private: // data /** * Unmodifiable pointer to the private implementation */ - RadioStationModelPrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiostationmodel_p.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiouiengine.h --- a/radioapp/radiouiengine/inc/radiouiengine.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiouiengine.h Thu Jul 22 16:33:45 2010 +0100 @@ -22,6 +22,8 @@ // System includes #include #include +#include +#include // User includes #include "radiouiengineexport.h" @@ -34,36 +36,40 @@ class RadioStation; class RadioHistoryModel; class RadioHistoryItem; -class RadioCarouselModel; -class RadioStationFilterModel; class RadioScannerEngine; class RadioMonitorService; -namespace GenreTarget -{ - enum Target{ - Carousel, - StationsList, - HomeScreen - }; -} +typedef QSharedPointer RadioScannerEnginePtr; +// Constants +const uint DEFAULT_MIN_FREQUENCY = 87500000; class UI_ENGINE_DLL_EXPORT RadioUiEngine : public QObject { Q_OBJECT - Q_DECLARE_PRIVATE_D( d_ptr, RadioUiEngine ) + Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioUiEngine ) Q_DISABLE_COPY( RadioUiEngine ) friend class RadioScannerEngine; -public: +public: // Static functions that are used before the ui engine is created + + /*! + * Gets the last tuned frequency from central repository + */ + static uint lastTunedFrequency( uint defaultFrequency = DEFAULT_MIN_FREQUENCY ); - /** - * Static functions that are used before the ui engine is created + /*! + * Gets the last used volume level */ - static bool isOfflineProfile(); - static uint lastTunedFrequency(); + static int lastVolume(); + + /*! + * Launches the radio server process + */ + static void launchRadioServer(); + +public: RadioUiEngine( QObject* parent = 0 ); ~RadioUiEngine(); @@ -73,6 +79,11 @@ bool init(); bool isFirstTimeStart(); + void setFirstTimeStartPerformed( bool firstTimeStartPerformed ); + + void setPowerOn(); + void setPowerOff( int delay = 0 ); + bool isPoweringOff() const; /** * Getters for things owned by the engine @@ -80,8 +91,7 @@ RadioSettingsIf& settings(); RadioStationModel& stationModel(); RadioHistoryModel& historyModel(); - RadioStationFilterModel* createNewFilterModel( QObject* parent = 0 ); - RadioCarouselModel* carouselModel(); + RadioScannerEnginePtr createScannerEngine(); RadioScannerEngine* scannerEngine(); bool isRadioOn() const; @@ -111,6 +121,16 @@ enum MusicStore{ OviStore, OtherStore }; void openMusicStore( const RadioHistoryItem& item, MusicStore store = OviStore ); + void launchBrowser( const QString& url ); + + void setManualSeekMode( bool manualSeek ); + bool isInManualSeekMode() const; + + /** + * Tunes the radio engine to given frequency + */ + void setFrequency( uint frequency, const int reason = TuneReason::Unspecified ); + signals: void tunedToFrequency( uint frequency, int commandSender ); @@ -125,14 +145,9 @@ void audioRouteChanged( bool loudspeaker ); void antennaStatusChanged( bool connected ); -public slots: + void powerOffRequested(); - /** - * Slots to tune to given frequency or preset - */ - void tuneFrequency( uint frequency, const int reason = TuneReason::Unspecified ); - void tuneWithDelay( uint frequency, const int reason = TuneReason::Unspecified ); - void tunePreset( int presetIndex ); +public slots: /*! * volume update command slot for the engine @@ -151,7 +166,7 @@ * functions used only by the private class to get signals emitted */ void emitTunedToFrequency( uint frequency, int commandSender ); - void emitSeekingStarted( Seeking::Direction direction ); + void emitSeekingStarted( Seek::Direction direction ); void emitRadioStatusChanged( bool radioIsOn ); void emitRdsAvailabilityChanged( bool available ); void emitVolumeChanged( int volume ); @@ -164,7 +179,7 @@ /** * Unmodifiable pointer to the private implementation */ - RadioUiEnginePrivate* const d_ptr; + const QScopedPointer d_ptr; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiouiengine_p.h --- a/radioapp/radiouiengine/inc/radiouiengine_p.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/inc/radiouiengine_p.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,7 +20,7 @@ // System includes #include -#include +#include // User includes #include "radio_global.h" @@ -31,11 +31,11 @@ class RadioEngineWrapper; class RadioStationModel; class RadioHistoryModel; -class RadioCarouselModel; class RadioPresetStorage; class RadioControlService; class RadioMonitorService; class RadioScannerEngine; +class QTimer; class RadioUiEnginePrivate : public RadioEngineWrapperObserver { @@ -62,6 +62,8 @@ void tunedToFrequency( uint frequency, int reason ); void radioStatusChanged( bool radioIsOn ); void rdsAvailabilityChanged( bool available ); + void increaseVolume(); + void decreaseVolume(); void volumeChanged( int volume ); void muteChanged( bool muted ); void audioRouteChanged( bool loudspeaker ); @@ -74,7 +76,7 @@ /*! * Tunes to next or previous station */ - uint skip( StationSkip::Mode mode, uint startFrequency = 0 ); + uint skip( StationSkip::Mode mode, uint startFrequency = 0, const int reason = TuneReason::Skip ); private: // data @@ -92,15 +94,17 @@ QScopedPointer mHistoryModel; - QScopedPointer mCarouselModel; - -#ifndef BUILD_WIN32 QScopedPointer mControlService; -#endif QScopedPointer mMonitorService; - QPointer mScannerEngine; + QWeakPointer mScannerEngine; + + /** + * Power off timer + * Owned by public class by setting parent + */ + QTimer* mPowerOffTimer; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/inc/radiouiengineexport.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/radiouiengine.pro --- a/radioapp/radiouiengine/radiouiengine.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/radiouiengine.pro Thu Jul 22 16:33:45 2010 +0100 @@ -14,35 +14,27 @@ # Description: # +TMP_DIR_NAME = uiengine include(../buildflags.pri) TEMPLATE = lib -TARGET = radiouiengine +TARGET = fmradiouiengine CONFIG += dll DEFINES += BUILD_UI_ENGINE_DLL -win32:DESTDIR = ../bin -# Wrapper does not depend on QtGui or Orbit +symbian:TARGET.UID3 = 0x2002EADA + +# UI engine does not depend on Orbit QT = core gui network sql CONFIG -= hb -CONFIG += mobility -MOBILITY = systeminfo - -symbian: { - DEFINES += SYMBIAN - TARGET.EPOCALLOWDLLDATA = 1 - TARGET.CAPABILITY = CAP_GENERAL_DLL -} INCLUDEPATH += inc INCLUDEPATH += ../radiopresetstorage/inc INCLUDEPATH += ../radioenginewrapper/inc -INCLUDEPATH += ../commoninc +INCLUDEPATH += ../../common -win32:LIBS += -L../bin - -LIBS += -lradiopresetstorage -LIBS += -lradioenginewrapper +LIBS += -lfmradiopresetstorage +LIBS += -lfmradioenginewrapper symbian:LIBS += -lxqservice symbian:LIBS += -lxqserviceutil @@ -50,30 +42,24 @@ DEPENDPATH += $$INCLUDEPATH src -# $$_PRO_FILE_PWD_ points to the directory of the pro file -MOC_DIR = $$_PRO_FILE_PWD_/tmp - # Input HEADERS += radiouiengineexport.h HEADERS += radiostation.h HEADERS += radiostationmodel.h -HEADERS += radiostationfiltermodel.h HEADERS += radiouiengine.h HEADERS += radiohistoryitem.h +HEADERS += radiohistorydatabase.h HEADERS += radiohistorymodel.h -HEADERS += radiocarouselmodel.h HEADERS += radioscannerengine.h HEADERS += radioservicedef.h HEADERS += radionotificationdata.h - -symbian:HEADERS += radiocontrolservice.h -symbian:HEADERS += radiomonitorservice.h -win32:HEADERS += radiomonitorservice_win32.h +HEADERS += radiogenrelocalizer.h +HEADERS += radiocontrolservice.h +HEADERS += radiomonitorservice.h INTERNAL_HEADERS += radiostation_p.h INTERNAL_HEADERS += radiohistoryitem_p.h INTERNAL_HEADERS += radiohistorymodel_p.h -INTERNAL_HEADERS += radiocarouselmodel_p.h INTERNAL_HEADERS += radiouiengine_p.h INTERNAL_HEADERS += radiostationmodel_p.h INTERNAL_HEADERS += radioscannerengine_p.h @@ -84,18 +70,14 @@ SOURCES += radiostation_p.cpp SOURCES += radiostationmodel.cpp SOURCES += radiostationmodel_p.cpp -SOURCES += radiostationfiltermodel.cpp SOURCES += radiouiengine.cpp SOURCES += radiouiengine_p.cpp SOURCES += radiohistoryitem.cpp SOURCES += radiohistoryitem_p.cpp +SOURCES += radiohistorydatabase.cpp SOURCES += radiohistorymodel.cpp SOURCES += radiohistorymodel_p.cpp -SOURCES += radiocarouselmodel.cpp -SOURCES += radiocarouselmodel_p.cpp SOURCES += radioscannerengine.cpp SOURCES += radioscannerengine_p.cpp - -symbian:SOURCES += radiocontrolservice.cpp -symbian:SOURCES += radiomonitorservice.cpp -win32:SOURCES += radiomonitorservice_win32.cpp +SOURCES += radiocontrolservice.cpp +SOURCES += radiomonitorservice.cpp diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiocarouselmodel.cpp --- a/radioapp/radiouiengine/src/radiocarouselmodel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* 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: -* -*/ - -// System includes - -// User includes -#include "radiocarouselmodel.h" -#include "radiocarouselmodel_p.h" -#include "radiostationmodel.h" -#include "radiouiengine.h" -#include "radiostation.h" -#include "radio_global.h" -#include "radiologger.h" - -/*! - * - */ -RadioCarouselModel::RadioCarouselModel( RadioUiEngine& uiEngine, RadioStationModel& stationModel ) : - QAbstractListModel( &uiEngine ), - d_ptr( new RadioCarouselModelPrivate( this, uiEngine, stationModel ) ) -{ - connectAndTest( &stationModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - this, SIGNAL(dataChanged(QModelIndex,QModelIndex)) ); - connectAndTest( &stationModel, SIGNAL(layoutAboutToBeChanged()), - this, SIGNAL(layoutAboutToBeChanged()) ); - connectAndTest( &stationModel, SIGNAL(layoutChanged()), - this, SIGNAL(layoutChanged()) ); - connectAndTest( &stationModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), - this, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)) ); - connectAndTest( &stationModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SIGNAL(rowsInserted(QModelIndex,int,int)) ); - connectAndTest( &stationModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)) ); - connectAndTest( &stationModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SIGNAL(rowsRemoved(QModelIndex,int,int)) ); - connectAndTest( &stationModel, SIGNAL(modelAboutToBeReset()), - this, SIGNAL(modelAboutToBeReset()) ); - connectAndTest( &stationModel, SIGNAL(modelReset()), - this, SIGNAL(modelReset()) ); - -// connectAndTest( model(), SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), -// this, SLOT(removeFrequency(QModelIndex,int,int)) ); -} - -/*! - * - */ -RadioCarouselModel::~RadioCarouselModel() -{ - delete d_ptr; -} - -/*! - * \reimp - */ -int RadioCarouselModel::rowCount( const QModelIndex& parent ) const -{ - Q_UNUSED( parent ); - Q_D( const RadioCarouselModel ); - const int rowCount = d->mStationModel.rowCount(); - if ( rowCount == 0 ) { - return 1; - } - return rowCount; -} - -/*! - * \reimp - */ -QVariant RadioCarouselModel::data( const QModelIndex& index, int role ) const -{ - if ( !index.isValid() ) { - return QVariant(); - } - - Q_D( const RadioCarouselModel ); - if ( role == RadioStationModel::RadioStationRole ) { - const int rowCount = d->mStationModel.rowCount(); - if ( rowCount == 0 ) { - QVariant variant; - variant.setValue( d->mStationModel.currentStation() ); - return variant; - } else { - return d->mStationModel.data( index, role ); - } - } - - return QVariant(); -} - -/*! - * Finds the closest station from the given frequency - */ -RadioStation RadioCarouselModel::findClosest( const uint frequency, StationSkip::Mode mode ) -{ - Q_D( RadioCarouselModel ); - return d->mStationModel.findClosest( frequency, mode ); -} - -/*! - * Returns the model index corresponding to the given frequency - */ -QModelIndex RadioCarouselModel::modelIndexFromFrequency( uint frequency ) -{ - Q_D( RadioCarouselModel ); - if ( d->mStationModel.rowCount() == 0 ) { - return index( 0, 0 ); - } else { - RadioStation station; - if ( d->mStationModel.findFrequency( frequency, station ) ) { - return index( d->mStationModel.findPresetIndex( station.presetIndex() ), 0 ); - } - } - - return QModelIndex(); -} - -/*! - * \reimp - */ -void RadioCarouselModel::removeFrequency( const QModelIndex& parent, int first, int last ) -{ - Q_UNUSED( parent ); - Q_UNUSED( first ); - Q_UNUSED( last ); -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiocarouselmodel_p.cpp --- a/radioapp/radiouiengine/src/radiocarouselmodel_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* 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: -* -*/ - -// User includes -#include "radiocarouselmodel_p.h" -#include "radiostationmodel.h" - -/*! - * - */ -RadioCarouselModelPrivate::RadioCarouselModelPrivate( RadioCarouselModel* model, - RadioUiEngine& uiEngine, - RadioStationModel& stationModel ) : - q_ptr( model ), - mUiEngine( uiEngine ), - mStationModel( stationModel ) -{ -} - -/*! - * - */ -RadioCarouselModelPrivate::~RadioCarouselModelPrivate() -{ - -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiocontrolservice.cpp --- a/radioapp/radiouiengine/src/radiocontrolservice.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiocontrolservice.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -23,17 +23,17 @@ #include "radiouiengine.h" #include "radioservicedef.h" +// Constants +const int SERVICE_POWEROFF_DELAY = 5000; + /*! * */ RadioControlService::RadioControlService( RadioUiEngine& engine ) : - XQServiceProvider( RADIO_CONTROL_SERVICE , &engine ), + XQServiceProvider( RADIO_SERVICE +"."+ RADIO_CONTROL_SERVICE, &engine ), mUiEngine( engine ) { publishAll(); - if ( XQServiceUtil::isService() ) { - XQServiceUtil::toBackground( true ); - } } /*! @@ -48,14 +48,19 @@ */ void RadioControlService::command( int commandId ) { + //TODO: Uncomment when vendor id can be read from the client +// if ( requestInfo().clientVendorId() != NOKIA_VENDORID ) { +// return; +// } + switch ( commandId ) { - case RadioServiceCommand::Play: - mUiEngine.setMute( false ); + case RadioServiceCommand::PowerOn: + mUiEngine.setPowerOn(); break; - case RadioServiceCommand::Pause: - mUiEngine.setMute( true ); + case RadioServiceCommand::PowerOff: + mUiEngine.setPowerOff( SERVICE_POWEROFF_DELAY ); break; case RadioServiceCommand::Previous: @@ -67,11 +72,11 @@ break; case RadioServiceCommand::SeekUp: - mUiEngine.seekStation( Seeking::Up ); + mUiEngine.seekStation( Seek::Up ); break; case RadioServiceCommand::SeekDown: - mUiEngine.seekStation( Seeking::Down ); + mUiEngine.seekStation( Seek::Down ); break; case RadioServiceCommand::Foreground: @@ -82,6 +87,14 @@ XQServiceUtil::toBackground( true ); break; + case RadioServiceCommand::Mute: + mUiEngine.setMute( true ); + break; + + case RadioServiceCommand::UnMute: + mUiEngine.setMute( false ); + break; + default: break; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiohistorydatabase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiouiengine/src/radiohistorydatabase.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,188 @@ +/* +* 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: +* +*/ + +// System includes +#include +#include +#include +#include +#include +#include +#include +//#include + +// User includes +#include "radiohistorydatabase.h" +#include "radiologger.h" + +static const QLatin1String DATABASE_NAME ( "radioplayhistory.db" ); +static const QLatin1String DATABASE_DRIVER ( "QSQLITE" ); +static const QLatin1String HISTORY_TABLE ( "history" ); +static const QLatin1String SQL_CREATE_TABLE ( "CREATE TABLE history (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "artist TEXT NOT NULL, " + "title TEXT NOT NULL, " + "station TEXT NOT NULL, " + "frequency INTEGER NOT NULL, " + "tagged INTEGER NOT NULL DEFAULT 0, " + "fromRds INTEGER NOT NULL DEFAULT 1, " + "time INTEGER NOT NULL)" ); + +static const QLatin1String SQL_ADD_ITEM ( "INSERT INTO history (artist,title,station,frequency,fromRds,time) " + "VALUES ( ?,?,?,?,?,? )" ); + +static const QLatin1String SQL_SELECT_ALL ( "SELECT * FROM history ORDER BY id DESC" ); +static const QLatin1String SQL_SELECT_TAGGED( "SELECT * FROM history WHERE tagged=1" );// ORDER BY id DESC"; + +static const QLatin1String SQL_DELETE_ALL ( "DELETE FROM history" ); +static const QLatin1String SQL_DELETE_RECENT( "DELETE FROM history WHERE tagged=0" ); +//static const QLatin1String SQL_DELETE_TAGGED = "DELETE FROM history WHERE tagged=1"; +static const QLatin1String SQL_CLEAR_TAGS ( "UPDATE history SET tagged = 0 WHERE tagged = 1" ); + +//static static const QLatin1String SQL_FIND_ITEM_BY_ID( "SELECT * FROM history WHERE id = ?" ); +static const QLatin1String SQL_TOGGLE_TAG ( "UPDATE history SET tagged = ? WHERE id = ?" ); + +#ifdef LOGGING_ENABLED +# define GET_ERR( param ) GETSTRING( param.lastError().text() ) +# define GET_ERR_PTR( param ) GETSTRING( param->lastError().text() ) +#endif // LOGGING_ENABLED + +/*! + * + */ +RadioHistoryDatabase::RadioHistoryDatabase() +{ + connectToDatabase(); +} + +/*! + * + */ +RadioHistoryDatabase::~RadioHistoryDatabase() +{ + if ( mDatabase && mDatabase->isOpen() ) { + mDatabase->close(); + } +} + +/*! + * + */ +void RadioHistoryDatabase::addItem( const QString& artist, + const QString& title, + const QString& stationName, + uint frequency, + bool fromRds ) +{ + LOG_FORMAT( "RadioHistoryModelPrivate::addItem. Artist: %s, Title: %s", GETSTRING( artist ), GETSTRING( title ) ); + + QSqlQuery query( *mDatabase ); + mDatabase->transaction(); + + query.prepare( SQL_ADD_ITEM ); + query.addBindValue( artist ); + query.addBindValue( title ); + query.addBindValue( stationName ); + query.addBindValue( static_cast( frequency / 1000 ) ); + query.addBindValue( fromRds ); + query.addBindValue( QDateTime::currentDateTime().toTime_t() ); + + commitTransaction( query ); +} + +/*! + * + */ +void RadioHistoryDatabase::clearRecent() +{ + QSqlQuery query( *mDatabase ); + mDatabase->transaction(); + + query.prepare( SQL_CLEAR_TAGS ); + + commitTransaction( query ); +} + +/*! + * + */ +void RadioHistoryDatabase::clearTagged() +{ + QSqlQuery query( *mDatabase ); + mDatabase->transaction(); + + query.prepare( SQL_DELETE_ALL ); + + commitTransaction( query ); +} + +/*! + * + */ +bool RadioHistoryDatabase::connectToDatabase() +{ + LOG_METHOD; + QSqlDatabase db = QSqlDatabase::addDatabase( DATABASE_DRIVER ); + if ( db.isValid() ) { + mDatabase.reset( new QSqlDatabase( db ) ); + mDatabase->setDatabaseName( DATABASE_NAME ); + + if ( !mDatabase->open() ) { + LOG_FORMAT( "Failed to open database! error = %s", GET_ERR_PTR( mDatabase ) ); + mDatabase.reset(); + return false; + } + + // Create the table if it does not exist + if ( !mDatabase->tables().contains( HISTORY_TABLE ) ) { + LOG( "RadioHistoryModelPrivate::connectToDatabase: Creating database tables." ); + QSqlQuery query; + if ( !query.exec( SQL_CREATE_TABLE ) ) { + LOG_FORMAT( "Database creation failed! error = %s", GET_ERR( query ) ); + mDatabase->close(); + mDatabase.reset(); + return false; + } + } + } else { + LOG_FORMAT( "Invalid database! error = %s", GET_ERR( db ) ); + return false; + } + + return true; +} + +/*! + * + */ +void RadioHistoryDatabase::commitTransaction( QSqlQuery& query ) +{ + LOG_METHOD; + + bool success = false; + Q_UNUSED( success ); + if ( query.exec() ) { + + success = mDatabase->commit(); + LOG_ASSERT( success, LOG_FORMAT( "Commit failed! err: %s", GET_ERR_PTR( mDatabase ) ) ); + + } else { + LOG_FORMAT( "RadioHistoryModelPrivate::commitTransaction FAILED, rolling back: error = %s", GET_ERR( query ) ); + success = mDatabase->rollback(); + LOG_ASSERT( success, LOG_FORMAT( "Rollback failed! err: %s", GET_ERR_PTR( mDatabase ) ) ); + } +} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiohistoryitem.cpp --- a/radioapp/radiouiengine/src/radiohistoryitem.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiohistoryitem.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -29,9 +29,8 @@ * */ RadioHistoryItem::RadioHistoryItem() : - QObject( 0 ) + mData( shared_null() ) { - mData = shared_null(); mData->ref.ref(); } @@ -39,19 +38,16 @@ * */ RadioHistoryItem::RadioHistoryItem( const QString& artist, const QString& title ) : - QObject( 0 ) + mData( new RadioHistoryItemPrivate( artist, title ) ) { - mData = new RadioHistoryItemPrivate( artist, title ); } /*! * */ RadioHistoryItem::RadioHistoryItem( const RadioHistoryItem& other ) : - QObject( 0 ) + mData( other.mData ) { - mData = other.mData; - mData->ref.ref(); } /*! @@ -59,7 +55,6 @@ */ RadioHistoryItem::~RadioHistoryItem() { - decrementReferenceCount(); } /*! @@ -67,7 +62,7 @@ */ RadioHistoryItem& RadioHistoryItem::operator=( const RadioHistoryItem& other ) { - qAtomicAssign( mData, other.mData ); + mData = other.mData; return *this; } @@ -84,9 +79,7 @@ */ void RadioHistoryItem::reset() { - decrementReferenceCount(); mData = shared_null(); - mData->ref.ref(); } /*! @@ -111,7 +104,6 @@ void RadioHistoryItem::setArtist( const QString& artist ) { if ( artist.compare( mData->mArtist ) != 0 ) { - detach(); mData->mArtist = artist; } } @@ -130,7 +122,6 @@ void RadioHistoryItem::setTitle( const QString& title ) { if ( title.compare( mData->mTitle ) != 0 ) { - detach(); mData->mTitle = title; } } @@ -149,7 +140,6 @@ void RadioHistoryItem::setStation( const QString& station ) { if ( station.compare( mData->mStation ) != 0 ) { - detach(); mData->mStation = station; } } @@ -168,7 +158,6 @@ void RadioHistoryItem::setFrequency( uint frequency ) { if ( frequency != mData->mFrequency ) { - detach(); mData->mFrequency = frequency; } } @@ -186,11 +175,9 @@ */ void RadioHistoryItem::setCurrentTime() { - detach(); - mData->mTime.currentDateTime(); + mData->mTime = QDateTime::currentDateTime(); } - /*! * */ @@ -207,34 +194,8 @@ return mData->mFromRds; } -/** - * Decrements the reference count of the implicitly shared data. - */ -void RadioHistoryItem::decrementReferenceCount() -{ - if ( !mData->ref.deref() ) { - delete mData; - mData = 0; - } -} - -/** - * Detach from the implicitly shared data - */ -void RadioHistoryItem::detach() -{ - if ( !isDetached() ) { - RadioHistoryItemPrivate* newData = new RadioHistoryItemPrivate( *mData ); - - decrementReferenceCount(); - - newData->ref = 1; - mData = newData; - } -} - -/** - * Checks if the class is detached from implicitly shared data +/*! + * */ bool RadioHistoryItem::isDetached() const { diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiohistoryitem_p.cpp --- a/radioapp/radiouiengine/src/radiohistoryitem_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiohistoryitem_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -34,6 +34,20 @@ /*! * */ +RadioHistoryItemPrivate::RadioHistoryItemPrivate( const RadioHistoryItemPrivate& other ) : + QSharedData( other ), + mId( other.mId ), + mArtist( other.mArtist ), + mTitle( other.mTitle ), + mFrequency( other.mFrequency ), + mTagged( other.mTagged ), + mFromRds( other.mFromRds ) +{ +} + +/*! + * + */ RadioHistoryItemPrivate::RadioHistoryItemPrivate( const QString& artist, const QString& title ) { @@ -45,7 +59,6 @@ */ void RadioHistoryItemPrivate::init( const QString& artist, const QString& title ) { - ref = 1; mId = -1; mArtist = artist; mTitle = title; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiohistorymodel.cpp --- a/radioapp/radiouiengine/src/radiohistorymodel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiohistorymodel.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -35,9 +35,9 @@ QAbstractListModel( &uiEngine ), d_ptr( new RadioHistoryModelPrivate( this, uiEngine ) ) { - connectAndTest( &uiEngine, SIGNAL(tunedToFrequency(uint,int)), + Radio::connect( &uiEngine, SIGNAL(tunedToFrequency(uint,int)), this, SLOT(resetCurrentSong()) ); - connectAndTest( &uiEngine, SIGNAL(seekingStarted(int)), + Radio::connect( &uiEngine, SIGNAL(seekingStarted(int)), this, SLOT(resetCurrentSong()) ); Q_D( RadioHistoryModel ); @@ -49,8 +49,6 @@ */ RadioHistoryModel::~RadioHistoryModel() { - Q_D( RadioHistoryModel ); - delete d_ptr; } /*! @@ -87,15 +85,6 @@ } /*! - * Public slot - */ -void RadioHistoryModel::removeAll() -{ - Q_D( RadioHistoryModel ); - d->removeAll(); -} - -/*! * Sets the icons to be used in the list */ void RadioHistoryModel::setIcons( const QIcon& nonTaggedIcon, const QIcon& taggedIcon ) @@ -131,6 +120,7 @@ { Q_D( RadioHistoryModel ); d->setViewMode( showTagged ? RadioHistoryModelPrivate::ShowTagged : RadioHistoryModelPrivate::ShowAll ); + reset(); } /*! @@ -154,6 +144,15 @@ /*! * */ +void RadioHistoryModel::removeAll( bool removeTagged ) +{ + Q_D( RadioHistoryModel ); + d->removeAll( removeTagged ); +} + +/*! + * + */ void RadioHistoryModel::addItem( const QString& artist, const QString& title, const RadioStation& station ) { Q_D( RadioHistoryModel ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiohistorymodel_p.cpp --- a/radioapp/radiouiengine/src/radiohistorymodel_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiohistorymodel_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -33,30 +33,32 @@ #include "radiostation.h" #include "radiologger.h" -const char* DATABASE_NAME = "radioplayhistory.db"; -const char* DATABASE_DRIVER = "QSQLITE"; -const char* HISTORY_TABLE = "history"; -const char* SQL_CREATE_TABLE = "CREATE TABLE history (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "artist TEXT NOT NULL, " - "title TEXT NOT NULL, " - "station TEXT NOT NULL, " - "frequency INTEGER NOT NULL, " - "tagged INTEGER NOT NULL DEFAULT 0, " - "fromRds INTEGER NOT NULL DEFAULT 1, " - "time TIMESTAMP NOT NULL)"; +static const QLatin1String DATABASE_NAME ( "radioplayhistory.db" ); +static const QLatin1String DATABASE_DRIVER ( "QSQLITE" ); +static const QLatin1String HISTORY_TABLE ( "history" ); +static const QLatin1String SQL_CREATE_TABLE ( "CREATE TABLE history (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "artist TEXT NOT NULL, " + "title TEXT NOT NULL, " + "station TEXT NOT NULL, " + "frequency INTEGER NOT NULL, " + "tagged INTEGER NOT NULL DEFAULT 0, " + "fromRds INTEGER NOT NULL DEFAULT 1, " + "time INTEGER NOT NULL)" ); -const char* SQL_ADD_ITEM = "INSERT INTO history (artist,title,station,frequency,fromRds,time) " - "VALUES ( ?,?,?,?,?,? )"; +static const QLatin1String SQL_ADD_ITEM ( "INSERT INTO history (artist,title,station,frequency,fromRds,time) " + "VALUES ( ?,?,?,?,?,? )" ); -const char* SQL_SELECT_ALL = "SELECT * FROM history ORDER BY id DESC"; -const char* SQL_SELECT_TAGGED = "SELECT * FROM history WHERE tagged=1";// ORDER BY id DESC"; +static const QLatin1String SQL_SELECT_ALL ( "SELECT * FROM history ORDER BY id DESC" ); +static const QLatin1String SQL_SELECT_TAGGED( "SELECT * FROM history WHERE tagged=1" );// ORDER BY id DESC"; -const char* SQL_DELETE_ALL = "DELETE FROM history"; +static const QLatin1String SQL_DELETE_ALL ( "DELETE FROM history" ); +static const QLatin1String SQL_DELETE_RECENT( "DELETE FROM history WHERE tagged=0" ); +//static const QLatin1String SQL_DELETE_TAGGED = "DELETE FROM history WHERE tagged=1"; +static const QLatin1String SQL_CLEAR_TAGS ( "UPDATE history SET tagged = 0 WHERE tagged = 1" ); -//static const char* SQL_FIND_ITEM_BY_ID = "SELECT * FROM history WHERE id = ?"; -const char* SQL_TOGGLE_TAG = "UPDATE history SET tagged = ? WHERE id = ?"; - +//static static const QLatin1String SQL_FIND_ITEM_BY_ID( "SELECT * FROM history WHERE id = ?" ); +static const QLatin1String SQL_TOGGLE_TAG ( "UPDATE history SET tagged = ? WHERE id = ?" ); #ifdef LOGGING_ENABLED # define GET_ERR( param ) GETSTRING( param.lastError().text() ) @@ -79,10 +81,10 @@ RadioUiEngine& uiEngine ) : q_ptr( model ), mUiEngine( uiEngine ), + mRtItemClass( -1 ), mTopItemIsPlaying( false ), mShowDetails( true ), - mViewMode( ShowAll ), - mRtItemClass( -1 ) + mViewMode( ShowAll ) { } @@ -192,12 +194,27 @@ QStringList list; if ( mShowDetails ) { - list.append( qtTrId( "txt_rad_dblist_1_2" ).arg( artist ).arg( title ) ); - QDateTime dateTime = record.value( RadioHistoryValue::Time ).toDateTime(); - const QString time = dateTime.toLocalTime().toString(); + QString formatter = qtTrId( "txt_rad_dblist_1_2" ); + LOG_FORMAT( "---formatter--- %s", GETSTRING( formatter ) ); + formatter = "%1 - %2"; // TODO! + + const QString firstRow = QString( formatter ).arg( artist ).arg( title ); + LOG_FORMAT( "---firstRow--- %s", GETSTRING( firstRow ) ); + list.append( firstRow ); + + const uint timeInSecs = record.value( RadioHistoryValue::Time ).toUInt(); + QDateTime dateTime; + dateTime.setTime_t( timeInSecs ); + + QString time = dateTime.toString( Qt::SystemLocaleShortDate ); + LOG_FORMAT( "---time--- %s", GETSTRING( time ) ); QString name = !station.isEmpty() ? station : parseFrequency( frequency ); - list.append( qtTrId( "txt_rad_dblist_1_2" ).arg( time ).arg( name ) ); + LOG_FORMAT( "---name--- %s", GETSTRING( name ) ); + const QString secondRow = QString( formatter ).arg( time ).arg( name ); + LOG_FORMAT( "---secondRow--- %s", GETSTRING( secondRow ) ); + + list.append( secondRow ); } else { list.append( artist ); list.append( title ); @@ -222,7 +239,7 @@ /*! * */ -void RadioHistoryModelPrivate::removeAll() +void RadioHistoryModelPrivate::removeAll( bool removeTagged ) { if ( !mQueryModel ) { return; @@ -230,7 +247,7 @@ QSqlQuery query = beginTransaction(); - query.prepare( SQL_DELETE_ALL ); + query.prepare( removeTagged ? SQL_CLEAR_TAGS : SQL_DELETE_ALL ); // Commented out because rowsRemoved() seems to crash HbListView // commitTransaction( query, RemoveRows, 0, rowCount() - 1 ); @@ -250,7 +267,6 @@ mViewMode = mode; mQueryModel->setQuery( mode == ShowTagged ? SQL_SELECT_TAGGED : SQL_SELECT_ALL, *mDatabase ); - q_ptr->reset(); } /*! @@ -264,7 +280,11 @@ updateQuery.addBindValue( item.isTagged() ? 0 : 1 ); updateQuery.addBindValue( item.id() ); - commitTransaction( updateQuery, ChangeData, row ); + Operation operation = ChangeData; + if ( mViewMode == ShowTagged && item.isTagged() ) { + operation = RemoveRows; + } + commitTransaction( updateQuery, operation, row ); } /*! diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiomonitorservice.cpp --- a/radioapp/radiouiengine/src/radiomonitorservice.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiomonitorservice.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -15,6 +15,10 @@ * */ +// System includes +#include +#include + // User includes #include "radiomonitorservice.h" #include "radiouiengine.h" @@ -27,6 +31,9 @@ #include "radionotificationdata.h" #include "radiologger.h" +// Constants +const int NOTIFICATION_DELAY = 200; + #define RUN_NOTIFY( type, data ) \ do { \ QVariant variant; \ @@ -38,10 +45,16 @@ * */ RadioMonitorService::RadioMonitorService( RadioUiEnginePrivate& engine ) : - XQServiceProvider( RADIO_MONITOR_SERVICE, &engine.api() ), + XQServiceProvider( RADIO_SERVICE +"."+ RADIO_MONITOR_SERVICE, &engine.api() ), mUiEngine( engine ), - mRadioStatus( RadioStatus::UnSpecified ) + mRadioStatus( RadioStatus::UnSpecified ), + mNotificationTimer( new QTimer( this ) ) { + mNotificationTimer->setSingleShot( true ); + mNotificationTimer->setInterval( NOTIFICATION_DELAY ); + Radio::connect( mNotificationTimer, SIGNAL(timeout()), + this, SLOT(sendNotifications()) ); + publishAll(); } @@ -58,21 +71,23 @@ void RadioMonitorService::init() { RadioStationModel* stationModel = &mUiEngine.api().stationModel(); - connectAndTest( stationModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), + Radio::connect( stationModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(notifyFavoriteCount()) ); - connectAndTest( stationModel, SIGNAL(favoriteChanged(RadioStation)), + Radio::connect( stationModel, SIGNAL(favoriteChanged(RadioStation)), this, SLOT(notifyFavoriteCount()) ); - connectAndTest( stationModel, SIGNAL(stationDataChanged(RadioStation)), + Radio::connect( stationModel, SIGNAL(stationDataChanged(RadioStation)), this, SLOT(notifyStationChange(RadioStation)) ); - connectAndTest( stationModel, SIGNAL(radioTextReceived(RadioStation)), + Radio::connect( stationModel, SIGNAL(radioTextReceived(RadioStation)), this, SLOT(notifyStationChange(RadioStation)) ); RadioUiEngine* uiEngine = &mUiEngine.api(); - connectAndTest( uiEngine, SIGNAL(seekingStarted(int)), + Radio::connect( uiEngine, SIGNAL(seekingStarted(int)), + this, SLOT(notifyRadioStatus()) ); + Radio::connect( uiEngine, SIGNAL(muteChanged(bool)), this, SLOT(notifyRadioStatus()) ); - connectAndTest( uiEngine, SIGNAL(muteChanged(bool)), + Radio::connect( uiEngine, SIGNAL(antennaStatusChanged(bool)), this, SLOT(notifyRadioStatus()) ); - connectAndTest( uiEngine, SIGNAL(antennaStatusChanged(bool)), + Radio::connect( uiEngine, SIGNAL(powerOffRequested()), this, SLOT(notifyRadioStatus()) ); mUiEngine.wrapper().addObserver( this ); @@ -81,20 +96,15 @@ } /*! - * - */ -void RadioMonitorService::notifySong( const QString& song ) -{ - RUN_NOTIFY( Song, song ); -} - -/*! * Public slot * */ void RadioMonitorService::requestNotifications() { - mRequestIndexes.append( setCurrentRequestAsync() ); + //TODO: Uncomment when vendor id can be read from the client +// if ( requestInfo().clientVendorId() == NOKIA_VENDORID ) { + mRequestIndexes.append( setCurrentRequestAsync() ); +// } } /*! @@ -116,7 +126,7 @@ notification.setValue( RadioNotificationData( RadioServiceNotification::FavoriteCount, stationModel.favoriteCount() ) ); notificationList.append( notification ); - notification.setValue( RadioNotificationData( RadioServiceNotification::Frequency, station.frequency() ) ); + notification.setValue( RadioNotificationData( RadioServiceNotification::Frequency, RadioStation::parseFrequency( station.frequency() ) ) ); notificationList.append( notification ); if ( !station.name().isEmpty() ) { @@ -131,18 +141,17 @@ } if ( !station.radioText().isEmpty() ) { - notification.setValue( RadioNotificationData( RadioServiceNotification::RadioText, station.radioText() ) ); + const QString trimmedRadioText = trimHtmlTags( station.radioText() ); + notification.setValue( RadioNotificationData( RadioServiceNotification::RadioText, trimmedRadioText ) ); notificationList.append( notification ); } - if ( !station.url().isEmpty() ) { - notification.setValue( RadioNotificationData( RadioServiceNotification::HomePage, station.url() ) ); + if ( !station.dynamicPsText().isEmpty() ) { + notification.setValue( RadioNotificationData( RadioServiceNotification::DynamicPS, station.dynamicPsText() ) ); notificationList.append( notification ); } - //TODO: To be implemented -// notification.setValue( RadioNotificationData( RadioServiceNotification::Song, ) ); -// notificationList.append( notification ); + checkIfCurrentStationIsFavorite(); completeRequest( setCurrentRequestAsync(), notificationList ); } @@ -156,8 +165,10 @@ if ( radioStatus != mRadioStatus ) { if ( radioStatus == RadioStatus::Seeking ) { - connectAndTest( mUiEngine.api().scannerEngine(), SIGNAL(destroyed()), - this, SLOT(notifyRadioStatus()) ); + if ( RadioScannerEngine* scannerEngine = mUiEngine.api().scannerEngine() ) { + Radio::connect( scannerEngine, SIGNAL(destroyed()), + this, SLOT(notifyRadioStatus()) ); + } } mRadioStatus = radioStatus; @@ -173,6 +184,10 @@ { const int favoriteCount = mUiEngine.api().stationModel().favoriteCount(); RUN_NOTIFY( FavoriteCount, favoriteCount ); + + if ( favoriteCount == 1 ) { + checkIfCurrentStationIsFavorite(); + } } /*! @@ -195,18 +210,19 @@ list.append( notification ); } + if ( station.hasDataChanged( RadioStation::DynamicPsChanged ) ) { + notification.setValue( RadioNotificationData( RadioServiceNotification::DynamicPS, station.dynamicPsText() ) ); + list.append( notification ); + } + if ( station.hasDataChanged( RadioStation::NameChanged ) ) { notification.setValue( RadioNotificationData( RadioServiceNotification::Name, station.name() ) ); list.append( notification ); } - if ( station.hasDataChanged( RadioStation::UrlChanged ) ) { - notification.setValue( RadioNotificationData( RadioServiceNotification::HomePage, station.url() ) ); - list.append( notification ); - } - if ( station.hasDataChanged( RadioStation::RadioTextChanged ) ) { - notification.setValue( RadioNotificationData( RadioServiceNotification::RadioText, station.radioText() ) ); + const QString trimmedRadioText = trimHtmlTags( station.radioText() ); + notification.setValue( RadioNotificationData( RadioServiceNotification::RadioText, trimmedRadioText ) ); list.append( notification ); } @@ -214,17 +230,32 @@ } /*! + * Private slot + * + */ +void RadioMonitorService::sendNotifications() +{ + notifyList( mNotificationList ); + mNotificationList.clear(); +} + +/*! * \reimp */ void RadioMonitorService::tunedToFrequency( uint frequency, int reason ) { Q_UNUSED( reason ); if ( !mUiEngine.api().isScanning() ) { - RUN_NOTIFY( Frequency, frequency ); + RUN_NOTIFY( Frequency, RadioStation::parseFrequency( frequency ) ); RadioStation station; if ( mUiEngine.api().stationModel().findFrequency( frequency, station ) && !station.name().isEmpty() ) { RUN_NOTIFY( Name, station.name() ); } + + const int favoriteCount = mUiEngine.api().stationModel().favoriteCount(); + if ( favoriteCount == 1 ) { + checkIfCurrentStationIsFavorite(); + } } } @@ -234,7 +265,9 @@ RadioStatus::Status RadioMonitorService::determineRadioStatus() const { RadioUiEngine& uiEngine = mUiEngine.api(); - if ( uiEngine.isScanning() ) { + if ( uiEngine.isPoweringOff() ) { + return RadioStatus::PoweringOff; + } else if ( uiEngine.isScanning() ) { return RadioStatus::Seeking; } else if ( !uiEngine.isAntennaAttached() ) { return RadioStatus::NoAntenna; @@ -248,11 +281,32 @@ /*! * */ +void RadioMonitorService::checkIfCurrentStationIsFavorite() +{ + const bool currentIsFavorite = mUiEngine.api().stationModel().currentStation().isFavorite(); + RUN_NOTIFY( CurrentIsFavorite, currentIsFavorite ); +} + +/*! + * + */ +QString RadioMonitorService::trimHtmlTags( const QString& html ) +{ + QString trimmed = html; + QRegExp rex( "<.+>" ); + rex.setMinimal( true ); + trimmed.remove( rex ); + return trimmed; +} + +/*! + * + */ void RadioMonitorService::notify( const QVariant& notification ) { - QVariantList list; - list.append( notification ); - notifyList( list ); + mNotificationTimer->stop(); + mNotificationList.append( notification ); + mNotificationTimer->start(); } /*! diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiomonitorservice_win32.cpp --- a/radioapp/radiouiengine/src/radiomonitorservice_win32.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* 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: -* -*/ - -// User includes -#include "radiomonitorservice_win32.h" -#include "radiouiengine_p.h" -#include "radioservicedef.h" - -/*! - * - */ -RadioMonitorService::RadioMonitorService( RadioUiEnginePrivate& engine ) : - QObject(), - mUiEngine( engine ) -{ -} - -/*! - * - */ -RadioMonitorService::~RadioMonitorService() -{ -} - -/*! - * - */ -void RadioMonitorService::init() -{ -} - -/*! - * - */ -void RadioMonitorService::notifySong( const QString& song ) -{ - Q_UNUSED( song ) -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radioscannerengine.cpp --- a/radioapp/radiouiengine/src/radioscannerengine.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radioscannerengine.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -27,6 +27,7 @@ #include "radiostationhandlerif.h" #include "radiostationmodel.h" #include "radiostation.h" +#include "radiologger.h" /*! * @@ -43,7 +44,6 @@ RadioScannerEngine::~RadioScannerEngine() { cancel(); - delete d_ptr; } /*! @@ -54,6 +54,8 @@ Q_D( RadioScannerEngine ); d->mUiEngine.cancelSeeking(); +// d->mUiEngine.wrapper().setRdsEnabled( false ); + d->mIsScanning = true; if ( !d->mUiEngine.api().isMuted() ) { @@ -61,17 +63,17 @@ d->mMutedByScanner = true; } - d->mUiEngine.api().emitSeekingStarted( Seeking::Up ); + d->mUiEngine.api().emitSeekingStarted( Seek::Up ); d->mUiEngine.api().stationModel().removeAll( RadioStationModel::RemoveLocalStations ); d->mLastFoundFrequency = d->mUiEngine.api().minFrequency(); if ( d->mUiEngine.wrapper().currentFrequency() == d->mLastFoundFrequency ) { // Engine was already at the minimun frequency so start scanning - d->mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan ); + d->mUiEngine.wrapper().startSeeking( Seek::Up, TuneReason::StationScan ); } else { // Engine must be initialized to minimum frequency before scanning can start - d->mUiEngine.wrapper().tuneFrequency( d->mLastFoundFrequency, TuneReason::StationScanInitialization ); + d->mUiEngine.wrapper().setFrequency( d->mLastFoundFrequency, TuneReason::StationScanInitialization ); } } @@ -81,7 +83,7 @@ void RadioScannerEngine::continueScanning() { Q_D( RadioScannerEngine ); - d->mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan ); + d->mUiEngine.wrapper().startSeeking( Seek::Up, TuneReason::StationScan ); } /*! @@ -108,6 +110,8 @@ d->mUiEngine.api().setMute( false ); d->mMutedByScanner = false; } + +// d->mUiEngine.wrapper().setRdsEnabled( true ); } /*! diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radioscannerengine_p.cpp --- a/radioapp/radiouiengine/src/radioscannerengine_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radioscannerengine_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -59,9 +59,12 @@ Q_Q( RadioScannerEngine ); if ( reason == TuneReason::StationScanInitialization ) { - mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan ); + mUiEngine.wrapper().startSeeking( Seek::Up, TuneReason::StationScan ); } else if ( reason == TuneReason::StationScan ) { - if ( frequency > mLastFoundFrequency ) { + if ( frequency == mLastFoundFrequency ) { + // Stop scanning + q->emitStationFound( RadioStation() ); + } else if ( frequency > mLastFoundFrequency ) { // Station has been found normally mLastFoundFrequency = frequency; addFrequencyAndReport( frequency ); @@ -72,6 +75,8 @@ // Seeking looped around the frequency band. Send invalid station as indicator that the scanning should stop q->emitStationFound( RadioStation() ); } + } else { + q->emitStationFound( RadioStation() ); } } @@ -82,8 +87,13 @@ { RadioStationModel& stationModel = mUiEngine.api().stationModel(); stationModel.stationHandlerIf().addScannedFrequency( frequency ); + + // Return value of findFrequency() is intentionally ignored. The station was just added + // to the model in the previous line so it should be found and if it isn't then an + // empty station is sent with the signal and scanner will stop the scanning process. RadioStation station; stationModel.findFrequency( frequency, station ); + Q_Q( RadioScannerEngine ); q->emitStationFound( station ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiostation.cpp --- a/radioapp/radiouiengine/src/radiostation.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiostation.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -25,13 +25,18 @@ #include "radio_global.h" // Constants -const QString KTagArtist = "artist"; -const QString KTagTitle = "title"; -const QString KLinkArtist = ""; -const QString KLinkTitle = ""; -const QString KLinkClose = ""; +const QLatin1String HTML_TAG_START( "" ); +const QLatin1String HTML_TAG_END( "" ); -const char* callSign[KThreeLetterCallSignCount] = +const uint LAST_CALLSIGN_CHAR_CODE = 25; +const uint THREE_LETTER_CALLSIGN_COUNT = 72; +const uint KXXX_CALLSIGN_PI_FIRST = 0x1000; +const uint WXXX_CALLSIGN_PI_FIRST = 0x54A8; +const uint WXXX_CALLSIGN_PI_LAST = 0x994F; +const uint XXX_CALLSIGN_PI_FIRST = 0x9950; +const uint XXX_CALLSIGN_PI_LAST = 0x99B9; + +const char* CALLSIGN_TABLE[THREE_LETTER_CALLSIGN_COUNT] = {"KBW", "KCY", "KDB", "KDF", "KEX", "KFH","KFI","KGA","KGB", "KGO", "KGU", "KGW", "KGY", "KHQ", "KID", "KIT", "KJR", "KLO", "KLZ", "KMA", "KMJ", "KNX", "KOA", "KOB", "KOY", "KPQ", "KQV", @@ -41,7 +46,7 @@ "WJW", "WJZ", "WKY", "WLS", "WLW", "WMC", "WMT", "WOC", "WOI", "WOL", "WOR", "WOW", "WRC", "WRR", "WSB", "WSM", "WWJ", "WWL"}; -const uint piCode[KThreeLetterCallSignCount] = +const uint PI_CODE_TABLE[THREE_LETTER_CALLSIGN_COUNT] = {0x99A5, 0x99A6, 0x9990, 0x99A7, 0x9950, 0x9951, 0x9952, 0x9953, 0x9991, 0x9954, 0x9955, 0x9956, 0x9957, 0x99AA, 0x9958, 0x9959, 0x995A, 0x995B, 0x995C, 0x995D, 0x995E, 0x995F, 0x9960, 0x99AB, @@ -52,14 +57,30 @@ 0x997C, 0x997D, 0x997E, 0x999E, 0x999F, 0x9981, 0x99A0, 0x9983, 0x9984, 0x99A1, 0x99B9, 0x99A2, 0x99A3, 0x99A4, 0x9988, 0x9989}; -const uint KDisableLocalAreaCoverageMask = 0x0800; +const uint DISABLE_LOCAL_AREA_COVERAGE_MASK = 0x0800; + +const int PS_NAME_CHANGE_THRESHOLD_SECONDS = 10; + +// Macros to help protect shared null and manual station instances to help debugging +// Enabled in emulator or win32 builds by default +#if defined __WINS__ || defined BUILD_WIN32 +# define PROTECT_SHAREDNULL_AND_MANUALSTATION +#endif -const int KPsNameChangeThresholdSeconds = 10; +#ifdef PROTECT_SHAREDNULL_AND_MANUALSTATION +# define ASSERT_SHARED_NULL_IS_INTACT \ + Q_ASSERT_X( mData->mPresetIndex != SharedNull, "RadioStation", "Shared null modified illegally!" ); +# define ASSERT_MANUAL_STATION \ + Q_ASSERT_X( mData->mPresetIndex != ManualStation, "RadioStation", "Illegally modifying manual station" ); +#else +# define ASSERT_SHARED_NULL_IS_INTACT +# define ASSERT_MANUAL_STATION +#endif // PROTECT_SHAREDNULL_AND_MANUALSTATION /** * Static shared data instance that is used by all default-constructed RadioStation instances */ -Q_GLOBAL_STATIC_WITH_ARGS( RadioStationPrivate, shared_null, ( RadioStation::SharedNull ) ) +static RadioStationPrivate shared_null( RadioStation::SharedNull, 0 ); /*! * @@ -67,7 +88,7 @@ QString RadioStation::parseFrequency( uint frequency ) { QString freqString; - freqString.sprintf( "%.1f", qreal( frequency ) / KFrequencyMultiplier ); + freqString.sprintf( "%.1f", qreal( frequency ) / FREQUENCY_MULTIPLIER ); return freqString; } @@ -75,29 +96,24 @@ * */ RadioStation::RadioStation() : - QObject( 0 ) + mData( &shared_null ) { - mData = shared_null(); - mData->ref.ref(); } /*! * */ RadioStation::RadioStation( const RadioStation& other ) : - QObject( 0 ) + mData( other.mData ) { - mData = other.mData; - mData->ref.ref(); } /*! * */ RadioStation::RadioStation( int presetIndex, uint frequency ) : - QObject( 0 ) + mData( new RadioStationPrivate( presetIndex, frequency ) ) { - mData = new RadioStationPrivate( presetIndex, frequency ); } /*! @@ -105,7 +121,6 @@ */ RadioStation::~RadioStation() { - decrementReferenceCount(); } /*! @@ -113,7 +128,7 @@ */ RadioStation& RadioStation::operator=( const RadioStation& other ) { - qAtomicAssign( mData, other.mData ); + mData = other.mData; return *this; } @@ -122,9 +137,8 @@ */ void RadioStation::reset() { - decrementReferenceCount(); - mData = shared_null(); - mData->ref.ref(); + mData = &shared_null; + ASSERT_SHARED_NULL_IS_INTACT } /*! @@ -133,7 +147,6 @@ void RadioStation::setChangeFlags( RadioStation::Change flags ) { if ( mData->mChangeFlags != flags ) { - detach(); mData->mChangeFlags = flags; } } @@ -144,7 +157,7 @@ void RadioStation::setPresetIndex( int presetIndex ) { if ( mData->mPresetIndex != presetIndex ) { - detach(); + ASSERT_MANUAL_STATION mData->mPresetIndex = presetIndex; mData->mChangeFlags |= RadioStation::PersistentDataChanged; } @@ -156,9 +169,9 @@ void RadioStation::setFrequency( uint frequency ) { if ( mData->mFrequency != frequency ) { - detach(); mData->mFrequency = frequency; mData->mChangeFlags |= RadioStation::PersistentDataChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -170,7 +183,6 @@ // Name emptiness is checked because this name setter is used by incoming RDS PS name // and empty names should be ignored if ( !name.isEmpty() && !mData->mRenamedByUser && mData->mName.compare( name ) != 0 ) { - detach(); mData->mName = name.trimmed(); mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::NameChanged; @@ -179,7 +191,7 @@ QTime previousChange = mData->mLastPsNameChangeTime; mData->mLastPsNameChangeTime = QTime::currentTime(); if ( previousChange.isValid() && mData->mPsType == RadioStation::Static && - previousChange.secsTo( mData->mLastPsNameChangeTime ) < KPsNameChangeThresholdSeconds ) { + previousChange.secsTo( mData->mLastPsNameChangeTime ) < PS_NAME_CHANGE_THRESHOLD_SECONDS ) { LOG( "Station changed PS name too often. PS type changed to Dynamic" ); mData->mPsType = RadioStation::Dynamic; mData->mDynamicPsText = mData->mName; @@ -190,11 +202,13 @@ //TODO: This is a temporary thing to see some URL. Remove this if ( !mData->mName.isEmpty() ) { - mData->mUrl = "www." + mData->mName.toLower() + ".fi"; + QString url = mData->mName.toLower().remove( " " ); + mData->mUrl = "www." + url + ".fi"; } else { mData->mUrl = ""; } mData->mChangeFlags |= RadioStation::UrlChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -204,9 +218,9 @@ void RadioStation::setGenre( const int genre ) { if ( mData->mGenre != genre ) { - detach(); mData->mGenre = genre; mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::GenreChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -216,9 +230,9 @@ void RadioStation::setUrl( const QString& url ) { if ( mData->mUrl.compare( url ) != 0 ) { - detach(); mData->mUrl = url; mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::UrlChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -230,40 +244,33 @@ { LOG_FORMAT( "RadioStation::setPiCode new PI: %d", piCode ); // toggling local area coverage bit code must not be interpreted as new PI code - if( region != RadioRegion::America ) - { - piCode &= ~KDisableLocalAreaCoverageMask; + if ( region != RadioRegion::America ) { + piCode &= ~DISABLE_LOCAL_AREA_COVERAGE_MASK; } LOG_FORMAT( "stored PI: %d", mData->mPiCode ); LOG_FORMAT( "call sign check done: %d", mData->mCallSignCheckDone ); //prevent executing the below code when unnessesary - if ( mData->mPiCode != piCode || !mData->mCallSignCheckDone ) - { - detach(); + if ( mData->mPiCode != piCode || !mData->mCallSignCheckDone ) { mData->mPiCode = piCode; mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::PiCodeChanged; // call sign not calculated for clear channel stations //TODO: Remove magic numbers - if( ( (mData->mPiCode & 0xF000 ) >> 12 ) == 0x1 ) - { + if ( ( (mData->mPiCode & 0xF000 ) >> 12 ) == 0x1 ) { LOG( "Clear channel station" ); mData->mCallSignCheckDone = true; - } - // if America region, not PS name received and not user renamed station - else if ( region == RadioRegion::America && mData->mName.isEmpty() && !isRenamed() ) - { + } else if ( region == RadioRegion::America && mData->mName.isEmpty() && !isRenamed() ) { LOG( "Calculate call sign" ); mData->mName = piCodeToCallSign( mData->mPiCode ); mData->mChangeFlags |= RadioStation::NameChanged; } - if ( mData->mChangeFlags.testFlag( RadioStation::PsTypeChanged ) ) - { + if ( mData->mChangeFlags.testFlag( RadioStation::PsTypeChanged ) ) { LOG( "Call sign check done" ); mData->mCallSignCheckDone = true; } + ASSERT_SHARED_NULL_IS_INTACT return true; } return false; @@ -275,9 +282,9 @@ void RadioStation::setPsType( PsType psType ) { if ( mData->mPsType != psType ) { - detach(); mData->mPsType = psType; mData->mChangeFlags |= RadioStation::PsTypeChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -287,9 +294,9 @@ void RadioStation::setRadioText( const QString& radioText ) { if ( mData->mRadioText.compare( radioText ) != 0 ) { - detach(); mData->mRadioText = radioText.isEmpty() ? "" : radioText.trimmed(); mData->mChangeFlags |= RadioStation::RadioTextChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -308,14 +315,7 @@ return; } - detach(); - QString replacement = ""; - if ( rtPlusClass == RtPlus::Artist ) { - replacement = KLinkArtist; - } else if ( rtPlusClass == RtPlus::Title ) { - replacement = KLinkTitle; - } - replacement += rtPlusItem + KLinkClose; + const QString replacement = HTML_TAG_START + rtPlusItem + HTML_TAG_END; mData->mRadioText.replace( rtPlusItem, replacement ); mData->mChangeFlags |= RadioStation::RadioTextChanged; @@ -328,9 +328,9 @@ void RadioStation::setDynamicPsText( const QString& dynamicPsText ) { if ( mData->mDynamicPsText.compare( dynamicPsText ) != 0 ) { - detach(); mData->mDynamicPsText = dynamicPsText; mData->mChangeFlags |= RadioStation::DynamicPsChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -339,7 +339,7 @@ */ bool RadioStation::isValid() const { - return mData->mPresetIndex >= 0 && mData->mFrequency > 0; + return mData->mFrequency > 0 && ( isType( ManualStation ) || mData->mPresetIndex >= 0 ); } /*! @@ -358,7 +358,6 @@ // We don't check for name emptiness because this setter is used also to remove the renaming // of a station by setting an empty name if ( mData->mName.compare( name ) != 0 ) { - detach(); mData->mName = name; mData->mRenamedByUser = !name.isEmpty(); mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::NameChanged; @@ -384,7 +383,7 @@ /*! * */ -QString RadioStation::frequencyMhz() const +QString RadioStation::frequencyString() const { return parseFrequency( mData->mFrequency ); } @@ -411,9 +410,9 @@ void RadioStation::setFavorite( bool favorite ) { if ( isFavorite() != favorite ) { - detach(); favorite ? setType( RadioStation::Favorite ) : unsetType( RadioStation::Favorite ); mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::FavoriteChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -436,21 +435,9 @@ /*! * */ -bool RadioStation::hasPiCode() const +int RadioStation::piCode() const { - return mData->mPiCode != -1; -} - -/*! - * - */ -bool RadioStation::hasRds() const -{ - return hasPiCode() || - mData->mGenre != -1 || - !mData->mDynamicPsText.isEmpty() || - !mData->mRadioText.isEmpty() || - ( !mData->mName.isEmpty() && !isRenamed() ); + return mData->mPiCode; } /*! @@ -459,7 +446,6 @@ void RadioStation::setType( RadioStation::Type type ) { if ( !isType( type ) ) { - detach(); // Check if favorite-status changed if ( mData->mType.testFlag( RadioStation::Favorite ) != type.testFlag( RadioStation::Favorite ) ) { @@ -468,6 +454,7 @@ mData->mType |= type; mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::TypeChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -477,7 +464,6 @@ void RadioStation::unsetType( RadioStation::Type type ) { if ( isType( type ) ) { - detach(); // Check if favorite-status changed if ( mData->mType.testFlag( RadioStation::Favorite ) != type.testFlag( RadioStation::Favorite ) ) { @@ -486,6 +472,7 @@ mData->mType &= ~type; mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::TypeChanged; + ASSERT_SHARED_NULL_IS_INTACT } } @@ -551,22 +538,10 @@ void RadioStation::resetChangeFlags() { if ( mData->mChangeFlags != RadioStation::NoChange ) { - detach(); mData->mChangeFlags = RadioStation::NoChange; } } -/** - * Decrements the reference count of the implicitly shared data. - */ -void RadioStation::decrementReferenceCount() -{ - if ( !mData->ref.deref() ) { - delete mData; - mData = 0; - } -} - /*! * */ @@ -576,21 +551,19 @@ LOG_FORMAT( "RadioStation::piCodeToCallSign PI: %d", programmeIdentification ); // call signs beginning with 'K' - if( ( programmeIdentification>=KKxxxCallSignPiFirst ) && ( programmeIdentification < KWxxxCallSignPiFirst ) ) { + if ( ( programmeIdentification>=KXXX_CALLSIGN_PI_FIRST ) && ( programmeIdentification < WXXX_CALLSIGN_PI_FIRST ) ) { callSign += "K"; - callSign += iterateCallSign( KKxxxCallSignPiFirst, programmeIdentification ); + callSign += iterateCallSign( KXXX_CALLSIGN_PI_FIRST, programmeIdentification ); } // call signs beginning with 'W' - else if (( programmeIdentification >= KWxxxCallSignPiFirst ) && ( programmeIdentification <= KWxxxCallSignPiLast )) { + else if ( ( programmeIdentification >= WXXX_CALLSIGN_PI_FIRST ) && ( programmeIdentification <= WXXX_CALLSIGN_PI_LAST ) ) { callSign += "W"; - callSign += iterateCallSign( KWxxxCallSignPiFirst, programmeIdentification ); + callSign += iterateCallSign( WXXX_CALLSIGN_PI_FIRST, programmeIdentification ); } // 3 letter only call signs - else if(( programmeIdentification >= KxxxCallSignPiFirst ) && ( programmeIdentification <= KxxxCallSignPiLast)) { + else if ( ( programmeIdentification >= XXX_CALLSIGN_PI_FIRST ) && ( programmeIdentification <= XXX_CALLSIGN_PI_LAST ) ) { callSign += callSignString( programmeIdentification ); - } - else - { + } else { LOG( "RadioStation::piCodeToCallSign - Unhandled else" ); } @@ -607,10 +580,10 @@ QString callSign; LOG_FORMAT( "RadioStation::iterateCallSign base: %d", piBase ); - int sum(0), i(0); - + int sum = 0; + int i = 0; while( sum < programmeIdentification ) { - i++; + ++i; sum = piBase + i * 676 + 0 + 0; } callSign += callSignChar( i - 1 ); @@ -619,7 +592,7 @@ sum -= 676; i = 0; while( sum <= programmeIdentification ) { - i++; + ++i; sum = tmpSum + 0 + i * 26 + 0; } callSign += callSignChar( i - 1 ); @@ -628,7 +601,7 @@ sum -= 26; i = 0; while( sum <= programmeIdentification ) { - i++; + ++i; sum = tmpSum + 0 + 0 + i; } callSign += callSignChar( i - 1 ); @@ -641,15 +614,15 @@ */ QString RadioStation::callSignString( uint programmeIdentification ) { - for ( uint i = 0; i < KThreeLetterCallSignCount; ++i ) { - if( piCode[i] == programmeIdentification ) { - return callSign[i]; + for ( uint i = 0; i < THREE_LETTER_CALLSIGN_COUNT; ++i ) { + if( PI_CODE_TABLE[i] == programmeIdentification ) { + return CALLSIGN_TABLE[i]; } } LOG_FORMAT( "RadioStation::callSignString, Not found PI: %d", programmeIdentification ); - return QString("????"); + return QString( "????" ); } /*! @@ -658,37 +631,13 @@ char RadioStation::callSignChar( uint decimalValue ) { LOG_FORMAT( "RadioStation::callSignChar A+: %d", decimalValue ); - if ( decimalValue <= KLastCallSignCharCode ) { + if ( decimalValue <= LAST_CALLSIGN_CHAR_CODE ) { return static_cast( 'A' + decimalValue ); } return '?'; } /** - * Detach from the implicitly shared data - */ -void RadioStation::detach() -{ - if ( !isDetached() ) { - RadioStationPrivate* newData = new RadioStationPrivate( *mData ); - - decrementReferenceCount(); - - newData->ref = 1; - mData = newData; - - // The shared null instance of the data has its preset index set to -200 (RadioStation::SharedNull). - // We change the preset index of the detached data to -100 (RadioStation::Invalid) just to ease - // debugging. This guarantees that the only instance that has value -200 is the actual shared null. - #ifdef _DEBUG - if ( mData->mPresetIndex == RadioStation::SharedNull ) { - mData->mPresetIndex = RadioStation::Invalid; - } - #endif - } -} - -/** * Checks if the class is detached from implicitly shared data */ bool RadioStation::isDetached() const diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiostation_p.cpp --- a/radioapp/radiouiengine/src/radiostation_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiostation_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -26,14 +26,36 @@ RadioStationPrivate::RadioStationPrivate( int presetIndex, uint frequency ) { init( presetIndex, frequency ); + + if ( presetIndex == RadioStation::SharedNull ) { + ref = 2; + } } /*! * */ -RadioStationPrivate::RadioStationPrivate( RadioStation::PresetFlag flag ) +RadioStationPrivate::RadioStationPrivate( const RadioStationPrivate& other ) : + QSharedData( other ), + mPresetIndex( other.mPresetIndex ), + mFrequency( other.mFrequency ), + mName( other.mName ), + mRenamedByUser( other.mRenamedByUser ), + mGenre( other.mGenre ), + mUrl( other.mUrl ), + mPiCode( other.mPiCode ), + mType( other.mType ), + mPsType( other.mPsType ), + mRadioText( other.mRadioText ), + mDynamicPsText( other.mDynamicPsText ), + mChangeFlags( other.mChangeFlags ), + mCallSignCheckDone( other.mCallSignCheckDone ), + mLastPsNameChangeTime( other.mLastPsNameChangeTime ) { - init( flag ); + // Protect the shared null preset index to make debugging easier + if ( mPresetIndex == RadioStation::SharedNull ) { + mPresetIndex = RadioStation::Invalid; + } } /*! @@ -48,9 +70,8 @@ */ void RadioStationPrivate::init( int presetIndex, uint frequency ) { - ref = 1; + mPresetIndex = presetIndex; mFrequency = frequency; - mPresetIndex = presetIndex; mRenamedByUser = false; mGenre = -1; mPiCode = -1; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiostationfiltermodel.cpp --- a/radioapp/radiouiengine/src/radiostationfiltermodel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ -/* -* 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: -* -*/ - -#include "radiostationfiltermodel.h" -#include "radiouiengine.h" -#include "radiostationmodel.h" -#include "radiologger.h" - -#include "radiostation.h" // Remove - -/*! - * - */ -RadioStationFilterModel::RadioStationFilterModel( RadioUiEngine& uiEngine, QObject* parent ) : - QSortFilterProxyModel( parent ), - mUiEngine( uiEngine ), - mIsCyclic( false ) -{ - setSourceModel( &mUiEngine.stationModel() ); - setDynamicSortFilter( true ); -} - -/*! - * - */ -RadioStationFilterModel::~RadioStationFilterModel() -{ -} - -/*! - * \reimp - */ -int RadioStationFilterModel::rowCount( const QModelIndex& parent ) const -{ - const int count = QSortFilterProxyModel::rowCount( parent ); - return mIsCyclic ? count * 2 : count; -} - -/*! - * \reimp - */ -QModelIndex RadioStationFilterModel::index( int row, int column, - const QModelIndex &parent ) const -{ - const int count = QSortFilterProxyModel::rowCount(); - if ( row < count ) { - return QSortFilterProxyModel::index( row, column, parent ); - } else { - foreach ( const QModelIndex& shadowIndex, mShadowIndexes.keys() ) { - if ( shadowIndex.row() == row ) { - return shadowIndex; - } - } - - return QModelIndex(); - } -} - -/*! - * \reimp - */ -QVariant RadioStationFilterModel::data( const QModelIndex& index, int role ) const -{ - QModelIndex dataIndex = index; - if ( mShadowIndexes.contains( index ) ) { - dataIndex = mShadowIndexes.value( index ); - } - - if ( !index.isValid() || !dataIndex.isValid() ) { - return QVariant(); - } - - return QSortFilterProxyModel::data( dataIndex, role ); -} - -/*! - * - */ -void RadioStationFilterModel::setTypeFilter( RadioStation::Type filter ) -{ - mFilter = filter; - filterChanged(); -} - -/*! - * Returns the model index corresponding to the given frequency - */ -QModelIndex RadioStationFilterModel::modelIndexFromFrequency( uint frequency ) -{ - QModelIndex index = static_cast( sourceModel() )->modelIndexFromFrequency( frequency ); - return mapFromSource( index ); -} - -/*! - * - */ -void RadioStationFilterModel::setCyclic( bool cyclic ) -{ - mIsCyclic = cyclic; - if ( mIsCyclic ) { - const int realCount = QSortFilterProxyModel::rowCount(); - LOG_FORMAT( "Station count: %d", realCount ); - for ( int i = 0; i < realCount; ++i ) { - QModelIndex realIndex = QSortFilterProxyModel::index( i, 0 ); - QModelIndex shadowIndex = createIndex( i + realCount, 0, realIndex.internalPointer() ); - //const uint freq = realIndex.data( RadioStationModel::RadioStationRole ).value().frequency(); -// LOG_FORMAT( "Adding shadow index %d for index %d. Freq: %u", shadowIndex.row(), realIndex.row(), freq ); - mShadowIndexes.insert( shadowIndex, realIndex ); - } - } -} - -/*! - * - */ -bool RadioStationFilterModel::hasLooped( const QModelIndex& index ) const -{ - return mShadowIndexes.contains( index ); -} - -/*! - * - */ -QModelIndex RadioStationFilterModel::realIndex( const QModelIndex& shadowIndex ) const -{ - return mShadowIndexes.value( shadowIndex ); -} - -/*! - * - */ -bool RadioStationFilterModel::isEqual( const QModelIndex& first, const QModelIndex& second ) const -{ - if ( first == second ) { - return true; - } - - QModelIndex realFirst = first; - if ( mShadowIndexes.contains( first ) ) { - realFirst = mShadowIndexes.value( first ); - } - - QModelIndex realSecond = second; - if ( mShadowIndexes.contains( second ) ) { - realSecond = mShadowIndexes.value( second ); - } - - if ( realFirst == realSecond ) { - return true; - } - - return false; -} - -/*! - * - */ -bool RadioStationFilterModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent ) const -{ - QAbstractItemModel* source = sourceModel(); - QModelIndex index = source->index( sourceRow, 0, sourceParent ); - const RadioStation station = source->data( index, RadioStationModel::RadioStationRole ).value(); - const bool isType = station.isType( mFilter ); - return isType; -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiostationmodel.cpp --- a/radioapp/radiouiengine/src/radiostationmodel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiostationmodel.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -18,6 +18,7 @@ // System includes #include +// User includes #include "radiostationmodel.h" #include "radiostationmodel_p.h" #include "radiopresetstorage.h" @@ -62,7 +63,6 @@ */ RadioStationModel::~RadioStationModel() { - delete d_ptr; } /*! @@ -112,7 +112,7 @@ } return firstLine; - } else if ( role == RadioStationModel::RadioStationRole ) { + } else if ( role == RadioRole::RadioStationRole ) { QVariant variant; variant.setValue( stationAt( index.row() ) ); return variant; @@ -129,6 +129,10 @@ list.append( d->mNowPlayingIcon ); } return list; + } else if ( role == RadioRole::IsFavoriteRole ) { + QVariant variant; + variant.setValue( stationAt( index.row() ).isFavorite() ); + return variant; } return QVariant(); @@ -141,7 +145,7 @@ { Q_UNUSED( index ); - if ( role == RadioStationModel::ToggleFavoriteRole ) { + if ( role == RadioRole::ToggleFavoriteRole ) { const uint frequency = value.toUInt(); RadioStation station; if ( findFrequency( frequency, station ) ) { @@ -164,32 +168,25 @@ Q_D( RadioStationModel ); d->mPresetStorage = storage; d->mWrapper = wrapper; - const int presetCount = d->mPresetStorage->presetCount(); + int index = d->mPresetStorage->firstPreset(); - LOG_FORMAT( "RadioStationModelPrivate::initialize: presetCount: %d, firstIndex: %d", presetCount, index ); + LOG_FORMAT( "RadioStationModel::initialize: presetCount: %d, firstIndex: %d", + d->mPresetStorage->presetCount(), index ); -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY while ( index >= 0 ) { -#else - index = 0; - while ( index < presetCount ) { -#endif // COMPILE_WITH_NEW_PRESET_UTILITY + RadioStation station; - RadioStation station; - station.detach(); - - RadioStationIf* preset = static_cast( station.data_ptr() ); - if ( d->mPresetStorage->readPreset( index, *preset ) ) { - if ( station.isValid() ) { + RadioStationIf* stationInterface = static_cast( station.data_ptr() ); + if ( d->mPresetStorage->readPreset( index, *stationInterface ) ) { + if ( station.isValid() && d->mWrapper->isFrequencyValid( station.frequency() ) ) { d->mStations.insert( station.frequency(), station ); } else { - LOG( "RadioStationModelPrivate::initialize: Invalid station!" ); + LOG( "RadioStationModel::initialize: Invalid station!" ); + LOG_FORMAT( "Invalid station freq: %d", station.frequency() ); } } -#ifdef COMPILE_WITH_NEW_PRESET_UTILITY index = d->mPresetStorage->nextPreset( index ); -#endif } d->setCurrentStation( d->mWrapper->currentFrequency() ); @@ -233,7 +230,7 @@ // Get the value from the keys list instead of directly accessing the values list // because QMap may have added a default-constructed value to the values list Q_D( const RadioStationModel ); - if ( index < d->mStations.keys().count() ) { + if ( index >= 0 && index < d->mStations.keys().count() ) { uint frequency = d->mStations.keys().at( index ); return d->mStations.value( frequency ); } @@ -243,9 +240,15 @@ /*! * Finds a station by frequency */ -bool RadioStationModel::findFrequency( uint frequency, RadioStation& station ) +bool RadioStationModel::findFrequency( uint frequency, RadioStation& station, FindCriteria::Criteria criteria ) const { - Q_D( RadioStationModel ); + Q_D( const RadioStationModel ); + + if ( criteria == FindCriteria::IncludeManualStation && d->mCurrentStation->frequency() == frequency ) { + station = *d->mCurrentStation; + return true; + } + if ( d->mStations.contains( frequency ) ) { station = d->mStations.value( frequency ); return true; @@ -254,6 +257,16 @@ } /*! + * Convenience function to find a radio station. + */ +RadioStation RadioStationModel::findStation( uint frequency, FindCriteria::Criteria criteria ) const +{ + RadioStation station; + findFrequency( frequency, station, criteria ); // Return value ignored + return station; +} + +/*! * Finds a station by preset index */ int RadioStationModel::findPresetIndex( int presetIndex ) @@ -293,6 +306,10 @@ const bool findNext = mode == StationSkip::Next || mode == StationSkip::NextFavorite; QList list = findFavorite ? d->favorites() : d->mStations.values(); + if ( list.isEmpty() ) { + return RadioStation(); + } + // Find the previous and next station from current frequency RadioStation previous; RadioStation next; @@ -320,6 +337,15 @@ } /*! + * Checks if the model contains the given frequency + */ +bool RadioStationModel::contains( const uint frequency ) const +{ + RadioStation unused; + return findFrequency( frequency, unused ); +} + +/*! * Removes a station by frequency */ void RadioStationModel::removeByFrequency( uint frequency ) @@ -361,7 +387,7 @@ // Copy the station to a temporary variable that can be used as signal parameter RadioStation tempStation = station; - const int row = modelIndexFromFrequency( tempStation.frequency() ).row(); + const int row = indexFromFrequency( tempStation.frequency() ); beginRemoveRows( QModelIndex(), row, row ); d->mPresetStorage->deletePreset( tempStation.presetIndex() ); @@ -414,8 +440,6 @@ } } } - - reset(); // TODO: Remove. this is a workaround to HbGridView update problem } /*! @@ -425,11 +449,11 @@ { Q_D( RadioStationModel ); const int newIndex = findUnusedPresetIndex(); - LOG_FORMAT( "RadioStationModelPrivate::addStation: Adding station to index %d", newIndex ); + LOG_FORMAT( "RadioStationModel::addStation: Adding station to index %d", newIndex ); RadioStation newStation = station; newStation.setPresetIndex( newIndex ); - newStation.unsetType( RadioStation::Temporary ); + newStation.unsetType( RadioStation::ManualStation ); // We have to call beginInsertRows() BEFORE the addition is actually done so we must figure out where // the new station will go in the sorted frequency order @@ -449,7 +473,6 @@ } } -// emit layoutAboutToBeChanged(); beginInsertRows( QModelIndex(), row, row ); d->doSaveStation( newStation ); @@ -458,7 +481,10 @@ endInsertRows(); -// emit layoutChanged(); + // Not all UI components listen to rowsInserted() signal so emit the favorite signal + if ( newStation.isFavorite() ) { + emit favoriteChanged( *d->mCurrentStation ); + } } /*! @@ -471,8 +497,9 @@ RadioStation::Change changeFlags = station.changeFlags(); station.resetChangeFlags(); - if ( station.isType( RadioStation::Temporary ) ) { + if ( station.isType( RadioStation::ManualStation ) ) { + d->mManualStation = station; emitChangeSignals( station, changeFlags ); } else if ( station.isValid() && stationHasChanged && d->mStations.contains( station.frequency() )) { @@ -501,7 +528,7 @@ { Q_D( RadioStationModel ); if ( d->mWrapper->isFrequencyValid( frequency ) ) { - LOG_FORMAT( "RadioStationModelPrivate::setFavoriteByFrequency, frequency: %d", frequency ); + LOG_FORMAT( "RadioStationModel::setFavoriteByFrequency, frequency: %d", frequency ); RadioStation station; if ( findFrequency( frequency, station ) ) { // Update existing preset if ( station.isFavorite() != favorite ) { @@ -519,11 +546,6 @@ newStation.setType( RadioStation::LocalStation | RadioStation::Favorite ); - // If PI code has been received, it is a local station - if ( newStation.hasPiCode() ) { - newStation.setType( RadioStation::LocalStation ); - } - // Emit the signals only after adding the preset and reinitializing the current station // because the UI will probably query the current station in its slots that get called. addStation( newStation ); @@ -536,7 +558,7 @@ */ void RadioStationModel::setFavoriteByPreset( int presetIndex, bool favorite ) { - LOG_FORMAT( "RadioStationModelPrivate::setFavoriteByPreset, presetIndex: %d", presetIndex ); + LOG_FORMAT( "RadioStationModel::setFavoriteByPreset, presetIndex: %d", presetIndex ); RadioStation station; if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound ) { station.setFavorite( favorite ); @@ -549,7 +571,7 @@ */ void RadioStationModel::renameStation( int presetIndex, const QString& name ) { - LOG_FORMAT( "RadioStationModelPrivate::renameStation, presetIndex: %d, name: %s", presetIndex, GETSTRING(name) ); + LOG_FORMAT( "RadioStationModel::renameStation, presetIndex: %d, name: %s", presetIndex, GETSTRING(name) ); RadioStation station; if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound ) { station.setUserDefinedName( name ); @@ -615,13 +637,13 @@ /*! * Returns the model index corresponding to the given frequency */ -QModelIndex RadioStationModel::modelIndexFromFrequency( uint frequency ) +int RadioStationModel::indexFromFrequency( uint frequency ) { RadioStation station; if ( findFrequency( frequency, station ) ) { - return index( findPresetIndex( station.presetIndex() ), 0 ); + return findPresetIndex( station.presetIndex() ); } - return QModelIndex(); + return -1; } /*! @@ -706,21 +728,6 @@ // Nothing to do here } - LOG_FORMAT( "RadioStationModelPrivate::findUnusedPresetIndex, index: %d", index ); + LOG_FORMAT( "RadioStationModel::findUnusedPresetIndex, index: %d", index ); return index; } - -/*! - * Used by the RDS data setters to find the correct station where the data is set - */ -RadioStation RadioStationModel::findCurrentStation( uint frequency ) -{ - Q_D( RadioStationModel ); - RadioStation station = *d->mCurrentStation; - if ( station.frequency() != frequency ) { - if ( !findFrequency( frequency, station ) ) { - return RadioStation(); - } - } - return station; -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiostationmodel_p.cpp --- a/radioapp/radiouiengine/src/radiostationmodel_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiostationmodel_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -34,7 +34,7 @@ /** * Timeout period for checking if station is sending dynamic PS in milliseconds */ -const int KDynamicPsCheckTimeout = 10 * 1000; +const int DYNAMIC_PS_CHECK_TIMEOUT = 10 * 1000; /*! * @@ -46,9 +46,10 @@ mCurrentStation( &mManualStation ), mDynamicPsTimer( new QTimer() ) { - connectAndTest( mDynamicPsTimer.data(), SIGNAL(timeout()), + mManualStation.setType( RadioStation::ManualStation ); + Radio::connect( mDynamicPsTimer.data(), SIGNAL(timeout()), q_ptr, SLOT(dynamicPsCheckEnded()) ); - mDynamicPsTimer->setInterval( KDynamicPsCheckTimeout ); + mDynamicPsTimer->setInterval( DYNAMIC_PS_CHECK_TIMEOUT ); mDynamicPsTimer->setSingleShot( true ); } @@ -89,6 +90,7 @@ mCurrentStation = &mStations[ frequency ]; } else { mManualStation.reset(); + mManualStation.setType( RadioStation::ManualStation ); mManualStation.setFrequency( frequency ); mCurrentStation = &mManualStation; } @@ -96,6 +98,7 @@ Q_Q( RadioStationModel ); if ( oldStation && oldStation->isValid() ) { q->emitDataChanged( *oldStation ); + q->emitDataChanged( *mCurrentStation ); } } @@ -106,7 +109,7 @@ void RadioStationModelPrivate::setCurrentGenre( uint frequency, int genre ) { Q_Q( RadioStationModel ); - RadioStation station = q->findCurrentStation( frequency ); + RadioStation station = q->findStation( frequency, FindCriteria::IncludeManualStation ); if ( !station.isValid() ) { LOG( "Unable to find current station. Ignoring RDS" ); return; @@ -190,7 +193,7 @@ { Q_Q( RadioStationModel ); LOG_FORMAT( "void RadioStationModelPrivate::setCurrentPsName: %s", GETSTRING( name ) ); - RadioStation station = q->findCurrentStation( frequency ); + RadioStation station = q->findStation( frequency, FindCriteria::IncludeManualStation ); if ( !station.isValid() ) { LOG( "Unable to find current station. Ignoring RDS" ); return; @@ -251,7 +254,7 @@ void RadioStationModelPrivate::setCurrentRadioText( uint frequency, const QString& radioText ) { Q_Q( RadioStationModel ); - RadioStation station = q->findCurrentStation( frequency ); + RadioStation station = q->findStation( frequency, FindCriteria::IncludeManualStation ); if ( !station.isValid() ) { LOG( "Unable to find current station. Ignoring RDS" ); return; @@ -268,7 +271,7 @@ void RadioStationModelPrivate::setCurrentRadioTextPlus( uint frequency, int rtClass, const QString& rtItem ) { Q_Q( RadioStationModel ); - RadioStation station = q->findCurrentStation( frequency ); + RadioStation station = q->findStation( frequency, FindCriteria::IncludeManualStation ); if ( !station.isValid() ) { LOG( "Unable to find current station. Ignoring RDS" ); return; @@ -285,7 +288,7 @@ void RadioStationModelPrivate::setCurrentPiCode( uint frequency, int piCode ) { Q_Q( RadioStationModel ); - RadioStation station = q->findCurrentStation( frequency ); + RadioStation station = q->findStation( frequency, FindCriteria::IncludeManualStation ); if ( !station.isValid() ) { LOG( "Unable to find current station. Ignoring RDS" ); return; @@ -310,6 +313,7 @@ if ( persistentSave ) { const bool success = mPresetStorage->savePreset( *station.data_ptr() ); RADIO_ASSERT( success, "RadioStationModelPrivate::saveStation", "Failed to add station" ); + Q_UNUSED( success ); } } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiouiengine.cpp --- a/radioapp/radiouiengine/src/radiouiengine.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiouiengine.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -19,163 +19,109 @@ #include #include #include +#include +#include +#include #ifdef BUILD_WIN32 # include #else -# include # include -using namespace QtMobility; #endif // WIN32_BUILD // User includes #include "radiouiengine.h" #include "radiouiengine_p.h" -#include "radiologger.h" #include "radioenginewrapper.h" #include "radiostationmodel.h" #include "radiohistorymodel.h" -#include "radiocarouselmodel.h" #include "radiohistoryitem.h" #include "radiosettings.h" -#include "radiostationfiltermodel.h" #include "radioscannerengine.h" +#include "radiogenrelocalizer.h" +#include "radiologger.h" // Constants -const QString KPathFormatter = "%1:%2%3"; -const QString KApplicationDir = "\\sys\\bin\\"; -const QString KSongRecognitionApp = "Shazam_0x200265B3.exe"; -const QString KSongRecognitionAppParams = "-listen"; - -const uint DEFAULT_MIN_FREQUENCY = 87500000; -const uint RADIO_CENREP_UID = 0x101FF976; -const uint RADIO_CENREP_FREQUENCY_KEY = 0x00000107; - -struct GenreStruct -{ - int mGenreCode; - const char* mInCarousel; - const char* mInStationsList; - const char* mInHomeScreen; -}; +const uint RADIO_CENREP_UID = 0x2002FF52; +const uint RADIO_CENREP_FREQUENCY_KEY = 0x207; +const uint RADIO_CENREP_HEADSET_VOLUME = 0x200; -const GenreStruct EuropeanGenres[] = -{ - { GenreEurope::RdsNone, "", "", "" } - ,{ GenreEurope::RdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" } - ,{ GenreEurope::RdsCurrentAffairs, "txt_rad_info_current_affairs", "txt_rad_dblist_l1_mhz_val_current_affairs", "txt_rad_info_current_affairs_hs" } - ,{ GenreEurope::RdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" } - ,{ GenreEurope::RdsSport, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" } - ,{ GenreEurope::RdsEducation, "txt_rad_info_education", "txt_rad_dblist_l1_mhz_val_education", "txt_rad_info_education_hs" } - ,{ GenreEurope::RdsDrama, "txt_rad_info_drama", "txt_rad_dblist_l1_mhz_val_drama", "txt_rad_info_drama_hs" } - ,{ GenreEurope::RdsCulture, "txt_rad_info_culture", "txt_rad_dblist_l1_mhz_val_culture", "txt_rad_info_culture_hs" } - ,{ GenreEurope::RdsScience, "txt_rad_info_science", "txt_rad_dblist_l1_mhz_val_science", "txt_rad_info_science_hs" } - ,{ GenreEurope::RdsVariedSpeech, "txt_rad_info_varied", "txt_rad_dblist_l1_mhz_val_varied", "txt_rad_info_varied_hs" } - ,{ GenreEurope::RdsPopMusic, "txt_rad_info_pop_music", "txt_rad_dblist_l1_mhz_val_pop_music", "txt_rad_info_pop_music_hs" } - ,{ GenreEurope::RdsRockMusic, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" } - ,{ GenreEurope::RdsEasyListening, "txt_rad_info_easy_listening", "txt_rad_dblist_l1_mhz_val_easy_listening", "txt_rad_info_easy_listening_hs" } - ,{ GenreEurope::RdsLightClassical, "txt_rad_info_light_classical", "txt_rad_dblist_l1_mhz_val_light_classical", "txt_rad_info_light_classical_hs" } - ,{ GenreEurope::RdsSeriousClassical, "txt_rad_info_serious_classical", "txt_rad_dblist_l1_mhz_val_serious_classical", "txt_rad_info_serious_classical_hs" } - ,{ GenreEurope::RdsOtherMusic, "txt_rad_info_other_music", "txt_rad_dblist_l1_mhz_val_other_music", "txt_rad_info_other_music_hs" } - ,{ GenreEurope::RdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" } - ,{ GenreEurope::RdsFinance, "txt_rad_info_finance", "txt_rad_dblist_l1_mhz_val_finance", "txt_rad_info_finance_hs" } - ,{ GenreEurope::RdsChildrensProgrammes, "txt_rad_info_childrens_programmes", "txt_rad_dblist_l1_mhz_val_childrens_programmes", "txt_rad_info_childrens_programmes_hs" } - ,{ GenreEurope::RdsSocialAffairs, "txt_rad_info_social_affairs", "txt_rad_dblist_l1_mhz_val_social_affairs", "txt_rad_info_social_affairs_hs" } - ,{ GenreEurope::RdsReligion, "txt_rad_info_religion", "txt_rad_dblist_l1_mhz_val_religion", "txt_rad_info_religion_hs" } - ,{ GenreEurope::RdsPhoneIn, "txt_rad_info_phone_in", "txt_rad_dblist_l1_mhz_val_phone_in", "txt_rad_info_phone_in_hs" } - ,{ GenreEurope::RdsTravel, "txt_rad_info_travel", "txt_rad_dblist_l1_mhz_val_travel", "txt_rad_info_travel_hs" } - ,{ GenreEurope::RdsLeisure, "txt_rad_info_leisure", "txt_rad_dblist_l1_mhz_val_leisure", "txt_rad_info_leisure_hs" } - ,{ GenreEurope::RdsJazzMusic, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" } - ,{ GenreEurope::RdsCountryMusic, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" } - ,{ GenreEurope::RdsNationalMusic, "txt_rad_info_national_music", "txt_rad_dblist_l1_mhz_val_national_music", "txt_rad_info_national_music_hs" } - ,{ GenreEurope::RdsOldiesMusic, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" } - ,{ GenreEurope::RdsFolkMusic, "txt_rad_info_folk_music", "txt_rad_dblist_l1_mhz_val_folk_music", "txt_rad_info_folk_music_hs" } - ,{ GenreEurope::RdsDocumentary, "txt_rad_info_documentary", "txt_rad_dblist_l1_mhz_val_documentary", "txt_rad_info_documentary_hs" } - ,{ GenreEurope::RdsAlarmTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" } - ,{ GenreEurope::RdsAlarm, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" } -}; -const int EuropeanGenresCount = sizeof( EuropeanGenres ) / sizeof ( EuropeanGenres[0] ); +const QLatin1String OVI_STORE_URL( "http://www.music.nokia.co.uk/Touch/Search.aspx?artistsearch=#artist#&titlesearch=#title#" ); +const QLatin1String OTHER_STORE_URL( "http://www.amazon.com/gp/search/ref=sr_adv_m_digital/?search-alias=digital-music&field-author=#artist#&field-title=#title#" ); +const QLatin1String OTHER_STORE_ARTIST_TAG( "#artist#" ); +const QLatin1String OTHER_STORE_TITLE_TAG( "#title#" ); +const char WHITESPACE = ' '; +const char WHITESPACE_REPLACEMENT = '+'; -const GenreStruct AmericanGenres[] = -{ - { GenreAmerica::RbdsNone, "", "", "" } - ,{ GenreAmerica::RbdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" } - ,{ GenreAmerica::RbdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" } - ,{ GenreAmerica::RbdsSports, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" } - ,{ GenreAmerica::RbdsTalk, "txt_rad_info_talk", "txt_rad_dblist_l1_mhz_val_talk", "txt_rad_info_talk_hs" } - ,{ GenreAmerica::RbdsRock, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" } //TODO: Check - ,{ GenreAmerica::RbdsClassicRock, "txt_rad_info_classic_rock", "txt_rad_dblist_l1_mhz_val_classic_rock", "txt_rad_info_classic_rock_hs" } - ,{ GenreAmerica::RbdsAdultHits, "txt_rad_info_adult_hits", "txt_rad_dblist_l1_mhz_val_adult_hits", "txt_rad_info_adult_hits_hs" } - ,{ GenreAmerica::RbdsSoftRock, "txt_rad_info_soft_rock", "txt_rad_dblist_l1_mhz_val_soft_rock", "txt_rad_info_soft_rock_hs" } - ,{ GenreAmerica::RbdsTop40, "txt_rad_info_top_40", "txt_rad_dblist_l1_mhz_val_top_40", "txt_rad_info_top_40_hs" } - ,{ GenreAmerica::RbdsCountry, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" } //TODO: Check - ,{ GenreAmerica::RbdsOldies, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" } //TODO: Check - ,{ GenreAmerica::RbdsSoft, "txt_rad_info_soft", "txt_rad_dblist_l1_mhz_val_soft", "txt_rad_info_soft_hs" } - ,{ GenreAmerica::RbdsNostalgia, "txt_rad_info_nostalgia", "txt_rad_dblist_l1_mhz_val_nostalgia", "txt_rad_info_nostalgia_hs" } - ,{ GenreAmerica::RbdsJazz, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" } //TODO: Check - ,{ GenreAmerica::RbdsClassical, "txt_rad_info_classical", "txt_rad_dblist_l1_mhz_val_classical", "txt_rad_info_classical_hs" } - ,{ GenreAmerica::RbdsRhythmAndBlues, "txt_rad_info_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_rhythm_and_blues", "txt_rad_info_rhythm_and_blues_hs" } - ,{ GenreAmerica::RbdsSoftRhythmAndBlues, "txt_rad_info_soft_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_soft_rhythm_and_blues", "txt_rad_info_soft_rhythm_and_blues_hs" } - ,{ GenreAmerica::RbdsLanguage, "txt_rad_info_language", "txt_rad_dblist_l1_mhz_val_language", "txt_rad_info_language_hs" } - ,{ GenreAmerica::RbdsReligiousMusic, "txt_rad_info_religious_music", "txt_rad_dblist_l1_mhz_val_religious_music", "txt_rad_info_religious_music_hs" } - ,{ GenreAmerica::RbdsReligiousTalk, "txt_rad_info_religious_talk", "txt_rad_dblist_l1_mhz_val_religious_talk", "txt_rad_info_religious_talk_hs" } - ,{ GenreAmerica::RbdsPersonality, "txt_rad_info_personality", "txt_rad_dblist_l1_mhz_val_personality", "txt_rad_info_personality_hs" } - ,{ GenreAmerica::RbdsPublic, "txt_rad_info_public", "txt_rad_dblist_l1_mhz_val_public", "txt_rad_info_public_hs" } - ,{ GenreAmerica::RbdsCollege, "txt_rad_info_college", "txt_rad_dblist_l1_mhz_val_college", "txt_rad_info_college_hs" } - ,{ GenreAmerica::RbdsUnassigned1, "", "", "" } - ,{ GenreAmerica::RbdsUnassigned2, "", "", "" } - ,{ GenreAmerica::RbdsUnassigned3, "", "", "" } - ,{ GenreAmerica::RbdsUnassigned4, "", "", "" } - ,{ GenreAmerica::RbdsUnassigned5, "", "", "" } - ,{ GenreAmerica::RbdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" }//TODO: Check - ,{ GenreAmerica::RbdsEmergencyTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }//TODO: Check - ,{ GenreAmerica::RbdsEmergency, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }//TODO: Check -}; -const int AmericanGenresCount = sizeof( AmericanGenres ) / sizeof ( AmericanGenres[0] ); +// Constants used when launching radio server +const QLatin1String RADIO_SERVER_NAME( "radioserver.exe" ); +const QLatin1String RADIO_RANGE_USEURO( "useuro" ); +const QLatin1String RADIO_RANGE_JAPAN( "japan" ); + +// ====== STATIC FUNCTIONS ======== /*! - * + * Gets the last tuned frequency from central repository */ -bool RadioUiEngine::isOfflineProfile() +uint RadioUiEngine::lastTunedFrequency( uint defaultFrequency ) { - bool offline = false; - -#ifdef BUILD_WIN32 - QScopedPointer settings( new QSettings( "Nokia", "QtFmRadio" ) ); - offline = settings->value( "Offline", false ).toBool(); -#else - QSystemDeviceInfo deviceInfo; - if ( deviceInfo.currentProfile() == QSystemDeviceInfo::OfflineProfile ) { - offline = true; - } -#endif - - return offline; -} - -/*! - * - */ -uint RadioUiEngine::lastTunedFrequency() -{ - uint frequency = DEFAULT_MIN_FREQUENCY; + uint frequency = defaultFrequency; #ifdef BUILD_WIN32 QScopedPointer settings( new QSettings( "Nokia", "QtFmRadio" ) ); frequency = settings->value( "CurrentFreq", DEFAULT_MIN_FREQUENCY ).toUInt(); if ( frequency == 0 ) { - frequency = DEFAULT_MIN_FREQUENCY; + frequency = defaultFrequency; } #else QScopedPointer settings( new XQSettingsManager() ); XQSettingsKey key( XQSettingsKey::TargetCentralRepository, RADIO_CENREP_UID, RADIO_CENREP_FREQUENCY_KEY ); frequency = settings->readItemValue( key, XQSettingsManager::TypeInt ).toUInt(); + if ( frequency == 0 ) { + frequency = defaultFrequency; + } #endif return frequency; } /*! + * Gets the last used volume level + */ +int RadioUiEngine::lastVolume() +{ + int volume = DEFAULT_VOLUME_LEVEL; + +#ifndef BUILD_WIN32 + QScopedPointer settings( new XQSettingsManager() ); + XQSettingsKey key( XQSettingsKey::TargetCentralRepository, RADIO_CENREP_UID, RADIO_CENREP_HEADSET_VOLUME ); + volume = settings->readItemValue( key, XQSettingsManager::TypeInt ).toInt(); + if ( volume == 0 ) { + volume = DEFAULT_VOLUME_LEVEL; + } +#endif + + return volume; +} + +/*! + * Launches the radio server process + */ +void RadioUiEngine::launchRadioServer() +{ + QStringList args; + args << RADIO_RANGE_USEURO; //TODO: Determine current region + args << QString::number( lastTunedFrequency( 0 ) ); + args << QString::number( lastVolume() ); + + QProcess serverProcess; + bool success = serverProcess.startDetached( RADIO_SERVER_NAME, args ); + LOG_ASSERT( success, LOG( "Failed to start radio server!" ) ); +} + +// ====== MEMBER FUNCTIONS ======== + +/*! * */ RadioUiEngine::RadioUiEngine( QObject* parent ) : @@ -189,7 +135,6 @@ */ RadioUiEngine::~RadioUiEngine() { - delete d_ptr; } /*! @@ -220,6 +165,60 @@ } /*! + * + */ +void RadioUiEngine::setFirstTimeStartPerformed( bool firstTimeStartPerformed ) +{ + Q_D( RadioUiEngine ); + d->mEngineWrapper->settings().setFirstTimeStartPerformed( firstTimeStartPerformed ); +} + +/*! + * + */ +void RadioUiEngine::setPowerOn() +{ + setMute( false ); + + Q_D( RadioUiEngine ); + if ( d->mPowerOffTimer ) { + d->mPowerOffTimer->stop(); + d->mPowerOffTimer->deleteLater(); + d->mPowerOffTimer = NULL; + } +} + +/*! + * + */ +void RadioUiEngine::setPowerOff( int delay ) +{ + Q_D( RadioUiEngine ); + d->mEngineWrapper->setMute( true, false ); + + if ( delay > 0 ) { + if ( !d->mPowerOffTimer ) { + d->mPowerOffTimer = new QTimer( this ); + Radio::connect( d->mPowerOffTimer, SIGNAL(timeout()), + this, SIGNAL(powerOffRequested()) ); + } + + d->mPowerOffTimer->start( delay ); + } else { + emit powerOffRequested(); + } +} + +/*! + * + */ +bool RadioUiEngine::isPoweringOff() const +{ + Q_D( const RadioUiEngine ); + return d->mPowerOffTimer && d->mPowerOffTimer->isActive(); +} + +/*! * Returns the settings handler owned by the engine */ RadioSettingsIf& RadioUiEngine::settings() @@ -247,24 +246,22 @@ } /*! - * Creates a new filter model + * Creates a scanner engine and returns a pointer to it + * The returned pointer is wrapped inside a QScopedPointer to ensure this won't + * leak memory. The returned engine will be deleted even if the caller ignored + * the return value. */ -RadioStationFilterModel* RadioUiEngine::createNewFilterModel( QObject* parent ) -{ - return new RadioStationFilterModel( *this, parent ); -} - -/*! - * Creates a new carousel model - */ -RadioCarouselModel* RadioUiEngine::carouselModel() +RadioScannerEnginePtr RadioUiEngine::createScannerEngine() { Q_D( RadioUiEngine ); - if ( !d->mCarouselModel ) { - d->mCarouselModel.reset( new RadioCarouselModel( *this, *d->mStationModel ) ); - } +#if defined BUILD_WIN32 || defined __WINS__ + Q_ASSERT_X( !d->mScannerEngine, "RadioUiEngine::createScannerEngine", "Previous scanner instance not freed" ); +#endif - return d->mCarouselModel.data(); + RadioScannerEnginePtr enginePtr( new RadioScannerEngine( *d ) ); + d->mScannerEngine = enginePtr; + + return enginePtr; } /*! @@ -273,10 +270,7 @@ RadioScannerEngine* RadioUiEngine::scannerEngine() { Q_D( RadioUiEngine ); - if ( !d->mScannerEngine ) { - d->mScannerEngine = new RadioScannerEngine( *d ); - } - return d->mScannerEngine; + return d->mScannerEngine.data(); } /*! @@ -295,7 +289,7 @@ { Q_D( const RadioUiEngine ); if ( d->mScannerEngine ) { - return d->mScannerEngine->isScanning(); + return d->mScannerEngine.data()->isScanning(); } return false; } @@ -395,24 +389,7 @@ */ QString RadioUiEngine::genreToString( int genre, GenreTarget::Target target ) { - RadioRegion::Region currentRegion = region(); - - const GenreStruct* genreArray = currentRegion == RadioRegion::America ? AmericanGenres : EuropeanGenres; - const int genreCount = currentRegion == RadioRegion::America ? AmericanGenresCount : EuropeanGenresCount; - - for( int i = 0; i < genreCount; ++i ) { - if ( genreArray[i].mGenreCode == genre ) { - if ( target == GenreTarget::Carousel ) { - return qtTrId( genreArray[i].mInCarousel ); - } else if ( target == GenreTarget::StationsList ) { - return qtTrId( genreArray[i].mInStationsList ); - } else if ( target == GenreTarget::HomeScreen ) { - return qtTrId( genreArray[i].mInHomeScreen ); - } - } - } - - return ""; + return RadioGenreLocalizer::genreToString( region(), genre, target ); } /*! @@ -420,28 +397,8 @@ */ bool RadioUiEngine::isSongRecognitionAppAvailable() { - //TODO: Check if there is a better way to check if an application is available - bool available = false; - - // Check the Z: drive - QString fullPath = QString( KPathFormatter ).arg( "Z" ).arg( KApplicationDir ).arg( KSongRecognitionApp ); - available = QFile::exists( fullPath ); - - LOG_FORMAT( "Checking file: %s. found %d", GETSTRING( fullPath ), available ); - - if ( !available ) { - // Check the C: drive - fullPath = QString( KPathFormatter ).arg( "C" ).arg( KApplicationDir ).arg( KSongRecognitionApp ); - available = QFile::exists( fullPath ); - LOG_FORMAT( "Checking file: %s. found %d", GETSTRING( fullPath ), available ); - if ( !available ) { - // Check the E: drive - fullPath = QString( KPathFormatter ).arg( "E" ).arg( KApplicationDir ).arg( KSongRecognitionApp ); - available = QFile::exists( fullPath ); - LOG_FORMAT( "Checking file: %s. found %d", GETSTRING( fullPath ), available ); - } - } - return available; + //TODO: Implement Shazam support + return false; } /*! @@ -467,54 +424,54 @@ */ void RadioUiEngine::openMusicStore( const RadioHistoryItem& item, MusicStore store ) { - Q_UNUSED( item ); - Q_UNUSED( store ); - //TODO: Integrate to music store + QString artist = item.artist(); + artist.replace( WHITESPACE, WHITESPACE_REPLACEMENT ); + QString title = item.title(); + title.replace( WHITESPACE, WHITESPACE_REPLACEMENT ); + + QString url = store == OviStore ? OVI_STORE_URL : OTHER_STORE_URL; + url.replace( OTHER_STORE_ARTIST_TAG, artist ); + url.replace( OTHER_STORE_TITLE_TAG, title ); + + launchBrowser( url ); +} + +/*! + * + */ +void RadioUiEngine::launchBrowser( const QString& url ) +{ + QDesktopServices::openUrl( QUrl( url ) ); } /*! - * Public slot - * Tunes to the given frequency + * Sets or unsets the engine to manual seek mode + */ +void RadioUiEngine::setManualSeekMode( bool manualSeek ) +{ + Q_D( RadioUiEngine ); + d->mEngineWrapper->setManualSeekMode( manualSeek ); +} + +/*! + * Checks if the engine is in manual seek mode */ -void RadioUiEngine::tuneFrequency( uint frequency, const int reason ) +bool RadioUiEngine::isInManualSeekMode() const +{ + Q_D( const RadioUiEngine ); + return d->mEngineWrapper->isInManualSeekMode(); +} + +/*! + * Tunes the radio engine to given frequency + */ +void RadioUiEngine::setFrequency( uint frequency, const int reason ) { Q_D( RadioUiEngine ); if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) { LOG_FORMAT( "RadioUiEngine::tuneFrequency, frequency: %d", frequency ); d->cancelSeeking(); - d->mEngineWrapper->tuneFrequency( frequency, reason ); - } -} - -/*! - * Public slot - * Tunes to the given frequency after a delay - */ -void RadioUiEngine::tuneWithDelay( uint frequency, const int reason ) -{ - Q_D( RadioUiEngine ); - if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) { - LOG_FORMAT( "RadioEngineWrapperPrivate::tuneWithDelay, frequency: %d", frequency ); - d->cancelSeeking(); - d->mEngineWrapper->tuneWithDelay( frequency, reason ); - } -} - -/*! - * Public slot - * Tunes to the given preset - */ -void RadioUiEngine::tunePreset( int presetIndex ) -{ - Q_D( RadioUiEngine ); - if ( presetIndex != d->mStationModel->currentStation().presetIndex() ) { - RadioStation station; - if ( d->mStationModel->findPresetIndex( presetIndex, station ) != RadioStation::NotFound && - d->mEngineWrapper->isFrequencyValid( station.frequency() ) ) { - LOG_FORMAT( "RadioEngineWrapperPrivate::tunePreset, presetIndexPosition: %d", presetIndex ); - - d->mEngineWrapper->tuneFrequency( station.frequency(), TuneReason::Unspecified ); - } + d->mEngineWrapper->setFrequency( frequency, reason ); } } @@ -558,7 +515,7 @@ { if ( isAntennaAttached() ) { Q_D( RadioUiEngine ); - Seeking::Direction direction = static_cast( seekDirection ); + Seek::Direction direction = static_cast( seekDirection ); emitSeekingStarted( direction ); d->mEngineWrapper->startSeeking( direction, TuneReason::Seek ); } @@ -570,14 +527,7 @@ */ void RadioUiEngine::launchSongRecognition() { - LOG_FORMAT("RadioUiEngine::launchSongRecognition() starting: %s", GETSTRING( KSongRecognitionApp ) ); - - QStringList arguments; - arguments << KSongRecognitionAppParams; - - bool started = QProcess::startDetached( KSongRecognitionApp, arguments ); - Q_UNUSED( started ); - LOG_ASSERT( started, LOG_FORMAT("RadioUiEngine::launchSongRecognition() failed to start %s", GETSTRING( KSongRecognitionApp ) ) ); + //TODO: Implement Shazam support } /*! @@ -591,7 +541,7 @@ /*! * Function used by the private implementation to emit a seekingStarted signal */ -void RadioUiEngine::emitSeekingStarted( Seeking::Direction direction ) +void RadioUiEngine::emitSeekingStarted( Seek::Direction direction ) { emit seekingStarted( direction ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/src/radiouiengine_p.cpp --- a/radioapp/radiouiengine/src/radiouiengine_p.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/src/radiouiengine_p.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -32,18 +32,13 @@ #include "radiostationmodel.h" #include "radiostationmodel_p.h" #include "radiohistorymodel.h" -#include "radiocarouselmodel.h" #include "radiopresetstorage.h" #include "radiosettings.h" #include "radiostation.h" #include "radioscannerengine.h" #include "radiostationhandlerif.h" -#ifndef BUILD_WIN32 -# include "radiocontrolservice.h" -# include "radiomonitorservice.h" -#else -# include "radiomonitorservice_win32.h" -#endif +#include "radiocontrolservice.h" +#include "radiomonitorservice.h" #include "radioservicedef.h" #include "radiologger.h" @@ -51,7 +46,8 @@ * */ RadioUiEnginePrivate::RadioUiEnginePrivate( RadioUiEngine* engine ) : - q_ptr( engine ) + q_ptr( engine ), + mPowerOffTimer( NULL ) { } @@ -65,7 +61,7 @@ XQPublishAndSubscribeUtils utils( settingsManager ); XQPublishAndSubscribeSettingsKey radioStartupKey( KRadioPSUid, KRadioStartupKey ); bool deleted = utils.deleteProperty( radioStartupKey ); - LOG_ASSERT( deleted, LOG( "RadioUiEnginePrivate::~RadioUiEnginePrivate(). Failed to delete P&S key" ) ); + LOG_ASSERT( deleted, LOG( "RadioUiEnginePrivate::~RadioUiEnginePrivate(). Failed to remove P&S key" ) ); #endif } @@ -83,13 +79,16 @@ */ bool RadioUiEnginePrivate::init() { -#ifndef BUILD_WIN32 mControlService.reset( new RadioControlService( *q_ptr ) ); -#endif mMonitorService.reset( new RadioMonitorService( *this ) ); mStationModel.reset( new RadioStationModel( *this ) ); + mEngineWrapper.reset( new RadioEngineWrapper( mStationModel->stationHandlerIf() ) ); + if ( !mEngineWrapper->init() ) { + return false; + } mEngineWrapper->addObserver( this ); + mPresetStorage.reset( new RadioPresetStorage() ); mStationModel->initialize( mPresetStorage.data(), mEngineWrapper.data() ); mHistoryModel.reset( new RadioHistoryModel( *q_ptr ) ); @@ -107,7 +106,7 @@ mMonitorService->init(); - return mEngineWrapper->isEngineConstructed(); + return true; } /*! @@ -142,33 +141,6 @@ { Q_Q( RadioUiEngine ); q->emitRadioStatusChanged( radioIsOn ); - - if ( radioIsOn ) { - Q_Q( RadioUiEngine ); - QStringList args; // = qApp->arguments(); - if ( args.count() == 2 ) - { - if ( args.at( 0 ) == "-f" ) // Frequency - { - uint frequency = args.at( 1 ).toUInt(); - - if ( frequency >= mEngineWrapper->minFrequency() && frequency <= mEngineWrapper->maxFrequency() ) - { - LOG_FORMAT( "RadioApplication::handleArguments, Tuning to frequency: %d", frequency ); - q->tuneFrequency( frequency, 0 ); - } - } - else if ( args.at( 0 ) == "-i" ) // Preset index - { - int preset = args.at( 1 ).toInt(); - if ( preset > 0 && preset < mStationModel->rowCount() ) - { - LOG_FORMAT( "RadioApplication::handleArguments, Tuning to preset %d", preset ); - q->tunePreset( preset ); - } - } - } - } } /*! @@ -183,6 +155,32 @@ /*! * */ +void RadioUiEnginePrivate::increaseVolume() +{ + Q_Q( RadioUiEngine ); + if( q->isScanning() ){ + // volume not changed while scanning + } else { + mEngineWrapper->increaseVolume(); + } +} + +/*! + * + */ +void RadioUiEnginePrivate::decreaseVolume() +{ + Q_Q( RadioUiEngine ); + if( q->isScanning() ) { + // volume not changed while scanning + } else { + mEngineWrapper->decreaseVolume(); + } +} + +/*! + * + */ void RadioUiEnginePrivate::volumeChanged( int volume ) { Q_Q( RadioUiEngine ); @@ -221,7 +219,7 @@ */ void RadioUiEnginePrivate::skipPrevious() { - skip( StationSkip::PreviousFavorite ); + skip( StationSkip::PreviousFavorite, 0, TuneReason::SkipFromEngine ); } /*! @@ -229,23 +227,36 @@ */ void RadioUiEnginePrivate::skipNext() { - skip( StationSkip::NextFavorite ); + skip( StationSkip::NextFavorite, 0, TuneReason::SkipFromEngine ); } /*! * Tunes to next or previous station */ -uint RadioUiEnginePrivate::skip( StationSkip::Mode mode, uint startFrequency ) +uint RadioUiEnginePrivate::skip( StationSkip::Mode mode, uint startFrequency, const int reason ) { LOG_FORMAT( "RadioUiEnginePrivate::skip: mode: %d", mode ); if ( startFrequency == 0 ) { startFrequency = mEngineWrapper->currentFrequency(); } - const uint newFrequency = mStationModel->findClosest( startFrequency, mode ).frequency(); + const int favoriteCount = mStationModel->favoriteCount(); + if ( favoriteCount < 2 ) { + if ( mode == StationSkip::NextFavorite ) { + mode = StationSkip::Next; + } else if ( mode == StationSkip::PreviousFavorite ) { + mode = StationSkip::Previous; + } + } - LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", startFrequency, newFrequency ); - mEngineWrapper->tuneFrequency( newFrequency, TuneReason::Skip ); - return newFrequency; + const RadioStation station = mStationModel->findClosest( startFrequency, mode ); + if ( station.isValid() ) { + const uint newFrequency = station.frequency(); + + LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", startFrequency, newFrequency ); + mEngineWrapper->setFrequency( newFrequency, reason ); + return newFrequency; + } + return startFrequency; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/tsrc/inc/t_radiostation.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/tsrc/src/t_radiostation.cpp --- a/radioapp/radiouiengine/tsrc/src/t_radiostation.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/tsrc/src/t_radiostation.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -27,7 +27,7 @@ #include "radiohistorymodel.h" #include "radioenginewrapper.h" #include "radiouiengine.h" -#include "radiologger.h" //connectAndTest +#include "radiologger.h" //Radio::connect // Constants const uint KTestFrequency1 = 89000000; @@ -180,19 +180,19 @@ mRadioStationModel->removeAll(); //ASSERT: \"last >= first\" in file qabstractitemmodel.cpp, line 2110 } - connectAndTest( mRadioStationModel, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), + Radio::connect( mRadioStationModel, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), this, SLOT(dataChanged(const QModelIndex, const QModelIndex)) ); - connectAndTest( mRadioStationModel, SIGNAL(stationAdded(RadioStation)), + Radio::connect( mRadioStationModel, SIGNAL(stationAdded(RadioStation)), this, SLOT(stationAdded(RadioStation)) ); - connectAndTest( mRadioStationModel, SIGNAL(stationDataChanged(RadioStation)), + Radio::connect( mRadioStationModel, SIGNAL(stationDataChanged(RadioStation)), this, SLOT(stationDataChanged(RadioStation)) ); - connectAndTest( mRadioStationModel, SIGNAL(favoriteChanged(RadioStation)), + Radio::connect( mRadioStationModel, SIGNAL(favoriteChanged(RadioStation)), this, SLOT(favoriteChanged(RadioStation)) ); - connectAndTest( mhistoryModel, SIGNAL(itemAdded()), + Radio::connect( mhistoryModel, SIGNAL(itemAdded()), this, SLOT(itemAdded()) ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiouiengine/tsrc/t_radiouiengine.pro --- a/radioapp/radiouiengine/tsrc/t_radiouiengine.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiouiengine/tsrc/t_radiouiengine.pro Thu Jul 22 16:33:45 2010 +0100 @@ -22,6 +22,7 @@ symbian: { TARGET.CAPABILITY = CAP_GENERAL_DLL TARGET.SID = 0x101FF976 # Old visual radio uid + MMP_RULES += SMPSAFE } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiobannerlabel.h --- a/radioapp/radiowidgets/inc/radiobannerlabel.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOBANNERLABEL_H_ -#define RADIOBANNERLABEL_H_ - -// System includes -#include - -// User includes -#include "radiowidgetsexport.h" - -class WIDGETS_DLL_EXPORT RadioBannerLabel : public HbLabel -{ - Q_OBJECT - -public: - - RadioBannerLabel( QGraphicsItem * parent = 0 ); - -private: - -// from base class QGraphicsItem - - void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ); - -}; - -#endif // RADIOBANNERLABEL_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiocarouselanimator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/inc/radiocarouselanimator.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,87 @@ +/* +* 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: +* +*/ + +#ifndef RADIOCAROUSELANIMATOR_H +#define RADIOCAROUSELANIMATOR_H + +// System includes +#include + +// User includes + +// Forward declarations +class RadioStationCarousel; +class QTimeLine; +class QTimer; + +// Class declaration +class RadioCarouselAnimator : public QObject +{ + Q_OBJECT + + enum AnimationFlag + { + NoAnimation = 0, + ScrollingNumbers = 1 << 0, + TimerItem = 1 << 1, + IconItem = 1 << 2, + TextItem = 1 << 3, + + FlashingIcon = TimerItem | IconItem, + FlashingText = TimerItem | TextItem + }; + Q_DECLARE_FLAGS( AnimationMode, AnimationFlag ) + +public: + + RadioCarouselAnimator( RadioStationCarousel& carousel ); + ~RadioCarouselAnimator(); + + void startNumberScroll( const uint startFrequency, const uint stopFrequency ); + + void startFlashingIcon(); + void stopFlashingIcon(); + + void startFlashingText(); + void stopFlashingText(); + + void stopAll(); + +private slots: + + void handleTimeout(); + void updateNumberScroll( int value ); + void finalizeNumberScroll(); + +private: + + void addMode( AnimationMode mode ); + void removeMode( AnimationMode mode ); + +private: + + RadioStationCarousel& mCarousel; + QTimeLine* mAnimationTimeLine; + QTimer* mTimer; + bool mCanceled; + AnimationMode mMode; + bool mStationIsFavorite; + bool mFlashingToggle; + +}; + +#endif // RADIOCAROUSELANIMATOR_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiocarouselitem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/inc/radiocarouselitem.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,131 @@ +/* +* 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: +* +*/ + +#ifndef RADIOCAROUSELITEM_H +#define RADIOCAROUSELITEM_H + +// System includes +#include +#include + +// User includes + +// Forward declarations +class RadioStation; +class HbIconItem; +class HbTextItem; +class HbRichTextItem; +class HbTouchArea; +class RadioCarouselItemObserver; + +// Class declaration +class RadioCarouselItem : public HbWidget +{ + Q_OBJECT + Q_PROPERTY(Appearance appearance READ appearance WRITE setAppearance) + Q_ENUMS(Appearance) + + friend class RadioStationCarousel; + +public: + + enum ItemFlag + { + NameVisible = 1 << 0, + FavoriteVisible = 1 << 1, + FavoriteTouchable = 1 << 2, + GenreVisible = 1 << 3, + RadiotextVisible = 1 << 4, + RadiotextTouchable = 1 << 5, + UrlVisible = 1 << 6, + UrlTouchable = 1 << 7, + + LastFlagMarker = 1 << 8, // Keep this as the last flag + + DefaultFlags = NameVisible | FavoriteVisible | FavoriteTouchable | GenreVisible | RadiotextVisible, + ManualSeekFlags = NameVisible + }; + Q_DECLARE_FLAGS( CarouselItemFlags, ItemFlag ) + + enum Appearance { Default, Full, ManualSeek }; + + RadioCarouselItem( RadioCarouselItemObserver& observer, QGraphicsItem* parent, bool registerCss = false ); + ~RadioCarouselItem(); + +// New functions + + void setAppearance( Appearance appearance ); + Appearance appearance() const; + + void setSeekLayout( bool seekLayout ); + + void setStation( const RadioStation& station ); + + uint frequency() const; + void update( const RadioStation* station = NULL ); + void setFrequency( uint frequency ); + void cleanRdsData(); + void setRadioText( const QString& text ); + + enum ItemVisibility{ AllVisible, AllHidden, IconVisible }; + void setItemVisibility( ItemVisibility visibility ); + + void setIconOpacity( qreal opacity ); + + void createPrimitives(); + + void drawOffScreen( QPainter& painter ); + +public slots: + + void updatePrimitives(); + +private: + + void gestureEvent( QGestureEvent* event ); + + void setFlags( CarouselItemFlags flags ); + void clearFlags( CarouselItemFlags flags ); + + void updateVisibilities(); + + void updateFavoriteIcon( bool isFavorite ); + + void updateLayout(); + +private: // data + + RadioCarouselItemObserver& mObserver; + + QScopedPointer mStation; + + HbIconItem* mFavoriteItem; + HbTextItem* mGenreItem; + HbTouchArea* mFavoriteTouchArea; + HbTextItem* mNameItem; + HbRichTextItem* mRadiotextItem; + HbTextItem* mUrlItem; + + Appearance mAppearance; + bool mOwnsCss; + CarouselItemFlags mFlags; + +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS( RadioCarouselItem::CarouselItemFlags ) + +#endif // RADIOCAROUSELITEM_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiocarouselitemobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/inc/radiocarouselitemobserver.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: +* +*/ + +#ifndef RADIOCAROUSELITEMOBSERVER_H +#define RADIOCAROUSELITEMOBSERVER_H + +class RadioStation; +class QString; +class HbIcon; + +class RadioCarouselItemObserver +{ +public: + + virtual void handleIconClicked( const RadioStation& station ) = 0; + virtual void handleRadiotextClicked( const RadioStation& station ) = 0; + virtual void handleUrlClicked( const RadioStation& station ) = 0; + virtual QString localizeGenre( int genre ) = 0; + virtual bool isInManualSeek() const = 0; + virtual HbIcon favoriteIcon() const = 0; + virtual HbIcon nonFavoriteIcon() const = 0; + virtual RadioStation findStation( uint frequency ) = 0; + +}; + +#endif // RADIOCAROUSELITEMOBSERVER_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiofadinglabel.h --- a/radioapp/radiowidgets/inc/radiofadinglabel.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiofadinglabel.h Thu Jul 22 16:33:45 2010 +0100 @@ -25,7 +25,7 @@ // User includes #include "radiowidgetsexport.h" -class WIDGETS_DLL_EXPORT RadioFadingLabel : public HbLabel //TODO: Derive from HbLineEdit +class WIDGETS_DLL_EXPORT RadioFadingLabel : public HbLabel { Q_OBJECT diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiofrequencyitem.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiofrequencyscanner.h --- a/radioapp/radiowidgets/inc/radiofrequencyscanner.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiofrequencyscanner.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,7 +20,7 @@ // System includes #include -#include +#include // Forward declarations class HbProgressDialog; @@ -73,19 +73,21 @@ bool mInMainView; - QScopedPointer mScannerEngine; + QSharedPointer mScannerEngine; /** * Scanning progress note * Own. */ - QScopedPointer mScanningProgressNote; + QWeakPointer mScanningProgressNote; int mStripScrollTime; int mCarouselScrollTime; bool mIsAlive; + bool mUserCanceled; + }; #endif // RADIOPRESETSCANNER_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiofrequencystrip.h --- a/radioapp/radiowidgets/inc/radiofrequencystrip.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiofrequencystrip.h Thu Jul 22 16:33:45 2010 +0100 @@ -21,7 +21,6 @@ // System includes #include #include -#include #include #include @@ -37,13 +36,16 @@ class HbPushButton; class QTimer; class QModelIndex; +class RadioUiLoader; + +typedef QList StationList; // Class declaration class WIDGETS_DLL_EXPORT RadioFrequencyStrip : public RadioStripBase { Q_OBJECT - Q_PROPERTY( HbIcon leftButtonIcon READ leftButtonIcon WRITE setLeftButtonIcon ) - Q_PROPERTY( HbIcon rightButtonIcon READ rightButtonIcon WRITE setRightButtonIcon ) + Q_PROPERTY(int itemHeight READ itemHeight WRITE setItemHeight) + Q_PROPERTY(uint frequency READ frequency) friend class RadioFrequencyItem; @@ -51,38 +53,43 @@ RadioFrequencyStrip(); - void setLeftButtonIcon( const HbIcon& leftButtonIcon ); - HbIcon leftButtonIcon() const; + void setItemHeight( int itemHeight ); + int itemHeight() const; + + void init( RadioUiEngine* engine, RadioUiLoader& uiLoader ); - void setRightButtonIcon( const HbIcon& rightButtonIcon ); - HbIcon rightButtonIcon() const; + void setFrequency( const uint frequency, int reason, Scroll::Direction direction = Scroll::Shortest ); + uint frequency() const; - void init( RadioUiEngine* engine ); + bool isInManualSeekMode() const; + void cancelManualSeek(); - void setFrequency( const uint frequency, int reason = 0 ); - uint frequency() const; + void addScannedStation( const RadioStation& station ); + + void updateFavorite( const RadioStation& station ); public slots: - void updateFavorite( const RadioStation& station ); void setScanningMode( bool isScanning ); signals: - void frequencyChanged( uint frequency, int reason ); // reason is always CommandSender::RadioFrequencyStrip + void frequencyChanged( uint frequency, int reason, int direction ); void skipRequested( int skipMode ); void seekRequested( int seekDirection ); + void manualSeekChanged( bool manualSeek ); private slots: + void removeStation( const QModelIndex& parent, int first, int last ); void updateStation( const QModelIndex& parent, int first, int last ); void initEmptyItems(); void handleLeftButton(); void handleLongLeftButton(); void handleRightButton(); void handleLongRightButton(); - void toggleButtons(); - void checkIllegalPos(); + void toggleManualSeek(); + void handleScrollingEnd(); private: @@ -90,12 +97,12 @@ void updateItemPrimitive( QGraphicsItem* itemToUpdate, int itemIndex ); QGraphicsItem* createItemPrimitive( QGraphicsItem *parent ); - void scrollPosChanged( QPointF newPosition ); + void scrollPosChanged(); // from base class QGraphicsWidget void resizeEvent ( QGraphicsSceneResizeEvent* event ); - void showEvent( QShowEvent* event ); +// void showEvent( QShowEvent* event ); void changeEvent( QEvent* event ); // from base class HbScrollArea @@ -104,6 +111,10 @@ void mouseReleaseEvent( QGraphicsSceneMouseEvent* event ); void gestureEvent( QGestureEvent* event ); +// from base class QObject + + void timerEvent( QTimerEvent* event ); + // New functions void initModel(); @@ -116,17 +127,24 @@ void addFrequencyPos( int pos, uint frequency, RadioFrequencyItem* item ); - void updateFavorites( RadioFrequencyItem* item ); + void updateStationsInRange( int first, int last, bool stationRemoved = false ); - void updateItems(); + void updateItem( RadioFrequencyItem* item, uint upperRange = 0, uint ignoredFrequency = 0 ); + + void updateAllItems(); QPixmap drawPixmap( uint frequency, QList stations, RadioFrequencyItem* item ); + QLineF makeTab( qreal pos, int height ); + void emitFrequencyChanged( uint frequency ); int selectorPos() const; - void scrollToFrequency( uint frequency, int time = 0 ); + void scrollToFrequency( uint frequency, + Scroll::Direction direction = Scroll::Shortest, + int time = 0, + TuneReason::Reason reason = TuneReason::Unspecified ); void hideButtons(); void showButtons(); @@ -151,6 +169,8 @@ RadioUiEngine* mUiEngine; + int mItemHeight; + uint mMinFrequency; uint mMaxFrequency; @@ -184,18 +204,17 @@ */ QHash mPositions; - HbIcon mLeftButtonIcon; - - HbIcon mRightButtonIcon; - HbPushButton* mLeftButton; HbPushButton* mRightButton; - QTimer* mButtonTimer; - bool mButtonsVisible; + QTimer* mManualSeekTimer; + + bool mManualSeekMode; - bool mUserIsScrolling; + uint mLastReportedFrequency; + + int mManualSeekTimerId; QColor mForegroundColor; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiohistoryview.h --- a/radioapp/radiowidgets/inc/radiohistoryview.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiohistoryview.h Thu Jul 22 16:33:45 2010 +0100 @@ -24,7 +24,6 @@ // User includes #include "radioviewbase.h" -#include "radiowidgetsexport.h" // Forward declarations class RadioXmlUiLoader; @@ -35,7 +34,7 @@ class RadioHistoryItem; // Class declaration -class WIDGETS_DLL_EXPORT RadioHistoryView : public RadioViewBase +class RadioHistoryView : public RadioViewBase { Q_OBJECT Q_PROPERTY(HbIcon nonTaggedIcon READ nonTaggedIcon WRITE setNonTaggedIcon) @@ -54,10 +53,11 @@ private slots: - void deckButtonPressed(); + void updateViewMode(); void clearList(); void updateVisibilities(); void showContextMenu( const QModelIndex& index ); + void handleLongPress( HbAbstractViewItem* item ); void toggleTagging(); void openOviStore(); void openOtherStore(); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiomainview.h --- a/radioapp/radiowidgets/inc/radiomainview.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiomainview.h Thu Jul 22 16:33:45 2010 +0100 @@ -23,7 +23,6 @@ // User includes #include "radioviewbase.h" -#include "radiowidgetsexport.h" // Forward declarations class RadioWindow; @@ -33,9 +32,10 @@ class RadioFrequencyScanner; class RadioStationCarousel; class RadioFrequencyStrip; +class RadioStation; // Class declaration -class WIDGETS_DLL_EXPORT RadioMainView : public RadioViewBase +class RadioMainView : public RadioViewBase { Q_OBJECT @@ -46,29 +46,54 @@ void setScanningMode( bool scanning ); +signals: + + void applicationReady(); + private slots: - void setFrequencyFromWidget( uint frequency, int reason ); + void setFrequencyFromWidget( uint frequency, int reason, int direction ); void setFrequencyFromEngine( uint frequency, int reason ); void skip( int skipMode ); + void openStationsView(); void toggleScanning(); + void toggleFavorite(); void seekingStarted(); + void updateAntennaStatus( bool connected ); void updateAudioRoute( bool loudspeaker ); + void setManualSeekMode( bool manualSeekActive ); + void handleFavoriteChange( const RadioStation& station ); + void saveActivity(); + + void toggleSkippingMode(); //TODO: Remove. Temporary test code + void resetFirstTimeCount(); //TODO: Remove. Temporary test code private: // from base class RadioViewBase + void preLazyLoadInit(); void init(); void setOrientation(); void userAccepted(); +// from base class QObject + + bool eventFilter( QObject* watched, QEvent* event ); + +// New functions + + void updateFavoriteButton(); + private: // data QScopedPointer mFrequencyScanner; RadioStationCarousel* mCarousel; RadioFrequencyStrip* mFrequencyStrip; + HbAction* mSkippingAction; //TODO: Remove. Temporary test code + bool mAlternateSkipping; //TODO: Remove. Temporary test code + }; #endif // RADIOMAINVIEW_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiostationcarousel.h --- a/radioapp/radiowidgets/inc/radiostationcarousel.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiostationcarousel.h Thu Jul 22 16:33:45 2010 +0100 @@ -19,25 +19,25 @@ #define RADIOSTATIONCAROUSEL_H // System includes -#include -#include -#include +#include #include +#include // User includes +#include "radiocarouselitemobserver.h" #include "radiowidgetsexport.h" #include "radio_global.h" // Forward declarations class RadioUiEngine; class RadioUiLoader; +class RadioCarouselItem; class RadioStation; -class RadioStationItem; +class RadioStationModel; class RadioStationCarousel; -class RadioCarouselModel; -class RadioFadingLabel; -class QTimeLine; +class RadioCarouselAnimator; class HbLabel; +class HbMenu; namespace CarouselInfoText { @@ -46,61 +46,40 @@ None, ConnectAntenna, NoFavorites, + FavoriteIconHint, Seeking, - Scanning + Scanning, + ManualSeek }; } // Class declaration -class ScanningHelper : public QObject -{ - Q_OBJECT - -public: - - ScanningHelper( RadioStationCarousel& carousel ); - - void start(); - -private slots: - - void startSlide(); - void startNumberScroll(); - void numberScrollUpdate( int value ); - -public: - - RadioStationCarousel& mCarousel; - uint mCurrentFrequency; - uint mPreviousFrequency; - RadioStationItem* mStationItem; - QTimeLine* mNumberScrollingTimeLine; - QModelIndex mModelIndex; - -}; - -// Class declaration -class WIDGETS_DLL_EXPORT RadioStationCarousel : public HbGridView +class WIDGETS_DLL_EXPORT RadioStationCarousel : public HbScrollArea + , public RadioCarouselItemObserver { Q_OBJECT Q_PROPERTY(HbIcon favoriteIcon READ favoriteIcon WRITE setFavoriteIcon) Q_PROPERTY(HbIcon nonFavoriteIcon READ nonFavoriteIcon WRITE setNonFavoriteIcon) Q_PROPERTY( int autoScrollTime READ autoScrollTime WRITE setAutoScrollTime ) - friend class ScanningHelper; + friend class RadioCarouselAnimator; + friend class RadioCarouselItem; public: enum ScrollFlag { - Default = 0, - NoAnim = 1 << 0, - NoSignal = 1 << 1, - UpdateItem = 1 << 2 + Default = 0, + NoAnim = 1 << 0, + NoSignal = 1 << 1, + IgnoreCenter = 1 << 2, + UpdateItem = 1 << 3, + FromPanGesture = 1 << 4, + FromSwipeGesture = 1 << 5 }; Q_DECLARE_FLAGS( ScrollMode, ScrollFlag ) - RadioStationCarousel( RadioUiEngine* uiEngine = 0 ); + RadioStationCarousel( QGraphicsItem* parent = 0 ); void setFavoriteIcon( const HbIcon& favoriteIcon ); HbIcon favoriteIcon() const; @@ -113,9 +92,7 @@ void init( RadioUiLoader& uiLoader, RadioUiEngine* uiEngine ); - void setCarouselModel( RadioCarouselModel* carouselModel ); - - void setFrequency( uint frequency, int reason ); + void setFrequency( uint frequency, int reason, Scroll::Direction direction = Scroll::Shortest ); RadioUiEngine* uiEngine(); @@ -126,18 +103,22 @@ void cleanRdsData(); - void updateCurrentItem(); - void animateNewStation( const RadioStation& station ); - - void setItemVisible( bool visible ); + void cancelAnimation(); void setInfoText( CarouselInfoText::Type type ); void clearInfoText(); + void setManualSeekMode( bool manualSeekActive ); + + void drawOffScreen( QPainter& painter ); + + void setAlternateSkippingMode( bool alternateSkipping ); //TODO: Remove this! This is test code + signals: - void frequencyChanged( uint frequency, int reason ); + void frequencyChanged( uint frequency, int reason, int direction ); + void skipRequested( int skipMode ); void scanAnimationFinished(); public slots: @@ -146,14 +127,12 @@ private slots: + void scrollPosChanged( const QPointF& newPosition ); + void adjustAfterScroll(); void update( const RadioStation& station ); void updateRadioText( const RadioStation& station ); - void insertFrequency( const QModelIndex& parent, int first, int last ); - void prepareToRemoveFrequency( const QModelIndex& parent, int first, int last ); - void removeFrequency( const QModelIndex& parent, int first, int last ); - void updateFrequencies(); + void updateStations(); void timerFired(); - void openContextMenu( HbAbstractViewItem* item, const QPointF& coords ); #ifdef USE_DEBUGGING_CONTROLS void setRdsAvailable( bool available ); @@ -164,59 +143,89 @@ // from base class QGraphicsItem void mousePressEvent( QGraphicsSceneMouseEvent* event ); + void resizeEvent( QGraphicsSceneResizeEvent* event ); + void showEvent( QShowEvent* event ); + void gestureEvent( QGestureEvent* event ); - void gestureEvent( QGestureEvent* event ); +// from base class RadioCarouselItemObserver + + void handleIconClicked( const RadioStation& station ); + void handleRadiotextClicked( const RadioStation& station ); + void handleUrlClicked( const RadioStation& station ); + QString localizeGenre( int genre ); + bool isInManualSeek() const; + RadioStation findStation( uint frequency ); // New functions - void initToLastTunedFrequency(); + bool isInitialized() const; + + void setCenterIndex( int index, ScrollMode mode = Default ); - void updateClampingStyle(); + void scrollToIndex( int index, Scroll::Direction direction = Scroll::Shortest, + ScrollMode mode = Default ); - void initCurrentStationItem(); + int calculateDifference( int targetIndex, Scroll::Direction& direction ); - RadioStationItem* currentStationItem(); + bool isScrollingAllowed() const; - RadioCarouselModel* carouselModel() const; + void adjustPos( int offset ); - void scrollToIndex( const QModelIndex& index, ScrollMode mode = Default ); + int trimIndex( int index ); - void updatePos( int offset ); + int prevIndex( int index ); + int nextIndex( int index ); void skip( StationSkip::Mode mode ); private: // data - enum TimerMode { NoTimer, RtPlusCheck, InfoText }; + enum TimerMode { NoTimer, SetFrequency, RtPlusCheck, InfoText, FavoriteHintShow, FavoriteHintHide }; + + RadioUiEngine* mUiEngine; - RadioUiEngine* mUiEngine; + int mAutoScrollTime; - bool mAntennaAttached; + HbIcon mFavoriteIcon; + HbIcon mNonFavoriteIcon; - int mAutoScrollTime; + QTimer* mGenericTimer; + TimerMode mTimerMode; + + QString mRadioTextHolder; - QMap mModelIndexes; + QWeakPointer mAnimator; + + HbLabel* mInfoText; - HbIcon mFavoriteIcon; - HbIcon mNonFavoriteIcon; + HbMenu* mRadiotextPopup; + + HbWidget* mContainer; - QTimer* mGenericTimer; - TimerMode mTimerMode; + enum CarouselItem { LeftItem, CenterItem, RightItem }; + RadioCarouselItem* mItems[3]; + + int mMidScrollPos; + int mMaxScrollPos; - QString mRadioTextHolder; + int mCurrentIndex; + int mTargetIndex; + bool mIsCustomFreq; - ScanningHelper* mScanningHelper; - - HbLabel* mInfoText; + CarouselInfoText::Type mInfoTextType; - RadioStationItem* mCurrentItem; + RadioStationModel* mModel; - CarouselInfoText::Type mInfoTextType; + bool mPosAdjustmentDisabled; + + Scroll::Direction mScrollDirection; - int mPanStartPos; - + bool mManualSeekMode; + + bool mAlternateSkipping; + #ifdef USE_DEBUGGING_CONTROLS - RadioFadingLabel* mRdsLabel; + RadioFadingLabel* mRdsLabel; #endif }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiostationitem.h --- a/radioapp/radiowidgets/inc/radiostationitem.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOSTATIONITEM_H -#define RADIOSTATIONITEM_H - -// System includes -#include - -// Forward declarations -class RadioFadingLabel; -class HbPushButton; -class RadioStation; -class HbAnchorLayout; -class RadioStationCarousel; - -// Class declaration -class RadioStationItem : public HbAbstractViewItem -{ - Q_OBJECT - friend class RadioStationCarousel; - -public: - - RadioStationItem( RadioStationCarousel& carousel ); - -// From base class HbAbstractViewItem - - HbAbstractViewItem* createItem(); - void updateChildItems(); - -// New functions - - uint frequency() const; - void update( const RadioStation* station = 0 ); - void setFrequency( uint frequency ); - void cleanRdsData(); - void handleLongPress( const QPointF& coords ); - -private slots: - - void toggleFavorite(); - -private: - - void updateFavoriteIcon( bool isFavorite ); - - RadioStationCarousel* carousel(); - - QString parseFrequency( const uint frequency ); - QString nameOrFrequency( const RadioStation& station, uint frequency = 0 ); - -private: // data - - RadioStationCarousel& mCarousel; - HbAnchorLayout* mLayout; - RadioFadingLabel* mNameLabel; - HbPushButton* mIconButton; - RadioFadingLabel* mGenreLabel; - RadioFadingLabel* mRadiotextLabel; - RadioFadingLabel* mUrlLabel; - uint mFrequency; -}; - - -#endif // RADIOSTATIONITEM_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiostationsview.h --- a/radioapp/radiowidgets/inc/radiostationsview.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiostationsview.h Thu Jul 22 16:33:45 2010 +0100 @@ -24,22 +24,21 @@ // User includes #include "radioviewbase.h" -#include "radiowidgetsexport.h" // Forward declarations class RadioWindow; class RadioStationModel; class HbListView; class HbPushButton; -class RadioBannerLabel; class HbAbstractViewItem; class RadioUiLoader; class RadioStation; class RadioStationFilterModel; class RadioFrequencyScanner; +class QSortFilterProxyModel; // Class declaration -class WIDGETS_DLL_EXPORT RadioStationsView : public RadioViewBase +class RadioStationsView : public RadioViewBase { Q_OBJECT Q_PROPERTY(HbIcon nowPlayingIcon READ nowPlayingIcon WRITE setNowPlayingIcon) @@ -58,15 +57,15 @@ private slots: - void listItemClicked( const QModelIndex& index ); - void listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords ); + void handleClick( const QModelIndex& index ); + void handleLongPress( HbAbstractViewItem* item, const QPointF& coords ); void updateAntennaStatus( bool connected ); - void updateCurrentStation(); - void deckButtonPressed(); + void updateViewMode(); void startScanning(); void finishScanning(); - void updateControlVisibilities(); + void updateVisibilities(); void clearList(); + void play(); // Called from context menu void rename(); // Called from context menu void toggleFavorite(); // Called from context menu void deleteStation(); // Called from context menu @@ -79,10 +78,6 @@ void init(); void userAccepted(); -// from base class QGraphicsWidget - - void showEvent( QShowEvent* event ); - // New functions void initListView(); @@ -91,15 +86,13 @@ RadioStationModel* mModel; - RadioStationFilterModel* mFilterModel; + QSortFilterProxyModel* mFilterModel; HbAction* mScanStationsAction; HbAction* mClearListAction; HbListView* mStationsList; - RadioBannerLabel* mHeadingBanner; - HbAction* mFavoritesButton; HbAction* mLocalStationsButton; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiostripbase.h --- a/radioapp/radiowidgets/inc/radiostripbase.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiostripbase.h Thu Jul 22 16:33:45 2010 +0100 @@ -29,7 +29,7 @@ class RadioStripBase : public HbScrollArea { Q_OBJECT - Q_PROPERTY( int autoScrollTime READ autoScrollTime WRITE setAutoScrollTime ) + Q_PROPERTY(int autoScrollTime READ autoScrollTime WRITE setAutoScrollTime) public: @@ -42,7 +42,7 @@ QAbstractItemModel* model() const; void setCyclic( bool isCyclic ); - void setSpacing( qreal spacing ); + void setOverlap( qreal overlap ); void setAutoCenter( bool autoCenter ); void setItemSize( const QSizeF& size ); void setIndex( int index, bool animateToCenter ); @@ -60,18 +60,18 @@ void mousePressEvent( QGraphicsSceneMouseEvent* event ); void mouseReleaseEvent( QGraphicsSceneMouseEvent* event ); -private slots: - - void scrollPositionChanged( QPointF newPosition ); - private: Q_DISABLE_COPY( RadioStripBase ) +// from base class HbScrollArea + + bool scrollByAmount( const QPointF& delta ); + virtual void updateItemPrimitive( QGraphicsItem* itemToUpdate, int itemIndex ) = 0; virtual QGraphicsItem* createItemPrimitive( QGraphicsItem *parent ) = 0; - virtual void scrollPosChanged( QPointF newPosition ) = 0; + virtual void scrollPosChanged() = 0; void moveAllItemsToPool(); @@ -104,7 +104,7 @@ bool mIsCyclic; bool mAutoCenter; - qreal mSpacing; + qreal mOverlap; QSizeF mItemSize; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiouiloader.h --- a/radioapp/radiowidgets/inc/radiouiloader.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiouiloader.h Thu Jul 22 16:33:45 2010 +0100 @@ -25,71 +25,87 @@ namespace DOCML { - static QString FILE_MAINVIEW = ":/layout/mainview.docml"; - static QString FILE_STATIONSVIEW = ":/layout/stationsview.docml"; - static QString FILE_HISTORYVIEW = ":/layout/historyview.docml"; + static const QLatin1String FILE_MAINVIEW ( ":/layout/mainview.docml" ); + static const QLatin1String FILE_STATIONSVIEW ( ":/layout/stationsview.docml" ); + static const QLatin1String FILE_HISTORYVIEW ( ":/layout/historyview.docml" ); // Generic XML UI definitions - static QString NAME_VIEW = "view"; - static QString SECTION_PORTRAIT = "portrait"; - static QString SECTION_LANDSCAPE = "landscape"; - static QString NAME_LOUDSPEAKER_ACTION = "loudspeaker_action"; + static const QLatin1String NAME_VIEW ( "view" ); + static const QLatin1String SECTION_LAZY_LOAD ( "lazy_load" ); + static const QLatin1String SECTION_PORTRAIT ( "portrait" ); + static const QLatin1String SECTION_LANDSCAPE ( "landscape" ); + static const QLatin1String NAME_LOUDSPEAKER_ACTION ( "loudspeaker_action" ); + static const QLatin1String NAME_EXIT_ACTION ( "exit_action" ); // RadioMainView - static QString MV_NAME_HISTORYVIEW_ACTION = "mv:historyview_action"; - static QString MV_NAME_STATION_CAROUSEL = "mv:station_carousel"; - static QString MV_NAME_FREQUENCY_STRIP = "mv:frequency_strip"; - static QString MV_NAME_STATIONS_BUTTON = "mv:stations_button"; - static QString MV_NAME_SCAN_BUTTON = "mv:scan_button"; - static QString MV_NAME_SPEAKER_BUTTON = "mv:loudspeaker_button"; - static QString MV_SECTION_NO_ANTENNA = "mv:no_antenna"; - static QString MV_SECTION_SEEKING = "mv:seeking"; - static QString MV_SECTION_SCANNING = "mv:scanning"; - static QString MV_SECTION_NO_FAVORITES = "mv:no_favorites"; - static QString MV_SECTION_NORMAL = "mv:normal"; + static const QLatin1String MV_NAME_HISTORYVIEW_ACTION ( "mv:historyview_action" ); + static const QLatin1String MV_NAME_CAROUSEL_BACKGROUND ( "mv:carousel_background" ); + static const QLatin1String MV_NAME_CAROUSEL_OVERLAY ( "mv:carousel_overlay" ); + static const QLatin1String MV_NAME_STATION_CAROUSEL ( "mv:station_carousel" ); + static const QLatin1String MV_NAME_FREQUENCY_BACKGROUND ( "mv:frequency_background" ); + static const QLatin1String MV_NAME_FREQUENCY_STRIP ( "mv:frequency_strip" ); + static const QLatin1String MV_NAME_STATIONS_BUTTON ( "mv:stations_button" ); + static const QLatin1String MV_NAME_FAVORITE_BUTTON ( "mv:favorite_button" ); + static const QLatin1String MV_NAME_SPEAKER_BUTTON ( "mv:loudspeaker_button" ); + static const QLatin1String MV_NAME_PREV_BUTTON ( "mv:prev_button" ); + static const QLatin1String MV_NAME_NEXT_BUTTON ( "mv:next_button" ); + static const QLatin1String MV_NAME_SCAN_ACTION ( "mv:scan_action" ); + static const QLatin1String MV_NAME_CAROUSEL_RT_MENU ( "mv:carousel_rt_menu" ); + static const QLatin1String MV_SECTION_NO_ANTENNA ( "mv:no_antenna" ); + static const QLatin1String MV_SECTION_SEEKING ( "mv:seeking" ); + static const QLatin1String MV_SECTION_SCANNING ( "mv:scanning" ); + static const QLatin1String MV_SECTION_NO_FAVORITES ( "mv:no_favorites" ); + static const QLatin1String MV_SECTION_NORMAL ( "mv:normal" ); // RadioStationsView - static QString SV_NAME_HEADING_BANNER = "sv:heading_banner"; - static QString SV_NAME_STATIONS_LIST = "sv:stations_list"; - static QString SV_NAME_FAVORITES_BUTTON = "sv:favorite_stations_button"; - static QString SV_NAME_LOCALS_BUTTON = "sv:local_stations_button"; - static QString SV_NAME_SCAN_ACTION = "sv:scan_action"; - static QString SV_NAME_CLEAR_LIST_ACTION = "sv:clear_list_action"; - static QString SV_NAME_SCAN_BUTTON = "sv:scan_button"; + static const QLatin1String SV_NAME_HEADING_BANNER ( "sv:heading_banner" ); + static const QLatin1String SV_NAME_STATIONS_LIST ( "sv:stations_list" ); + static const QLatin1String SV_NAME_FAVORITES_BUTTON ( "sv:favorite_stations_button" ); + static const QLatin1String SV_NAME_LOCALS_BUTTON ( "sv:local_stations_button" ); + static const QLatin1String SV_NAME_SCAN_ACTION ( "sv:scan_action" ); + static const QLatin1String SV_NAME_CLEAR_LIST_ACTION ( "sv:clear_list_action" ); + static const QLatin1String SV_NAME_SCAN_BUTTON ( "sv:scan_button" ); + static const QLatin1String SV_NAME_PLAY_ACTION ( "sv:play_action" ); + static const QLatin1String SV_NAME_RENAME_ACTION ( "sv:rename_action" ); + static const QLatin1String SV_NAME_FAVORITE_ACTION ( "sv:toggle_favorite_action" ); + static const QLatin1String SV_NAME_DELETE_ACTION ( "sv:delete_action" ); - static QString SV_SECTION_SHOW_ALL_STATIONS = "show_all_stations"; - static QString SV_SECTION_SHOW_FAVORITES = "show_favorites"; - static QString SV_SECTION_SHOW_SCAN_TEXT = "show_scan_text"; - static QString SV_SECTION_HIDE_SCAN_TEXT = "hide_scan_text"; + static const QLatin1String SV_SECTION_SHOW_ALL_STATIONS ( "show_all_stations" ); + static const QLatin1String SV_SECTION_SHOW_FAVORITES ( "show_favorites" ); + static const QLatin1String SV_SECTION_SHOW_SCAN_TEXT ( "show_scan_text" ); + static const QLatin1String SV_SECTION_HIDE_SCAN_TEXT ( "hide_scan_text" ); // RadioStationsView Context Menu - static QString NAME_CONTEXT_MENU = "sv:context_menu"; - static QString NAME_CONTEXT_RENAME = "sv:rename_action"; - static QString NAME_CONTEXT_FAVORITE = "sv:toggle_favorite_action"; - static QString NAME_CONTEXT_DELETE = "sv:delete_action"; - static QString NAME_INPUT_QUERY = "sv:station_name_query"; + static const QLatin1String NAME_CONTEXT_MENU ( "sv:context_menu" ); + static const QLatin1String NAME_CONTEXT_RENAME ( "sv:rename_action" ); + static const QLatin1String NAME_CONTEXT_FAVORITE ( "sv:toggle_favorite_action" ); + static const QLatin1String NAME_CONTEXT_DELETE ( "sv:delete_action" ); + static const QLatin1String NAME_INPUT_QUERY ( "sv:station_name_query" ); // Station Carousel - static QString MV_NAME_INFO_FIRST_ROW = "mv:InfoFirstRow"; - static QString MV_NAME_INFO_SECOND_ROW = "mv:InfoSecondRow"; - static QString MV_NAME_INFO_THIRD_ROW = "mv:InfoThirdRow"; - static QString MV_NAME_INFO_FOURTH_ROW = "mv:InfoFourthRow"; - static QString MV_NAME_INFO_TEXT = "mv:info_text"; + static const QLatin1String MV_NAME_INFO_FIRST_ROW ( "mv:InfoFirstRow" ); + static const QLatin1String MV_NAME_INFO_SECOND_ROW ( "mv:InfoSecondRow" ); + static const QLatin1String MV_NAME_INFO_THIRD_ROW ( "mv:InfoThirdRow" ); + static const QLatin1String MV_NAME_INFO_FOURTH_ROW ( "mv:InfoFourthRow" ); + static const QLatin1String MV_NAME_INFO_TEXT ( "mv:info_text" ); // History View - static QString HV_NAME_CLEAR_LIST_ACTION = "hv:clear_list_action"; - static QString HV_NAME_HISTORY_LIST = "hv:history_list"; - static QString HV_NAME_ALL_SONGS_BUTTON = "hv:all_songs_button"; - static QString HV_NAME_TAGGED_SONGS_BUTTON = "hv:tagged_songs_button"; - static QString HV_SECTION_SHOW_LIST = "hv:show_list"; - static QString HV_SECTION_HIDE_LIST = "hv:hide_list"; - static QString HV_SECTION_HISTORY_MODE = "hv:history_mode"; - static QString HV_SECTION_FAVORITE_MODE = "hv:tagged_mode"; - static QString HV_NAME_CONTEXT_MENU = "hv:context_menu"; + static const QLatin1String HV_NAME_CLEAR_LIST_ACTION ( "hv:clear_list_action" ); + static const QLatin1String HV_NAME_HISTORY_LIST ( "hv:history_list" ); + static const QLatin1String HV_NAME_ALL_SONGS_BUTTON ( "hv:all_songs_button" ); + static const QLatin1String HV_NAME_TAGGED_SONGS_BUTTON ( "hv:tagged_songs_button" ); + static const QLatin1String HV_SECTION_SHOW_LIST ( "hv:show_list" ); + static const QLatin1String HV_SECTION_HIDE_LIST ( "hv:hide_list" ); + static const QLatin1String HV_SECTION_HISTORY_MODE ( "hv:history_mode" ); + static const QLatin1String HV_SECTION_FAVORITE_MODE ( "hv:tagged_mode" ); + static const QLatin1String HV_NAME_CONTEXT_MENU ( "hv:context_menu" ); + static const QLatin1String HV_NAME_TOGGLE_TAG_ACTION ( "hv:toggle_tag_action" ); + static const QLatin1String HV_NAME_OVI_STORE_ACTION ( "hv:ovi_store_action" ); + static const QLatin1String HV_NAME_OTHER_STORE_ACTION ( "hv:other_store_action" ); // History View Context Menu - static QString HV_NAME_CONTEXT_TAG = "hv:toggle_tag_action"; - static QString HV_NAME_CONTEXT_SEARCH = "hv:search_from_other_store_action"; + static const QLatin1String HV_NAME_CONTEXT_TAG ( "hv:toggle_tag_action" ); + static const QLatin1String HV_NAME_CONTEXT_SEARCH ( "hv:search_from_other_store_action" ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiouiutilities.h --- a/radioapp/radiowidgets/inc/radiouiutilities.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef _RADIOUIUTILITIES_H_ -#define _RADIOUIUTILITIES_H_ - -// System includes -#include - -// Forward declarations -class RadioFrequencyStrip; -class RadioStationCarousel; -class RadioFrequencyScanner; - -struct EffectInfo -{ - EffectInfo( QGraphicsItem* item, QString path, QString event ) : - mItem( item ), - mPath( path ), - mEvent( event ) - {} - - QGraphicsItem* mItem; - QString mPath; - QString mEvent; - -private: - EffectInfo(); -}; -typedef QList QEffectList; - -// Class declaration -class RadioUiUtilities -{ -public: - - static bool addEffects( QEffectList list ); - - static RadioFrequencyStrip* frequencyStrip(); - static RadioStationCarousel* carousel(); - static bool isScannerAlive(); - - static void setFrequencyStrip( RadioFrequencyStrip* frequencyStrip ); - static void setCarousel( RadioStationCarousel* carousel ); - static void setFrequencyScanner( RadioFrequencyScanner* scanner ); - -private: - - RadioUiUtilities(); - ~RadioUiUtilities(); - - static RadioUiUtilities& instance(); - -private: // data - - QPointer mFrequencyStrip; - - QPointer mCarousel; - - QPointer mScanner; - -}; - - -#endif // _RADIOUIUTILITIES_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radioutil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/inc/radioutil.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,95 @@ +/* +* 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: +* +*/ + +#ifndef _RADIOUIUTILITIES_H_ +#define _RADIOUIUTILITIES_H_ + +// System includes +#include + +// User includes +#include "radio_global.h" + +// Forward declarations +class RadioFrequencyStrip; +class RadioStationCarousel; +class RadioFrequencyScanner; +class HbNotificationDialog; + +struct EffectInfo +{ + EffectInfo( QGraphicsItem* item, QString path, QString event ) : + mItem( item ), + mPath( path ), + mEvent( event ) + {} + + QGraphicsItem* mItem; + QString mPath; + QString mEvent; + +private: + EffectInfo(); +}; +typedef QList QEffectList; + +// Class declaration +class RadioUtil +{ +public: + + static bool addEffects( QEffectList list ); + + static RadioFrequencyStrip* frequencyStrip(); + static RadioStationCarousel* carousel(); + static bool isScannerAlive(); + static Scan::Status scanStatus(); + + static void setFrequencyStrip( RadioFrequencyStrip* frequencyStrip ); + static void setCarousel( RadioStationCarousel* carousel ); + static void setFrequencyScanner( RadioFrequencyScanner* scanner ); + static void setScanStatus( Scan::Status status ); + + static Scroll::Direction scrollDirectionFromSkipMode( int skipMode ); + static Scroll::Direction scrollDirection( int direction ); + static TuneReason::Reason tuneReason( int tuneReason ); + + static void showDiscreetNote( const QString& text ); + +private: + + RadioUtil(); + ~RadioUtil(); + + static RadioUtil& instance(); + +private: // data + + QWeakPointer mFrequencyStrip; + + QWeakPointer mCarousel; + + QWeakPointer mScanner; + + QWeakPointer mNotificationDialog; + + Scan::Status mScanStatus; + +}; + + +#endif // _RADIOUIUTILITIES_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radioviewbase.h --- a/radioapp/radiowidgets/inc/radioviewbase.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radioviewbase.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,8 +20,8 @@ // System includes #include - #include +#include // User includes @@ -30,13 +30,15 @@ class RadioStationModel; class RadioUiLoader; class HbAction; +class RadioUiEngine; // Constants namespace MenuItem { enum CommonMenuItem { - UseLoudspeaker + UseLoudspeaker, + Exit }; } @@ -51,9 +53,11 @@ virtual ~RadioViewBase(); - void setMembers( RadioUiLoader* uiLoader, RadioWindow* mainWindow ); + void setMembers( RadioWindow* mainWindow, RadioUiLoader* uiLoader ); - virtual void init() = 0; + virtual void preLazyLoadInit(); + + void initialize( QSharedPointer uiEngine ); bool isInitialized() const; @@ -61,6 +65,8 @@ void updateOrientation( Qt::Orientation orientation, bool forceUpdate = false ); + void bringToForeground(); + protected slots: void updateAudioRouting( bool loudspeaker ); @@ -76,10 +82,10 @@ // New functinos void initBackAction(); - + void connectCommonMenuItem( int menuItem ); - void connectXmlElement( const char* name, const char* signal, QObject* receiver, const char* slot ); + void connectXmlElement( const QString& name, const char* signal, QObject* receiver, const char* slot ); void connectViewChangeMenuItem( QString name, const char* slot ); @@ -89,6 +95,8 @@ private: + virtual void init() = 0; + virtual void setOrientation(); virtual void userAccepted(); @@ -106,7 +114,11 @@ */ QScopedPointer mUiLoader; - bool mInitialized; + /** + * Pointer to the ui engine + * Shared among all views and the radio window + */ + QSharedPointer mUiEngine; /** * Flag indicating whether or not the view is transient diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiowidgetsexport.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/inc/radiowindow.h --- a/radioapp/radiowidgets/inc/radiowindow.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/inc/radiowindow.h Thu Jul 22 16:33:45 2010 +0100 @@ -21,8 +21,11 @@ // System includes #include #include -#include +#include #include +#include +#include +using namespace QtMobility; // has to be here to be able to connect SLOT queryOfflineUsage // User includes #include "radiowidgetsexport.h" @@ -31,15 +34,16 @@ class RadioViewBase; class RadioUiEngine; class HbVolumeSliderPopup; +class HbMessageBox; typedef QScopedPointer VolumeSliderPtr; /** - * QPointer is used to store the views because it tracks the deletion of the object and nulls + * QWeakPointer is used to store the views because it tracks the deletion of the object and nulls * the reference. Transient view like RadioHistoryView is destroyed after they are closed - * and QPointer will notice it. + * and QWeakPointer will notice it. */ -typedef QPointer ViewPtr; +typedef QWeakPointer ViewPtr; // Class declaration class WIDGETS_DLL_EXPORT RadioWindow : public HbMainWindow @@ -49,15 +53,13 @@ public: - RadioWindow( QWidget *parent = 0 ); + RadioWindow( QWidget* parent = 0 ); ~RadioWindow(); void showErrorMessage( const QString& text ); - void init(); - - RadioUiEngine& uiEngine(); + void init( QSystemDeviceInfo* deviceInfo ); QString orientationSection(); @@ -75,44 +77,57 @@ void updateOrientation( Qt::Orientation orientation ); void showVolumeLevel( int volume ); void updateAntennaStatus( bool connected ); + void queryOfflineUsage( QSystemDeviceInfo::Profile profile ); private: // New functions - void activateView( ViewPtr& aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags = Hb::ViewSwitchDefault ); + void activateView( RadioViewBase* aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags = Hb::ViewSwitchDefault ); private: // data /*! * Pointer to the UI engine - * Own + * Own, shared with views */ - QScopedPointer mUiEngine; + QSharedPointer mUiEngine; /** * Tuning view. * Own. */ - ViewPtr mMainView; + ViewPtr mMainView; /** * Stations view * Own. */ - ViewPtr mStationsView; + ViewPtr mStationsView; /** * Play history view * Own. */ - ViewPtr mHistoryView; + ViewPtr mHistoryView; /** * Pointer to the volume slider * Own. */ - VolumeSliderPtr mVolSlider; + VolumeSliderPtr mVolSlider; + + /** + * Pointer to messagebox + * Own. + */ + QScopedPointer mMessageBox; + + /** + * Pointer to qsystemdeviceinfo + * Own. + */ + QScopedPointer mDeviceInfo; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/radiowidgets.pro --- a/radioapp/radiowidgets/radiowidgets.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/radiowidgets.pro Thu Jul 22 16:33:45 2010 +0100 @@ -14,27 +14,32 @@ # Description: # +TMP_DIR_NAME = widgets include(../buildflags.pri) TEMPLATE = lib -TARGET = radiowidgets +TARGET = fmradiowidgets CONFIG += dll hb +CONFIG += mobility +MOBILITY = systeminfo DEFINES += BUILD_WIDGETS_DLL +symbian:TARGET.UID3 = 0x2002FF4C + INCLUDEPATH += inc INCLUDEPATH += ../radiouiengine/inc -INCLUDEPATH += ../commoninc +INCLUDEPATH += ../../common -LIBS += -lradiouiengine +LIBS += -lfmradiouiengine -LOGGING_ENABLED:LIBS += -lradioenginewrapper +LOGGING_ENABLED:LIBS += -lfmradioenginewrapper DEPENDPATH += $$INCLUDEPATH src # Input HEADERS += radiowidgetsexport.h HEADERS += radiowindow.h -HEADERS += radiouiutilities.h +HEADERS += radioutil.h HEADERS += radioviewbase.h HEADERS += radiouiloader.h HEADERS += radiomainview.h @@ -42,15 +47,16 @@ HEADERS += radiofrequencystrip.h HEADERS += radiofrequencyitem.h HEADERS += radiostationsview.h -HEADERS += radiobannerlabel.h HEADERS += radiofrequencyscanner.h HEADERS += radiofadinglabel.h HEADERS += radiostationcarousel.h -HEADERS += radiostationitem.h +HEADERS += radiocarouselitem.h +HEADERS += radiocarouselitemobserver.h +HEADERS += radiocarouselanimator.h HEADERS += radiohistoryview.h SOURCES += radiowindow.cpp -SOURCES += radiouiutilities.cpp +SOURCES += radioutil.cpp SOURCES += radioviewbase.cpp SOURCES += radiouiloader.cpp SOURCES += radiomainview.cpp @@ -58,11 +64,11 @@ SOURCES += radiofrequencystrip.cpp SOURCES += radiofrequencyitem.cpp SOURCES += radiostationsview.cpp -SOURCES += radiobannerlabel.cpp SOURCES += radiofrequencyscanner.cpp SOURCES += radiofadinglabel.cpp SOURCES += radiostationcarousel.cpp -SOURCES += radiostationitem.cpp +SOURCES += radiocarouselitem.cpp +SOURCES += radiocarouselanimator.cpp SOURCES += radiohistoryview.cpp RESOURCES += res/fmradioui.qrc diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/effects/blink_in_out_in.fxml --- a/radioapp/radiowidgets/res/effects/blink_in_out_in.fxml Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - 1.0 - - 0.3 - 1.0 - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/fmradioui.qrc --- a/radioapp/radiowidgets/res/fmradioui.qrc Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/res/fmradioui.qrc Thu Jul 22 16:33:45 2010 +0100 @@ -4,12 +4,11 @@ layout/mainview.docml layout/stationsview.docml layout/historyview.docml - layout/radiostationitem.css - layout/radiostationitem.widgetml + layout/radiocarouselitem.css + layout/radiocarouselitem.widgetml - effects/blink_in_out_in.fxml effects/fade_out.fxml effects/fade_in.fxml effects/slide_to_left.fxml @@ -19,24 +18,11 @@ - images/stripbackground.png - images/setfavoriteicon.png - images/nowplayingicon.png - images/qtg_mono_previous.svg - images/qtg_mono_next.svg - images/qtg_mono_radio_stations.svg - images/qtg_mono_station_scan.svg - images/qtg_mono_speaker.svg - images/qtg_mono_speaker_off.svg - images/pri_small_shazam.svg - images/qtg_mono_play_history.svg images/pri_small_star.svg images/pri_small_star_inactive.svg images/qtg_fr_lcd.svg images/qtg_fr_lcd_overlay.svg images/qtg_fr_tuner.svg - images/qtg_mono_tag.svg - images/pri_small_tag.svg diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/nowplayingicon.png Binary file radioapp/radiowidgets/res/images/nowplayingicon.png has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/pri_small_shazam.svg --- a/radioapp/radiowidgets/res/images/pri_small_shazam.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ - - - -]> - - - - - - - - - - - - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/pri_small_star_inactive.svg diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/pri_small_tag.svg --- a/radioapp/radiowidgets/res/images/pri_small_tag.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - -]> - - - - - - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_fr_lcd.svg diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_fr_lcd_overlay.svg diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_fr_tuner.svg diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_next.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_next.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ - - - -]> - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_play_history.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_play_history.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - - - -]> - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_previous.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_previous.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ - - - -]> - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_radio_stations.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_radio_stations.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_speaker.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_speaker.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ - - - -]> - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_speaker_off.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_speaker_off.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ - - - -]> - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_station_scan.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_station_scan.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ - - - -]> - - - - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/qtg_mono_tag.svg --- a/radioapp/radiowidgets/res/images/qtg_mono_tag.svg Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - - - -]> - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/setfavoriteicon.png Binary file radioapp/radiowidgets/res/images/setfavoriteicon.png has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/images/stripbackground.png Binary file radioapp/radiowidgets/res/images/stripbackground.png has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/historyview.docml --- a/radioapp/radiowidgets/res/layout/historyview.docml Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/res/layout/historyview.docml Thu Jul 22 16:33:45 2010 +0100 @@ -14,72 +14,40 @@ + + - + - - + + - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -94,16 +62,56 @@ - - + + - - - - - - - + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
@@ -137,7 +145,7 @@ - +
@@ -151,7 +159,7 @@ - +
diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/mainview.docml --- a/radioapp/radiowidgets/res/layout/mainview.docml Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/res/layout/mainview.docml Thu Jul 22 16:33:45 2010 +0100 @@ -1,152 +1,219 @@ - - - - - - - - - - - + + + - - - - - - + - - - - - - - + + + + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - + + - + + + + + + + + + + + + + + + + + + - -
- - + + +
+ + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + - - - - + + + + + + + + + + + + + +
+ +
- - - - - - - + - - - - + + + + + + + + + + + + + +
+
- + - + + + +
- + - - - + + + + + +
diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/radiocarouselitem.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/res/layout/radiocarouselitem.css Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,125 @@ +RadioCarouselItem +{ + layout: default; +} + +RadioCarouselItem::star_button +{ + top: -var(hb-param-margin-gene-top); + left: -var(hb-param-margin-gene-left); + pref-width: var(hb-param-graphic-size-primary-medium); + pref-height: var(hb-param-graphic-size-primary-medium); + size-policy-horizontal: fixed; + size-policy-vertical: fixed; +} + +RadioCarouselItem::genre_label +{ + top: -var(hb-param-margin-gene-top); + left: -var(hb-param-margin-gene-middle-horizontal); + right: expr(var(hb-param-margin-gene-left) + var(hb-param-graphic-size-primary-medium) + var(hb-param-margin-gene-middle-horizontal)); + pref-height: var(hb-param-graphic-size-primary-medium); + size-policy-vertical: fixed; + size-policy-horizontal: expanding; +} + +RadioCarouselItem::genre_label::text +{ + color: lightgray; /*var(qtc_lcd_title_normal);*/ + text-height: var(hb-param-text-height-secondary); + font-variant: secondary; + text-align: center bottom; +} + +RadioCarouselItem::name_label +{ + left: -var(hb-param-margin-gene-left); + right: var(hb-param-margin-gene-right); + size-policy-vertical: fixed; + size-policy-horizontal: expanding; +} + +RadioCarouselItem[appearance=Full]::name_label +{ + pref-height: 8un; + top: 0un; +} + +RadioCarouselItem[appearance!=Full]::name_label +{ + pref-height: 14un; + top: 1.5un; +} + +RadioCarouselItem::name_label::text +{ + color: white; /*var(qtc_lcd_title_normal);*/ + font-variant: primary; + text-wrap-mode: no-wrap; + text-align: center top; +} + +RadioCarouselItem[appearance=Full]::name_label::text +{ + text-height: 8un; +} + +RadioCarouselItem[appearance!=Full]::name_label::text +{ + text-height: 14un; +} + +RadioCarouselItem::rt_label +{ + top: -16un; + left: -var(hb-param-margin-gene-left); + right: var(hb-param-margin-gene-right); + bottom: var(hb-param-margin-middle-vertical); + size-policy-vertical: expanding; +} + +RadioCarouselItem::rt_label::text +{ + color: var(qtc_lcd_title_normal); + text-line-count-min: 1; + font-variant: secondary; +} + +RadioCarouselItem[appearance=Full]::rt_label::text +{ + text-line-count-max: 4; + text-wrap-mode: word-wrap; /*wrap-anywhere; */ + text-height: var(hb-param-text-height-secondary); + text-align: center center; +} + +RadioCarouselItem[appearance!=Full]::rt_label::text +{ + text-line-count-max: 1; + text-wrap-mode: no-wrap; + text-height: 5un; + text-align: center center; +} + +RadioCarouselItem::url_label +{ + left: -var(hb-param-margin-gene-left); + right: var(hb-param-margin-gene-right); + bottom: var(hb-param-margin-gene-bottom); +} + +RadioCarouselItem::url_label::text +{ + text-height: var(hb-param-text-height-secondary); + font-variant: secondary; + text-align: center center; + color:var(qtc_lcd_link_normal); +} + +RadioCarouselItem::favorite_touch_area +{ + top: 0un; + left: 0un; + right: -8un; + bottom: -4un; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/radiocarouselitem.widgetml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/res/layout/radiocarouselitem.widgetml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/radiostationitem.css --- a/radioapp/radiowidgets/res/layout/radiostationitem.css Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -RadioStationItem { - layout: default -} - -RadioStationItem::favorite_button { - max-width: 6un; - max-height: 6un; - top: -var(hb-param-margin-gene-top); - left: -var(hb-param-margin-gene-left) -} - -RadioStationItem::genre_label { - pref-height: 6un; - top: -var(hb-param-margin-gene-top); - right: 8un; - left: -var(hb-param-margin-gene-left); -} - -RadioFadingLabel#genre_label::text { - text-align: center; - color: lightgray; - font-variant: secondary; -} - -RadioStationItem::name_label { - pref-height: 5un; - left: -var(hb-param-margin-gene-left); - top: -var(hb-param-margin-gene-top); - right: var(hb-param-margin-gene-right) -} - -RadioFadingLabel#name_label::text { - text-align: center; - color: white; - font-variant: primary; -} - -RadioStationItem::rt_label { - pref-height: 21un; - left: -var(hb-param-margin-gene-left); - top: -var(hb-param-margin-gene-top); - right: var(hb-param-margin-gene-right); -} - -RadioFadingLabel#rt_label::text { - text-align: center; - color: white; - font-variant: secondary; -} - -RadioStationItem::url_label { - pref-height: 5un; - left: -var(hb-param-margin-gene-left); - top: -var(hb-param-margin-gene-top); - right: var(hb-param-margin-gene-right); - bottom: var(hb-param-margin-gene-bottom); -} - -RadioFadingLabel#url_label::text { - text-align: center; - color: white; - font-variant: secondary; -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/radiostationitem.widgetml --- a/radioapp/radiowidgets/res/layout/radiostationitem.widgetml Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/res/layout/stationsview.docml --- a/radioapp/radiowidgets/res/layout/stationsview.docml Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/res/layout/stationsview.docml Thu Jul 22 16:33:45 2010 +0100 @@ -26,17 +26,17 @@
- + - + - - - + + + @@ -49,13 +49,15 @@ - - - + + + + + - + @@ -102,13 +104,6 @@ - - - - - - - @@ -116,9 +111,6 @@ - - -
@@ -127,6 +119,9 @@ + + +
@@ -135,6 +130,9 @@ + + +
@@ -144,7 +142,7 @@ - + @@ -164,7 +162,7 @@
- + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiobannerlabel.cpp --- a/radioapp/radiowidgets/src/radiobannerlabel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* 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: -* -*/ - -#include "radiobannerlabel.h" - -#include - -/*! - * - */ -RadioBannerLabel::RadioBannerLabel( QGraphicsItem * parent ) : - HbLabel( parent ) -{ - QFont currentfont( font() ); - currentfont.setBold( true ); - currentfont.setPixelSize( 18 ); - setFont( currentfont ); -} - -/*! - * - */ -void RadioBannerLabel::paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ) -{ - painter->setPen(QPen(QColor(200, 200, 200, 150))); - painter->setBrush(QBrush(QColor(200, 200, 200, 150),Qt::SolidPattern)); - painter->drawRect(option->rect); - HbLabel::paint( painter, option, widget ); -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiocarouselanimator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/src/radiocarouselanimator.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,217 @@ +/* +* 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: +* +*/ + +// System includes +#include +#include +#include + +// User includes +#include "radiocarouselanimator.h" +#include "radiostationcarousel.h" +#include "radiocarouselitem.h" +#include "radiostation.h" +#include "radiostationmodel.h" +#include "radiologger.h" + +// Constants +const int FREQUENCY_SCROLL_DIVIDER = 100000; +const int NUMBER_SCROLL_TIMELINE_DURATION = 1000; +const int FLASH_TIMER_INTERVAL = 400; +const qreal FLASHING_ITEM_DIM_OPACITY = 0.3; +const qreal FLASHING_ITEM_NORMAL_OPACITY = 1.0; + +/*! + * + */ +RadioCarouselAnimator::RadioCarouselAnimator( RadioStationCarousel& carousel ) : + mCarousel( carousel ), + mAnimationTimeLine( new QTimeLine( NUMBER_SCROLL_TIMELINE_DURATION, this ) ), + mTimer( new QTimer( this ) ), + mCanceled( false ), + mMode( NoAnimation ), + mStationIsFavorite( false ), + mFlashingToggle( false ) +{ + mAnimationTimeLine->setCurveShape( QTimeLine::EaseInCurve ); + Radio::connect( mAnimationTimeLine, SIGNAL(finished()), + this, SLOT(finalizeNumberScroll()) ); + Radio::connect( mAnimationTimeLine, SIGNAL(frameChanged(int)), + this, SLOT(updateNumberScroll(int)) ); + + mTimer->setInterval( FLASH_TIMER_INTERVAL ); + mTimer->setSingleShot( false ); + Radio::connect( mTimer, SIGNAL(timeout()), + this, SLOT(handleTimeout()) ); +} + +/*! + * + */ +RadioCarouselAnimator::~RadioCarouselAnimator() +{ + stopAll(); +} + +/*! + * + */ +void RadioCarouselAnimator::startNumberScroll( const uint startFrequency, const uint stopFrequency ) +{ + addMode( ScrollingNumbers ); + + //TODO: Take italy case into account + mAnimationTimeLine->setDuration( NUMBER_SCROLL_TIMELINE_DURATION ); + mAnimationTimeLine->setFrameRange( startFrequency / FREQUENCY_SCROLL_DIVIDER, + stopFrequency / FREQUENCY_SCROLL_DIVIDER ); + mAnimationTimeLine->start(); + + mCarousel.scrollContentsTo( QPointF( -mCarousel.mMaxScrollPos, 0 ), mCarousel.mAutoScrollTime ); +} + +/*! + * + */ +void RadioCarouselAnimator::startFlashingIcon() +{ + const uint frequency = mCarousel.mItems[RadioStationCarousel::CenterItem]->frequency(); + RadioStation station; + mCarousel.mModel->findFrequency( frequency, station ); + mStationIsFavorite = station.isFavorite(); + + mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_DIM_OPACITY ); + + addMode( FlashingIcon ); +} + +/*! + * + */ +void RadioCarouselAnimator::stopFlashingIcon() +{ + mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_NORMAL_OPACITY ); + removeMode( FlashingIcon ); +} + +/*! + * + */ +void RadioCarouselAnimator::startFlashingText() +{ + mCarousel.mInfoText->setOpacity( FLASHING_ITEM_DIM_OPACITY ); + addMode( FlashingText ); +} + +/*! + * + */ +void RadioCarouselAnimator::stopFlashingText() +{ + mCarousel.mInfoText->setOpacity( FLASHING_ITEM_NORMAL_OPACITY ); + removeMode( FlashingText ); +} + +/*! + * + */ +void RadioCarouselAnimator::stopAll() +{ + mCanceled = true; + mAnimationTimeLine->stop(); + mTimer->stop(); + + stopFlashingText(); + stopFlashingIcon(); + + mMode = NoAnimation; + deleteLater(); +} + +/*! + * Private slot + * + */ +void RadioCarouselAnimator::handleTimeout() +{ + mFlashingToggle = !mFlashingToggle; + if ( mMode.testFlag( IconItem ) ) { + if ( mFlashingToggle ) { + mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_NORMAL_OPACITY ); + } else { + mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_DIM_OPACITY ); + } + } + + if ( mMode.testFlag( TextItem ) ) { + if ( mFlashingToggle ) { + mCarousel.mInfoText->setOpacity( FLASHING_ITEM_NORMAL_OPACITY ); + } else { + mCarousel.mInfoText->setOpacity( FLASHING_ITEM_DIM_OPACITY ); + } + } +} + +/*! + * Private slot + * + */ +void RadioCarouselAnimator::updateNumberScroll( int value ) +{ + mCarousel.mItems[RadioStationCarousel::RightItem]->setFrequency( value * FREQUENCY_SCROLL_DIVIDER ); +} + +/*! + * Private slot + * + */ +void RadioCarouselAnimator::finalizeNumberScroll() +{ + if ( !mCanceled ) { + mCarousel.mItems[RadioStationCarousel::CenterItem]->setFrequency( + mCarousel.mItems[RadioStationCarousel::RightItem]->frequency() ); + mCarousel.scrollContentsTo( QPointF( -mCarousel.mMidScrollPos, 0 ), 0 ); + emit mCarousel.scanAnimationFinished(); + } + removeMode( ScrollingNumbers ); +} + +/*! + * + */ +void RadioCarouselAnimator::addMode( AnimationMode mode ) +{ + mMode |= mode; + if ( mMode.testFlag( TimerItem ) && !mTimer->isActive() ) { + mTimer->start(); + } +} + +/*! + * + */ +void RadioCarouselAnimator::removeMode( AnimationMode mode ) +{ + mMode &= ~mode; + if ( !mMode.testFlag( TimerItem ) ) { + mTimer->stop(); + } + + if ( mMode == NoAnimation ) { + deleteLater(); + } + +} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiocarouselitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/src/radiocarouselitem.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,403 @@ +/* +* 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: +* +*/ + +// System includes +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "radiocarouselitem.h" +#include "radiocarouselitemobserver.h" +#include "radiostation.h" +#include "radiologger.h" + +const QLatin1String FILE_PATH_WIDGETML ( ":/layout/radiocarouselitem.widgetml" ); +const QLatin1String FILE_PATH_CSS ( ":/layout/radiocarouselitem.css" ); +const QLatin1String ICON_BUTTON ( "star_button" ); +const QLatin1String GENRE_LABEL ( "genre_label" ); +const QLatin1String FAVORITE_TOUCH_AREA ( "favorite_touch_area" ); +const QLatin1String NAME_LABEL ( "name_label" ); +const QLatin1String RT_LABEL ( "rt_label" ); +const QLatin1String URL_LABEL ( "url_label" ); + +const QLatin1String SEEKING_TEXT ( "txt_rad_list_tuning" ); +const QLatin1String CONNECT_HEADSET_TEXT( "txt_rad_list_connect_wireless_antenna_headset_with" ); + +/*! + * + */ +static void registerAndCheck( const QString& file ) { + bool registered = HbStyleLoader::registerFilePath( file ); + Q_ASSERT_X( registered, "RadioCarouselItem", "Failed to register CSS or WIDGETML!" ); +} + +/*! + * + */ +RadioCarouselItem::RadioCarouselItem( RadioCarouselItemObserver& observer, QGraphicsItem* parent, bool registerCss ) : + HbWidget( parent ), + mObserver( observer ), + mFavoriteItem( NULL ), + mGenreItem( NULL ), + mFavoriteTouchArea( NULL ), + mNameItem( NULL ), + mRadiotextItem( NULL ), + mUrlItem( NULL ), + mAppearance( Default ), + mOwnsCss( registerCss ), + mFlags( DefaultFlags ) +{ + mStation.reset( new RadioStation() ); + + if ( mOwnsCss ) { + registerAndCheck( FILE_PATH_CSS ); + registerAndCheck( FILE_PATH_WIDGETML ); + } + + createPrimitives(); + updatePrimitives(); + + updateFavoriteIcon( false ); + + updateVisibilities(); + + grabGesture( Qt::TapGesture ); +} + +/*! + * + */ +RadioCarouselItem::~RadioCarouselItem() +{ + if ( mOwnsCss ) { + HbStyleLoader::unregisterFilePath( FILE_PATH_CSS ); + HbStyleLoader::unregisterFilePath( FILE_PATH_WIDGETML ); + } +} + +/*! + * + */ +void RadioCarouselItem::createPrimitives() +{ + mFavoriteItem = new HbIconItem( this ); + HbStyle::setItemName( mFavoriteItem, ICON_BUTTON ); + + mGenreItem = new HbTextItem( this ); + HbStyle::setItemName( mGenreItem, GENRE_LABEL ); + + mNameItem = new HbTextItem( this ); + HbStyle::setItemName( mNameItem, NAME_LABEL ); + + mRadiotextItem = new HbRichTextItem( this ); + HbStyle::setItemName( mRadiotextItem, RT_LABEL ); + + mUrlItem = new HbTextItem( this ); + HbStyle::setItemName( mUrlItem, URL_LABEL ); + + mFavoriteTouchArea = new HbTouchArea( this ); + HbStyle::setItemName( mFavoriteTouchArea, FAVORITE_TOUCH_AREA ); + + // Matti testing needs these + mFavoriteItem->setObjectName( ICON_BUTTON ); + mGenreItem->setObjectName( GENRE_LABEL ); + mNameItem->setObjectName( NAME_LABEL ); + mRadiotextItem->setObjectName( RT_LABEL ); + mUrlItem->setObjectName( URL_LABEL ); + mFavoriteTouchArea->setObjectName( FAVORITE_TOUCH_AREA ); +} + +/*! + * + */ +void RadioCarouselItem::drawOffScreen( QPainter& painter ) +{ + QStyleOptionGraphicsItem option; + + foreach ( QGraphicsItem* child, childItems() ) { + QGraphicsWidget* childWidget = static_cast( child ); + option.exposedRect = childWidget->rect(); + painter.save(); + painter.translate( childWidget->pos() ); + childWidget->paint( &painter, &option, NULL ); + painter.restore(); + } +} + +/*! + * + */ +void RadioCarouselItem::updatePrimitives() +{ + update(); +} + +/*! + * \reimp + */ +void RadioCarouselItem::gestureEvent( QGestureEvent* event ) +{ + if ( HbTapGesture* gesture = qobject_cast( event->gesture( Qt::TapGesture ) ) ) { + if ( gesture->state() == Qt::GestureFinished ) { + const QPointF mappedHotSpot = event->mapToGraphicsScene( gesture->hotSpot() ); + + if ( mFlags.testFlag( FavoriteTouchable ) && + mFavoriteTouchArea->sceneBoundingRect().contains( mappedHotSpot ) ) { + + mObserver.handleIconClicked( *mStation ); + + } else if ( mFlags.testFlag( RadiotextTouchable ) && + mRadiotextItem->sceneBoundingRect().contains( mappedHotSpot ) ) { + + mObserver.handleRadiotextClicked( *mStation ); + + } else if ( mFlags.testFlag( UrlTouchable ) && + mUrlItem->sceneBoundingRect().contains( mappedHotSpot ) ) { + + mObserver.handleUrlClicked( *mStation ); + + } + } + } +} + +/*! + * + */ +void RadioCarouselItem::setFlags( CarouselItemFlags flags ) +{ + mFlags |= flags; + updateVisibilities(); +} + +/*! + * + */ +void RadioCarouselItem::clearFlags( CarouselItemFlags flags ) +{ + for ( int i = 1; i < LastFlagMarker; i = i << 1 ) { + if ( flags.testFlag( static_cast( i ) ) ) { + mFlags &= ~i; + } + } + updateVisibilities(); +} + +/*! + * + */ +void RadioCarouselItem::updateVisibilities() +{ + mFavoriteItem->setVisible( mFlags.testFlag( FavoriteVisible ) ); + mGenreItem->setVisible( mFlags.testFlag( GenreVisible ) ); + mRadiotextItem->setVisible( mFlags.testFlag( RadiotextVisible ) ); + mUrlItem->setVisible( mFlags.testFlag( UrlVisible ) ); +} + +/*! + * + */ +void RadioCarouselItem::setAppearance( Appearance appearance ) +{ + mAppearance = appearance; + + if ( mAppearance == ManualSeek ) { + mFlags = ManualSeekFlags; + mGenreItem->setText( "" ); + mRadiotextItem->setText( "" ); + mUrlItem->setText( "" ); + mNameItem->setText( mStation->frequencyString() ); + updateFavoriteIcon( false ); + } else { + mFlags = DefaultFlags; + } + + updateVisibilities(); + + repolish(); +} + +/*! + * + */ +RadioCarouselItem::Appearance RadioCarouselItem::appearance() const +{ + return mAppearance; +} + +/*! + * + */ +void RadioCarouselItem::setSeekLayout( bool seekLayout ) +{ + if ( seekLayout ) { + setAppearance( ManualSeek ); + } else { + setAppearance( mStation->radioText().isEmpty() ? Default : Full ); + } +} + +/*! + * + */ +void RadioCarouselItem::setStation( const RadioStation& station ) +{ + *mStation = station; + + updateLayout(); + + update(); +} + +/*! + * + */ +uint RadioCarouselItem::frequency() const +{ + return mStation->frequency(); +} + +/*! + * + */ +void RadioCarouselItem::update( const RadioStation* station ) +{ + if ( station ) { + *mStation = *station; + updateLayout(); + } + + if ( mStation->isValid() ) { + mGenreItem->setText( mObserver.localizeGenre( mStation->genre() ) ); + + const bool hasName = mStation->hasName(); + if ( hasName ) { + mNameItem->setText( mStation->name() ); + } else { + mNameItem->setText( mStation->frequencyString() ); + } + + if ( mStation->hasRadiotext() ) { + mRadiotextItem->setText( mStation->radioText() ); + } else { + if ( mStation->hasDynamicPs() ) { + mRadiotextItem->setText( mStation->dynamicPsText() ); + } else if ( hasName ) { + const QString loc = "%L1 Mhz"; //hbTrId( "txt_rad_list_l1_mhz_small" ); + mRadiotextItem->setText( loc.arg( mStation->frequencyString() ) ); + } else { + mRadiotextItem->setText( "" ); + } + } + + mUrlItem->setText( mStation->url() ); + if ( mStation->hasUrl() ) { + HbStyle::setItemName( mUrlItem, URL_LABEL ); + setFlags( UrlVisible | UrlTouchable ); + } else { + HbStyle::setItemName( mUrlItem, "" ); // Clear the name so the item disappears from layout + clearFlags( UrlVisible | UrlTouchable ); + } + + updateFavoriteIcon( mStation->isFavorite() ); + } else { + cleanRdsData(); + } +} + +/*! + * + */ +void RadioCarouselItem::setFrequency( uint frequency ) +{ + LOG_FORMAT( "RadioCarouselItem::setFrequency: %d", frequency ); + + mNameItem->setText( RadioStation::parseFrequency( frequency ) ); + + if ( !mObserver.isInManualSeek() ) { + *mStation = mObserver.findStation( frequency ); + } +} + +/*! + * + */ +void RadioCarouselItem::cleanRdsData() +{ + mGenreItem->setText( "" ); + mRadiotextItem->setText( "" ); + mUrlItem->setText( "" ); +} + +/*! + * + */ +void RadioCarouselItem::setRadioText( const QString& text ) +{ + mRadiotextItem->setText( text ); +} + +/*! + * + */ +void RadioCarouselItem::setItemVisibility( ItemVisibility visibility ) +{ + CarouselItemFlags flags = 0; + if ( visibility == AllVisible ) { + flags = DefaultFlags; + } else if ( visibility == AllHidden ) { + + } else if ( visibility == IconVisible ) { + flags = FavoriteVisible; + } + + setFlags( flags ); +} + +/*! + * + */ +void RadioCarouselItem::setIconOpacity( qreal opacity ) +{ + mFavoriteItem->setOpacity( opacity ); +} + +/*! + * + */ +void RadioCarouselItem::updateFavoriteIcon( bool isFavorite ) +{ + if ( isFavorite ) { + mFavoriteItem->setIcon( mObserver.favoriteIcon() ); + } else { + mFavoriteItem->setIcon( mObserver.nonFavoriteIcon() ); + } +} + +/*! + * + */ +void RadioCarouselItem::updateLayout() +{ + setAppearance( mStation->hasName() || mStation->hasRadiotext() || mStation->hasUrl() ? Full : Default ); +} + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiofadinglabel.cpp --- a/radioapp/radiowidgets/src/radiofadinglabel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiofadinglabel.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -20,11 +20,11 @@ // User includes #include "radiofadinglabel.h" #include "radiologger.h" -#include "radiouiutilities.h" +#include "radioutil.h" // Constants -const QString KHideEffect = "hide"; -const QString KShowEffect = "show"; +const QString HIDE_EFFECT = "hide"; +const QString SHOW_EFFECT = "show"; #ifdef USE_DEPRECATED_ORBIT_APIS # define SET_CONTENT setText @@ -42,9 +42,9 @@ mFadingEnabled( false ) { QEffectList effectList; -// effectList.append( EffectInfo( this, ":/effects/fade_in.fxml", KShowEffect ) ); -// effectList.append( EffectInfo( this, ":/effects/fade_out.fxml", KHideEffect ) ); - RadioUiUtilities::addEffects( effectList ); +// effectList.append( EffectInfo( this, ":/effects/fade_in.fxml", SHOW_EFFECT ) ); +// effectList.append( EffectInfo( this, ":/effects/fade_out.fxml", HIDE_EFFECT ) ); + RadioUtil::addEffects( effectList ); } /*! @@ -78,15 +78,15 @@ if ( newText.isEmpty() ) { if ( isVisible() ) { mTextHolder = ""; - startEffect( KHideEffect, "effectFinished" ); + startEffect( HIDE_EFFECT, "effectFinished" ); } } else { if ( GET_CONTENT().isEmpty() ) { HbLabel::SET_CONTENT( trimHtml( newText ) ); - startEffect( KShowEffect ); + startEffect( SHOW_EFFECT ); } else { mTextHolder = newText; - startEffect( KHideEffect, "effectFinished" ); + startEffect( HIDE_EFFECT, "effectFinished" ); } } } else { @@ -103,7 +103,7 @@ if ( status.reason == Hb::EffectFinished ) { HbLabel::SET_CONTENT( trimHtml( mTextHolder ) ); if ( !mTextHolder.isEmpty() ) { - HbEffect::start( this, KShowEffect ); + HbEffect::start( this, SHOW_EFFECT ); } mTextHolder = ""; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiofrequencyitem.cpp --- a/radioapp/radiowidgets/src/radiofrequencyitem.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiofrequencyitem.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -21,12 +21,13 @@ #include "radiofrequencyitem.h" #include "radiofrequencystrip.h" #include "radio_global.h" +#include "radiologger.h" /*! * */ RadioFrequencyItem::RadioFrequencyItem( QString frequency ) : - mFrequency( frequency.isEmpty() ? 0 : frequency.toInt() * KOneHertz ), + mFrequency( frequency.isEmpty() ? 0 : frequency.toInt() * ONE_HERTZ ), mGraphicsItem( 0 ) { } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiofrequencyscanner.cpp --- a/radioapp/radiowidgets/src/radiofrequencyscanner.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiofrequencyscanner.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ #include #include #include +#include // User includes #include "radiofrequencyscanner.h" @@ -29,11 +30,16 @@ #include "radiostationmodel.h" #include "radiofrequencystrip.h" #include "radiostationcarousel.h" -#include "radiouiutilities.h" +#include "radioutil.h" #include "radiomainview.h" // Constants -const int KExtraRoomToMaxValue = 100000; +const int EXTRA_TO_PROGRESS_MAX_VALUE = 100000; +const int CAROUSEL_FINISH_SCROLL_TIME = 1000; +const int STRIP_FINISH_SCROLL_TIME = 1100; +const int CAROUSEL_SCROLL_TIME = 1000; +const int STRIP_SCROLL_TIME = 1100; +const int START_DELAY = 1000; /*! * @@ -42,12 +48,16 @@ QObject( parent ), mUiEngine( uiEngine ), mInMainView( parent->metaObject()->className() == RadioMainView::staticMetaObject.className() ), - mScannerEngine( mUiEngine.scannerEngine() ), + mScannerEngine( mUiEngine.createScannerEngine() ), mStripScrollTime( 0 ), mCarouselScrollTime( 0 ), - mIsAlive( false ) + mIsAlive( false ), + mUserCanceled( false ) { - RadioUiUtilities::setFrequencyScanner( this ); + RadioUtil::setFrequencyScanner( this ); + + Radio::connect( mScannerEngine.data(), SIGNAL(stationFound(RadioStation)), + this, SLOT(updateScanProgress(RadioStation)) ); } /*! @@ -55,6 +65,7 @@ */ RadioFrequencyScanner::~RadioFrequencyScanner() { + RadioUtil::setScanStatus( Scan::NotScanning ); } /*! @@ -63,43 +74,47 @@ void RadioFrequencyScanner::startScanning() { mIsAlive = true; - RadioFrequencyStrip* frequencyStrip = RadioUiUtilities::frequencyStrip(); - RadioStationCarousel* carousel = RadioUiUtilities::carousel(); + RadioFrequencyStrip* frequencyStrip = RadioUtil::frequencyStrip(); + RadioStationCarousel* carousel = RadioUtil::carousel(); if ( mInMainView ) { + + // If this is the first time start, bring application to foreground + if ( mUiEngine.isFirstTimeStart() ) { + static_cast( parent() )->bringToForeground(); + } + + RadioUtil::setScanStatus( Scan::ScanningInMainView ); mStripScrollTime = frequencyStrip->autoScrollTime(); mCarouselScrollTime = carousel->autoScrollTime(); carousel->setScanningMode( true ); - carousel->setAutoScrollTime( 1000 ); - frequencyStrip->setAutoScrollTime( 1100 ); + carousel->setAutoScrollTime( CAROUSEL_SCROLL_TIME ); + frequencyStrip->setAutoScrollTime( STRIP_SCROLL_TIME ); - connectAndTest( carousel, SIGNAL(scanAnimationFinished()), + Radio::connect( carousel, SIGNAL(scanAnimationFinished()), this, SLOT(continueScanning()) ); static_cast( parent() )->setScanningMode( true ); frequencyStrip->setScanningMode( true ); } else { - carousel->setCarouselModel( NULL ); - - mScanningProgressNote.reset( new HbProgressDialog( HbProgressDialog::ProgressDialog ) ), - mScanningProgressNote->setModal( true ); - mScanningProgressNote->setAutoClose( true ); + RadioUtil::setScanStatus( Scan::ScanningInStationsView ); + mScanningProgressNote = new HbProgressDialog( HbProgressDialog::ProgressDialog ); + mScanningProgressNote.data()->setModal( true ); + mScanningProgressNote.data()->setAutoClose( true ); // Add some extra to the maximum value to allow room for the station at the low band edge - mScanningProgressNote->setRange( mUiEngine.minFrequency(), mUiEngine.maxFrequency() + KExtraRoomToMaxValue ); - mScanningProgressNote->setProgressValue( mUiEngine.minFrequency() ); - mScanningProgressNote->setText( hbTrId( "txt_rad_info_searching_local_stations_please_wait" ) ); - mScanningProgressNote->show(); + mScanningProgressNote.data()->setRange( mUiEngine.minFrequency(), mUiEngine.maxFrequency() + EXTRA_TO_PROGRESS_MAX_VALUE ); + mScanningProgressNote.data()->setProgressValue( mUiEngine.minFrequency() ); + mScanningProgressNote.data()->setText( hbTrId( "txt_rad_info_searching_local_stations_please_wait" ) ); + mScanningProgressNote.data()->setAttribute( Qt::WA_DeleteOnClose, true ); + mScanningProgressNote.data()->open(); - connectAndTest( mScanningProgressNote.data(), SIGNAL(cancelled()), + Radio::connect( mScanningProgressNote.data(), SIGNAL(cancelled()), this, SLOT(cancelScanning()) ); } - connectAndTest( mScannerEngine.data(), SIGNAL(stationFound(RadioStation)), - this, SLOT(updateScanProgress(RadioStation)) ); - - QTimer::singleShot( 1000, this, SLOT(delayedStart()) ); + QTimer::singleShot( START_DELAY, this, SLOT(delayedStart()) ); } /*! @@ -116,6 +131,8 @@ */ void RadioFrequencyScanner::cancelScanning() { + mUserCanceled = true; + RadioUtil::carousel()->cancelAnimation(); finishScanning(); } @@ -144,8 +161,8 @@ if ( mInMainView ) { - RadioUiUtilities::frequencyStrip()->setFrequency( frequency, TuneReason::StationScan ); - RadioUiUtilities::carousel()->animateNewStation( station ); + RadioUtil::frequencyStrip()->setFrequency( frequency, TuneReason::StationScan ); + RadioUtil::carousel()->animateNewStation( station ); } else { // Check for special case that can happen during scanning. @@ -153,11 +170,11 @@ // all of the higher frequencies. We don't update the progress value here because the value would // be lower than the previous one. The progress value is set to maximum when the scanner finishes. if ( frequency != mUiEngine.minFrequency() ) { - mScanningProgressNote->setProgressValue( frequency ); + mScanningProgressNote.data()->setProgressValue( frequency ); } mScannerEngine->continueScanning(); - } + } } /*! @@ -166,7 +183,10 @@ */ void RadioFrequencyScanner::continueScanning() { - mScannerEngine->continueScanning(); + if ( !mUserCanceled ) { + RadioUtil::frequencyStrip()->addScannedStation( mUiEngine.stationModel().currentStation() ); + mScannerEngine->continueScanning(); + } } /*! @@ -176,9 +196,11 @@ void RadioFrequencyScanner::restoreUiControls() { if ( mInMainView ) { - RadioUiUtilities::frequencyStrip()->setScanningMode( false ); + disconnect( RadioUtil::carousel(), SIGNAL(scrollingEnded()), this, 0 ); + + RadioUtil::frequencyStrip()->setScanningMode( false ); static_cast( parent() )->setScanningMode( false ); - RadioUiUtilities::carousel()->setScanningMode( false ); + RadioUtil::carousel()->setScanningMode( false ); } deleteLater(); @@ -190,38 +212,81 @@ void RadioFrequencyScanner::finishScanning() { mScannerEngine->cancel(); - RadioUiUtilities::setFrequencyScanner( NULL ); - mIsAlive = false; - RadioFrequencyStrip* frequencyStrip = RadioUiUtilities::frequencyStrip(); - RadioStationCarousel* carousel = RadioUiUtilities::carousel(); + RadioUtil::setScanStatus( Scan::NotScanning ); + RadioUtil::setFrequencyScanner( NULL ); + RadioFrequencyStrip* frequencyStrip = RadioUtil::frequencyStrip(); + RadioStationCarousel* carousel = RadioUtil::carousel(); + + disconnect( mScannerEngine.data(), SIGNAL(stationFound(RadioStation)), this, 0 ); + + RadioStationModel& model = mUiEngine.stationModel(); + const int stationCount = model.rowCount(); if ( mInMainView ) { - RadioStationModel& model = mUiEngine.stationModel(); + + disconnect( carousel, SIGNAL(scanAnimationFinished()), this, 0 ); // Scroll the carousel and frequency strip through all of the scanned stations - const int stationCount = model.rowCount(); if ( stationCount > 1 ) { - frequencyStrip->setAutoScrollTime( 1000 ); - carousel->setAutoScrollTime( 1000 ); - const uint frequency = model.data( model.index( 0, 0 ), RadioStationModel::RadioStationRole ).value().frequency(); - frequencyStrip->setFrequency( frequency, TuneReason::StationScan ); - carousel->setFrequency( frequency, TuneReason::StationScan ); + frequencyStrip->setAutoScrollTime( STRIP_FINISH_SCROLL_TIME ); + carousel->setAutoScrollTime( CAROUSEL_FINISH_SCROLL_TIME ); + + Radio::connect( carousel, SIGNAL(scrollingEnded()), + this, SLOT(restoreUiControls()) ); + + const uint frequency = model.stationAt( 0 ).frequency(); + + mUiEngine.setFrequency( frequency, TuneReason::StationScanFinalize ); + frequencyStrip->setFrequency( frequency, TuneReason::StationScanFinalize, Scroll::Right ); + carousel->setFrequency( frequency, TuneReason::StationScanFinalize, Scroll::Right ); frequencyStrip->setAutoScrollTime( mStripScrollTime ); carousel->setAutoScrollTime( mCarouselScrollTime ); - } + } else { + const uint frequency = mUiEngine.minFrequency(); + frequencyStrip->setFrequency( frequency, TuneReason::Unspecified ); + carousel->setFrequency( frequency, TuneReason::Unspecified ); - QTimer::singleShot( 100, this, SLOT(restoreUiControls()) ); + if ( !mUserCanceled ) { + HbMessageBox* box = new HbMessageBox( HbMessageBox::MessageTypeInformation ); + box->setTimeout( HbPopup::NoTimeout ); + box->setText( hbTrId( "txt_rad_dpophead_no_stations_found_try_searching" ) ); + box->setDismissPolicy( HbPopup::NoDismiss ); + box->setAttribute( Qt::WA_DeleteOnClose, true ); + box->open(); + } + + restoreUiControls(); + } } else { - mScanningProgressNote->setProgressValue( mScanningProgressNote->maximum() ); - deleteLater(); + if ( !mUserCanceled ) { + if ( mScanningProgressNote ) { + mScanningProgressNote.data()->setProgressValue( mScanningProgressNote.data()->maximum() ); + mScanningProgressNote.data()->close(); + } - carousel->setCarouselModel( mUiEngine.carouselModel() ); + if ( stationCount == 0 ) { + HbMessageBox* box = new HbMessageBox( HbMessageBox::MessageTypeInformation ); + box->setTimeout( HbPopup::NoTimeout ); + box->setText( hbTrId( "txt_rad_dpophead_no_stations_found_try_searching" ) ); + box->setDismissPolicy( HbPopup::NoDismiss ); + box->setAttribute( Qt::WA_DeleteOnClose, true ); + box->open(); + } + } + const uint frequency = model.stationAt( 0 ).frequency(); + mUiEngine.setFrequency( frequency, TuneReason::StationScanFinalize ); } - disconnect( mScannerEngine.data(), SIGNAL(stationFound(RadioStation)), - this, SLOT(updateScanAndSaveProgress(RadioStation)) ); + mIsAlive = false; + emit frequencyScannerFinished(); - emit frequencyScannerFinished(); + if ( !mInMainView ) { + if ( mUserCanceled ) { + deleteLater(); + } else { + delete this; //TODO: Remove this weird hack once the problem with deleteLater is clear + } + } } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiofrequencystrip.cpp --- a/radioapp/radiowidgets/src/radiofrequencystrip.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiofrequencystrip.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -25,53 +25,61 @@ #include #include #include +#include #include "radiofrequencystrip.h" #include "radiofrequencyitem.h" #include "radiouiengine.h" #include "radiostation.h" #include "radiostationmodel.h" -#include "radiouiutilities.h" +#include "radioutil.h" +#include "radiouiloader.h" #include "radiologger.h" // Frequency lines -const int KTabHeightSmall = 10; -const int KTabHeightBig = 15; -const int KTabWidthFavorite = 4; -const qreal KIndicatorWidth = 2.0; +const int TAB_HEIGHT_SMALL = 12; +const int TAB_HEIGHT_BIG = 18; +const int PEN_WIDTH_FAVORITE = 4; +const qreal INDICATOR_WIDTH = 2.0; -const qreal KRounder = 0.5; -const int KSelectorWidth = 2; -const int KSelectorZPos = 100; +const qreal ROUNDER = 0.5; +const int SELECTOR_WIDTH = 2; +const int SELECTOR_Z_POS = 100; + +const int HALF_HERTZ = ONE_HERTZ / 2; +const int ONE_TAB_DISTANCE = 20; +const uint ONE_TAB_IN_HZ = uint( 0.2 * ONE_HERTZ ); +const qreal PIXEL_IN_HZ = ONE_TAB_IN_HZ / ONE_TAB_DISTANCE; +const qreal PIXMAP_OVERLAP = qreal( ONE_TAB_DISTANCE ) / 2; +const int ITEM_WIDTH = ONE_TAB_DISTANCE * 5; +const int PIXMAP_WIDTH = ITEM_WIDTH + (int)PIXMAP_OVERLAP; -const int KHalfHertz = KOneHertz / 2; -const int KOneTabDistance = 15; -const uint KOneTabInHz = 0.2 * KOneHertz; -const qreal KPixelInHz = KOneTabInHz / KOneTabDistance; -const int KWidth = KOneTabDistance * 5; -//const int KPixmapWidth = KWidth + KOneTabDistance; -const int KHeight = 50; //TODO: Remove hardcoding +const uint ONE_HUNDRED_KHZ = 100000; + +const char* DECIMAL_TEXT = ".0"; -const int K100Khz = 100000; +#ifdef BUILD_WIN32 + const int FREQUENCY_FONT_SIZE = 12; + const int DECIMAL_FONT_SIZE = 8; +#else + const int FREQUENCY_FONT_SIZE = 6; + const int DECIMAL_FONT_SIZE = 4; +#endif // BUILD_WIN32 -const char* KSlideToLeft = "SlideToLeft"; -const char* KSlideFromLeft = "SlideFromLeft"; -const char* KSlideToRight = "SlideToRight"; -const char* KSlideFromRight = "SlideFromRight"; +const QFont FREQUENCY_FONT( "", FREQUENCY_FONT_SIZE ); +const QFont DECIMAL_FONT( "", DECIMAL_FONT_SIZE ); + +const char* SLIDE_TO_LEFT = "SlideToLeft"; +const char* SLIDE_FROM_LEFT = "SlideFromLeft"; +const char* SLIDE_TO_RIGHT = "SlideToRight"; +const char* SLIDE_FROM_RIGHT = "SlideFromRight"; const char* LEFT_BUTTON = "tv:left_button"; const char* RIGHT_BUTTON = "tv:right_button"; const char* TEXT_COLOR_ATTRIBUTE = "text"; -const int BUTTON_HIDE_TIMEOUT = 500; -const int BUTTON_SHOW_TIMEOUT = 1000; - -/*! - * - */ -static QLineF makeTab( qreal pos, int height ) -{ - return QLineF( pos, KHeight - height, pos, KHeight ); -} +const int MANUALSEEK_START_TIMEOUT = 400; +const int MANUALSEEK_END_TIMEOUT = 2000; +const int MANUALSEEK_SIGNAL_DELAY = 300; /*! * @@ -79,6 +87,7 @@ RadioFrequencyStrip::RadioFrequencyStrip() : RadioStripBase(), mUiEngine( NULL ), + mItemHeight( 8 ), mMinFrequency( 87500000 ), mMaxFrequency( 108000000 ), mFrequencyStepSize( 100000 ), @@ -87,134 +96,107 @@ mSeparatorPos( 0.0 ), mMaxWidth( 0 ), mSelectorPos( 0.0 ), - mLeftButton( new HbPushButton( this ) ), - mRightButton( new HbPushButton( this ) ), - mButtonTimer( NULL ), - mButtonsVisible( true ), - mUserIsScrolling( false ), + mLeftButton( 0 ), + mRightButton( 0 ), + mManualSeekTimer( NULL ), + mManualSeekMode( false ), + mLastReportedFrequency( 0 ), + mManualSeekTimerId( 0 ), mForegroundColor( Qt::white )//HbColorScheme::color( TEXT_COLOR_ATTRIBUTE ) ) { - RadioUiUtilities::setFrequencyStrip( this ); - - setScrollingStyle( HbScrollArea::Pan ); - setItemSize( QSizeF( KWidth, KHeight ) ); - setFrictionEnabled( true ); - - initModel(); + RadioUtil::setFrequencyStrip( this ); - initSelector(); - - initButtons(); - - initEmptyItems(); - - mFrequency = RadioUiEngine::lastTunedFrequency(); - scrollToFrequency( mFrequency, 0 ); + setScrollingStyle( HbScrollArea::PanWithFollowOn ); + setItemSize( QSizeF( ITEM_WIDTH + PIXMAP_OVERLAP / 2, mItemHeight ) ); + setOverlap( PIXMAP_OVERLAP / 2 ); } /*! - * + * Property */ -void RadioFrequencyStrip::setLeftButtonIcon( const HbIcon& leftButtonIcon ) +void RadioFrequencyStrip::setItemHeight( int itemHeight ) { - mLeftButtonIcon = leftButtonIcon; - if ( mLeftButton ) { - mLeftButtonIcon.setColor( Qt::white ); - mLeftButton->setIcon( mLeftButtonIcon ); - } + mItemHeight = itemHeight; } /*! - * + * Property */ -HbIcon RadioFrequencyStrip::leftButtonIcon() const +int RadioFrequencyStrip::itemHeight() const { - return mLeftButtonIcon; -} - -/*! - * - */ -void RadioFrequencyStrip::setRightButtonIcon( const HbIcon& rightButtonIcon ) -{ - mRightButtonIcon = rightButtonIcon; - if ( mRightButton ) { - mRightButtonIcon.setColor( Qt::white ); - mRightButton->setIcon( mRightButtonIcon ); - } + return mItemHeight; } /*! * */ -HbIcon RadioFrequencyStrip::rightButtonIcon() const -{ - return mRightButtonIcon; -} - -/*! - * - */ -void RadioFrequencyStrip::init( RadioUiEngine* engine ) +void RadioFrequencyStrip::init( RadioUiEngine* engine, RadioUiLoader& uiLoader ) { mUiEngine = engine; mMinFrequency = mUiEngine->minFrequency(); mMaxFrequency = mUiEngine->maxFrequency(); mFrequencyStepSize = mUiEngine->frequencyStepSize(); - mFrequency = mUiEngine->currentFrequency(); - scrollToFrequency( mFrequency, 0 ); + mFrequency = RadioUiEngine::lastTunedFrequency(); + + initModel(); + initEmptyItems(); + initPositions(); + + HbDeviceProfile deviceProfile; + mItemHeight = static_cast( mItemHeight * deviceProfile.unitValue() ); + + mLeftButton = uiLoader.findWidget( DOCML::MV_NAME_PREV_BUTTON ); + mRightButton = uiLoader.findWidget( DOCML::MV_NAME_NEXT_BUTTON ); + initButtons(); - mButtonTimer = new QTimer( this ); - mButtonTimer->setInterval( BUTTON_HIDE_TIMEOUT ); - mButtonTimer->setSingleShot( true ); - connectAndTest( mButtonTimer, SIGNAL(timeout()), - this, SLOT(toggleButtons()) ); + mManualSeekTimer = new QTimer( this ); + mManualSeekTimer->setInterval( MANUALSEEK_START_TIMEOUT ); + mManualSeekTimer->setSingleShot( true ); + Radio::connect( mManualSeekTimer, SIGNAL(timeout()), + this, SLOT(toggleManualSeek()) ); - connectAndTest( mLeftButton, SIGNAL(clicked()), + Radio::connect( mLeftButton, SIGNAL(clicked()), this, SLOT(handleLeftButton()) ); - connectAndTest( mRightButton, SIGNAL(clicked()), + Radio::connect( mRightButton, SIGNAL(clicked()), this, SLOT(handleRightButton()) ); - connectAndTest( mLeftButton, SIGNAL(longPress(QPointF)), + Radio::connect( mLeftButton, SIGNAL(longPress(QPointF)), this, SLOT(handleLongLeftButton()) ); - connectAndTest( mRightButton, SIGNAL(longPress(QPointF)), + Radio::connect( mRightButton, SIGNAL(longPress(QPointF)), this, SLOT(handleLongRightButton()) ); - connectAndTest( this, SIGNAL(scrollingEnded()), - this, SLOT(checkIllegalPos()) ); + Radio::connect( this, SIGNAL(scrollingEnded()), + this, SLOT(handleScrollingEnd()) ); grabGesture( Qt::SwipeGesture ); //TODO: Remove. Stepsize hardcoded to 100 Khz in europe region during demo - if ( mFrequencyStepSize < K100Khz ) { - mFrequencyStepSize = K100Khz; + if ( mFrequencyStepSize < ONE_HUNDRED_KHZ ) { + mFrequencyStepSize = ONE_HUNDRED_KHZ; } RadioStationModel* stationModel = &mUiEngine->stationModel(); - connectAndTest( stationModel, SIGNAL(rowsInserted(QModelIndex,int,int)), + Radio::connect( stationModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(updateStation(QModelIndex,int,int)) ); - connectAndTest( stationModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(updateStation(QModelIndex,int,int)) ); - connectAndTest( stationModel, SIGNAL(modelReset()), + Radio::connect( stationModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), + this, SLOT(removeStation(QModelIndex,int,int)) ); + Radio::connect( stationModel, SIGNAL(modelReset()), this, SLOT(initEmptyItems()) ); - initPositions(); + updateAllItems(); - void updateItems(); + showButtons(); } /*! * */ -void RadioFrequencyStrip::setFrequency( const uint frequency, int reason ) +void RadioFrequencyStrip::setFrequency( const uint frequency, int reason, Scroll::Direction direction ) { + Q_UNUSED( reason ); LOG_FORMAT( "RadioFrequencyStrip::setFrequency, frequency: %d, reason: %d", frequency, reason ); - if ( reason != TuneReason::FrequencyStrip && // Not sent by the FrequencyStrip - frequency != mFrequency && // Different from the current - mFrequencies.contains( frequency ) ) // 0 frequency means any illegal value - { - scrollToFrequency( frequency, mAutoScrollTime ); - if ( reason != TuneReason::Skip && reason != TuneReason::StationScan ) { - emitFrequencyChanged( frequency ); + if ( mFrequencies.contains( frequency ) ) { + if ( frequency != mFrequency || reason == TuneReason::Skip ) { + scrollToFrequency( frequency, direction, mAutoScrollTime, RadioUtil::tuneReason( reason ) ); } } } @@ -228,14 +210,41 @@ } /*! - * Public slot + * + */ +bool RadioFrequencyStrip::isInManualSeekMode() const +{ + return mManualSeekMode; +} + +/*! + * + */ +void RadioFrequencyStrip::cancelManualSeek() +{ + mManualSeekTimer->stop(); + if ( mManualSeekMode ) { + toggleManualSeek(); + } +} + +/*! + * + */ +void RadioFrequencyStrip::addScannedStation( const RadioStation& station ) +{ + FrequencyPos pos = mFrequencies.value( station.frequency() ); + updateItem( pos.mItem, station.frequency() ); +} + +/*! * */ void RadioFrequencyStrip::updateFavorite( const RadioStation& station ) { LOG_SLOT_CALLER; FrequencyPos pos = mFrequencies.value( station.frequency() ); - updateFavorites( pos.mItem ); + updateItem( pos.mItem ); } /*! @@ -244,13 +253,13 @@ */ void RadioFrequencyStrip::setScanningMode( bool isScanning ) { - mButtonTimer->stop(); + mManualSeekTimer->stop(); if ( isScanning ) { - scrollToFrequency( mMinFrequency, mAutoScrollTime ); + initEmptyItems(); hideButtons(); + scrollToFrequency( mMinFrequency, Scroll::Shortest, mAutoScrollTime ); } else { showButtons(); - } setEnabled( !isScanning ); } @@ -259,19 +268,20 @@ * Private slot * */ +void RadioFrequencyStrip::removeStation( const QModelIndex& parent, int first, int last ) +{ + Q_UNUSED( parent ); + updateStationsInRange( first, last, true ); +} + +/*! + * Private slot + * + */ void RadioFrequencyStrip::updateStation( const QModelIndex& parent, int first, int last ) { Q_UNUSED( parent ); - RadioStationModel& model = mUiEngine->stationModel(); - uint frequency = 0; - for ( int i = first; i <= last; ++i ) { - frequency = model.data( model.index( i, 0, QModelIndex() ), - RadioStationModel::RadioStationRole ).value().frequency(); - if ( mFrequencies.contains( frequency ) ) { - FrequencyPos pos = mFrequencies.value( frequency ); - updateFavorites( pos.mItem ); - } - } + updateStationsInRange( first, last ); } /*! @@ -281,10 +291,13 @@ void RadioFrequencyStrip::initEmptyItems() { LOG_METHOD; - QList emptyList; - foreach ( RadioFrequencyItem* item, mFrequencyItems ) { - QPixmap pixmap = drawPixmap( item->frequency(), emptyList, item ); - item->setPixmap( pixmap ); + //TODO: Remove the weird hack of checking the sender + if ( !sender() || RadioUtil::scanStatus() != Scan::ScanningInMainView ) { + QList emptyList; + foreach ( RadioFrequencyItem* item, mFrequencyItems ) { + QPixmap pixmap = drawPixmap( item->frequency(), emptyList, item ); + item->setPixmap( pixmap ); + } } } @@ -301,7 +314,7 @@ */ void RadioFrequencyStrip::handleLongLeftButton() { - emit seekRequested( Seeking::Down ); + emit seekRequested( Seek::Down ); } /*! @@ -317,36 +330,49 @@ */ void RadioFrequencyStrip::handleLongRightButton() { - emit seekRequested( Seeking::Up ); + emit seekRequested( Seek::Up ); } /*! * Private slot + * */ -void RadioFrequencyStrip::toggleButtons() +void RadioFrequencyStrip::toggleManualSeek() { - if ( mButtonsVisible ) { + mManualSeekMode = !mManualSeekMode; + emit manualSeekChanged( mManualSeekMode ); + + if ( mManualSeekMode ) { + grabMouse(); hideButtons(); + mManualSeekTimerId = startTimer( MANUALSEEK_SIGNAL_DELAY ); } else { + ungrabMouse(); showButtons(); + killTimer( mManualSeekTimerId ); + mManualSeekTimerId = 0; } } /*! * Private slot */ -void RadioFrequencyStrip::checkIllegalPos() +void RadioFrequencyStrip::handleScrollingEnd() { // Check if the selector is in the invalid area where the strip loops around const int selectorPosition = selectorPos(); - if ( !mPositions.contains( selectorPosition ) ) { - if ( selectorPosition < mMaxWidth - KWidth + mSeparatorPos ) { - scrollToFrequency( mMaxFrequency, 500 ); - emitFrequencyChanged( mMaxFrequency ); - } else { - scrollToFrequency( mMinFrequency, 500 ); - emitFrequencyChanged( mMinFrequency ); + if ( mManualSeekMode ) { + if ( !mPositions.contains( selectorPosition ) ) { + if ( selectorPosition < mMaxWidth - ITEM_WIDTH + mSeparatorPos ) { + scrollToFrequency( mMaxFrequency, Scroll::Shortest, 500 ); + emit frequencyChanged( mMaxFrequency, TuneReason::ManualSeekUpdate, Scroll::Shortest ); + } else { + scrollToFrequency( mMinFrequency, Scroll::Shortest, 500 ); + emit frequencyChanged( mMinFrequency, TuneReason::ManualSeekUpdate, Scroll::Shortest ); + } } + + mManualSeekTimer->start( MANUALSEEK_END_TIMEOUT ); } } @@ -372,13 +398,15 @@ /*! * \reimp */ -void RadioFrequencyStrip::scrollPosChanged( QPointF newPosition ) +void RadioFrequencyStrip::scrollPosChanged() { - Q_UNUSED( newPosition ); - - if ( mUserIsScrolling ) { + if ( mManualSeekMode ) { const int pos = selectorPos(); - emitFrequencyChanged( mPositions.value( pos ) ); + const uint frequency = mPositions.value( pos ); + if ( frequency > 0 ) { + mFrequency = mPositions.value( pos ); + emit frequencyChanged( mFrequency, TuneReason::ManualSeekUpdate, Scroll::Shortest ); + } } } @@ -387,35 +415,34 @@ */ void RadioFrequencyStrip::resizeEvent ( QGraphicsSceneResizeEvent* event ) { - LOG_METHOD_ENTER; + LOG_METHOD; RadioStripBase::resizeEvent( event ); - mSelectorPos = event->newSize().width() / 2; - mSelectorImage->setOffset( mSelectorPos - (KIndicatorWidth / 2), 0.0 ); + initSelector(); + + const qreal height = event->newSize().height(); + const qreal width = event->newSize().width(); - const int stripHeight = event->newSize().height(); - if ( !mLeftButtonIcon.isNull() ) { - mLeftButton->resize( stripHeight, stripHeight ); - mLeftButton->setBackground( mLeftButtonIcon ); + mSelectorPos = width / 2; + mSelectorImage->setOffset( mSelectorPos - (INDICATOR_WIDTH / 2), 0.0 ); + + if ( mLeftButton && mRightButton ) { + mLeftButton->resize( height, height ); + mRightButton->resize( height, height ); + mRightButton->setPos( QPointF( width - height, 0 ) ); } - if ( !mRightButtonIcon.isNull() ) { - mRightButton->resize( stripHeight, stripHeight ); - mRightButton->setBackground( mRightButtonIcon ); - } - mRightButton->setPos( QPointF( size().width() - mRightButton->size().width(), 0 ) ); - - scrollToFrequency( mFrequency, 0 ); + scrollToFrequency( mFrequency ); } /*! * \reimp */ -void RadioFrequencyStrip::showEvent( QShowEvent* event ) -{ - Q_UNUSED( event ); - scrollToFrequency( mFrequency, 0 ); -} +//void RadioFrequencyStrip::showEvent( QShowEvent* event ) +//{ +// RadioStripBase::showEvent( event ); +// scrollToFrequency( mFrequency ); +//} /*! * \reimp @@ -425,10 +452,10 @@ if ( event->type() == HbEvent::ThemeChanged ) { // Update the foreground color and redraw each item mForegroundColor = Qt::white;// HbColorScheme::color( TEXT_COLOR_ATTRIBUTE ); - updateItems(); + updateAllItems(); } - return HbWidgetBase::changeEvent(event); + return RadioStripBase::changeEvent(event); } /*! @@ -437,9 +464,16 @@ void RadioFrequencyStrip::mousePressEvent( QGraphicsSceneMouseEvent* event ) { RadioStripBase::mousePressEvent( event ); - mUserIsScrolling = true; - mButtonTimer->stop(); - mButtonTimer->start( BUTTON_HIDE_TIMEOUT ); + + mManualSeekTimer->stop(); + if ( mManualSeekMode ) { + const bool insideStrip = rect().contains( event->pos() ); + if ( !insideStrip ) { + toggleManualSeek(); + } + } else { + mManualSeekTimer->start( MANUALSEEK_START_TIMEOUT ); + } } /*! @@ -447,41 +481,11 @@ */ void RadioFrequencyStrip::mouseReleaseEvent( QGraphicsSceneMouseEvent* event ) { - mUserIsScrolling = false; RadioStripBase::mouseReleaseEvent( event ); -// if ( !mIsPanGesture ) { -// const qreal touchDelta = event->pos().x() - mSelectorPos; -// const int touchPos = selectorPosition + touchDelta; -// const uint frequencyAtPos = mPositions.value( touchPos ); -// -// uint foundFrequency = 0; -// for ( int i = 0; i < 10; ++i ) { -// const uint delta = i * mFrequencyStepSize; -// FrequencyPos leftFreq = mFrequencies.value( frequencyAtPos - delta ); -// FrequencyPos rightFreq = mFrequencies.value( frequencyAtPos + delta ); -// -// if ( touchPos - leftFreq.mPosition > KTouchPosThreshold ) { -// break; -// } -// -// if ( leftFreq.mFavorite || leftFreq.mLocalStation ) { -// foundFrequency = frequencyAtPos - delta; -// break; -// } else if ( rightFreq.mFavorite || rightFreq.mLocalStation ) { -// foundFrequency = frequencyAtPos + delta; -// break; -// } -// } -// -// if ( foundFrequency > 0 ) { -// setFrequency( foundFrequency, 0 ); -// } -// } - - mButtonTimer->stop(); - if ( !mButtonsVisible ) { - mButtonTimer->start( BUTTON_SHOW_TIMEOUT ); + mManualSeekTimer->stop(); + if ( mManualSeekMode && !isScrolling() ) { + mManualSeekTimer->start( MANUALSEEK_END_TIMEOUT ); } } @@ -490,26 +494,39 @@ */ void RadioFrequencyStrip::gestureEvent( QGestureEvent* event ) { - if ( HbSwipeGesture* gesture = static_cast( event->gesture( Qt::SwipeGesture ) ) ) { - if ( gesture->state() == Qt::GestureFinished ) { - if ( gesture->horizontalDirection() == QSwipeGesture::Left ) { + HbSwipeGesture* swipeGesture = static_cast( event->gesture( Qt::SwipeGesture ) ); + if ( swipeGesture && !mManualSeekMode ) { + if ( swipeGesture->state() == Qt::GestureFinished ) { + if ( swipeGesture->horizontalDirection() == QSwipeGesture::Left ) { emit skipRequested( StationSkip::Next ); - } else if ( gesture->horizontalDirection() == QSwipeGesture::Right ) { + } else if ( swipeGesture->horizontalDirection() == QSwipeGesture::Right ) { emit skipRequested( StationSkip::Previous ); } } - } else { + } else if ( mManualSeekMode ) { RadioStripBase::gestureEvent( event ); } } /*! + * \reimp + */ +void RadioFrequencyStrip::timerEvent( QTimerEvent* event ) +{ + Q_UNUSED( event ); + if ( mLastReportedFrequency != mFrequency ) { + mLastReportedFrequency = mFrequency; + emit frequencyChanged( mFrequency, TuneReason::ManualSeekTune, Scroll::Shortest ); + } +} + +/*! * */ void RadioFrequencyStrip::initModel() { - const uint minFreq = uint( qreal(mMinFrequency) / KOneHertz + KRounder ); - const uint maxFreq = uint( qreal(mMaxFrequency) / KOneHertz + 0.9 ); // always round up + const uint minFreq = uint( qreal(mMinFrequency) / ONE_HERTZ + ROUNDER ); + const uint maxFreq = uint( qreal(mMaxFrequency) / ONE_HERTZ + 0.9 ); // always round up QStringList list; QString freqText; @@ -521,13 +538,13 @@ mFrequencyItems.append( new RadioFrequencyItem( "" ) ); list.append( "" ); - mMaxWidth = list.count() * KWidth; + mMaxWidth = list.count() * ITEM_WIDTH; - mSeparatorPos = qreal(KWidth) / 2; - const uint minDrawableFreq = minFreq * KOneHertz - KHalfHertz;; - const uint maxDrawableFreq = maxFreq * KOneHertz + KHalfHertz; - mSeparatorPos += qreal( ( mMinFrequency - minDrawableFreq ) / 2 ) / KPixelInHz; - mSeparatorPos -= qreal( ( maxDrawableFreq - mMaxFrequency ) / 2 ) / KPixelInHz; + mSeparatorPos = qreal(ITEM_WIDTH) / 2; + const uint minDrawableFreq = minFreq * ONE_HERTZ - HALF_HERTZ;; + const uint maxDrawableFreq = maxFreq * ONE_HERTZ + HALF_HERTZ; + mSeparatorPos += qreal( ( mMinFrequency - minDrawableFreq ) / 2 ) / PIXEL_IN_HZ; + mSeparatorPos -= qreal( ( maxDrawableFreq - mMaxFrequency ) / 2 ) / PIXEL_IN_HZ; setModel( new QStringListModel( list, this ) ); } @@ -537,10 +554,10 @@ */ void RadioFrequencyStrip::initSelector() { - QPixmap selectorPixmap = QPixmap( QSize( KSelectorWidth, KHeight ) ); + QPixmap selectorPixmap = QPixmap( QSize( SELECTOR_WIDTH, (int)size().height() ) ); selectorPixmap.fill( Qt::red ); mSelectorImage->setPixmap( selectorPixmap ); - mSelectorImage->setZValue( KSelectorZPos ); + mSelectorImage->setZValue( SELECTOR_Z_POS ); } /*! @@ -572,17 +589,23 @@ */ void RadioFrequencyStrip::initButtons() { - mLeftButton->setZValue( KSelectorZPos ); + mLeftButton->setZValue( SELECTOR_Z_POS ); mLeftButton->setObjectName( LEFT_BUTTON ); - mRightButton->setZValue( KSelectorZPos ); + mRightButton->setZValue( SELECTOR_Z_POS ); mRightButton->setObjectName( RIGHT_BUTTON ); + const qreal height = size().height(); + const qreal width = size().width(); + mLeftButton->resize( height, height ); + mRightButton->resize( height, height ); + mRightButton->setPos( QPointF( width - height, 0 ) ); + QEffectList effectList; - effectList.append( EffectInfo( mLeftButton, ":/effects/slide_to_left.fxml", KSlideToLeft ) ); - effectList.append( EffectInfo( mLeftButton, ":/effects/slide_from_left.fxml", KSlideFromLeft ) ); - effectList.append( EffectInfo( mRightButton, ":/effects/slide_to_right.fxml", KSlideToRight ) ); - effectList.append( EffectInfo( mRightButton, ":/effects/slide_from_right.fxml", KSlideFromRight ) ); - RadioUiUtilities::addEffects( effectList ); + effectList.append( EffectInfo( mLeftButton, ":/effects/slide_to_left.fxml", SLIDE_TO_LEFT ) ); + effectList.append( EffectInfo( mLeftButton, ":/effects/slide_from_left.fxml", SLIDE_FROM_LEFT ) ); + effectList.append( EffectInfo( mRightButton, ":/effects/slide_to_right.fxml", SLIDE_TO_RIGHT ) ); + effectList.append( EffectInfo( mRightButton, ":/effects/slide_from_right.fxml", SLIDE_FROM_RIGHT ) ); + RadioUtil::addEffects( effectList ); } /*! @@ -597,13 +620,43 @@ /*! * */ -void RadioFrequencyStrip::updateFavorites( RadioFrequencyItem* item ) +void RadioFrequencyStrip::updateStationsInRange( int first, int last, bool stationRemoved ) +{ + if ( RadioUtil::scanStatus() != Scan::ScanningInMainView ) { + RadioStationModel& model = mUiEngine->stationModel(); + uint frequency = 0; + for ( int i = first; i <= last; ++i ) { + frequency = model.data( model.index( i, 0, QModelIndex() ), + RadioRole::RadioStationRole ).value().frequency(); + if ( mFrequencies.contains( frequency ) ) { + FrequencyPos pos = mFrequencies.value( frequency ); + updateItem( pos.mItem, 0, stationRemoved ? frequency : 0 ); + } + } + } +} + +/*! + * + */ +void RadioFrequencyStrip::updateItem( RadioFrequencyItem* item, uint upperRange, uint ignoredFrequency ) { if ( item ) { uint frequency = item->frequency(); QList stations; + + if ( upperRange == 0 ) { + upperRange = frequency + HALF_HERTZ; + } + if ( mUiEngine ) { - stations = mUiEngine->stationsInRange( frequency - KHalfHertz, frequency + KHalfHertz ); + stations = mUiEngine->stationsInRange( frequency - HALF_HERTZ, upperRange ); + for ( int i = stations.count() - 1; ignoredFrequency > 0 && i >= 0; --i ) { + if ( stations[i].frequency() == ignoredFrequency ) { + stations.removeAt( i ); + break; + } + } } QPixmap pixmap = drawPixmap( frequency, stations, item ); @@ -620,10 +673,10 @@ /*! * */ -void RadioFrequencyStrip::updateItems() +void RadioFrequencyStrip::updateAllItems() { foreach ( RadioFrequencyItem* item, mFrequencyItems ) { - updateFavorites( item ); + updateItem( item ); } } @@ -632,7 +685,7 @@ */ QPixmap RadioFrequencyStrip::drawPixmap( uint frequency, QList stations, RadioFrequencyItem* item ) { - QPixmap pixmap( KWidth, KHeight ); + QPixmap pixmap( PIXMAP_WIDTH, mItemHeight ); pixmap.fill( Qt::transparent ); QPainter painter( &pixmap ); QPen normalPen = painter.pen(); @@ -641,71 +694,75 @@ painter.setPen( normalPen ); if ( frequency == 0 ) { - painter.drawLine( makeTab( mSeparatorPos - 1 + KRounder, KHeight ) ); - painter.drawLine( makeTab( mSeparatorPos + KRounder, KHeight ) ); + painter.drawLine( makeTab( mSeparatorPos - 1 + ROUNDER, mItemHeight ) ); + painter.drawLine( makeTab( mSeparatorPos + ROUNDER, mItemHeight ) ); return pixmap; } - const QString itemText = QString::number( frequency / KOneHertz ); - const uint startFrequency = frequency - KHalfHertz; - const uint endFrequency = startFrequency + KOneHertz; - const uint roundedMin = int( qreal(mMinFrequency) / KOneHertz + KRounder ); - const uint freq = frequency / KOneHertz; + const QString itemText = QString::number( frequency / ONE_HERTZ ); + const uint startFrequency = frequency - HALF_HERTZ; + const uint endFrequency = startFrequency + ONE_HERTZ; + const uint roundedMin = int( qreal(mMinFrequency) / ONE_HERTZ + ROUNDER ); + const uint freq = frequency / ONE_HERTZ; const int diff = freq - roundedMin; - const qreal startPixel = diff * KWidth; + const qreal startPixel = diff * ITEM_WIDTH; qreal pixels = 0.0; - QFont painterFont = painter.font(); - painterFont.setPointSize( 6 ); - painter.setFont( painterFont ); + const qreal leftOverlap = PIXMAP_OVERLAP / 2; - const int charWidth = painter.fontMetrics().averageCharWidth(); for ( uint frequency = startFrequency; frequency <= endFrequency; frequency += mFrequencyStepSize ) { if ( frequency < mMinFrequency || frequency > mMaxFrequency ) { continue; } - pixels = qreal( frequency - startFrequency ) / KPixelInHz; - if ( frequency % KOneHertz == 0 ) { + pixels = qreal( frequency - startFrequency ) / PIXEL_IN_HZ; + if ( frequency % ONE_HERTZ == 0 ) { // Draw the high frequency tab and the frequency text for the even number - painter.drawLine( makeTab( pixels, KTabHeightBig ) ); - const int textPosX = pixels - itemText.length() * charWidth / 2; + normalPen.setWidth( 3 ); + painter.setPen( normalPen ); + painter.drawLine( makeTab( pixels + leftOverlap - 1, TAB_HEIGHT_BIG ) ); + normalPen.setWidth( 1 ); + painter.setPen( normalPen ); + + // Draw the frequency text and its 00 decimals + painter.setFont( DECIMAL_FONT ); + const int decimalWidth = painter.fontMetrics().width( DECIMAL_TEXT ); + const int decimalSpace = painter.fontMetrics().leftBearing( '.' ); + painter.setFont( FREQUENCY_FONT ); + const int frequencyWidth = painter.fontMetrics().width( itemText ); + const int textPosX = int( pixels + leftOverlap - ( frequencyWidth + decimalSpace + decimalWidth ) / 2 ); painter.drawText( QPoint( textPosX, 20 ), itemText ); + painter.setFont( DECIMAL_FONT ); + painter.drawText( QPoint( textPosX + frequencyWidth + decimalSpace, 20 ), DECIMAL_TEXT ); - } else if ( frequency % KOneTabInHz == 0 ) { + } else if ( frequency % ONE_TAB_IN_HZ == 0 ) { // Draw the low frequency tab for the uneven number - painter.drawLine( makeTab( pixels, KTabHeightSmall ) ); + painter.drawLine( makeTab( pixels + leftOverlap, TAB_HEIGHT_SMALL ) ); } - addFrequencyPos( startPixel + pixels + KRounder, frequency, item ); + addFrequencyPos( int( startPixel + pixels + ROUNDER ), frequency, item ); } // Draw favorites and local stations favoritePen.setColor( Qt::yellow ); - const int markerYPos = KHeight - 20; + const int markerYPos = mItemHeight - 28; foreach ( const RadioStation& station, stations ) { const uint frequency = station.frequency(); - pixels = qreal( frequency - startFrequency ) / KPixelInHz; + pixels = qreal( frequency - startFrequency ) / PIXEL_IN_HZ; if ( station.isFavorite() ) { - favoritePen.setWidth( KTabWidthFavorite ); + favoritePen.setWidth( PEN_WIDTH_FAVORITE ); painter.setPen( favoritePen ); - painter.drawEllipse( pixels - 3, markerYPos - 3, 6, 6 ); -// painter.drawPixmap( pixels - 10, 20, 20, 20, mFavoriteIcon.pixmap() ); + painter.drawEllipse( int( pixels + leftOverlap - 3 ), markerYPos - 3, 6, 6 ); } else if ( station.isType( RadioStation::LocalStation ) ) { -// painter.setPen( normalPen ); -// painter.drawLine( pixels, // Start X -// KHeight - KTabHeightFavorite, // Start Y -// pixels, // End X -// KHeight ); // End Y favoritePen.setWidth( 1 ); painter.setPen( favoritePen ); - painter.drawEllipse( pixels - 4, markerYPos - 4, 8, 8 ); + painter.drawEllipse( int( pixels + leftOverlap - 4 ), markerYPos - 4, 8, 8 ); } } @@ -715,11 +772,20 @@ /*! * */ +QLineF RadioFrequencyStrip::makeTab( qreal pos, int height ) +{ + return QLineF( pos, mItemHeight - height, pos, mItemHeight ); +} + +/*! + * + */ void RadioFrequencyStrip::emitFrequencyChanged( uint frequency ) { if ( frequency > 0 && frequency != mFrequency ) { mFrequency = frequency; - emit frequencyChanged( frequency, TuneReason::FrequencyStrip ); + //TOD: Get direction + emit frequencyChanged( frequency, TuneReason::FrequencyStrip, Scroll::Shortest ); } } @@ -728,23 +794,54 @@ */ int RadioFrequencyStrip::selectorPos() const { - const int pos = ( -contentWidget()->x() + mSelectorPos ) + KRounder; + const int pos = int( -contentWidget()->x() + mSelectorPos + ROUNDER ); return pos % mMaxWidth; } /*! * */ -void RadioFrequencyStrip::scrollToFrequency( uint frequency, int time ) +void RadioFrequencyStrip::scrollToFrequency( uint frequency, Scroll::Direction direction, int time, TuneReason::Reason reason ) { - // Find the shortest route to the requested frequency. - const int pos = ( -contentWidget()->x() + mSelectorPos ) + KRounder; - if ( pos >= mMaxWidth - KWidth + mSeparatorPos ) { - const qreal newPos = qreal( mFrequencies.value( frequency ).mPosition ) - mSelectorPos + mMaxWidth; - scrollContentsTo( QPointF( newPos, 0 ), time ); - } else { - scrollContentsTo( QPointF( qreal( mFrequencies.value( frequency ).mPosition ) - mSelectorPos, 0 ), time ); + int targetFreqPos = mFrequencies.value( frequency ).mPosition; + const int currentFreqPos = mFrequencies.value( mFrequency ).mPosition; + const int currentPos = int( -contentWidget()->x() + mSelectorPos + ROUNDER ); + const bool isInSecondHalf = currentPos >= mMaxWidth - ITEM_WIDTH + mSeparatorPos; + + // Special case: When there is only one favorite and the user presses skip + // the strip must scroll around to the same frequency. + if ( mFrequency == frequency && reason == TuneReason::Skip ) { + if ( direction == Scroll::Left ) { + targetFreqPos += mMaxWidth; + } else { + targetFreqPos -= mMaxWidth; + } } + + mFrequency = frequency; + + qreal newPos = targetFreqPos; + if ( direction == Scroll::Left ) { + + if ( currentFreqPos > targetFreqPos ) { + newPos += mMaxWidth; + } + + } else if ( direction == Scroll::Right ) { + + if ( currentFreqPos < targetFreqPos ) { + newPos -= mMaxWidth; + } + + } + + if ( isInSecondHalf ) { + newPos += mMaxWidth; + } + + newPos -= mSelectorPos - ROUNDER; + + scrollContentsTo( QPointF( newPos, 0 ), time ); } /*! @@ -752,9 +849,8 @@ */ void RadioFrequencyStrip::hideButtons() { - mButtonsVisible = false; - HbEffect::start( mLeftButton, KSlideToLeft ); - HbEffect::start( mRightButton, KSlideToRight ); + HbEffect::start( mLeftButton, SLIDE_TO_LEFT ); + HbEffect::start( mRightButton, SLIDE_TO_RIGHT ); } /*! @@ -762,7 +858,6 @@ */ void RadioFrequencyStrip::showButtons() { - mButtonsVisible = true; - HbEffect::start( mLeftButton, KSlideFromLeft ); - HbEffect::start( mRightButton, KSlideFromRight ); + HbEffect::start( mLeftButton, SLIDE_FROM_LEFT ); + HbEffect::start( mRightButton, SLIDE_FROM_RIGHT ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiohistoryview.cpp --- a/radioapp/radiowidgets/src/radiohistoryview.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiohistoryview.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -56,7 +56,7 @@ * */ RadioHistoryView::RadioHistoryView() : - RadioViewBase( false ), + RadioViewBase(), mHistoryList( 0 ), mAllSongsButton( 0 ), mTaggedSongsButton( 0 ), @@ -110,15 +110,17 @@ * Private slot * */ -void RadioHistoryView::deckButtonPressed() +void RadioHistoryView::updateViewMode() { + QString section = DOCML::HV_SECTION_HISTORY_MODE; + bool showTagged = false; + if ( sender() == mTaggedSongsButton ) { - loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_FAVORITE_MODE ); - } else { - loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE ); + section = DOCML::HV_SECTION_FAVORITE_MODE; + showTagged = true; } - const bool showTagged = mTaggedSongsButton->isChecked(); + loadSection( DOCML::FILE_HISTORYVIEW, section ); historyModel().setShowTagged( showTagged ); updateVisibilities(); @@ -141,7 +143,7 @@ */ void RadioHistoryView::updateVisibilities() { - const int itemCount = mMainWindow->uiEngine().historyModel().rowCount(); + const int itemCount = mUiEngine->historyModel().rowCount(); loadSection( DOCML::FILE_HISTORYVIEW, itemCount ? DOCML::HV_SECTION_SHOW_LIST : DOCML::HV_SECTION_HIDE_LIST ); } @@ -165,7 +167,7 @@ } if ( HbAction* searchAction = mUiLoader->findObject( DOCML::HV_NAME_CONTEXT_SEARCH ) ) { - //TODO: Check if "search from other store" should be available + //TODO: Add support for other music store searchAction->setVisible( false ); } @@ -181,11 +183,21 @@ * Private slot * */ +void RadioHistoryView::handleLongPress( HbAbstractViewItem* item ) +{ + showContextMenu( item->modelIndex() ); +} + +/*! + * Private slot + * + */ void RadioHistoryView::toggleTagging() { historyModel().toggleTagging( *mSelectedItem, mCurrentRow ); mSelectedItem->reset(); mCurrentRow = -1; + updateVisibilities(); } /*! @@ -196,7 +208,7 @@ { QString msg = "To be implemented: Open ovi store. Artist: %1, Title: %2"; HbMessageBox::information( msg.arg( mSelectedItem->artist() ).arg( mSelectedItem->title() ) ); - mMainWindow->uiEngine().openMusicStore( *mSelectedItem ); + mUiEngine->openMusicStore( *mSelectedItem ); } /*! @@ -205,9 +217,7 @@ */ void RadioHistoryView::openOtherStore() { - QString msg = "To be implemented: Open other store. Artist: %1, Title: %2"; - HbMessageBox::information( msg.arg( mSelectedItem->artist() ).arg( mSelectedItem->title() ) ); - mMainWindow->uiEngine().openMusicStore( *mSelectedItem, RadioUiEngine::OtherStore ); + mUiEngine->openMusicStore( *mSelectedItem, RadioUiEngine::OtherStore ); } /*! @@ -230,8 +240,8 @@ Song song = KRecognizedSongs[mSongIndex++]; mSongIndex %= KSongsCount; - RadioStation station = mMainWindow->uiEngine().stationModel().currentStation(); - mMainWindow->uiEngine().historyModel().addItem( song.mArtist, song.mTitle, station ); + RadioStation station = mUiEngine->stationModel().currentStation(); + mUiEngine->historyModel().addItem( song.mArtist, song.mTitle, station ); } /*! @@ -241,9 +251,9 @@ void RadioHistoryView::init() { LOG_METHOD; - mInitialized = true; + loadSection( DOCML::FILE_HISTORYVIEW, DOCML::SECTION_LAZY_LOAD ); - RadioHistoryModel* historyModel = &mMainWindow->uiEngine().historyModel(); + RadioHistoryModel* historyModel = &mUiEngine->historyModel(); historyModel->setShowDetails( mOrientation == Qt::Horizontal ); if ( !mNonTaggedIcon.isNull() && !mTaggedIcon.isNull() ) { @@ -260,27 +270,38 @@ mTaggedSongsButton = mUiLoader->findObject( DOCML::HV_NAME_TAGGED_SONGS_BUTTON ); if ( HbAction* clearListAction = mUiLoader->findObject( DOCML::HV_NAME_CLEAR_LIST_ACTION ) ) { - connectAndTest( clearListAction, SIGNAL(triggered()), + Radio::connect( clearListAction, SIGNAL(triggered()), this, SLOT(clearList()) ); } - connectAndTest( mTaggedSongsButton, SIGNAL(triggered() ), - this, SLOT(deckButtonPressed() ) ); - connectAndTest( mAllSongsButton, SIGNAL(triggered() ), - this, SLOT(deckButtonPressed() ) ); - connectAndTest( historyModel, SIGNAL(itemAdded() ), - this, SLOT(updateVisibilities() ) ); + Radio::connect( mTaggedSongsButton, SIGNAL(triggered()), + this, SLOT(updateViewMode()) ); + Radio::connect( mAllSongsButton, SIGNAL(triggered()), + this, SLOT(updateViewMode()) ); + Radio::connect( historyModel, SIGNAL(itemAdded()), + this, SLOT(updateVisibilities()) ); + Radio::connect( mHistoryList, SIGNAL(activated(QModelIndex)), + this, SLOT(showContextMenu(QModelIndex)) ); + Radio::connect( mHistoryList, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), + this, SLOT(handleLongPress(HbAbstractViewItem*)) ); - loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE ); - updateVisibilities(); - + connectCommonMenuItem( MenuItem::Exit ); connectCommonMenuItem( MenuItem::UseLoudspeaker ); + // Context menu actions + connectXmlElement( DOCML::HV_NAME_TOGGLE_TAG_ACTION, SIGNAL(triggered()), + this, SLOT(toggleTagging()) ); + connectXmlElement( DOCML::HV_NAME_OVI_STORE_ACTION, SIGNAL(triggered()), + this, SLOT(openOviStore()) ); + connectXmlElement( DOCML::HV_NAME_OTHER_STORE_ACTION, SIGNAL(triggered()), + this, SLOT(openOtherStore()) ); initBackAction(); + updateViewMode(); + // BEGIN TEMPORARY TEST CODE if ( HbAction* addSongsAction = mUiLoader->findObject( "hv:add_songs_action" ) ) { - connectAndTest( addSongsAction, SIGNAL(triggered()), + Radio::connect( addSongsAction, SIGNAL(triggered()), this, SLOT(addSongs()) ); } // END TEMPORARY TEST CODE @@ -292,8 +313,10 @@ */ void RadioHistoryView::setOrientation() { - RadioHistoryModel& model = mMainWindow->uiEngine().historyModel(); - model.setShowDetails( mOrientation == Qt::Horizontal ); + if ( mUiEngine ) { + RadioHistoryModel& model = mUiEngine->historyModel(); + model.setShowDetails( mOrientation == Qt::Horizontal ); + } } /*! @@ -302,7 +325,8 @@ */ void RadioHistoryView::userAccepted() { - mMainWindow->uiEngine().historyModel().removeAll(); + const bool removeTagged = mTaggedSongsButton->isChecked(); + mUiEngine->historyModel().removeAll( removeTagged ); updateVisibilities(); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiomainview.cpp --- a/radioapp/radiowidgets/src/radiomainview.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiomainview.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -17,9 +17,14 @@ // System includes #include -#include #include #include +#include +#include +#include +#include +#include +#include // Temporarily here until docml supports frame items // User includes #include "radiowindow.h" @@ -29,11 +34,27 @@ #include "radiologger.h" #include "radiostationcarousel.h" #include "radiouiloader.h" -#include "radiouiutilities.h" +#include "radioutil.h" #include "radiostationmodel.h" #include "radiofrequencyscanner.h" // Constants +const QLatin1String RADIO_MAINVIEW_ACTIVITY_ID( "FMRadioMainView" ); + +/*! + * Temporary convenience function to set frame background until DOCML supports frame items + */ +static void initFrameBackground( RadioUiLoader& uiLoader, + const QString backgroundName, + HbFrameDrawer::FrameType frameType ) +{ + if ( HbLabel* backgroundLabel = uiLoader.findObject( backgroundName ) ) { + QString backgroundName = backgroundLabel->icon().iconName(); + HbFrameItem* frameItem = new HbFrameItem( backgroundName, frameType, backgroundLabel ); + backgroundLabel->setBackgroundItem( frameItem ); + } +} + /*! * @@ -41,7 +62,9 @@ RadioMainView::RadioMainView() : RadioViewBase( false ), mCarousel( NULL ), - mFrequencyStrip( NULL ) + mFrequencyStrip( NULL ), + mSkippingAction( NULL ), + mAlternateSkipping( false ) { } @@ -62,7 +85,15 @@ loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_SCANNING ); } else { loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_NORMAL ); + updateFavoriteButton(); mFrequencyScanner.take(); + +// const bool firsTimeStart = mUiEngine->isFirstTimeStart(); + const bool firsTimeStart = false; // TODO! RadioServer terminates. Fix available in NCP 25 or 27. + const int rowCount = mUiEngine->stationModel().rowCount(); + if ( firsTimeStart && rowCount != 0 ) { + mUiEngine->setFirstTimeStartPerformed( true ); + } } } @@ -70,70 +101,105 @@ * \reimp * */ +void RadioMainView::preLazyLoadInit() +{ + initFrameBackground( *mUiLoader, DOCML::MV_NAME_FREQUENCY_BACKGROUND, HbFrameDrawer::NinePieces ); + + initFrameBackground( *mUiLoader, DOCML::MV_NAME_CAROUSEL_BACKGROUND, HbFrameDrawer::NinePieces ); +} + +/*! + * \reimp + * + */ void RadioMainView::init() { LOG_METHOD; - mInitialized = true; - mCarousel = mUiLoader->findObject( DOCML::MV_NAME_STATION_CAROUSEL ); - mCarousel->init( *mUiLoader, &mMainWindow->uiEngine() ); + loadSection( DOCML::FILE_MAINVIEW, DOCML::SECTION_LAZY_LOAD ); + initFrameBackground( *mUiLoader, DOCML::MV_NAME_CAROUSEL_OVERLAY, HbFrameDrawer::NinePieces ); - // Note! UI connections are already made in the DocML file. Here we need to connect UI to engine - RadioUiEngine* engine = &mMainWindow->uiEngine(); + mCarousel = mUiLoader->findObject( DOCML::MV_NAME_STATION_CAROUSEL ); + mCarousel->init( *mUiLoader, mUiEngine.data() ); + mFrequencyStrip = mUiLoader->findObject( DOCML::MV_NAME_FREQUENCY_STRIP ); - mFrequencyStrip->init( engine ); + mFrequencyStrip->init( mUiEngine.data(), *mUiLoader ); - RadioStationModel* stationModel = &engine->stationModel(); + RadioStationModel* stationModel = &mUiEngine->stationModel(); - connectAndTest( mFrequencyStrip, SIGNAL(frequencyChanged(uint,int)), - this, SLOT(setFrequencyFromWidget(uint,int)) ); - connectAndTest( mCarousel, SIGNAL(frequencyChanged(uint,int)), - this, SLOT(setFrequencyFromWidget(uint,int)) ); - connectAndTest( engine, SIGNAL(tunedToFrequency(uint,int)), + Radio::connect( mFrequencyStrip, SIGNAL(frequencyChanged(uint,int,int)), + this, SLOT(setFrequencyFromWidget(uint,int,int)) ); + Radio::connect( mCarousel, SIGNAL(frequencyChanged(uint,int,int)), + this, SLOT(setFrequencyFromWidget(uint,int,int)) ); + Radio::connect( mUiEngine.data(), SIGNAL(tunedToFrequency(uint,int)), this, SLOT(setFrequencyFromEngine(uint,int)) ); + Radio::connect( mFrequencyStrip, SIGNAL(manualSeekChanged(bool)), + this, SLOT(setManualSeekMode(bool)) ); - connectAndTest( mFrequencyStrip, SIGNAL(skipRequested(int)), + Radio::connect( mFrequencyStrip, SIGNAL(skipRequested(int)), this, SLOT(skip(int)) ); - connectAndTest( mFrequencyStrip, SIGNAL(seekRequested(int)), - engine, SLOT(seekStation(int)) ); - - connectAndTest( stationModel, SIGNAL(favoriteChanged(RadioStation)), - mFrequencyStrip, SLOT(updateFavorite(RadioStation)) ); + Radio::connect( mCarousel, SIGNAL(skipRequested(int)), + this, SLOT(skip(int)) ); + Radio::connect( mFrequencyStrip, SIGNAL(seekRequested(int)), + mUiEngine.data(), SLOT(seekStation(int)) ); - connectAndTest( engine, SIGNAL(seekingStarted(int)), + Radio::connect( mUiEngine.data(), SIGNAL(seekingStarted(int)), this, SLOT(seekingStarted()) ); - connectAndTest( engine, SIGNAL(antennaStatusChanged(bool)), - mCarousel, SLOT(updateAntennaStatus(bool)) ); - connectAndTest( engine, SIGNAL(audioRouteChanged(bool)), + Radio::connect( mUiEngine.data(), SIGNAL(antennaStatusChanged(bool)), + this, SLOT(updateAntennaStatus(bool)) ); + Radio::connect( mUiEngine.data(), SIGNAL(audioRouteChanged(bool)), this, SLOT(updateAudioRoute(bool)) ); - HbPushButton* stationsButton = mUiLoader->findWidget( DOCML::MV_NAME_STATIONS_BUTTON ); - connectAndTest( stationsButton, SIGNAL(clicked()), - mMainWindow, SLOT(activateStationsView()) ); + Radio::connect( stationModel, SIGNAL(favoriteChanged(RadioStation)), + this, SLOT(handleFavoriteChange(RadioStation)) ); + + connectXmlElement( DOCML::MV_NAME_STATIONS_BUTTON, SIGNAL(clicked()), + mMainWindow, SLOT(activateStationsView()) ); + + connectXmlElement( DOCML::MV_NAME_FAVORITE_BUTTON, SIGNAL(clicked()), + this, SLOT(toggleFavorite()) ); - HbPushButton* scanButton = mUiLoader->findWidget( DOCML::MV_NAME_SCAN_BUTTON ); - connectAndTest( scanButton, SIGNAL(clicked()), - this, SLOT(toggleScanning()) ); + connectXmlElement( DOCML::MV_NAME_SPEAKER_BUTTON, SIGNAL(clicked()), + mUiEngine.data(), SLOT(toggleAudioRoute()) ); - HbPushButton* loudspeakerButton = mUiLoader->findWidget( DOCML::MV_NAME_SPEAKER_BUTTON ); - connectAndTest( loudspeakerButton, SIGNAL(clicked()), - engine, SLOT(toggleAudioRoute()) ); + connectXmlElement( DOCML::MV_NAME_SCAN_ACTION, SIGNAL(triggered()), + this, SLOT(toggleScanning()) ); + + updateFavoriteButton(); + + connectCommonMenuItem( MenuItem::Exit ); // "Play history" menu item connectViewChangeMenuItem( DOCML::MV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) ); - updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() ); + //TODO: REMOVE. THIS IS TEMPORARY TEST CODE + toggleSkippingMode(); + menu()->addAction( "-- Reset start count", this, SLOT(resetFirstTimeCount()) ); + // END TEMPORARY TEST CODE + + updateAudioRoute( mUiEngine->isUsingLoudspeaker() ); // Add "back" navigation action to put the application to background HbAction* backAction = new HbAction( Hb::BackNaviAction, this ); - connectAndTest( backAction, SIGNAL(triggered()), +#ifdef BUILD_WIN32 + Radio::connect( backAction, SIGNAL(triggered()), + this, SLOT(quit()) ); +#else + Radio::connect( backAction, SIGNAL(triggered()), mMainWindow, SLOT(lower()) ); +#endif // BUILD_WIN32 setNavigationAction( backAction ); - const bool firsTimeStart = engine->isFirstTimeStart(); - const int rowCount = engine->stationModel().rowCount(); +// const bool firsTimeStart = mUiEngine->isFirstTimeStart(); + const bool firsTimeStart = false; // TODO! RadioServer terminates. Fix available in NCP 25 or 27. + const int rowCount = mUiEngine->stationModel().rowCount(); if ( firsTimeStart && rowCount == 0 ){ QTimer::singleShot( 100, this, SLOT(toggleScanning()) ); } + + Radio::connect( static_cast( qApp ), SIGNAL(aboutToQuit()), + this, SLOT(saveActivity()) ); + + emit applicationReady(); } /*! @@ -143,6 +209,9 @@ void RadioMainView::setOrientation() { loadSection( DOCML::FILE_MAINVIEW, mMainWindow->orientationSection() ); + if ( mCarousel && mFrequencyStrip ) { + mCarousel->setFrequency( mFrequencyStrip->frequency(), TuneReason::Unspecified ); + } } /*! @@ -151,23 +220,41 @@ */ void RadioMainView::userAccepted() { - mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) ); + mFrequencyScanner.reset( new RadioFrequencyScanner( *mUiEngine, this ) ); mFrequencyScanner->startScanning(); } /*! + * \reimp + * + */ +bool RadioMainView::eventFilter( QObject* watched, QEvent* event ) +{ + if ( event->type() == QEvent::ApplicationDeactivate ) { + mFrequencyStrip->cancelManualSeek(); + } + + return RadioViewBase::eventFilter( watched, event ); +} + +/*! * Private slot */ -void RadioMainView::setFrequencyFromWidget( uint frequency, int reason ) +void RadioMainView::setFrequencyFromWidget( uint frequency, int reason, int direction ) { - LOG_FORMAT( "RadioMainView::setFrequencyFromWidget: %u, reason = %d", frequency, reason ); - if ( !RadioUiUtilities::isScannerAlive() ) { +// LOG_FORMAT( "RadioMainView::setFrequencyFromWidget: %u, reason = %d", frequency, reason ); + if ( !RadioUtil::isScannerAlive() ) { if ( reason == TuneReason::FrequencyStrip ) { - mCarousel->setFrequency( frequency, reason ); - mMainWindow->uiEngine().tuneWithDelay( frequency, reason ); +// mCarousel->setFrequency( frequency, reason, direction ); +// mUiEngine->tuneWithDelay( frequency, reason ); + } else if ( reason == TuneReason::ManualSeekUpdate ) { + mCarousel->setFrequency( frequency, reason, RadioUtil::scrollDirection( direction ) ); + } else if ( reason == TuneReason::ManualSeekTune ) { + LOG_FORMAT( "--------Manual seek tune: %u", frequency ); + mUiEngine->setFrequency( frequency, reason ); } else if ( reason == TuneReason::StationCarousel ) { - mFrequencyStrip->setFrequency( frequency, reason ); - mMainWindow->uiEngine().tuneFrequency( frequency, reason ); + mFrequencyStrip->setFrequency( frequency, reason, RadioUtil::scrollDirection( direction ) ); + mUiEngine->setFrequency( frequency, reason ); } } } @@ -177,13 +264,15 @@ */ void RadioMainView::setFrequencyFromEngine( uint frequency, int reason ) { - if ( !RadioUiUtilities::isScannerAlive() ) { + LOG_FORMAT( "RadioMainView::setFrequencyFromEngine reason: %d", reason ); + if ( RadioUtil::scanStatus() != Scan::ScanningInMainView && !mFrequencyStrip->isInManualSeekMode() ) { mCarousel->clearInfoText(); + updateFavoriteButton(); if ( reason != TuneReason::FrequencyStrip && reason != TuneReason::StationCarousel && reason != TuneReason::Skip ) { - mCarousel->setFrequency( frequency, reason ); - mFrequencyStrip->setFrequency( frequency, reason ); + mCarousel->setFrequency( frequency, reason, Scroll::Shortest ); + mFrequencyStrip->setFrequency( frequency, reason, Scroll::Shortest ); } } } @@ -193,16 +282,48 @@ */ void RadioMainView::skip( int skipMode ) { - if ( ( skipMode == StationSkip::PreviousFavorite || skipMode == StationSkip::NextFavorite ) && - mMainWindow->uiEngine().stationModel().favoriteCount() == 0 ) { - mCarousel->setInfoText( CarouselInfoText::NoFavorites ); - } else { +// if ( !mAlternateSkipping && ( skipMode == StationSkip::PreviousFavorite || skipMode == StationSkip::NextFavorite ) && +// mUiEngine->stationModel().favoriteCount() == 0 ) { +// mCarousel->setInfoText( CarouselInfoText::NoFavorites ); +// } else { const uint currentFrequency = mFrequencyStrip->frequency(); - const uint frequency = mMainWindow->uiEngine().skipStation( static_cast( skipMode ), - currentFrequency); - mCarousel->setFrequency( frequency, TuneReason::Skip ); - mFrequencyStrip->setFrequency( frequency, TuneReason::Skip ); - } + RadioStation station; + mUiEngine->stationModel().findFrequency( currentFrequency, station ); + + if ( mAlternateSkipping ) { //TODO: Remove. Temporary test code + if ( sender() == mFrequencyStrip ) { + if ( skipMode == StationSkip::NextFavorite ) { + skipMode = StationSkip::Next; + } else if ( skipMode == StationSkip::PreviousFavorite ) { + skipMode = StationSkip::Previous; + } + } else if ( sender() == mCarousel ) { + if ( skipMode == StationSkip::Next ) { + skipMode = StationSkip::NextFavorite; + } else if ( skipMode == StationSkip::Previous ) { + skipMode = StationSkip::PreviousFavorite; + } + } + } + + const uint frequency = mUiEngine->skipStation( static_cast( skipMode ), + currentFrequency); + + if ( currentFrequency != frequency || station.isFavorite() ) { + const Scroll::Direction direction = RadioUtil::scrollDirectionFromSkipMode( skipMode ); + mCarousel->setFrequency( frequency, TuneReason::Skip, direction ); + mFrequencyStrip->setFrequency( frequency, TuneReason::Skip, direction ); + } +// } +} + +/*! + * Private slot + */ +void RadioMainView::openStationsView() +{ + mFrequencyStrip->cancelManualSeek(); + mMainWindow->activateStationsView(); } /*! @@ -210,10 +331,11 @@ */ void RadioMainView::toggleScanning() { + mFrequencyStrip->cancelManualSeek(); if ( mFrequencyScanner ) { mFrequencyScanner->cancelScanning(); } else { - const int rowCount = mMainWindow->uiEngine().stationModel().rowCount(); + const int rowCount = mUiEngine->stationModel().rowCount(); if ( rowCount > 0 ) { askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) ); } else { @@ -225,9 +347,21 @@ /*! * Private slot */ +void RadioMainView::toggleFavorite() +{ + if ( RadioUtil::isScannerAlive() ) { + toggleScanning(); + } else { + mUiEngine->stationModel().setData( QModelIndex(), mFrequencyStrip->frequency(), RadioRole::ToggleFavoriteRole ); + } +} + +/*! + * Private slot + */ void RadioMainView::seekingStarted() { - if ( !RadioUiUtilities::isScannerAlive() ) { + if ( !RadioUtil::isScannerAlive() ) { mCarousel->setInfoText( CarouselInfoText::Seeking ); } } @@ -235,14 +369,137 @@ /*! * Private slot */ +void RadioMainView::updateAntennaStatus( bool connected ) +{ + if ( !connected ) { + mFrequencyStrip->cancelManualSeek(); + } + + HbAction* scanAction = mUiLoader->findObject( DOCML::MV_NAME_SCAN_ACTION ); + scanAction->setEnabled( connected ); + mCarousel->updateAntennaStatus( connected ); +} + +/*! + * Private slot + */ void RadioMainView::updateAudioRoute( bool loudspeaker ) { HbPushButton* loudspeakerButton = mUiLoader->findWidget( DOCML::MV_NAME_SPEAKER_BUTTON ); if ( loudspeaker ) { - loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker_off.svg" ) ); + loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker_off" ) ); loudspeakerButton->setText( hbTrId( "txt_rad_button_deactivate_loudspeaker" ) ); } else { - loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker.svg" ) ); + loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker" ) ); loudspeakerButton->setText( hbTrId( "txt_rad_button_activate_loudspeaker" ) ); } } + +/*! + * Private slot + */ +void RadioMainView::setManualSeekMode( bool manualSeekActive ) +{ + if ( manualSeekActive ) { + qApp->installEventFilter( this ); + + mUiLoader->findWidget( DOCML::MV_NAME_FAVORITE_BUTTON )->setText( hbTrId( "txt_rad_button_add_to_favourites" ) ); + } else { + qApp->removeEventFilter( this ); + + updateFavoriteButton(); + } + + mUiEngine->setManualSeekMode( manualSeekActive ); + + mCarousel->setManualSeekMode( manualSeekActive ); +} + +/*! + * Private slot + */ +void RadioMainView::handleFavoriteChange( const RadioStation& station ) +{ + mFrequencyStrip->updateFavorite( station ); + updateFavoriteButton(); +} + +/*! + * Private slot + */ +void RadioMainView::saveActivity() +{ + HbActivityManager* activityManager = qobject_cast(qApp)->activityManager(); + + // Get a screenshot for saving to the activity manager + QSize screenShotSize = mCarousel->size().toSize(); + QPixmap screenShot( screenShotSize ); + QPainter painter( &screenShot ); + + // Draw the background and overlay + HbLabel* backgroundLabel = mUiLoader->findWidget( DOCML::MV_NAME_CAROUSEL_BACKGROUND ); + painter.drawPixmap( 0, 0, backgroundLabel->icon().pixmap().scaled( screenShotSize ) ); + backgroundLabel = mUiLoader->findWidget( DOCML::MV_NAME_CAROUSEL_OVERLAY ); + painter.drawPixmap( 0, 0, backgroundLabel->icon().pixmap().scaled( screenShotSize ) ); + + mCarousel->drawOffScreen( painter ); + + QVariantHash metadata; + metadata.insert( "screenshot", screenShot ); + + #ifdef __WINS__ + screenShot.save( "c:\\radio.bmp" ); + #elif defined BUILD_WIN32 + screenShot.save( "radio.bmp" ); + #endif + + // Update the activity to the activity manager + bool ok = activityManager->removeActivity( RADIO_MAINVIEW_ACTIVITY_ID ); + LOG_ASSERT( ok, LOG( "Failed to remove old activity from Activity Manager!" ) ); + ok = activityManager->addActivity( RADIO_MAINVIEW_ACTIVITY_ID, QVariant(), metadata ); + LOG_ASSERT( ok, LOG( "Failed to update activity to Activity Manager!" ) ); +} + +/*! + * Private slot + */ +void RadioMainView::toggleSkippingMode() +{ + if ( !mSkippingAction ) { + mSkippingAction = menu()->addAction( "", this, SLOT(toggleSkippingMode()) ); + } + + mAlternateSkipping = !mAlternateSkipping; + mCarousel->setAlternateSkippingMode( mAlternateSkipping ); + if ( mAlternateSkipping ) { + mSkippingAction->setText( "-- Normal skipping mode" ); + } else { + mSkippingAction->setText( "-- Alternate skipping mode" ); + } +} + +/*! + * Private slot + */ +void RadioMainView::resetFirstTimeCount() +{ + mUiEngine->setFirstTimeStartPerformed( false ); +} + +/*! + * + */ +void RadioMainView::updateFavoriteButton() +{ + RadioStation station; + RadioStationModel& model = mUiEngine->stationModel(); + model.findFrequency( mUiEngine->currentFrequency(), station ); + HbPushButton* favoriteButton = mUiLoader->findWidget( DOCML::MV_NAME_FAVORITE_BUTTON ); + if ( station.isFavorite() ) { + favoriteButton->setText( hbTrId( "txt_fmradio_button_remove_from_favourites" ) ); + favoriteButton->setIcon( HbIcon( "qtg_mono_favourites_remove" ) ); + } else { + favoriteButton->setText( hbTrId( "txt_rad_button_add_to_favourites" ) ); + favoriteButton->setIcon( HbIcon( "qtg_mono_add_to_favourites" ) ); + } +} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiostationcarousel.cpp --- a/radioapp/radiowidgets/src/radiostationcarousel.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiostationcarousel.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -17,126 +17,77 @@ // System includes #include -#include -#include -#include -#include +#include #include -#include #include +#include +#include +#include +#include // User includes #include "radiostationcarousel.h" +#include "radiocarouselanimator.h" #include "radiouiloader.h" -#include "radiostationitem.h" +#include "radiocarouselitem.h" #include "radiostation.h" #include "radiouiengine.h" #include "radiostationmodel.h" #include "radiofadinglabel.h" #include "radiologger.h" -#include "radiocarouselmodel.h" -#include "radiouiutilities.h" +#include "radioutil.h" #include "radio_global.h" -#ifdef USE_LAYOUT_FROM_E_DRIVE - const QString KFavoriteIconPath = "e:/radiotest/images/favoriteiconactive.png"; - const QString KNonFavoriteIconPath = "e:/radiotest/images/favoriteiconinactive.png"; -#else - const QString KFavoriteIconPath = ":/images/favoriteiconactive.png"; - const QString KNonFavoriteIconPath = ":/images/favoriteiconinactive.png"; -#endif - -const int KRadioTextPlusCheckTimeout = 700; // 700 ms -const int KFreqScrollDivider = 100000; -const int INFOTEXT_NOFAVORITES_TIMEOUT = 15000; - -// =============================================================== -// Scanning helper -// =============================================================== +// Constants +const int RTPLUS_CHECK_TIMEOUT = 700; +const int INFOTEXT_NOFAVORITES_TIMEOUT = 5000; +const int SET_FREQUENCY_TIMEOUT = 500; +const int FAVORITE_HINT_SHOW_DELAY = 1000; +const int FAVORITE_HINT_HIDE_DELAY = 2000; -/*! - * - */ -ScanningHelper::ScanningHelper( RadioStationCarousel& carousel ) : - mCarousel( carousel ), - mCurrentFrequency( 0 ), - mPreviousFrequency( 0 ), - mStationItem( 0 ), - mNumberScrollingTimeLine( new QTimeLine( 1000, this ) ) -{ - mNumberScrollingTimeLine->setCurveShape( QTimeLine::EaseInCurve ); - connectAndTest( mNumberScrollingTimeLine, SIGNAL(finished()), - &mCarousel, SIGNAL(scanAnimationFinished()) ); - connectAndTest( mNumberScrollingTimeLine, SIGNAL(frameChanged(int)), - this, SLOT(numberScrollUpdate(int)) ); -} +// Matti testing constants +const QLatin1String LEFT_ITEM_NAME ( "carousel_left" ); +const QLatin1String CENTER_ITEM_NAME ( "carousel_center" ); +const QLatin1String RIGHT_ITEM_NAME ( "carousel_right" ); + +#ifdef BUILD_WIN32 +# define SCROLLBAR_POLICY ScrollBarAlwaysOn +#else +# define SCROLLBAR_POLICY ScrollBarAlwaysOff +#endif // BUILD_WIN32 + +#define CALL_TO_ALL_ITEMS( expr ) \ + mItems[LeftItem]->expr; \ + mItems[CenterItem]->expr; \ + mItems[RightItem]->expr; /*! * */ -void ScanningHelper::start() -{ - QTimer::singleShot( 0, this, SLOT(startSlide()) ); -} - -/*! - * Private slot - */ -void ScanningHelper::startSlide() -{ - mCarousel.scrollToIndex( mModelIndex, RadioStationCarousel::NoSignal ); - startNumberScroll(); -} - -/*! - * Private slot - */ -void ScanningHelper::startNumberScroll() -{ - //TODO: Take italy case into account - if ( mPreviousFrequency ) { - mNumberScrollingTimeLine->setFrameRange( mPreviousFrequency / KFreqScrollDivider, mCurrentFrequency / KFreqScrollDivider ); - mNumberScrollingTimeLine->start(); - } else { - emit mCarousel.scanAnimationFinished(); - } -} - -/*! - * Private slot - */ -void ScanningHelper::numberScrollUpdate( int value ) -{ - if ( mStationItem ) { - mStationItem->setFrequency( value * KFreqScrollDivider ); - } -} - -// =============================================================== -// Carousel -// =============================================================== - -/*! - * - */ -RadioStationCarousel::RadioStationCarousel( RadioUiEngine* uiEngine ) : - HbGridView( 0 ), - mUiEngine( uiEngine ), - mAntennaAttached( false ), +RadioStationCarousel::RadioStationCarousel( QGraphicsItem* parent ) : + HbScrollArea( parent ), + mUiEngine( NULL ), mAutoScrollTime( 300 ), mGenericTimer( new QTimer( this ) ), mTimerMode( NoTimer ), - mScanningHelper( 0 ), - mInfoText( 0 ), - mCurrentItem( 0 ), - mPanStartPos( 0 ) + mInfoText( NULL ), + mRadiotextPopup( NULL ), + mContainer( new HbWidget( this ) ), + mMidScrollPos( 0 ), + mMaxScrollPos( 0 ), + mCurrentIndex( 0 ), + mTargetIndex( -1 ), + mIsCustomFreq( false ), + mInfoTextType( CarouselInfoText::None ), + mModel( NULL ), + mPosAdjustmentDisabled( false ), + mScrollDirection( Scroll::Shortest ), + mManualSeekMode( false ), + mAlternateSkipping( false ) #ifdef USE_DEBUGGING_CONTROLS ,mRdsLabel( new RadioFadingLabel( this ) ) #endif // USE_DEBUGGING_CONTROLS { - RadioUiUtilities::setCarousel( this ); - setClampingStyle( HbScrollArea::StrictClamping ); - setScrollingStyle( HbScrollArea::Pan ); } /*! @@ -197,49 +148,71 @@ void RadioStationCarousel::init( RadioUiLoader& uiLoader, RadioUiEngine* uiEngine ) { mUiEngine = uiEngine; - mAntennaAttached = mUiEngine->isAntennaAttached(); + RadioUtil::setCarousel( this ); + + mItems[CenterItem] = new RadioCarouselItem( *this, this, true ); + mItems[LeftItem] = new RadioCarouselItem( *this, this ); + mItems[RightItem] = new RadioCarouselItem( *this, this ); + + // Matti testing needs the objects to have names + mItems[LeftItem]->setObjectName( LEFT_ITEM_NAME ); + mItems[CenterItem]->setObjectName( CENTER_ITEM_NAME ); + mItems[RightItem]->setObjectName( RIGHT_ITEM_NAME ); + + QGraphicsLinearLayout* layout = new QGraphicsLinearLayout( Qt::Horizontal ); + layout->setContentsMargins( 0, 0, 0, 0 ); + layout->setSpacing( 0 ); + layout->addItem( mItems[LeftItem] ); + layout->addItem( mItems[CenterItem] ); + layout->addItem( mItems[RightItem] ); + mContainer->setLayout( layout ); + setContentWidget( mContainer ); + + setClampingStyle( HbScrollArea::NoClamping ); + setScrollDirections( Qt::Horizontal ); + + setFrictionEnabled( true ); + setHorizontalScrollBarPolicy( HbScrollArea::SCROLLBAR_POLICY ); + setVerticalScrollBarPolicy( HbScrollArea::ScrollBarAlwaysOff ); mInfoText = uiLoader.findWidget( DOCML::MV_NAME_INFO_TEXT ); mInfoText->setTextWrapping( Hb::TextWordWrap ); - setRowCount( 1 ); - setColumnCount( 1 ); + mRadiotextPopup = uiLoader.findObject( DOCML::MV_NAME_CAROUSEL_RT_MENU ); + +#ifdef BUILD_WIN32 + HbFontSpec spec = mInfoText->fontSpec(); + spec.setRole( HbFontSpec::Secondary ); + mInfoText->setFontSpec( spec ); +#endif + setScrollDirections( Qt::Horizontal ); - setFrictionEnabled( true ); - setLongPressEnabled( false ); - setItemRecycling( false ); - setUniformItemSizes( true ); - setItemPrototype( new RadioStationItem( *this ) ); - setSelectionMode( NoSelection ); - -// grabGesture( Qt::PanGesture ); - RadioCarouselModel* carouselModel = mUiEngine->carouselModel(); - setCarouselModel( carouselModel ); - - mCurrentItem = static_cast( itemByIndex( carouselModel->index( 0, 0 ) ) ); + Radio::connect( this, SIGNAL(scrollingEnded()), + this, SLOT(adjustAfterScroll()) ); - RadioStationModel* stationModel = &mUiEngine->stationModel(); - connectAndTest( stationModel, SIGNAL(favoriteChanged(RadioStation)), + mModel = &mUiEngine->stationModel(); + Radio::connect( mModel, SIGNAL(favoriteChanged(RadioStation)), this, SLOT(update(RadioStation)) ); - connectAndTest( stationModel, SIGNAL(stationDataChanged(RadioStation)), + Radio::connect( mModel, SIGNAL(stationDataChanged(RadioStation)), this, SLOT(update(RadioStation))); - connectAndTest( stationModel, SIGNAL(radioTextReceived(RadioStation)), + Radio::connect( mModel, SIGNAL(radioTextReceived(RadioStation)), this, SLOT(updateRadioText(RadioStation))); - connectAndTest( stationModel, SIGNAL(dynamicPsChanged(RadioStation)), + Radio::connect( mModel, SIGNAL(dynamicPsChanged(RadioStation)), this, SLOT(update(RadioStation))); - updateClampingStyle(); - - connectAndTest( this, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), - this, SLOT(openContextMenu(HbAbstractViewItem*,QPointF)) ); - setLongPressEnabled( true ); - mGenericTimer->setSingleShot( true ); - connectAndTest( mGenericTimer, SIGNAL(timeout()), + Radio::connect( mGenericTimer, SIGNAL(timeout()), this, SLOT(timerFired())); - initToLastTunedFrequency(); + Radio::connect( mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), + this, SLOT(updateStations()) ); + Radio::connect( mModel, SIGNAL(modelReset()), + this, SLOT(updateStations()) ); + Radio::connect( mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), + this, SLOT(updateStations()) ); + + setFrequency( mUiEngine->currentFrequency(), TuneReason::Unspecified ); #ifdef USE_DEBUGGING_CONTROLS mRdsLabel->setPos( QPoint( 300, 10 ) ); @@ -251,7 +224,7 @@ mRdsLabel->setFontSpec( spec ); mRdsLabel->setTextColor( Qt::gray ); if ( mUiEngine ) { - connectAndTest( mUiEngine, SIGNAL(rdsAvailabilityChanged(bool)), + Radio::connect( mUiEngine, SIGNAL(rdsAvailabilityChanged(bool)), this, SLOT(setRdsAvailable(bool)) ); } #endif // USE_DEBUGGING_CONTROLS @@ -260,52 +233,42 @@ /*! * */ -void RadioStationCarousel::setCarouselModel( RadioCarouselModel* carouselModel ) +void RadioStationCarousel::setFrequency( uint frequency, int reason, Scroll::Direction direction ) { - if ( carouselModel ) { - connectAndTest( carouselModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(insertFrequency(QModelIndex,int,int)) ); - connectAndTest( carouselModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(prepareToRemoveFrequency(QModelIndex,int,int)) ); - connectAndTest( carouselModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(removeFrequency(QModelIndex,int,int)) ); - } else { - QAbstractItemModel* currentModel = model(); - disconnect( currentModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(insertFrequency(QModelIndex,int,int)) ); - disconnect( currentModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), - this, SLOT(prepareToRemoveFrequency(QModelIndex,int,int)) ); - disconnect( currentModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(removeFrequency(QModelIndex,int,int)) ); - } - setModel( carouselModel ); - updateFrequencies(); - initCurrentStationItem(); -} + if ( mModel ) { + if ( !mManualSeekMode ) { + + if ( mModel->rowCount() <= 1 ) { + mItems[LeftItem]->setStation( RadioStation() ); + mItems[RightItem]->setStation( RadioStation() ); + } -/*! - * - */ -void RadioStationCarousel::setFrequency( uint frequency, int reason ) -{ - RadioStationItem* item = currentStationItem(); -// if ( item && item->mFrequency == frequency ) { -// return; -// } + mIsCustomFreq = false; + if ( reason == TuneReason::Skip || reason == TuneReason::StationScanFinalize ) { + const int newIndex = mModel->indexFromFrequency( frequency ); + scrollToIndex( newIndex, direction, NoSignal ); + mCurrentIndex = newIndex; + } else { + if ( mModel->contains( frequency ) ) { + mCurrentIndex = mModel->indexFromFrequency( frequency ); + } else { + const RadioStation prevStation = mModel->findClosest( frequency, StationSkip::Previous ); + if ( prevStation.isValid() ) { + mCurrentIndex = mModel->indexFromFrequency( prevStation.frequency() ); + } else { + mCurrentIndex = -1; + } - if ( mModelIndexes.contains( frequency ) ) { - QModelIndex index = mModelIndexes.value( frequency ); + mIsCustomFreq = true; + } - if ( reason == TuneReason::FrequencyStrip || reason == TuneReason::StationsList ) { - scrollToIndex( index, RadioStationCarousel::NoAnim | RadioStationCarousel::NoSignal ); - } else if ( reason == TuneReason::Skip || reason == TuneReason::StationScan ) { - scrollToIndex( index, RadioStationCarousel::NoSignal ); + mItems[CenterItem]->setFrequency( frequency ); + mTimerMode = SetFrequency; + mGenericTimer->stop(); + mGenericTimer->start( SET_FREQUENCY_TIMEOUT ); + } } else { - scrollToIndex( index ); - } - } else { - if ( item ) { - item->setFrequency( frequency ); + mItems[CenterItem]->setFrequency( frequency ); } } } @@ -323,7 +286,7 @@ */ bool RadioStationCarousel::isAntennaAttached() const { - return mAntennaAttached; + return mUiEngine->isAntennaAttached(); } /*! @@ -331,19 +294,24 @@ */ void RadioStationCarousel::setScanningMode( bool scanning ) { - initCurrentStationItem(); + CALL_TO_ALL_ITEMS( setSeekLayout( scanning ) ); if ( scanning ) { - setInfoText( CarouselInfoText::Scanning ); - if ( !mScanningHelper ) { - mScanningHelper = new ScanningHelper( *this ); + if ( !mAnimator ) { + mAnimator = new RadioCarouselAnimator( *this ); } + mAnimator.data()->startFlashingText(); } else { - delete mScanningHelper; - mScanningHelper = 0; + if ( mAnimator ) { + mAnimator.data()->stopFlashingText(); + } clearInfoText(); + setCenterIndex( 0 ); + mTimerMode = FavoriteHintShow; + mGenericTimer->start( FAVORITE_HINT_SHOW_DELAY ); } + setEnabled( !scanning ); } @@ -352,7 +320,7 @@ */ bool RadioStationCarousel::isInScanningMode() const { - return RadioUiUtilities::isScannerAlive(); + return RadioUtil::scanStatus() == Scan::ScanningInMainView; } /*! @@ -360,21 +328,7 @@ */ void RadioStationCarousel::cleanRdsData() { - RadioStationItem* item = currentStationItem(); - if ( item ) { - item->cleanRdsData(); - } -} - -/*! - * - */ -void RadioStationCarousel::updateCurrentItem() -{ - RadioStationItem* item = currentStationItem(); - if ( item ) { - item->update(); - } + mItems[CenterItem]->cleanRdsData(); } /*! @@ -382,40 +336,23 @@ */ void RadioStationCarousel::animateNewStation( const RadioStation& station ) { - if ( mScanningHelper ) { - RadioCarouselModel* model = carouselModel(); - const QModelIndex index = model->modelIndexFromFrequency( station.frequency() ); - mScanningHelper->mModelIndex = index; - mScanningHelper->mCurrentFrequency = station.frequency(); - mScanningHelper->mStationItem = static_cast( itemByIndex( index ) ); + if ( mAnimator && mUiEngine ) { + const uint previousFrequency = mItems[CenterItem]->frequency(); - uint prevFrequency = 0; - if ( model->rowCount() > 1 ) { - const int prevIndex = index.row() - 1; - RadioStation prevStation = model->data( model->index( prevIndex, 0 ), RadioStationModel::RadioStationRole ).value(); - prevFrequency = prevStation.frequency(); - } else if ( mUiEngine ) { - prevFrequency = mUiEngine->minFrequency(); - } + mItems[RightItem]->setFrequency( previousFrequency ); + mCurrentIndex = mModel->indexFromFrequency( station.frequency() ); - mScanningHelper->mPreviousFrequency = prevFrequency; - if ( mScanningHelper->mStationItem ) { - mScanningHelper->mStationItem->setFrequency( prevFrequency ); - mScanningHelper->mStationItem->cleanRdsData(); - } - - mScanningHelper->start(); + mAnimator.data()->startNumberScroll( previousFrequency, station.frequency() ); } } /*! * */ -void RadioStationCarousel::setItemVisible( bool visible ) +void RadioStationCarousel::cancelAnimation() { - RadioStationItem* item = currentStationItem(); - if ( item ) { - item->setVisible( visible ); + if ( mAnimator ) { + mAnimator.data()->stopAll(); } } @@ -425,13 +362,21 @@ void RadioStationCarousel::setInfoText( CarouselInfoText::Type type ) { mInfoTextType = type; - if ( type == CarouselInfoText::NoFavorites ) { - mInfoText->setPlainText( hbTrId( "txt_rad_dialog_long_press_arrow_keys_to_search_str" ) ); + if ( type == CarouselInfoText::NoFavorites || type == CarouselInfoText::FavoriteIconHint ) { +// mInfoText->setPlainText( hbTrId( "txt_rad_dialog_long_press_arrow_keys_to_search_str" ) ); + //TODO: Remove hardcoding. Temporarily hardcoded for usability testing + mInfoText->setPlainText( "Tap star to mark favourites" ); mInfoText->setAlignment( Qt::AlignCenter ); - setItemVisible( false ); + mItems[CenterItem]->setItemVisibility( RadioCarouselItem::IconVisible ); mTimerMode = InfoText; mGenericTimer->setInterval( INFOTEXT_NOFAVORITES_TIMEOUT ); mGenericTimer->start(); + + if ( !mAnimator ) { + mAnimator = new RadioCarouselAnimator( *this ); + } + mAnimator.data()->startFlashingIcon(); + } else if ( type == CarouselInfoText::ConnectAntenna ) { cleanRdsData(); mInfoText->setPlainText( hbTrId( "txt_rad_info_connect_wired_headset1" ) ); @@ -444,6 +389,9 @@ cleanRdsData(); mInfoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter ); mInfoText->setPlainText( hbTrId( "txt_rad_list_searching_all_available_stations_ple" ) ); + } else if ( type == CarouselInfoText::ManualSeek ) { + mInfoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter ); + mInfoText->setPlainText( "Manual Seek Mode" ); } mInfoText->setVisible( true ); @@ -455,23 +403,89 @@ void RadioStationCarousel::clearInfoText() { if ( mInfoTextType != CarouselInfoText::None ) { + if ( mAnimator ) { + mAnimator.data()->stopFlashingIcon(); + } + mGenericTimer->stop(); mInfoTextType = CarouselInfoText::None; mInfoText->setVisible( false ); mInfoText->clear(); - setItemVisible( true ); - updateCurrentItem(); + mItems[CenterItem]->setItemVisibility( RadioCarouselItem::AllVisible ); + } +} + +/*! + * + */ +void RadioStationCarousel::setManualSeekMode( bool manualSeekActive ) +{ + mManualSeekMode = manualSeekActive; + setEnabled( !manualSeekActive ); + + mItems[CenterItem]->setSeekLayout( manualSeekActive ); + if ( manualSeekActive ) { + setInfoText( CarouselInfoText::ManualSeek ); + } else { + clearInfoText(); + setFrequency( mUiEngine->currentFrequency(), TuneReason::Unspecified ); + } +} + +/*! + * + */ +void RadioStationCarousel::drawOffScreen( QPainter& painter ) +{ + mItems[CenterItem]->drawOffScreen( painter ); +} + +/*! + * TODO: Remove this! This is test code + */ +void RadioStationCarousel::setAlternateSkippingMode( bool alternateSkipping ) +{ + mAlternateSkipping = alternateSkipping; +} + +/*! + * Private slot + * + */ +void RadioStationCarousel::scrollPosChanged( const QPointF& newPosition ) +{ + Q_UNUSED( newPosition ); +// const int xPos = static_cast( newPosition.x() ); +// mItems[CenterItem]->setPos( xPos - mMidScrollPos, 0 ); +} + +/*! + * Private slot + '' + */ +void RadioStationCarousel::adjustAfterScroll() +{ + if ( isInScanningMode() ) { + return; + } + + if ( mTargetIndex != -1 ) { + setCenterIndex( mTargetIndex ); } } /*! * Private slot + * */ void RadioStationCarousel::update( const RadioStation& station ) { - RadioStationItem* item = currentStationItem(); - if ( item && item->frequency() == station.frequency() && !isInScanningMode() ) { - item->update( &station ); + if ( !mManualSeekMode && !isInScanningMode() ) { + for ( int i = LeftItem; i <= RightItem; ++i ) { + if ( mItems[i]->frequency() == station.frequency() ) { + mItems[i]->update( &station ); + } + } } } @@ -482,15 +496,12 @@ { if ( isAntennaAttached() && !isInScanningMode() ) { if ( station.radioText().isEmpty() ) { - RadioStationItem* item = currentStationItem(); - if ( item ) { - item->mRadiotextLabel->setText( "" ); - } + mItems[CenterItem]->setRadioText( "" ); } else { mRadioTextHolder = station.radioText(); mTimerMode = RtPlusCheck; mGenericTimer->stop(); - mGenericTimer->setInterval( KRadioTextPlusCheckTimeout ); + mGenericTimer->setInterval( RTPLUS_CHECK_TIMEOUT ); mGenericTimer->start(); } } @@ -499,68 +510,13 @@ /*! * Private slot */ -void RadioStationCarousel::insertFrequency( const QModelIndex& parent, int first, int last ) +void RadioStationCarousel::updateStations() { - Q_UNUSED( parent ); - QAbstractItemModel* freqModel = model(); - - for ( int i = first; freqModel && i <= last; ++i ) { - QModelIndex index = freqModel->index( i, 0 ); - RadioStation station = freqModel->data( index, RadioStationModel::RadioStationRole ).value(); - mModelIndexes.insert( station.frequency(), index ); - LOG_FORMAT( "Added frequency %u", station.frequency() ); - if ( !isInScanningMode() ) { - scrollToIndex( index, RadioStationCarousel::NoAnim | RadioStationCarousel::NoSignal ); - } + if ( isInScanningMode() ) { + return; } - initCurrentStationItem(); - - updateClampingStyle(); -} - -/*! - * Private slot - */ -void RadioStationCarousel::prepareToRemoveFrequency( const QModelIndex& parent, int first, int last ) -{ - Q_UNUSED( parent ); - QAbstractItemModel* freqModel = model(); - for ( int i = first; freqModel && i <= last; ++i ) { - QModelIndex index = freqModel->index( i, 0 ); - RadioStation station = freqModel->data( index, RadioStationModel::RadioStationRole ).value(); - mModelIndexes.remove( station.frequency() ); - } -} - -/*! - * Private slot - */ -void RadioStationCarousel::removeFrequency( const QModelIndex& parent, int first, int last ) -{ - Q_UNUSED( parent ); - Q_UNUSED( first ); - Q_UNUSED( last ); - - initCurrentStationItem(); - updateClampingStyle(); -} - -/*! - * Private slot - */ -void RadioStationCarousel::updateFrequencies() -{ - mModelIndexes.clear(); - QAbstractItemModel* itemModel = model(); - if ( itemModel ) { - const int count = itemModel->rowCount(); - for ( int i = 0; i < count; ++i ) { - QModelIndex index = itemModel->index( i, 0 ); - uint frequency = itemModel->data( index, RadioStationModel::RadioStationRole ).value().frequency(); - mModelIndexes.insert( frequency, index ); - } - } + setFrequency( mUiEngine->currentFrequency(), TuneReason::Unspecified ); } /*! @@ -568,26 +524,23 @@ */ void RadioStationCarousel::timerFired() { - if ( mTimerMode == RtPlusCheck ) { - RadioStationItem* item = currentStationItem(); - if ( item ) { - item->mRadiotextLabel->setText( mRadioTextHolder ); - } + if ( mTimerMode == SetFrequency ) { + setCenterIndex( mCurrentIndex, NoSignal | IgnoreCenter ); + mTimerMode = NoTimer; + } else if ( mTimerMode == RtPlusCheck ) { + //mItems[CenterItem]->mRadiotextLabel->setText( mRadioTextHolder ); mRadioTextHolder = ""; + mTimerMode = NoTimer; } else if ( mTimerMode == InfoText ) { clearInfoText(); - } - - mTimerMode = NoTimer; -} - -/*! - * Private slot - */ -void RadioStationCarousel::openContextMenu( HbAbstractViewItem* item, const QPointF& coords ) -{ - if ( item ) { - static_cast( item )->handleLongPress( coords ); + mTimerMode = NoTimer; + } else if ( mTimerMode == FavoriteHintShow ) { + setInfoText( CarouselInfoText::FavoriteIconHint ); + mTimerMode = FavoriteHintHide; + mGenericTimer->start( FAVORITE_HINT_HIDE_DELAY ); + } else if ( mTimerMode == FavoriteHintHide ) { + clearInfoText(); + mTimerMode = NoTimer; } } @@ -614,7 +567,6 @@ */ void RadioStationCarousel::updateAntennaStatus( bool connected ) { - mAntennaAttached = connected; mGenericTimer->stop(); if ( !connected ) { @@ -629,11 +581,39 @@ */ void RadioStationCarousel::mousePressEvent( QGraphicsSceneMouseEvent* event ) { - if ( mInfoTextType == CarouselInfoText::NoFavorites ) { + if ( mInfoTextType == CarouselInfoText::NoFavorites || mInfoTextType == CarouselInfoText::FavoriteIconHint ) { clearInfoText(); } - HbGridView::mousePressEvent( event ); + HbScrollArea::mousePressEvent( event ); +} + +/*! + * \reimp + */ +void RadioStationCarousel::resizeEvent( QGraphicsSceneResizeEvent* event ) +{ + HbScrollArea::resizeEvent( event ); + + const int width = (int)event->newSize().width(); + + mMidScrollPos = -width; + mMaxScrollPos = mMidScrollPos * 2; + + if ( isInitialized() ) { + mItems[LeftItem]->setMinimumWidth( width ); + mItems[CenterItem]->setMinimumWidth( width ); + mItems[RightItem]->setMinimumWidth( width ); + } +} + +/*! + * \reimp + */ +void RadioStationCarousel::showEvent( QShowEvent* event ) +{ + HbScrollArea::showEvent( event ); +// mContainer->setPos( mMidScrollPos, 0 ); } /*! @@ -641,117 +621,340 @@ */ void RadioStationCarousel::gestureEvent( QGestureEvent* event ) { - HbGridView::gestureEvent( event ); +// if ( HbSwipeGesture* swipeGesture = static_cast( event->gesture( Qt::SwipeGesture ) ) ) { +// if ( swipeGesture->state() == Qt::GestureFinished ) { +// if ( swipeGesture->horizontalDirection() == QSwipeGesture::Left ) { +// emit skipRequested( StationSkip::Next ); +// } else if ( swipeGesture->horizontalDirection() == QSwipeGesture::Right ) { +// emit skipRequested( StationSkip::Previous ); +// } +// mIsCustomFreq = false; +// } +// return; +// } + + HbScrollArea::gestureEvent( event ); if ( HbPanGesture* gesture = qobject_cast( event->gesture( Qt::PanGesture ) ) ) { if ( gesture->state() == Qt::GestureFinished ) { - updatePos( (int)gesture->offset().x() ); + adjustPos( (int)gesture->offset().x() ); } } } /*! + * \reimp + */ +void RadioStationCarousel::handleIconClicked( const RadioStation& station ) +{ + if ( mModel ) { + mModel->setData( QModelIndex(), station.frequency(), RadioRole::ToggleFavoriteRole ); + } +} + +/*! + * \reimp + */ +void RadioStationCarousel::handleRadiotextClicked( const RadioStation& station ) +{ + Q_UNUSED( station ); + mRadiotextPopup->show(); +} + +/*! + * \reimp + */ +void RadioStationCarousel::handleUrlClicked( const RadioStation& station ) +{ + mUiEngine->launchBrowser( station.url() ); +} + +/*! + * \reimp + */ +QString RadioStationCarousel::localizeGenre( int genre ) +{ + return mUiEngine->genreToString( genre, GenreTarget::Carousel ); +} + +/*! + * \reimp + */ +bool RadioStationCarousel::isInManualSeek() const +{ + return mManualSeekMode; +} + +/*! * */ -void RadioStationCarousel::initToLastTunedFrequency() +RadioStation RadioStationCarousel::findStation( uint frequency ) { - const uint currentFrequency = mUiEngine->currentFrequency(); - const QModelIndex currentIndex = carouselModel()->modelIndexFromFrequency( currentFrequency ); + return mModel->findStation( frequency, FindCriteria::IncludeManualStation ); +} - if ( currentIndex.isValid() ) {//&& itemByIndex( currentIndex ) ) { - scrollToIndex( currentIndex, RadioStationCarousel::NoSignal | RadioStationCarousel::NoAnim ); - } else { - RadioStationItem* item = static_cast( itemAt( 0, 0 ) ); - if ( item ) { - item->setFrequency( currentFrequency ); - } - } +/*! + * + */ +bool RadioStationCarousel::isInitialized() const +{ + return mUiEngine != NULL; } /*! * */ -void RadioStationCarousel::updateClampingStyle() +void RadioStationCarousel::setCenterIndex( int index, ScrollMode mode ) { - if ( model()->rowCount() > 1 ) { - setClampingStyle( HbScrollArea::StrictClamping ); - } else { - setClampingStyle( HbScrollArea::BounceBackClamping ); - update( mUiEngine->stationModel().currentStation() ); + Q_UNUSED( mode ); + if ( mModel ) { + const int newIndex = trimIndex( index ); + mCurrentIndex = newIndex; + mTargetIndex = -1; + + if ( !mIsCustomFreq ) { + mItems[CenterItem]->setStation( mModel->stationAt( mCurrentIndex ) ); + } + + if ( mModel->rowCount() > 1 ) { + const int leftIndex = prevIndex( mCurrentIndex ); + const int rightIndex = nextIndex( mCurrentIndex ); + mItems[LeftItem]->setStation( mModel->stationAt( leftIndex ) ); + mItems[RightItem]->setStation( mModel->stationAt( rightIndex ) ); + } else { + + if ( mIsCustomFreq ) { + const uint frequency = mItems[CenterItem]->frequency(); + mItems[LeftItem]->setStation( mModel->findClosest( frequency, StationSkip::Previous ) ); + mItems[RightItem]->setStation( mModel->findClosest( frequency, StationSkip::Next ) ); + } else { + mItems[LeftItem]->setStation( RadioStation() ); + mItems[RightItem]->setStation( RadioStation() ); + } + } + + scrollContentsTo( QPointF( -mMidScrollPos /* + delta */, 0 ), 0 ); + +// if ( !mode.testFlag( NoSignal ) ) { +// uint frequency = mModel->stationAt( mCurrentIndex ).frequency(); +// emit frequencyChanged( frequency, TuneReason::StationCarousel, mScrollDirection ); +// mScrollDirection = Scroll::Shortest; +// } } } /*! * */ -void RadioStationCarousel::initCurrentStationItem() +void RadioStationCarousel::scrollToIndex( int index, Scroll::Direction direction, ScrollMode mode ) { - mCurrentItem = static_cast( visibleItems().first() ); -} + if ( mModel && index >= 0 ) { + mTargetIndex = index; + const int difference = calculateDifference( index, direction ); + int scrollTime = mAutoScrollTime; -/*! - * - */ -RadioStationItem* RadioStationCarousel::currentStationItem() -{ - return mCurrentItem; -} + int posX = direction == Scroll::Left ? -mMaxScrollPos : 0; + if ( difference == 1 ) { + if ( direction == Scroll::Right ) { + posX = 0; + } else if ( direction == Scroll::Left ) { + posX = -mMaxScrollPos; + } + } else { + if ( direction == Scroll::Right ) { + // Item where the scrolling starts + mItems[RightItem]->setStation( mModel->stationAt( mCurrentIndex ) ); + + // Item that is skipped over + const uint centerFreq = mModel->stationAt( nextIndex( index ) ).frequency(); + mItems[CenterItem]->setFrequency( centerFreq ); -/*! - * - */ -RadioCarouselModel* RadioStationCarousel::carouselModel() const -{ - return static_cast( model() ); -} + // Item where the scrolling ends + const RadioStation station = mModel->stationAt( index ); + mItems[LeftItem]->setStation( station ); + + mContainer->setPos( mMaxScrollPos, 0 ); + posX = 0; + } else if ( direction == Scroll::Left ) { + // Item where the scrolling starts + mItems[LeftItem]->setStation( mModel->stationAt( mCurrentIndex ) ); -/*! - * - */ -void RadioStationCarousel::scrollToIndex( const QModelIndex& index, RadioStationCarousel::ScrollMode mode ) -{ - RadioStationItem* item = static_cast( itemByIndex( index ) ); - if ( index.isValid() && item ) { - const int posX = index.row() * (int)size().width(); - setCurrentIndex( index, QItemSelectionModel::ClearAndSelect ); + // Item that is skipped over + const uint centerFreq = mModel->stationAt( prevIndex( index ) ).frequency(); + mItems[CenterItem]->setFrequency( centerFreq ); + + // Item where the scrolling ends + const RadioStation station = mModel->stationAt( index ); + mItems[RightItem]->setStation( station ); + + mContainer->setPos( 0, 0 ); + posX = -mMaxScrollPos; + } + } if ( mode.testFlag( UpdateItem ) ) { - item->update(); + //item->update(); } - int scrollTime = mAutoScrollTime; if ( mode.testFlag( NoAnim ) ) { scrollTime = 0; + } else if ( mode.testFlag( FromPanGesture ) ) { + if ( mAlternateSkipping ) { //TODO: Remove this! This is test code + scrollTime = 500; + } else { + scrollTime = 300; + } + } else if ( mode.testFlag( FromSwipeGesture ) ) { + scrollTime = 100; } + scrollContentsTo( QPointF( posX, 0 ), scrollTime ); - mCurrentItem = static_cast( item ); - if ( !mode.testFlag( NoSignal ) ) { - uint frequency = model()->data( index, RadioStationModel::RadioStationRole ).value().frequency(); - emit frequencyChanged( frequency, TuneReason::StationCarousel ); - } } } /*! * */ -void RadioStationCarousel::updatePos( int offset ) +int RadioStationCarousel::calculateDifference( int targetIndex, Scroll::Direction& direction ) +{ + int difference = 0; + const int rowCount = mModel->rowCount(); + + int diffToLeft = 0; + int diffToRight = 0; + if ( targetIndex > mCurrentIndex ) { + const int loopedDiff = mCurrentIndex + rowCount - targetIndex; + const int directDiff = targetIndex - mCurrentIndex; + diffToLeft = loopedDiff; + diffToRight = directDiff; + } else { + const int loopedDiff = targetIndex + rowCount - mCurrentIndex; + const int directDiff = mIsCustomFreq ? 1 : mCurrentIndex - targetIndex; + diffToLeft = directDiff; + diffToRight = loopedDiff; + } + + if ( direction == Scroll::Right ) { + difference = diffToLeft; + } else if ( direction == Scroll::Left ) { + difference = diffToRight; + } else { + if ( diffToLeft < diffToRight ) { + difference = diffToLeft; + direction = Scroll::Right; + } else { + difference = diffToRight; + direction = Scroll::Left; + } + } + + return difference; +} + +/*! + * + */ +bool RadioStationCarousel::isScrollingAllowed() const +{ + const int rowCount = mModel->rowCount(); + return rowCount > 1 || ( rowCount == 1 && mIsCustomFreq ); +} + +/*! + * + */ +void RadioStationCarousel::adjustPos( int offset ) { -// QModelIndex index = currentIndex(); -// -// ScrollMode mode = 0; -// const qreal threshold = size().width() / 3; -// if ( abs( offset ) >= threshold ) { -// if ( offset > 0 ) { -// index = previousIndex( index ); -// } else { -// index = nextIndex( index ); -// } -// } else { -// mode |= RadioStationCarousel::NoSignal; -// } -// -// scrollToIndex( index, mode ); + int newPos = mMidScrollPos; + const int threshold = (int)size().width() / 5; + int newIndex = mCurrentIndex; + bool needsToScroll = false; + + if ( isScrollingAllowed() && abs( offset ) >= threshold ) { + needsToScroll = true; + if ( offset > 0 ) { + newPos = 0; + mScrollDirection = Scroll::Right; + if ( !mIsCustomFreq ) { + + if ( mAlternateSkipping ) { //TODO: Remove this! This is test code + const uint newFreq = mModel->findClosest( mItems[CenterItem]->frequency(), StationSkip::PreviousFavorite ).frequency(); + if ( newFreq > 0 ) { + newIndex = mModel->indexFromFrequency( newFreq ); + } else { + needsToScroll = false; + newPos = mMidScrollPos; + } // End test code + + } else { + --newIndex; + } + } + } else { + mScrollDirection = Scroll::Left; + newPos = mMaxScrollPos; + + if ( mAlternateSkipping ) { //TODO: Remove this! This is test code + const uint newFreq = mModel->findClosest( mItems[CenterItem]->frequency(), StationSkip::NextFavorite ).frequency(); + if ( newFreq > 0 ) { + newIndex = mModel->indexFromFrequency( newFreq ); + } else { + needsToScroll = false; + newPos = mMidScrollPos; + } // End test code + + } else { + ++newIndex; + } + } + } + + newIndex = trimIndex( newIndex ); + if ( needsToScroll ) { + const uint frequency = mModel->stationAt( newIndex ).frequency(); + emit frequencyChanged( frequency, TuneReason::StationCarousel, mScrollDirection ); + scrollToIndex( newIndex, mScrollDirection, RadioStationCarousel::FromPanGesture ); + mIsCustomFreq = false; + } else { + scrollContentsTo( QPointF( -newPos, 0 ), 300 ); + } +} + +/*! + * + */ +int RadioStationCarousel::trimIndex( int index ) +{ + const int count = mModel ? mModel->rowCount() : 0; + + if ( count == 0 ) { + return -1; + } + + if ( index < 0 ) { + index = count - 1; + } + index %= count; + return index; +} + +/*! + * + */ +int RadioStationCarousel::prevIndex( int index ) +{ + if ( !mIsCustomFreq ) { + --index; + } + return trimIndex( index ); +} + +/*! + * + */ +int RadioStationCarousel::nextIndex( int index ) +{ + return trimIndex( index + 1 ); } /*! @@ -759,11 +962,10 @@ */ void RadioStationCarousel::skip( StationSkip::Mode mode ) { - RadioStationItem* item = currentStationItem(); - if ( item ) { - RadioCarouselModel* model = carouselModel(); - const uint frequency = model->findClosest( item->frequency(), mode ).frequency(); - const QModelIndex& index = model->modelIndexFromFrequency( frequency ); - scrollToIndex( index, RadioStationCarousel::NoSignal ); + if ( mModel ) { + const uint frequency = mModel->findClosest( mItems[CenterItem]->frequency(), mode ).frequency(); + const int index = mModel->indexFromFrequency( frequency ); + const Scroll::Direction direction = RadioUtil::scrollDirectionFromSkipMode( mode ); + scrollToIndex( index, direction, RadioStationCarousel::NoSignal ); } } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiostationitem.cpp --- a/radioapp/radiowidgets/src/radiostationitem.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,284 +0,0 @@ -/* -* 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: -* -*/ - -// System includes -#include -#include -#include -#include - -// User includes -#include "radiostationitem.h" -#include "radiostationcarousel.h" -#include "radiouiengine.h" -#include "radiofadinglabel.h" -#include "radiostationmodel.h" -#include "radiologger.h" - -//static const char* FILE_PATH_WIDGETML = ":/layout/radiostationitem.widgetml"; -//static const char* FILE_PATH_CSS = ":/layout/radiostationitem.css"; -static const char* GENRE_LABEL = "tv:genre_label"; -static const char* NAME_LABEL = "tv:name_label"; -static const char* RADIOTEXT_LABEL = "tv:radiotext_label"; -static const char* URL_LABEL = "tv:url_label"; -//static const char* FAVORITE_BUTTON = "favorite_button"; - -const char* SEEKING_TEXT = "txt_rad_list_tuning"; -const char* CONNECT_HEADSET_TEXT = "txt_rad_list_connect_wireless_antenna_headset_with"; - -/*! - * - */ -RadioStationItem::RadioStationItem( RadioStationCarousel& carousel ) : - HbAbstractViewItem( &carousel ), - mCarousel( carousel ), - mLayout( 0 ), - mNameLabel( 0 ), - mIconButton( 0 ), - mGenreLabel( 0 ), - mRadiotextLabel( 0 ), - mUrlLabel( 0 ) -{ - setFlag( QGraphicsItem::ItemIsFocusable, true ); -} - -/*! - * From HbAbstractViewItem - * - */ -HbAbstractViewItem* RadioStationItem::createItem() -{ - RadioStationItem* item = new RadioStationItem( *this ); // Calls copy constructor -// item->setParent( &mCarousel ); -// item->setParentItem( &mCarousel ); -// item->setItemView( itemView() ); -// item->updateChildItems(); - return item; -} - -/*! - * From HbAbstractViewItem - */ -void RadioStationItem::updateChildItems() -{ - if ( !mLayout ) - { - mIconButton = new HbPushButton( this ); - QPixmap background( QSize( 50, 50 ) ); - background.fill( Qt::transparent ); - mIconButton->setBackground( HbIcon( background ) ); - mIconButton->setIcon( mCarousel.nonFavoriteIcon() ); - mIconButton->setMaximumSize( 50, 50 ); - connectAndTest( mIconButton, SIGNAL(clicked()), this, SLOT(toggleFavorite())); - - mNameLabel = new RadioFadingLabel( this ); - mNameLabel->setAlignment( Qt::AlignCenter ); - mNameLabel->setObjectName( NAME_LABEL ); - HbFontSpec spec = mNameLabel->fontSpec(); - spec.setRole( HbFontSpec::Primary ); - mNameLabel->setFontSpec( spec ); - - spec.setRole( HbFontSpec::Secondary ); - - mGenreLabel = new RadioFadingLabel( this ); - mGenreLabel->setAlignment( Qt::AlignCenter ); - mGenreLabel->setObjectName( GENRE_LABEL ); - mGenreLabel->setTextColor( Qt::white ); - - mRadiotextLabel = new RadioFadingLabel( this ); - mRadiotextLabel->setAlignment( Qt::AlignCenter ); - mRadiotextLabel->setObjectName( RADIOTEXT_LABEL ); - mRadiotextLabel->setTextWrapping( Hb::TextWordWrap ); -// mRadiotextLabel->setFadingEnabled( true ); TODO -// mRadiotextLabel->setFontSpec( spec ); - mRadiotextLabel->setTextColor( Qt::white ); - - mUrlLabel = new RadioFadingLabel( this ); - mUrlLabel->setAlignment( Qt::AlignCenter ); - mUrlLabel->setObjectName( URL_LABEL ); - mUrlLabel->setTextColor( Qt::white ); - - mLayout = new HbAnchorLayout(); - - mLayout->setAnchor( mLayout, Hb::TopEdge, mIconButton, Hb::TopEdge, 20.0 ); - mLayout->setAnchor( mLayout, Hb::LeftEdge, mIconButton, Hb::LeftEdge, 20.0 ); - - mLayout->setAnchor( mIconButton, Hb::CenterVEdge, mGenreLabel, Hb::CenterVEdge, 0.0 ); - mLayout->setAnchor( mIconButton, Hb::RightEdge, mGenreLabel, Hb::LeftEdge, 20.0 ); - mLayout->setAnchor( mLayout, Hb::RightEdge, mGenreLabel, Hb::RightEdge, -70.0 ); - - mLayout->setAnchor( mGenreLabel, Hb::BottomEdge, mNameLabel, Hb::TopEdge, 0.0 ); - mLayout->setAnchor( mLayout, Hb::LeftEdge, mNameLabel, Hb::LeftEdge, 10.0 ); - mLayout->setAnchor( mLayout, Hb::RightEdge, mNameLabel, Hb::RightEdge, -10.0 ); - - mLayout->setAnchor( mNameLabel, Hb::BottomEdge, mRadiotextLabel, Hb::TopEdge, 10.0 ); - mLayout->setAnchor( mLayout, Hb::LeftEdge, mRadiotextLabel, Hb::LeftEdge, 10.0 ); - mLayout->setAnchor( mLayout, Hb::RightEdge, mRadiotextLabel, Hb::RightEdge, -10.0 ); - - mLayout->setAnchor( mRadiotextLabel, Hb::BottomEdge, mUrlLabel, Hb::TopEdge, 10.0 ); - mLayout->setAnchor( mLayout, Hb::LeftEdge, mUrlLabel, Hb::LeftEdge, 10.0 ); - mLayout->setAnchor( mLayout, Hb::RightEdge, mUrlLabel, Hb::RightEdge, -10.0 ); - mLayout->setAnchor( mLayout, Hb::BottomEdge, mUrlLabel, Hb::BottomEdge, -10.0 ); - - setLayout( mLayout ); - } - - update(); -} - -/*! - * Private slot - * - */ -void RadioStationItem::toggleFavorite() -{ - RadioUiEngine* uiEngine = carousel()->uiEngine(); - if ( uiEngine ) { - uiEngine->stationModel().setData( modelIndex(), mFrequency, RadioStationModel::ToggleFavoriteRole ); - } -} - -/*! - * - */ -uint RadioStationItem::frequency() const -{ - return mFrequency; -} - -/*! - * - */ -void RadioStationItem::update( const RadioStation* station ) -{ - QModelIndex index = modelIndex(); - if ( !( station && station->isValid() ) && !index.isValid() ) { - return; - } - - RadioUiEngine* uiEngine = carousel()->uiEngine(); - if ( !mCarousel.isInScanningMode() && uiEngine ) { - RadioStation tempStation = ( station && station->isValid() ) ? *station - : index.data( RadioStationModel::RadioStationRole ).value(); - - mNameLabel->setTextWithoutFading( nameOrFrequency( tempStation ) ); - - mGenreLabel->setText( uiEngine->genreToString( tempStation.genre(), GenreTarget::Carousel ) ); - - if ( !tempStation.radioText().isEmpty() ) { - mRadiotextLabel->setText( tempStation.radioText() ); - } else if ( !tempStation.dynamicPsText().isEmpty() ) { - mRadiotextLabel->setText( tempStation.dynamicPsText() ); - } else { - mRadiotextLabel->setText( "" ); - } - - mUrlLabel->setText( tempStation.url() ); - - mFrequency = tempStation.frequency(); - - updateFavoriteIcon( tempStation.isFavorite() ); - } -} - -/*! - * - */ -void RadioStationItem::setFrequency( uint frequency ) -{ - LOG_FORMAT( "RadioStationItem::setFrequency: %d", frequency ); - - mNameLabel->setTextWithoutFading( parseFrequency( frequency ) ); - mGenreLabel->setTextWithoutFading( "" ); - mRadiotextLabel->setTextWithoutFading( "" ); - mUrlLabel->setTextWithoutFading( "" ); - mFrequency = frequency; - updateFavoriteIcon( false ); -} - -/*! - * - */ -void RadioStationItem::cleanRdsData() -{ - mNameLabel->setTextWithoutFading( "" ); - mGenreLabel->setTextWithoutFading( "" ); - mRadiotextLabel->setTextWithoutFading( "" ); - mUrlLabel->setTextWithoutFading( "" ); -} - -/*! - * - */ -void RadioStationItem::handleLongPress( const QPointF& /*coords*/ ) -{ - QString text = QString( "Selected frequency: %1" ).arg( mFrequency ); -// HbMessageBox::information( text ); -} - -/*! - * - */ -void RadioStationItem::updateFavoriteIcon( bool isFavorite ) -{ - if ( !mCarousel.isInScanningMode() ) { - if ( isFavorite ) { - mIconButton->setIcon( mCarousel.favoriteIcon() ); - } else { - mIconButton->setIcon( mCarousel.nonFavoriteIcon() ); - } - } else { - mIconButton->setIcon( HbIcon( "" ) ); - } -} - -/*! - * - */ -RadioStationCarousel* RadioStationItem::carousel() -{ - return static_cast( itemView() ); -} - -/*! - * - */ -QString RadioStationItem::parseFrequency( const uint frequency ) -{ - //TODO: Frequency localization temporarily disabled - QString loc = "%L1 Mhz";// "txt_rad_list_l1_mhz_big" ); - return loc.arg( RadioStation::parseFrequency( frequency ) ); -} - -/*! - * - */ -QString RadioStationItem::nameOrFrequency( const RadioStation& station, uint frequency ) -{ - if ( frequency == 0 ) { - frequency = station.frequency(); - } - - QString text = ""; - if ( station.isValid() && !station.name().isEmpty() ) { - text = station.name(); - } else { - text = parseFrequency( frequency ); - } - - return text; -} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiostationsview.cpp --- a/radioapp/radiowidgets/src/radiostationsview.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiostationsview.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -23,18 +23,21 @@ #include #include #include +#include // User includes #include "radiostationsview.h" #include "radiologger.h" #include "radiowindow.h" #include "radiouiengine.h" -#include "radiobannerlabel.h" #include "radiofrequencyscanner.h" #include "radiouiloader.h" #include "radiostationmodel.h" #include "radiostation.h" -#include "radiostationfiltermodel.h" + +// Constants +const char* REGEX_SHOW_FAVORITES = "true"; +const char* REGEX_SHOW_ALL = ".+"; /*! * @@ -42,11 +45,9 @@ RadioStationsView::RadioStationsView() : RadioViewBase( false ), mModel( 0 ), - mFilterModel( 0 ), mScanStationsAction( 0 ), mClearListAction( 0 ), mStationsList( 0 ), - mHeadingBanner( 0 ), mFavoritesButton( 0 ), mLocalStationsButton( 0 ), mSelectedStation( new RadioStation ), @@ -97,33 +98,42 @@ * Private slot * */ -void RadioStationsView::listItemClicked( const QModelIndex& index ) +void RadioStationsView::handleClick( const QModelIndex& index ) { LOG_TIMESTAMP( "Channel change started" ); QModelIndex sourceIndex = mFilterModel->mapToSource( index ); *mSelectedStation = mModel->stationAt( sourceIndex.row() ); - mMainWindow->uiEngine().tuneFrequency( mSelectedStation->frequency(), TuneReason::StationsList ); + mUiEngine->setFrequency( mSelectedStation->frequency(), TuneReason::StationsList ); } /*! * Private slot * */ -void RadioStationsView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords ) +void RadioStationsView::handleLongPress( HbAbstractViewItem* item, const QPointF& coords ) { Q_UNUSED( item ); HbMenu* menu = mUiLoader->findObject( DOCML::NAME_CONTEXT_MENU ); - *mSelectedStation = mFilterModel->data( item->modelIndex(), RadioStationModel::RadioStationRole ).value(); + *mSelectedStation = mFilterModel->data( item->modelIndex(), RadioRole::RadioStationRole ).value(); HbAction* favoriteAction = mUiLoader->findObject( DOCML::NAME_CONTEXT_FAVORITE ); + if ( mSelectedStation->isFavorite() ) { favoriteAction->setText( hbTrId( "txt_rad_menu_remove_favourite" ) ); } else { favoriteAction->setText( hbTrId( "txt_rad_menu_add_to_favourites" ) ); } + HbAction* playAction = mUiLoader->findObject( DOCML::SV_NAME_PLAY_ACTION ); + + if ( mSelectedStation->frequency() == mUiEngine->currentFrequency() ) { + playAction->setVisible( false ); + } else { + playAction->setVisible( true ); + } + menu->setPreferredPos( QPointF( size().width() / 2 - menu->size().width() / 2, coords.y() - menu->size().height() / 2 ) ); menu->show(); } @@ -135,35 +145,27 @@ void RadioStationsView::updateAntennaStatus( bool connected ) { Q_UNUSED( connected ); - updateControlVisibilities(); + updateVisibilities(); } /*! * Private slot * */ -void RadioStationsView::updateCurrentStation() +void RadioStationsView::updateViewMode() { - mFilterModel->invalidate(); -} + QString section = DOCML::SV_SECTION_SHOW_ALL_STATIONS; + QString filter = REGEX_SHOW_ALL; -/*! - * Private slot - * - */ -void RadioStationsView::deckButtonPressed() -{ - const bool showFavorites = mFavoritesButton->isChecked(); - if ( showFavorites ) { - loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_FAVORITES ); - } else { - loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS ); + if ( sender() == mFavoritesButton ) { + section = DOCML::SV_SECTION_SHOW_FAVORITES; + filter = REGEX_SHOW_FAVORITES; } - mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite - : RadioStation::LocalStation ); + loadSection( DOCML::FILE_STATIONSVIEW, section ); + mFilterModel->setFilterRegExp( filter ); - updateControlVisibilities(); + updateVisibilities(); } /*! @@ -172,7 +174,7 @@ */ void RadioStationsView::startScanning() { - const int rowCount = mMainWindow->uiEngine().stationModel().rowCount(); + const int rowCount = mUiEngine->stationModel().rowCount(); mCurrentQuestion = StartScanning; if ( rowCount > 0 ) { askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) ); @@ -187,7 +189,7 @@ */ void RadioStationsView::finishScanning() { - updateControlVisibilities(); + updateVisibilities(); mFrequencyScanner.take(); } @@ -195,7 +197,7 @@ * Private slot * */ -void RadioStationsView::updateControlVisibilities() +void RadioStationsView::updateVisibilities() { LOG_SLOT_CALLER; bool listEmpty = mModel->rowCount() == 0; @@ -205,10 +207,10 @@ listEmpty = mModel->favoriteCount() == 0; } - mClearListAction->setVisible( !listEmpty ); + mClearListAction->setEnabled( !listEmpty ); - const bool scanAvailable = mMainWindow->uiEngine().isAntennaAttached() && localStationsMode; - mScanStationsAction->setVisible( scanAvailable ); + const bool scanAvailable = mUiEngine->isAntennaAttached() && localStationsMode; + mScanStationsAction->setEnabled( scanAvailable ); HbPushButton* scanButton = mUiLoader->findWidget( DOCML::SV_NAME_SCAN_BUTTON ); scanButton->setEnabled( scanAvailable ); @@ -231,16 +233,26 @@ * Private slot * */ +void RadioStationsView::play() +{ + LOG("Play from context menu"); + mUiEngine->setFrequency( mSelectedStation->frequency(), TuneReason::StationsList ); +} + +/*! + * Private slot + * + */ void RadioStationsView::rename() { HbInputDialog* nameQuery = new HbInputDialog(); nameQuery->setAttribute( Qt::WA_DeleteOnClose, true ); - nameQuery->setDismissPolicy( HbDialog::NoDismiss ); + nameQuery->setDismissPolicy( HbDialog::TapOutside ); nameQuery->setPromptText( hbTrId( "txt_rad_dialog_new_name" ) ); nameQuery->setInputMode( HbInputDialog::TextInput ); nameQuery->setValue( mSelectedStation->name() ); nameQuery->setObjectName( DOCML::NAME_INPUT_QUERY ); - nameQuery->open( this, SLOT(renameDone(HbAction* )) ); + nameQuery->open( this, SLOT(renameDone(HbAction*)) ); } /*! @@ -270,7 +282,7 @@ { HbInputDialog* dlg = static_cast( sender() ); - if( action == dlg->primaryAction() ) { + if( action ) { mModel->renameStation( mSelectedStation->presetIndex(), dlg->value().toString() ); } } @@ -282,13 +294,12 @@ void RadioStationsView::init() { LOG_METHOD; - mInitialized = true; - mModel = &mMainWindow->uiEngine().stationModel(); + mModel = &mUiEngine->stationModel(); - RadioUiEngine* engine = &mMainWindow->uiEngine(); - - mFilterModel = engine->createNewFilterModel( this ); - mFilterModel->setTypeFilter( RadioStation::LocalStation ); + mFilterModel = new QSortFilterProxyModel( this ); + mFilterModel->setDynamicSortFilter( true ); + mFilterModel->setFilterRole( RadioRole::IsFavoriteRole ); + mFilterModel->setSourceModel( &mUiEngine->stationModel() ); loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS ); @@ -298,40 +309,57 @@ mModel->setDetail( RadioStationModel::ShowIcons | RadioStationModel::ShowGenre ); mStationsList = mUiLoader->findObject( DOCML::SV_NAME_STATIONS_LIST ); - mHeadingBanner = mUiLoader->findWidget( DOCML::SV_NAME_HEADING_BANNER ); mFavoritesButton = mUiLoader->findObject( DOCML::SV_NAME_FAVORITES_BUTTON ); mLocalStationsButton = mUiLoader->findObject( DOCML::SV_NAME_LOCALS_BUTTON ); - connectAndTest( engine, SIGNAL(antennaStatusChanged(bool)), + Radio::connect( mUiEngine.data(), SIGNAL(antennaStatusChanged(bool)), this, SLOT(updateAntennaStatus(bool)) ); - connectAndTest( mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), - this, SLOT(updateControlVisibilities() ) ); - connectAndTest( mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), - this, SLOT(updateControlVisibilities()) ); - connectAndTest( mModel, SIGNAL(modelReset() ), - this, SLOT(updateControlVisibilities() ) ); - connectAndTest( mFavoritesButton, SIGNAL(triggered() ), - this, SLOT(deckButtonPressed() ) ); - connectAndTest( mLocalStationsButton, SIGNAL(triggered() ), - this, SLOT(deckButtonPressed() ) ); + Radio::connect( mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), + this, SLOT(updateVisibilities()) ); + Radio::connect( mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), + this, SLOT(updateVisibilities()) ); + Radio::connect( mModel, SIGNAL(modelReset()), + this, SLOT(updateVisibilities()) ); + Radio::connect( mFavoritesButton, SIGNAL(triggered()), + this, SLOT(updateViewMode()) ); + Radio::connect( mLocalStationsButton, SIGNAL(triggered() ), + this, SLOT(updateViewMode()) ); + Radio::connect( mStationsList, SIGNAL(activated(QModelIndex)), + this, SLOT(handleClick(QModelIndex)) ); + Radio::connect( mStationsList, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), + this, SLOT(handleLongPress(HbAbstractViewItem*,QPointF)) ); - connectAndTest( engine, SIGNAL(tunedToFrequency(uint,int)), this, SLOT(updateCurrentStation()) ); + connectCommonMenuItem( MenuItem::Exit ); + connectXmlElement( DOCML::SV_NAME_SCAN_BUTTON, SIGNAL(clicked()), + this, SLOT(startScanning()) ); + + // Context menu actions + connectXmlElement( DOCML::SV_NAME_PLAY_ACTION, SIGNAL(triggered()), + this, SLOT(play()) ); + connectXmlElement( DOCML::SV_NAME_RENAME_ACTION, SIGNAL(triggered()), + this, SLOT(rename()) ); + connectXmlElement( DOCML::SV_NAME_FAVORITE_ACTION, SIGNAL(triggered()), + this, SLOT(toggleFavorite()) ); + connectXmlElement( DOCML::SV_NAME_DELETE_ACTION, SIGNAL(triggered()), + this, SLOT(deleteStation()) ); // "Scan local stations" menu item mScanStationsAction = mUiLoader->findObject( DOCML::SV_NAME_SCAN_ACTION ); - + Radio::connect( mScanStationsAction, SIGNAL(triggered() ), + this, SLOT(startScanning() ) ); + // "Remove all presets" menu item mClearListAction = mUiLoader->findObject( DOCML::SV_NAME_CLEAR_LIST_ACTION ); - connectAndTest( mClearListAction, SIGNAL(triggered() ), + Radio::connect( mClearListAction, SIGNAL(triggered() ), this, SLOT(clearList() ) ); connectCommonMenuItem( MenuItem::UseLoudspeaker ); initListView(); - + initBackAction(); - updateControlVisibilities(); + updateViewMode(); } /*! @@ -340,32 +368,24 @@ void RadioStationsView::userAccepted() { if ( mCurrentQuestion == StartScanning ) { - mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) ); + mFrequencyScanner.reset( new RadioFrequencyScanner( *mUiEngine, this ) ); - connectAndTest( mFrequencyScanner.data(), SIGNAL(frequencyScannerFinished()), + Radio::connect( mFrequencyScanner.data(), SIGNAL(frequencyScannerFinished()), this, SLOT(finishScanning()) ); mFrequencyScanner->startScanning(); } else if ( mCurrentQuestion == ClearList ){ const bool favoriteMode = mFavoritesButton->isChecked(); mModel->removeAll( favoriteMode ? RadioStationModel::RemoveFavorites : RadioStationModel::RemoveAll ); - updateControlVisibilities(); + updateVisibilities(); } else if ( mCurrentQuestion == DeleteStation ) { - mModel->removeStation( mModel->currentStation() ); + mModel->removeStation( *mSelectedStation ); } mCurrentQuestion = NoQuestion; } /*! - * \reimp - */ -void RadioStationsView::showEvent( QShowEvent* event ) -{ - RadioViewBase::showEvent( event ); -} - -/*! * */ void RadioStationsView::initListView() diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiostripbase.cpp --- a/radioapp/radiowidgets/src/radiostripbase.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiostripbase.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -34,7 +34,7 @@ mModel( 0 ), mIsCyclic( true ), mAutoCenter( false ), - mSpacing( 0 ), + mOverlap( 0 ), mItemPoolParent( new QGraphicsWidget( NULL ) ), mCurrentIndex( 0 ), mPressedIndex( 0 ), @@ -53,9 +53,6 @@ // mItemParent is used to hold the unused QGraphicsItem's in the pool. It's visibility is set to false // so the visibility of the items doesn't need to be modified. mItemPoolParent->setVisible( false ); - - connectAndTest( this, SIGNAL(scrollPositionChanged(QPointF)), - this, SLOT(scrollPositionChanged(QPointF))); } /*! @@ -124,19 +121,9 @@ /*! * */ -void RadioStripBase::setSpacing( qreal spacing ) +void RadioStripBase::setOverlap( qreal overlap ) { - if ( mSpacing != spacing ) - { - mSpacing = spacing; - - prepareGeometryChange(); - - populateAndLayout(); - - update(); - updateGeometry(); - } + mOverlap = overlap; } /*! @@ -227,15 +214,6 @@ } /*! - * Private slot - */ -void RadioStripBase::scrollPositionChanged( QPointF newPosition ) -{ - adjustItems(); - scrollPosChanged( newPosition ); -} - -/*! * */ void RadioStripBase::moveAllItemsToPool() @@ -266,17 +244,16 @@ mStripLength = boundingRect().width(); qreal itemSize = mItemSize.width(); - mContentsLength = mModel->rowCount() * (itemSize + mSpacing) + mSpacing; + mContentsLength = mModel->rowCount() * (itemSize - mOverlap); if ( mIsCyclic ) { // if treating the items cyclically, double the content area so it can // be shifted back and forth as you scroll - mContentsLength = mModel->rowCount() * (itemSize + mSpacing); - mContentsLength *= 2.0; + mContentsLength *= 2; } - qreal currPos = mSpacing; + qreal currPos = -mOverlap; for ( int i = 0; i < mModel->rowCount(); ++i ) { if ( currPos > mStripLength ) { @@ -286,16 +263,12 @@ QGraphicsItem* item = constructItem( i, true ); if ( item ) { - item->setPos( QPointF( currPos, mSpacing ) ); - currPos += itemSize + mSpacing; + item->setPos( QPointF( currPos, 0 ) ); + currPos += itemSize - mOverlap; } } - QRectF contentsRect(0,0,0,0); - contentsRect.setBottom( itemSize + 2 * mSpacing ); - contentsRect.setRight( mContentsLength ); - - mStripContainer->setGeometry( contentsRect ); + mStripContainer->setPreferredSize( mContentsLength, mItemSize.height() ); if ( mCurrentIndex >= 0 ) { @@ -373,7 +346,7 @@ */ qreal RadioStripBase::indexToOffset( int index ) { - return index * ( mItemSize.width() + mSpacing ) + mSpacing; + return index * ( mItemSize.width() - mOverlap ) - mOverlap; } /*! @@ -382,7 +355,7 @@ int RadioStripBase::offsetToIndex( qreal offset ) { const int rows = mModel->rowCount(); - int index = (int)( ( offset - mSpacing) / ( mItemSize.width() + mSpacing ) ); + int index = (int)( offset / ( mItemSize.width() - mOverlap ) ); if ( mIsCyclic ) { @@ -479,7 +452,7 @@ QGraphicsItem* item = constructItem( i, true ); if ( item ) { - item->setPos( QPointF( indexToOffset( i ), mSpacing ) ); + item->setPos( QPointF( indexToOffset( i ), 0 ) ); } } } @@ -492,7 +465,7 @@ QGraphicsItem* item = constructItem( i, false ); if ( item ) { - item->setPos( QPointF( indexToOffset( i ), mSpacing ) ); + item->setPos( QPointF( indexToOffset( i ), 0 ) ); } } @@ -503,8 +476,21 @@ QGraphicsItem* item = constructItem( i, true ); if ( item ) { - item->setPos( QPointF( indexToOffset( i ), mSpacing ) ); + item->setPos( QPointF( indexToOffset( i ), 0 ) ); } } } } + +/*! + * \reimp + */ +bool RadioStripBase::scrollByAmount( const QPointF& delta ) +{ + bool ret = HbScrollArea::scrollByAmount( delta ); + + adjustItems(); + scrollPosChanged(); + + return ret; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiouiutilities.cpp --- a/radioapp/radiowidgets/src/radiouiutilities.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* -* 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: -* -*/ - -// System includes -#include - -// User includes -#include "radiouiutilities.h" -#include "radiofrequencystrip.h" -#include "radiostationcarousel.h" -#include "radiofrequencyscanner.h" -#include "radiologger.h" - -// Constants - -static RadioUiUtilities* theInstance = 0; - -/*! - * - */ -RadioUiUtilities::RadioUiUtilities() -{ -} - -/*! - * - */ -RadioUiUtilities::~RadioUiUtilities() -{ -} - -/*! - * - */ -bool RadioUiUtilities::addEffects( QEffectList list ) -{ - bool allAvailable = true; - QEffectList added; - foreach ( EffectInfo info, list ) { -#ifdef USE_LAYOUT_FROM_E_DRIVE - info.mPath.replace( QString( ":/" ), QString( "e:/radiotest/" ) ); -#endif - if ( HbEffect::add( info.mItem, info.mPath, info.mEvent ) ) { - added.append( info ); - } else { - allAvailable = false; - break; - } - } - - if ( !allAvailable ) { - foreach ( const EffectInfo& info, added ) { - HbEffect::remove( info.mItem, info.mPath, info.mEvent ); - } - } - - return allAvailable; -} - - -/*! - * - */ -RadioFrequencyStrip* RadioUiUtilities::frequencyStrip() -{ - return instance().mFrequencyStrip; -} - -/*! - * - */ -RadioStationCarousel* RadioUiUtilities::carousel() -{ - return instance().mCarousel; -} - -/*! - * - */ -bool RadioUiUtilities::isScannerAlive() -{ - RadioFrequencyScanner* scanner = instance().mScanner; - if ( scanner ) { - return scanner->isAlive(); - } - return false; -} - -/*! - * - */ -void RadioUiUtilities::setFrequencyStrip( RadioFrequencyStrip* frequencyStrip ) -{ - instance().mFrequencyStrip = frequencyStrip; -} - -/*! - * - */ -void RadioUiUtilities::setCarousel( RadioStationCarousel* carousel ) -{ - instance().mCarousel = carousel; -} - -/*! - * - */ -void RadioUiUtilities::setFrequencyScanner( RadioFrequencyScanner* scanner ) -{ - instance().mScanner = scanner; -} - -/*! - * - */ -RadioUiUtilities& RadioUiUtilities::instance() -{ - if ( !::theInstance ) { - ::theInstance = new RadioUiUtilities; - } - return *::theInstance; -} - diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radioutil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiowidgets/src/radioutil.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,191 @@ +/* +* 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: +* +*/ + +// System includes +#include +#include + +// User includes +#include "radioutil.h" +#include "radiofrequencystrip.h" +#include "radiostationcarousel.h" +#include "radiofrequencyscanner.h" +#include "radiologger.h" + +// Constants + +static RadioUtil* theInstance = 0; + +/*! + * + */ +RadioUtil::RadioUtil() : + mScanStatus( Scan::NotScanning ) +{ +} + +/*! + * + */ +RadioUtil::~RadioUtil() +{ +} + +/*! + * + */ +bool RadioUtil::addEffects( QEffectList list ) +{ + bool allAvailable = true; + QEffectList added; + foreach ( EffectInfo info, list ) { + if ( HbEffect::add( info.mItem, info.mPath, info.mEvent ) ) { + added.append( info ); + } else { + allAvailable = false; + break; + } + } + + if ( !allAvailable ) { + foreach ( const EffectInfo& info, added ) { + HbEffect::remove( info.mItem, info.mPath, info.mEvent ); + } + } + + return allAvailable; +} + + +/*! + * + */ +RadioFrequencyStrip* RadioUtil::frequencyStrip() +{ + return instance().mFrequencyStrip.data(); +} + +/*! + * + */ +RadioStationCarousel* RadioUtil::carousel() +{ + return instance().mCarousel.data(); +} + +/*! + * + */ +bool RadioUtil::isScannerAlive() +{ + RadioFrequencyScanner* scanner = instance().mScanner.data(); + if ( scanner ) { + return scanner->isAlive(); + } + return false; +} + +/*! + * + */ +Scan::Status RadioUtil::scanStatus() +{ + return instance().mScanStatus; +} + +/*! + * + */ +void RadioUtil::setFrequencyStrip( RadioFrequencyStrip* frequencyStrip ) +{ + instance().mFrequencyStrip = frequencyStrip; +} + +/*! + * + */ +void RadioUtil::setCarousel( RadioStationCarousel* carousel ) +{ + instance().mCarousel = carousel; +} + +/*! + * + */ +void RadioUtil::setFrequencyScanner( RadioFrequencyScanner* scanner ) +{ + instance().mScanner = scanner; +} + +/*! + * + */ +void RadioUtil::setScanStatus( Scan::Status status ) +{ + instance().mScanStatus = status; +} + +/*! + * + */ +Scroll::Direction RadioUtil::scrollDirectionFromSkipMode( int skipMode ) +{ + return ( skipMode == StationSkip::Next || skipMode == StationSkip::NextFavorite ) + ? Scroll::Left : Scroll::Right; +} + +/*! + * + */ +Scroll::Direction RadioUtil::scrollDirection( int direction ) +{ + return static_cast( direction ); +} + +/*! + * + */ +TuneReason::Reason RadioUtil::tuneReason( int tuneReason ) +{ + return static_cast( tuneReason ); +} + +/*! + * + */ +void RadioUtil::showDiscreetNote( const QString& text ) +{ + RadioUtil& self = instance(); + if ( !self.mNotificationDialog ) { + self.mNotificationDialog = new HbNotificationDialog(); + } + self.mNotificationDialog.data()->setAttribute( Qt::WA_DeleteOnClose ); + self.mNotificationDialog.data()->setTitle( text ); + self.mNotificationDialog.data()->show(); +} + +/*! + * + */ +RadioUtil& RadioUtil::instance() +{ + if ( !::theInstance ) { + ::theInstance = new RadioUtil; + } + return *::theInstance; +} + diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radioviewbase.cpp --- a/radioapp/radiowidgets/src/radioviewbase.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radioviewbase.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -35,7 +35,6 @@ HbView( 0 ), mMainWindow( 0 ), mUiLoader( 0 ), - mInitialized( false ), mTransientView( transient ), mUseLoudspeakerAction( 0 ), mOrientation( Qt::Vertical ) @@ -55,10 +54,27 @@ /*! * */ -void RadioViewBase::setMembers( RadioUiLoader* uiLoader, RadioWindow* mainWindow ) +void RadioViewBase::setMembers( RadioWindow* mainWindow, RadioUiLoader* uiLoader ) +{ + mMainWindow = mainWindow; + mUiLoader.reset( uiLoader ); +} + +/*! + * + */ +void RadioViewBase::preLazyLoadInit() { - mUiLoader.reset( uiLoader ); - mMainWindow = mainWindow; + // Default implementation does nothing +} + +/*! + * + */ +void RadioViewBase::initialize( QSharedPointer uiEngine ) +{ + mUiEngine = uiEngine; + init(); } /*! @@ -66,7 +82,7 @@ */ bool RadioViewBase::isInitialized() const { - return mInitialized; + return mUiEngine; } /*! @@ -89,6 +105,14 @@ } /*! + * + */ +void RadioViewBase::bringToForeground() +{ + mMainWindow->raise(); +} + +/*! * Protected slot * */ @@ -120,7 +144,6 @@ /*! * Private slot - * TODO: Refactor this awkwardness once Orbit figures out a better way */ void RadioViewBase::handleUserAnswer( HbAction* answer ) { @@ -137,9 +160,9 @@ { // The default back button activates the tuning view HbAction* backAction = new HbAction( Hb::BackNaviAction, this ); - connectAndTest( backAction, SIGNAL(triggered()), + Radio::connect( backAction, SIGNAL(triggered()), mMainWindow, SLOT(activateMainView()) ); - setNavigationAction( backAction ); + setNavigationAction( backAction ); } /*! @@ -147,14 +170,19 @@ */ void RadioViewBase::connectCommonMenuItem( int menuItem ) { - RadioUiEngine* engine = &mMainWindow->uiEngine(); switch ( menuItem ) { case MenuItem::UseLoudspeaker: mUseLoudspeakerAction = mUiLoader->findObject( DOCML::NAME_LOUDSPEAKER_ACTION ); if ( mUseLoudspeakerAction ) { - connectAndTest( mUseLoudspeakerAction, SIGNAL(triggered()), engine, SLOT(toggleAudioRoute()) ); - updateAudioRouting( engine->isUsingLoudspeaker() ); - connectAndTest( engine, SIGNAL(audioRouteChanged(bool)), this, SLOT(updateAudioRouting(bool)) ); + Radio::connect( mUseLoudspeakerAction, SIGNAL(triggered()), mUiEngine.data(), SLOT(toggleAudioRoute()) ); + updateAudioRouting( mUiEngine->isUsingLoudspeaker() ); + Radio::connect( mUiEngine.data(), SIGNAL(audioRouteChanged(bool)), this, SLOT(updateAudioRouting(bool)) ); + } + break; + + case MenuItem::Exit: + if ( HbAction* exitAction = mUiLoader->findObject( DOCML::NAME_EXIT_ACTION ) ) { + Radio::connect( exitAction, SIGNAL(triggered()), this, SLOT(quit()) ); } break; @@ -166,10 +194,10 @@ /*! * */ -void RadioViewBase::connectXmlElement( const char* name, const char* signal, QObject* receiver, const char* slot ) +void RadioViewBase::connectXmlElement( const QString& name, const char* signal, QObject* receiver, const char* slot ) { if ( QObject* action = mUiLoader->findObject( name ) ) { - connectAndTest( action, signal, receiver, slot ); + Radio::connect( action, signal, receiver, slot ); } } @@ -179,7 +207,7 @@ void RadioViewBase::connectViewChangeMenuItem( QString name, const char* slot ) { if ( QObject* action = mUiLoader->findObject( name ) ) { - connectAndTest( action, SIGNAL(triggered()), mMainWindow, slot ); + Radio::connect( action, SIGNAL(triggered()), mMainWindow, slot ); } } @@ -189,7 +217,7 @@ void RadioViewBase::loadSection( const QString& docml, const QString& section ) { LOG_FORMAT( "RadioViewBase::loadSection: Docml: %s, section: %s", GETSTRING( docml ), GETSTRING( section ) ); - bool ok = false; + bool ok = false; mUiLoader->load( docml, section, &ok ); LOG_ASSERT( ok, LOG_FORMAT( "Loading of section %s failed!", GETSTRING( section ) ) ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgets/src/radiowindow.cpp --- a/radioapp/radiowidgets/src/radiowindow.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgets/src/radiowindow.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -25,6 +25,7 @@ #include "radiowindow.h" #include "radiomainview.h" #include "radiostationsview.h" +#include "radiohistoryview.h" #include "radiouiengine.h" #include "radiostationmodel.h" #include "radiologger.h" @@ -33,16 +34,15 @@ // Constants /** - * Desired amount of delay of volumesliderpopup + * Timeout for volumesliderpopup */ -const int KVolumeSliderDelay = 5000; +const int VOLUME_POPUP_TIMEOUT = 5000; /*! * */ RadioWindow::RadioWindow( QWidget* parent ) : - HbMainWindow( parent ), - mUiEngine( new RadioUiEngine( this ) ) + HbMainWindow( parent ) { } @@ -62,29 +62,25 @@ HbDeviceMessageBox box( text, HbMessageBox::MessageTypeWarning ); box.setTimeout( HbPopup::NoTimeout ); box.setDismissPolicy( HbPopup::NoDismiss ); - box.exec(); + box.show(); } /*! * */ -void RadioWindow::init() +void RadioWindow::init( QSystemDeviceInfo* deviceInfo ) { - connectAndTest( this, SIGNAL(viewReady()), - this, SLOT(initView()) ); + mDeviceInfo.reset( deviceInfo ); + + Radio::connect( this, SIGNAL(viewReady()), + this, SLOT(initView()) ); + Radio::connect( mDeviceInfo.data(), SIGNAL(currentProfileChanged(QSystemDeviceInfo::Profile)), + this, SLOT(queryOfflineUsage(QSystemDeviceInfo::Profile)) ); activateMainView(); } /*! - * - */ -RadioUiEngine& RadioWindow::uiEngine() -{ - return *mUiEngine; -} - -/*! * Returns the XML layout section that corresponds to the view orientation */ QString RadioWindow::orientationSection() @@ -97,7 +93,10 @@ */ void RadioWindow::activateMainView() { - activateView( mMainView, DOCML::FILE_MAINVIEW, Hb::ViewSwitchUseBackAnim ); + if ( !mMainView ) { + mMainView = ViewPtr( new RadioMainView() ); + } + activateView( mMainView.data(), DOCML::FILE_MAINVIEW, Hb::ViewSwitchUseBackAnim ); } /*! @@ -105,7 +104,10 @@ */ void RadioWindow::activateStationsView() { - activateView( mStationsView, DOCML::FILE_STATIONSVIEW ); + if ( !mStationsView ) { + mStationsView = ViewPtr( new RadioStationsView() ); + } + activateView( mStationsView.data(), DOCML::FILE_STATIONSVIEW ); } /*! @@ -113,7 +115,10 @@ */ void RadioWindow::activateHistoryView() { - activateView( mHistoryView, DOCML::FILE_HISTORYVIEW ); + if ( !mHistoryView ) { + mHistoryView = ViewPtr( new RadioHistoryView() ); + } + activateView( mHistoryView.data(), DOCML::FILE_HISTORYVIEW ); } /*! @@ -122,7 +127,9 @@ */ void RadioWindow::initView() { - if ( !mUiEngine->isInitialized() ) { + if ( !mUiEngine ) { + mUiEngine = QSharedPointer( new RadioUiEngine( this ) ); + // Start the engine if ( !mUiEngine->init() ) { showErrorMessage( hbTrId( "txt_fmradio_info_fm_radio_could_not_be_started" ) ); @@ -132,18 +139,20 @@ // MainWindow is the one that always listens for orientation changes and then delegates // the updates to the views - connectAndTest( this, SIGNAL(orientationChanged(Qt::Orientation)), + Radio::connect( this, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(updateOrientation(Qt::Orientation)) ); - connectAndTest( mUiEngine.data(), SIGNAL(volumeChanged(int)), + Radio::connect( mUiEngine.data(), SIGNAL(volumeChanged(int)), this, SLOT(showVolumeLevel(int)) ); - connectAndTest( mUiEngine.data(), SIGNAL(antennaStatusChanged(bool)), + Radio::connect( mUiEngine.data(), SIGNAL(antennaStatusChanged(bool)), this, SLOT(updateAntennaStatus(bool)) ); + Radio::connect( mUiEngine.data(), SIGNAL(powerOffRequested()), + qApp, SLOT(quit()) ); } RadioViewBase* view = static_cast( currentView() ); if ( !view->isInitialized() ) { - view->init(); + view->initialize( mUiEngine ); } } @@ -168,15 +177,16 @@ { if ( !mVolSlider ) { mVolSlider.reset( new HbVolumeSliderPopup() ); - mVolSlider->setRange( 0, KMaximumVolumeLevel ); + mVolSlider->setRange( 0, MAXIMUM_VOLUME_LEVEL ); mVolSlider->setSingleStep( 1 ); - mVolSlider->setTimeout( KVolumeSliderDelay ); - connectAndTest( mVolSlider.data(), SIGNAL(valueChanged(int)), + mVolSlider->setTimeout( VOLUME_POPUP_TIMEOUT ); + Radio::connect( mVolSlider.data(), SIGNAL(valueChanged(int)), mUiEngine.data(), SLOT(setVolume(int)) ); } mVolSlider->setValue( volume ); - mVolSlider->setText( QString( "%L1%" ).arg( volume * 100 / KMaximumVolumeLevel ) ); + //TODO: Check if this should be localized + mVolSlider->setText( QString( "%L1%" ).arg( volume * 100 / MAXIMUM_VOLUME_LEVEL ) ); mVolSlider->show(); } @@ -187,14 +197,45 @@ void RadioWindow::updateAntennaStatus( bool connected ) { if ( !connected ) { - HbMessageBox::information( hbTrId( "txt_rad_dpophead_connect_wired_headset" ) ); + if ( !mMessageBox ) { + mMessageBox.reset( new HbMessageBox() ); + } + mMessageBox->setText( hbTrId( "txt_rad_dpophead_connect_wired_headset" ) ); + mMessageBox->setDismissPolicy( HbPopup::NoDismiss ); + mMessageBox->setTimeout( HbPopup::NoTimeout ); +// mMessageBox->setAttribute( Qt::WA_DeleteOnClose, true ); + mMessageBox->open(); + } else { + mMessageBox.reset(); } } /*! + * Private slot + * + */ +void RadioWindow::queryOfflineUsage( QSystemDeviceInfo::Profile profile ) +{ + if ( profile == QSystemDeviceInfo::OfflineProfile ) { + bool okToContinue = false; + HbDeviceMessageBox box( hbTrId( "txt_rad_info_continue_using_the_radio_in_offline" ), HbMessageBox::MessageTypeQuestion ); + box.setTimeout( HbPopup::NoTimeout ); + box.exec(); + + okToContinue = box.isAcceptAction( box.triggeredAction() ); + + if ( okToContinue ) { + // Radio stays on + } else { + qApp->quit(); // Close radio + } + } // other profiles are not interesting +} + +/*! * */ -void RadioWindow::activateView( ViewPtr& aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags ) +void RadioWindow::activateView( RadioViewBase* aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags ) { LOG_METHOD; if ( aMember && aMember == currentView() ) { @@ -208,32 +249,30 @@ } bool viewCreated = false; - if ( !aMember ) { + if ( !aMember->isInitialized() ) { viewCreated = true; - RadioUiLoader* uiLoader = new RadioUiLoader(); - bool ok = false; + QScopedPointer uiLoader( new RadioUiLoader() ); - // View takes ownership of the ui loader when it is created inside the load function - QObjectList objectList = uiLoader->load( docmlFile, &ok ); + // By default the document loader would create a new HbView instance for our view so we need + // to use a silly little hack to prevent it. We call our view "view" and pass it to the document loader + // so it already exists. + aMember->setObjectName( DOCML::NAME_VIEW ); + QObjectList objectList; + objectList.append( aMember ); + uiLoader->setObjectTree( objectList ); + + bool ok = false; + uiLoader->load( docmlFile, &ok ); RADIO_ASSERT( ok , "FMRadio", "invalid DocML file" ); if ( !ok ) { - delete uiLoader; - uiLoader = 0; + uiLoader.reset(); return; } - aMember = ViewPtr( uiLoader->findObject( DOCML::NAME_VIEW ) ); - - foreach( QObject* object, objectList ) { - const QString className = object->metaObject()->className(); - if ( !object->parent() && object != aMember.data() ) { - object->setParent( aMember.data() ); - } - } - - aMember->setMembers( uiLoader, this ); + aMember->setMembers( this, uiLoader.take() ); + aMember->preLazyLoadInit(); addView( aMember ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgetsplugin/main.cpp --- a/radioapp/radiowidgetsplugin/main.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgetsplugin/main.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -20,12 +20,8 @@ #include // User includes -#include "radiostationsview.h" -#include "radiomainview.h" -#include "radiohistoryview.h" #include "radiostationcarousel.h" #include "radiofrequencystrip.h" -#include "radiobannerlabel.h" #include "radiofadinglabel.h" // Class declaration @@ -47,18 +43,10 @@ { QObject* object = 0; - if ( type == RadioMainView::staticMetaObject.className() ) { - object = new RadioMainView(); - } else if ( type == RadioStationsView::staticMetaObject.className() ) { - object = new RadioStationsView(); - } else if ( type == RadioHistoryView::staticMetaObject.className() ) { - object = new RadioHistoryView(); - } else if ( type == RadioStationCarousel::staticMetaObject.className() ) { + if ( type == RadioStationCarousel::staticMetaObject.className() ) { object = new RadioStationCarousel(); } else if ( type == RadioFrequencyStrip::staticMetaObject.className() ) { object = new RadioFrequencyStrip(); - } else if ( type == RadioBannerLabel::staticMetaObject.className() ) { - object = new RadioBannerLabel(); } else if ( type == RadioFadingLabel::staticMetaObject.className() ) { object = new RadioFadingLabel(); } @@ -76,10 +64,6 @@ QList RadioWidgetsPlugin::supportedObjects() { QList result; - result.append( &RadioMainView::staticMetaObject ); - result.append( &RadioStationsView::staticMetaObject ); - result.append( &RadioHistoryView::staticMetaObject ); - result.append( &RadioBannerLabel::staticMetaObject ); result.append( &RadioFadingLabel::staticMetaObject ); result.append( &RadioFrequencyStrip::staticMetaObject ); result.append( &RadioStationCarousel::staticMetaObject ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioapp/radiowidgetsplugin/radiowidgetsplugin.pro --- a/radioapp/radiowidgetsplugin/radiowidgetsplugin.pro Fri Jun 11 16:24:13 2010 +0100 +++ b/radioapp/radiowidgetsplugin/radiowidgetsplugin.pro Thu Jul 22 16:33:45 2010 +0100 @@ -14,28 +14,25 @@ # Description: # -TEMPLATE = lib -TARGET = radiowidgetsplugin +TMP_DIR_NAME = widgetsplugin +include(../buildflags.pri) -win32: { - DESTDIR = ../bin - LIBS += -L../bin -} +TEMPLATE = lib +TARGET = fmradiowidgetsplugin +symbian:TARGET.UID3 = 0x2002FF4D CONFIG += hb plugin QT += core INCLUDEPATH += ../radiowidgets/inc -INCLUDEPATH += ../commoninc +INCLUDEPATH += ../../common symbian: { - TARGET.EPOCALLOWDLLDATA = 1 - TARGET.CAPABILITY = CAP_GENERAL_DLL - pluginstub.sources = radiowidgetsplugin.dll + pluginstub.sources = fmradiowidgetsplugin.dll pluginstub.path = /resource/plugins DEPLOYMENT += pluginstub } SOURCES += main.cpp -LIBS += -lradiowidgets +LIBS += -lfmradiowidgets diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/api/cradioengine.h --- a/radioengine/engine/api/cradioengine.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/api/cradioengine.h Thu Jul 22 16:33:45 2010 +0100 @@ -15,7 +15,6 @@ * */ - #ifndef CRADIOENGINE_H_ #define CRADIOENGINE_H_ @@ -31,11 +30,9 @@ class MRadioApplicationSettings; class MRadioEngineSettings; class CRadioSystemEventCollector; -class CRadioPubSub; class CRadioRepositoryManager; class MRadioPresetSettings; class MRadioSettingsSetter; -class MRadioScanObserver; class MRadioEngineObserver; class MRadioRdsReceiver; @@ -76,13 +73,6 @@ virtual CRadioSettings& Settings() const = 0; /** - * Returns a reference to the publish & subscribe handler - * - * @return Reference to the publish & subscribe handler - */ - virtual CRadioPubSub* PubSub() const = 0; - - /** * Determines radio region */ virtual TRadioRegion DetermineRegion() = 0; @@ -91,9 +81,8 @@ * ( Re )initializes the radio. * * @param aRegionId Region id - * @param aPubSub Pointer to Publish&Subscribe object */ - virtual void InitRadioL( TInt aRegionId, CRadioPubSub* aPubSub = 0 ) = 0; + virtual void InitRadioL( TInt aRegionId ) = 0; /** * Has the radio been initialized @@ -163,6 +152,18 @@ virtual TBool IsFrequencyValid( TUint32 aFrequency = 0 ) const = 0; /** + * Sets or unsets the manual seek mode + * + * @param aManualSeekActive ETrue if active EFalse if not + */ + virtual void SetManualSeekMode( TBool aManualSeekActive ) = 0; + + /** + * Returns the manual seek mode status + */ + virtual TBool IsInManualSeekMode() const = 0; + + /** * Tunes to frequency * If radio is not initialized by InitRadioL, frequency is just * set to settings. @@ -174,20 +175,6 @@ RadioEngine::TRadioFrequencyEventReason aReason = RadioEngine::ERadioFrequencyEventReasonUnknown ) = 0; /** - * Test function to try to make the tuning as fast as possible. - * Use with care since this will skip a lot of checks done by the SetFrequency() function - */ - virtual void SetFrequencyFast( TUint32 aFrequency, - RadioEngine::TRadioFrequencyEventReason aReason = RadioEngine::ERadioFrequencyEventReasonUnknown ) = 0; - - /** - * Steps to next frequency according to direction - * - * @param aDirection The direciton to step to - */ - virtual void StepToFrequency( RadioEngine::TRadioTuneDirection aDirection ) = 0; - - /** * Performs seeking operation. * * @param aDirection direction of seeking operation. @@ -207,25 +194,6 @@ virtual RadioEngine::TRadioSeeking Seeking() const = 0; /** - * Starts scanning all available stations from the minimum frequency - * - * Calling this method also cancels any existing scan or seek operations. - * - * @param aObserver Observer to be notified of the progress of the scan. - * If a scan is currently in progress or the radio is not on, then - * the new scan is not performed at all and an error is passed on completion event. - * - */ - virtual void StartScan( MRadioScanObserver& aObserver ) = 0; - - /** - * Stops any scans currently in progress and notifies the observer - * - * @param aError The error code for completing the scanning. - */ - virtual void StopScan( TInt aError = KErrCancel ) = 0; - - /** * Changes volume by one level. * * @param aDirection Direction of the volume change. @@ -244,7 +212,7 @@ * * @param aMute mute status. */ - virtual void SetVolumeMuted( TBool aMute ) = 0; + virtual void SetVolumeMuted( TBool aMute, TBool aUpdateSettings = ETrue ) = 0; /** * Retrieves current antenna state. diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/api/mradioengineinitializer.h --- a/radioengine/engine/api/mradioengineinitializer.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/api/mradioengineinitializer.h Thu Jul 22 16:33:45 2010 +0100 @@ -27,7 +27,6 @@ class CRadioSystemEventCollector; class CRadioSettings; class CRadioEngine; -class CRadioPubSub; NONSHARABLE_CLASS( MRadioEngineInitializer ) { @@ -36,7 +35,6 @@ virtual CRadioAudioRouter* InitAudioRouterL() = 0; virtual CRadioSystemEventCollector* InitSystemEventCollectorL() = 0; virtual CRadioSettings* InitSettingsL() = 0; - virtual CRadioPubSub* InitPubSubL() = 0; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/api/mradioengineobserver.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/api/mradiordsdataobserver.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/api/mradiordsreceiver.h --- a/radioengine/engine/api/mradiordsreceiver.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/api/mradiordsreceiver.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,7 +20,6 @@ // Forward declarations class CRadioUtility; -class CRadioPubSub; class MRadioRdsDataObserver; NONSHARABLE_CLASS( MRadioRdsReceiver ) @@ -33,7 +32,7 @@ * @param aRadioUtility A reference to the radio utility * @param aPubSub Pointer to Publish&Subscribe object */ - virtual void InitL( CRadioUtility& aRadioUtility, CRadioPubSub* aPubSub ) = 0; + virtual void InitL( CRadioUtility& aRadioUtility ) = 0; /** * Adds an observer wich will be notified of the new RDS data diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/api/mradioscanobserver.h --- a/radioengine/engine/api/mradioscanobserver.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef MRADIOSCANOBSERVER_H_ -#define MRADIOSCANOBSERVER_H_ - -/** - * Interface for radio station scanning. - * - * Implementers of this interface are able to receive notifications - * when scanning finds a valid frequency and upon its completion. - */ -NONSHARABLE_CLASS( MRadioScanObserver ) - { - -public: - - /** - * Invoked when a frequency has been found with scanning. - * - * @param aFrequency The frequency, in kilohertz, that was found. - */ - virtual void ScanFrequencyEventL( TUint32 aFrequency ) = 0; - - /** - * Invoked when a scan has been completed. - * - * @param aError KErrNone when the scan was successfull, - * or any of the standard error codes otherwise. - */ - virtual void ScanCompletedEventL( TInt aError ) = 0; - - }; - -#endif // MRADIOSCANOBSERVER_H_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/bwins/fmradioengineu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/engine/bwins/fmradioengineu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,4 @@ +EXPORTS + ??1CRadioEngine@@UAE@XZ @ 1 NONAME ; CRadioEngine::~CRadioEngine(void) + ?NewL@CRadioEngine@@SAPAV1@AAVMRadioEngineInitializer@@@Z @ 2 NONAME ; class CRadioEngine * CRadioEngine::NewL(class MRadioEngineInitializer &) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/bwins/radioengineu.def --- a/radioengine/engine/bwins/radioengineu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -EXPORTS - ??1CRadioEngine@@UAE@XZ @ 1 NONAME ; CRadioEngine::~CRadioEngine(void) - ?NewL@CRadioEngine@@SAPAV1@AAVMRadioEngineInitializer@@@Z @ 2 NONAME ; class CRadioEngine * CRadioEngine::NewL(class MRadioEngineInitializer &) - diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/eabi/fmradioengineu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/engine/eabi/fmradioengineu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,6 @@ +EXPORTS + _ZN12CRadioEngine4NewLER23MRadioEngineInitializer @ 1 NONAME + _ZN12CRadioEngineD0Ev @ 2 NONAME + _ZN12CRadioEngineD1Ev @ 3 NONAME + _ZN12CRadioEngineD2Ev @ 4 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/eabi/radioengineu.def --- a/radioengine/engine/eabi/radioengineu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -EXPORTS - _ZN12CRadioEngine4NewLER23MRadioEngineInitializer @ 1 NONAME - _ZN12CRadioEngineD0Ev @ 2 NONAME - _ZN12CRadioEngineD1Ev @ 3 NONAME - _ZN12CRadioEngineD2Ev @ 4 NONAME - diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/group/bld.inf diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/group/radioengine.mmp --- a/radioengine/engine/group/radioengine.mmp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/group/radioengine.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -21,15 +21,16 @@ #include -TARGET radioengine.dll +TARGET fmradioengine.dll TARGETTYPE DLL -UID 0x1000008D 0x10281CB2 +UID 0x1000008D 0x2002FF4F VERSION 11.0 CAPABILITY CAP_GENERAL_DLL VENDORID VID_DEFAULT PAGED +SMPSAFE SOURCEPATH ../src SOURCE cradioengine.cpp @@ -38,11 +39,6 @@ SOURCE cradiordsreceiverbase.cpp SOURCE cradionetworkinfolistener.cpp -#ifdef __FEATURE_RDS_SIMULATOR -MACRO __FEATURE_RDS_SIMULATOR -SOURCE t_cradiordsreceiversimulator.cpp -#endif // __FEATURE_RDS_SIMULATOR - USERINCLUDE ../api USERINCLUDE ../inc USERINCLUDE ../../utils/api @@ -52,8 +48,8 @@ // Default system include paths for application layer modules. APP_LAYER_SYSTEMINCLUDE -LIBRARY radioengineutils.lib -LIBRARY radioenginesettings.lib +LIBRARY fmradioengineutils.lib +LIBRARY fmradioenginesettings.lib LIBRARY AudioOutputRouting.lib LIBRARY euser.lib diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/inc/cradioengineimp.h --- a/radioengine/engine/inc/cradioengineimp.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/inc/cradioengineimp.h Thu Jul 22 16:33:45 2010 +0100 @@ -36,7 +36,6 @@ class MRadioEngineSettings; class MRadioSettingsSetter; class MRadioEngineObserver; -class MRadioScanObserver; /** * Radio class takes care of the FM-radio side. @@ -56,7 +55,6 @@ void SetSystemEventCollector( CRadioSystemEventCollector* aCollector ); void SetRadioSettings( CRadioSettings* aSettings ); - void SetRadioPubSub( CRadioPubSub* aPubSub ); private: @@ -67,9 +65,8 @@ CRadioAudioRouter& AudioRouter() const; CRadioSystemEventCollector& SystemEventCollector() const; CRadioSettings& Settings() const; - CRadioPubSub* PubSub() const; TRadioRegion DetermineRegion(); - void InitRadioL( TInt aRegionId, CRadioPubSub* aPubSub = 0 ); + void InitRadioL( TInt aRegionId ); TBool RadioInitialized() const; void EnableAudio( TBool aEnable, TBool aDelay = ETrue ); TBool RadioAudioEnabled() const; @@ -78,19 +75,16 @@ void RemoveObserver( MRadioEngineObserver* aObserver ); void SetAudioMode( TInt aAudioMode ); TBool IsFrequencyValid( TUint32 aFrequency = 0 ) const; + void SetManualSeekMode( TBool aManualSeekActive ); + TBool IsInManualSeekMode() const; void SetFrequency( TUint32 aFrequency, RadioEngine::TRadioFrequencyEventReason aReason = RadioEngine::ERadioFrequencyEventReasonUnknown ); - void SetFrequencyFast( TUint32 aFrequency, - RadioEngine::TRadioFrequencyEventReason aReason = RadioEngine::ERadioFrequencyEventReasonUnknown ); - void StepToFrequency( RadioEngine::TRadioTuneDirection aDirection ); void Seek( RadioEngine::TRadioTuneDirection aDirection ); void CancelSeek(); RadioEngine::TRadioSeeking Seeking() const; - void StartScan( MRadioScanObserver& aObserver ); - void StopScan( TInt aError = KErrCancel ); void AdjustVolume( RadioEngine::TRadioVolumeSetDirection aDirection ); void SetVolume( TInt aVolume ); - void SetVolumeMuted( TBool aMute ); + void SetVolumeMuted( TBool aMute, TBool aUpdateSettings = ETrue ); TBool IsAntennaAttached(); TBool IsFmTransmitterActive() const; void SetAntennaAttached( TBool aAntennaAttached ); @@ -201,26 +195,6 @@ void DoNotifyRadioEventL( TInt aRadioEvent, TInt aErrorCode = KErrNone ); /** - * Notifies the observer of a radio scan event. - * - * @param aEvent Event to notify. - * @param aObserver Scan observer. - * @param aError Error code the event completed with. - */ - void NotifyRadioScanEvent( TRadioScanEvent aEvent, MRadioScanObserver& aObserver, - TInt aError = KErrNone ); - - /** - * Notifies the observer of a radio scan event. - * - * @param aEvent Event to notify. - * @param aObserver Scan observer. - * @param aError Error code the event completed with. - */ - void DoNotifyRadioScanEventL( TRadioScanEvent aEvent, MRadioScanObserver& aObserver, - TInt aError ); - - /** * Handles the change in audio routing * * @param aDestination The new routing destination @@ -401,18 +375,6 @@ RadioEngine::TRadioFrequencyEventReason iFreqEventReason; /** - * Publish&Subscribe object. Can be NULL. - * Owned if set - */ - CRadioPubSub* iPubSub; - - /** - * Radio scan observer. NULL when scanning is not ongoing - * Not owned. - */ - MRadioScanObserver* iScanObserver; - - /** * The previously scanned frequency, or KErrNotFound if none. */ TUint32 iPreviousScannedFrequency; @@ -422,6 +384,11 @@ */ TBool iPreviousMuteState; + /** + * Manual seek mode flag + */ + TBool iManualSeekMode; + }; #endif // CRADIOENGINEIMP_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/inc/cradiordsreceiver.h --- a/radioengine/engine/inc/cradiordsreceiver.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/inc/cradiordsreceiver.h Thu Jul 22 16:33:45 2010 +0100 @@ -41,7 +41,7 @@ // from base class MRadioRdsReceiver - void InitL( CRadioUtility& aRadioUtility, CRadioPubSub* aPubSub ); + void InitL( CRadioUtility& aRadioUtility ); void SetAutomaticSwitchingL( TBool aEnable ); void StartReceiver(); void StopReceiver(); diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/inc/cradiordsreceiverbase.h --- a/radioengine/engine/inc/cradiordsreceiverbase.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/inc/cradiordsreceiverbase.h Thu Jul 22 16:33:45 2010 +0100 @@ -28,7 +28,6 @@ // Forward declarations class CRadioUtility; -class CRadioPubSub; // Class declaration NONSHARABLE_CLASS( CRadioRdsReceiverBase ) : public CBase @@ -132,12 +131,6 @@ */ MRadioEngineSettings& iSettings; - /** - * Publish&Subscribe object. Can be NULL. - * Not own. - */ - CRadioPubSub* iPubSub; - private: // data /** diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/inc/t_cradiordsreceiversimulator.h --- a/radioengine/engine/inc/t_cradiordsreceiversimulator.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef T_CRADIORDSRECEIVERSIMULATOR_H -#define T_CRADIORDSRECEIVERSIMULATOR_H - -// User includes -#include "mradiordsdataobserver.h" -#include "cradiordsreceiverbase.h" - -// Class declaration -NONSHARABLE_CLASS( CRadioRdsReceiverSimulator ) : public CRadioRdsReceiverBase - { -public: - - static CRadioRdsReceiverSimulator* NewL( MRadioEngineSettings& aSettings ); - - virtual ~CRadioRdsReceiverSimulator(); - -// from base class MRadioRdsReceiver - - void InitL( CRadioUtility& aRadioUtility, CRadioPubSub* aPubSub ); - void StartReceiver(); - void StopReceiver(); - -private: - - /** The simulated events */ - enum TRadioRdsSimulationEvent - { - ERadioRdsEventSignalOn, - ERadioRdsEventSignalOff, - ERadioRdsEventPS, - ERadioRdsEventAFBegin, - ERadioRdsEventAFEnd, - ERadioRdsEventRadioText, - ERadioRdsEventRadioTextPlus - }; - - CRadioRdsReceiverSimulator( MRadioEngineSettings& aSettings ); - - void ConstructL(); - - void ParseRdsDataL(); - - void startRTPlusTimer(); - - /** - * StaticRdsSimulationCallback Callback for RDS simulation - */ - static TInt StaticRdsSimulationCallback( TAny* aSelfPtr ); - - /** - * Callback for RT+ simulation - */ - static TInt StaticRdsSimulationCallback2( TAny* aSelfPtr ); - -private: // data - - /** Timer for RDS event simulation */ - CPeriodic* iEventSimulatorTimer; - - /** Timer for RT+ events */ - CPeriodic* iEventSimulatorTimer2; - - /** The iterator for RDS events */ - TInt iEventIterator; - - /** The iterator for RT+ events */ - TInt iRtPlusIterator; - - /** The iterator for RT events */ - TInt iRtIterator; - - /** The iterator for PS names */ - TInt iPsIterator; - - /** The iterator for frequencies */ - TInt iFrequencyIterator; - - /** The iterator for RT and RT+ information */ - TInt iRadioTextIterator; - - }; - -#endif // T_CRADIORDSRECEIVERSIMULATOR_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/src/cradioengine.cpp --- a/radioengine/engine/src/cradioengine.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/src/cradioengine.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ #include "cradioengineimp.h" #include "cradioenginelogger.h" #include "mradioengineinitializer.h" +#include "radioengineutils.h" // ================= MEMBER FUNCTIONS ======================= @@ -29,6 +30,8 @@ // EXPORT_C CRadioEngine* CRadioEngine::NewL( MRadioEngineInitializer& aInitializer ) { + RadioEngineUtils::InitializeL(); + LEVEL3( LOG_METHOD_AUTO ); CRadioAudioRouter* audioRouter = aInitializer.InitAudioRouterL(); CleanupStack::PushL( audioRouter ); @@ -38,10 +41,9 @@ self->SetSystemEventCollector( aInitializer.InitSystemEventCollectorL() ); self->SetRadioSettings( aInitializer.InitSettingsL() ); - self->SetRadioPubSub( aInitializer.InitPubSubL() ); self->ConstructL(); - self->InitRadioL( self->DetermineRegion(), self->PubSub() ); + self->InitRadioL( self->DetermineRegion() ); self->EnableAudio( ETrue ); CleanupStack::Pop( self ); @@ -55,6 +57,7 @@ CRadioEngine::CRadioEngine( CRadioAudioRouter* aAudioRouter ) : CRadioRoutableAudio( aAudioRouter ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -63,4 +66,5 @@ // EXPORT_C CRadioEngine::~CRadioEngine() { + RadioEngineUtils::Release(); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/src/cradioengineimp.cpp --- a/radioengine/engine/src/cradioengineimp.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/src/cradioengineimp.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -24,27 +24,24 @@ // User includes #include "cradioenginelogger.h" -#include "radiointernalpskeys.h" #include "radiointernalcrkeys.h" #include "cradioaudiorouter.h" -#include "cradiopubsub.h" #include "cradioengineimp.h" #include "mradioengineobserver.h" -#include "mradioscanobserver.h" #include "cradioregion.h" #include "cradiosettings.h" #include "mradioenginesettings.h" #include "mradiosettingssetter.h" -#include "cradiorepositorymanager.h" #include "cradiordsreceiver.h" #include "cradiosystemeventcollector.h" #include "cradionetworkinfolistener.h" #include "radioengine.hrh" +#include "cradioenginelogger.h" -#include "../../group/buildflags.hrh" -#ifdef __FEATURE_RDS_SIMULATOR -# include "t_cradiordsreceiversimulator.h" -#endif +// This has to be the last include. +#ifdef STUB_CONSTELLATION +# include +#endif //STUB_CONSTELLATION // Constants @@ -88,6 +85,7 @@ , iAntennaAttached( ETrue ) , iFreqEventReason( RadioEngine::ERadioFrequencyEventReasonUnknown ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -115,12 +113,7 @@ RadioEngine::ERadioHeadset : RadioEngine::ERadioSpeaker; User::LeaveIfError( iSettings->RadioSetter().SetAudioRoute( route ) ); -#ifdef __FEATURE_RDS_SIMULATOR - iRdsReceiver = CRadioRdsReceiverSimulator::NewL( iSettings->EngineSettings() ); -#else iRdsReceiver = CRadioRdsReceiver::NewL( iSettings->EngineSettings() ); -#endif - iNetworkInfoListener = CRadioNetworkInfoListener::NewL( iSettings->RadioSetter(), NULL ); iRdsReceiver->AddObserverL( this ); @@ -135,7 +128,7 @@ // CRadioEngineImp::~CRadioEngineImp() { - LOG( "CRadioEngineImp::~CRadioEngineImp -- Start" ); + LEVEL3( LOG_METHOD_AUTO ); delete iNetworkInfoListener; @@ -171,15 +164,12 @@ } delete iSystemEventCollector; - delete iPubSub; - if ( iSettings ) { iSettings->RadioSetter().SetObserver( NULL ); } delete iSettings; - LOG( "CRadioEngineImp::~CRadioEngineImp -- End" ); } // --------------------------------------------------------------------------- @@ -188,6 +178,7 @@ // void CRadioEngineImp::SetSystemEventCollector( CRadioSystemEventCollector* aCollector ) { + LEVEL3( LOG_METHOD_AUTO ); iSystemEventCollector = aCollector; } @@ -197,6 +188,7 @@ // void CRadioEngineImp::SetRadioSettings( CRadioSettings* aSettings ) { + LEVEL3( LOG_METHOD_AUTO ); iSettings = aSettings; iSettings->RadioSetter().SetObserver( this ); } @@ -205,17 +197,9 @@ // // --------------------------------------------------------------------------- // -void CRadioEngineImp::SetRadioPubSub( CRadioPubSub* aPubSub ) - { - iPubSub = aPubSub; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// CRadioAudioRouter& CRadioEngineImp::AudioRouter() const { + LEVEL3( LOG_METHOD_AUTO ); return *iAudioRouter; } @@ -225,6 +209,7 @@ // CRadioSystemEventCollector& CRadioEngineImp::SystemEventCollector() const { + LEVEL3( LOG_METHOD_AUTO ); return *iSystemEventCollector; } @@ -234,24 +219,17 @@ // CRadioSettings& CRadioEngineImp::Settings() const { + LEVEL3( LOG_METHOD_AUTO ); return *iSettings; } // --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioPubSub* CRadioEngineImp::PubSub() const - { - return iPubSub; - } - -// --------------------------------------------------------------------------- // Determines radio region // --------------------------------------------------------------------------- // TRadioRegion CRadioEngineImp::DetermineRegion() { + LEVEL3( LOG_METHOD_AUTO ); TRadioRegion region = ERadioRegionNone; MRadioEngineSettings& engineSettings = iSettings->EngineSettings(); @@ -289,15 +267,13 @@ // the radio is not functional // --------------------------------------------------------------------------- // -void CRadioEngineImp::InitRadioL( TInt aRegionId, CRadioPubSub* aPubSub ) +void CRadioEngineImp::InitRadioL( TInt aRegionId ) { LOG_METHOD_AUTO; - LOG_FORMAT( "CRadioEngineImp::InitRadioL: Region: %d", aRegionId ); + LOG_FORMAT( "Region: %d", aRegionId ); iRadioInitializationState = ERadioNotInitialized; - iPubSub = aPubSub; - iFreqEventReason = RadioEngine::ERadioFrequencyEventReasonUnknown; if ( iSettings->EngineSettings().RegionId() != aRegionId ) { @@ -335,6 +311,7 @@ // TBool CRadioEngineImp::RadioInitialized() const { + LEVEL3( LOG_METHOD_AUTO ); return iRadioInitializationState == ERadioTunerControlGranted; } @@ -344,7 +321,8 @@ // void CRadioEngineImp::EnableAudio( TBool aEnable, TBool aDelay ) { - LOG_FORMAT( "CRadioEngineImp::EnableAudio( %d )", aEnable ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aEnable %d ", aEnable ); iRadioEnabled = aEnable; if ( aDelay ) { @@ -376,6 +354,7 @@ // TBool CRadioEngineImp::RadioAudioEnabled() const { + LEVEL3( LOG_METHOD_AUTO ); return iRadioEnabled; } @@ -385,7 +364,8 @@ // void CRadioEngineImp::SetAudioOverride( TBool aOverride ) { - LOG_FORMAT( "CRadioEngineImp::SetAudioOverride( %d )", aOverride ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aOverride %d ", aOverride ) ); iOverrideAudioResources = aOverride; } @@ -395,7 +375,7 @@ // void CRadioEngineImp::AddObserverL( MRadioEngineObserver* aObserver ) { - LOG( "CRadioEngineImp::AddObserver" ); + LEVEL3( LOG_METHOD_AUTO ); TInt index = iObservers.FindInAddressOrder( aObserver ); if ( index == KErrNotFound ) { @@ -409,7 +389,7 @@ // void CRadioEngineImp::RemoveObserver( MRadioEngineObserver* aObserver ) { - LOG( "CRadioEngineImp::RemoveObserver" ); + LEVEL3( LOG_METHOD_AUTO ); TInt index = iObservers.FindInAddressOrder( aObserver ); if ( index >= 0 ) @@ -424,6 +404,7 @@ // TFmRadioFrequencyRange CRadioEngineImp::TunerFrequencyRangeForRegionId( TInt aRegionId ) const { + LEVEL3( LOG_METHOD_AUTO ); TFmRadioFrequencyRange result = EFmRangeEuroAmerica; switch ( aRegionId ) { @@ -454,7 +435,8 @@ void CRadioEngineImp::SetAudioMode( TInt aAudioMode ) { - LOG_FORMAT( "CRadioEngineImp::SetAudioMode: aAudioMode: %d", aAudioMode ); + LEVEL3( LOG_METHOD_AUTO ); + LOG_FORMAT( "aAudioMode: %d", aAudioMode ); TInt err = KErrNone; if ( !RadioInitialized() ) { @@ -478,7 +460,8 @@ // void CRadioEngineImp::SwitchPower( TBool aPowerOn ) { - LOG_FORMAT( "CRadioEngineImp::SwitchPower( %d )", aPowerOn ); + LEVEL3( LOG_METHOD_AUTO ); + LOG_FORMAT( "aPowerOn %d", aPowerOn ); if ( RadioInitialized() ) { if ( !aPowerOn || OkToPlay( iSettings->EngineSettings().TunedFrequency() ) ) @@ -519,7 +502,7 @@ // TInt CRadioEngineImp::StaticPowerOnCallback( TAny* aSelfPtr ) { - LOG( "CRadioEngineImp::StaticPowerOnCallback" ); + LEVEL3( LOG_METHOD_AUTO ); CRadioEngineImp* self = reinterpret_cast( aSelfPtr ); if ( self ) @@ -541,7 +524,7 @@ // TInt CRadioEngineImp::StaticPowerOffCallback( TAny* aSelfPtr ) { - LOG( "CRadioEngineImp::StaticPowerOffCallback" ); + LEVEL3( LOG_METHOD_AUTO ); CRadioEngineImp* self = reinterpret_cast( aSelfPtr ); if ( self ) @@ -573,17 +556,8 @@ iPlayerUtility->SetVolumeRamp( TTimeIntervalMicroSeconds( MAKE_TINT64( 0, KRadioMillion ) ) ); iPlayerUtility->SetVolume( TunerVolumeForUiVolume( iSettings->EngineSettings().Volume() ) ); - // If we are about to start scanning, mute the radio and set minimum frequency - if ( iScanObserver ) - { - iPlayerUtility->Mute( ETrue ); - iTunerUtility->SetFrequency( iSettings->EngineSettings().MinFrequency() ); - } - else - { - iPlayerUtility->Mute( iSettings->EngineSettings().IsVolMuted() ); - iTunerUtility->SetFrequency( iSettings->EngineSettings().TunedFrequency() ); - } + iPlayerUtility->Mute( iSettings->EngineSettings().IsVolMuted() ); + iTunerUtility->SetFrequency( iSettings->EngineSettings().TunedFrequency() ); iFreqEventReason = RadioEngine::ERadioFrequencyEventReasonImplicit; TRAP_IGNORE( iAudioRouter->SetAudioRouteL( @@ -603,7 +577,7 @@ // void CRadioEngineImp::PowerOff() { - LOG( "CRadioEngineImp::PowerOff" ); + LOG_METHOD_AUTO; if ( iSettings->EngineSettings().IsPowerOn() ) { @@ -624,6 +598,7 @@ // TBool CRadioEngineImp::OkToPlay( TUint32 aFrequency ) const { + LEVEL3( LOG_METHOD_AUTO ); TBool audioResourcesAvailable = iSystemEventCollector->IsAudioResourcesAvailable(); TBool okToPlay = iAntennaAttached && !iFmTransmitterActive && @@ -635,7 +610,7 @@ IsFrequencyValid( aFrequency ); #endif //COMPILE_IN_IVALO - LOG_FORMAT( "CRadioEngineImp::OkToPlay, returning %d ", okToPlay ); + LEVEL2( LOG_FORMAT( "returning okToPlay %d ", okToPlay ) ); return okToPlay; } @@ -645,6 +620,7 @@ // TBool CRadioEngineImp::IsFrequencyValid( TUint32 aFrequency ) const { + LEVEL3( LOG_METHOD_AUTO ); TBool ret( EFalse ); if ( !aFrequency ) { @@ -658,95 +634,80 @@ } // --------------------------------------------------------------------------- -// Radio tuning +// // --------------------------------------------------------------------------- // -void CRadioEngineImp::SetFrequency( TUint32 aFrequency, RadioEngine::TRadioFrequencyEventReason aReason ) +void CRadioEngineImp::SetManualSeekMode( TBool aManualSeekActive ) { - LOG_METHOD_AUTO; - LOG_FORMAT( "CRadioEngineImp::SetFrequency, freq: %u, Initialized: %d, Enabled: %d", - aFrequency, RadioInitialized(), iRadioEnabled ); - - iFrequencySetByRdsAf = EFalse; - iFreqEventReason = aReason; - - TInt frequency = 0; - if ( iTunerUtility ) + iManualSeekMode = aManualSeekActive; + if ( iManualSeekMode ) { - iTunerUtility->GetFrequency( frequency ); - } - CancelSeek(); - - if ( aFrequency == frequency ) //radio has already the frequency to be set. - { - LOG( "CRadioEngineImp::SetFrequency: Already at the requested frequency" ); - HandleFrequencyEvent( aFrequency ); + CancelSeek(); + iRdsReceiver->StopReceiver(); } else { - iRadioTimer->Cancel(); - if ( RadioInitialized() && iRadioEnabled && OkToPlay( aFrequency ) ) - { - LOG( "CRadioEngineImp::SetFrequency: Tuning to frequency" ); - iTunerUtility->SetFrequency( aFrequency ); - } - else - { - HandleFrequencyEvent( aFrequency ); - } + iRdsReceiver->StartReceiver(); + TInt frequency = 0; + iTunerUtility->GetFrequency( frequency ); + HandleFrequencyEvent( frequency ); } } // --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CRadioEngineImp::IsInManualSeekMode() const + { + return iManualSeekMode; + } + +// --------------------------------------------------------------------------- // Radio tuning // --------------------------------------------------------------------------- // -void CRadioEngineImp::SetFrequencyFast( TUint32 aFrequency, - RadioEngine::TRadioFrequencyEventReason /*aReason*/ ) -{ - if ( iSeekingState != RadioEngine::ERadioNotSeeking ) +void CRadioEngineImp::SetFrequency( TUint32 aFrequency, RadioEngine::TRadioFrequencyEventReason aReason ) { - iSeekingState = RadioEngine::ERadioNotSeeking; - iTunerUtility->CancelStationSeek(); - } - iTunerUtility->SetFrequency( aFrequency ); - iSettings->RadioSetter().SetTunedFrequency( aFrequency ); -} + LEVEL3( LOG_METHOD_AUTO ); + LEVEL2( LOG_FORMAT( "freq: %u, Initialized: %d, Enabled: %d", + aFrequency, RadioInitialized(), iRadioEnabled ) ); -// --------------------------------------------------------------------------- -// Frequency stepping -// --------------------------------------------------------------------------- -// -void CRadioEngineImp::StepToFrequency( RadioEngine::TRadioTuneDirection aDirection ) - { - LOG( "CRadioEngineImp::StepToFrequency" ); - - TUint32 freq = iSettings->EngineSettings().TunedFrequency(); - RadioEngine::TRadioFrequencyEventReason reason( RadioEngine::ERadioFrequencyEventReasonUnknown ); - if ( aDirection == RadioEngine::ERadioUp ) + iFreqEventReason = aReason; + if ( iManualSeekMode ) { - freq = freq + iSettings->EngineSettings().FrequencyStepSize(); - reason = RadioEngine::ERadioFrequencyEventReasonUp; + iTunerUtility->SetFrequency( aFrequency ); } else { - freq = freq - iSettings->EngineSettings().FrequencyStepSize(); - reason = RadioEngine::ERadioFrequencyEventReasonDown; - } + iFrequencySetByRdsAf = EFalse; - // Check overflow or underflow - if ( IsFrequencyValid( freq ) ) - { - if ( aDirection == RadioEngine::ERadioUp ) + TInt frequency = 0; + if ( iTunerUtility ) { - freq = iSettings->EngineSettings().MinFrequency(); + iTunerUtility->GetFrequency( frequency ); + } + CancelSeek(); + + if ( aFrequency == frequency ) //radio has already the frequency to be set. + { + LOG( "CRadioEngineImp::SetFrequency: Already at the requested frequency" ); + HandleFrequencyEvent( aFrequency ); } else { - freq = iSettings->EngineSettings().MaxFrequency(); + iRadioTimer->Cancel(); + if ( RadioInitialized() && iRadioEnabled && OkToPlay( aFrequency ) ) + { + LOG( "CRadioEngineImp::SetFrequency: Tuning to frequency" ); + iTunerUtility->SetFrequency( aFrequency ); + } + else + { + HandleFrequencyEvent( aFrequency ); + } } } - SetFrequency( freq, reason ); } // --------------------------------------------------------------------------- @@ -755,7 +716,8 @@ // void CRadioEngineImp::Seek( RadioEngine::TRadioTuneDirection aDirection ) { - LOG_FORMAT( "CRadioEngineImp::Seek-- Start direction:%d",aDirection ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aDirection: %d",aDirection ); iFrequencySetByRdsAf = EFalse; @@ -798,7 +760,6 @@ else { NotifyRadioEvent( ERadioEventSeeking, KErrGeneral ); - StopScan( KErrGeneral ); } } @@ -808,22 +769,16 @@ // void CRadioEngineImp::CancelSeek() { - LOG_FORMAT( "CRadioEngineImp::CancelSeek -- seeking state was:%d", iSeekingState ); + LOG_METHOD_AUTO; + LOG_FORMAT( "seeking state was:%d", iSeekingState ); - if ( !iScanObserver ) + if ( iSeekingState != RadioEngine::ERadioNotSeeking ) { - if ( iSeekingState != RadioEngine::ERadioNotSeeking ) - { - iSeekingState = RadioEngine::ERadioNotSeeking; - iTunerUtility->CancelStationSeek(); - iFreqEventReason = RadioEngine::ERadioFrequencyEventReasonImplicit; - NotifyRadioEvent( ERadioEventSeeking, KErrCancel ); - NotifyRadioEvent( ERadioEventFrequency, KErrNone ); // Notify the observers even if the frequency remains the same. - } - } - else - { - StopScan( KErrCancel ); + iSeekingState = RadioEngine::ERadioNotSeeking; + iTunerUtility->CancelStationSeek(); + iFreqEventReason = RadioEngine::ERadioFrequencyEventReasonImplicit; + NotifyRadioEvent( ERadioEventSeeking, KErrCancel ); + NotifyRadioEvent( ERadioEventFrequency, KErrNone ); // Notify the observers even if the frequency remains the same. } } @@ -833,84 +788,23 @@ // RadioEngine::TRadioSeeking CRadioEngineImp::Seeking() const { + LEVEL3( LOG_METHOD_AUTO ); return iSeekingState; } // --------------------------------------------------------------------------- -// Starts scanning all available stations from the minimum frequency -// --------------------------------------------------------------------------- -// -void CRadioEngineImp::StartScan( MRadioScanObserver& aObserver ) - { - LOG( "CRadioEngineImp::StartScan" ); - - const TUint32 minFrequency = iSettings->EngineSettings().MinFrequency(); - if ( !iScanObserver && iRadioEnabled && RadioInitialized() && OkToPlay( minFrequency ) ) - { - CancelSeek(); - iScanObserver = &aObserver; - iPreviousMuteState = iSettings->EngineSettings().IsVolMuted(); - iPreviousScannedFrequency = 0; - iPlayerUtility->Mute( ETrue ); - iTunerUtility->SetFrequency( minFrequency ); - Seek( RadioEngine::ERadioUp ); - } - else - { - TInt error = iScanObserver ? KErrAlreadyExists : KErrNotReady; - TRAP_IGNORE( aObserver.ScanCompletedEventL( error ) ) - } - } - -// --------------------------------------------------------------------------- -// Stops any scans currently in progress. -// --------------------------------------------------------------------------- -// -void CRadioEngineImp::StopScan( TInt aError ) - { - LOG_FORMAT( "CRadioEngineImp::StopScan, error: %d", aError ); - if ( iScanObserver ) - { - if ( iSeekingState != RadioEngine::ERadioNotSeeking ) - { - iSeekingState = RadioEngine::ERadioNotSeeking; - if ( RadioInitialized() ) - { - iTunerUtility->CancelStationSeek(); - } - } - - iPreviousScannedFrequency = 0; - MRadioScanObserver& observer = *iScanObserver; - iScanObserver = NULL; - NotifyRadioScanEvent( ERadioEventScanCompleted, observer, aError ); - - if ( !OkToPlay( iSettings->EngineSettings().MinFrequency() ) ) - { - // Try to reset the frequency as sometimes extra frequency event occurs after seeking - iFreqEventReason = RadioEngine::ERadioFrequencyEventReasonImplicit; - iTunerUtility->SetFrequency( iSettings->EngineSettings().TunedFrequency() ); - } - - if ( iPlayerUtility && OkToPlay( iSettings->EngineSettings().TunedFrequency() ) ) - { - iPlayerUtility->Mute( iPreviousMuteState ); - } - } - } - -// --------------------------------------------------------------------------- // Sets volume level up/down one step. // --------------------------------------------------------------------------- // void CRadioEngineImp::AdjustVolume( RadioEngine::TRadioVolumeSetDirection aDirection ) { - LOG_FORMAT( "CRadioEngineImp::AdjustVolume( %d )", aDirection ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aDirection: %d ", aDirection ); if ( iSettings->EngineSettings().IsPowerOn() ) { TInt volume = iSettings->EngineSettings().Volume(); - LOG_FORMAT( "CRadioEngineImp::AdjustVolume volume = ( %d )", volume ); + LOG_FORMAT( "volume = ( %d )", volume ); if ( aDirection == RadioEngine::ERadioDecVolume ) { @@ -931,7 +825,7 @@ } else { - LOG( "CRadioEngineImp::AdjustVolume - Unhandled case" ); + LOG( "Unhandled case" ); } SetVolume( volume ); } @@ -943,11 +837,12 @@ // void CRadioEngineImp::SetVolume( TInt aVolume ) { - LOG_FORMAT( "CRadioEngineImp::SetVolume vol: %d", aVolume ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aVolume: %d", aVolume ); if ( iSettings->EngineSettings().IsPowerOn() && RadioInitialized() ) { - LOG( "CRadioEngineImp::SetVolume: Setting volume to player utility" ); + LOG( "Setting volume to player utility" ); if ( aVolume == 0 ) { @@ -972,7 +867,7 @@ // Set radio audio muted/unmuted // --------------------------------------------------------------------------- // -void CRadioEngineImp::SetVolumeMuted( TBool aMuteState ) +void CRadioEngineImp::SetVolumeMuted( TBool aMuteState, TBool aUpdateSettings ) { LOG_METHOD_AUTO; LOG_FORMAT( "MuteState = %d", aMuteState ); @@ -983,14 +878,13 @@ if ( RadioInitialized() ) { err = iPlayerUtility->Mute( aMuteState ); - iSettings->RadioSetter().SetVolMuted( aMuteState ); - NotifyRadioEvent( ERadioEventMute, err ); } - else + + if ( aUpdateSettings ) { err = iSettings->RadioSetter().SetVolMuted( aMuteState ); - NotifyRadioEvent( ERadioEventMute, err ); } + NotifyRadioEvent( ERadioEventMute, err ); } } @@ -1000,7 +894,8 @@ // TBool CRadioEngineImp::IsAntennaAttached() { - LOG_FORMAT( "CRadioEngineImp::IsAntennaAttached, returning %d", iAntennaAttached ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "returning iAntennaAttached: %d", iAntennaAttached ) ); return iAntennaAttached; } @@ -1010,7 +905,8 @@ // TBool CRadioEngineImp::IsFmTransmitterActive() const { - LOG_FORMAT( "CRadioEngineImp::IsFmTransmitterActive, returning %d", iFmTransmitterActive ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "returning iFmTransmitterActive: %d", iFmTransmitterActive ) ); return iFmTransmitterActive; } @@ -1020,6 +916,7 @@ // void CRadioEngineImp::SetAntennaAttached( TBool aAntennaAttached ) { + LOG_METHOD_AUTO; #ifdef __WINS__ MrftoAntennaStatusChange( aAntennaAttached ); #endif @@ -1034,6 +931,7 @@ // TInt CRadioEngineImp::MaxVolumeLevel() const { + LEVEL3( LOG_METHOD_AUTO ); TInt maxLevel = 0; #if defined __WINS__ @@ -1059,6 +957,7 @@ // TBool CRadioEngineImp::FrequencySetByRdsAf() const { + LEVEL3( LOG_METHOD_AUTO ); return iFrequencySetByRdsAf; } @@ -1068,6 +967,7 @@ // MRadioRdsReceiver& CRadioEngineImp::RdsReceiver() { + LEVEL3( LOG_METHOD_AUTO ); return *iRdsReceiver; } @@ -1077,6 +977,7 @@ // TInt CRadioEngineImp::TunerVolumeForUiVolume( TInt aUiVolume ) { + LEVEL3( LOG_METHOD_AUTO ); TInt vol = aUiVolume * KRadioVolumeStepsDivider; return vol; @@ -1088,6 +989,7 @@ // void CRadioEngineImp::NotifyRadioEvent( TInt aRadioEvent, TInt aErrorCode ) { + LEVEL3( LOG_METHOD_AUTO ); TRAP_IGNORE( DoNotifyRadioEventL( aRadioEvent, aErrorCode ) ) } @@ -1098,6 +1000,7 @@ // void CRadioEngineImp::DoNotifyRadioEventL( TInt aRadioEvent, TInt aErrorCode ) { + LOG_METHOD_AUTO; TInt count = iObservers.Count(); for ( TInt i = 0; iMuteEventL( iSettings->EngineSettings().IsVolMuted(), aErrorCode ); - } + observer->MuteEventL( iSettings->EngineSettings().IsVolMuted(), aErrorCode ); break; } case ERadioEventAudioMode: @@ -1169,52 +1069,13 @@ } // --------------------------------------------------------------------------- -// Notifies the observer of a radio scan event. -// --------------------------------------------------------------------------- -// -void CRadioEngineImp::NotifyRadioScanEvent( TRadioScanEvent aEvent, - MRadioScanObserver& aObserver, - TInt aError ) - { - TRAP_IGNORE( DoNotifyRadioScanEventL( aEvent, aObserver, aError ) ) - } - -// --------------------------------------------------------------------------- -// Notifies the observer of a radio scan event. -// --------------------------------------------------------------------------- -// -void CRadioEngineImp::DoNotifyRadioScanEventL( TRadioScanEvent aEvent, - MRadioScanObserver& aObserver, - TInt aError ) - { - LOG_FORMAT( "CRadioEngineImp::DoNotifyRadioScanEventL, aEvent: %d, aError: %d", aEvent, aError ); - - if ( aEvent == ERadioEventFrequencyScanned ) - { - if ( aError == KErrNone ) - { - aObserver.ScanFrequencyEventL( iPreviousScannedFrequency ); - } - } - else if ( aEvent == ERadioEventScanCompleted ) - { - // KFmRadioErrTuning error means that no channels can be found anymore - if ( aError == KFmRadioErrTuning ) - { - aError = KErrNotFound; - } - - aObserver.ScanCompletedEventL( aError ); - } - } - -// --------------------------------------------------------------------------- // Handles some system events // --------------------------------------------------------------------------- // void CRadioEngineImp::HandleSystemEventL( TRadioSystemEventType aEventType ) { - LOG_FORMAT( "CRadioEngineImp::HandleSystemEventL, aEventType = %d", aEventType ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aEventType = %d", aEventType ); switch ( aEventType ) { @@ -1245,7 +1106,6 @@ case ERadioCallActivated: { - StopScan( KErrGeneral ); CancelSeek(); } break; @@ -1260,6 +1120,8 @@ { // Explicitly set the audio routing to headset. Because system // forces the routing to headset anyway, and without our knowledge. + MRadioSettingsSetter& setter = iSettings->RadioSetter(); + setter.SetAudioRoute( RadioEngine::ERadioHeadset ); iAudioRouter->SetAudioRouteL( RadioEngine::ERadioHeadset ); } break; @@ -1268,6 +1130,8 @@ { // Explicitly set the audio routing to speaker. Because system // forces the routing to speaker anyway, if radio stays on. + MRadioSettingsSetter& setter = iSettings->RadioSetter(); + setter.SetAudioRoute( RadioEngine::ERadioSpeaker ); iAudioRouter->SetAudioRouteL( RadioEngine::ERadioSpeaker ); } break; @@ -1284,7 +1148,8 @@ // void CRadioEngineImp::MrftoRequestTunerControlComplete( TInt aError ) { - LOG_FORMAT( "CRadioEngineImp::MrftoRequestTunerControlComplete( %d )", aError ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aError: %d", aError ); if ( aError == KErrNone || aError == KErrAlreadyExists ) // Tuner activated now or was already active { @@ -1319,13 +1184,9 @@ TFmTunerCapabilities::ETunerAvailableInOfflineMode ); iTunerUtility->EnableTunerInOfflineMode( offlineAvailable ); - TBool rdsSupported = EFalse; - TRAP_IGNORE( CRadioRepositoryManager::GetRepositoryValueL( KRadioCRUid, KRadioCRRdsSupport, - rdsSupported ) ) - if ( tunerCaps.iTunerFunctions & TFmTunerCapabilities::ETunerRdsSupport && - rdsSupported ) + if ( tunerCaps.iTunerFunctions & TFmTunerCapabilities::ETunerRdsSupport ) { - TRAP_IGNORE( iRdsReceiver->InitL( *iRadioUtility, iPubSub ) ) + TRAP_IGNORE( iRdsReceiver->InitL( *iRadioUtility ) ) } iTunerUtility->SetFrequencyRange( TunerFrequencyRangeForRegionId( @@ -1342,7 +1203,8 @@ // void CRadioEngineImp::MrftoSetFrequencyRangeComplete( TInt aError ) { - LOG_FORMAT( "CRadioEngineImp::MrftoSetFrequencyRangeComplete( %d )", aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d", aError ) ); if ( aError ) { NotifyRadioEvent( ERadioEventRegion, aError ); @@ -1355,9 +1217,10 @@ // void CRadioEngineImp::MrftoSetFrequencyComplete( TInt aError ) { - LOG_FORMAT( "CRadioEngineImp::MrftoSetFrequencyComplete: Err: %d", aError ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aError: %d", aError ); - if ( aError ) + if ( aError && !iManualSeekMode ) { if ( aError == KErrNotReady ) { @@ -1373,7 +1236,8 @@ // void CRadioEngineImp::MrftoStationSeekComplete( TInt aError, TInt aFrequency ) { - LOG_FORMAT( "CRadioEngineImp::MrftoStationSeekComplete() -- aError = %d, aFrequency = %d", aError, aFrequency ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aError = %d, aFrequency = %d", aError, aFrequency ); // Seeking has ended, error code tells if it was successful if ( aError == KFmRadioErrAntennaNotConnected ) @@ -1387,7 +1251,9 @@ iSeekingState = RadioEngine::ERadioNotSeeking; - NotifyRadioEvent( ERadioEventSeeking, aError ); + if ( aFrequency == 0 ) { + NotifyRadioEvent( ERadioEventFrequency, aError ); + } // if ( aError != KErrNone ) // { @@ -1402,32 +1268,6 @@ // NotifyRadioEvent( ERadioEventFrequency, KErrNone ); // } // } - - if ( iScanObserver ) - { - if ( aError != KErrNone ) - { - StopScan( aError ); - } - else - { - if ( aFrequency > iSettings->EngineSettings().MinFrequency() && aFrequency > iPreviousScannedFrequency ) - { - iPreviousScannedFrequency = aFrequency; - NotifyRadioScanEvent( ERadioEventFrequencyScanned, *iScanObserver, KErrNone ); - Seek( RadioEngine::ERadioUp ); // Continue scanning. - } - else - { - if ( aFrequency == iSettings->EngineSettings().MinFrequency() ) - { - iPreviousScannedFrequency = aFrequency; - NotifyRadioScanEvent( ERadioEventFrequencyScanned, *iScanObserver, KErrNone ); - } - StopScan( aError ); - } - } - } } // --------------------------------------------------------------------------- @@ -1436,7 +1276,8 @@ // void CRadioEngineImp::MrftoFmTransmitterStatusChange( TBool aActive ) { - LOG_FORMAT( "CRadioEngineImp::MrftoFmTransmitterStatusChange( %d )", aActive ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aActive: %d", aActive ); iFmTransmitterActive = aActive; if ( !iFmTransmitterActive ) @@ -1453,18 +1294,17 @@ // void CRadioEngineImp::MrftoAntennaStatusChange( TBool aAttached ) { - LOG_FORMAT( "CRadioEngineImp::MrftoAntennaStatusChange( %d )", aAttached ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aAttached: %d", aAttached ); iAntennaAttached = aAttached; if ( iAntennaAttached ) { SwitchPower( ETrue ); NotifyRadioEvent( ERadioEventAntenna ); - iPubSub->PublishAntennaState( ERadioPSRadioAntennaAttached ); } else { NotifyRadioEvent( ERadioEventAntenna, KErrDisconnected ); - iPubSub->PublishAntennaState( ERadioPSRadioAntennaDetached ); } } @@ -1473,18 +1313,20 @@ // --------------------------------------------------------------------------- // -void CRadioEngineImp::MrftoOfflineModeStatusChange( TBool DEBUGVAR( aOfflineMode ) ) +void CRadioEngineImp::MrftoOfflineModeStatusChange( TBool DEBUGVAR3( aOfflineMode ) ) { - LOG_FORMAT( "CRadioEngineImp::MrftoOfflineModeStatusChange( %d )", aOfflineMode ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aOfflineMode: %d", aOfflineMode ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioEngineImp::MrftoFrequencyRangeChange( TFmRadioFrequencyRange DEBUGVAR( aBand ) ) +void CRadioEngineImp::MrftoFrequencyRangeChange( TFmRadioFrequencyRange DEBUGVAR3( aBand ) ) { - LOG_FORMAT( "CRadioEngineImp::MrftoFrequencyRangeChange( %d )", aBand ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aBand: %d", aBand ) ); if ( RadioInitialized() ) { iTunerUtility->SetFrequency( iSettings->EngineSettings().TunedFrequency() ); @@ -1499,13 +1341,13 @@ // void CRadioEngineImp::MrftoFrequencyChange( TInt aNewFrequency ) { - LOG_FORMAT( "CRadioEngineImp::MrftoFrequencyChange aNewFrequency = %u", aNewFrequency ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aNewFrequency = %u", aNewFrequency ) ); // There may be frequency changed events when radio is not initialized ( because // of SetFrequency or Seek returns with KErrNotReady ). - if ( RadioInitialized() ) + if ( !iManualSeekMode && RadioInitialized() ) { - HandleFrequencyEvent( aNewFrequency ); } } @@ -1516,7 +1358,8 @@ // void CRadioEngineImp::MrftoForcedMonoChange( TBool aForcedMono ) { - LOG_FORMAT( "CRadioEngineImp::MrftoForcedMonoChange -- aForcedMono = %d", aForcedMono ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aForcedMono = %d", aForcedMono ) ); iSettings->RadioSetter().SetOutputMode( aForcedMono ? RadioEngine::ERadioMono : RadioEngine::ERadioStereo ); NotifyRadioEvent( ERadioEventAudioMode ); @@ -1528,6 +1371,7 @@ // void CRadioEngineImp::MrftoSquelchChange( TBool /*aSquelch*/ ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -1536,7 +1380,8 @@ // void CRadioEngineImp::MrpoStateChange( TPlayerState aState, TInt aError ) { - LOG_FORMAT( "CRadioEngineImp::MrpoStateChange() -- aState = %d, aError = %d", aState, aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aState = %d, aError = %d", aState, aError ) ); if ( aError == KFmRadioErrAntennaNotConnected ) { @@ -1551,8 +1396,8 @@ // void CRadioEngineImp::MrpoVolumeChange( TInt aVolume ) { - aVolume = aVolume / KRadioVolumeStepsDivider; - LOG_FORMAT( "CRadioEngineImp::MrpoVolumeChange() -- volume = %d", aVolume ); + LEVEL3( LOG_METHOD_AUTO ); + aVolume = aVolume / KRadioVolumeStepsDivider; if ( aVolume != iSettings->EngineSettings().Volume() ) { iSettings->RadioSetter().SetVolume( aVolume ); @@ -1566,8 +1411,9 @@ // void CRadioEngineImp::MrpoMuteChange( TBool aMute ) { + LEVEL3( LOG_METHOD_AUTO ); TBool muted = iSettings->EngineSettings().IsVolMuted(); - if ( !iScanObserver && !aMute != !muted ) + if ( !aMute != !muted ) { iSettings->RadioSetter().SetVolMuted( aMute ); NotifyRadioEvent( ERadioEventMute ); @@ -1580,6 +1426,7 @@ // void CRadioEngineImp::MrpoBalanceChange( TInt /*aLeftPercentage*/, TInt /*aRightPercentage*/ ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -1588,7 +1435,8 @@ // void CRadioEngineImp::RdsAfSearchSettingChangedL( TBool aEnabled ) { - LOG_FORMAT( "CRadioEngineImp::RdsAfSearchSettingChangedL( %d )", aEnabled ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aEnabled: %d", aEnabled ) ); iRdsReceiver->SetAutomaticSwitchingL( aEnabled ); } @@ -1596,9 +1444,11 @@ // // --------------------------------------------------------------------------- // -void CRadioEngineImp::RegionSettingChangedL( TInt DEBUGVAR( aRegion ) ) +//TODO: Check if this can be removed. Radio doesn't currently support changing regions on the fly +void CRadioEngineImp::RegionSettingChangedL( TInt DEBUGVAR3( aRegion ) ) { - LOG_FORMAT( "CRadioEngineImp::RegionSettingChangedL( %d )", aRegion ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aRegion: %d", aRegion ) ); if ( RadioInitialized() ) { @@ -1614,7 +1464,7 @@ // void CRadioEngineImp::RdsAfSearchBegin() { - LOG( "CRadioEngineImp::RdsAfSearchBegin()" ); + LEVEL3( LOG_METHOD_AUTO ); iFrequencySetByRdsAf = ETrue; } @@ -1622,9 +1472,10 @@ // // --------------------------------------------------------------------------- // -void CRadioEngineImp::RdsAfSearchEnd( TUint32 DEBUGVAR( aFrequency ), TInt aError ) +void CRadioEngineImp::RdsAfSearchEnd( TUint32 DEBUGVAR3( aFrequency ), TInt aError ) { - LOG_FORMAT( "CRadioEngineImp::RdsAfSearchEnd( %d, %d )", aFrequency, aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aFrequency: %d, aError: %d )", aFrequency, aError ) ); if ( aError != KErrNone ) { iFrequencySetByRdsAf = EFalse; @@ -1637,11 +1488,12 @@ // TRadioRegion CRadioEngineImp::RegionFromMobileNetwork() const { + LEVEL3( LOG_METHOD_AUTO ); TRadioRegion region = ERadioRegionNone; // Choose the frequency range according to country code MRadioEngineSettings& engineSettings = iSettings->EngineSettings(); - const TDesC& countryCode = engineSettings.CountryCode(); + TPtrC countryCode = engineSettings.CountryCode(); const TInt regionCount = engineSettings.CountRegions(); TBool matchFound = EFalse; for ( TInt i = 0; i < regionCount && !matchFound; ++i ) @@ -1670,6 +1522,7 @@ // TRadioRegion CRadioEngineImp::RegionFromTimezone() const { + LEVEL3( LOG_METHOD_AUTO ); TRadioRegion region = ERadioRegionNone; TRAP_IGNORE( region = DoRegionFromTimezoneL() ); return region; @@ -1694,7 +1547,7 @@ const TUint8 cityId = city->GroupId(); delete city; city = NULL; - LOG_FORMAT( "CRadioEngineHandler::CurrentTimeZoneToRegionL group id: %d", cityId ); + LOG_FORMAT( "group id: %d", cityId ); TRadioRegion region = ERadioRegionNone; const TInt cityGroupCount = cityGroups->Count(); @@ -1711,7 +1564,7 @@ CleanupStack::PopAndDestroy( cityGroups ); CleanupStack::PopAndDestroy( timezoneLocalizer ); - LOG_ASSERT( found, LOG_FORMAT( "CRadioEngine::DoMapCurrentTimeZoneToRegionL. City not found: %d", cityId ) ); + LOG_ASSERT( found, LOG_FORMAT( "City not found: %d", cityId ) ); return region; } @@ -1722,7 +1575,8 @@ // void CRadioEngineImp::HandleAudioRoutingEvent( RadioEngine::TRadioAudioRoute aDestination ) { - LOG_FORMAT( "CRadioEngineImp::HandleAudioRoutingL( %d )", aDestination ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aDestination: %d", aDestination ); // Make modifications to volume ONLY if new audio source state // differs from settings. If they don't differ, this state @@ -1766,7 +1620,8 @@ // void CRadioEngineImp::HandlePowerEvent( TBool aPowerOn, TInt aErrorCode ) { - LOG_FORMAT( "CRadioEngineImp::HandlePowerEvent( %d, %d )", aPowerOn, aErrorCode ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aPowerOn: %d, aErrorCode: %d )", aPowerOn, aErrorCode ); const TBool powerState = iSettings->EngineSettings().IsPowerOn(); if ( !powerState != !aPowerOn ) @@ -1785,7 +1640,6 @@ if ( !iSettings->EngineSettings().IsPowerOn() ) { - StopScan( aErrorCode ); CancelSeek(); } @@ -1793,12 +1647,13 @@ if ( iSeekingState != RadioEngine::ERadioNotSeeking && iSettings->EngineSettings().IsPowerOn() ) { // Reset seeking state to enable seeking start + LOG( "PowerOn event in seekingstate. Restart seeking" ); RadioEngine::TRadioSeeking oldSeeking = iSeekingState; iSeekingState = RadioEngine::ERadioNotSeeking; Seek( oldSeeking == RadioEngine::ERadioSeekingUp ? RadioEngine::ERadioUp : RadioEngine::ERadioDown ); } - if ( !powerState != !aPowerOn ) + if ( !powerState != !aPowerOn || aErrorCode ) { NotifyRadioEvent( ERadioEventPower, aErrorCode ); } @@ -1810,7 +1665,8 @@ // void CRadioEngineImp::HandleFrequencyEvent( TUint32 aFrequency, TInt aErrorCode ) { - LOG_FORMAT( "CRadioEngineImp::HandleFrequencyEvent( %d, %d )", aFrequency, aErrorCode ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aFrequency: %d, aErrorCode: %d )", aFrequency, aErrorCode ); if ( iSettings->EngineSettings().TunedFrequency() != aFrequency ) { @@ -1857,6 +1713,7 @@ // TBool CRadioEngineImp::IsAudioRoutingPossible() const { + LEVEL3( LOG_METHOD_AUTO ); TBool headsetConnected = EFalse; TRAP_IGNORE( ( headsetConnected = iSystemEventCollector->IsHeadsetConnectedL() ) ) diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/src/cradionetworkinfolistener.cpp --- a/radioengine/engine/src/cradionetworkinfolistener.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/src/cradionetworkinfolistener.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -36,6 +36,7 @@ CRadioNetworkInfoListener* CRadioNetworkInfoListener::NewL( MRadioSettingsSetter& aSetter, MRadioNetworkChangeObserver* aObserver ) { + LEVEL3( LOG_METHOD_AUTO ); CRadioNetworkInfoListener* self = new ( ELeave ) CRadioNetworkInfoListener( aSetter, aObserver ); CleanupStack::PushL( self ); self->ConstructL(); @@ -55,6 +56,7 @@ , iSubscriberIdPckg( iSubscriberId ) , iNetworkInfoPckg( iNetworkInfo ) { + LEVEL3( LOG_METHOD_AUTO ); CActiveScheduler::Add( this ); } @@ -170,27 +172,6 @@ User::Leave( KErrNotSupported ); } - if ( identityCaps & RMobilePhone::KCapsGetSubscriberId ) - { - TRequestStatus stat; - RMobilePhone::TMobilePhoneSubscriberId subscriberId; - mobilePhone.GetSubscriberId( stat, subscriberId ); - User::WaitForRequest( stat ); - - CTelephony::TSubscriberIdV1 telephonySubscriberId; - - if ( stat == KErrNone ) - { - telephonySubscriberId.iSubscriberId = subscriberId; - } - else - { - telephonySubscriberId.iSubscriberId = iSetter.SubscriberId(); - } - - iSubscriberIdPckg() = telephonySubscriberId; - } - CleanupStack::PopAndDestroy( 2, &telServer ); #endif // At the end, update the local variables by simulating the "netid changed" event. @@ -203,6 +184,7 @@ // CRadioNetworkInfoListener::~CRadioNetworkInfoListener() { + LEVEL3( LOG_METHOD_AUTO ); Cancel(); #ifndef __WINS__ @@ -216,7 +198,8 @@ // TInt CRadioNetworkInfoListener::CompoundNetworkId() const { - LOG_FORMAT( "CRadioNetworkInfoListener::CompoundNetworkId() - %d", iCompoundNetworkId ); + LEVEL3( LOG_METHOD_AUTO ); + LOG_FORMAT( "Returning iCompoundNetworkId: %d", iCompoundNetworkId ); return iCompoundNetworkId; } @@ -226,8 +209,9 @@ // TPtrC CRadioNetworkInfoListener::SubscriberId() const { + LEVEL3( LOG_METHOD_AUTO ); TPtrC id = iSubscriberId.iSubscriberId; - LOG_FORMAT( "CRadioNetworkInfoListener::SubscriberId() - %S", &id ); + LOG_FORMAT( "SubscriberId: %S", &id ); return id; } @@ -237,8 +221,9 @@ // TPtrC CRadioNetworkInfoListener::CountryCode() const { + LEVEL3( LOG_METHOD_AUTO ); TPtrC countryCode = iSetter.CountryCode(); - LOG_FORMAT( "CRadioNetworkInfoListener::CountryCode() - %S", &countryCode ); + LOG_FORMAT( "CountryCode: %S", &countryCode ); return countryCode; } @@ -248,12 +233,13 @@ // void CRadioNetworkInfoListener::SaveNetworkInfoL() { + LEVEL3( LOG_METHOD_AUTO ); #ifdef __WINS__ iNetworkInfo.iCountryCode.Copy( _L("244") ); iNetworkInfo.iNetworkId.Zero(); #endif - LOG_FORMAT( "CRadioNetworkInfoListener::SaveNetworkInfoL() - iNetworkInfo.iCountryCode = %S", + LOG_FORMAT( "iNetworkInfo.iCountryCode = %S", &iNetworkInfo.iCountryCode ); User::LeaveIfError( iSetter.SetCountryCode( iNetworkInfo.iCountryCode ) ); @@ -288,6 +274,7 @@ // void CRadioNetworkInfoListener::DoCancel() { + LEVEL3( LOG_METHOD_AUTO ); #ifndef __WINS__ iTelephony->CancelAsync( CTelephony::ECurrentNetworkInfoChangeCancel ); #endif @@ -299,7 +286,8 @@ // void CRadioNetworkInfoListener::RunL() { - LOG_FORMAT( "CRadioNetworkInfoListener::RunL() - iStatus.Int() = %d", iStatus.Int() ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "iStatus.Int() = %d", iStatus.Int() ) ); #ifndef __WINS__ iTelephony->NotifyChange( iStatus, CTelephony::ECurrentNetworkInfoChange, iNetworkInfoPckg ); SetActive(); diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/src/cradiordsreceiver.cpp --- a/radioengine/engine/src/cradiordsreceiver.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/src/cradiordsreceiver.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -30,6 +30,7 @@ CRadioRdsReceiver::CRadioRdsReceiver( MRadioEngineSettings& aSettings ) : CRadioRdsReceiverBase( aSettings ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -38,6 +39,7 @@ // void CRadioRdsReceiver::ConstructL() { + LEVEL3( LOG_METHOD_AUTO ); BaseConstructL(); } @@ -47,6 +49,7 @@ // CRadioRdsReceiver* CRadioRdsReceiver::NewL( MRadioEngineSettings& aSettings ) { + LEVEL3( LOG_METHOD_AUTO ); CRadioRdsReceiver* self = new ( ELeave ) CRadioRdsReceiver( aSettings ); CleanupStack::PushL( self ); self->ConstructL(); @@ -60,6 +63,7 @@ // CRadioRdsReceiver::~CRadioRdsReceiver() { + LEVEL3( LOG_METHOD_AUTO ); if ( iRdsUtility ) { iRdsUtility->Close(); @@ -70,16 +74,15 @@ // // --------------------------------------------------------------------------- // -void CRadioRdsReceiver::InitL( CRadioUtility& aRadioUtility, CRadioPubSub* aPubSub ) +void CRadioRdsReceiver::InitL( CRadioUtility& aRadioUtility ) { LOG_METHOD_AUTO; - iPubSub = aPubSub; iRdsUtility = &aRadioUtility.RadioRdsUtilityL( *this ); LogReceiverCapabilities(); - SetAutomaticSwitchingL( iSettings.RdsAfSearchEnabled() ); + SetAutomaticSwitchingL( EFalse ); } // --------------------------------------------------------------------------- @@ -88,6 +91,7 @@ // void CRadioRdsReceiver::SetAutomaticSwitchingL( TBool aEnable ) { + LEVEL3( LOG_METHOD_AUTO ); if ( iRdsUtility ) { User::LeaveIfError( iRdsUtility->SetAutomaticSwitching( aEnable ) ); @@ -103,6 +107,7 @@ // void CRadioRdsReceiver::StartReceiver() { + LOG_METHOD_AUTO; // Request to be notified of almost all RDS data. // Unwanted RDS values: // ERdsClockTime @@ -119,7 +124,7 @@ rdsData.iAdditionalFunctions1 = 0; rdsData.iAdditionalFunctions2 = 0; - LOG_ASSERT( iRdsUtility, LOG( "CRadioRdsReceiver::StartReceiverL. Error: RDS utility not created!" ) ); + LOG_ASSERT( iRdsUtility, LOG( "Error: RDS utility not created!" ) ); if ( iRdsUtility && !iStarted ) { TInt err = iRdsUtility->NotifyRdsDataChange( rdsData ); @@ -127,11 +132,11 @@ { // Avoid further calls iStarted = ETrue; - LOG( "CRadioRdsReceiver::StartReceiverL: Requested RDS notifications from receiver." ); + LOG( "Requested RDS notifications from receiver." ); } else { - LOG_FORMAT( "CRadioRdsReceiver::StartReceiverL. Failed to request RDS data with err %d", err ); + LOG_FORMAT( "Failed to request RDS data with err %d", err ); } } } @@ -142,7 +147,7 @@ // void CRadioRdsReceiver::StopReceiver() { - LOG( "CRadioRdsReceiver::StopReceiver" ); + LOG_METHOD_AUTO; if ( iRdsUtility ) { @@ -157,6 +162,7 @@ // void CRadioRdsReceiver::LogReceiverCapabilities() { + LEVEL3( LOG_METHOD_AUTO ); #ifdef LOGGING_ENABLED // Log the RDS utility capabilities if ( iRdsUtility ) @@ -205,13 +211,13 @@ { capsBuf.Append( _L("TrafficAnnouncement ") ); } - LOG_FORMAT( "CRadioRdsReceiver::LogReceiverCapabilities. RDS receiver capabilities: %S", &capsBuf ); - LOG_FORMAT( "CRadioRdsReceiver::LogReceiverCapabilities. Functions: %d, AdditionalFunctions1: %d, iAdditionalFunctions2: %d", + LOG_FORMAT( "RDS receiver capabilities: %S", &capsBuf ); + LOG_FORMAT( "Functions: %d, AdditionalFunctions1: %d, iAdditionalFunctions2: %d", caps.iRdsFunctions, caps.iAdditionalFunctions1, caps.iAdditionalFunctions2 ); } else { - LOG_FORMAT( "CRadioRdsReceiver::LogReceiverCapabilities: Failed to get RDS utility capabilities: err %d", err ); + LOG_FORMAT( "Failed to get RDS utility capabilities: err %d", err ); } } #endif // LOGGING_ENABLED diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/src/cradiordsreceiverbase.cpp --- a/radioengine/engine/src/cradiordsreceiverbase.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/engine/src/cradiordsreceiverbase.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -16,7 +16,6 @@ */ // User includes -#include "cradiopubsub.h" #include "cradiordsreceiverbase.h" #include "cradioenginelogger.h" @@ -29,6 +28,7 @@ CRadioRdsReceiverBase::CRadioRdsReceiverBase( MRadioEngineSettings& aSettings ) : iSettings( aSettings ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -37,6 +37,7 @@ // void CRadioRdsReceiverBase::BaseConstructL() { + LEVEL3( LOG_METHOD_AUTO ); iPsName = HBufC::NewL( TRdsPSName().MaxLength() ); } @@ -46,6 +47,7 @@ // CRadioRdsReceiverBase::~CRadioRdsReceiverBase() { + LEVEL3( LOG_METHOD_AUTO ); iObservers.Close(); delete iPsName; iRadioText.Close(); @@ -57,6 +59,7 @@ // void CRadioRdsReceiverBase::AddObserverL( MRadioRdsDataObserver* aObserver ) { + LEVEL3( LOG_METHOD_AUTO ); TInt index = iObservers.FindInAddressOrder( aObserver ); if ( index == KErrNotFound ) { @@ -70,6 +73,7 @@ // void CRadioRdsReceiverBase::RemoveObserver( MRadioRdsDataObserver* aObserver ) { + LEVEL3( LOG_METHOD_AUTO ); TInt index = iObservers.FindInAddressOrder( aObserver ); if ( index >= 0 ) @@ -84,6 +88,7 @@ // TBool CRadioRdsReceiverBase::AutomaticSwitchingEnabled() const { + LEVEL3( LOG_METHOD_AUTO ); return iAfEnabled; } @@ -93,6 +98,7 @@ // const TDesC& CRadioRdsReceiverBase::ProgrammeService() const { + LEVEL3( LOG_METHOD_AUTO ); return *iPsName; } @@ -102,6 +108,7 @@ // const TDesC& CRadioRdsReceiverBase::RadioText() const { + LEVEL3( LOG_METHOD_AUTO ); return iRadioText; } @@ -111,6 +118,7 @@ // TBool CRadioRdsReceiverBase::SignalAvailable() const { + LEVEL3( LOG_METHOD_AUTO ); return iSignalAvailable; } @@ -120,6 +128,7 @@ // void CRadioRdsReceiverBase::SetAutomaticSwitchingL( TBool aEnable ) { + LEVEL3( LOG_METHOD_AUTO ); iAfEnabled = aEnable; for ( TInt i = 0 ; i < iObservers.Count(); i++ ) { @@ -133,14 +142,9 @@ // void CRadioRdsReceiverBase::ClearRdsInformation() { + LEVEL3( LOG_METHOD_AUTO ); iPsName->Des().Zero(); iRadioText.Close(); - - if ( iPubSub ) - { - iPubSub->PublishRdsProgramService( *iPsName ); - } - MrroRdsEventSignalChange( EFalse ); } @@ -148,70 +152,77 @@ // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroStationSeekByPTYComplete( TInt DEBUGVAR( aError ), - TInt DEBUGVAR( aFrequency ) ) +void CRadioRdsReceiverBase::MrroStationSeekByPTYComplete( TInt DEBUGVAR3( aError ), + TInt DEBUGVAR3( aFrequency ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroStationSeekByPTYComplete: err: %d, frequency: %d ", aError, aFrequency ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d, aFrequency: %d ", aError, aFrequency ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroStationSeekByTAComplete( TInt DEBUGVAR( aError ), - TInt DEBUGVAR( aFrequency ) ) +void CRadioRdsReceiverBase::MrroStationSeekByTAComplete( TInt DEBUGVAR3( aError ), + TInt DEBUGVAR3( aFrequency ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroStationSeekByTAComplete: err: %d, frequency: %d ", aError, aFrequency ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d, aFrequency: %d ", aError, aFrequency ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroStationSeekByTPComplete( TInt DEBUGVAR( aError ), - TInt DEBUGVAR( aFrequency ) ) +void CRadioRdsReceiverBase::MrroStationSeekByTPComplete( TInt DEBUGVAR3( aError ), + TInt DEBUGVAR3( aFrequency ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroStationSeekByTPComplete: err: %d, frequency: %d ", aError, aFrequency ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d, aFrequency: %d ", aError, aFrequency ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroGetFreqByPTYComplete( TInt DEBUGVAR( aError ), +void CRadioRdsReceiverBase::MrroGetFreqByPTYComplete( TInt DEBUGVAR3( aError ), RArray& /*aFreqList*/ ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroGetFreqByPTYComplete: err: %d", aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d", aError ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroGetFreqByTAComplete( TInt DEBUGVAR( aError ), +void CRadioRdsReceiverBase::MrroGetFreqByTAComplete( TInt DEBUGVAR3( aError ), RArray& /*aFreqList*/ ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroGetFreqByTAComplete: err: %d", aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d", aError ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroGetPSByPTYComplete( TInt DEBUGVAR( aError ), +void CRadioRdsReceiverBase::MrroGetPSByPTYComplete( TInt DEBUGVAR3( aError ), RArray& /*aPsList*/ ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroGetPSByPTYComplete: err: %d", aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d", aError ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroGetPSByTAComplete( TInt DEBUGVAR( aError ), +void CRadioRdsReceiverBase::MrroGetPSByTAComplete( TInt DEBUGVAR3( aError ), RArray& /*aPsList*/ ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroGetPSByTAComplete: err: %d", aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d", aError ) ); } // --------------------------------------------------------------------------- @@ -220,7 +231,8 @@ // void CRadioRdsReceiverBase::MrroRdsDataPI( TInt aPi ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsDataPI: PI: %d", aPi ); + LEVEL2( LOG_METHOD_AUTO ); + LEVEL2( LOG_FORMAT( "aPi: %d", aPi ) ); const TInt observerCount = iObservers.Count(); const TUint32 frequency = iSettings.TunedFrequency(); for ( TInt i = 0; i < observerCount; ++i ) @@ -235,7 +247,8 @@ // void CRadioRdsReceiverBase::MrroRdsDataPTY( TRdsProgrammeType aPty ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsDataPTY: PTY: %d", aPty ); + LEVEL2( LOG_METHOD_AUTO ); + LEVEL2( LOG_FORMAT( "aPty: %d", aPty ) ); const TInt observerCount = iObservers.Count(); const TUint32 frequency = iSettings.TunedFrequency(); for ( TInt i = 0; i < observerCount; ++i ) @@ -250,13 +263,9 @@ // void CRadioRdsReceiverBase::MrroRdsDataPS( TRdsPSName& aPs ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsDataPS: PS: %S", &aPs ); + LEVEL2( LOG_METHOD_AUTO ); + LEVEL2( LOG_FORMAT( "aPs: %S", &aPs ) ); const TUint32 frequency = iSettings.TunedFrequency(); - if ( iPubSub ) - { - iPubSub->PublishRdsProgramService( aPs ); - } - iPsName->Des().Copy( aPs ); const TInt observerCount = iObservers.Count(); for ( TInt i = 0; i < observerCount; ++i ) @@ -271,16 +280,12 @@ // void CRadioRdsReceiverBase::MrroRdsDataRT( TRdsRadioText& aRt ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsDataRT: RT: %S", &aRt ); + LEVEL2( LOG_METHOD_AUTO ); + LEVEL2( LOG_FORMAT( "aRt: %S", &aRt ) ); iRadioText.Close(); iRadioText.Create( aRt ); const TUint32 frequency = iSettings.TunedFrequency(); - if ( iPubSub ) - { - iPubSub->PublishRdsRadioText( iRadioText ); - } - const TInt observerCount = iObservers.Count(); for ( TInt i = 0; i < observerCount; ++i ) { @@ -294,16 +299,17 @@ // void CRadioRdsReceiverBase::MrroRdsDataCT( TDateTime& /*aCt*/ ) { - LOG( "CRadioRdsReceiverBase::MrroRdsDataCT" ); + LEVEL2( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroRdsDataTA( TBool DEBUGVAR( aTaOn ) ) +void CRadioRdsReceiverBase::MrroRdsDataTA( TBool DEBUGVAR2( aTaOn ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsDataTA: aTaOn: %d", aTaOn ); + LEVEL2( LOG_METHOD_AUTO ); + LEVEL2( LOG_FORMAT( "aTaOn: %d", aTaOn ) ); } // --------------------------------------------------------------------------- @@ -313,7 +319,8 @@ void CRadioRdsReceiverBase::MrroRdsDataRTplus( TRdsRTplusClass aRtPlusClass, TRdsRadioText& aRtPlusData ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsDataRTplus: Class: %d, data: %S", aRtPlusClass, &aRtPlusData ); + LOG_METHOD_AUTO; + LOG_FORMAT( "Class: %d, data: %S", aRtPlusClass, &aRtPlusData ); const TUint32 frequency = iSettings.TunedFrequency(); const TInt observerCount = iObservers.Count(); for ( TInt i = 0; i < observerCount; ++i ) @@ -328,7 +335,7 @@ // void CRadioRdsReceiverBase::MrroRdsSearchBeginAF() { - LOG( "CRadioRdsReceiverBase::MrroRdsSearchBeginAF" ); + LEVEL3( LOG_METHOD_AUTO ); const TInt observerCount = iObservers.Count(); for ( TInt i = 0; i < observerCount; ++i ) { @@ -342,7 +349,8 @@ // void CRadioRdsReceiverBase::MrroRdsSearchEndAF( TInt aError, TInt aFrequency ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsSearchEndAF: err: %d, Frequency: %d", aError, aFrequency ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError: %d, aFrequency: %d", aError, aFrequency ) ); const TInt observerCount = iObservers.Count(); for ( TInt i = 0; i < observerCount; ++i ) { @@ -355,27 +363,30 @@ // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroRdsStationChangeTA( TInt DEBUGVAR( aFrequency ) ) +void CRadioRdsReceiverBase::MrroRdsStationChangeTA( TInt DEBUGVAR3( aFrequency ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsStationChangeTA: Frequency: %d", aFrequency ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aFrequency: %d", aFrequency ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroRdsEventAutomaticSwitchingChange( TBool DEBUGVAR( aAuto ) ) +void CRadioRdsReceiverBase::MrroRdsEventAutomaticSwitchingChange( TBool DEBUGVAR3( aAuto ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsEventAutomaticSwitchingChange: aAuto: %d", aAuto ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aAuto: %d", aAuto ) ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CRadioRdsReceiverBase::MrroRdsEventAutomaticTrafficAnnouncement( TBool DEBUGVAR( aAuto ) ) +void CRadioRdsReceiverBase::MrroRdsEventAutomaticTrafficAnnouncement( TBool DEBUGVAR3( aAuto ) ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsEventAutomaticTrafficAnnouncement: aAuto: %d", aAuto ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aAuto: %d", aAuto ) ); } // --------------------------------------------------------------------------- @@ -384,7 +395,8 @@ // void CRadioRdsReceiverBase::MrroRdsEventSignalChange( TBool aSignal ) { - LOG_FORMAT( "CRadioRdsReceiverBase::MrroRdsEventSignalChange: aSignal: %d", aSignal ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aSignal: %d", aSignal ) ); iSignalAvailable = aSignal; const TUint32 frequency = iSettings.TunedFrequency(); const TInt observerCount = iObservers.Count(); diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/src/t_cradiordsreceiversimulator.cpp --- a/radioengine/engine/src/t_cradiordsreceiversimulator.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/* -* 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: -* -*/ - -// User includes -#include "t_cradiordsreceiversimulator.h" -#include "mradioenginesettings.h" - -const TInt KVRRdsEventSimulationDelay = 5000000; -const TUint KItemRelatedTagsCount = 2; //songTitles, artistNames -const TUint KRadioTextItemsCount = 3; -const TUint KRtToRtPlusEventTimeout = 400000; // 400 ms -const TUint KSubsequentRtPlusEventsTimeout = 200; // 0.02 ms - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRdsReceiverSimulator::CRadioRdsReceiverSimulator( MRadioEngineSettings& aSettings ) - : CRadioRdsReceiverBase( aSettings ) - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioRdsReceiverSimulator::ConstructL() - { - BaseConstructL(); - iEventSimulatorTimer = CPeriodic::NewL( CActive::EPriorityUserInput ); - iEventSimulatorTimer2 = CPeriodic::NewL( CActive::EPriorityUserInput ); - SetAutomaticSwitchingL( iSettings.RdsAfSearchEnabled() ); - - StartReceiver(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRdsReceiverSimulator* CRadioRdsReceiverSimulator::NewL( MRadioEngineSettings& aSettings ) - { - CRadioRdsReceiverSimulator* self = new (ELeave) CRadioRdsReceiverSimulator( aSettings ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRdsReceiverSimulator::~CRadioRdsReceiverSimulator() - { - if ( iEventSimulatorTimer ) - { - iEventSimulatorTimer->Cancel(); - } - if( iEventSimulatorTimer2 ) - { - iEventSimulatorTimer2->Cancel(); - } - delete iEventSimulatorTimer; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioRdsReceiverSimulator::InitL( CRadioUtility& /*aRadioUtility*/, CRadioPubSub* aPubSub ) - { - iPubSub = aPubSub; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioRdsReceiverSimulator::StartReceiver() - { - if ( !iEventSimulatorTimer->IsActive() ) - { - iEventSimulatorTimer->Start( TTimeIntervalMicroSeconds32( KVRRdsEventSimulationDelay ), - TTimeIntervalMicroSeconds32( KVRRdsEventSimulationDelay ), - TCallBack( StaticRdsSimulationCallback, this )); - } - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioRdsReceiverSimulator::StopReceiver() - { - iEventSimulatorTimer->Cancel(); - iEventSimulatorTimer2->Cancel(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TInt CRadioRdsReceiverSimulator::StaticRdsSimulationCallback( TAny* aSelfPtr ) - { - TRadioRdsSimulationEvent events[] = { ERadioRdsEventSignalOn, - //ERadioRdsEventAFBegin, - ERadioRdsEventPS, - ERadioRdsEventRadioText, - //ERadioRdsEventRadioTextPlus, - ERadioRdsEventPS, - ERadioRdsEventRadioText, - //ERadioRdsEventRadioTextPlus, - ERadioRdsEventPS, - ERadioRdsEventRadioText, - //ERadioRdsEventRadioTextPlus, - ERadioRdsEventPS, - ERadioRdsEventRadioText , - //ERadioRdsEventPS, - //ERadioRdsEventAFEnd, - ERadioRdsEventSignalOff }; - - TRdsPSName serviceNames[] = { _L("Tesla" ), _L("Tesla" ), _L("Tesla" ) }; - TRdsRadioText radioTexts[] = { _L( "Now playing Madonna Material Girl" ), - _L( "Hox! Get Motorhead Ace of Spades from music store now for free!" ), - _L( "Abba station-Waterloo Abba station-Waterloo Abba station" ) }; - - TInt frequencies[] = { 103100000, 95800000 }; // Frequencies in hz - TInt numEvents = sizeof( events ) / sizeof( TRadioRdsSimulationEvent ); - TInt numServiceNames = sizeof( serviceNames ) / sizeof( TRdsPSName ); - TInt numFrequencies = sizeof( frequencies ) / sizeof( TInt ); - // RT ( radioTexts[]) and RT+ ( songTitles[] and artistNames[]) information according to PS names ( serviceNames[]). - - CRadioRdsReceiverSimulator* self = reinterpret_cast( aSelfPtr ); - if ( self ) - { - switch ( events[self->iEventIterator] ) - { - case ERadioRdsEventSignalOn: - { - self->MrroRdsEventSignalChange( ETrue ); - break; - } - - case ERadioRdsEventSignalOff: - { - self->MrroRdsEventSignalChange( EFalse ); - break; - } - - case ERadioRdsEventPS: - { - // Set RT/RT+ iterator value according to PS name iterator: If ERadioRdsEventRadioText or - // ERadioRdsEventRadioTextPlus arrives, displays RT or RT+ according to radio station name. - self->iRadioTextIterator = self->iPsIterator; - self->MrroRdsDataPS( serviceNames[self->iPsIterator] ); - self->iPsIterator++; - if ( self->iPsIterator >= numServiceNames ) - { - self->iPsIterator = 0; - } - break; - } - - case ERadioRdsEventAFBegin: - { - if ( self->iSettings.RdsAfSearchEnabled() ) - { - self->MrroRdsSearchBeginAF(); - } - break; - } - - case ERadioRdsEventAFEnd: - { - if ( self->iSettings.RdsAfSearchEnabled() ) - { - self->MrroRdsSearchEndAF( KErrNone, frequencies[self->iFrequencyIterator] ); - } - self->iFrequencyIterator++; - if ( self->iFrequencyIterator >= numFrequencies ) - { - self->iFrequencyIterator = 0; - } - break; - } - case ERadioRdsEventRadioText: - { - // Display RT according to PS name. - self->MrroRdsDataRT( radioTexts[self->iRadioTextIterator] ); - // how many times StaticRdsSimulationCallback2 entered - if ( self->iRtPlusIterator >= KItemRelatedTagsCount ) - { - self->iRtPlusIterator = 0; - } - - // start timer for displaying the two consequent RT+ events - self->startRTPlusTimer(); - - // how many radio text tags received - if( self->iRtIterator >= KRadioTextItemsCount ) - { - self->iRtIterator = 1; - } - else - { - self->iRtIterator++; - } - break; - } - case ERadioRdsEventRadioTextPlus: - { - // Display RT+ information according to PS name. - - break; - } - default: - break; - } - self->iEventIterator++; - if ( self->iEventIterator >= numEvents ) - { - self->iEventIterator = 0; - } - } - return KErrNone; - } - -void CRadioRdsReceiverSimulator::startRTPlusTimer() - { - - iEventSimulatorTimer2->Cancel(); - if ( !iEventSimulatorTimer2->IsActive() ) - { - iEventSimulatorTimer2->Start( TTimeIntervalMicroSeconds32( KRtToRtPlusEventTimeout ), - TTimeIntervalMicroSeconds32( KSubsequentRtPlusEventsTimeout ), - TCallBack( StaticRdsSimulationCallback2, this )); - } - } - -TInt CRadioRdsReceiverSimulator::StaticRdsSimulationCallback2( TAny* aSelfPtr ) - { - TRdsRadioText songTitles[] = { _L( "Material Girl" ), - _L( "Ace of Spades" ), - _L( "Waterloo" ) }; - TRdsRadioText artistNames[] = { _L( "Madonna" ), - _L( "Motorhead" ), - _L( "Abba" ) }; - - CRadioRdsReceiverSimulator* self = reinterpret_cast( aSelfPtr ); - - if ( self ) - { - if( self->iRtPlusIterator == 0 ) - { - self->MrroRdsDataRTplus( ERTplusItemTitle, songTitles[self->iRtIterator-1] ); - } - else if( self->iRtPlusIterator == 1 ) - { - self->MrroRdsDataRTplus( ERTplusItemArtist, artistNames[self->iRtIterator-1] ); - } - } - self->iRtPlusIterator++; - - return KErrNone; - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/stub/bwins/fmradioengine_stubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/engine/stub/bwins/fmradioengine_stubu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,4 @@ +EXPORTS + ??1CRadioEngine@@UAE@XZ @ 1 NONAME ; CRadioEngine::~CRadioEngine(void) + ?NewL@CRadioEngine@@SAPAV1@AAVMRadioEngineInitializer@@@Z @ 2 NONAME ; class CRadioEngine * CRadioEngine::NewL(class MRadioEngineInitializer &) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/stub/eabi/fmradioengine_stubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/engine/stub/eabi/fmradioengine_stubu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,6 @@ +EXPORTS + _ZN12CRadioEngine4NewLER23MRadioEngineInitializer @ 1 NONAME + _ZN12CRadioEngineD0Ev @ 2 NONAME + _ZN12CRadioEngineD1Ev @ 3 NONAME + _ZN12CRadioEngineD2Ev @ 4 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/stub/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/engine/stub/group/bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,32 @@ +/* +* 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 the License "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: +* +*/ + +#include "../../../group/buildflags.hrh" + +#ifdef COMPILE_IN_WK48_ENV +# include +#else +# include +#endif // COMPILE_IN_WK48_ENV + +PRJ_PLATFORMS +WINSCW ARMV5 + +PRJ_EXPORTS + +PRJ_MMPFILES +radioengine_stub.mmp diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/engine/stub/group/radioengine_stub.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/engine/stub/group/radioengine_stub.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,69 @@ +/* +* 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: +* +*/ + +#include "../../../group/buildflags.hrh" + +#ifdef COMPILE_IN_IVALO +# include +#else +# include +#endif // COMPILE_IN_IVALO + +#include + +TARGET fmradioengine_stub.dll +TARGETTYPE DLL +UID 0x1000008D 0x01000011 +VERSION 11.0 + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +PAGED +SMPSAFE + +SOURCEPATH ../../src +SOURCE cradioengine.cpp +SOURCE cradioengineimp.cpp +SOURCE cradiordsreceiver.cpp +SOURCE cradiordsreceiverbase.cpp +SOURCE cradionetworkinfolistener.cpp + +USERINCLUDE ../../api +USERINCLUDE ../../inc +USERINCLUDE ../../../utils/api +USERINCLUDE ../../../settings/api +USERINCLUDE ../../../group + +// Default system include paths for application layer modules. +APP_LAYER_SYSTEMINCLUDE + +LIBRARY fmradioengineutils_stub.lib +LIBRARY fmradioenginesettings_stub.lib + +LIBRARY audiooutputrouting.lib +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY radio_utility_stub.lib +LIBRARY cone.lib +LIBRARY etel3rdparty.lib // For CTelephony +LIBRARY etel.lib // For RTelServer +LIBRARY etelmm.lib // For RMobilePhone +LIBRARY commsdat.lib // For CommsDat +LIBRARY timezonelocalization.lib // For CTzLocalizer +LIBRARY bafl.lib // For CDesCArray +LIBRARY centralrepository.lib diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/group/bld.inf --- a/radioengine/group/bld.inf Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/group/bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -15,6 +15,7 @@ * */ +PRJ_MMPFILES #include "../utils/group/bld.inf" #include "../settings/group/bld.inf" #include "../engine/group/bld.inf" diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/group/buildflags.hrh --- a/radioengine/group/buildflags.hrh Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/group/buildflags.hrh Thu Jul 22 16:33:45 2010 +0100 @@ -19,8 +19,5 @@ #ifndef BUILDFLAGS_HRH_ #define BUILDFLAGS_HRH_ -#ifdef __WINS__ -//# define __FEATURE_RDS_SIMULATOR -#endif #endif // BUILDFLAGS_HRH_ diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/api/cradioregion.h --- a/radioengine/settings/api/cradioregion.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/api/cradioregion.h Thu Jul 22 16:33:45 2010 +0100 @@ -84,18 +84,6 @@ */ IMPORT_C const RRadioCountryCodeArray& CountryCodes(); - /** - * Name Get the name of region - * @return Name of region - */ - IMPORT_C const TDesC16& Name() const; - - /** - * SettingItemName Get the name of region for setting item - * @return Name of region - */ - IMPORT_C const TDesC16& SettingItemName() const; - private: CRadioRegion(); @@ -107,7 +95,7 @@ /** Id of the region*/ TRadioRegion iId; /** Step interval*/ - TUint16 iStepSize; + TUint32 iStepSize; /** Min frequency */ TUint32 iMinFreq; /** Max frequency */ @@ -116,10 +104,6 @@ TInt iDecimalCount; /** Country code*/ RRadioCountryCodeArray iCountryCodes; - /** Region name*/ - HBufC* iName; - /** Region name for setting item*/ - HBufC* iSettingName; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/api/cradiosettings.h --- a/radioengine/settings/api/cradiosettings.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/api/cradiosettings.h Thu Jul 22 16:33:45 2010 +0100 @@ -43,7 +43,7 @@ public: - IMPORT_C static CRadioSettings* NewL( CCoeEnv* aCoeEnv = NULL ); + IMPORT_C static CRadioSettings* NewL(); IMPORT_C virtual ~CRadioSettings(); @@ -74,13 +74,6 @@ virtual MRadioSettingsSetter& RadioSetter() const = 0; /** - * Returns the repository manager. - * - * @return The repository manager. - */ - virtual CRadioRepositoryManager& Repository() const = 0; - - /** * Resolves the most recently updated location for a file. * * @param aFileName The file name to be searched. diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/api/mradioapplicationsettings.h --- a/radioengine/settings/api/mradioapplicationsettings.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/api/mradioapplicationsettings.h Thu Jul 22 16:33:45 2010 +0100 @@ -30,53 +30,9 @@ public: - /** - * Possible states for audio playing state. - * Once the state reaches ´played´, it doesn't change. - */ - enum TRadioCRAudioPlayHistory - { - ERadioCRInitial, - ERadioCRAudioTriggered, - ERadioCRAudioPlayed - }; - -public: - - /** - * Stores the currently active preset in the preset list. - * - * @param aIndex The list box index of the preset that is - * currently active. - */ - virtual TInt SetActiveFocusLocation( TInt aIndex ) = 0; + virtual TBool IsFirstTimeStart() = 0; - /** - * Retrieves the list box index of the currently active preset. - * By default, the first preset is active. - * - * @return The list box index of the currently active preset. - */ - virtual TInt ActiveFocusLocation() const = 0; - - /** - * Stores the audio history telling whether the audio has been - * played ( so that user has triggered it ). - * - * Once the history reaches state 'played', it does not change. - * - * @param aHistory The audio history. - */ - virtual void SetAudioPlayHistoryL( TRadioCRAudioPlayHistory aHistory ) = 0; - - /** - * Retrieves the current audio play history. - * - * @return The current audio play history. - */ - virtual TRadioCRAudioPlayHistory AudioPlayHistory() const = 0; - - virtual TInt UpdateStartCount() = 0; + virtual void SetFirstTimeStartPerformed( TBool aFirstTimeStartPerformed ) = 0; virtual TInt SetUiFlags( TUint aUiFlags ) = 0; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/api/mradioenginesettings.h --- a/radioengine/settings/api/mradioenginesettings.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/api/mradioenginesettings.h Thu Jul 22 16:33:45 2010 +0100 @@ -165,13 +165,6 @@ virtual TInt DecimalCount() const = 0; /** - * Retrieves the RDS alternate frequency search setting - * - * @return ETrue if AF search is enabled, otherwise EFalse - */ - virtual TBool RdsAfSearchEnabled() const = 0; - - /** * Retrieves the default region's ID. * * @return The region's ID. @@ -186,11 +179,6 @@ /** * */ - virtual TPtrC SubscriberId() const = 0; - - /** - * - */ virtual TPtrC CountryCode() const = 0; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/api/mradiosettingssetter.h --- a/radioengine/settings/api/mradiosettingssetter.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/api/mradiosettingssetter.h Thu Jul 22 16:33:45 2010 +0100 @@ -117,13 +117,6 @@ virtual TInt SetRegionId( TInt aRegion ) = 0; /** - * Stores the RDS alternate frequency search setting - * - * @param aEnabled ETrue if search is enabled, otherwise EFalse - */ - virtual TInt SetRdsAfSearch( TBool aEnabled ) = 0; - - /** * */ virtual TInt SetNetworkId( const TDesC& aNetworkId ) = 0; @@ -131,11 +124,6 @@ /** * */ - virtual TInt SetSubscriberId( const TDesC& aSubscriberId ) = 0; - - /** - * - */ virtual TInt SetCountryCode( const TDesC& aCountryCode ) = 0; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/bwins/fmradioenginesettingsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/bwins/fmradioenginesettingsu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,10 @@ +EXPORTS + ?Id@CRadioRegion@@QBE?AW4TRadioRegion@@XZ @ 1 NONAME ; enum TRadioRegion CRadioRegion::Id(void) const + ?NewL@CRadioSettings@@SAPAV1@XZ @ 2 NONAME ; class CRadioSettings * CRadioSettings::NewL(void) + ?StepSize@CRadioRegion@@QBEKXZ @ 3 NONAME ; unsigned long CRadioRegion::StepSize(void) const + ?MaxFrequency@CRadioRegion@@QBEKXZ @ 4 NONAME ; unsigned long CRadioRegion::MaxFrequency(void) const + ?DecimalCount@CRadioRegion@@QBEHXZ @ 5 NONAME ; int CRadioRegion::DecimalCount(void) const + ??1CRadioSettings@@UAE@XZ @ 6 NONAME ; CRadioSettings::~CRadioSettings(void) + ?MinFrequency@CRadioRegion@@QBEKXZ @ 7 NONAME ; unsigned long CRadioRegion::MinFrequency(void) const + ?CountryCodes@CRadioRegion@@QAEABV?$RPointerArray@VHBufC16@@@@XZ @ 8 NONAME ; class RPointerArray const & CRadioRegion::CountryCodes(void) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/bwins/radioenginesettingsu.def --- a/radioengine/settings/bwins/radioenginesettingsu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -EXPORTS - ??1CRadioSettings@@UAE@XZ @ 1 NONAME ; CRadioSettings::~CRadioSettings(void) - ?CountryCodes@CRadioRegion@@QAEABV?$RPointerArray@VHBufC16@@@@XZ @ 2 NONAME ; class RPointerArray const & CRadioRegion::CountryCodes(void) - ?DecimalCount@CRadioRegion@@QBEHXZ @ 3 NONAME ; int CRadioRegion::DecimalCount(void) const - ?Id@CRadioRegion@@QBE?AW4TRadioRegion@@XZ @ 4 NONAME ; enum TRadioRegion CRadioRegion::Id(void) const - ?MaxFrequency@CRadioRegion@@QBEKXZ @ 5 NONAME ; unsigned long CRadioRegion::MaxFrequency(void) const - ?MinFrequency@CRadioRegion@@QBEKXZ @ 6 NONAME ; unsigned long CRadioRegion::MinFrequency(void) const - ?Name@CRadioRegion@@QBEABVTDesC16@@XZ @ 7 NONAME ; class TDesC16 const & CRadioRegion::Name(void) const - ?NewL@CRadioSettings@@SAPAV1@PAVCCoeEnv@@@Z @ 8 NONAME ; class CRadioSettings * CRadioSettings::NewL(class CCoeEnv *) - ?SettingItemName@CRadioRegion@@QBEABVTDesC16@@XZ @ 9 NONAME ; class TDesC16 const & CRadioRegion::SettingItemName(void) const - ?StepSize@CRadioRegion@@QBEKXZ @ 10 NONAME ; unsigned long CRadioRegion::StepSize(void) const - diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/cenrep/101FF976.txt Binary file radioengine/settings/cenrep/101FF976.txt has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/cenrep/2002FF52.txt Binary file radioengine/settings/cenrep/2002FF52.txt has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/cenrep/radio.confml Binary file radioengine/settings/cenrep/radio.confml has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/cenrep/radio_2002FF52.crml Binary file radioengine/settings/cenrep/radio_2002FF52.crml has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/data/fmradioenginesettings.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/data/fmradioenginesettings.rss Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,164 @@ +/* +* 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: +* +*/ + +// Resource identifier +NAME QRST + +// System includes +#include + +#include "radioengine.hrh" + +// Resource definitions + +// --------------------------------------------------------- +// Resource signature +// --------------------------------------------------------- +// + +RESOURCE RSS_SIGNATURE { } + +// --------------------------------------------------------- +// +// --------------------------------------------------------- +// +STRUCT RADIO_REGION + { + WORD id; + LONG stepsize; + LONG minfrequency; + LONG maxfrequency; + WORD decimalcount; + LTEXT countrycodes[] = {""}; + } + +// --------------------------------------------------------- +// +// --------------------------------------------------------- +// +STRUCT RADIO_REGION_ARRAY + { + LLINK regions[]; + } + +// --------------------------------------------------------- +// r_qrad_regions +// Array of the supported regions +// --------------------------------------------------------- +// +RESOURCE RADIO_REGION_ARRAY r_qrad_regions + { + regions = + { + r_qrad_region_japan, + r_qrad_region_america, + r_qrad_region_default + }; + } + +// --------------------------------------------------------- +// r_qrad_region_japan +// Region settings for Japan +// Check country codes from: +// "COMPLEMENT TO ITU-T RECOMMENDATION E.212, LIST OF MOBILE COUNTRY OR GEOGRAPHICAL AREA CODES" +// --------------------------------------------------------- +// +RESOURCE RADIO_REGION r_qrad_region_japan + { + id = ERadioRegionJapan; + stepsize = 100; + minfrequency = 76000; + maxfrequency = 90000; + decimalcount = 1; + countrycodes = + { + "440", + "441" + }; + } + +// --------------------------------------------------------- +// r_qrad_region_america +// Region settings for America +// "COMPLEMENT TO ITU-T RECOMMENDATION E.212, LIST OF MOBILE COUNTRY OR GEOGRAPHICAL AREA CODES" +// --------------------------------------------------------- +// +RESOURCE RADIO_REGION r_qrad_region_america + { + id = ERadioRegionAmerica; + stepsize = 200; + minfrequency = 88100; + maxfrequency = 107900; + decimalcount = 1; + countrycodes = + { + "302", // Canada + "310", // USA + "311", // USA + "312", // USA + "313", // USA + "314", // USA + "315", // USA + "316", // USA + "332", // United States Virgin Islands + "334", // Mexico + "338", // Jamaica + "342", // Barbados + "344", // Antigua and Barbuda + "352", // Grenada + "360", // Saint Vincent and the Grenadines + "364", // Bahamas + "366", // Common Wealth of Dominica + "370", // Dominican Republic + "372", // Haiti + "374", // Trinidad and Tobago + "368", // Cuba + "702", // Belize + "704", // Guatemala + "706", // El Salvador + "708", // Honduras + "710", // Nicaragua + "712", // Costa Rica + "714", // Panama + "716", // Peru + "722", // Argentina + "724", // Brazil + "730", // Chile + "732", // Colombia + "734", // Venezuela + "736", // Bolivia + "738", // Guyana + "740", // Ecuador + "744", // Paraguay + "746", // Suriname + "748" // Uruguay + }; + } + +// --------------------------------------------------------- +// r_qrad_region_default +// Region settings for default region +// --------------------------------------------------------- +// +RESOURCE RADIO_REGION r_qrad_region_default + { + id = ERadioRegionDefault; + stepsize = 100; + minfrequency = 87500; + maxfrequency = 108000; + decimalcount = 2; + } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/data/radioenginesettings.rss --- a/radioengine/settings/data/radioenginesettings.rss Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -/* -* 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: -* -*/ - -// Resource identifier -NAME QRST - -// System includes -#include - -#include "radiosettings.rh" -#include "radiopreset.hrh" -#include "radioengine.hrh" - -// Resource definitions - -// --------------------------------------------------------- -// Resource signature -// --------------------------------------------------------- -// - -RESOURCE RSS_SIGNATURE { } - -// Non-operator customisable settings - -// --------------------------------------------------------- -// r_qrad_empty_name_preset -// TBUF16 stores the string name for the empty "Empty" -// --------------------------------------------------------- -// -RESOURCE TBUF256 r_qrad_empty_name_preset -{ - buf = qtn_radio_ch_empty; -} - -// --------------------------------------------------------- -// r_qrad_predefined_presets -// Predefined presets list. No need to include empty presets -- they'll get autogenerated! -// --------------------------------------------------------- -// -// The following array must coexist as the VERY LAST Resource IN THIS FILE, to maintain BC! -RESOURCE RADIOPRESET r_qrad_empty_presets -{ - name = ""; - freq_kHz = 0; - serviceid = ""; - radio_preset_type = ERadioPresetItemEmpty; - radio_preset_location = ""; -} - -// --------------------------------------------------------- -// -// --------------------------------------------------------- -// -STRUCT RADIO_REGION - { - WORD id; - WORD stepsize; - LONG minfrequency; - LONG maxfrequency; - WORD decimalcount; - LTEXT countrycodes[] = {""}; - LTEXT regionname; - LTEXT regionsettingname; - } - -// --------------------------------------------------------- -// -// --------------------------------------------------------- -// -STRUCT RADIO_REGION_ARRAY - { - LLINK regions[]; - } - -// --------------------------------------------------------- -// r_qrad_regions -// Array of the supported regions -// --------------------------------------------------------- -// -RESOURCE RADIO_REGION_ARRAY r_qrad_regions - { - regions = - { - r_qrad_region_japan, - r_qrad_region_america, - r_qrad_region_default - }; - } - -// --------------------------------------------------------- -// r_qrad_region_japan -// Region settings for Japan -// Check country codes from: -// "COMPLEMENT TO ITU-T RECOMMENDATION E.212, LIST OF MOBILE COUNTRY OR GEOGRAPHICAL AREA CODES" -// --------------------------------------------------------- -// -RESOURCE RADIO_REGION r_qrad_region_japan - { - id = ERadioRegionJapan; - stepsize = 100; - minfrequency = 76000; - maxfrequency = 90000; - decimalcount = 1; - countrycodes = - { - "440", - "441" - }; - regionname = qtn_vr_reg_japan; - regionsettingname = qtn_vr_set_reg_japan; - } - -// --------------------------------------------------------- -// r_qrad_region_america -// Region settings for America -// "COMPLEMENT TO ITU-T RECOMMENDATION E.212, LIST OF MOBILE COUNTRY OR GEOGRAPHICAL AREA CODES" -// --------------------------------------------------------- -// -RESOURCE RADIO_REGION r_qrad_region_america - { - id = ERadioRegionAmerica; - stepsize = 200; - minfrequency = 88100; - maxfrequency = 107900; - decimalcount = 1; - countrycodes = - { - "302", // Canada - "310", // USA - "311", // USA - "312", // USA - "313", // USA - "314", // USA - "315", // USA - "316", // USA - "332", // United States Virgin Islands - "334", // Mexico - "338", // Jamaica - "342", // Barbados - "344", // Antigua and Barbuda - "352", // Grenada - "360", // Saint Vincent and the Grenadines - "364", // Bahamas - "366", // Common Wealth of Dominica - "370", // Dominican Republic - "372", // Haiti - "374", // Trinidad and Tobago - "368", // Cuba - "702", // Belize - "704", // Guatemala - "706", // El Salvador - "708", // Honduras - "710", // Nicaragua - "712", // Costa Rica - "714", // Panama - "716", // Peru - "722", // Argentina - "724", // Brazil - "730", // Chile - "732", // Colombia - "734", // Venezuela - "736", // Bolivia - "738", // Guyana - "740", // Ecuador - "744", // Paraguay - "746", // Suriname - "748" // Uruguay - }; - regionname = qtn_vr_reg_america; - regionsettingname = qtn_vr_set_reg_america; - } - -// --------------------------------------------------------- -// r_qrad_region_default -// Region settings for default region -// --------------------------------------------------------- -// -RESOURCE RADIO_REGION r_qrad_region_default - { - id = ERadioRegionDefault; - stepsize = 50; - minfrequency = 87500; - maxfrequency = 108000; - decimalcount = 2; - regionname = qtn_vr_reg_other; - regionsettingname = qtn_vr_set_reg_other; - } - -// --------------------------------------------------------- -// r_qtn_qrad_folder_radio_presets -// TBUF32 stores the string for presets folder name -// String lenght must be 30 characters -// --------------------------------------------------------- -// -RESOURCE TBUF32 r_qtn_qrad_folder_radio_presets - { - buf = qtn_vr_folder_radio_presets; - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/eabi/fmradioenginesettingsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/eabi/fmradioenginesettingsu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,12 @@ +EXPORTS + _ZN12CRadioRegion12CountryCodesEv @ 1 NONAME + _ZN14CRadioSettings4NewLEv @ 2 NONAME + _ZN14CRadioSettingsD0Ev @ 3 NONAME + _ZN14CRadioSettingsD1Ev @ 4 NONAME + _ZN14CRadioSettingsD2Ev @ 5 NONAME + _ZNK12CRadioRegion12DecimalCountEv @ 6 NONAME + _ZNK12CRadioRegion12MaxFrequencyEv @ 7 NONAME + _ZNK12CRadioRegion12MinFrequencyEv @ 8 NONAME + _ZNK12CRadioRegion2IdEv @ 9 NONAME + _ZNK12CRadioRegion8StepSizeEv @ 10 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/eabi/radioenginesettingsu.def --- a/radioengine/settings/eabi/radioenginesettingsu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -EXPORTS - _ZN12CRadioRegion12CountryCodesEv @ 1 NONAME - _ZN14CRadioSettings4NewLEP7CCoeEnv @ 2 NONAME - _ZN14CRadioSettingsD0Ev @ 3 NONAME - _ZN14CRadioSettingsD1Ev @ 4 NONAME - _ZN14CRadioSettingsD2Ev @ 5 NONAME - _ZNK12CRadioRegion12DecimalCountEv @ 6 NONAME - _ZNK12CRadioRegion12MaxFrequencyEv @ 7 NONAME - _ZNK12CRadioRegion12MinFrequencyEv @ 8 NONAME - _ZNK12CRadioRegion15SettingItemNameEv @ 9 NONAME - _ZNK12CRadioRegion2IdEv @ 10 NONAME - _ZNK12CRadioRegion4NameEv @ 11 NONAME - _ZNK12CRadioRegion8StepSizeEv @ 12 NONAME - diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/group/bld.inf --- a/radioengine/settings/group/bld.inf Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/group/bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -24,12 +24,11 @@ PRJ_EXPORTS -//../sis/visualradiostub.sis /epoc32/data/z/system/install/visualradio.sis -backup_registration.xml /epoc32/data/z/private/101ff976/backup_registration.xml +backup_registration.xml /epoc32/data/z/private/2002FF52/backup_registration.xml -../cenrep/101FF976.txt /epoc32/data/z/private/10202be9/101FF976.txt -../cenrep/101FF976.txt /epoc32/RELEASE/winscw/UDEB/Z/private/10202be9/101FF976.txt -../cenrep/101FF976.txt /epoc32/RELEASE/winscw/UREL/Z/private/10202be9/101FF976.txt +../cenrep/2002FF52.txt /epoc32/data/z/private/10202be9/2002FF52.txt +../cenrep/2002FF52.txt /epoc32/RELEASE/winscw/UDEB/Z/private/10202be9/2002FF52.txt +../cenrep/2002FF52.txt /epoc32/RELEASE/winscw/UREL/Z/private/10202be9/2002FF52.txt PRJ_MMPFILES radioenginesettings.mmp diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/group/radioenginesettings.mmp --- a/radioengine/settings/group/radioenginesettings.mmp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/group/radioenginesettings.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -24,19 +24,19 @@ #include -TARGET radioenginesettings.dll +TARGET fmradioenginesettings.dll TARGETTYPE DLL -UID 0x1000008D 0x101FF94C +UID 0x1000008D 0x2002FF50 VERSION 10.0 CAPABILITY CAP_GENERAL_DLL VENDORID VID_DEFAULT PAGED -//LANGUAGE_IDS +SMPSAFE LANG SC SOURCEPATH ../data -START RESOURCE radioenginesettings.rss +START RESOURCE fmradioenginesettings.rss HEADER TARGETPATH RESOURCE_FILES_DIR END // RESOURCE @@ -51,14 +51,14 @@ SOURCE cradioregion.cpp SOURCE cradiosettings.cpp SOURCE cradiosettingsimp.cpp -SOURCE cradiosettingsbase.cpp SOURCE cradioenginesettings.cpp SOURCE cradioapplicationsettings.cpp -LIBRARY radioengineutils.lib +LIBRARY fmradioengineutils.lib LIBRARY bafl.lib LIBRARY commonengine.lib LIBRARY cone.lib LIBRARY efsrv.lib LIBRARY estor.lib LIBRARY euser.lib +LIBRARY centralrepository.lib diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/inc/cradioapplicationsettings.h --- a/radioengine/settings/inc/cradioapplicationsettings.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/inc/cradioapplicationsettings.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,36 +20,38 @@ // User includes #include "mradioapplicationsettings.h" -#include "cradiosettingsbase.h" + +// Forward declarations +class CRepository; /** * Concrete implementation of application settings. */ -NONSHARABLE_CLASS( CRadioApplicationSettings ) : public CRadioSettingsBase +NONSHARABLE_CLASS( CRadioApplicationSettings ) : public CBase , public MRadioApplicationSettings { public: - static CRadioApplicationSettings* NewL( CRadioRepositoryManager& aRepositoryManager, CCoeEnv& aCoeEnv ); + static CRadioApplicationSettings* NewL(); ~CRadioApplicationSettings(); // from base class MRadioApplicationSettings - TInt SetActiveFocusLocation( TInt aIndex ); - TInt ActiveFocusLocation() const; - void SetAudioPlayHistoryL( TRadioCRAudioPlayHistory aHistory ); - TRadioCRAudioPlayHistory AudioPlayHistory() const; - TInt UpdateStartCount(); + TBool IsFirstTimeStart(); + void SetFirstTimeStartPerformed( TBool aFirstTimeStartPerformed ); TInt SetUiFlags( TUint aUiFlags ); TUint UiFlags() const; private: - CRadioApplicationSettings( CRadioRepositoryManager& aRepositoryManager, CCoeEnv& aCoeEnv ); + CRadioApplicationSettings(); void ConstructL(); + +private: // data + CRepository* iRepository; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/inc/cradioenginesettings.h --- a/radioengine/settings/inc/cradioenginesettings.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/inc/cradioenginesettings.h Thu Jul 22 16:33:45 2010 +0100 @@ -22,23 +22,36 @@ #include "mradioenginesettings.h" #include "mradiosettingssetter.h" #include "cradioregion.h" -#include "mradiorepositoryentityobserver.h" -#include "cradiosettingsbase.h" // Forward declarations class MRadioSettingsObserver; +class CRepository; +class CRadioSettingsImp; + +// Constants + +/** + * Maximum size of the network country code. + * From CTelephony::TNetworkInfoV1 in etel3rdparty.h + */ +enum { KNetworkCountryCodeSize = 4 }; + +/** + * Maximum size of the network identity. + * From CTelephony::TNetworkInfoV1 in etel3rdparty.h + */ +enum { KNetworkIdentitySize = 8 }; /** * Concrete implementation of radio settings. */ -NONSHARABLE_CLASS( CRadioEngineSettings ) : public CRadioSettingsBase +NONSHARABLE_CLASS( CRadioEngineSettings ) : public CBase , public MRadioSettingsSetter - , public MRadioRepositoryEntityObserver { public: - static CRadioEngineSettings* NewL( CRadioRepositoryManager& aRepositoryManager, CCoeEnv& aCoeEnv ); + static CRadioEngineSettings* NewL( CRadioSettingsImp& aRadioSettingsImp ); ~CRadioEngineSettings(); @@ -49,7 +62,7 @@ private: - CRadioEngineSettings( CRadioRepositoryManager& aRepositoryManager, CCoeEnv& aCoeEnv ); + CRadioEngineSettings( CRadioSettingsImp& aRadioSettingsImp ); void ConstructL(); @@ -73,10 +86,8 @@ TUint32 MaxFrequency() const; TUint32 MinFrequency() const; TInt DecimalCount() const; - TBool RdsAfSearchEnabled() const; TRadioRegion DefaultRegion() const; TPtrC NetworkId() const; - TPtrC SubscriberId() const; TPtrC CountryCode() const; // from base class MRadioSettingsSetter @@ -93,25 +104,31 @@ TInt SetPowerOn( TBool aPowerState ); TInt SetTunedFrequency( TUint32 aFrequency ); TInt SetRegionId( TInt aRegion ); - TInt SetRdsAfSearch( TBool aEnabled ); TInt SetNetworkId( const TDesC& aNetworkId ); - TInt SetSubscriberId( const TDesC& aSubscriberId ); TInt SetCountryCode( const TDesC& aCountryCode ); -// from base class MRadioRepositoryEntityObserver - - void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, TInt aValue, TInt aError ); - void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TReal& /*aValue*/, TInt /*aError*/ ) {} - void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TDesC8& /*aValue*/, TInt /*aError*/ ) {} - void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TDesC16& /*aValue*/, TInt /*aError*/ ) {} - // New functions /** + * Initializes the data holders + */ + void InitializeDataHolders(); + + /** + * Gets a repository value and sets the default value if the key is not found + */ + TBool GetRepositoryValue( int aKey, TInt& aValue, TInt aDefault ); + + /** + * Sets a boolean value to cenrep and data holder + */ + TInt SetFlagValue( int aKey, int aFlagId, TInt aValue ); + + /** * Initializes the regions as defined in the resource file. */ void InitializeRegionsL(); - + /** * Converts Region ID to index * @@ -133,17 +150,34 @@ * The observer for the setting changes. * Not own. */ - MRadioSettingsObserver* iObserver; + MRadioSettingsObserver* iObserver; /** * The available regions. */ - RRadioRegionArray iRegions; + RRadioRegionArray iRegions; /** * The current region. */ - TInt iCurrentRegionIdx; + TInt iCurrentRegionIdx; + + CRadioSettingsImp& iRadioSettingsImp; + + RResourceFile iResFile; + + CRepository* iRepository; + + // Data holders for quick access + TBitFlags iFlags; + TBuf iNetworkId; + TBuf iCountryCode; + TInt iHeadsetVolume; + TInt iSpeakerVolume; + TUint32 iFrequency; + TInt iDefaultMinVolume; + TRadioRegion iDefaultRegion; + TRadioRegion iRegionId; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/inc/cradiosettingsbase.h --- a/radioengine/settings/inc/cradiosettingsbase.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef C_RADIOSETTINGSBASE_H -#define C_RADIOSETTINGSBASE_H - -// System includes -#include -#include - -// Forward declarations -class CCoeEnv; -class CRadioRepositoryManager; - -/** - * Base class for all settings implementations. - * - * Provides commonly used data members and methods. - */ -NONSHARABLE_CLASS( CRadioSettingsBase ) : public CBase - { - -public: - - ~CRadioSettingsBase(); - -protected: - - CRadioSettingsBase( CRadioRepositoryManager& aRepositoryManager, CCoeEnv& aCoeEnv ); - - /** - * Writes an array to the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key to which to write the array. - * @param aArray The array to write. - */ - void WriteArrayEntityL( const TUid& aUid, TUint32 aKey, const CDesCArray& aArray ); - - /** - * Reads an array from the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key to which to write the array. - * @return The array that was read. Ownership is transferred to the caller. - */ - CDesCArray* ReadArrayEntityL( const TUid& aUid, TUint32 aKey ) const; - -protected: - - /** - * The control environment. - */ - CCoeEnv& iCoeEnv; - - /** - * The repository manager. - */ - CRadioRepositoryManager& iRepositoryManager; - - }; - -#endif // C_RADIOSETTINGSBASE_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/inc/cradiosettingsimp.h --- a/radioengine/settings/inc/cradiosettingsimp.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/inc/cradiosettingsimp.h Thu Jul 22 16:33:45 2010 +0100 @@ -18,16 +18,19 @@ #ifndef C_RADIOSETTINGSIMP_H #define C_RADIOSETTINGSIMP_H +// System includes +#include // User includes #include "cradiosettings.h" // Forward declarations -class CCoeEnv; class CRadioApplicationSettings; class CRadioEngineSettings; -class CRadioRepositoryManager; class RConeResourceLoader; +// The name of the radio settings resource file. +_LIT( KRadioSettingsResourceFile, "fmradioenginesettings.rsc" ); + /** * Manages persistent application settings. * @@ -38,45 +41,29 @@ public: - static CRadioSettingsImp* NewL( CCoeEnv* aCoeEnv = NULL ); + static CRadioSettingsImp* NewL(); ~CRadioSettingsImp(); + RFs& FsSession(); + // from base class CRadioSettings TBool IsRegionAllowed( TRadioRegion aRegionId ) const; MRadioApplicationSettings& ApplicationSettings() const; MRadioEngineSettings& EngineSettings() const; MRadioSettingsSetter& RadioSetter() const; - CRadioRepositoryManager& Repository() const; void ResolveDriveL( TFileName& aFileName, const TDesC& aPath ); private: CRadioSettingsImp(); - void ConstructL( CCoeEnv* aCoeEnv ); - - /** - * Loads the resources required by the settings. - */ - void LoadResourcesL(); + void ConstructL(); private: // data /** - * The central repository manager. - * Own. - */ - CRadioRepositoryManager* iRepositoryManager; - - /** - * Resource loader for the settings resources. - * Own. - */ - RConeResourceLoader* iResourceLoader; - - /** * Implementation of the application settings. * Own */ @@ -87,6 +74,12 @@ * Own */ CRadioEngineSettings* iEngineSettings; + + /** + * File session. + * Own + */ + RFs* iFsSession; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/inc/radiopreset.hrh --- a/radioengine/settings/inc/radiopreset.hrh Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOPRESET_HRH -#define RADIOPRESET_HRH - -#define KVRDefaultPresetFolder 0 - -/** - * Preset types. - */ -enum TRadioPresetType - { - ERadioPresetItemEmpty = 0, /**< The preset item is empty, i.e. not initialized yet. */ - ERadioPresetItemRadioContentEnabled = 1, /**< The preset item has radio frequency. */ - ERadioPresetItemVisualRadioContentEnabled = 2 /**< The preset item has visual content enabled. */ - }; - -#endif // RADIOPRESET_HRH diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/inc/radiosettings.rh --- a/radioengine/settings/inc/radiosettings.rh Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOSETTINGS_RH -#define RADIOSETTINGS_RH - -// System includes -#include - -STRUCT RADIOPRESET -{ - LTEXT name; // Name of a Radio Station preset - LONG freq_kHz; // Frequency of the radio, in kHz. 108.0 MHz == 108000 kHz - LTEXT serviceid; // Visual Radio Service Id for Content server - BYTE radio_preset_type; // Indicates whether this is a visual radio -enabled preset. 0 indicates false, otherwise true. - LTEXT radio_preset_location; // Location of the preset -} - -#endif // RADIOSETTINGS_RH diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/src/cradioapplicationsettings.cpp --- a/radioengine/settings/src/cradioapplicationsettings.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/src/cradioapplicationsettings.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -15,12 +15,19 @@ * */ +// System includes +#include + // User includes +#include "cradiosettingsimp.h" #include "radiointernalcrkeys.h" #include "cradioapplicationsettings.h" -#include "cradiorepositorymanager.h" #include "cradioenginelogger.h" +// This has to be the last include. +#ifdef STUB_CONSTELLATION +# include +#endif //STUB_CONSTELLATION // ======== MEMBER FUNCTIONS ======== @@ -28,10 +35,10 @@ // // --------------------------------------------------------------------------- // -CRadioApplicationSettings* CRadioApplicationSettings::NewL( CRadioRepositoryManager& aRepositoryManager, - CCoeEnv& aCoeEnv ) +CRadioApplicationSettings* CRadioApplicationSettings::NewL() { - CRadioApplicationSettings* self = new ( ELeave ) CRadioApplicationSettings( aRepositoryManager, aCoeEnv ); + LEVEL3( LOG_METHOD_AUTO ); + CRadioApplicationSettings* self = new ( ELeave ) CRadioApplicationSettings(); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -44,19 +51,18 @@ // void CRadioApplicationSettings::ConstructL() { - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRActiveFocusLocation, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRAudioPlayHistory, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRUiFlags, CRadioRepositoryManager::ERadioEntityInt ); + LEVEL2( LOG_METHOD_AUTO ); + iRepository = CRepository::NewL( KRadioCRUid ); + LOG_FORMAT( "iRepository = %i", iRepository ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -CRadioApplicationSettings::CRadioApplicationSettings( CRadioRepositoryManager& aRepositoryManager, - CCoeEnv& aCoeEnv ) - : CRadioSettingsBase( aRepositoryManager, aCoeEnv ) +CRadioApplicationSettings::CRadioApplicationSettings() { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -65,26 +71,8 @@ // CRadioApplicationSettings::~CRadioApplicationSettings() { - } - -// --------------------------------------------------------------------------- -// From class MRadioApplicationSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioApplicationSettings::SetActiveFocusLocation( TInt aIndex ) - { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRActiveFocusLocation, aIndex ); - } - -// --------------------------------------------------------------------------- -// From class MRadioApplicationSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioApplicationSettings::ActiveFocusLocation() const - { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRActiveFocusLocation ); + LEVEL3( LOG_METHOD_AUTO ); + delete iRepository; } // --------------------------------------------------------------------------- @@ -92,12 +80,13 @@ // // --------------------------------------------------------------------------- // -void CRadioApplicationSettings::SetAudioPlayHistoryL( TRadioCRAudioPlayHistory aHistory ) +TBool CRadioApplicationSettings::IsFirstTimeStart() { - if ( AudioPlayHistory() != ERadioCRAudioPlayed ) - { - User::LeaveIfError( iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRAudioPlayHistory, aHistory ) ); - } + LEVEL3( LOG_METHOD_AUTO ); + TInt startCount = 0; + iRepository->Get( KRadioCRLaunchCount, startCount ); + + return startCount == 0; } // --------------------------------------------------------------------------- @@ -105,27 +94,12 @@ // // --------------------------------------------------------------------------- // -MRadioApplicationSettings::TRadioCRAudioPlayHistory CRadioApplicationSettings::AudioPlayHistory() const +void CRadioApplicationSettings::SetFirstTimeStartPerformed( TBool aFirstTimeStartPerformed ) { - return static_cast( - iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRAudioPlayHistory ) ); + LEVEL3( LOG_METHOD_AUTO ); + iRepository->Set( KRadioCRLaunchCount, aFirstTimeStartPerformed ? 1 : 0 ); } -// --------------------------------------------------------------------------- -// From class MRadioApplicationSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioApplicationSettings::UpdateStartCount() - { - TInt startCount = 0; - TRAP_IGNORE - ( - CRadioRepositoryManager::GetRepositoryValueL( KRadioCRUid, KRadioCRLaunchCount, startCount ); - CRadioRepositoryManager::SetRepositoryValueL( KRadioCRUid, KRadioCRLaunchCount, startCount + 1 ); - ); - return startCount; - } // --------------------------------------------------------------------------- // From class MRadioApplicationSettings. @@ -134,7 +108,8 @@ // TInt CRadioApplicationSettings::SetUiFlags( TUint aUiFlags ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRUiFlags, static_cast( aUiFlags ) ); + LEVEL3( LOG_METHOD_AUTO ); + return iRepository->Set( KRadioCRUiFlags, static_cast( aUiFlags ) ); } // --------------------------------------------------------------------------- @@ -144,5 +119,8 @@ // TUint CRadioApplicationSettings::UiFlags() const { - return static_cast( iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRUiFlags ) ); + LEVEL3( LOG_METHOD_AUTO ); + TInt uiFlags( 0 ); + iRepository->Get( KRadioCRUiFlags, uiFlags ); + return static_cast( uiFlags ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/src/cradioenginesettings.cpp --- a/radioengine/settings/src/cradioenginesettings.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/src/cradioenginesettings.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -18,14 +18,50 @@ // System includes #include #include +#include +#include +#include +#include // User includes #include "radiointernalcrkeys.h" -#include "radioenginesettings.rsg" #include "radioenginedef.h" #include "cradioenginesettings.h" +#include "cradiosettingsimp.h" #include "mradiosettingsobserver.h" -#include "cradiorepositorymanager.h" +#include "cradioenginelogger.h" + +// This has to be the last include. +#ifdef STUB_CONSTELLATION +# include +#endif //STUB_CONSTELLATION + + + /** + * On/Off type flags used by TBitFlags. + */ + enum TFlagValues + { + EHeadsetVolMuted = 1 << 0 + ,ESpeakerVolMuted = 1 << 1 + ,EPowerOn = 1 << 2 + ,EStereoOutput = 1 << 3 + ,EHeadsetAudioRoute = 1 << 4 + }; + +// ======== LOCAL FUNCTIONS ======== + + // --------------------------------------------------------------------------- + // Normalize return value from TBitFlags to 1 or 0 just in case + // Two negations: 16 => 0 => 1 + // --------------------------------------------------------------------------- + // +static TBool NormalizeBool( TBool aBool ) + { + // Normalize return value from TBitFlags to 1 or 0 just in case + // Two negations: 16 => 0 => 1 + return !( !aBool ); + } // ======== MEMBER FUNCTIONS ======== @@ -34,10 +70,10 @@ // // --------------------------------------------------------------------------- // -CRadioEngineSettings* CRadioEngineSettings::NewL( CRadioRepositoryManager& aRepositoryManager, - CCoeEnv& aCoeEnv ) +CRadioEngineSettings* CRadioEngineSettings::NewL( CRadioSettingsImp& aRadioSettingsImp ) { - CRadioEngineSettings* self = new ( ELeave ) CRadioEngineSettings( aRepositoryManager, aCoeEnv ); + LEVEL3( LOG_METHOD_AUTO ); + CRadioEngineSettings* self = new ( ELeave ) CRadioEngineSettings( aRadioSettingsImp ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -50,32 +86,22 @@ // void CRadioEngineSettings::ConstructL() { - iRepositoryManager.AddObserverL( this ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRHeadsetVolume, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRSpeakerVolume, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCROutputMode, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRAudioRoute, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRHeadsetMuteState, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRSpeakerMuteState, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRVisualRadioPowerState, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRTunedFrequency, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRDefaultMinVolumeLevel, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRCurrentRegion, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRRdsAfSearch, CRadioRepositoryManager::ERadioEntityInt ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRNetworkId, CRadioRepositoryManager::ERadioEntityDes16 ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRSubscriberId, CRadioRepositoryManager::ERadioEntityDes16 ); - iRepositoryManager.AddEntityL( KRadioCRUid, KRadioCRCountryCode, CRadioRepositoryManager::ERadioEntityDes16 ); + LEVEL3( LOG_METHOD_AUTO ); + iRepository = CRepository::NewL( KRadioCRUid ); InitializeRegionsL(); + + InitializeDataHolders(); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -CRadioEngineSettings::CRadioEngineSettings( CRadioRepositoryManager& aRepositoryManager, CCoeEnv& aCoeEnv ) - : CRadioSettingsBase( aRepositoryManager, aCoeEnv ) +CRadioEngineSettings::CRadioEngineSettings( CRadioSettingsImp& aRadioSettingsImp ) + : iRadioSettingsImp( aRadioSettingsImp ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -84,9 +110,11 @@ // CRadioEngineSettings::~CRadioEngineSettings() { - iRepositoryManager.RemoveObserver( this ); + LEVEL3( LOG_METHOD_AUTO ); iRegions.ResetAndDestroy(); iRegions.Close(); + iResFile.Close(); + delete iRepository; } // --------------------------------------------------------------------------- @@ -95,6 +123,7 @@ // void CRadioEngineSettings::SetObserver( MRadioSettingsObserver* aObserver ) { + LEVEL3( LOG_METHOD_AUTO ); iObserver = aObserver; } @@ -104,7 +133,13 @@ // TInt CRadioEngineSettings::SetHeadsetVolume( TInt aVolume ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRHeadsetVolume, aVolume ); + LEVEL3( LOG_METHOD_AUTO ); + TInt err = iRepository->Set( KRadioCRHeadsetVolume, aVolume ); + if ( !err ) + { + iHeadsetVolume = aVolume; + } + return err; } // --------------------------------------------------------------------------- @@ -113,7 +148,8 @@ // TInt CRadioEngineSettings::HeadsetVolume() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRHeadsetVolume ); + LEVEL3( LOG_METHOD_AUTO ); + return iHeadsetVolume; } // --------------------------------------------------------------------------- @@ -122,7 +158,13 @@ // TInt CRadioEngineSettings::SetSpeakerVolume( TInt aVolume ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRSpeakerVolume, aVolume ); + LEVEL3( LOG_METHOD_AUTO ); + TInt err = iRepository->Set( KRadioCRSpeakerVolume, aVolume ); + if ( !err ) + { + iSpeakerVolume = aVolume; + } + return err; } // --------------------------------------------------------------------------- @@ -131,7 +173,8 @@ // TInt CRadioEngineSettings::SpeakerVolume() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRSpeakerVolume ); + LEVEL3( LOG_METHOD_AUTO ); + return iSpeakerVolume; } // --------------------------------------------------------------------------- @@ -140,6 +183,7 @@ // TInt CRadioEngineSettings::SetVolume( TInt aVolume ) { + LEVEL3( LOG_METHOD_AUTO ); if ( AudioRoute() == RadioEngine::ERadioHeadset ) { return SetHeadsetVolume( aVolume ); @@ -156,6 +200,7 @@ // TInt CRadioEngineSettings::Volume() const { + LEVEL3( LOG_METHOD_AUTO ); if ( AudioRoute() == RadioEngine::ERadioHeadset ) { return HeadsetVolume(); @@ -173,7 +218,13 @@ // TInt CRadioEngineSettings::SetOutputMode( TInt aOutputMode ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCROutputMode, aOutputMode ); + LEVEL3( LOG_METHOD_AUTO ); + TInt err = iRepository->Set( KRadioCROutputMode, aOutputMode ); + if ( !err ) + { + iFlags.Assign( EStereoOutput, aOutputMode == RadioEngine::ERadioStereo ); + } + return err; } // --------------------------------------------------------------------------- @@ -183,7 +234,8 @@ // TInt CRadioEngineSettings::OutputMode() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCROutputMode ); + LEVEL3( LOG_METHOD_AUTO ); + return iFlags.IsSet( EStereoOutput ) ? RadioEngine::ERadioStereo : RadioEngine::ERadioMono; } // --------------------------------------------------------------------------- @@ -193,7 +245,13 @@ // TInt CRadioEngineSettings::SetAudioRoute( TInt aAudioRoute ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRAudioRoute, aAudioRoute ); + LEVEL3( LOG_METHOD_AUTO ); + TInt err = iRepository->Set( KRadioCRAudioRoute, aAudioRoute ); + if ( !err ) + { + iFlags.Assign( EHeadsetAudioRoute, aAudioRoute == RadioEngine::ERadioHeadset ); + } + return err; } // --------------------------------------------------------------------------- @@ -203,7 +261,8 @@ // TInt CRadioEngineSettings::AudioRoute() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRAudioRoute ); + LEVEL3( LOG_METHOD_AUTO ); + return iFlags.IsSet( EHeadsetAudioRoute ) ? RadioEngine::ERadioHeadset : RadioEngine::ERadioSpeaker; } // --------------------------------------------------------------------------- @@ -213,7 +272,8 @@ // TInt CRadioEngineSettings::SetHeadsetVolMuted( TBool aMuted ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRHeadsetMuteState, aMuted ); + LEVEL3( LOG_METHOD_AUTO ); + return SetFlagValue( KRadioCRHeadsetMuteState, EHeadsetVolMuted, aMuted ); } // --------------------------------------------------------------------------- @@ -223,7 +283,8 @@ // TBool CRadioEngineSettings::IsHeadsetVolMuted() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRHeadsetMuteState ); + LEVEL3( LOG_METHOD_AUTO ); + return NormalizeBool( iFlags.IsSet( EHeadsetVolMuted ) ); } // --------------------------------------------------------------------------- @@ -233,7 +294,8 @@ // TInt CRadioEngineSettings::SetSpeakerVolMuted( TBool aMuted ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRSpeakerMuteState, aMuted ); + LEVEL3( LOG_METHOD_AUTO ); + return SetFlagValue( KRadioCRSpeakerMuteState, ESpeakerVolMuted, aMuted ); } // --------------------------------------------------------------------------- @@ -243,7 +305,8 @@ // TBool CRadioEngineSettings::IsSpeakerVolMuted() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRSpeakerMuteState ); + LEVEL3( LOG_METHOD_AUTO ); + return NormalizeBool( iFlags.IsSet( ESpeakerVolMuted ) ); } // --------------------------------------------------------------------------- @@ -253,6 +316,7 @@ // TInt CRadioEngineSettings::SetVolMuted( TBool aMuted ) { + LEVEL3( LOG_METHOD_AUTO ); if ( AudioRoute() == RadioEngine::ERadioHeadset ) { return SetHeadsetVolMuted( aMuted ); @@ -270,6 +334,7 @@ // TBool CRadioEngineSettings::IsVolMuted() const { + LEVEL3( LOG_METHOD_AUTO ); if ( AudioRoute() == RadioEngine::ERadioHeadset ) { return IsHeadsetVolMuted(); @@ -287,7 +352,8 @@ // TInt CRadioEngineSettings::SetPowerOn( TBool aPowerState ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRVisualRadioPowerState, aPowerState ); + LEVEL3( LOG_METHOD_AUTO ); + return SetFlagValue( KRadioCRRadioPowerState, EPowerOn, aPowerState ); } // --------------------------------------------------------------------------- @@ -297,7 +363,8 @@ // TBool CRadioEngineSettings::IsPowerOn() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRVisualRadioPowerState ); + LEVEL3( LOG_METHOD_AUTO ); + return NormalizeBool( iFlags.IsSet( EPowerOn ) ); } // --------------------------------------------------------------------------- @@ -307,8 +374,13 @@ // TInt CRadioEngineSettings::SetTunedFrequency( TUint32 aFrequency ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, - KRadioCRTunedFrequency, static_cast( aFrequency ) ); + LEVEL3( LOG_METHOD_AUTO ); + TInt err = iRepository->Set( KRadioCRTunedFrequency, static_cast( aFrequency ) ); + if ( !err ) + { + iFrequency = aFrequency; + } + return err; } // --------------------------------------------------------------------------- @@ -318,7 +390,8 @@ // TUint32 CRadioEngineSettings::TunedFrequency() const { - return static_cast( iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRTunedFrequency ) ); + LEVEL3( LOG_METHOD_AUTO ); + return iFrequency; } // --------------------------------------------------------------------------- @@ -328,7 +401,8 @@ // TInt CRadioEngineSettings::DefaultMinVolumeLevel() const { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRDefaultMinVolumeLevel ); + LEVEL3( LOG_METHOD_AUTO ); + return iDefaultMinVolume; } // --------------------------------------------------------------------------- @@ -338,6 +412,7 @@ // TInt CRadioEngineSettings::CountRegions() const { + LEVEL3( LOG_METHOD_AUTO ); return iRegions.Count(); } @@ -348,6 +423,7 @@ // CRadioRegion& CRadioEngineSettings::Region( TInt aIndex ) const { + LEVEL3( LOG_METHOD_AUTO ); if ( aIndex == KErrNotFound ) { aIndex = RegionIndexForId( DefaultRegion() ); @@ -363,8 +439,8 @@ // TRadioRegion CRadioEngineSettings::RegionId() const { - return static_cast( iRepositoryManager.EntityValueInt( KRadioCRUid, - KRadioCRCurrentRegion ) ); + LEVEL3( LOG_METHOD_AUTO ); + return iRegionId; } // --------------------------------------------------------------------------- @@ -374,20 +450,10 @@ // TRadioRegion CRadioEngineSettings::DefaultRegion() const { - TInt region( 0 ); - - TRAPD( err, iRepositoryManager.GetRepositoryValueL( KRadioCRUid, KRadioCRDefaultRegion, region ) ); - - TRadioRegion regionSetting = static_cast( region ); - - if ( err != KErrNone ) - { - regionSetting = ERadioRegionNone; - } - return regionSetting; + LEVEL3( LOG_METHOD_AUTO ); + return iDefaultRegion; } - // --------------------------------------------------------------------------- // From class MRadioEngineSettings. // @@ -395,17 +461,8 @@ // TPtrC CRadioEngineSettings::NetworkId() const { - return TPtrC( iRepositoryManager.EntityValueDes16( KRadioCRUid, KRadioCRNetworkId ) ); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TPtrC CRadioEngineSettings::SubscriberId() const - { - return TPtrC( iRepositoryManager.EntityValueDes16( KRadioCRUid, KRadioCRSubscriberId ) ); + LEVEL3( LOG_METHOD_AUTO ); + return TPtrC( iNetworkId ); } // --------------------------------------------------------------------------- @@ -415,7 +472,8 @@ // TPtrC CRadioEngineSettings::CountryCode() const { - return TPtrC( iRepositoryManager.EntityValueDes16( KRadioCRUid, KRadioCRCountryCode ) ); + LEVEL3( LOG_METHOD_AUTO ); + return TPtrC( iCountryCode ); } // --------------------------------------------------------------------------- @@ -425,12 +483,14 @@ // TInt CRadioEngineSettings::SetRegionId( TInt aRegion ) { + LEVEL3( LOG_METHOD_AUTO ); __ASSERT_ALWAYS( RegionIndexForId( aRegion ) != KErrNotFound, User::Panic( _L( "CRadioEngineSettings" ), KErrArgument ) ); - TInt err = iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRCurrentRegion, aRegion ); + TInt err = iRepository->Set( KRadioCRCurrentRegion, aRegion ); if ( !err ) { + iRegionId = static_cast( aRegion ); UpdateCurrentRegionIdx( aRegion ); err = SetTunedFrequency( Region( iCurrentRegionIdx ).MinFrequency() ); } @@ -442,29 +502,11 @@ // // --------------------------------------------------------------------------- // -TInt CRadioEngineSettings::SetRdsAfSearch( TBool aEnabled ) - { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRRdsAfSearch, aEnabled ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// TInt CRadioEngineSettings::SetNetworkId( const TDesC& aNetworkId ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRNetworkId, aNetworkId ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetSubscriberId( const TDesC& aSubscriberId ) - { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRSubscriberId, aSubscriberId ); + LEVEL3( LOG_METHOD_AUTO ); + iNetworkId.Copy( aNetworkId.Left( iNetworkId.MaxLength() ) ); + return iRepository->Set( KRadioCRNetworkId, iNetworkId ); } // --------------------------------------------------------------------------- @@ -474,7 +516,9 @@ // TInt CRadioEngineSettings::SetCountryCode( const TDesC& aCountryCode ) { - return iRepositoryManager.SetEntityValue( KRadioCRUid, KRadioCRCountryCode, aCountryCode ); + LEVEL3( LOG_METHOD_AUTO ); + iCountryCode.Copy( aCountryCode.Left( iCountryCode.MaxLength() ) ); + return iRepository->Set( KRadioCRCountryCode, iCountryCode ); } // --------------------------------------------------------------------------- @@ -484,6 +528,7 @@ // TUint32 CRadioEngineSettings::FrequencyStepSize() const { + LEVEL3( LOG_METHOD_AUTO ); return Region( iCurrentRegionIdx ).StepSize(); } @@ -494,6 +539,7 @@ // TUint32 CRadioEngineSettings::MaxFrequency() const { + LEVEL3( LOG_METHOD_AUTO ); return Region( iCurrentRegionIdx ).MaxFrequency(); } @@ -504,6 +550,7 @@ // TUint32 CRadioEngineSettings::MinFrequency() const { + LEVEL3( LOG_METHOD_AUTO ); return Region( iCurrentRegionIdx ).MinFrequency(); } @@ -514,17 +561,102 @@ // TInt CRadioEngineSettings::DecimalCount() const { + LEVEL3( LOG_METHOD_AUTO ); return Region( iCurrentRegionIdx ).DecimalCount(); } // --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// +// Initializes the data holders // --------------------------------------------------------------------------- // -TBool CRadioEngineSettings::RdsAfSearchEnabled() const +void CRadioEngineSettings::InitializeDataHolders() { - return iRepositoryManager.EntityValueInt( KRadioCRUid, KRadioCRRdsAfSearch ); + TInt temp = 0; + GetRepositoryValue( KRadioCRHeadsetMuteState, temp, EFalse ); + iFlags.Assign( EHeadsetVolMuted, temp ); + + temp = RadioEngine::ERadioHeadsetDefaultVolume; + GetRepositoryValue( KRadioCRHeadsetVolume, temp, temp ); + iHeadsetVolume = temp; + + temp = 0; + GetRepositoryValue( KRadioCRSpeakerMuteState, temp, EFalse ); + iFlags.Assign( ESpeakerVolMuted, temp ); + + temp = RadioEngine::ERadioSpeakerDefaultVolume; + GetRepositoryValue( KRadioCRSpeakerVolume, temp, temp ); + iSpeakerVolume = temp; + + temp = 0; + GetRepositoryValue( KRadioCRRadioPowerState, temp, EFalse ); + iFlags.Assign( EPowerOn, temp ); + + temp = RadioEngine::ERadioStereo; + if ( GetRepositoryValue( KRadioCROutputMode, temp, temp ) ) + { + iFlags.Assign( EStereoOutput, temp == RadioEngine::ERadioStereo ); + } + + temp = RadioEngine::ERadioHeadset; + if ( GetRepositoryValue( KRadioCRAudioRoute, temp, temp ) ) + { + iFlags.Assign( EHeadsetAudioRoute, temp == RadioEngine::ERadioHeadset ); + } + + temp = RadioEngine::ERadioDefaultMinVolume; + GetRepositoryValue( KRadioCRDefaultMinVolumeLevel, temp, temp ); + iDefaultMinVolume = temp; + + temp = ERadioRegionDefault; + GetRepositoryValue( KRadioCRDefaultRegion, temp, temp ); + iDefaultRegion = static_cast( temp ); + + temp = iDefaultRegion; + GetRepositoryValue( KRadioCRCurrentRegion, temp, temp ); + iRegionId = static_cast( temp ); + UpdateCurrentRegionIdx( iRegionId ); + + temp = MinFrequency(); + GetRepositoryValue( KRadioCRTunedFrequency, temp, temp ); + iFrequency = static_cast( temp ); + } + +// --------------------------------------------------------------------------- +// Gets a repository value and sets the default value if the key is not found +// --------------------------------------------------------------------------- +// +TBool CRadioEngineSettings::GetRepositoryValue( int aKey, TInt& aValue, TInt aDefault ) + { + TInt temp = 0; + TInt err = iRepository->Get( aKey, temp ); + if ( !err ) + { + aValue = temp; + return ETrue; + } + else if ( err == KErrNotFound ) + { + if ( iRepository->Set( aKey, aDefault ) == KErrNone ) + { + aValue = aDefault; + return ETrue; + } + } + return EFalse; + } + +// --------------------------------------------------------------------------- +// Sets a boolean value to cenrep and data holder +// --------------------------------------------------------------------------- +// +TInt CRadioEngineSettings::SetFlagValue( int aKey, int aFlagId, TInt aValue ) + { + TInt err = iRepository->Set( aKey, aValue ); + if ( !err ) + { + iFlags.Assign( aFlagId, aValue ); + } + return err; } // --------------------------------------------------------------------------- @@ -533,18 +665,33 @@ // void CRadioEngineSettings::InitializeRegionsL() { + LEVEL3( LOG_METHOD_AUTO ); iRegions.ResetAndDestroy(); TResourceReader reader; - iCoeEnv.CreateResourceReaderLC( reader, R_QRAD_REGIONS ); + + TFileName resourceFileName; + resourceFileName.Append( KRadioSettingsResourceFile ); + + //User::LeaveIfError( iRadioSettingsImp.FsSession().Connect() ); + iRadioSettingsImp.ResolveDriveL( resourceFileName, KDC_RESOURCE_FILES_DIR ); + BaflUtils::NearestLanguageFile( iRadioSettingsImp.FsSession(), resourceFileName); + + iResFile.OpenL( iRadioSettingsImp.FsSession(), resourceFileName); + + iResFile.ConfirmSignatureL(); + HBufC8* readBuffer = iResFile.AllocReadLC(R_QRAD_REGIONS); + reader.SetBuffer(readBuffer); TInt regionCount = reader.ReadInt16(); for ( TInt i = 0 ; i < regionCount; i++ ) { TInt resId = reader.ReadInt32(); // The next resource ID to read. + HBufC8* regionBuffer = iResFile.AllocReadLC(resId); TResourceReader regionReader; - iCoeEnv.CreateResourceReaderLC( regionReader, resId ); + regionReader.SetBuffer(regionBuffer); + CRadioRegion* region = CRadioRegion::NewL( regionReader ); CleanupStack::PushL( region ); @@ -556,17 +703,16 @@ else{ CleanupStack::PopAndDestroy( region ); } - CleanupStack::PopAndDestroy(); + CleanupStack::PopAndDestroy(regionBuffer); } - CleanupStack::PopAndDestroy(); - if ( CountRegions() <= 0 || !IsRegionAllowed( DefaultRegion() ) ) { User::Leave( KErrCorrupt ); } UpdateCurrentRegionIdx( RegionId() ); + CleanupStack::PopAndDestroy(readBuffer); } // --------------------------------------------------------------------------- @@ -575,6 +721,7 @@ // TInt CRadioEngineSettings::RegionIndexForId( TInt aRegionId ) const { + LEVEL3( LOG_METHOD_AUTO ); TInt idx = KErrNotFound; for ( TInt i = 0 ; i < CountRegions(); ++i ) { @@ -593,76 +740,28 @@ // void CRadioEngineSettings::UpdateCurrentRegionIdx( TInt aRegionId ) { + LEVEL3( LOG_METHOD_AUTO ); iCurrentRegionIdx = RegionIndexForId( aRegionId ); } // --------------------------------------------------------------------------- -// From class MRadioRepositoryEntityObserver. -// --------------------------------------------------------------------------- -// -void CRadioEngineSettings::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, - TInt aValue, - TInt aError ) - { - if ( !aError && aUid == KRadioCRUid && iObserver ) - { - if ( aKey == KRadioCRRdsAfSearch ) - { - iObserver->RdsAfSearchSettingChangedL( aValue ); - } - else if ( aKey == KRadioCRCurrentRegion ) - { - if ( iCurrentRegionIdx != RegionIndexForId( aValue ) ) - { - UpdateCurrentRegionIdx( aValue ); - __ASSERT_ALWAYS( iCurrentRegionIdx != KErrNotFound, - User::Panic( _L( "CRadioEngineSettings" ), KErrArgument ) ); - User::LeaveIfError( SetTunedFrequency( Region( iCurrentRegionIdx ).MinFrequency() ) ); - iObserver->RegionSettingChangedL( aValue ); - } - } - else if ( aKey == KRadioCRRdsAfSearch ) - { - iObserver->RdsAfSearchSettingChangedL( aValue ); - } - else - { - } - } - } - -// --------------------------------------------------------------------------- // Determines if region is allowed . // --------------------------------------------------------------------------- // TBool CRadioEngineSettings::IsRegionAllowed( TRadioRegion aRegionId ) const { - - TInt regionAllowed( EFalse ); - TInt err( KErrNone ); - - switch ( aRegionId ) - { - case ERadioRegionJapan: - TRAP( err, iRepositoryManager.GetRepositoryValueL( KRadioCRUid, KRadioCRRegionAllowedJapan, regionAllowed ) ); - break; + LEVEL3( LOG_METHOD_AUTO ); - case ERadioRegionAmerica: - TRAP( err, iRepositoryManager.GetRepositoryValueL( KRadioCRUid, KRadioCRRegionAllowedAmerica, regionAllowed ) ); - break; - - case ERadioRegionDefault: - TRAP( err, iRepositoryManager.GetRepositoryValueL( KRadioCRUid, KRadioCRRegionAllowedDefault, regionAllowed ) ); - break; - - default: - break; - } - - if ( err != KErrNone ) + TInt regionAllowed( ETrue ); + if ( ERadioRegionJapan == aRegionId ) { - regionAllowed = EFalse; + TInt err = iRepository->Get( KRadioCRRegionAllowedJapan, regionAllowed ); + if ( err != KErrNone ) + { + // In case the key is not found or otherwise unsuccessfully read, + // Japan region is allowed by default. + regionAllowed = ETrue; + } } return TBool( regionAllowed ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/src/cradioregion.cpp --- a/radioengine/settings/src/cradioregion.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/src/cradioregion.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -20,6 +20,7 @@ // User includes #include "cradioregion.h" +#include "cradioenginelogger.h" // Used to convert kilohertz values to hertz values const TInt KRadioThousand = 1000; @@ -32,6 +33,7 @@ // CRadioRegion::CRadioRegion() { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -40,8 +42,9 @@ // void CRadioRegion::ConstructL( TResourceReader& aRr ) { + LEVEL3( LOG_METHOD_AUTO ); iId = static_cast( aRr.ReadUint16()); - iStepSize = static_cast( aRr.ReadUint16() ) * KRadioThousand; + iStepSize = aRr.ReadUint32() * KRadioThousand; iMinFreq = aRr.ReadUint32() * KRadioThousand; iMaxFreq = aRr.ReadUint32() * KRadioThousand; iDecimalCount = aRr.ReadInt16(); @@ -53,9 +56,6 @@ code.Set( aRr.ReadTPtrC()); User::LeaveIfError( iCountryCodes.Append( code.AllocL())); } - - iName = aRr.ReadHBufC16L(); - iSettingName = aRr.ReadHBufC16L(); } // --------------------------------------------------------------------------- @@ -64,6 +64,7 @@ // CRadioRegion* CRadioRegion::NewL( TResourceReader& aRr ) { + LEVEL3( LOG_METHOD_AUTO ); CRadioRegion* self = new ( ELeave ) CRadioRegion; CleanupStack::PushL( self ); @@ -80,10 +81,9 @@ // CRadioRegion::~CRadioRegion() { + LEVEL3( LOG_METHOD_AUTO ); iCountryCodes.ResetAndDestroy(); iCountryCodes.Close(); - delete iName; - delete iSettingName; } // --------------------------------------------------------- @@ -92,6 +92,7 @@ // EXPORT_C TRadioRegion CRadioRegion::Id() const { + LEVEL3( LOG_METHOD_AUTO ); return iId; } @@ -101,6 +102,7 @@ // EXPORT_C TUint32 CRadioRegion::StepSize() const { + LEVEL3( LOG_METHOD_AUTO ); return iStepSize; } @@ -110,6 +112,7 @@ // EXPORT_C TUint32 CRadioRegion::MinFrequency() const { + LEVEL3( LOG_METHOD_AUTO ); return iMinFreq; } @@ -119,6 +122,7 @@ // EXPORT_C TUint32 CRadioRegion::MaxFrequency() const { + LEVEL3( LOG_METHOD_AUTO ); return iMaxFreq; } @@ -128,6 +132,7 @@ // EXPORT_C TInt CRadioRegion::DecimalCount() const { + LEVEL3( LOG_METHOD_AUTO ); return iDecimalCount; } @@ -137,23 +142,6 @@ // EXPORT_C const RRadioCountryCodeArray& CRadioRegion::CountryCodes() { + LEVEL3( LOG_METHOD_AUTO ); return iCountryCodes; } - -// --------------------------------------------------------- -// Get the name of region -// --------------------------------------------------------- -// -EXPORT_C const TDesC16& CRadioRegion::Name() const - { - return *iName; - } - -// --------------------------------------------------------- -// Get the name of region -// --------------------------------------------------------- -// -EXPORT_C const TDesC16& CRadioRegion::SettingItemName() const - { - return *iSettingName; - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/src/cradiosettings.cpp --- a/radioengine/settings/src/cradiosettings.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/src/cradiosettings.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -18,6 +18,7 @@ // User includes #include "cradiosettings.h" #include "cradiosettingsimp.h" +#include "cradioenginelogger.h" // ======== MEMBER FUNCTIONS ======== @@ -25,15 +26,17 @@ // // --------------------------------------------------------------------------- // -EXPORT_C CRadioSettings* CRadioSettings::NewL( CCoeEnv* aCoeEnv ) -{ - return CRadioSettingsImp::NewL( aCoeEnv ); -} +EXPORT_C CRadioSettings* CRadioSettings::NewL() + { + LEVEL3( LOG_METHOD_AUTO ); + return CRadioSettingsImp::NewL(); + } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // EXPORT_C CRadioSettings::~CRadioSettings() -{ -} + { + LEVEL3( LOG_METHOD_AUTO ); + } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/src/cradiosettingsbase.cpp --- a/radioengine/settings/src/cradiosettingsbase.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/* -* 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: -* -*/ - -// System includes -#include - -// User includes -#include "cradiorepositorymanager.h" -#include "cradiosettingsbase.h" -#include "cradioenginelogger.h" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioSettingsBase::CRadioSettingsBase( CRadioRepositoryManager& aRepositoryManager, - CCoeEnv& aCoeEnv ) - : iCoeEnv( aCoeEnv ) - , iRepositoryManager( aRepositoryManager ) - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioSettingsBase::~CRadioSettingsBase() - { - } - -// --------------------------------------------------------------------------- -// Writes a desciptor array to the repository. -// --------------------------------------------------------------------------- -// -void CRadioSettingsBase::WriteArrayEntityL( const TUid& aUid, TUint32 aKey, const CDesCArray& aArray ) - { - LOG_FORMAT( "CRadioSettingsBase::WriteArrayEntityL( aUid = %d, aKey = %d )", aUid.iUid, aKey ); - - CBufFlat* buf = CBufFlat::NewL( KRadioEntityBuf8Length ); - CleanupStack::PushL( buf ); - RBufWriteStream stream( *buf ); - CleanupClosePushL( stream ); - - TInt count = aArray.MdcaCount(); - stream << TCardinality( count ); - - LOG_FORMAT( " count = %d", count ); - - for ( TInt i = 0; i < count; i++ ) - { - DEBUGVAR( TPtrC ptr( aArray.MdcaPoint( i ) ) ); - LOG_FORMAT( " entry %d: %S", i, &ptr ); - stream << aArray.MdcaPoint( i ); - } - - stream.CommitL(); - - CleanupStack::PopAndDestroy( &stream ); - - TRadioEntityBuf8 entityBuf( buf->Ptr( 0 ).Left( KRadioEntityBuf8Length ) ); - User::LeaveIfError( iRepositoryManager.SetEntityValue( aUid, aKey, entityBuf ) ); - - CleanupStack::PopAndDestroy( buf ); - } - -// --------------------------------------------------------------------------- -// Reads a descriptor array from the repository. -// --------------------------------------------------------------------------- -// -CDesCArray* CRadioSettingsBase::ReadArrayEntityL( const TUid& aUid, TUint32 aKey ) const - { - LOG_FORMAT( "CRadioSettingsBase::ReadArrayEntityL( aUid = %d, aKey = %d )", aUid.iUid, aKey ); - - CBufFlat* buf = CBufFlat::NewL( KRadioEntityBuf8Length ); - CleanupStack::PushL( buf ); - buf->InsertL( 0, iRepositoryManager.EntityValueDes8( aUid, aKey ) ); - RBufReadStream stream( *buf ); - CleanupClosePushL( stream ); - - TCardinality count; - stream >> count; - - LOG_FORMAT( " count = %d", static_cast( count ) ); - - CDesCArray* array = new ( ELeave ) CDesCArrayFlat( Max( static_cast( count ), 1 ) ); - CleanupStack::PushL( array ); - - for ( TInt i = 0; i < count; i++ ) - { - HBufC* curBuf = HBufC::NewLC( stream, KMaxTInt ); - DEBUGVAR( TPtrC ptr( *curBuf ) ); - LOG_FORMAT( " entry %d: %S", i, &ptr ); - array->AppendL( *curBuf ); - CleanupStack::PopAndDestroy( curBuf ); - } - - CleanupStack::Pop( array ); - CleanupStack::PopAndDestroy( 2, buf ); - - return array; - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/src/cradiosettingsimp.cpp --- a/radioengine/settings/src/cradiosettingsimp.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/settings/src/cradiosettingsimp.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -26,16 +26,9 @@ #include "cradiosettingsimp.h" #include "cradioapplicationsettings.h" #include "cradioenginesettings.h" -#include "cradiorepositorymanager.h" -#include "radioengineutils.h" -#include "radioengineutils.h" +//#include "radioengineutils.h" #include "cradioenginelogger.h" -// The name of the radio settings resource file. -_LIT( KRadioSettingsResourceFile, "radioenginesettings.rsc" ); - -// The granularity of the repository manager array. -const TInt KRadioSettingsRepositoryManagerGranularity = 8; // ======== MEMBER FUNCTIONS ======== @@ -43,11 +36,12 @@ // // --------------------------------------------------------------------------- // -CRadioSettingsImp* CRadioSettingsImp::NewL( CCoeEnv* aCoeEnv ) +CRadioSettingsImp* CRadioSettingsImp::NewL() { + LEVEL3( LOG_METHOD_AUTO ); CRadioSettingsImp* self = new (ELeave) CRadioSettingsImp; CleanupStack::PushL( self ); - self->ConstructL( aCoeEnv ); + self->ConstructL(); CleanupStack::Pop( self ); return self; } @@ -56,16 +50,15 @@ // // --------------------------------------------------------------------------- // -void CRadioSettingsImp::ConstructL( CCoeEnv* aCoeEnv ) +void CRadioSettingsImp::ConstructL() { - RadioEngineUtils::InitializeL( aCoeEnv ); - LoadResourcesL(); - - iRepositoryManager = CRadioRepositoryManager::NewL( KRadioSettingsRepositoryManagerGranularity ); + LEVEL3( LOG_METHOD_AUTO ); + iFsSession = new ( ELeave ) RFs; + User::LeaveIfError( iFsSession->Connect() ); // Constructs the implementors of the interfaces. - iApplicationSettings = CRadioApplicationSettings::NewL( *iRepositoryManager, *RadioEngineUtils::Env() ); - iEngineSettings = CRadioEngineSettings::NewL( *iRepositoryManager, *RadioEngineUtils::Env() ); + iApplicationSettings = CRadioApplicationSettings::NewL(); + iEngineSettings = CRadioEngineSettings::NewL( *this ); } // --------------------------------------------------------------------------- @@ -74,6 +67,7 @@ // CRadioSettingsImp::CRadioSettingsImp() { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -82,16 +76,17 @@ // CRadioSettingsImp::~CRadioSettingsImp() { - delete iApplicationSettings; + LEVEL3( LOG_METHOD_AUTO ); delete iEngineSettings; - delete iRepositoryManager; - - if ( iResourceLoader ) + delete iApplicationSettings; + if ( iFsSession ) { - iResourceLoader->Close(); + if ( iFsSession->Handle() ) + { + iFsSession->Close(); + } + delete iFsSession; } - delete iResourceLoader; - RadioEngineUtils::Release(); } // --------------------------------------------------------------------------- @@ -100,6 +95,7 @@ // TBool CRadioSettingsImp::IsRegionAllowed( TRadioRegion aRegionId ) const { + LEVEL3( LOG_METHOD_AUTO ); return iEngineSettings->IsRegionAllowed( aRegionId ); } @@ -109,6 +105,7 @@ // MRadioApplicationSettings& CRadioSettingsImp::ApplicationSettings() const { + LEVEL3( LOG_METHOD_AUTO ); return *iApplicationSettings; } @@ -118,6 +115,7 @@ // MRadioEngineSettings& CRadioSettingsImp::EngineSettings() const { + LEVEL3( LOG_METHOD_AUTO ); return *iEngineSettings; } @@ -127,30 +125,22 @@ // MRadioSettingsSetter& CRadioSettingsImp::RadioSetter() const { + LEVEL3( LOG_METHOD_AUTO ); return *iEngineSettings; } // --------------------------------------------------------------------------- -// Returns the underlying repository. -// --------------------------------------------------------------------------- -// -CRadioRepositoryManager& CRadioSettingsImp::Repository() const - { - return *iRepositoryManager; - } - -// --------------------------------------------------------------------------- // Static version of ResolveDriveL. // --------------------------------------------------------------------------- // void CRadioSettingsImp::ResolveDriveL( TFileName& aFileName, const TDesC& aPath ) { - LOG_FORMAT( "CRadioSettingsImp::ResolveDriveL( aFileName = %S, aPath = %S )", &aFileName, &aPath ); - - RFs& fsSession = RadioEngineUtils::FsSession(); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aFileName = %S, aPath = %S", &aFileName, &aPath ) ); + TFileName fileName; TFileName baseResource; - TFindFile finder( fsSession ); + TFindFile finder( *iFsSession ); TLanguage language( ELangNone ); _LIT( resourceFileExt, ".rsc" ); @@ -175,24 +165,24 @@ err = finder.FindByDir( aFileName, aPath ); } - LOG_FORMAT( "CRadioSettingsImp::ResolveDriveL - err = %d", err ); + LEVEL3( LOG_FORMAT( "err = %d", err ) ); TBool found = EFalse; - if ( !isResourceFile && err == KErrNone ) + if ( !isResourceFile && ( KErrNone == err ) ) { found = ETrue; aFileName.Zero(); aFileName.Append( finder.File() ); } - while ( !found && err == KErrNone && isResourceFile ) + while ( !found && ( KErrNone == err ) && isResourceFile ) { // Found file fileName.Zero(); TParsePtrC foundPath( finder.File() ); fileName.Copy( foundPath.DriveAndPath() ); fileName.Append( aFileName ); - BaflUtils::NearestLanguageFile( fsSession, fileName, language ); - if ( language != ELangNone && BaflUtils::FileExists( fsSession, fileName ) ) + BaflUtils::NearestLanguageFile( *iFsSession, fileName, language ); + if ( language != ELangNone && BaflUtils::FileExists( *iFsSession, fileName ) ) { found = ETrue; aFileName.Zero(); @@ -202,7 +192,7 @@ { if ( language == ELangNone && !baseResource.Compare( KNullDesC ) && - BaflUtils::FileExists( fsSession, fileName ) ) + BaflUtils::FileExists( *iFsSession, fileName ) ) { baseResource.Copy( fileName ); } @@ -215,7 +205,7 @@ if ( !found && baseResource.Compare( KNullDesC ) ) { // If we found *.rsc then better to use that than nothing - if ( BaflUtils::FileExists( fsSession, baseResource ) ) + if ( BaflUtils::FileExists( *iFsSession, baseResource ) ) { found = ETrue; aFileName.Zero(); @@ -225,29 +215,24 @@ if ( !found ) { - LOG_FORMAT( "CRadioSettingsImp::ResolveDriveL - File %S not found ( err = %d )!", &aFileName, err ); - User::Leave( KErrNotFound ); + LEVEL3( LOG_FORMAT( "File %S not found ( err = %d )!", &aFileName, err ) ); + if ( !err ) + { + err = KErrNotFound; + } + User::Leave( err ); } - LOG_FORMAT( "CRadioSettingsImp::ResolveDriveL( aFileName = %S )", &aFileName ); + LEVEL3( LOG_FORMAT( "aFileName = %S", &aFileName ) ); } // --------------------------------------------------------------------------- -// Loads the required resources. +// Returns the file server session // --------------------------------------------------------------------------- // -void CRadioSettingsImp::LoadResourcesL() +RFs& CRadioSettingsImp::FsSession() { - // Allocated in heap only so that the resource loader header doesn't need to be - // included in the header of this class. This is because this will be included - // by a QT component that should not depend on CONE - iResourceLoader = new (ELeave) RConeResourceLoader( *RadioEngineUtils::Env() ); - - TFileName resourceFileName; - resourceFileName.Append( KRadioSettingsResourceFile ); - - ResolveDriveL( resourceFileName, KDC_RESOURCE_FILES_DIR ); - - iResourceLoader->OpenL( resourceFileName ); + LEVEL3( LOG_METHOD_AUTO ); + return *iFsSession; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/stub/bwins/fmradioenginesettings_stubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/stub/bwins/fmradioenginesettings_stubu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,10 @@ +EXPORTS + ?Id@CRadioRegion@@QBE?AW4TRadioRegion@@XZ @ 1 NONAME ; enum TRadioRegion CRadioRegion::Id(void) const + ?NewL@CRadioSettings@@SAPAV1@XZ @ 2 NONAME ; class CRadioSettings * CRadioSettings::NewL(void) + ?StepSize@CRadioRegion@@QBEKXZ @ 3 NONAME ; unsigned long CRadioRegion::StepSize(void) const + ?MaxFrequency@CRadioRegion@@QBEKXZ @ 4 NONAME ; unsigned long CRadioRegion::MaxFrequency(void) const + ?DecimalCount@CRadioRegion@@QBEHXZ @ 5 NONAME ; int CRadioRegion::DecimalCount(void) const + ??1CRadioSettings@@UAE@XZ @ 6 NONAME ; CRadioSettings::~CRadioSettings(void) + ?MinFrequency@CRadioRegion@@QBEKXZ @ 7 NONAME ; unsigned long CRadioRegion::MinFrequency(void) const + ?CountryCodes@CRadioRegion@@QAEABV?$RPointerArray@VHBufC16@@@@XZ @ 8 NONAME ; class RPointerArray const & CRadioRegion::CountryCodes(void) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/stub/eabi/fmradioenginesettings_stubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/stub/eabi/fmradioenginesettings_stubu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,12 @@ +EXPORTS + _ZN12CRadioRegion12CountryCodesEv @ 1 NONAME + _ZN14CRadioSettings4NewLEv @ 2 NONAME + _ZN14CRadioSettingsD0Ev @ 3 NONAME + _ZN14CRadioSettingsD1Ev @ 4 NONAME + _ZN14CRadioSettingsD2Ev @ 5 NONAME + _ZNK12CRadioRegion12DecimalCountEv @ 6 NONAME + _ZNK12CRadioRegion12MaxFrequencyEv @ 7 NONAME + _ZNK12CRadioRegion12MinFrequencyEv @ 8 NONAME + _ZNK12CRadioRegion2IdEv @ 9 NONAME + _ZNK12CRadioRegion8StepSizeEv @ 10 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/stub/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/stub/group/bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,41 @@ +/* +* 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 the License "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: +* +*/ + +#include "../../../group/buildflags.hrh" + +#ifdef COMPILE_IN_WK48_ENV +# include +#else +# include +#endif // COMPILE_IN_WK48_ENV + +PRJ_PLATFORMS +WINSCW ARMV5 + +PRJ_EXPORTS +//../../include/vrinternalpskeys.h internal/vrinternalpskeys.h +//../../include/vrinternalcrkeys.h internal/vrinternalcrkeys.h + +//../../sis/visualradiostub.sis /epoc32/data/z/system/install/visualradio.sis +../../group/backup_registration.xml /epoc32/data/z/private/101ff976/backup_registration.xml + +../../cenrep/2002FF52.txt /epoc32/data/z/private/10202be9/2002FF52.txt +../../cenrep/2002FF52.txt /epoc32/RELEASE/winscw/UDEB/Z/private/10202be9/2002FF52.txt +../../cenrep/2002FF52.txt /epoc32/RELEASE/winscw/UREL/Z/private/10202be9/2002FF52.txt + +PRJ_MMPFILES +radioenginesettings_stub.mmp diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/stub/group/radioenginesettings_stub.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/stub/group/radioenginesettings_stub.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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 the License "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: +* +*/ + + +#include "../../../group/buildflags.hrh" + +#ifdef COMPILE_IN_WK48_ENV +# include +#else +# include +#endif // COMPILE_IN_WK48_ENV + +#include + +#include + +TARGET fmradioenginesettings_stub.dll +TARGETTYPE DLL +UID 0x1000008D 0x01000012 +VERSION 10.0 + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT +PAGED +SMPSAFE +LANG SC + +SOURCEPATH ../../data +START RESOURCE fmradioenginesettings.rss +HEADER +TARGETPATH RESOURCE_FILES_DIR +END // RESOURCE + +USERINCLUDE ../../api +USERINCLUDE ../../inc +USERINCLUDE ../../../utils/api +USERINCLUDE ../../../utils/inc +USERINCLUDE /sf/mw/mmmw/mmserv/radioutility/radio_utility/stub/src +USERINCLUDE /sf/mw/mmmw/mmserv/radioutility/radio_utility/src +USERINCLUDE /sf/mw/mmmw/mmserv/radioutility/inc +USERINCLUDE /sf/mw/mmmw/mmserv/inc +USERINCLUDE /sf/mw/mmmw/inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/internal + +SOURCEPATH ../../src +SOURCE cradioregion.cpp +SOURCE cradiosettings.cpp +SOURCE cradiosettingsimp.cpp +SOURCE cradioenginesettings.cpp +SOURCE cradioapplicationsettings.cpp + +LIBRARY fmradioengineutils_stub.lib +LIBRARY bafl.lib +LIBRARY commonengine.lib +LIBRARY cone.lib +LIBRARY efsrv.lib +LIBRARY estor.lib +LIBRARY euser.lib +LIBRARY flogger.lib +LIBRARY RadioSession_Stub.lib // SRadioStubManager functions +LIBRARY centralrepository.lib +MACRO STUB_CONSTELLATION diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/bwins/SettingsTestModuleu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/bwins/SettingsTestModuleu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,3 @@ +EXPORTS + ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/cenrep/2002FF52.txt Binary file radioengine/settings/tsrc/cenrep/2002FF52.txt has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/cenrep/2002FF52_orig.txt Binary file radioengine/settings/tsrc/cenrep/2002FF52_orig.txt has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/cenrep/radio.confml Binary file radioengine/settings/tsrc/cenrep/radio.confml has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/cenrep/radio_2002FF52.crml Binary file radioengine/settings/tsrc/cenrep/radio_2002FF52.crml has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/conf/2002FF52.txt Binary file radioengine/settings/tsrc/conf/2002FF52.txt has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/conf/SettingsTestModule.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/conf/SettingsTestModule.cfg Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,340 @@ +[Define] +ChannelFrequencyNull 0 +ChannelFrequency0 104000000 +ChannelFrequency1 97500000 +ChannelFrequency2 91300000 +ChannelFrequency3 11300000 +CBelowMinimumFrequency 34500000 +AboveMaximumFrequency 23400000 + +Operator_A_MusicStoreName "Operator_A_MusicStore" +Operator_A_MusicStoreUrl "Operator.A.MusicStore.fi" +NetworkId_0 "Network_Id_1" +CountryCode_0 "12345" + +ERadioHeadset 0 +ERadioSpeaker 1 +ERadioStereo 0 +ERadioMono 1 + +KErrNotFound -1 +KErrGeneral -2 +KErrArgument -6 +KErrDiskFull -26 +KErrBadTestParameter -1000 +KErrEventPending -2000 +KErrCallbackErrorCode -2001 +KErrUnexpectedValue -2002 +KExpectedFrequencyChange -2003 +KErrTimeoutController -2007 +[Enddefine] + +[Test] +title Example +create SettingsTestModule Settings +Settings Example pa ra me ters +delete Settings +[Endtest] + +// Settings API functions' tests + +[Test] +title 1.1 Create Settings +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.2 OOM for creation of Settings +create SettingsTestModule Settings +oomignorefailure ON +loop 106 +oomheapfailnext LOOP_COUNTER +Settings CreateSettingsL Preset +print LOOP_COUNTER +endloop +oomignorefailure OFF +oomheaptonormal +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.2a Read configurable keys +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings ReadConfigurableKeysL +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.3 First time Start performed or not +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings tstResetStartCount +Settings IsFirstTimeStart 1 +Settings SetFirstTimeStartPerformed 1 +Settings IsFirstTimeStart 0 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.4 Set UI Flags +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetUiFlags 123456789 +Settings UiFlags 123456789 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.5 Set Headset Volume +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetHeadsetVolume 5 +Settings HeadsetVolume 5 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.6 Set Speaker Volume +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetSpeakerVolume 6 +Settings SpeakerVolume 6 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.7 Set Volume +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetVolume 7 +Settings Volume 7 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.8 Output Mode +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetOutputMode ERadioStereo +Settings OutputMode ERadioStereo +Settings SetOutputMode ERadioMono +Settings OutputMode ERadioMono +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.9 Audio Route +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetAudioRoute ERadioHeadset +Settings AudioRoute ERadioHeadset +Settings SetAudioRoute ERadioHeadset +Settings AudioRoute ERadioHeadset +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.10 Headset Mute Status +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetHeadsetVolMuted 0 +Settings IsHeadsetVolMuted 0 +Settings SetHeadsetVolMuted 1 +Settings IsHeadsetVolMuted 1 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.11 Speaker Mute Status +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetSpeakerVolMuted 0 +Settings IsSpeakerVolMuted 0 +Settings SetSpeakerVolMuted 1 +Settings IsSpeakerVolMuted 1 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.12 Mute Status +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetVolMuted 0 +Settings IsVolMuted 0 +Settings SetVolMuted 1 +Settings IsVolMuted 1 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.13 Power On Status +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetPowerOn 0 +Settings IsPowerOn 0 +Settings SetPowerOn 1 +Settings IsPowerOn 1 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.14 Tuned Frequency +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetTunedFrequency ChannelFrequency1 +Settings TunedFrequency ChannelFrequency1 +Settings SetTunedFrequency ChannelFrequency3 +Settings TunedFrequency ChannelFrequency3 +Settings SetTunedFrequency BelowMinimumFrequency +Settings SetTunedFrequency AboveMaximumFrequency +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.15 Default Minimum Volume Level +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings DefaultMinVolumeLevel +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.16 Regions' Count +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings CountRegions +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.17 Region +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings Region +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.18 Region's Identification +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetRegionId 2 +Settings RegionId 2 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.19 Frequency Step Size +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings FrequencyStepSize +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.20 Minimum Frequency +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings MinFrequency +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.21 Maximum Frequency +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings MaxFrequency +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.22 Decimal Count +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings DecimalCount +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.23 Default Region +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings DefaultRegion +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.24 Network Id +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetNetworkId NetworkId_0 +Settings NetworkId NetworkId_0 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.25 Country Code +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetCountryCode CountryCode_0 +Settings CountryCode CountryCode_0 +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.26 Is Region Allowed +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings IsRegionAllowed +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.27 Resolve Drive +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings ResolveDriveL +Settings DestroySettingsL +delete Settings +[Endtest] + +[Test] +title 1.28 Change of Region +create SettingsTestModule Settings +Settings CreateSettingsL Preset +Settings SetRegionId 0 +pause 10000 +Settings RegionId 0 +Settings DestroySettingsL +delete Settings +[Endtest] diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/conf/atsconf.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/conf/atsconf.txt Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,34 @@ +;Run \vado\videoplayer\tsrc\testing\tools\genATSdrop.pl from +;the tsrc folder to create ATS3 drop. +[DROP] +NAME Radio - engine - settings +DEVICE Vasco +LONGREBOOT +FLASH W:\output\release_flash_images\vasco\rnd\core\RM-596_2010.22_79.01.2010.22_rnd.core.fpsx +FLASH W:\output\release_flash_images\vasco\rnd\langpack\langpack_01\RM-596_2010.22_01.01_Euro_1_79.01.2010.22_rnd.rofs2.fpsx +FLASH W:\output\release_flash_images\vasco\rnd\customer\custvariant_01_tools\RM-596_2010.22_01.01_tools_79.01.2010.22_rnd.rofs3.fpsx +FLASH W:\output\release_flash_images\vasco\rnd\uda\RM-596_2010.22_79.01.2010.22_rnd.udaerase.fpsx +PKG group\SettingsTestModule.pkg +BOOT +INI init\TestFramework.ini 600 +EMAIL jouni.vallo@nokia.com +RUN +[ENDDROP] + +; +; ats3tools synergyyn vai verkkolevylle ja manuaalisesti kopioida sieltä? +; +; TODO +; oikeuksien haku Tampereen ATS3 +; imagen luonti, imaker vasco_ui default +; Testframework.ini täytyy olla init hakemistossa +; cenrep täytyy HW:sta, .cre tiedosto ja lisätä custom/prerun_custom.xml tiedostoon +; +; STEPIT: +; säädä conf/atsconf.txt asetukset kohdalleen +; komentorivillä tsrc hakemistoon ja aja: +; perl \ats3tools\genATSdrop.pl -f conf\atsconf.txt -u käyttäjä -p salasana +; +; +; +; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/conf/radio.confml Binary file radioengine/settings/tsrc/conf/radio.confml has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/conf/radio_2002FF52.crml Binary file radioengine/settings/tsrc/conf/radio_2002FF52.crml has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/custom/postrun_custom.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/custom/postrun_custom.xml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,32 @@ + + fetch-log + + + + + + + + fetch-log + + + + + + + + fetch-log + + + + + + + + fetch-log + + + + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/custom/prerun_custom.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/custom/prerun_custom.xml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,34 @@ + + makedir + + + + + + makedir + + + + + + makedir + + + + + + makedir + + + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/eabi/SettingsTestModuleu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/eabi/SettingsTestModuleu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,3 @@ +EXPORTS + _Z9LibEntryLR13CTestModuleIf @ 1 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/Bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/Bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,63 @@ +/* +* 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: +* +*/ +#include + + +PRJ_PLATFORMS +// specify the platforms your component needs to be built for here +// defaults to WINS MARM so you can ignore this if you just build these + + DEFAULT + +PRJ_TESTEXPORTS +// NOTE: If using ARS requirements all export operations should be done under this. +// 'abld test export' + +PRJ_EXPORTS +// Specify the source file followed by its destination here +// copy will be used to copy the source file to its destination +// If there's no destination then the source file will be copied +// to the same name in /epoc32/include +// Example: +/* +/agnmodel/inc/AGMCOMON.H +*/ +../rom/settingstestmodule.iby CORE_APP_LAYER_IBY_EXPORT_PATH(settingstestmodule.iby) + +PRJ_TESTMMPFILES + + SettingsTestModule.mmp + +PRJ_MMPFILES + + SettingsTestModule_nrm.mmp + +// Specify the .mmp files required for building the important component +// releasables. +// +// Specify "tidy" if the component you need to build doesn't need to be +// released. Specify "ignore" if the MMP file exists but should be +// ignored. +// Example: +/* +/agnmodel/group/agnmodel.mmp +#if defined(MARM) +/agnmodel/group/agsvexe.mmp +#endif +*/ + +// End of File diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/RestoreOrigCenrep.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/RestoreOrigCenrep.cmd Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,9 @@ +@echo Original environment restoration by settingstestmodule... +del \epoc32\winscw\c\TestFramework\SettingsTestModule.cfg +del \epoc32\wins\c\TestFramework\TestFramework.ini +del \epoc32\winscw\c\TestFramework\TestFramework.ini +copy ..\cenrep\2002FF52.txt \epoc32\data\z\private\10202be9\2002FF52.txt +copy ..\cenrep\2002FF52.txt \epoc32\RELEASE\winscw\UDEB\Z\private\10202be9\2002FF52.txt +copy ..\cenrep\2002FF52.txt \epoc32\RELEASE\winscw\UREL\Z\private\10202be9\2002FF52.txt +del \epoc32\winscw\c\private\10202BE9\persists\2002FF52.cre +@echo Original environment restoration by settingstestmodule... Finished. \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/SettingsTestModule.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/SettingsTestModule.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,84 @@ +/*TYPE TESTCLASS*/ +/* +* 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: MMP file for STIF Test Framework's TestScripter +* testclass test module. +* +*/ + +#include + +TARGET SettingsTestModule.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E3 + +CAPABILITY ALL -TCB +/* Remove comments and replace 0x00000000 with correct vendor id */ +// VENDORID 0x00000000 +/* Remove comments and replace 0x00000000 with correct secure id */ +// SECUREID 0x00000000 + +//TARGETPATH ?target_path +DEFFILE SettingsTestModule.def + +USERINCLUDE ../inc +USERINCLUDE ../../inc +USERINCLUDE ../../api +USERINCLUDE ../../../utils/api +USERINCLUDE ../../../utils/inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/internal + +SOURCEPATH ../src + +SOURCE SettingsTestModule.cpp +SOURCE SettingsTestModuleBlocks.cpp + +//RESOURCE resource_file +//RESOURCE resource_file2 + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib +LIBRARY fmradioenginesettings.lib +LIBRARY fmradioengineutils.lib +LIBRARY centralrepository.lib + +LANG SC +SMPSAFE + +/* +START WINS +?wins_specific_information +END + +START MARM +?marm_specific_information +END +*/ +// Other possible keywords: + +// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes) +/* +START BITMAP ?target +TARGETPATH ?emulated_path_on_target_machine +HEADER +SOURCE ?color_depth ?source_bitmap +END +*/ +// DEFFILE ?filename +// AIF ?filename + +// End of File diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/SettingsTestModule.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/SettingsTestModule.pkg Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,62 @@ +; +; 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: +; +; Installation file for STIF +; + +; Languages +&EN + +; Provide value for uid +#{"STIF"},(0x00000000),1,1,0,TYPE=SA + +; Series60 product id for S60 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Logo +; None + +; Package signature - Optional +; None + +; Start of Package body + +; Condition blocks +; None + +; Options list +; None + +; Install files +"\epoc32\release\armv5\udeb\SettingsTestModule.dll" - "!:\Sys\Bin\SettingsTestModule.dll" +"conf\SettingsTestModule.cfg" - "c:\testframework\SettingsTestModule.cfg" + + +; Embedded SIS +; None + +; End of Package body + +; PKG dependencies +; None + +; PKG capabilities +; None diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/SettingsTestModule_DoxyFile.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/SettingsTestModule_DoxyFile.txt Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,239 @@ +# +# 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: +# +# + +# Doxyfile 1.4.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = SettingsTestModule +PROJECT_NUMBER = +OUTPUT_DIRECTORY = C:\Symbian\Carbide\workspace\SettingsTestModule\ +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = NO +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = C:\Symbian\Carbide\workspace\SettingsTestModule\ +FILE_PATTERNS = *.h \ + *.rh \ + *.hrh +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = NO +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = YES +TOC_EXPAND = YES +DISABLE_INDEX = YES +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = YES +RTF_OUTPUT = Doc +COMPACT_RTF = YES +RTF_HYPERLINKS = YES +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = NONSHARABLE_CLASS +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/SettingsTestModule_nrm.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/SettingsTestModule_nrm.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,84 @@ +/*TYPE TESTCLASS*/ +/* +* 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: MMP file for STIF Test Framework's TestScripter +* testclass test module. +* +*/ + +#include + +TARGET SettingsTestModule.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E3 + +CAPABILITY ALL -TCB +/* Remove comments and replace 0x00000000 with correct vendor id */ +// VENDORID 0x00000000 +/* Remove comments and replace 0x00000000 with correct secure id */ +// SECUREID 0x00000000 + +//TARGETPATH ?target_path +DEFFILE SettingsTestModule.def + +USERINCLUDE ../inc +USERINCLUDE ../../inc +USERINCLUDE ../../api +USERINCLUDE ../../../utils/api +USERINCLUDE ../../../utils/inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/internal + +SOURCEPATH ../src + +SOURCE SettingsTestModule.cpp +SOURCE SettingsTestModuleBlocks.cpp + +//RESOURCE resource_file +//RESOURCE resource_file2 + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib +LIBRARY fmradioenginesettings.lib +LIBRARY fmradioengineutils.lib +LIBRARY centralrepository.lib + +LANG SC +SMPSAFE + +/* +START WINS +?wins_specific_information +END + +START MARM +?marm_specific_information +END +*/ +// Other possible keywords: + +// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes) +/* +START BITMAP ?target +TARGETPATH ?emulated_path_on_target_machine +HEADER +SOURCE ?color_depth ?source_bitmap +END +*/ +// DEFFILE ?filename +// AIF ?filename + +// End of File diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/group/TestEnvInit.cmd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/group/TestEnvInit.cmd Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,12 @@ +@echo Initializing test environment for settingstestmodule... +copy ..\conf\SettingsTestModule.cfg \epoc32\wins\c\TestFramework\SettingsTestModule.cfg +copy ..\conf\SettingsTestModule.cfg \epoc32\winscw\c\TestFramework\SettingsTestModule.cfg +copy ..\conf\SettingsTestModule.cfg \epoc32\data\z\system\data\SettingsTestModule.cfg +copy ..\init\TestFramework.ini \epoc32\wins\c\TestFramework\TestFramework.ini +copy ..\init\TestFramework.ini \epoc32\winscw\c\TestFramework\TestFramework.ini +copy ..\init\TestFramework.ini \epoc32\data\z\system\data\TestFramework.ini +copy ..\conf\2002FF52.txt \epoc32\data\z\private\10202be9\2002FF52.txt +copy ..\conf\2002FF52.txt \epoc32\release\winscw\udeb\z\private\10202be9\2002FF52.txt +copy ..\conf\2002FF52.txt \epoc32\release\winscw\urel\z\private\10202be9\2002FF52.txt +del \epoc32\winscw\c\private\10202be9\persists\2002FF52.cre +@echo Test environment initialization for settingstestmodule... Finished. \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/inc/SettingsTestModule.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/inc/SettingsTestModule.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,286 @@ +/* +* 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: STIF testclass declaration +* +*/ + +#ifndef SettingsTestMODULE_H +#define SettingsTestMODULE_H + +// INCLUDES +#include +#include +#include +#include +//INTERNAL INCLUDES +#include "cradiosettings.h" +#include "mradiosettingsobserver.h" +#include "trace.h" + + +// CONSTANTS +const TInt KErrBadTestParameter= -1000; // Error on configuration file + +const TInt KErrEventPending =-2000; // Timeout and not callback +const TInt KErrCallbackErrorCode = -2001; // Callback return error code +const TInt KErrUnexpectedValue =-2002; // Unexpected value at setting +const TInt KExpectedFrequencyChange = -2003; // Is not finding more than one station +const TInt KErrTimeoutController = -2007; // Unexpected notification + +// MACROS +//#define ?macro ?macro_def +#define TEST_CLASS_VERSION_MAJOR 1 +#define TEST_CLASS_VERSION_MINOR 1 +#define TEST_CLASS_VERSION_BUILD 1 + +// Logging path +_LIT( KSettingsTestModuleLogPath, "\\logs\\testframework\\SettingsTestModule\\" ); +// Log file +_LIT( KSettingsTestModuleLogFile, "SettingsTestModule.txt" ); +_LIT( KSettingsTestModuleLogFileWithTitle, "SettingsTestModule_[%S].txt" ); + +// FUNCTION PROTOTYPES +//?type ?function_name(?arg_list); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; +//class CSettingsTestModule; + +// DATA TYPES +//enum ?declaration +//typedef ?declaration +//extern ?data_type; + +// CLASS DECLARATION + +/** +* CSettingsTestModule test class for STIF Test Framework TestScripter. +* ?other_description_lines +* +* @lib ?library +* @since ?Series60_version +*/ +NONSHARABLE_CLASS(CSettingsTestModule) : public CScriptBase, public MRadioSettingsObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CSettingsTestModule* NewL( CTestModuleIf& aTestModuleIf ); + + /** + * Destructor. + */ + virtual ~CSettingsTestModule(); + + public: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + public: // Functions from base classes + + /** + * From CScriptBase Runs a script line. + * @since ?Series60_version + * @param aItem Script line containing method name and parameters + * @return Symbian OS error code + */ + virtual TInt RunMethodL( CStifItemParser& aItem ); + + // MRadioSettingsObserver + + /** + * From MRadioSettingsObserver. + * Notifies of the change in RDS alternate frequency setting + * + * @param aEnabled ETrue if AF search is enabled, otherwise EFalse + */ + virtual void RdsAfSearchSettingChangedL( TBool aEnabled ); + + /** + * From MRadioSettingsObserver. + * Notifies of the change in region setting when it is changed + * outside of the particular radio settings instance + * + * @param aRegion The new region ID + */ + virtual void RegionSettingChangedL( TInt aRegion ); + + protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + // Test case functions + TInt CreateSettingsL( CStifItemParser& aItem ); + TInt DestroySettingsL( CStifItemParser& aItem ); + + TInt IsRegionAllowed( CStifItemParser& aItem ); + + TInt ResolveDriveL( CStifItemParser& aItem ); + + // Application Settings functions + + TInt SetFirstTimeStartPerformed( CStifItemParser& aItem ); + TInt IsFirstTimeStart( CStifItemParser& aItem ); + + TInt SetUiFlags( CStifItemParser& aItem ); + + TInt UiFlags( CStifItemParser& aItem ); + + // Settings functions + + TInt HeadsetVolume ( CStifItemParser& aItem ); + TInt SpeakerVolume ( CStifItemParser& aItem ); + TInt Volume ( CStifItemParser& aItem ); + TInt OutputMode ( CStifItemParser& aItem ); + TInt AudioRoute ( CStifItemParser& aItem ); + TInt IsHeadsetVolMuted ( CStifItemParser& aItem ); + TInt IsSpeakerVolMuted ( CStifItemParser& aItem ); + TInt IsVolMuted ( CStifItemParser& aItem ); + TInt IsPowerOn ( CStifItemParser& aItem ); + TInt TunedFrequency ( CStifItemParser& aItem ); + TInt DefaultMinVolumeLevel ( CStifItemParser& aItem ); + TInt CountRegions ( CStifItemParser& aItem ); + TInt Region ( CStifItemParser& aItem ); + TInt RegionId ( CStifItemParser& aItem ); + TInt FrequencyStepSize ( CStifItemParser& aItem ); + TInt MaxFrequency ( CStifItemParser& aItem ); + TInt MinFrequency ( CStifItemParser& aItem ); + TInt DecimalCount ( CStifItemParser& aItem ); + TInt DefaultRegion ( CStifItemParser& aItem ); + TInt NetworkId ( CStifItemParser& aItem ); + TInt CountryCode ( CStifItemParser& aItem ); + TInt OperatorMusicStoreURL ( CStifItemParser& aItem ); + TInt OperatorMusicStoreName ( CStifItemParser& aItem ); + + // Setter functions + + TInt SetHeadsetVolume ( CStifItemParser& aItem ); + TInt SetSpeakerVolume ( CStifItemParser& aItem ); + TInt SetVolume ( CStifItemParser& aItem ); + TInt SetOutputMode ( CStifItemParser& aItem ); + TInt SetAudioRoute ( CStifItemParser& aItem ); + TInt SetHeadsetVolMuted ( CStifItemParser& aItem ); + TInt SetSpeakerVolMuted ( CStifItemParser& aItem ); + TInt SetVolMuted ( CStifItemParser& aItem ); + TInt SetPowerOn ( CStifItemParser& aItem ); + TInt SetTunedFrequency ( CStifItemParser& aItem ); + TInt SetRegionId ( CStifItemParser& aItem ); + TInt SetNetworkId ( CStifItemParser& aItem ); + TInt SetCountryCode ( CStifItemParser& aItem ); + TInt SetOperatorMusicStoreURL ( CStifItemParser& aItem ); + TInt SetOperatorMusicStoreName ( CStifItemParser& aItem ); + + // Tst functions + TInt ReadConfigurableKeysL ( CStifItemParser& aItem ); + TInt tstSetRegionIdL ( CStifItemParser& aItem ); + TInt tstIsRegionSettingChangeNotified ( CStifItemParser& aItem ); + TInt tstResetStartCount ( CStifItemParser& aItem ); + + protected: // Functions from base classes + + /** + * From ?base_class ?member_description + */ + //?type ?member_function(); + + private: + + /** + * C++ default constructor. + */ + CSettingsTestModule( CTestModuleIf& aTestModuleIf ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor if not deriving from CBase. + // ?classname( const ?classname& ); + // Prohibit assigment operator if not deriving from CBase. + // ?classname& operator=( const ?classname& ); + + /** + * Frees all resources allocated from test methods. + * @since ?Series60_version + */ + void Delete(); + + /** + * Test methods are listed below. + */ + + /** + * Example test method. + * @since ?Series60_version + * @param aItem Script line containing parameters. + * @return Symbian OS error code. + */ + virtual TInt ExampleL( CStifItemParser& aItem ); + + /** + * Method used to log version of test class + */ + void SendTestClassVersion(); + + //ADD NEW METHOD DEC HERE + //[TestMethods] - Do not remove + + public: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + protected: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + private: // Data + + // ?one_line_short_description_of_data + //?data_declaration; + + // Reserved pointer for future extension + //TAny* iReserved; + + /** Radio Settings */ + CRadioSettings* iSettings; + + TBool iRegionSettingChangeNotified; + + + public: // Friend classes + //?friend_class_declaration; + protected: // Friend classes + //?friend_class_declaration; + private: // Friend classes + //?friend_class_declaration; + + }; + +#endif // SettingsTestMODULE_H + +// End of File diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/inc/trace.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/inc/trace.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,596 @@ +/* +* 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 the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Trace macro definitions. +* +*/ + +#ifndef TRACE_H +#define TRACE_H + +#include // TCleanupItem +#include "traceconfiguration.hrh" + +#ifdef TRACE_INTO_FILE +#include // RFileLogger +#else +#include // RDebug +#endif + +//----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- +// + +// NOTE! +// Replace all COMPONENT_NAME occurnaces with your own component / module name. + +/** +* Prefix trace macro to complete tracing with component name. +* Returns TDesC which can be used directly with RDebug or RFileLogger. +*/ +#define _PREFIX_TRACE( aMsg ) TPtrC( (const TText*)L"[Settings]: " L##aMsg ) + +/** +* Prefix error trace +*/ +#define _PREFIX_ERROR( aMsg ) _PREFIX_TRACE( "[ERROR: %d]: " L##aMsg ) + +/** +* Prefix info trace. +*/ +#define _PREFIX_INFO( aMsg ) _PREFIX_TRACE( "[INFO]: " L##aMsg ) + +/** +* Prefix macro for strings +*/ +#define _PREFIX_CHAR( aMsg ) (const char*)"[Settings]: " ##aMsg + +/** +* Define needed directories if TRACE_INTO_FILE macro in use +*/ +#ifdef TRACE_INTO_FILE + + _LIT( KDir, "settings" ); + _LIT( KFile, "settings.txt" ); + _LIT( KFullPath, "c:\\logs\\settings\\" ); + +#endif + +//----------------------------------------------------------------------------- +// Error trace macros +//----------------------------------------------------------------------------- +// +#ifdef ERROR_TRACE + + /** + * Error trace definitions. + */ + #ifdef TRACE_INTO_FILE + + #define ERROR( aErr, aMsg )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr );\ + }\ + } + #define ERROR_1( aErr, aMsg, aP1 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1 );\ + }\ + } + #define ERROR_2( aErr, aMsg, aP1, aP2 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2 );\ + }\ + } + #define ERROR_3( aErr, aMsg, aP1, aP2, aP3 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3 );\ + }\ + } + #define ERROR_4( aErr, aMsg, aP1, aP2, aP3, aP4 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4 );\ + }\ + } + #define ERROR_5( aErr, aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5 );\ + }\ + } + #define ERROR_6( aErr, aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + if( aErr < KErrNone )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5 );\ + }\ + } + + #else//TRACE_INTO_FILE not defined + + #define ERROR( aErr, aMsg )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr );\ + }\ + } + #define ERROR_1( aErr, aMsg, aP1 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1 );\ + }\ + } + #define ERROR_2( aErr, aMsg, aP1, aP2 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2 );\ + }\ + } + #define ERROR_3( aErr, aMsg, aP1, aP2, aP3 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3 );\ + }\ + } + #define ERROR_4( aErr, aMsg, aP1, aP2, aP3, aP4 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4 );\ + }\ + } + #define ERROR_5( aErr, aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5 );\ + }\ + } + #define ERROR_6( aErr, aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + if( aErr < KErrNone )\ + {\ + RDebug::Print( _PREFIX_ERROR( aMsg ), aErr, aP1, aP2, aP3, aP4, aP5, aP6 );\ + }\ + } + + #endif//TRACE_INTO_FILE + + #define ERROR_GEN( aMsg ) ERROR( KErrGeneral, aMsg ) + #define ERROR_GEN_1( aMsg, aP1 ) ERROR_1( KErrGeneral, aMsg, aP1 ) + #define ERROR_GEN_2( aMsg, aP1, aP2 ) ERROR_2( KErrGeneral, aMsg, aP1, aP2 ) + #define ERROR_GEN_3( aMsg, aP1, aP2, aP3 ) ERROR_3( KErrGeneral, aMsg, aP1, aP3 ) + #define ERROR_GEN_4( aMsg, aP1, aP2, aP3, aP4 ) ERROR_4( KErrGeneral, aMsg, aP1, aP3, aP4 ) + #define ERROR_GEN_5( aMsg, aP1, aP2, aP3, aP4, aP5 ) ERROR_5( KErrGeneral, aMsg, aP1, aP3, aP4, aP5 ) + #define ERROR_GEN_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) ERROR_6( KErrGeneral, aMsg, aP1, aP3, aP4, aP5, aP6 ) + +#else//ERROR_TRACE not defined + + #define ERROR( aErr, aMsg ) + #define ERROR_1( aErr, aMsg, aP1 ) + #define ERROR_2( aErr, aMsg, aP1, aP2 ) + #define ERROR_3( aErr, aMsg, aP1, aP2, aP3 ) + #define ERROR_4( aErr, aMsg, aP1, aP2, aP3, aP4 ) + #define ERROR_5( aErr, aMsg, aP1, aP2, aP3, aP4, aP5 ) + #define ERROR_6( aErr, aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) + + #define ERROR_GEN( aMsg ) + #define ERROR_GEN_1( aMsg, aP1 ) + #define ERROR_GEN_2( aMsg, aP1, aP2 ) + #define ERROR_GEN_3( aMsg, aP1, aP2, aP3 ) + #define ERROR_GEN_4( aMsg, aP1, aP2, aP3, aP4 ) + #define ERROR_GEN_5( aMsg, aP1, aP2, aP3, aP4, aP5 ) + #define ERROR_GEN_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) + +#endif//ERROR_TRACE + +//----------------------------------------------------------------------------- +// TRAP and trace with error macro +//----------------------------------------------------------------------------- +// +#define TRAP_ERROR( aErr, aFunction )\ + {\ + TRAP( aErr, aFunction );\ + TPtrC8 file( ( TText8* )__FILE__ );\ + ERROR_2( aErr, "Trapped leave in '%S' line %d", &file, __LINE__);\ + } + +//----------------------------------------------------------------------------- +// Info trace macros +//----------------------------------------------------------------------------- +// +#ifdef INFO_TRACE + + /** + * Info log message definitions. + */ + #ifdef TRACE_INTO_FILE + + #define INFO( aMsg )\ + {\ + RFileLogger::Write( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ) );\ + } + #define INFO_1( aMsg, aP1 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1 );\ + } + #define INFO_2( aMsg, aP1, aP2 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2 );\ + } + #define INFO_3( aMsg, aP1, aP2, aP3 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3 );\ + } + #define INFO_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4 );\ + } + #define INFO_5( aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5 );\ + } + #define INFO_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5, aP6 );\ + } + + #else//TRACE_INTO_FILE not defined + + #define INFO( aMsg )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ) );\ + } + #define INFO_1( aMsg, aP1 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1 );\ + } + #define INFO_2( aMsg, aP1, aP2 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2 );\ + } + #define INFO_3( aMsg, aP1, aP2, aP3 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3 );\ + } + #define INFO_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4 );\ + } + #define INFO_5( aMsg, aP1, aP2, aP3, aP4, aP5 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5 );\ + } + #define INFO_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 )\ + {\ + RDebug::Print( _PREFIX_INFO( aMsg ), aP1, aP2, aP3, aP4, aP5, aP6 );\ + } + + #endif//TRACE_INTO_FILE + +#else//INFO_TRACE not defined + + #define INFO( aMsg ) + #define INFO_1( aMsg, aP1 ) + #define INFO_2( aMsg, aP1, aP2 ) + #define INFO_3( aMsg, aP1, aP2, aP3 ) + #define INFO_4( aMsg, aP1, aP2, aP3, aP4 ) + #define INFO_5( aMsg, aP1, aP2, aP3, aP4, aP5 ) + #define INFO_6( aMsg, aP1, aP2, aP3, aP4, aP5, aP6 ) + +#endif//INFO_TRACE + +//----------------------------------------------------------------------------- +// Trace current client thread name and process id +//----------------------------------------------------------------------------- +// +#ifdef CLIENT_TRACE + + #define CLIENT_PROCESS\ + {\ + CLIENT_PROCESS_PREFIX( "" );\ + } + + #define CLIENT_PROCESS_PREFIX( aPrefix )\ + {\ + RProcess process;\ + TPtrC name( process.Name() );\ + TSecureId sid( process.SecureId() );\ + TPtrC prefix( _S( aPrefix ) );\ + if( prefix.Length() )\ + {\ + INFO_3( "%S: CLIENT - Name: [%S], Sid: [0x%x]", &prefix, &name, sid.iId );\ + }\ + else\ + {\ + INFO_2( "CLIENT - Name: [%S], Sid: [0x%x]", &name, sid.iId );\ + }\ + process.Close();\ + } + + #define CLIENT_MESSAGE( aMsg )\ + {\ + CLIENT_MESSAGE_PREFIX( "", aMsg );\ + } + + #define CLIENT_MESSAGE_PREFIX( aPrefix, aMsg )\ + {\ + RThread thread;\ + TInt err = aMsg.Client( thread );\ + if( err == KErrNone )\ + {\ + RProcess process;\ + err = thread.Process( process );\ + if( err == KErrNone )\ + {\ + TPtrC threadName( thread.Name() );\ + TUid processUid( process.SecureId() );\ + TPtrC prefix( _S( aPrefix ) );\ + if( prefix.Length() )\ + {\ + INFO_4( "%S: MSG - Name: [%S], Sid: [0x%x], Message ID: [%d]",\ + &prefix,\ + &threadName,\ + processUid,\ + aMsg.Function() );\ + }\ + else\ + {\ + INFO_3( "MSG - Name: [%S], Sid: [0x%x], Message ID: [%d]",\ + &threadName,\ + processUid,\ + aMsg.Function() );\ + }\ + }\ + process.Close();\ + }\ + thread.Close();\ + } + +#else + + #define CLIENT_PROCESS + #define CLIENT_PROCESS_PREFIX( aPrefix ) + #define CLIENT_MESSAGE( aMsg ) + #define CLIENT_MESSAGE_PREFIX( aPrefix, aMsg ) + +#endif + +//----------------------------------------------------------------------------- +// Function trace macros +//----------------------------------------------------------------------------- +// +#ifdef FUNC_TRACE + + /** + * Function logging definitions. + */ + #ifdef TRACE_INTO_FILE + + #define FUNC( aMsg, aP1 )\ + {\ + TPtrC8 trace( _S8( aMsg ) );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, trace, aP1 );\ + }\ + + #else//TRACE_INTO_FILE not defined + + #define FUNC( aMsg, aP1 )\ + {\ + RDebug::Printf( aMsg, aP1 );\ + }\ + + #endif//TRACE_INTO_FILE + + /** + * Function trace helper class. + * + * NOTE: + * LC -methods cannot be trapped. Therefore if LC -method leaves + * END trace is used instead of LEAVE trace. + * If you have an idea how to round this problem please tell. + */ + _LIT8( KFuncNameTerminator, "(" ); + _LIT8( KFuncLeavePatternL, "L" ); + class TFuncLog + { + public: + static void Cleanup( TAny* aPtr ) + { + TFuncLog* self = static_cast< TFuncLog* >( aPtr ); + self->iLeft = ETrue; + FUNC( _PREFIX_CHAR("%S-LEAVE"), &self->iFunc ); // Leave detected + } + inline TFuncLog( const char* aFunc ) : + iFunc( aFunc ? _S8( aFunc ) : _S8("") ), + iLeft( EFalse ), + iCleanupItem( Cleanup, this ), + iCanLeave( EFalse ) + { + TInt pos( iFunc.Find( KFuncNameTerminator ) ); + if( pos != KErrNotFound ) + { + iFunc.Set( iFunc.Left( pos ) ); + iCanLeave = !iFunc.Right( KFuncLeavePatternL().Length() ).Compare( KFuncLeavePatternL ); + if ( iCanLeave ) + { + CleanupStack::PushL( iCleanupItem ); // Ignore warnings + } + } + FUNC( _PREFIX_CHAR("%S-START"), &iFunc ); + } + + inline ~TFuncLog() + { + if ( !iLeft ) + { + if ( iCanLeave ) + { + CleanupStack::Pop( this ); // Pop the cleanup item + } + FUNC( _PREFIX_CHAR("%S-END"), &iFunc ); // Normally finished + } + } + + private: // Data + TPtrC8 iFunc; + TBool iLeft; + TCleanupItem iCleanupItem; + TBool iCanLeave; + }; + #define FUNC_LOG TFuncLog _fl( __PRETTY_FUNCTION__ ); + +#else//FUNC_TRACE not defined + + #define FUNC_LOG + +#endif//FUNC_TRACE + +//----------------------------------------------------------------------------- +// Timestamp trace macros +//----------------------------------------------------------------------------- +// +#ifdef TIMESTAMP_TRACE + + #ifdef TRACE_INTO_FILE + + #define TIMESTAMP( aCaption )\ + {\ + TTime t;\ + t.HomeTime();\ + TDateTime dt = t.DateTime();\ + _LIT( KCaption, aCaption );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend,\ + _PREFIX_TRACE("[TIMESTAMP] %S %d:%02d:%02d.%d us"),\ + &KCaption, dt.Hour(), dt.Minute(), dt.Second(), dt.MicroSecond() );\ + } + + #else//TRACE_INTO_FILE not defined + + #define TIMESTAMP( aCaption )\ + {\ + TTime t;\ + t.HomeTime();\ + TDateTime dt = t.DateTime();\ + _LIT( KCaption, aCaption );\ + RDebug::Print( _PREFIX_TRACE("[TIMESTAMP] %S %d:%02d:%02d.%d us"),\ + &KCaption, dt.Hour(), dt.Minute(), dt.Second(), dt.MicroSecond() );\ + } + + #endif//TRACE_INTO_FILE + +#else//TIMESTAMP_TRACE not defined + + #define TIMESTAMP( aCaption ) + +#endif//TIMESTAMP_TRACE + +#ifdef HEAP_TRACE + + #ifdef TRACE_INTO_FILE + + #define HEAP( aMsg )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace );\ + } + #define HEAP_1( aMsg, aP1 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1 );\ + } + #define HEAP_2( aMsg, aP1, aP2 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2 );\ + } + #define HEAP_3( aMsg, aP1, aP2, aP3 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3 );\ + } + #define HEAP_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RFileLogger::WriteFormat( KDir, KFile, EFileLoggingModeAppend, _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3, aP4 );\ + } + + #else//TRACE_INTO_FILE not defined + + #define HEAP( aMsg )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace );\ + } + #define HEAP_1( aMsg, aP1 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1 );\ + } + #define HEAP_2( aMsg, aP1, aP2 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2 );\ + } + #define HEAP_3( aMsg, aP1, aP2, aP3 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3 );\ + } + #define HEAP_4( aMsg, aP1, aP2, aP3, aP4 )\ + {\ + TInt totalAllocSpace = 0;\ + User::AllocSize( totalAllocSpace );\ + RDebug::Print( _PREFIX_HEAP( aMsg ), totalAllocSpace, aP1, aP2, aP3, aP4 );\ + } + + #endif//TRACE_INTO_FILE + +#else//HEAP_TRACE not defined + + #define HEAP( aMsg ) + #define HEAP_1( aMsg, aP1 ) + #define HEAP_2( aMsg, aP1, aP2 ) + #define HEAP_3( aMsg, aP1, aP2, aP3 ) + #define HEAP_4( aMsg, aP1, aP2, aP3, aP4 ) + +#endif//HEAP_TRACE + +#endif + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/inc/traceconfiguration.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/inc/traceconfiguration.hrh Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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 The License "Symbian Foundation License V1.0" +* Which Accompanies This Distribution, And Is Available +* At The Url "Http://Www.Symbianfoundation.Org/Legal/Sfl-V10.Html". +* +* Initial Contributors: +* Nokia Corporation - Initial Contribution. +* +* Contributors: +* +* Description: +* Trace Macro Configurations. +* +*/ + +#ifndef TRACECONFIGURATION_HRH +#define TRACECONFIGURATION_HRH + +//----------------------------------------------------------------------------- +// Trace definitions +//----------------------------------------------------------------------------- +// + +/** +* Error trace enabled +*/ +#ifdef _DEBUG + #define ERROR_TRACE +#else + #undef ERROR_TRACE +#endif + +/** +* Info trace enabled +*/ +#ifdef _DEBUG + #define INFO_TRACE +#else + #undef INFO_TRACE +#endif + +/** +* Timestamp tracing on +*/ +#ifdef _DEBUG + #define TIMESTAMP_TRACE +#else + #undef TIMESTAMP_TRACE +#endif + +/** +* Tracing current client process and thread +*/ +#ifdef _DEBUG + #define CLIENT_TRACE +#else + #undef CLIENT_TRACE +#endif + +/** +* Function trace enabled +*/ +#ifdef _DEBUG + #define FUNC_TRACE +#else + #undef FUNC_TRACE +#endif + +/** +* Tracing into file enabled, default RDebug +*/ +#undef TRACE_INTO_FILE + +#endif + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/init/TestFramework.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/init/TestFramework.ini Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,197 @@ +# +# 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. +# +# +# This is STIFTestFramework initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. +# - Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation +# DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02 +# + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= c:\LOGS\TestFramework\ +TestReportFileName= TestReport + +TestReportFormat= TXT # Possible values: TXT or HTML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting + +DisableMeasurement= stifmeasurementdisablenone # Possible values are: + # 'stifmeasurementdisablenone', 'stifmeasurementdisableall' + # 'stifmeasurementplugin01', 'stifmeasurementplugin02', + # 'stifmeasurementplugin03', 'stifmeasurementplugin04', + # 'stifmeasurementplugin05' or 'stifbappeaprofiler' + +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= XXXXXXXXX +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module +[New_Module] +ModuleName= TestScripter +TestCaseFile= c:\testframework\SettingsTestModule.cfg +[End_Module] + +# Load testmoduleXXX, optionally with initialization file and/or test case files +#[New_Module] +#ModuleName= testmodulexxx + +#TestModuleXXX used initialization file +#IniFile= c:\testframework\init.txt + +#TestModuleXXX used configuration file(s) +#TestCaseFile= c:\testframework\testcases1.cfg +#TestCaseFile= c:\testframework\testcases2.cfg +#TestCaseFile= c:\testframework\manualtestcases.cfg + +#[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIFTestFramework logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\LOGS\Module\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' +#NOTE: TestEngine and TestServer logging settings cannot change here + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/rom/settingstestmodule.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/rom/settingstestmodule.iby Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,13 @@ + +#ifndef __SETTINGSTESTMODULE_IBY__ +#define __SETTINGSTESTMODULE_IBY__ + +// Use standard macros +#include + + +file=ABI_DIR\BUILD_DIR\settingstestmodule.dll SHARED_LIB_DIR\settingstestmodule.dll PAGED + +#endif + + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/src/SettingsTestModule.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/src/SettingsTestModule.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,207 @@ +/* +* 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: This file contains testclass implementation. +* +*/ + +// INCLUDE FILES +#include +#include +#include "SettingsTestModule.h" +#include "trace.h" + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSettingTestModule::CPresetUtilityTestModule +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSettingsTestModule::CSettingsTestModule( + CTestModuleIf& aTestModuleIf ): + CScriptBase( aTestModuleIf ) + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSettingsTestModule::ConstructL() + { + FUNC_LOG; + + //Read logger settings to check whether test case name is to be + //appended to log file name. + RSettingServer settingServer; + TInt ret = settingServer.Connect(); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Struct to StifLogger settigs. + TLoggerSettings loggerSettings; + // Parse StifLogger defaults from STIF initialization file. + ret = settingServer.GetLoggerSettings(loggerSettings); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Close Setting server session + settingServer.Close(); + + TFileName logFileName; + + if(loggerSettings.iAddTestCaseTitle) + { + TName title; + TestModuleIf().GetTestCaseTitleL(title); + logFileName.Format(KSettingsTestModuleLogFileWithTitle, &title); + } + else + { + logFileName.Copy(KSettingsTestModuleLogFile); + } + + iLog = CStifLogger::NewL( KSettingsTestModuleLogPath, + logFileName, + CStifLogger::ETxt, + CStifLogger::EFile, + EFalse ); + + SendTestClassVersion(); + } + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSettingsTestModule* CSettingsTestModule::NewL( + CTestModuleIf& aTestModuleIf ) + { + FUNC_LOG; + CSettingsTestModule* self = new (ELeave) CSettingsTestModule( aTestModuleIf ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +// Destructor +CSettingsTestModule::~CSettingsTestModule() + { + FUNC_LOG; + + // Delete resources allocated from test methods + Delete(); + + // Delete logger + delete iLog; + + } + +//----------------------------------------------------------------------------- +// CSettingsTestModule::SendTestClassVersion +// Method used to send version of test class +//----------------------------------------------------------------------------- +// +void CSettingsTestModule::SendTestClassVersion() + { + FUNC_LOG; + TVersion moduleVersion; + moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR; + moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR; + moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD; + + TFileName moduleName; + moduleName = _L("SettingsTestModule.dll"); + + TBool newVersionOfMethod = ETrue; + TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point. +// Returns: CScriptBase: New CScriptBase derived object +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* LibEntryL( + CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework + { + FUNC_LOG; + + return ( CScriptBase* ) CSettingsTestModule::NewL( aTestModuleIf ); + + } + + +// End of File diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/settings/tsrc/src/SettingsTestModuleBlocks.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/settings/tsrc/src/SettingsTestModuleBlocks.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,1203 @@ +/* +* 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: This file contains testclass implementation. +* +*/ + +// [INCLUDE FILES] - do not remove +#include +#include +#include +#include +#include +#include + +#include "SettingsTestModule.h" +#include "cradiosettings.h" +#include "cradiosettingsimp.h" +#include "mradiosettingssetter.h" +#include "mradioapplicationsettings.h" +#include "mradioenginesettings.h" +#include "radiointernalcrkeys.h" +#include "radioengineutils.h" + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; +//_LIT( KStifScriptEmptyString, "EMPTYSTRING" ); +//_LIT( KEmptyString, "" ); + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPresetUtilityTestModule::Delete +// Delete here all resources allocated and opened from test methods. +// Called from destructor. +// ----------------------------------------------------------------------------- +// +void CSettingsTestModule::Delete() + { + FUNC_LOG; + + } + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::RunMethodL +// Run specified method. Contains also table of test mothods and their names. +// ----------------------------------------------------------------------------- +// +TInt CSettingsTestModule::RunMethodL( + CStifItemParser& aItem ) + { + FUNC_LOG; + + static TStifFunctionInfo const KFunctions[] = + { + // Copy this line for every implemented function. + // First string is the function name used in TestScripter script file. + // Second is the actual implementation member function. + ENTRY( "Example", CSettingsTestModule::ExampleL ), + // [test cases entries] - Do not remove + ENTRY( "CreateSettingsL", CSettingsTestModule::CreateSettingsL ), + ENTRY( "DestroySettingsL", CSettingsTestModule::DestroySettingsL ), + ENTRY( "IsRegionAllowed", CSettingsTestModule::IsRegionAllowed ), + ENTRY( "ResolveDriveL", CSettingsTestModule::ResolveDriveL ), + ENTRY( "SetFirstTimeStartPerformed", CSettingsTestModule::SetFirstTimeStartPerformed ), + ENTRY( "IsFirstTimeStart", CSettingsTestModule::IsFirstTimeStart ), + ENTRY( "SetUiFlags", CSettingsTestModule::SetUiFlags ), + ENTRY( "UiFlags", CSettingsTestModule::UiFlags ), + ENTRY( "HeadsetVolume", CSettingsTestModule::HeadsetVolume ), + ENTRY( "SpeakerVolume", CSettingsTestModule::SpeakerVolume ), + ENTRY( "Volume", CSettingsTestModule::Volume ), + ENTRY( "OutputMode", CSettingsTestModule::OutputMode ), + ENTRY( "AudioRoute", CSettingsTestModule::AudioRoute ), + ENTRY( "IsHeadsetVolMuted", CSettingsTestModule::IsHeadsetVolMuted ), + ENTRY( "IsSpeakerVolMuted", CSettingsTestModule::IsSpeakerVolMuted ), + ENTRY( "IsVolMuted", CSettingsTestModule::IsVolMuted ), + ENTRY( "IsPowerOn", CSettingsTestModule::IsPowerOn ), + ENTRY( "TunedFrequency", CSettingsTestModule::TunedFrequency ), + ENTRY( "DefaultMinVolumeLevel", CSettingsTestModule::DefaultMinVolumeLevel ), + ENTRY( "CountRegions", CSettingsTestModule::CountRegions ), + ENTRY( "Region", CSettingsTestModule::Region ), + ENTRY( "RegionId", CSettingsTestModule::RegionId ), + ENTRY( "FrequencyStepSize", CSettingsTestModule::FrequencyStepSize ), + ENTRY( "MaxFrequency", CSettingsTestModule::MaxFrequency ), + ENTRY( "MinFrequency", CSettingsTestModule::MinFrequency ), + ENTRY( "DecimalCount", CSettingsTestModule::DecimalCount ), + ENTRY( "DefaultRegion", CSettingsTestModule::DefaultRegion ), + ENTRY( "NetworkId", CSettingsTestModule::NetworkId ), + ENTRY( "CountryCode", CSettingsTestModule::CountryCode ), + ENTRY( "SetHeadsetVolume", CSettingsTestModule::SetHeadsetVolume ), + ENTRY( "SetSpeakerVolume", CSettingsTestModule::SetSpeakerVolume ), + ENTRY( "SetVolume", CSettingsTestModule::SetVolume ), + ENTRY( "SetOutputMode", CSettingsTestModule::SetOutputMode ), + ENTRY( "SetAudioRoute", CSettingsTestModule::SetAudioRoute ), + ENTRY( "SetHeadsetVolMuted", CSettingsTestModule::SetHeadsetVolMuted ), + ENTRY( "SetSpeakerVolMuted", CSettingsTestModule::SetSpeakerVolMuted ), + ENTRY( "SetVolMuted", CSettingsTestModule::SetVolMuted ), + ENTRY( "SetPowerOn", CSettingsTestModule::SetPowerOn ), + ENTRY( "SetTunedFrequency", CSettingsTestModule::SetTunedFrequency ), + ENTRY( "SetRegionId", CSettingsTestModule::SetRegionId ), + ENTRY( "SetCountryCode", CSettingsTestModule::SetCountryCode ), + ENTRY( "SetNetworkId", CSettingsTestModule::SetNetworkId ), + ENTRY( "tstSetRegionIdL", CSettingsTestModule::tstSetRegionIdL ), + ENTRY( "tstResetStartCount", CSettingsTestModule::tstResetStartCount ), + ENTRY( "ReadConfigurableKeysL", CSettingsTestModule::ReadConfigurableKeysL ) + //ADD NEW ENTRY HERE + + }; + + const TInt count = sizeof( KFunctions ) / + sizeof( TStifFunctionInfo ); + + return RunInternalL( KFunctions, count, aItem ); + + } + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::ExampleL +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CSettingsTestModule::ExampleL( CStifItemParser& aItem ) + { + FUNC_LOG; + + // Print to UI + _LIT( KSettingsTestModule, "SettingsTestModule" ); + _LIT( KExample, "In Example" ); + TestModuleIf().Printf( 0, KSettingsTestModule, KExample ); + // Print to log file + iLog->Log( KExample ); + + TInt i = 0; + TPtrC string; + _LIT( KParam, "Param[%i]: %S" ); + while ( aItem.GetNextString ( string ) == KErrNone ) + { + TestModuleIf().Printf( i, KSettingsTestModule, + KParam, i, &string ); + i++; + } + + return KErrNone; + + } + +//----------------------------------------------------------------------------- +// CPresetUtilityTest::CreateSettingsL +//----------------------------------------------------------------------------- +TInt CSettingsTestModule::CreateSettingsL( + CStifItemParser& /*aItem*/ ) + { + FUNC_LOG; + + TInt err = KErrNone; + if( !iSettings ) + { + RadioEngineUtils::InitializeL(); + TRAPD( err, iSettings = CRadioSettings::NewL() ); + if ( KErrNone == err ) + { + iSettings->RadioSetter().SetObserver( this ); + } + else + { + RadioEngineUtils::Release(); + INFO_1( "CRadioSettings::NewL() failed err = %i", err ) + User::Leave(err ); + } + } + else + { + err = KErrArgument; + } + + return err; + } + + +//----------------------------------------------------------------------------- +// CSettingsTestModule::DestroyiSettingsL +//----------------------------------------------------------------------------- +TInt CSettingsTestModule::DestroySettingsL( + CStifItemParser& /*aItem*/ ) + { + FUNC_LOG; + + delete iSettings; + iSettings = NULL; + RadioEngineUtils::Release(); + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::ResolveDriveL() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::ResolveDriveL( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TFileName resourceFileName; + resourceFileName.Append( KRadioSettingsResourceFile ); + iSettings->ResolveDriveL( resourceFileName, KDC_RESOURCE_FILES_DIR ); + return KErrNone; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::IsRegionAllowed() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::IsRegionAllowed( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TRadioRegion regionId( iSettings->EngineSettings().RegionId() ); + TUint currentAllowedStatus( iSettings->IsRegionAllowed( regionId ) ); + TInt err( KErrNone); + INFO_1( "Failed: currentAllowedStatus=%i", currentAllowedStatus ); + return err; + +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::IsFirstTimeStart() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::IsFirstTimeStart( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone); + TBool expectedFirstTimeStartStatus( EFalse ); + // read parameters + if ( aItem.GetNextInt(expectedFirstTimeStartStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedFirstTimeStartStatus." ); + } + TBool firstTimeStartStatus( iSettings->ApplicationSettings().IsFirstTimeStart() ); + if ( expectedFirstTimeStartStatus != firstTimeStartStatus ) + { + INFO_2( "Failed: firstTimeStartStatus=%i, expectedFirstTimeStartStatus=%i.", firstTimeStartStatus, expectedFirstTimeStartStatus ); + err = KErrUnexpectedValue; + } + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetFirstTimeStart() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetFirstTimeStartPerformed( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TBool firstTimeStartPerformed( EFalse ); + // read parameters + if ( aItem.GetNextInt( firstTimeStartPerformed ) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: firstTimeStartPerformed." ); + } + + iSettings->ApplicationSettings().SetFirstTimeStartPerformed( firstTimeStartPerformed ); + return err; +} + + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetUiFlags() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetUiFlags( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint uiFlags( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(uiFlags) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: uiFlags." ); + } + err = iSettings->ApplicationSettings().SetUiFlags( uiFlags ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::UiFlags() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::UiFlags( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint expectedUiFlags( 0 ); + TUint currentUiFlags( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(expectedUiFlags) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedUiFlags." ); + } + currentUiFlags = iSettings->ApplicationSettings().UiFlags(); + if ( expectedUiFlags != currentUiFlags ) + { + INFO_2( "Failed: currentUiFlags=%i, expectedUiFlags=%i.", currentUiFlags, expectedUiFlags ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::HeadsetVolume() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::HeadsetVolume( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint expectedVolume( 0 ); + TUint currentVolume( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(expectedVolume) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedVolume." ); + } + currentVolume = iSettings->EngineSettings().HeadsetVolume(); + if ( expectedVolume != currentVolume ) + { + INFO_2( "Failed: currentVolume=%i, expectedVolume=%i.", currentVolume, expectedVolume ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetHeadsetVolume() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetHeadsetVolume( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint volume( 0 ); + TInt err( KErrNone ); + // read parameters + if ( aItem.GetNextInt(volume) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: volume." ); + } + err = iSettings->RadioSetter().SetHeadsetVolume( volume ); + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SpeakerVolume() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SpeakerVolume( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint expectedVolume( 0 ); + TUint currentVolume( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(expectedVolume) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedVolume." ); + } + currentVolume = iSettings->EngineSettings().SpeakerVolume(); + if ( expectedVolume != currentVolume ) + { + INFO_2( "Failed: currentVolume=%i, expectedVolume=%i.", currentVolume, expectedVolume ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetSpeakerVolume() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetSpeakerVolume( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint volume( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(volume) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: volume." ); + } + err = iSettings->RadioSetter().SetSpeakerVolume( volume ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::Volume() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::Volume( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint expectedVolume( 0 ); + TUint currentVolume( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(expectedVolume) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedVolume." ); + } + currentVolume = iSettings->EngineSettings().Volume(); + if ( expectedVolume != currentVolume ) + { + INFO_2( "Failed: currentVolume=%i, expectedVolume=%i.", currentVolume, expectedVolume ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetVolume() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetVolume( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint volume( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(volume) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: volume." ); + } + err = iSettings->RadioSetter().SetVolume( volume ); + return err; +} + + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::OutputMode() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::OutputMode( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint expectedMode( 0 ); + TUint currentMode( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(expectedMode) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedMode." ); + } + currentMode = iSettings->EngineSettings().OutputMode(); + if ( expectedMode != currentMode ) + { + INFO_2( "Failed: currentMode=%i, expectedMode=%i.", currentMode, expectedMode ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetOutputMode() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetOutputMode( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint mode( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(mode) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: mode." ); + } + err = iSettings->RadioSetter().SetOutputMode( mode ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::AudioRoute() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::AudioRoute( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint expectedRoute( 0 ); + TUint currentRoute( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(expectedRoute) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedRoute." ); + } + currentRoute = iSettings->EngineSettings().AudioRoute(); + if ( expectedRoute != currentRoute ) + { + INFO_2( "Failed: currentMode=%i, expectedRoute=%i.", currentRoute, expectedRoute ); + err = KErrUnexpectedValue; + } + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetAudioRoute() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetAudioRoute( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint route( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(route) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: route." ); + } + err = iSettings->RadioSetter().SetAudioRoute( route ); + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::IsHeadsetVolMuted() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::IsHeadsetVolMuted( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint expectedMuteStatus( 0 ); + TUint currentMuteStatus( 0 ); + + // read parameters + if ( aItem.GetNextInt(expectedMuteStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedMuteStatus." ); + } + currentMuteStatus = iSettings->EngineSettings().IsHeadsetVolMuted(); + if ( currentMuteStatus != expectedMuteStatus ) + { + INFO_2( "Failed: currentMuteStatus=%i, expectedMuteStatus=%i.", currentMuteStatus, expectedMuteStatus ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetHeadsetVolMuted() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetHeadsetVolMuted( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint muteStatus( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(muteStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: muteStatus." ); + } + err = iSettings->RadioSetter().SetHeadsetVolMuted( muteStatus ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::IsSpeakerVolMuted() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::IsSpeakerVolMuted( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint expectedMuteStatus( 0 ); + TUint currentMuteStatus( 0 ); + + // read parameters + if ( aItem.GetNextInt(expectedMuteStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedMuteStatus." ); + } + currentMuteStatus = iSettings->EngineSettings().IsSpeakerVolMuted(); + if ( currentMuteStatus != expectedMuteStatus ) + { + INFO_2( "Failed: currentMuteStatus=%i, expectedMuteStatus=%i.", currentMuteStatus, expectedMuteStatus ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetSpeakerVolMuted() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetSpeakerVolMuted( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint muteStatus( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(muteStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: muteStatus." ); + } + err = iSettings->RadioSetter().SetSpeakerVolMuted( muteStatus ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::IsVolMuted() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::IsVolMuted( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint expectedMuteStatus( 0 ); + TUint currentMuteStatus( 0 ); + + // read parameters + if ( aItem.GetNextInt(expectedMuteStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedMuteStatus." ); + } + currentMuteStatus = iSettings->EngineSettings().IsVolMuted(); + if ( currentMuteStatus != expectedMuteStatus ) + { + INFO_2( "Failed: currentMuteStatus=%i, expectedMuteStatus=%i.", currentMuteStatus, expectedMuteStatus ); + err = KErrUnexpectedValue; + } + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetVolMuted() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetVolMuted( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint muteStatus( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(muteStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: muteStatus." ); + } + err = iSettings->RadioSetter().SetVolMuted( muteStatus ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::IsPowerOn() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::IsPowerOn( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint expectedPowerStatus( 0 ); + TUint currentPowerStatus( 0 ); + + // read parameters + if ( aItem.GetNextInt(expectedPowerStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedPowerStatus." ); + } + currentPowerStatus = iSettings->EngineSettings().IsPowerOn(); + if ( currentPowerStatus != expectedPowerStatus ) + { + INFO_2( "Failed: currentPowerStatus=%i, expectedPowerStatus=%i.", currentPowerStatus, expectedPowerStatus ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetPowerOn() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetPowerOn( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint powerStatus( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt(powerStatus) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: powerStatus." ); + } + err = iSettings->RadioSetter().SetPowerOn( powerStatus ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::TunedFrequency() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::TunedFrequency( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint expectedTunedFrequency( 0 ); + TUint currentTunedFrequency( 0 ); + + // read parameters + if ( aItem.GetNextInt(expectedTunedFrequency) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedTunedFrequency." ); + } + currentTunedFrequency = iSettings->EngineSettings().TunedFrequency(); + if ( currentTunedFrequency != expectedTunedFrequency ) + { + INFO_2( "Failed: currentTunedFrequency=%i, expectedTunedFrequency=%i.", currentTunedFrequency, expectedTunedFrequency ); + err = KErrUnexpectedValue; + } + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetTunedFrequency() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetTunedFrequency( CStifItemParser& aItem ) +{ + FUNC_LOG; + TUint tunedFrequency( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt( tunedFrequency ) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: tunedFrequency." ); + } + err = iSettings->RadioSetter().SetTunedFrequency( tunedFrequency ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::DefaultMinVolumeLevel() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::DefaultMinVolumeLevel( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint currentDefaultMinVolumeLevel( iSettings->EngineSettings().DefaultMinVolumeLevel() ); + INFO_1( "OK currentDefaultMinVolumeLevel=%i", currentDefaultMinVolumeLevel ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::CountRegions() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::CountRegions( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint currentRegionCount( iSettings->EngineSettings().CountRegions() ); + INFO_1( "OK currentRegionCount=%i", currentRegionCount ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::Region() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::Region( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TInt regionIndex( iSettings->EngineSettings().RegionId() ); + //CRadioRegion& radioRegion( iSettings->EngineSettings().RegionIndexForId( regionIndex ) ); + // 17.5.2010: Region handling has to be reimplemented anyways, so don't make any detailed tets + // Above won't work because called function RegionIndexForId() is private one. + + return err; +} + + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::RegionId() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::RegionId( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt expectedRegionIndex( 0 ); + TInt currentRegionIndex( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt( expectedRegionIndex ) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedRegionIndex." ); + } + currentRegionIndex = iSettings->EngineSettings().RegionId(); + if ( currentRegionIndex != expectedRegionIndex ) + { + INFO_2( "Failed: currentRegionIndex=%i, expectedRegionIndex=%i.", currentRegionIndex, expectedRegionIndex ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetRegionId() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetRegionId( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt regionId( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt( regionId ) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: regionId." ); + } + err = iSettings->RadioSetter().SetRegionId( regionId ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::FrequencyStepSize() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::FrequencyStepSize( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint32 currentFrequencyStepSize( iSettings->EngineSettings().FrequencyStepSize() ); + INFO_1( "OK currentFrequencyStepSize=%i", currentFrequencyStepSize ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::MaxFrequency() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::MaxFrequency( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint32 currentMaxFrequency( iSettings->EngineSettings().MaxFrequency() ); + INFO_1( "OK currentMaxFrequency=%i", currentMaxFrequency ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::MinFrequency() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::MinFrequency( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TUint32 currentMinFrequency( iSettings->EngineSettings().MinFrequency() ); + INFO_1( "OK currentMinFrequency=%i", currentMinFrequency ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::DecimalCount() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::DecimalCount( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TInt currentDecimalCount( iSettings->EngineSettings().DecimalCount() ); + INFO_1( "OK currentDecimalCount=%i", currentDecimalCount ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::DefaultRegion() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::DefaultRegion( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TRadioRegion defaultRegion( iSettings->EngineSettings().DefaultRegion() ); + INFO_1( "OK defaultRegion=%i", defaultRegion ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::NetworkId() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::NetworkId( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TPtrC expectedNetworkId; + if ( aItem.GetNextString(expectedNetworkId) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedNetworkId." ); + } + INFO_1( "expectedNetworkId=%S.", &expectedNetworkId ); + TPtrC actualNetworkId( iSettings->EngineSettings().NetworkId() ); + if ( !actualNetworkId.Compare( expectedNetworkId ) ) + { + INFO_2( "Failed: actualNetworkId=%S, expectedNetworkId=%S.", &actualNetworkId, &expectedNetworkId ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::CountryCode() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::CountryCode( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TPtrC expectedCountryCode; + if ( aItem.GetNextString(expectedCountryCode) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: expectedCountryCode." ); + } + INFO_1( "expectedCountryCode=%S.", &expectedCountryCode ); + TPtrC actualCountryCode( iSettings->EngineSettings().CountryCode() ); + if ( !actualCountryCode.Compare( expectedCountryCode ) ) + { + INFO_2( "Failed: actualCountryCode=%S, expectedCountryCode=%S.", &actualCountryCode, &expectedCountryCode ); + err = KErrUnexpectedValue; + } + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetNetworkId() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetNetworkId( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TPtrC networkId; + aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing ); + if ( aItem.GetNextString(networkId) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: networkId." ); + } + err = iSettings->RadioSetter().SetNetworkId( networkId ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::SetCountryCode() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::SetCountryCode( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TPtrC countryCode; + aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing ); + if ( aItem.GetNextString(countryCode) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: countryCode." ); + } + err = iSettings->RadioSetter().SetCountryCode( countryCode ); + return err; +} + + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::ReadConfigurableKeysL() +// Returns: Errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::ReadConfigurableKeysL( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt err( KErrNone ); + TInt regionAllowed( EFalse ); + CRepository* cr( CRepository::NewL(KRadioCRUid) ); + if ( cr ) + { + cr->Get( KRadioCRRegionAllowedJapan, regionAllowed ); + delete cr; + } + INFO_1( "KRadioCRRegionAllowedJapan status = %i", regionAllowed ); + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::RdsAfSearchSettingChangedL() +// Returns: None. +// ----------------------------------------------------------------------------- +void CSettingsTestModule::RdsAfSearchSettingChangedL( TBool /*aEnabled*/ ) +{ + FUNC_LOG; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::RegionSettingChangedL() +// Returns: None. +// ----------------------------------------------------------------------------- +void CSettingsTestModule::RegionSettingChangedL( TInt /*aRegion*/ ) +{ + FUNC_LOG; + iRegionSettingChangeNotified = ETrue; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::tstSetRegionIdL() +// Returns: errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::tstSetRegionIdL( CStifItemParser& aItem ) +{ + FUNC_LOG; + TInt regionId( 0 ); + TInt err( KErrNone ); + + // read parameters + if ( aItem.GetNextInt( regionId ) ) + { + err = KErrBadTestParameter; + ERROR( err, "Missing Parameter: regionId." ); + } + CRepository* cr( CRepository::NewLC(KRadioCRUid) ); + User::LeaveIfError( cr->Set( KRadioCRCurrentRegion, regionId ) ); + CleanupStack::Pop(cr); + delete cr; + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModule::tstResetStartCount() +// Returns: errors. +// ----------------------------------------------------------------------------- +TInt CSettingsTestModule::tstResetStartCount( CStifItemParser& /*aItem*/ ) +{ + FUNC_LOG; + TInt countResetValue( 0 ); + TInt err( KErrNone ); + + CRepository* cr( CRepository::NewLC(KRadioCRUid) ); + User::LeaveIfError( cr->Set( KRadioCRLaunchCount, countResetValue ) ); + CleanupStack::Pop(cr); + delete cr; + return err; +} + +// ----------------------------------------------------------------------------- +// CSettingsTestModuleModule::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +/* +TInt CSettingsTestModule::?member_function( + CItemParser& aItem ) + { + FUNC_LOG; + + ?code + + } +*/ + +// ========================== OTHER EXPORTED FUNCTIONS ========================= +// None + +// [End of File] - Do not remove diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/cradioenginelogger.h --- a/radioengine/utils/api/cradioenginelogger.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/cradioenginelogger.h Thu Jul 22 16:33:45 2010 +0100 @@ -32,9 +32,45 @@ #define LOGGING_ENABLED #endif +#define LOGGING_LEVEL 1 + +/** + * Logging level macro definitions + * Level 1 - No level macro needed. The trace is shown when logging is on. + * Level 2 - Wrap log line with LEVEL2 macro. Traces of level 1 and 2 are shown. + * Level 3 - Wrap log line with LEVEL3 macro. Traces of level 1, 2 and 3 are shown. + */ +#if LOGGING_LEVEL == 2 +# define LEVEL2( expr ) expr +# define LEVEL3( expr ) +#elif LOGGING_LEVEL == 3 +# define LEVEL2( expr ) expr +# define LEVEL3( expr ) expr +#else +# define LEVEL2( expr ) +# define LEVEL3( expr ) +#endif + #ifdef LOGGING_ENABLED /** + * Debug var macros for all logging levels + */ +#if LOGGING_LEVEL == 2 +# define DEBUGVAR( var ) var +# define DEBUGVAR2( var ) var +# define DEBUGVAR3( var ) +#elif LOGGING_LEVEL == 3 +# define DEBUGVAR( var ) var +# define DEBUGVAR2( var ) var +# define DEBUGVAR3( var ) var +#else +# define DEBUGVAR( var ) var +# define DEBUGVAR2( var ) +# define DEBUGVAR3( var ) +#endif + +/** * Log file path. * If the path points to memory card and the card is not present or is read only, * the log is written to C: drive. @@ -132,8 +168,6 @@ */ #define LOG_ASSERT( expr, stmt ) do { if ( !( expr )) { stmt; } }while( 0 ) -#define DEBUGVAR( var ) var - /** * Writes a formatted string to log. Accepts variable number of parameters * @@ -250,7 +284,6 @@ //#define LOG4( x1, x2, x3, x4 ) do{CRadioEngineLogger::Logger()->AddIndent().Add( x1 ).Add( x2 ).Add( x3 ).Add( x4 ).Commit();}while( 0 ) //#define LOG5( x1, x2, x3, x4, x5 ) do{CRadioEngineLogger::Logger()->AddIndent().Add( x1 ).Add( x2 ).Add( x3 ).Add( x4 ).Add( x5 ).Commit();}while( 0 ) - // =========================================================================== // =========================================================================== // @@ -425,6 +458,8 @@ #define LOG_FORMAT( fmt,args...) #define LOG_ASSERT( expr, stmt ) #define DEBUGVAR( var ) +#define DEBUGVAR2( var ) +#define DEBUGVAR3( var ) #define LOG_CURRENT_TIME() #define LOG_TIME( x ) diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/cradiopubsub.h --- a/radioengine/utils/api/cradiopubsub.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef CRADIOPUBSUB_H -#define CRADIOPUBSUB_H - -#include - -#include "radiointernalpskeys.h" - -class MRadioControlEventObserver; - -/** - * Publish&Subscribe interface of Visual Radio Application. - */ -NONSHARABLE_CLASS( CRadioPubSub ) : public CBase - { -public: - - IMPORT_C static CRadioPubSub* NewL(); - - IMPORT_C virtual ~CRadioPubSub(); - - /** - * Publishes active channel number to P&S. - * - * @param aChannelId The channel ID to publish. - */ - virtual TBool PublishChannel( TInt aChannelId ) const = 0; - - /** - * Publishes active frequency to P&S. - * - * @param aFreq The frequency to publish. - */ - virtual TBool PublishFrequency( TUint32 aFreq ) const = 0; - - /** - * Publishes radio power state to P&S. - * - * @param aPowerOn The radio power state to publish. - */ - virtual TBool PublishPowerState( TBool aPowerOn ) const = 0; - - /** - * Publishes current volume level to P&S. - * - * @param aVol The current volume level to publish. - */ - virtual TBool PublishVolume( TInt aVol ) const = 0; - - /** - * Publishes changed channel number to P&S. - * - * @param aChannelId The channel ID to publish. - */ - virtual TBool PublishChannelDataChanged( TInt aChannelId ) const = 0; - - /** - * Publishes the tuning state to P&S. - * @param aTuningState The tuning state to publish. - */ - virtual TBool PublishTuningState( TRadioPSTuningState aTuningState ) const = 0; - - /** - * Publishes radio mute state to P&S. - * - * @param aMuted The radio mute state to publish. - */ - virtual TBool PublishRadioMuteState( TBool aMuted ) const = 0; - - /** - * Publishes application running state to P&S. - * - * @param aRunningState The application running state. - */ - virtual TBool PublishApplicationRunningState( TRadioPSApplicationRunningState aRunningState ) const = 0; - - /** - * Publishes the headset status to P&S. - * - * @param aHeadsetStatus The headset's status. - */ - virtual TBool PublishHeadsetStatus( TRadioPSHeadsetStatus aHeadsetStatus ) const = 0; - - /** - * Publishes the frequency decimal count to P&S. - * @param aDecimalCount The decimal count. - */ - virtual TBool PublishFrequencyDecimalCount( TRadioPSFrequencyDecimalCount aDecimalCount ) const = 0; - - /** - * Publishes speaker status. Before state is set for first time it is in - * ERadioPSSpeakerUninitialized state. - * - * @param aLoudspeakerStatus Status of the speaker - */ - virtual TBool PublishLoudspeakerStatus( TRadioPSLoudspeakerStatus aLoudspeakerStatus ) const = 0; - - /** - * Publishes Rds Program Service information. - * - * @param aProgramService Rds Program service descriptor - */ - virtual TBool PublishRdsProgramService( const TDesC& aProgramService ) const = 0; - - /** - * Publishes Rds Radio Text information. - * - * @param aRadioText The Radio Text information to be published. - */ - virtual TBool PublishRdsRadioText( const TDesC& aRadioText ) const = 0; - - /** - * Publishes Channel name information. - * - * @param aName The name to be published. - */ - virtual TBool PublishChannelName( const TDesC& aName ) const = 0; - - /** - * Publishes the number of presets in the active preset list. - * - * @param aCount The number of presets. - */ - virtual TBool PublishActivePreseListCount( TInt aCount ) const = 0; - - /** - * Publishes the focus in the active preset list. - * - * @param aIndex The focus in the active preset list. - */ - virtual TBool PublishActivePreseListFocus( TInt aIndex ) const = 0; - - /** - * Publishes the antenna state ( attach/detach ). - * - * @param aState The current antenna state. - */ - virtual TBool PublishAntennaState( TRadioPSRadioAntennaState aState ) const = 0; - - /** - * Sets the UI side control event observer. - * @param aControlEventObserver the observer for control events - */ - virtual void SetControlEventObserver( MRadioControlEventObserver* aControlEventObserver ) = 0; - - }; - -#endif // CRADIOPUBSUB_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/cradiorepositoryentity.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/api/cradiorepositoryentity.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,94 @@ +/* +* 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: +* +*/ + +#ifndef C_RADIOREPOSITORYENTITY_H +#define C_RADIOREPOSITORYENTITY_H + +// User includes +#include "cradiorepositoryentitybase.h" +#include "mradiorepositoryentityobserver.h" +#include "cradioenginelogger.h" + +// Forward declarations +class CRepository; + +/** + * Templated class to listen to a single key within the central repository. + * + * Notifies the observer of changes in the key, and provides caching for the key's value. + */ +template +NONSHARABLE_CLASS( CRadioRepositoryEntity ) : public CRadioRepositoryEntityBase + { + +public: + + IMPORT_C static CRadioRepositoryEntity* NewL( const TUid& aUid, + TUint32 aKey, + MRadioRepositoryEntityObserver& aObserver, + CActive::TPriority aPriority = CActive::EPriorityStandard ); + + IMPORT_C ~CRadioRepositoryEntity(); + + /** + * Sets the value of the entity. + * The value is written into the central repository immediately. + * + * @param aValue The value to set. + * @param aSavingEnabled If ETrue, saving to central repository file is enabled + */ + TInt SetValue( const T& aValue, TBool aSavingEnabled ); + + /** + * Returns a cached reference to the value of the entity. + * + * @return The cached value of the entity. + */ + const T& Value() const; + + /** + * Forcibly updates the key's value from the central repository and caches it. + */ + void UpdateL(); + +// from base class CActive + + void RunL(); + void DoCancel(); + +private: + + CRadioRepositoryEntity( const TUid& aUid, + TUint32 aKey, + MRadioRepositoryEntityObserver& aObserver, + CActive::TPriority aPriority ); + + void ConstructL(); + +protected: + + /** The central repository client. */ + CRepository* iRepository; + + /** The cached value of the key. */ + T iValue; + + }; + +#include "cradiorepositoryentity.inl" + +#endif // C_RADIOREPOSITORYENTITY_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/cradiorepositoryentity.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/api/cradiorepositoryentity.inl Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,143 @@ +/* +* 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: +* +*/ + +// System includes +#include + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +template +EXPORT_C CRadioRepositoryEntity* CRadioRepositoryEntity::NewL( const TUid& aUid, + TUint32 aKey, + MRadioRepositoryEntityObserver& aObserver, + CActive::TPriority aPriority ) + { + LEVEL3( LOG_METHOD_AUTO ); + CRadioRepositoryEntity* self = new ( ELeave ) CRadioRepositoryEntity( aUid, aKey, aObserver, aPriority ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +template +CRadioRepositoryEntity::CRadioRepositoryEntity( const TUid& aUid, + TUint32 aKey, + MRadioRepositoryEntityObserver& aObserver, + CActive::TPriority aPriority ) + : CRadioRepositoryEntityBase( aUid, aKey, aObserver, aPriority ) + { + LEVEL3( LOG_METHOD_AUTO ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +template +void CRadioRepositoryEntity::ConstructL() + { + LEVEL3( LOG_METHOD_AUTO ); + iRepository = CRepository::NewL( iUid ); + + CActiveScheduler::Add( this ); + iRepository->Get( iKey, iValue ); + User::LeaveIfError( iRepository->NotifyRequest( iKey, iStatus ) ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +template +EXPORT_C CRadioRepositoryEntity::~CRadioRepositoryEntity() + { + LEVEL3( LOG_METHOD_AUTO ); + Cancel(); + delete iRepository; + } + +// ----------------------------------------------------------------------------- +// Sets the value of the key. +// ----------------------------------------------------------------------------- +// +template +TInt CRadioRepositoryEntity::SetValue( const T& aValue, TBool aSavingEnabled ) + { + LEVEL3( LOG_METHOD_AUTO ); + iValue = aValue; + if ( aSavingEnabled ) + { + return iRepository->Set( iKey, aValue ); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// Returns the cached copy of the key's value. +// ----------------------------------------------------------------------------- +// +template +const T& CRadioRepositoryEntity::Value() const + { + LEVEL3( LOG_METHOD_AUTO ); + return iValue; + } + +// ----------------------------------------------------------------------------- +// Forcibly updates the cached value from the repository. +// ----------------------------------------------------------------------------- +// +template +void CRadioRepositoryEntity::UpdateL() + { + LEVEL3( LOG_METHOD_AUTO ); + User::LeaveIfError( iRepository->Get( iKey, iValue ) ); + } + +// ----------------------------------------------------------------------------- +// Executed when the key's value is changed. +// ----------------------------------------------------------------------------- +// +template +void CRadioRepositoryEntity::RunL() + { + LEVEL3( LOG_METHOD_AUTO ); + User::LeaveIfError( iRepository->NotifyRequest( iKey, iStatus ) ); + SetActive(); + + TInt err = iRepository->Get( iKey, iValue ); + iObserver.HandleRepositoryValueChangeL( iUid, iKey, iValue, err ); + } + +// ----------------------------------------------------------------------------- +// Cancels all pending notifications. +// ----------------------------------------------------------------------------- +// +template +void CRadioRepositoryEntity::DoCancel() + { + LEVEL3( LOG_METHOD_AUTO ); + iRepository->NotifyCancel( iKey ); + } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/cradiorepositoryentitybase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/api/cradiorepositoryentitybase.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,78 @@ +/* +* 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: +* +*/ + +#ifndef C_RADIOREPOSITORYENTITYBASE_H +#define C_RADIOREPOSITORYENTITYBASE_H + +#include + +class MRadioRepositoryEntityObserver; + +/** + * Base class for a central repository entity. + * + * All instantiable central repository entities must be derived from this class. + * The class is provided so that a heterogenous array of templated objects can be created, and to + * provide common data fields for the said purpose. + */ +class CRadioRepositoryEntityBase : public CActive + { + +public: + + IMPORT_C ~CRadioRepositoryEntityBase(); + + /** + * Returns the UID of the repository the entity is bound to. + * + * @return The UID of the repository the entity is bound to. + */ + const TUid& Uid() const; + + /** + * Returns the key the entity is bound to. + * + * @return The key the entity is bound to. + */ + TUint32 Key() const; + +protected: + + /** + * Constructor. + * + * @param aUid The UID of the repository that this entity will be bound to. + * @param aKey The key within the repository that this entity will be bound to. + * @param aObserver The observer that is notified whenever the value of the key within the repository changes. + * @param aPriority The priority of the active object. + */ + IMPORT_C CRadioRepositoryEntityBase( const TUid& aUid, TUint32 aKey, MRadioRepositoryEntityObserver& aObserver, CActive::TPriority aPriority ); + +protected: + + /** The observer that is notified of changes in the key. */ + MRadioRepositoryEntityObserver& iObserver; + + /** The UID of the repository the entity is bound to. */ + TUid iUid; + + /** The key the entity is bound to.. */ + TUint32 iKey; + + }; + +#endif // C_RADIOREPOSITORYENTITYBASE_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/cradiosystemeventcollector.h --- a/radioengine/utils/api/cradiosystemeventcollector.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/cradiosystemeventcollector.h Thu Jul 22 16:33:45 2010 +0100 @@ -79,13 +79,6 @@ */ virtual TBool IsHeadsetConnectedL() const = 0; - /** - * Returns current Voice UI state. - * - * @return ETrue if Voice UI is active, EFalse otherwise - */ - virtual TBool IsVoiceUiActive() const = 0; - }; #endif // CRADIOSYSTEMEVENTCOLLECTOR_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/mradiocontroleventobserver.h --- a/radioengine/utils/api/mradiocontroleventobserver.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/mradiocontroleventobserver.h Thu Jul 22 16:33:45 2010 +0100 @@ -55,13 +55,6 @@ virtual void SeekL( RadioEngine::TRadioTuneDirection aDirection ) = 0; /** - * Called when "step to frequency up" request occurs. - * - * @param aDirection If ERadioUp steps up, otherwise steps down - */ - virtual void StepToFrequencyL( RadioEngine::TRadioTuneDirection aDirection ) = 0; - - /** * Called when "set frequency" request occurs. * * @param aFreq Frequency to set diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/radioenginedef.h --- a/radioengine/utils/api/radioenginedef.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/radioenginedef.h Thu Jul 22 16:33:45 2010 +0100 @@ -22,6 +22,28 @@ { /** + * Headset volume. + */ + enum TRadioHeadsetVolume + { + ERadioHeadsetDefaultVolume = 4 /**< Headset default volume. */ + }; + + /** + * Speaker volume. + */ + enum TRadioSpeakerVolume + { + ERadioSpeakerDefaultVolume = 4 /**< Speaker default volume. */ + }; + + /** Minimum volume */ + enum TRadioMinVolume + { + ERadioDefaultMinVolume = 1 /**< Default minimum volume. */ + }; + + /** * Output sources. */ enum TRadioAudioRoute diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/radioengineutils.h --- a/radioengine/utils/api/radioengineutils.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/radioengineutils.h Thu Jul 22 16:33:45 2010 +0100 @@ -36,20 +36,13 @@ public: - IMPORT_C static void InitializeL( CCoeEnv* aCoeEnv = NULL ); + IMPORT_C static void InitializeL(); IMPORT_C static void Release(); IMPORT_C static MRadioEngineLogger* Logger(); /** - * Return the cone environment - * - * @return Pointer to CCoeEnv - */ - IMPORT_C static CCoeEnv* Env(); - - /** * Returns the file server session * * @return Reference to file server session diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/radiointernalcrkeys.h --- a/radioengine/utils/api/radiointernalcrkeys.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/radiointernalcrkeys.h Thu Jul 22 16:33:45 2010 +0100 @@ -20,216 +20,67 @@ #include -/** The UID of the category we use. Must be the same as Visual Radio's UID3 ( SID ). */ -const TUid KRadioCRUid = { 0x101FF976 }; - -/** -* The service mode of Visual Radio. -* -* @see TVRCRServiceMode -*/ -const TUint32 KRadioCRServiceMode = 0x00000000; +/** The UID of the category we use. Must be the same as FM Radio's UID3 ( SID ). */ +const TUid KRadioCRUid = { 0x2002FF52 }; -/** -* Possible Visual Radio service modes. -*/ -enum TVRCRServiceMode - { - EVRCRServiceNone, /**< Visual Radio has neither SDS nor visual service enabled. */ - EVRCRServiceSds, /**< Visual Radio has SDS service enabled. */ - }; - -///////////////////////////////////////////////////////////////////////////////////// -// When adding a new key, add it also to CVRRepositoryManager::CheckRepositoryKeysL() -// to make sure that SIS installation updates cenrep keys. -///////////////////////////////////////////////////////////////////////////////////// // APPLICATION SETTINGS /** The base value for application setting keys. */ -const TUint32 KRadioCRApplicationSettingsBase = { 0x00000010 }; - -/** The key associated with the active focus location setting. */ -const TUint32 KRadioCRActiveFocusLocation = { KRadioCRApplicationSettingsBase + 0x00000000 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved1 = { KRadioCRApplicationSettingsBase + 0x00000001 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved2 = { KRadioCRApplicationSettingsBase + 0x00000002 }; +const TUint32 KRadioCRApplicationSettingsBase = { 0x100 }; /** The key associated with the http cache limit setting. */ -const TUint32 KRadioCRUiFlags = { KRadioCRApplicationSettingsBase + 0x00000003 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved3 = { KRadioCRApplicationSettingsBase + 0x00000004 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved4 = { KRadioCRApplicationSettingsBase + 0x00000005 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved5 = { KRadioCRApplicationSettingsBase + 0x00000006 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved6 = { KRadioCRApplicationSettingsBase + 0x00000007 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved7 = { KRadioCRApplicationSettingsBase + 0x0000000B }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved8 = { KRadioCRApplicationSettingsBase + 0x0000000C }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved9 = { KRadioCRApplicationSettingsBase + 0x0000000D }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved10 = { KRadioCRApplicationSettingsBase + 0x0000000E }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved11 = { KRadioCRApplicationSettingsBase + 0x0000000F }; +const TUint32 KRadioCRUiFlags = { KRadioCRApplicationSettingsBase + 0x0 }; /* The key associated with the application launch count setting */ -const TUint32 KRadioCRLaunchCount = { KRadioCRApplicationSettingsBase + 0x00000010 }; - -/* The key associated with the application offline mode usability. */ -const TUint32 KRadioCROfflineModeFunctionality = { KRadioCRApplicationSettingsBase + 0x00000011 }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved12 = { KRadioCRApplicationSettingsBase + 0x00000012 }; - -/* User audio history */ -const TUint32 KRadioCRAudioPlayHistory = { KRadioCRApplicationSettingsBase + 0x00000014 }; - - -/** -* Removed. Do not use. -*/ -enum TVRCRRemoved - { - EVRCRRemoved13, - EVRCRRemoved14 - }; +const TUint32 KRadioCRLaunchCount = { KRadioCRApplicationSettingsBase + 0x1 }; // RADIO SETTINGS /** The base value for radio setting keys. */ -const TUint32 KRadioCRRadioSettingsBase = { 0x00000100 }; +const TUint32 KRadioCRRadioSettingsBase = { 0x200 }; /** The key associated with the headset volume setting. */ -const TUint32 KRadioCRHeadsetVolume = { KRadioCRRadioSettingsBase + 0x00000000 }; +const TUint32 KRadioCRHeadsetVolume = { KRadioCRRadioSettingsBase + 0x0 }; /** The key associated with the speaker volume setting. */ -const TUint32 KRadioCRSpeakerVolume = { KRadioCRRadioSettingsBase + 0x00000001 }; +const TUint32 KRadioCRSpeakerVolume = { KRadioCRRadioSettingsBase + 0x1 }; /** The key associated with the output mode setting. */ -const TUint32 KRadioCROutputMode = { KRadioCRRadioSettingsBase + 0x00000002 }; +const TUint32 KRadioCROutputMode = { KRadioCRRadioSettingsBase + 0x2 }; /** The key associated with the audio route setting. */ -const TUint32 KRadioCRAudioRoute = { KRadioCRRadioSettingsBase + 0x00000003 }; +const TUint32 KRadioCRAudioRoute = { KRadioCRRadioSettingsBase + 0x3 }; /** The key associated with the headset volume mute setting. */ -const TUint32 KRadioCRHeadsetMuteState = { KRadioCRRadioSettingsBase + 0x00000004 }; +const TUint32 KRadioCRHeadsetMuteState = { KRadioCRRadioSettingsBase + 0x4 }; /** The key associated with the speaker volume mute setting. */ -const TUint32 KRadioCRSpeakerMuteState = { KRadioCRRadioSettingsBase + 0x00000005 }; +const TUint32 KRadioCRSpeakerMuteState = { KRadioCRRadioSettingsBase + 0x5 }; /** The key associated with the radio power state. */ -const TUint32 KRadioCRVisualRadioPowerState = { KRadioCRRadioSettingsBase + 0x00000006 }; +const TUint32 KRadioCRRadioPowerState = { KRadioCRRadioSettingsBase + 0x6 }; /** The key associated with the tuned frequency setting. */ -const TUint32 KRadioCRTunedFrequency = { KRadioCRRadioSettingsBase + 0x00000007 }; +const TUint32 KRadioCRTunedFrequency = { KRadioCRRadioSettingsBase + 0x7 }; /** The key associated with the default minimum volume level setting. */ -const TUint32 KRadioCRDefaultMinVolumeLevel = { KRadioCRRadioSettingsBase + 0x00000008 }; +const TUint32 KRadioCRDefaultMinVolumeLevel = { KRadioCRRadioSettingsBase + 0x8 }; /** The key associated with the current region setting. */ -const TUint32 KRadioCRCurrentRegion = { KRadioCRRadioSettingsBase + 0x0000000A }; - -/** Removed. Do not use. */ -const TUint32 KRadioCRRemoved15 = { KRadioCRRadioSettingsBase + 0x0000000B }; - -/** The key associated with the RDS support setting */ -const TUint32 KRadioCRRdsSupport = { KRadioCRRadioSettingsBase + 0x0000000C }; - -/** The key associated with the alternate frequency search setting */ -const TUint32 KRadioCRRdsAfSearch = { KRadioCRRadioSettingsBase + 0x0000000D }; +const TUint32 KRadioCRCurrentRegion = { KRadioCRRadioSettingsBase + 0x9 }; /*** Region Japan allowed. */ -const TUint32 KRadioCRRegionAllowedJapan = { KRadioCRRadioSettingsBase + 0x0000000E }; - -/*** Region America allowed. */ -const TUint32 KRadioCRRegionAllowedAmerica = { KRadioCRRadioSettingsBase + 0x0000000F }; - -/*** Region Other allowed. */ -const TUint32 KRadioCRRegionAllowedDefault = { KRadioCRRadioSettingsBase + 0x00000010 }; +const TUint32 KRadioCRRegionAllowedJapan = { KRadioCRRadioSettingsBase + 0xA }; /*** Default region. */ -const TUint32 KRadioCRDefaultRegion = { KRadioCRRadioSettingsBase + 0x00000011 }; - - -// PRESET SETTINGS - -/** The base value for preset setting keys. */ -const TUint32 KRadioCRPresetSettingsBase = { 0x00001000 }; - -/** The key associated with the maximum preset count setting. */ -const TUint32 KRadioCRPresetCount = { KRadioCRPresetSettingsBase + 0x00000000 }; - -// CORE SETTINGS - -/** The base value for core setting keys. */ -const TUint32 KRadioCRCoreSettingsBase = { 0x00010000 }; - -/** The key associated with the global name server address setting. */ -const TUint32 KRadioCRGlobalNameServer = { KRadioCRCoreSettingsBase + 0x00000000 }; - -/** The key associated with the default global name server address setting. */ -const TUint32 KRadioCRDefaultGlobalNameServer = { KRadioCRCoreSettingsBase + 0x00000001 }; - -/** The key associated with the local name server address setting. */ -const TUint32 KRadioCRLocalNameServer = { KRadioCRCoreSettingsBase + 0x00000002 }; - -/** The key associated with the default local name server address setting. */ -const TUint32 KRadioCRDefaultLocalNameServer = { KRadioCRCoreSettingsBase + 0x00000003 }; - -/** The key associated with the directory server url setting. */ -const TUint32 KRadioCRDirectoryServerUrl = { KRadioCRCoreSettingsBase + 0x00000004 }; - -/** The key associated with the directory server base url setting. */ -const TUint32 KRadioCRDirectoryServerBaseUrl = { KRadioCRCoreSettingsBase + 0x00000005 }; - -/** The key associated with the directory server country code setting. */ -const TUint32 KRadioCRDirectoryServerCountryCode = { KRadioCRCoreSettingsBase + 0x00000006 }; - -/** The key associated with the directory server network id setting. */ -const TUint32 KRadioCRDirectoryServerNetworkId = { KRadioCRCoreSettingsBase + 0x00000007 }; - -/** The key associated with the default directory server url setting. */ -const TUint32 KRadioCRDefaultDirectoryServerUrl = { KRadioCRCoreSettingsBase + 0x00000008 }; - -/** The key associated with the default directory server base url setting. */ -const TUint32 KRadioCRDefaultDirectoryServerBaseUrl = { KRadioCRCoreSettingsBase + 0x00000009 }; - -/** The key associated with the internet access point setting. */ -const TUint32 KRadioCRInternetAccessPoint = { KRadioCRCoreSettingsBase + 0x0000000A }; - -/** The key associated with the default internet access point setting. */ -const TUint32 KRadioCRDefaultInternetAccessPoint = { KRadioCRCoreSettingsBase + 0x0000000B }; - -/** The key associated with application id setting. */ -const TUint32 KRadioCRApplicationId = { KRadioCRCoreSettingsBase + 0x0000000C }; +const TUint32 KRadioCRDefaultRegion = { KRadioCRRadioSettingsBase + 0xB }; /** The key associated with the network id setting. */ -const TUint32 KRadioCRNetworkId = { KRadioCRCoreSettingsBase + 0x0000000D }; - -/** The key associated with the subscriber id setting. */ -const TUint32 KRadioCRSubscriberId = { KRadioCRCoreSettingsBase + 0x0000000E }; - -/** The key associated with the connection destination setting. */ -const TUint32 KRadioCRConnectionDestinationId = { KRadioCRCoreSettingsBase + 0x0000000F }; +const TUint32 KRadioCRNetworkId = { KRadioCRRadioSettingsBase + 0xC }; /** The key associated with the country code setting. */ -const TUint32 KRadioCRCountryCode = { KRadioCRCoreSettingsBase + 0x00000010 }; +const TUint32 KRadioCRCountryCode = { KRadioCRRadioSettingsBase + 0xD }; #endif // RADIOINTERNALCRKEYS_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/radiointernalpskeys.h --- a/radioengine/utils/api/radiointernalpskeys.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,354 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef RADIOINTERNALPSKEYS_H -#define RADIOINTERNALPSKEYS_H - -#include - -#include "radiouid.hrh" - -/**< The UID of the category we use. Must be the same as Visual Radio's UID3 ( SID ). */ -//TODO: Change -const TUid KRadioPSUid = {0x101FF976}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////// -/// /// -/// Data properties. These properties are published by Visual Radio and used by other applications. /// -/// /// -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** -* Currently active channel's ID. -* Value KErrNone means that no preset channel is active. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSDataChannel = 0x00000000; - -/** -* Currently active frequency. -* Frequency unit is in kHz. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSDataFrequency = 0x00000001; - -/** -* Current power state of the radio. -* Type RProperty::EInt. -* @see TRadioRadioPowerState. -*/ -const TUint32 KRadioPSDataRadioPowerState = 0x00000002; - -/** -* Power state of the radio. -*/ -enum TRadioPSRadioPowerState - { - ERadioPSRadioPowerStateUninitialized, /**< The key is not yet initialized. */ - ERadioPSRadioPowerOn, /**< Radio power on. */ - ERadioPSRadioPowerOff /**< Radio power off. */ - }; - -/** -* Current volume level. -* Scale is from 1-10. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSDataVolume = 0x00000003; - -/** -* Changing of this value means that channel -* data of specified channel ID has changed. -* The value remains indicating the last changed channel ID. -* Value KErrNone means that no channel data has been changed yet. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSDataChannelDataChanged = 0x00000004; - -/** - * Removed. Do not use. - */ -const TUint32 KRadioPSDataRemoved = 0x00000005; - -/** -* The current tuning state. -* Type RProperty::EInt. -* @see TRadioPSTuningState. -*/ -const TUint32 KRadioPSDataTuningState = 0x00000006; - -/** -* Possible tuning states. -*/ -enum TRadioPSTuningState - { - ERadioPSTuningUninitialized, /**< Currently not tuning. */ - ERadioPSTuningStarted, /**< Tuning has been started an lasted less than one second. */ - ERadioPSTuningContinues /**< Tuning has taken more than one second. */ - }; - -/** -* Current mute state of radio. -* Type RProperty::EInt. -* @see TRadioPSRadioMuteState. -*/ -const TUint32 KRadioPSDataRadioMuteState = 0x00000007; - -/** -* Mute state of radio. -*/ -enum TRadioPSRadioMuteState - { - ERadioPSMuteStateUninitialized, /**< The key has not yet been initialized. */ - ERadioPSMuteStateOn, /**< Radio mute state is on. */ - ERadioPSMuteStateOff /**< Radio mute state is off. */ - }; - -/** -* Indicates if Visual Radio is running or closing. -* Type RProperty::EInt. -* @see TRadioPSApplicationRunningState. -*/ -const TUint32 KRadioPSDataApplicationRunning = 0x00000008; - -/** -* Visual Radio application running states. -*/ -enum TRadioPSApplicationRunningState - { - ERadioPSApplicationUninitialized, /**< Visual Radio application's state is not yet initialized. */ - ERadioPSApplicationRunning, /**< Visual Radio application is running. */ - ERadioPSApplicationClosing /**< Visual Radio application is closing. */ - }; - -/** -* Indicates the current headset connectivity status. -* Type RProperty::EInt. -* @see TRadioHeadsetStatus -*/ -const TUint32 KRadioPSDataHeadsetStatus = 0x00000009; - -/** -* Current headset status. -*/ -enum TRadioPSHeadsetStatus - { - ERadioPSHeadsetUninitialized, /**< The headset status is uninitialized. */ - ERadioPSHeadsetDisconnected, /**< The headset is disconnected. */ - ERadioPSHeadsetConnected /**< The headset is connected. */ - }; - -/** -* The current frequency decimal count. -* Type RProperty::EInt. -* @see TRadioFrequencyDecimalCount. -*/ -const TUint32 KRadioPSDataFrequencyDecimalCount = 0x00000010; - -/** -* The current frequency decimal count. -*/ -enum TRadioPSFrequencyDecimalCount - { - ERadioPSFrequencyDecimalCountUninitialized, /**< Frequency decimal count has not yet been initialized. */ - ERadioPSFrequencyOneDecimal, /**< Frequency accuracy is one decimal. */ - ERadioPSFrequencyTwoDecimals, /**< Frequency accuracy is two decimals. */ - ERadioPSFrequencyThreeDecimals /**< Frequency accuracy is three decimals. */ - }; - -/** -* Removed. Do not use. -*/ -const TUint32 KRadioPSRemoved1 = 0x00000014; - -/** -* Flag to indicate if loudspeaker is in use -*/ -const TUint32 KRadioPSDataLoudspeakerStatus = 0x00000015; -/** -* Current speaker status. -*/ -enum TRadioPSLoudspeakerStatus - { - ERadioPSLoudspeakerUninitialized, /**< The speaker status is uninitialized. */ - ERadioPSLoudspeakerNotInUse, /**< The speaker is not in use. */ - ERadioPSLoudpeakerInUse /**< The speaker is in use. */ - }; - -/** -* Rds Program Service information, property type is text. -*/ -const TUint32 KRadioPSDataRdsProgramService = 0x00000016; - -/** -* Rds Radio Text information. -* Type RProperty::EText. -*/ -const TUint32 KRadioPSDataRdsRadioText = 0x00000017; - -/** - * Name of the current channel. - * Type RProperty::EText. - */ -const TUint32 KRadioPSDataChannelName = 0x00000018; - -/** -* The amount of presets in active preset list. -* In situations where the amount is undefined, value KErrNotFound -* is used. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSDataActivePresetListCount = 0x00000019; - -/** -* The active focus in active preset list. -* In situations where the amount is undefined, value KErrNotFound -* is used. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSDataActivePresetListFocus = 0x00000020; - -/** - * Current antenna state of the radio. - * Type RProperty::EInt. - * @see TRadioRadioAntennaState. - */ -const TUint32 KRadioPSDataRadioAntennaState = 0x00000021; - -/** -* Power state of the radio. -*/ -enum TRadioPSRadioAntennaState - { - ERadioPSRadioAntennaStateUninitialized, /**< The key is not yet initialized. */ - ERadioPSRadioAntennaAttached, /**< Antenna attached. */ - ERadioPSRadioAntennaDetached /**< Antenna detached. */ - }; - -////////////////////////////////////////////////////////////////////////////////////////////////////////// -/// /// -/// Control properties. These properties are published by other applications and used by Visual Radio. /// -/// /// -////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** -* Steps up or down a channel in channel list. -* Type RProperty::EInt. -* @see TRadioPSStepToChannel. -*/ -const TUint32 KRadioPSControlStepToChannel = 0x00001000; - -/** -* Step direction of channel step. -*/ -enum TRadioPSStepToChannel - { - ERadioPSStepToChannelUninitialized, /**< Value of the key has not yet been initialized. */ - ERadioPSStepToChannelUp, /**< Step to next channel up. */ - ERadioPSStepToChannelDown /**< Step to next channel down. */ - }; - -/** -* Switches to the specified channel ID. -* Visual Radio ignores channel IDs that are out of scope. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSControlSetChannel = 0x00001001; - -/** -* Seeks to next active frequency up or down. -* Type RProperty::EInt. -* @see TRadioPSSeek. -*/ -const TUint32 KRadioPSControlSeek = 0x00001002; - -/** -* Seek direction. -*/ -enum TRadioPSSeek - { - ERadioPSSeekUninitialized, /**< Value of the key has not yet been initialized. */ - ERadioPSSeekUp, /**< Seek up. */ - ERadioPSSeekDown /**< Seek down. */ - }; - -/** -* Steps up or down frequency, using the frequency step that is defined in radio. -* Type RProperty::EInt. -* @see TRadioPSStepToFrequency. -*/ -const TUint32 KRadioPSControlStepToFrequency = 0x00001003; - -/** -* Frequency step direction. -*/ -enum TRadioPSStepToFrequency - { - ERadioPSStepToFrequencyUninitialized, /**< The key has not yet been initialized. */ - ERadioPSStepToFrequencyUp, /**< Step up a frequency. */ - ERadioPSStepToFrequencyDown /**< Step down a frequency. */ - }; - -/** -* Switches to specified frequency. -* Frequency unit is kHz. -* Type RProperty::EInt. -*/ -const TUint32 KRadioPSControlSetFrequency = 0x00001004; - -/** -* Increases or decreases volume level. -* Type RProperty::EInt. -* @see TRadioPSAdjustVolume. -*/ -const TUint32 KRadioPSControlAdjustVolume = 0x00001005; - -/** -* Volume step direction. -*/ -enum TRadioPSAdjustVolume - { - ERadioPSAdjustVolumeUninitialized = 0, /**< The key has not yet been initialized. */ - ERadioPSIncreaseVolume, /**< Increase volume. */ - ERadioPSDecreaseVolume /**< Decrease volume. */ - }; - -/** -* Sets mute state on or off. -* Type RProperty::EInt. -* @see TRadioPSRadioMuteState. -*/ -const TUint32 KRadioPSControlSetRadioMuteState = 0x00001006; - -/** -* Sets the output source -* Type RProperty::EInt. -* @see TRadioPSAudioOutput -*/ -const TUint32 KRadioPSControlSetAudioOutput = 0x00001008; - -/** - * Audio output target. - */ -enum TRadioPSAudioOutput - { - ERadioPSAudioOutputUninitialized = 0, /**< The key has not yet been initialized. */ - ERadioPSAudioOutputHeadset, /**< Headset in use. */ - ERadioPSAudioOutputSpeaker /**< Speaker in use. */ - }; - -#endif // RADIOINTERNALPSKEYS_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/api/radiouid.hrh --- a/radioengine/utils/api/radiouid.hrh Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/api/radiouid.hrh Thu Jul 22 16:33:45 2010 +0100 @@ -19,6 +19,6 @@ #define RADIOUID_HRH //TODO: Get uid. this is from visual radio -#define KUidRadioApplication 0x101FF976 +#define KUidRadioApplication 0x2002FF4E #endif // RADIOUID_HRH diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/bwins/fmradioengineutilsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/bwins/fmradioengineutilsu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,32 @@ +EXPORTS + ?ValueDes8@CRadioPropertyObserver@@QBEABVTDesC8@@XZ @ 1 NONAME ; class TDesC8 const & CRadioPropertyObserver::ValueDes8(void) const + ?SetAudioRouteL@CRadioRoutableAudio@@QAEXW4TRadioAudioRoute@RadioEngine@@@Z @ 2 NONAME ; void CRadioRoutableAudio::SetAudioRouteL(enum RadioEngine::TRadioAudioRoute) + ??0CRadioRoutableAudio@@QAE@PAVCRadioAudioRouter@@@Z @ 3 NONAME ; CRadioRoutableAudio::CRadioRoutableAudio(class CRadioAudioRouter *) + ?InitializeL@RadioEngineUtils@@SAXXZ @ 4 NONAME ; void RadioEngineUtils::InitializeL(void) + ?NewL@CRadioRemConTarget@@SAPAV1@XZ @ 5 NONAME ; class CRadioRemConTarget * CRadioRemConTarget::NewL(void) + ??1CRadioRepositoryEntityBase@@UAE@XZ @ 6 NONAME ; CRadioRepositoryEntityBase::~CRadioRepositoryEntityBase(void) + ??1TRadioMethodLogger@@QAE@XZ @ 7 NONAME ; TRadioMethodLogger::~TRadioMethodLogger(void) + ??1CRadioRoutableAudio@@UAE@XZ @ 8 NONAME ; CRadioRoutableAudio::~CRadioRoutableAudio(void) + ?SetAudioOutput@CRadioRoutableAudio@@IAEXPAVCAudioOutput@@@Z @ 9 NONAME ; void CRadioRoutableAudio::SetAudioOutput(class CAudioOutput *) + ?RegisterRoutableAudio@CRadioAudioRouter@@QAEXPAVCRadioRoutableAudio@@@Z @ 10 NONAME ; void CRadioAudioRouter::RegisterRoutableAudio(class CRadioRoutableAudio *) + ?ReadFrequencyStringLC@RadioEngineUtils@@SAPAVHBufC16@@KHH@Z @ 11 NONAME ; class HBufC16 * RadioEngineUtils::ReadFrequencyStringLC(unsigned long, int, int) + ?ValueDes@CRadioPropertyObserver@@QBEABVTDesC16@@XZ @ 12 NONAME ; class TDesC16 const & CRadioPropertyObserver::ValueDes(void) const + ??0CRadioRepositoryEntityBase@@IAE@ABVTUid@@KAAVMRadioRepositoryEntityObserver@@W4TPriority@CActive@@@Z @ 13 NONAME ; CRadioRepositoryEntityBase::CRadioRepositoryEntityBase(class TUid const &, unsigned long, class MRadioRepositoryEntityObserver &, enum CActive::TPriority) + ??1CRadioSystemEventCollector@@UAE@XZ @ 14 NONAME ; CRadioSystemEventCollector::~CRadioSystemEventCollector(void) + ??1CRadioAudioRouter@@UAE@XZ @ 15 NONAME ; CRadioAudioRouter::~CRadioAudioRouter(void) + ?ActivateL@CRadioPropertyObserver@@QAEXXZ @ 16 NONAME ; void CRadioPropertyObserver::ActivateL(void) + ?Logger@RadioEngineUtils@@SAPAVMRadioEngineLogger@@XZ @ 17 NONAME ; class MRadioEngineLogger * RadioEngineUtils::Logger(void) + ?NewL@CRadioSystemEventCollector@@SAPAV1@XZ @ 18 NONAME ; class CRadioSystemEventCollector * CRadioSystemEventCollector::NewL(void) + ?Logger@MRadioEngineLogger@@SAPAV1@XZ @ 19 NONAME ; class MRadioEngineLogger * MRadioEngineLogger::Logger(void) + ?Release@RadioEngineUtils@@SAXXZ @ 20 NONAME ; void RadioEngineUtils::Release(void) + ?DeleteAudioOutput@CRadioRoutableAudio@@IAEXXZ @ 21 NONAME ; void CRadioRoutableAudio::DeleteAudioOutput(void) + ?FormatFrequencyString@RadioEngineUtils@@SAXAAVTDes16@@KHAAVTDesC16@@@Z @ 22 NONAME ; void RadioEngineUtils::FormatFrequencyString(class TDes16 &, unsigned long, int, class TDesC16 &) + ?ValueInt@CRadioPropertyObserver@@QBEHXZ @ 23 NONAME ; int CRadioPropertyObserver::ValueInt(void) const + ?SetAudioRouteL@CRadioAudioRouter@@QAEXW4TRadioAudioRoute@RadioEngine@@@Z @ 24 NONAME ; void CRadioAudioRouter::SetAudioRouteL(enum RadioEngine::TRadioAudioRoute) + ?NewL@CRadioAudioRouter@@SAPAV1@AAVMRadioAudioRoutingObserver@@@Z @ 25 NONAME ; class CRadioAudioRouter * CRadioAudioRouter::NewL(class MRadioAudioRoutingObserver &) + ?FsSession@RadioEngineUtils@@SAAAVRFs@@XZ @ 26 NONAME ; class RFs & RadioEngineUtils::FsSession(void) + ?UnRegisterRoutableAudio@CRadioAudioRouter@@QAEXPAVCRadioRoutableAudio@@@Z @ 27 NONAME ; void CRadioAudioRouter::UnRegisterRoutableAudio(class CRadioRoutableAudio *) + ?AudioRoutingSupported@CRadioRoutableAudio@@QBEHXZ @ 28 NONAME ; int CRadioRoutableAudio::AudioRoutingSupported(void) const + ?NewL@CRadioPropertyObserver@@SAPAV1@AAVMRadioPropertyChangeObserver@@ABVTUid@@IW4TRadioPropertyType@1@@Z @ 29 NONAME ; class CRadioPropertyObserver * CRadioPropertyObserver::NewL(class MRadioPropertyChangeObserver &, class TUid const &, unsigned int, enum CRadioPropertyObserver::TRadioPropertyType) + ??0TRadioMethodLogger@@QAE@PBG0@Z @ 30 NONAME ; TRadioMethodLogger::TRadioMethodLogger(unsigned short const *, unsigned short const *) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/bwins/radioengineutilsu.def --- a/radioengine/utils/bwins/radioengineutilsu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -EXPORTS - ??0CRadioRoutableAudio@@QAE@PAVCRadioAudioRouter@@@Z @ 1 NONAME ; CRadioRoutableAudio::CRadioRoutableAudio(class CRadioAudioRouter *) - ??0TRadioMethodLogger@@QAE@PBG0@Z @ 2 NONAME ; TRadioMethodLogger::TRadioMethodLogger(unsigned short const *, unsigned short const *) - ??1CRadioAudioRouter@@UAE@XZ @ 3 NONAME ; CRadioAudioRouter::~CRadioAudioRouter(void) - ??1CRadioPubSub@@UAE@XZ @ 4 NONAME ; CRadioPubSub::~CRadioPubSub(void) - ??1CRadioRepositoryManager@@UAE@XZ @ 5 NONAME ; CRadioRepositoryManager::~CRadioRepositoryManager(void) - ??1CRadioRoutableAudio@@UAE@XZ @ 6 NONAME ; CRadioRoutableAudio::~CRadioRoutableAudio(void) - ??1CRadioSystemEventCollector@@UAE@XZ @ 7 NONAME ; CRadioSystemEventCollector::~CRadioSystemEventCollector(void) - ??1TRadioMethodLogger@@QAE@XZ @ 8 NONAME ; TRadioMethodLogger::~TRadioMethodLogger(void) - ?ActivateL@CRadioPropertyObserver@@QAEXXZ @ 9 NONAME ; void CRadioPropertyObserver::ActivateL(void) - ?AudioRoutingSupported@CRadioRoutableAudio@@QBEHXZ @ 10 NONAME ; int CRadioRoutableAudio::AudioRoutingSupported(void) const - ?DeleteAudioOutput@CRadioRoutableAudio@@IAEXXZ @ 11 NONAME ; void CRadioRoutableAudio::DeleteAudioOutput(void) - ?Env@RadioEngineUtils@@SAPAVCCoeEnv@@XZ @ 12 NONAME ; class CCoeEnv * RadioEngineUtils::Env(void) - ?FormatFrequencyString@RadioEngineUtils@@SAXAAVTDes16@@KHAAVTDesC16@@@Z @ 13 NONAME ; void RadioEngineUtils::FormatFrequencyString(class TDes16 &, unsigned long, int, class TDesC16 &) - ?FsSession@RadioEngineUtils@@SAAAVRFs@@XZ @ 14 NONAME ; class RFs & RadioEngineUtils::FsSession(void) - ?GetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KAAH@Z @ 15 NONAME ; void CRadioRepositoryManager::GetRepositoryValueL(class TUid const &, unsigned long, int &) - ?GetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KAAN@Z @ 16 NONAME ; void CRadioRepositoryManager::GetRepositoryValueL(class TUid const &, unsigned long, double &) - ?GetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KAAVTDes16@@@Z @ 17 NONAME ; void CRadioRepositoryManager::GetRepositoryValueL(class TUid const &, unsigned long, class TDes16 &) - ?GetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KAAVTDes8@@@Z @ 18 NONAME ; void CRadioRepositoryManager::GetRepositoryValueL(class TUid const &, unsigned long, class TDes8 &) - ?InitializeL@RadioEngineUtils@@SAXPAVCCoeEnv@@@Z @ 19 NONAME ; void RadioEngineUtils::InitializeL(class CCoeEnv *) - ?Logger@MRadioEngineLogger@@SAPAV1@XZ @ 20 NONAME ; class MRadioEngineLogger * MRadioEngineLogger::Logger(void) - ?Logger@RadioEngineUtils@@SAPAVMRadioEngineLogger@@XZ @ 21 NONAME ; class MRadioEngineLogger * RadioEngineUtils::Logger(void) - ?NewL@CRadioAudioRouter@@SAPAV1@AAVMRadioAudioRoutingObserver@@@Z @ 22 NONAME ; class CRadioAudioRouter * CRadioAudioRouter::NewL(class MRadioAudioRoutingObserver &) - ?NewL@CRadioPropertyObserver@@SAPAV1@AAVMRadioPropertyChangeObserver@@ABVTUid@@IW4TRadioPropertyType@1@@Z @ 23 NONAME ; class CRadioPropertyObserver * CRadioPropertyObserver::NewL(class MRadioPropertyChangeObserver &, class TUid const &, unsigned int, enum CRadioPropertyObserver::TRadioPropertyType) - ?NewL@CRadioPubSub@@SAPAV1@XZ @ 24 NONAME ; class CRadioPubSub * CRadioPubSub::NewL(void) - ?NewL@CRadioRemConTarget@@SAPAV1@XZ @ 25 NONAME ; class CRadioRemConTarget * CRadioRemConTarget::NewL(void) - ?NewL@CRadioRepositoryManager@@SAPAV1@H@Z @ 26 NONAME ; class CRadioRepositoryManager * CRadioRepositoryManager::NewL(int) - ?NewL@CRadioSystemEventCollector@@SAPAV1@XZ @ 27 NONAME ; class CRadioSystemEventCollector * CRadioSystemEventCollector::NewL(void) - ?ReadFrequencyStringLC@RadioEngineUtils@@SAPAVHBufC16@@KHH@Z @ 28 NONAME ; class HBufC16 * RadioEngineUtils::ReadFrequencyStringLC(unsigned long, int, int) - ?RegisterRoutableAudio@CRadioAudioRouter@@QAEXPAVCRadioRoutableAudio@@@Z @ 29 NONAME ; void CRadioAudioRouter::RegisterRoutableAudio(class CRadioRoutableAudio *) - ?Release@RadioEngineUtils@@SAXXZ @ 30 NONAME ; void RadioEngineUtils::Release(void) - ?SetAudioOutput@CRadioRoutableAudio@@IAEXPAVCAudioOutput@@@Z @ 31 NONAME ; void CRadioRoutableAudio::SetAudioOutput(class CAudioOutput *) - ?SetAudioRouteL@CRadioAudioRouter@@QAEXW4TRadioAudioRoute@RadioEngine@@@Z @ 32 NONAME ; void CRadioAudioRouter::SetAudioRouteL(enum RadioEngine::TRadioAudioRoute) - ?SetAudioRouteL@CRadioRoutableAudio@@QAEXW4TRadioAudioRoute@RadioEngine@@@Z @ 33 NONAME ; void CRadioRoutableAudio::SetAudioRouteL(enum RadioEngine::TRadioAudioRoute) - ?SetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KABN@Z @ 34 NONAME ; void CRadioRepositoryManager::SetRepositoryValueL(class TUid const &, unsigned long, double const &) - ?SetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KABVTDesC16@@@Z @ 35 NONAME ; void CRadioRepositoryManager::SetRepositoryValueL(class TUid const &, unsigned long, class TDesC16 const &) - ?SetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KABVTDesC8@@@Z @ 36 NONAME ; void CRadioRepositoryManager::SetRepositoryValueL(class TUid const &, unsigned long, class TDesC8 const &) - ?SetRepositoryValueL@CRadioRepositoryManager@@SAXABVTUid@@KH@Z @ 37 NONAME ; void CRadioRepositoryManager::SetRepositoryValueL(class TUid const &, unsigned long, int) - ?UnRegisterRoutableAudio@CRadioAudioRouter@@QAEXPAVCRadioRoutableAudio@@@Z @ 38 NONAME ; void CRadioAudioRouter::UnRegisterRoutableAudio(class CRadioRoutableAudio *) - ?ValueDes8@CRadioPropertyObserver@@QBEABVTDesC8@@XZ @ 39 NONAME ; class TDesC8 const & CRadioPropertyObserver::ValueDes8(void) const - ?ValueDes@CRadioPropertyObserver@@QBEABVTDesC16@@XZ @ 40 NONAME ; class TDesC16 const & CRadioPropertyObserver::ValueDes(void) const - ?ValueInt@CRadioPropertyObserver@@QBEHXZ @ 41 NONAME ; int CRadioPropertyObserver::ValueInt(void) const - diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/eabi/fmradioengineutilsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/eabi/fmradioengineutilsu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,49 @@ +EXPORTS + _ZN16RadioEngineUtils11InitializeLEv @ 1 NONAME + _ZN16RadioEngineUtils21FormatFrequencyStringER6TDes16miR7TDesC16 @ 2 NONAME + _ZN16RadioEngineUtils21ReadFrequencyStringLCEmii @ 3 NONAME + _ZN16RadioEngineUtils6LoggerEv @ 4 NONAME + _ZN16RadioEngineUtils7ReleaseEv @ 5 NONAME + _ZN16RadioEngineUtils9FsSessionEv @ 6 NONAME + _ZN17CRadioAudioRouter14SetAudioRouteLEN11RadioEngine16TRadioAudioRouteE @ 7 NONAME + _ZN17CRadioAudioRouter21RegisterRoutableAudioEP19CRadioRoutableAudio @ 8 NONAME + _ZN17CRadioAudioRouter23UnRegisterRoutableAudioEP19CRadioRoutableAudio @ 9 NONAME + _ZN17CRadioAudioRouter4NewLER26MRadioAudioRoutingObserver @ 10 NONAME + _ZN17CRadioAudioRouterD0Ev @ 11 NONAME + _ZN17CRadioAudioRouterD1Ev @ 12 NONAME + _ZN17CRadioAudioRouterD2Ev @ 13 NONAME + _ZN18CRadioRemConTarget4NewLEv @ 14 NONAME + _ZN18MRadioEngineLogger6LoggerEv @ 15 NONAME + _ZN18TRadioMethodLoggerC1EPKtS1_ @ 16 NONAME + _ZN18TRadioMethodLoggerC2EPKtS1_ @ 17 NONAME + _ZN18TRadioMethodLoggerD1Ev @ 18 NONAME + _ZN18TRadioMethodLoggerD2Ev @ 19 NONAME + _ZN19CRadioRoutableAudio14SetAudioOutputEP12CAudioOutput @ 20 NONAME + _ZN19CRadioRoutableAudio14SetAudioRouteLEN11RadioEngine16TRadioAudioRouteE @ 21 NONAME + _ZN19CRadioRoutableAudio17DeleteAudioOutputEv @ 22 NONAME + _ZN19CRadioRoutableAudioC1EP17CRadioAudioRouter @ 23 NONAME + _ZN19CRadioRoutableAudioC2EP17CRadioAudioRouter @ 24 NONAME + _ZN19CRadioRoutableAudioD0Ev @ 25 NONAME + _ZN19CRadioRoutableAudioD1Ev @ 26 NONAME + _ZN19CRadioRoutableAudioD2Ev @ 27 NONAME + _ZN22CRadioPropertyObserver4NewLER28MRadioPropertyChangeObserverRK4TUidjNS_18TRadioPropertyTypeE @ 28 NONAME + _ZN22CRadioPropertyObserver9ActivateLEv @ 29 NONAME + _ZN26CRadioRepositoryEntityBaseC2ERK4TUidmR30MRadioRepositoryEntityObserverN7CActive9TPriorityE @ 30 NONAME + _ZN26CRadioRepositoryEntityBaseD0Ev @ 31 NONAME + _ZN26CRadioRepositoryEntityBaseD1Ev @ 32 NONAME + _ZN26CRadioRepositoryEntityBaseD2Ev @ 33 NONAME + _ZN26CRadioSystemEventCollector4NewLEv @ 34 NONAME + _ZN26CRadioSystemEventCollectorD0Ev @ 35 NONAME + _ZN26CRadioSystemEventCollectorD1Ev @ 36 NONAME + _ZN26CRadioSystemEventCollectorD2Ev @ 37 NONAME + _ZNK19CRadioRoutableAudio21AudioRoutingSupportedEv @ 38 NONAME + _ZNK22CRadioPropertyObserver8ValueDesEv @ 39 NONAME + _ZNK22CRadioPropertyObserver8ValueIntEv @ 40 NONAME + _ZNK22CRadioPropertyObserver9ValueDes8Ev @ 41 NONAME + _ZTI15CRadioEngineTls @ 42 NONAME + _ZTI19CRadioRoutableAudio @ 43 NONAME + _ZTI26CRadioRepositoryEntityBase @ 44 NONAME + _ZTV15CRadioEngineTls @ 45 NONAME + _ZTV19CRadioRoutableAudio @ 46 NONAME + _ZTV26CRadioRepositoryEntityBase @ 47 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/eabi/radioengineutilsu.def --- a/radioengine/utils/eabi/radioengineutilsu.def Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -EXPORTS - _ZN12CRadioPubSub4NewLEv @ 1 NONAME - _ZN12CRadioPubSubD0Ev @ 2 NONAME - _ZN12CRadioPubSubD1Ev @ 3 NONAME - _ZN12CRadioPubSubD2Ev @ 4 NONAME - _ZN16RadioEngineUtils11InitializeLEP7CCoeEnv @ 5 NONAME - _ZN16RadioEngineUtils21FormatFrequencyStringER6TDes16miR7TDesC16 @ 6 NONAME - _ZN16RadioEngineUtils21ReadFrequencyStringLCEmii @ 7 NONAME - _ZN16RadioEngineUtils3EnvEv @ 8 NONAME - _ZN16RadioEngineUtils6LoggerEv @ 9 NONAME - _ZN16RadioEngineUtils7ReleaseEv @ 10 NONAME - _ZN16RadioEngineUtils9FsSessionEv @ 11 NONAME - _ZN17CRadioAudioRouter14SetAudioRouteLEN11RadioEngine16TRadioAudioRouteE @ 12 NONAME - _ZN17CRadioAudioRouter21RegisterRoutableAudioEP19CRadioRoutableAudio @ 13 NONAME - _ZN17CRadioAudioRouter23UnRegisterRoutableAudioEP19CRadioRoutableAudio @ 14 NONAME - _ZN17CRadioAudioRouter4NewLER26MRadioAudioRoutingObserver @ 15 NONAME - _ZN17CRadioAudioRouterD0Ev @ 16 NONAME - _ZN17CRadioAudioRouterD1Ev @ 17 NONAME - _ZN17CRadioAudioRouterD2Ev @ 18 NONAME - _ZN18CRadioRemConTarget4NewLEv @ 19 NONAME - _ZN18MRadioEngineLogger6LoggerEv @ 20 NONAME - _ZN18TRadioMethodLoggerC1EPKtS1_ @ 21 NONAME - _ZN18TRadioMethodLoggerC2EPKtS1_ @ 22 NONAME - _ZN18TRadioMethodLoggerD1Ev @ 23 NONAME - _ZN18TRadioMethodLoggerD2Ev @ 24 NONAME - _ZN19CRadioRoutableAudio14SetAudioOutputEP12CAudioOutput @ 25 NONAME - _ZN19CRadioRoutableAudio14SetAudioRouteLEN11RadioEngine16TRadioAudioRouteE @ 26 NONAME - _ZN19CRadioRoutableAudio17DeleteAudioOutputEv @ 27 NONAME - _ZN19CRadioRoutableAudioC1EP17CRadioAudioRouter @ 28 NONAME - _ZN19CRadioRoutableAudioC2EP17CRadioAudioRouter @ 29 NONAME - _ZN19CRadioRoutableAudioD0Ev @ 30 NONAME - _ZN19CRadioRoutableAudioD1Ev @ 31 NONAME - _ZN19CRadioRoutableAudioD2Ev @ 32 NONAME - _ZN22CRadioPropertyObserver4NewLER28MRadioPropertyChangeObserverRK4TUidjNS_18TRadioPropertyTypeE @ 33 NONAME - _ZN22CRadioPropertyObserver9ActivateLEv @ 34 NONAME - _ZN23CRadioRepositoryManager19GetRepositoryValueLERK4TUidmR5TDes8 @ 35 NONAME - _ZN23CRadioRepositoryManager19GetRepositoryValueLERK4TUidmR6TDes16 @ 36 NONAME - _ZN23CRadioRepositoryManager19GetRepositoryValueLERK4TUidmRd @ 37 NONAME - _ZN23CRadioRepositoryManager19GetRepositoryValueLERK4TUidmRi @ 38 NONAME - _ZN23CRadioRepositoryManager19SetRepositoryValueLERK4TUidmRK6TDesC8 @ 39 NONAME - _ZN23CRadioRepositoryManager19SetRepositoryValueLERK4TUidmRK7TDesC16 @ 40 NONAME - _ZN23CRadioRepositoryManager19SetRepositoryValueLERK4TUidmRKd @ 41 NONAME - _ZN23CRadioRepositoryManager19SetRepositoryValueLERK4TUidmi @ 42 NONAME - _ZN23CRadioRepositoryManager4NewLEi @ 43 NONAME - _ZN23CRadioRepositoryManagerD0Ev @ 44 NONAME - _ZN23CRadioRepositoryManagerD1Ev @ 45 NONAME - _ZN23CRadioRepositoryManagerD2Ev @ 46 NONAME - _ZN26CRadioSystemEventCollector4NewLEv @ 47 NONAME - _ZN26CRadioSystemEventCollectorD0Ev @ 48 NONAME - _ZN26CRadioSystemEventCollectorD1Ev @ 49 NONAME - _ZN26CRadioSystemEventCollectorD2Ev @ 50 NONAME - _ZNK19CRadioRoutableAudio21AudioRoutingSupportedEv @ 51 NONAME - _ZNK22CRadioPropertyObserver8ValueDesEv @ 52 NONAME - _ZNK22CRadioPropertyObserver8ValueIntEv @ 53 NONAME - _ZNK22CRadioPropertyObserver9ValueDes8Ev @ 54 NONAME - _ZTI15CRadioEngineTls @ 55 NONAME ; ## - _ZTI19CRadioRoutableAudio @ 56 NONAME ; ## - _ZTV15CRadioEngineTls @ 57 NONAME ; ## - _ZTV19CRadioRoutableAudio @ 58 NONAME ; ## - diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/group/bld.inf diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/group/radioengineutils.mmp --- a/radioengine/utils/group/radioengineutils.mmp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/group/radioengineutils.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -21,14 +21,15 @@ #include -TARGET radioengineutils.dll +TARGET fmradioengineutils.dll TARGETTYPE DLL -UID 0x1000008D 0x10281CB8 +UID 0x1000008D 0x2002FF51 VERSION 10.0 CAPABILITY CAP_GENERAL_DLL VENDORID VID_DEFAULT PAGED +SMPSAFE USERINCLUDE ../api USERINCLUDE ../inc @@ -46,13 +47,9 @@ SOURCE cradioaudiorouter.cpp SOURCE cradioaccessoryobserver.cpp SOURCE cradiopropertyobserver.cpp -SOURCE cradiopubsub.cpp -SOURCE cradiopubsubimp.cpp SOURCE cradioremcontarget.cpp SOURCE cradioremcontargetimp.cpp SOURCE cradiorepositoryentitybase.cpp -SOURCE cradiorepositorymanager.cpp -SOURCE cradiorepositorymanagerimp.cpp SOURCE cradiosystemeventdetector.cpp SOURCE cradiosystemeventcollector.cpp SOURCE cradiosystemeventcollectorimp.cpp diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradioaccessoryobserver.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradioenginetls.h --- a/radioengine/utils/inc/cradioenginetls.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/inc/cradioenginetls.h Thu Jul 22 16:33:45 2010 +0100 @@ -51,14 +51,6 @@ static MRadioEngineLogger* Logger(); /** - * Return the eikon environment - * - * @since Live TV UI v1.0 - * @return Pointer to CEikonEnv - */ - static CCoeEnv* Env(); - - /** * Returns the file server session * * @since Live TV UI v1.0 @@ -79,9 +71,9 @@ private: - static void InitializeL( CCoeEnv* aEnv = NULL, RFs* aFs = NULL ); + static void InitializeL( RFs* aFs = NULL ); - CRadioEngineTls( CCoeEnv* aEnv, RFs* aFs ); + CRadioEngineTls( RFs* aFs ); ~CRadioEngineTls(); @@ -96,12 +88,6 @@ #endif /** - * Pointer to the eikon environment - * Not own. - */ - CCoeEnv* iEnv; - - /** * Flag to indicate whether or not the file server session is owned */ TBool iFsOwned; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiopubsubimp.h --- a/radioengine/utils/inc/cradiopubsubimp.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/* -* 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: -* -*/ -#ifndef CRADIOPUBSUBIMP_H -#define CRADIOPUBSUBIMP_H - -// User includes -#include "cradiopubsub.h" -#include "cradiopropertyobserver.h" - -/** - * Publish & Subscribe interface of Radio Application. - */ -NONSHARABLE_CLASS( CRadioPubSubImp ) : public CRadioPubSub - , public MRadioPropertyChangeObserver - { -public: - - static CRadioPubSubImp* NewL(); - - ~CRadioPubSubImp(); - -private: - - CRadioPubSubImp(); - - void ConstructL(); - -// from base class CRadioPubSub - - TBool PublishChannel( TInt aChannelId ) const; - TBool PublishFrequency( TUint32 aFreq ) const; - TBool PublishPowerState( TBool aPowerOn ) const; - TBool PublishVolume( TInt aVol ) const; - TBool PublishChannelDataChanged( TInt aChannelId ) const; - TBool PublishTuningState( TRadioPSTuningState aTuningState ) const; - TBool PublishRadioMuteState( TBool aMuted ) const; - TBool PublishApplicationRunningState( TRadioPSApplicationRunningState aRunningState ) const; - TBool PublishHeadsetStatus( TRadioPSHeadsetStatus aHeadsetStatus ) const; - TBool PublishFrequencyDecimalCount( TRadioPSFrequencyDecimalCount aDecimalCount ) const; - TBool PublishLoudspeakerStatus( TRadioPSLoudspeakerStatus aLoudspeakerStatus ) const; - TBool PublishRdsProgramService( const TDesC& aProgramService ) const; - TBool PublishRdsRadioText( const TDesC& aRadioText ) const; - TBool PublishChannelName( const TDesC& aName ) const; - TBool PublishActivePreseListCount( TInt aCount ) const; - TBool PublishActivePreseListFocus( TInt aIndex ) const; - TBool PublishAntennaState( TRadioPSRadioAntennaState aState ) const; - void SetControlEventObserver( MRadioControlEventObserver* aControlEventObserver ); - -// from base class MVRPropertyChangeObserver - - void HandlePropertyChangeL( const TUid& aCategory, const TUint aKey, const TInt aValue ); - void HandlePropertyChangeL( const TUid& /*aCategory*/, const TUint /*aKey*/, const TDesC8& /*aValue*/ ) {} - void HandlePropertyChangeL( const TUid& /*aCategory*/, const TUint /*aKey*/, const TDesC& /*aValue*/ ) {} - void HandlePropertyChangeErrorL( const TUid& /*aCategory*/, const TUint /*aKey*/, TInt /*aError*/ ) {} - -// New functions - - /** - * Defines a property. - * - * @param aKey The key of the property. - * @param aAttr Attributes of the property. - * @param aDataProperty ETrue if the property is a data property, EFalse - * if it is a control property - */ - void DefinePropertyL( TUint aKey, TInt aAttr, TBool aDataProperty ) const; - - /** - * Deletes a property. - * - * @param aKey The key of the property. - */ - void DeleteProperty( TUint aKey ) const; - - /** - * Creates a property observer - * - * @param aKey Property key - * @param aPropertyType Property type - */ - void CreatePropertyObserverL( const TUint aKey, const TInt aPropertyType ); - - /** - * Gets the integer value stored in a property. - * - * @param aKey The key of the property. - * @return The value contained in the property. - */ - TBool Get( TUint aKey, TInt& aValue ) const; - - /** - * Sets the value in an integer property. - * - * @param aKey The key of the property. - * @param aValue The value to set. - */ - TBool Set( TUint aKey, TInt aValue ) const; - - /** - * Sets the value in a text property. - * - * @param aKey The key of the property. - * @param aValue The value to set. - */ - TBool Set( TUint aKey, const TDesC& aValue ) const; - -private: // data - - /** - * Pointer to observer in UI side, can be NULL. Not owned. - */ - MRadioControlEventObserver* iObserver; - - /** - * An array of handlers to P&S interface. - */ - RPointerArray iPropertyArray; - - }; - -#endif // CRADIOPUBSUBIMP_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradioremcontargetimp.h diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiorepositoryentity.h --- a/radioengine/utils/inc/cradiorepositoryentity.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef C_RADIOREPOSITORYENTITY_H -#define C_RADIOREPOSITORYENTITY_H - -#include -#include "cradiorepositoryentitybase.h" -#include "mradiorepositoryentityobserver.h" - -/** - * Templated class to listen to a single key within the central repository. - * - * Notifies the observer of changes in the key, and provides caching for the key's value. - */ -template -NONSHARABLE_CLASS( CRadioRepositoryEntity ) : public CRadioRepositoryEntityBase - { - -public: - - static CRadioRepositoryEntity* NewL( const TUid& aUid, - TUint32 aKey, - MRadioRepositoryEntityObserver& aObserver, - CActive::TPriority aPriority = CActive::EPriorityStandard ); - - ~CRadioRepositoryEntity(); - - /** - * Sets the value of the entity. - * The value is written into the central repository immediately. - * - * @param aValue The value to set. - * @param aSavingEnabled If ETrue, saving to central repository file is enabled - */ - TInt SetValue( const T& aValue, TBool aSavingEnabled ); - - /** - * Returns a cached reference to the value of the entity. - * - * @return The cached value of the entity. - */ - const T& Value() const; - - /** - * Forcibly updates the key's value from the central repository and caches it. - */ - void UpdateL(); - -// from base class CActive - - void RunL(); - void DoCancel(); - -private: - - CRadioRepositoryEntity( const TUid& aUid, - TUint32 aKey, - MRadioRepositoryEntityObserver& aObserver, - CActive::TPriority aPriority ); - - void ConstructL(); - -protected: - - /** The central repository client. */ - CRepository* iRepository; - - /** The cached value of the key. */ - T iValue; - - }; - -#include "cradiorepositoryentity.inl" - -#endif // C_RADIOREPOSITORYENTITY_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiorepositoryentity.inl --- a/radioengine/utils/inc/cradiorepositoryentity.inl Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* -* 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: -* -*/ - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -template -CRadioRepositoryEntity* CRadioRepositoryEntity::NewL( const TUid& aUid, - TUint32 aKey, - MRadioRepositoryEntityObserver& aObserver, - CActive::TPriority aPriority ) - { - CRadioRepositoryEntity* self = new ( ELeave ) CRadioRepositoryEntity( aUid, aKey, aObserver, aPriority ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -template -CRadioRepositoryEntity::CRadioRepositoryEntity( const TUid& aUid, - TUint32 aKey, - MRadioRepositoryEntityObserver& aObserver, - CActive::TPriority aPriority ) - : CRadioRepositoryEntityBase( aUid, aKey, aObserver, aPriority ) - { - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -template -void CRadioRepositoryEntity::ConstructL() - { - iRepository = CRepository::NewL( iUid ); - - CActiveScheduler::Add( this ); - RunL(); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -template -CRadioRepositoryEntity::~CRadioRepositoryEntity() - { - Cancel(); - delete iRepository; - } - -// ----------------------------------------------------------------------------- -// Sets the value of the key. -// ----------------------------------------------------------------------------- -// -template -TInt CRadioRepositoryEntity::SetValue( const T& aValue, TBool aSavingEnabled ) - { - iValue = aValue; - if ( aSavingEnabled ) - { - return iRepository->Set( iKey, aValue ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// Returns the cached copy of the key's value. -// ----------------------------------------------------------------------------- -// -template -const T& CRadioRepositoryEntity::Value() const - { - return iValue; - } - -// ----------------------------------------------------------------------------- -// Forcibly updates the cached value from the repository. -// ----------------------------------------------------------------------------- -// -template -void CRadioRepositoryEntity::UpdateL() - { - User::LeaveIfError( iRepository->Get( iKey, iValue ) ); - } - -// ----------------------------------------------------------------------------- -// Executed when the key's value is changed. -// ----------------------------------------------------------------------------- -// -template -void CRadioRepositoryEntity::RunL() - { - User::LeaveIfError( iRepository->NotifyRequest( iKey, iStatus ) ); - SetActive(); - - TInt err = iRepository->Get( iKey, iValue ); - iObserver.HandleRepositoryValueChangeL( iUid, iKey, iValue, err ); - } - -// ----------------------------------------------------------------------------- -// Cancels all pending notifications. -// ----------------------------------------------------------------------------- -// -template -void CRadioRepositoryEntity::DoCancel() - { - iRepository->NotifyCancel( iKey ); - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiorepositoryentitybase.h --- a/radioengine/utils/inc/cradiorepositoryentitybase.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* 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: -* -*/ - -#ifndef C_RADIOREPOSITORYENTITYBASE_H -#define C_RADIOREPOSITORYENTITYBASE_H - -#include - -class MRadioRepositoryEntityObserver; - -/** - * Base class for a central repository entity. - * - * All instantiable central repository entities must be derived from this class. - * The class is provided so that a heterogenous array of templated objects can be created, and to - * provide common data fields for the said purpose. - */ -NONSHARABLE_CLASS( CRadioRepositoryEntityBase ) : public CActive - { - -public: - - ~CRadioRepositoryEntityBase(); - - /** - * Returns the UID of the repository the entity is bound to. - * - * @return The UID of the repository the entity is bound to. - */ - const TUid& Uid() const; - - /** - * Returns the key the entity is bound to. - * - * @return The key the entity is bound to. - */ - TUint32 Key() const; - -protected: - - /** - * Constructor. - * - * @param aUid The UID of the repository that this entity will be bound to. - * @param aKey The key within the repository that this entity will be bound to. - * @param aObserver The observer that is notified whenever the value of the key within the repository changes. - * @param aPriority The priority of the active object. - */ - CRadioRepositoryEntityBase( const TUid& aUid, TUint32 aKey, MRadioRepositoryEntityObserver& aObserver, CActive::TPriority aPriority ); - -protected: - - /** The observer that is notified of changes in the key. */ - MRadioRepositoryEntityObserver& iObserver; - - /** The UID of the repository the entity is bound to. */ - TUid iUid; - - /** The key the entity is bound to.. */ - TUint32 iKey; - - }; - -#endif // C_RADIOREPOSITORYENTITYBASE_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiorepositorymanagerimp.h --- a/radioengine/utils/inc/cradiorepositorymanagerimp.h Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/* -* 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: -* -*/ - - -#ifndef C_RADIOREPOSITORYMANAGERIMP_H -#define C_RADIOREPOSITORYMANAGERIMP_H - -// System includes -#include - -// User includes -#include "mradiorepositoryentityobserver.h" - -// Forward declarations -class CRadioRepositoryEntityBase; - -/** - * Central repository entity manager. - * - * Manages central repository entities that listen to specific repository and a key within it, notifying the observer - * whenever the key's value changes. - * - * Also a set of static methods are provided that wrap the common use case of central repository where the user - * is only interested to read or write the value of a key and then discard the repository object. - */ -NONSHARABLE_CLASS( CRadioRepositoryManagerImp ) : public CRadioRepositoryManager - , public MRadioRepositoryEntityObserver - { - -public: - - static CRadioRepositoryManagerImp* NewL( TInt aGranularity ); - - ~CRadioRepositoryManagerImp(); - - /** - * Sets the value of an integer key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue The value to set. - */ - static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt aValue ); - - /** - * Sets the value of a floating point key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue The value to set. - */ - static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TReal& aValue ); - - /** - * Sets the value of a binary key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue The value to set. - */ - static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ); - - /** - * Sets the value of a string key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue The value to set. - */ - static void SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ); - - /** - * Gets the value of an integer key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue On return, the value of the key within the repository. - */ - static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt& aValue ); - - /** - * Gets the value of a floating point key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue On return, the value of the key within the repository. - */ - static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TReal& aValue ); - - /** - * Gets the value of a binary key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue On return, the value of the key within the repository. - */ - static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes8& aValue ); - - /** - * Gets the value of a string key in the repository. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue On return, the value of the key within the repository. - */ - static void GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes16& aValue ); - -private: - - CRadioRepositoryManagerImp( TInt aGranularity ); - - void ConstructL(); - -// from base class CRadioRepositoryManager - - void AddObserverL( MRadioRepositoryEntityObserver* aObserver ); - void RemoveObserver( MRadioRepositoryEntityObserver* aObserver ); - void EnableSave( TBool aEnable ); - void AddEntityL( const TUid& aUid, TUint32 aKey, TRadioEntityType aType ); - void RemoveEntity( const TUid& aUid, TUint32 aKey ); - TInt SetEntityValue( const TUid& aUid, TUint32 aKey, TInt aValue ); - TInt SetEntityValue( const TUid& aUid, TUint32 aKey, const TReal& aValue ); - TInt SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ); - TInt SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ); - TInt EntityValueInt( const TUid& aUid, TUint32 aKey ) const; - const TReal& EntityValueReal( const TUid& aUid, TUint32 aKey ) const; - const TDesC8& EntityValueDes8( const TUid& aUid, TUint32 aKey ) const; - const TDesC16& EntityValueDes16( const TUid& aUid, TUint32 aKey ) const; - - /** - * Sets the value of an entity. - * - * @param aUid The UID of the entity. - * @param aKey The key of the entity. - * @param aValue The value to set. - */ - template - TInt DoSetEntityValue( const TUid& aUid, TUint32 aKey, const T& aValue ); - - /** - * Returns an entity's cached value. - * - * @param aUid The UID of the entity. - * @param aKey The key of the entity. - * @return The cached value of the entity. - */ - template - const T& DoEntityValue( const TUid& aUid, TUint32 aKey ) const; - - /** - * Sets the value of a key. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @param aValue The value to set. - */ - template - static void DoSetRepositoryValueL( const TUid& aUid, TUint32 aKey, const T& aValue ); - - /** - * Returns a key's value. - * - * @param aUid The UID of the repository. - * @param aKey The key within the repository. - * @return The key's value. - */ - template - static void DoGetRepositoryValueL( const TUid& aUid, TUint32 aKey, T& aValue ); - - /** - * Returns the entity's index by its UID and key. - * - * @param aUid The UID of the entity. - * @param aKey The key of the entity. - * @param The entity's index or KErrNotFound if no such entity could be found. - */ - TInt EntityIndex( const TUid& aUid, TUint32 aKey ) const; - - /** - * SIS installation does not update central repository, this checks that the new keys are in the repository. - */ - void CheckRepositoryKeysL(); - -// from base class MRadioRepositoryEntityObserver - - void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, TInt aValue, TInt aError ); - void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, const TReal& aValue, TInt aError ); - void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue, TInt aError ); - void HandleRepositoryValueChangeL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue, TInt aError ); - -private: // data - - /** The observers that are notified of changes in the entities' values. */ - RPointerArray iObservers; - - /** The entities registered. */ - RPointerArray iEntities; - - /** Indicates whether or not the entities are allowed to write to the repository. */ - TBool iEnableSave; - - }; - -#endif // C_RADIOREPOSITORYMANAGERIMP_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiosystemeventcollectorimp.h --- a/radioengine/utils/inc/cradiosystemeventcollectorimp.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/inc/cradiosystemeventcollectorimp.h Thu Jul 22 16:33:45 2010 +0100 @@ -57,7 +57,6 @@ TBool IsCallActive() const; TBool IsAudioResourcesAvailable() const; TBool IsHeadsetConnectedL() const; - TBool IsVoiceUiActive() const; void NotifyObserversL( TRadioSystemEventType aEvent ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/inc/cradiosystemeventdetector.h --- a/radioengine/utils/inc/cradiosystemeventdetector.h Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/inc/cradiosystemeventdetector.h Thu Jul 22 16:33:45 2010 +0100 @@ -80,11 +80,6 @@ void ConstructL(); - /** - * Used internally to change network coverage status and report it to observer. - */ - void SetNetworkCoverageL( const TBool aIsMobileNetworkCoverage, const TBool aIsWlanCoverage ); - CRadioSystemEventDetector( MRadioSystemEventDetectorObserver& aObserver ); private: // data @@ -93,31 +88,23 @@ MRadioSystemEventDetectorObserver& iObserver; /** handler to Publish & Subscribe interface*/ - CRadioPropertyObserver* iCallStatusObserver; - /** handler to Publish & Subscribe interface*/ - CRadioPropertyObserver* iNetworkStatusObserver; + CRadioPropertyObserver* iCallStatusObserver; /** handler to Publish & Subscribe interface*/ - CRadioPropertyObserver* iVoiceUiObserver; + CRadioPropertyObserver* iNetworkStatusObserver; /** handler to Publish & Subscribe interface*/ - CRadioPropertyObserver* iAudioPolicyObserver; + CRadioPropertyObserver* iAudioPolicyObserver; /**Indicator for the mobile network status*/ - TBool iIsMobileNetworkCoverage; - - /**Indicator for the wlan network status*/ - TBool iIsWlanCoverage; + TBool iIsMobileNetworkCoverage; /**Indicator for the call status*/ - TBool iIsCallActive; + TBool iIsCallActive; /** Array of audio policy categories that VR must not resume after. */ - RArray iNoAutoResumeAudioCategories; + RArray iNoAutoResumeAudioCategories; /** Indicator for audio resource status. */ - TBool iIsAudioResourcesAvailable; - - /** Indicator for Voice UI status. */ - TBool iIsVoiceUiActive; + TBool iIsAudioResourcesAvailable; }; diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioaccessoryobserver.cpp --- a/radioengine/utils/src/cradioaccessoryobserver.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradioaccessoryobserver.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -15,11 +15,31 @@ * */ +// System includes +#include + // User includes #include "cradioaccessoryobserver.h" #include "mradioheadseteventobserver.h" #include "cradioenginelogger.h" +#ifdef ASW_CORE_AUDIO_PLATFORM_VERSION // Nokia specific adaptation +#include + +#ifndef __WINS__ + +const TUint KPhysicalConnectionBitmask = KPCNokiaAV | KPCWired; + +#else + +const TUint KPhysicalConnectionBitmask = 0x20000 | 0x1; + +#endif // __WINS__ + +#else +const TUint KPhysicalConnectionBitmask = KPCWired; +#endif // ASW_CORE_AUDIO_PLATFORM_VERSION + // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- @@ -27,6 +47,7 @@ CRadioAccessoryObserver::CRadioAccessoryObserver() : CActive( CActive::EPriorityStandard ) { + LEVEL3( LOG_METHOD_AUTO ); } @@ -36,7 +57,7 @@ // void CRadioAccessoryObserver::ConstructL() { - LOG_METHOD_AUTO; + LEVEL2( LOG_METHOD_AUTO ); User::LeaveIfError( iAccessoryServer.Connect() ); // Creates a new sub-session within an existing session. @@ -45,7 +66,7 @@ TInt nroChangedAccessories( 0 ); UpdateCurrentAccessoriesL( nroChangedAccessories ); - LOG_FORMAT( "CRadioAccessoryObserver::ConstructL() -- Found %d wired/BT accessories ( %d accessories in total ).", + LOG_FORMAT( "Found %d wired/BT accessories ( %d accessories in total ).", nroChangedAccessories, iAccPolGenIdArr.Count() ); CActiveScheduler::Add( this ); // Accessory is always listened @@ -59,6 +80,7 @@ // CRadioAccessoryObserver* CRadioAccessoryObserver::NewL() { + LEVEL3( LOG_METHOD_AUTO ); CRadioAccessoryObserver* self = new( ELeave ) CRadioAccessoryObserver; CleanupStack::PushL( self ); self->ConstructL(); @@ -72,6 +94,7 @@ // CRadioAccessoryObserver::~CRadioAccessoryObserver() { + LEVEL3( LOG_METHOD_AUTO ); Cancel(); iAccessoryConn.CloseSubSession(); iAccessoryServer.Close(); @@ -84,6 +107,7 @@ // TBool CRadioAccessoryObserver::FindAccessoryL( TBool aAcceptOnlyHeadset, TAccAudioOutPutType& aOutputType ) const { + LEVEL2( LOG_METHOD_AUTO ); #ifdef __WINS__ TBool accessoryFound = ETrue; aAcceptOnlyHeadset = ETrue; @@ -91,16 +115,16 @@ #else TBool accessoryFound = EFalse; - LOG_FORMAT( "CRadioAccessoryObserver::FindAccessoryL - Connected accessories count = %d", iAccPolGenIdArr.Count()); + LOG_FORMAT( "Connected accessories count = %d", iAccPolGenIdArr.Count()); for ( TInt i = 0; i < iAccPolGenIdArr.Count() && !accessoryFound; i++ ) { TAccPolGenericID accPolGenId = iAccPolGenIdArr.GetGenericIDL( i ); //Check if physical connection is of acceptable type TUint32 physicalConnectionCaps = accPolGenId.PhysicalConnectionCaps(); - if ( physicalConnectionCaps & KPCWired || physicalConnectionCaps & KPCBluetooth ) + if ( physicalConnectionCaps & KPhysicalConnectionBitmask || physicalConnectionCaps & KPCBluetooth ) { - LOG_FORMAT( "CRadioAccessoryObserver::FindAccessoryL - is wired or BT ( physicalConnectionCaps = %d )", physicalConnectionCaps ); + LOG_FORMAT( "is wired or BT ( physicalConnectionCaps = %d )", physicalConnectionCaps ); if ( !aAcceptOnlyHeadset ) { @@ -110,21 +134,21 @@ TUint32 deviceType = accPolGenId.DeviceTypeCaps(); if ( deviceType & KDTHeadset ) { - LOG_FORMAT( "CRadioAccessoryObserver::FindAccessoryL - is HeadSet( deviceType = %d )", deviceType ); + LOG_FORMAT( "is HeadSet( deviceType = %d )", deviceType ); if ( !IsLineoutConnectedL( accPolGenId ) ) { - LOG( "CRadioAccessoryObserver::FindAccessoryL - Is a normal headSet" ); + LOG( "Is a normal headSet" ); accessoryFound = ETrue; } } else if ( deviceType & KDTLoopset ) { - LOG_FORMAT( "CRadioAccessoryObserver::FindAccessoryL - is Loopset( deviceType = %d )", deviceType ); + LOG_FORMAT( "is Loopset( deviceType = %d )", deviceType ); accessoryFound = ETrue; } else { - LOG_FORMAT( "CRadioAccessoryObserver::FindWiredAccessoryL - is NOT HeadSet or Loopset( deviceType = %d )", deviceType ); + LOG_FORMAT( "is NOT HeadSet or Loopset( deviceType = %d )", deviceType ); } if ( accessoryFound ) @@ -137,12 +161,12 @@ iAccessoryConn.GetValueL( accPolGenId, nameRecord, audioOutputTypeValue ); aOutputType = static_cast( audioOutputTypeValue.iValue ); - LOG_FORMAT( "CRadioAccessoryObserver::FindAccessoryL - AudioOutputType = %d", aOutputType ); + LOG_FORMAT( "AudioOutputType = %d", aOutputType ); } } else { - LOG_FORMAT( "CRadioAccessoryObserver::FindAccessoryL - is NOT wired or BT ( physicalConnectionCaps = %d )", physicalConnectionCaps ); + LOG_FORMAT( "is NOT wired or BT ( physicalConnectionCaps = %d )", physicalConnectionCaps ); } } #endif @@ -165,6 +189,7 @@ // TBool CRadioAccessoryObserver::IsLineoutConnectedL( TAccPolGenericID& aAccPolGenId ) const { + LEVEL2( LOG_METHOD_AUTO ); TBool isLineOut( EFalse ); CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL(); @@ -175,7 +200,7 @@ CleanupStack::PopAndDestroy( nameArray ); if ( isAudioOutValue ) { - LOG_FORMAT( "CRadioAccessoryObserver::IsLineoutConnectedL - isAudioOutValue = ( %d )", isAudioOutValue ); + LOG_FORMAT( "isAudioOutValue = ( %d )", isAudioOutValue ); TAccPolNameRecord nameRecord; nameRecord.SetNameL( KAccAudioOut ); @@ -188,7 +213,7 @@ if ( TAccAudioOutLineout == audioOutValue.iValue ) { //is lineout - LOG_FORMAT( "CRadioAccessoryObserver::IsLineoutConnectedL - Accessory is LineOut( audioOutValue = %d )", audioOutValue.iValue ); + LOG_FORMAT( "Accessory is LineOut( audioOutValue = %d )", audioOutValue.iValue ); isLineOut = ETrue; } } @@ -201,12 +226,13 @@ // void CRadioAccessoryObserver::UpdateCurrentAccessoriesL( TInt& aNroChangedAccessories ) { + LEVEL2( LOG_METHOD_AUTO ); // first check, the removed accessories. TInt removedAccessories = CountRemovedAccessoriesL(); - LOG_FORMAT( "CRadioAccessoryObserver::UpdateCurrentAccessoriesL() -- %d accessories removed.", removedAccessories ); + LOG_FORMAT( "- %d accessories removed.", removedAccessories ); aNroChangedAccessories += removedAccessories; TInt addedAccessories = CountAddedAccessoriesL(); - LOG_FORMAT( "CRadioAccessoryObserver::UpdateCurrentAccessoriesL() -- %d accessories added.", addedAccessories ); + LOG_FORMAT( "- %d accessories added.", addedAccessories ); aNroChangedAccessories += addedAccessories; iSavedAccessories.Reset(); @@ -214,10 +240,10 @@ for ( TInt i = 0; i < iAccPolGenIdArr.Count(); i++ ) { iSavedAccessories.AppendL( iAccPolGenIdArr.GetGenericIDL( i ) ); - LOG_FORMAT( "CRadioAccessoryObserver::UpdateCurrentAccessoriesL() -- accessory in slot %d: %d", + LOG_FORMAT( "- accessory in slot %d: %d", i, iAccPolGenIdArr.GetGenericIDL( i ).UniqueID() ); } - LOG_FORMAT( "CRadioAccessoryObserver::UpdateCurrentAccessoriesL() -- %d accessories in total.", iSavedAccessories.Count() ); + LOG_FORMAT( "- %d accessories in total.", iSavedAccessories.Count() ); } // --------------------------------------------------------------------------- @@ -226,6 +252,7 @@ // TInt CRadioAccessoryObserver::CountRemovedAccessoriesL() const { + LEVEL2( LOG_METHOD_AUTO ); TInt removedAccessories( 0 ); for ( TInt i = 0; i < iSavedAccessories.Count(); i++ ) @@ -234,7 +261,7 @@ TUint32 physicalConnectionCaps = savedAcc.PhysicalConnectionCaps(); - if ( physicalConnectionCaps & KPCWired || physicalConnectionCaps & KPCBluetooth ) + if ( physicalConnectionCaps & KPhysicalConnectionBitmask || physicalConnectionCaps & KPCBluetooth ) { TBool found( EFalse ); @@ -243,13 +270,13 @@ TAccPolGenericID freshAcc = iAccPolGenIdArr.GetGenericIDL( j ); if ( freshAcc.UniqueID() == savedAcc.UniqueID() ) { - LOG_FORMAT( "CRadioAccessoryObserver::CountRemovedAccessoriesL() -- Accessory with id = %d found.", savedAcc.UniqueID() ); + LOG_FORMAT( "- Accessory with id = %d found.", savedAcc.UniqueID() ); found = ETrue; } } if ( !found ) { - LOG_FORMAT( "CRadioAccessoryObserver::CountRemovedAccessoriesL() -- Accessory with id = %d removed.", savedAcc.UniqueID() ); + LOG_FORMAT( "- Accessory with id = %d removed.", savedAcc.UniqueID() ); removedAccessories++; } } @@ -263,6 +290,7 @@ // TInt CRadioAccessoryObserver::CountAddedAccessoriesL() const { + LEVEL2( LOG_METHOD_AUTO ); TInt addedAccessories( 0 ); for ( TInt i = 0; i < iAccPolGenIdArr.Count(); i++ ) @@ -271,7 +299,7 @@ TUint32 physicalConnectionCaps = freshAcc.PhysicalConnectionCaps(); - if ( physicalConnectionCaps & KPCWired || physicalConnectionCaps & KPCBluetooth ) + if ( physicalConnectionCaps & KPhysicalConnectionBitmask || physicalConnectionCaps & KPCBluetooth ) { TBool found( EFalse ); @@ -280,13 +308,13 @@ TAccPolGenericID savedAcc = iSavedAccessories[j]; if ( savedAcc.UniqueID() == freshAcc.UniqueID() ) { - LOG_FORMAT( "CRadioAccessoryObserver::CountAddedAccessoriesL() -- Accessory with id = %d found.", freshAcc.UniqueID() ); + LOG_FORMAT( "- Accessory with id = %d found.", freshAcc.UniqueID() ); found = ETrue; } } if ( !found ) { - LOG_FORMAT( "CRadioAccessoryObserver::CountAddedAccessoriesL() -- Accessory with id = %d added.", freshAcc.UniqueID() ); + LOG_FORMAT( "- Accessory with id = %d added.", freshAcc.UniqueID() ); addedAccessories++; } } @@ -310,6 +338,7 @@ // void CRadioAccessoryObserver::RunL() { + LEVEL2( LOG_METHOD_AUTO ); TRequestStatus status = iStatus; iAccessoryConn.NotifyAccessoryConnectionStatusChanged( iStatus, iAccPolGenIdArr ); @@ -328,18 +357,18 @@ // or when audio routing status changes. if ( audioOutputType == EAccAudioOutPutTypePrivate ) { - LOG( "CRadioAccessoryObserver::RunL - Headset connected" ); + LOG( "Headset connected" ); iObserver->HeadsetConnectedCallbackL(); } else { - LOG( "CRadioAccessoryObserver::RunL - Public wired or BT accessory connected." ); + LOG( "Public wired or BT accessory connected." ); iObserver->HeadsetDisconnectedCallbackL(); } } else { - LOG( "CRadioAccessoryObserver::RunL - No wired or BT accessories available" ); + LOG( "No wired or BT accessories available" ); iObserver->HeadsetDisconnectedCallbackL(); } } @@ -353,5 +382,6 @@ // void CRadioAccessoryObserver::DoCancel() { + LEVEL3( LOG_METHOD_AUTO ); iAccessoryConn.CancelNotifyAccessoryConnectionStatusChanged(); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioaudiorouter.cpp --- a/radioengine/utils/src/cradioaudiorouter.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradioaudiorouter.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -32,6 +32,7 @@ CRadioAudioRouter::CRadioAudioRouter( MRadioAudioRoutingObserver& aAudioRoutingObserver ) : iAudioRoutingObserver( aAudioRoutingObserver ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -40,6 +41,7 @@ // EXPORT_C CRadioAudioRouter* CRadioAudioRouter::NewL( MRadioAudioRoutingObserver& aAudioRoutingObserver ) { + LEVEL3( LOG_METHOD_AUTO ); CRadioAudioRouter* self = new( ELeave ) CRadioAudioRouter( aAudioRoutingObserver ); CleanupStack::PushL( self ); self->ConstructL(); @@ -53,6 +55,7 @@ // EXPORT_C CRadioAudioRouter::~CRadioAudioRouter() { + LEVEL3( LOG_METHOD_AUTO ); iRoutableAudios.Close(); RadioEngineUtils::Release(); } @@ -64,6 +67,7 @@ void CRadioAudioRouter::ConstructL() { RadioEngineUtils::InitializeL(); + LEVEL3( LOG_METHOD_AUTO ); iRoutableAudios = RArray( KVisualRadioInitialRoutableAudioArraySize ); } @@ -73,7 +77,7 @@ // EXPORT_C void CRadioAudioRouter::SetAudioRouteL( RadioEngine::TRadioAudioRoute aAudioRoute ) { - LOG_FORMAT( "CRadioAudioRouter::SetAudioRouteL: Route: %d", aAudioRoute ); + LEVEL3( LOG_METHOD_AUTO ); for ( TInt i = 0 ; i < iRoutableAudios.Count(); i++ ) { @@ -88,7 +92,7 @@ // EXPORT_C void CRadioAudioRouter::RegisterRoutableAudio( CRadioRoutableAudio* aRoutableAudio ) { - LOG( "CRadioAudioRouter::RegisterRoutableAudio" ); + LEVEL3( LOG_METHOD_AUTO ); iRoutableAudios.Append( aRoutableAudio ); } @@ -98,7 +102,7 @@ // EXPORT_C void CRadioAudioRouter::UnRegisterRoutableAudio( CRadioRoutableAudio* aRoutableAudio ) { - LOG( "CRadioAudioRouter::UnRegisterRoutableAudio" ); + LEVEL3( LOG_METHOD_AUTO ); TInt objectIndex = iRoutableAudios.Find( aRoutableAudio ); diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioenginelogger.cpp diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioenginetls.cpp --- a/radioengine/utils/src/cradioenginetls.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradioenginetls.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -42,11 +42,11 @@ // // --------------------------------------------------------------------------- // -void CRadioEngineTls::InitializeL( CCoeEnv* aEnv, RFs* aFs ) +void CRadioEngineTls::InitializeL( RFs* aFs ) { if ( !UserSvr::DllTls( KUidRadioEngineTls ) ) { - CRadioEngineTls* self = new ( ELeave ) CRadioEngineTls( aEnv, aFs ); + CRadioEngineTls* self = new ( ELeave ) CRadioEngineTls( aFs ); CleanupStack::PushL( self ); self->ConstructL(); User::LeaveIfError( UserSvr::DllSetTls( KUidRadioEngineTls, self ) ); @@ -59,9 +59,8 @@ // // --------------------------------------------------------------------------- // -CRadioEngineTls::CRadioEngineTls( CCoeEnv* aEnv, RFs* aFs ) - : iEnv( aEnv ) - , iFs( aFs ) +CRadioEngineTls::CRadioEngineTls( RFs* aFs ) + : iFs( aFs ) { } @@ -72,18 +71,14 @@ // void CRadioEngineTls::ConstructL() { - if ( !iEnv ) - { - iEnv = CCoeEnv::Static(); - } - - if ( !iFs ) + if ( !iFs || !iFs->Handle() ) { iFsOwned = ETrue; iFs = new ( ELeave ) RFs; User::LeaveIfError( iFs->Connect() ); } + #ifdef LOGGING_ENABLED iLogger = CRadioEngineLogger::NewL( *iFs ); #endif // LOGGING_ENABLED @@ -126,16 +121,6 @@ // --------------------------------------------------------------------------- -// Return the eikon environment -// --------------------------------------------------------------------------- -// -CCoeEnv* CRadioEngineTls::Env() - { - return CRadioEngineTls::Instance().iEnv; - } - - -// --------------------------------------------------------------------------- // Returns the file server session // --------------------------------------------------------------------------- // diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiopropertyobserver.cpp --- a/radioengine/utils/src/cradiopropertyobserver.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradiopropertyobserver.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -35,6 +35,7 @@ , iKey( aKey ) , iPropertyType( aPropertyType ) { + LEVEL3( LOG_METHOD_AUTO ); } // ----------------------------------------------------------------------------- @@ -43,6 +44,7 @@ // void CRadioPropertyObserver::ConstructL() { + LEVEL3( LOG_METHOD_AUTO ); switch ( iPropertyType ) { case ERadioPropertyInt: @@ -79,6 +81,7 @@ const TUint aKey, const TRadioPropertyType aPropertyType ) { + LEVEL3( LOG_METHOD_AUTO ); CRadioPropertyObserver* self = new( ELeave )CRadioPropertyObserver( aObserver, aCategory, aKey, aPropertyType ); CleanupStack::PushL( self ); @@ -93,6 +96,7 @@ // CRadioPropertyObserver::~CRadioPropertyObserver() { + LEVEL3( LOG_METHOD_AUTO ); Cancel(); iProperty.Close(); delete iValueByteArray; @@ -105,6 +109,7 @@ // EXPORT_C void CRadioPropertyObserver::ActivateL() { + LEVEL3( LOG_METHOD_AUTO ); if ( !IsActive() ) { RunL(); @@ -117,7 +122,7 @@ // void CRadioPropertyObserver::RunL() { - LOG_METHOD_AUTO; + LEVEL3( LOG_METHOD_AUTO ); iProperty.Subscribe( iStatus ); SetActive(); @@ -173,6 +178,7 @@ // void CRadioPropertyObserver::DoCancel() { + LEVEL3( LOG_METHOD_AUTO ); iProperty.Cancel(); } @@ -182,6 +188,7 @@ // EXPORT_C TInt CRadioPropertyObserver::ValueInt() const { + LEVEL3( LOG_METHOD_AUTO ); return iValueInt; } @@ -191,6 +198,7 @@ // EXPORT_C const TDesC8& CRadioPropertyObserver::ValueDes8() const { + LEVEL3( LOG_METHOD_AUTO ); return *iValueByteArray; } @@ -200,5 +208,6 @@ // EXPORT_C const TDesC& CRadioPropertyObserver::ValueDes() const { + LEVEL3( LOG_METHOD_AUTO ); return *iValueText; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiopubsub.cpp --- a/radioengine/utils/src/cradiopubsub.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* 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: -* -*/ - -#include "cradiopubsub.h" -#include "cradiopubsubimp.h" - -// ======== MEMBER FUNCTIONS ======== - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -EXPORT_C CRadioPubSub* CRadioPubSub::NewL() - { - return CRadioPubSubImp::NewL(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -EXPORT_C CRadioPubSub::~CRadioPubSub() - { - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiopubsubimp.cpp --- a/radioengine/utils/src/cradiopubsubimp.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,562 +0,0 @@ -/* -* 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: -* -*/ - -#include "radiouid.hrh" - -#include "cradioenginelogger.h" -#include "radiointernalpskeys.h" - -#include "mradiocontroleventobserver.h" -#include "cradiopubsub.h" -#include "cradiopubsubimp.h" -#include "radioengineutils.h" - -// This has to be the last include. -#ifdef STUB_CONSTELLATION -# include "RadioStubManager.h" -# define KRadioPSUid KStub_KRadioPSUid -#endif //STUB_CONSTELLATION - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioPubSubImp::CRadioPubSubImp() - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioPubSubImp::ConstructL() - { - RadioEngineUtils::InitializeL(); - LOG_METHOD_AUTO; - - // Define data properties. - DefinePropertyL( KRadioPSDataChannel, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataFrequency, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataRadioPowerState, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataVolume, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataChannelDataChanged, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataTuningState, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataRadioMuteState, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataApplicationRunning, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataHeadsetStatus, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataFrequencyDecimalCount, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataLoudspeakerStatus, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataRdsProgramService, RProperty::EText, ETrue ); - DefinePropertyL( KRadioPSDataRdsRadioText, RProperty::EText, ETrue ); - DefinePropertyL( KRadioPSDataChannelName, RProperty::EText, ETrue ); - DefinePropertyL( KRadioPSDataActivePresetListCount, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataActivePresetListFocus, RProperty::EInt, ETrue ); - DefinePropertyL( KRadioPSDataRadioAntennaState, RProperty::EInt, ETrue ); - - // Define control properties. - DefinePropertyL( KRadioPSControlStepToChannel, RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlSetChannel, RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlSeek, RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlStepToFrequency, RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlSetFrequency, RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlAdjustVolume , RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlSetRadioMuteState, RProperty::EInt, EFalse ); - DefinePropertyL( KRadioPSControlSetAudioOutput, RProperty::EInt, EFalse ); - - // Observe control properties. - CreatePropertyObserverL( KRadioPSControlStepToChannel, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlSetChannel, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlSeek, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlStepToFrequency, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlSetFrequency, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlAdjustVolume, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlSetRadioMuteState, CRadioPropertyObserver::ERadioPropertyInt ); - CreatePropertyObserverL( KRadioPSControlSetAudioOutput, CRadioPropertyObserver::ERadioPropertyInt ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioPubSubImp* CRadioPubSubImp::NewL() - { - CRadioPubSubImp* self = new ( ELeave ) CRadioPubSubImp(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioPubSubImp::~CRadioPubSubImp() - { - iPropertyArray.ResetAndDestroy(); - - DeleteProperty( KRadioPSDataChannel ); - DeleteProperty( KRadioPSDataFrequency ); - DeleteProperty( KRadioPSDataRadioPowerState ); - DeleteProperty( KRadioPSDataVolume ); - DeleteProperty( KRadioPSDataChannelDataChanged ); - DeleteProperty( KRadioPSDataTuningState ); - DeleteProperty( KRadioPSDataRadioMuteState ); - DeleteProperty( KRadioPSDataApplicationRunning ); - DeleteProperty( KRadioPSDataHeadsetStatus ); - DeleteProperty( KRadioPSDataFrequencyDecimalCount ); - DeleteProperty( KRadioPSDataLoudspeakerStatus ); - DeleteProperty( KRadioPSDataRdsProgramService ); - DeleteProperty( KRadioPSDataRdsRadioText ); - DeleteProperty( KRadioPSDataChannelName ); - DeleteProperty( KRadioPSDataActivePresetListCount ); - DeleteProperty( KRadioPSDataActivePresetListFocus ); - DeleteProperty( KRadioPSDataRadioAntennaState ); - - DeleteProperty( KRadioPSControlStepToChannel ); - DeleteProperty( KRadioPSControlSetChannel ); - DeleteProperty( KRadioPSControlSeek ); - DeleteProperty( KRadioPSControlStepToFrequency ); - DeleteProperty( KRadioPSControlSetFrequency ); - DeleteProperty( KRadioPSControlAdjustVolume ); - DeleteProperty( KRadioPSControlSetRadioMuteState ); - DeleteProperty( KRadioPSControlSetAudioOutput ); - - RadioEngineUtils::Release(); - } - -// --------------------------------------------------------------------------- -// Defines a property. -// --------------------------------------------------------------------------- -// -void CRadioPubSubImp::DefinePropertyL( TUint aKey, TInt aAttr, TBool aDataProperty ) const - { - _LIT_SECURITY_POLICY_PASS( KRadioExternalAccessPolicy ); - _LIT_SECURITY_POLICY_S0( KRadioInternalAccessPolicy, KUidRadioApplication ); - - TInt err = KErrNone; - if ( aDataProperty ) - { - // For data properties, grant read access for all, but write access only for radio application - err = RProperty::Define( KRadioPSUid, aKey, aAttr, KRadioExternalAccessPolicy, KRadioInternalAccessPolicy ); - } - else - { - // For control properties, grant read access only for radio application, but write access for all - err = RProperty::Define( KRadioPSUid, aKey, aAttr, KRadioInternalAccessPolicy, KRadioExternalAccessPolicy ); - } - - if ( err && err != KErrAlreadyExists ) - { - LOG_FORMAT( "CRadioPubSubImp::DefinePropertyL: Leaving with %d", err ); - User::Leave( err ); - } - } - -// --------------------------------------------------------------------------- -// Deletes a property -// --------------------------------------------------------------------------- -// -void CRadioPubSubImp::DeleteProperty( TUint aKey ) const - { - RProperty::Delete( KRadioPSUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Creates a property observer -// --------------------------------------------------------------------------- -// -void CRadioPubSubImp::CreatePropertyObserverL( const TUint aKey, - const TInt aPropertyType ) - { - CRadioPropertyObserver* observer = CRadioPropertyObserver::NewL( *this, KRadioPSUid, - aKey, static_cast( aPropertyType ) ); - - if ( iPropertyArray.Append( observer ) == KErrNone ) - { - observer->ActivateL(); - } - else - { - delete observer; - observer = NULL; - } - } - -// --------------------------------------------------------------------------- -// Gets the integer value stored in a property. -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::Get( TUint aKey, TInt& aValue ) const - { - return RProperty::Get( KRadioPSUid, aKey, aValue ) == KErrNone; - } - -// --------------------------------------------------------------------------- -// Sets a property's value. -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::Set( TUint aKey, TInt aValue ) const - { - return RProperty::Set( KRadioPSUid, aKey, aValue ) == KErrNone; - } - -// --------------------------------------------------------------------------- -// Sets a text property value -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::Set( TUint aKey, const TDesC& aValue ) const - { - return RProperty::Set( KRadioPSUid, aKey, aValue ) == KErrNone; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioPubSubImp::HandlePropertyChangeL( const TUid& aCategory, - const TUint aKey, - const TInt aValue ) - { - LOG_FORMAT( "CRadioPubSubImp::HandlePropertyChangeL: Category: %d, Key: %u. Value: %d", - aCategory.iUid, aKey, aValue ); - - if ( aCategory != KRadioPSUid ) - { - LOG( "CRadioPubSubImp::HandlePropertyChangeL: Unknown category. Leaving" ); - User::Leave( KErrArgument ); - } - - if ( !iObserver ) - { - return; - } - - if ( aKey == KRadioPSControlStepToChannel ) - { - if ( aValue == ERadioPSStepToChannelUp ) - { - iObserver->StepToChannelL( RadioEngine::ERadioUp ); - } - else if ( aValue == ERadioPSStepToChannelDown ) - { - iObserver->StepToChannelL( RadioEngine::ERadioDown ); - } - } - else if ( aKey == KRadioPSControlSetChannel ) - { - if ( aValue > 0 ) - { - iObserver->SetChannelL( aValue ); - } - } - else if ( aKey == KRadioPSControlSeek ) - { - if ( aValue == ERadioPSSeekUp ) - { - iObserver->SeekL( RadioEngine::ERadioUp ); - } - else if ( aValue == ERadioPSSeekDown ) - { - iObserver->SeekL( RadioEngine::ERadioDown ); - } - } - else if ( aKey == KRadioPSControlStepToFrequency ) - { - if ( aValue == ERadioPSStepToFrequencyUp ) - { - iObserver->StepToFrequencyL( RadioEngine::ERadioUp ); - } - else if ( aValue == ERadioPSStepToFrequencyDown ) - { - iObserver->StepToFrequencyL( RadioEngine::ERadioDown ); - } - } - else if ( aKey == KRadioPSControlSetFrequency ) - { - if ( aValue > 0 ) - { - iObserver->SetFrequencyL( aValue ); - } - } - else if ( aKey == KRadioPSControlAdjustVolume ) - { - if ( aValue == ERadioPSIncreaseVolume ) - { - iObserver->AdjustVolumeL( RadioEngine::ERadioIncVolume ); - } - else if ( aValue == ERadioPSDecreaseVolume ) - { - iObserver->AdjustVolumeL( RadioEngine::ERadioDecVolume ); - } - } - else if ( aKey == KRadioPSControlSetRadioMuteState ) - { - if ( aValue == ERadioPSMuteStateOn ) - { - iObserver->MuteL( ETrue ); - } - else if ( aValue == ERadioPSMuteStateOff ) - { - iObserver->MuteL( EFalse ); - } - } - else if ( aKey == KRadioPSControlSetAudioOutput ) - { - if ( aValue == ERadioPSAudioOutputHeadset ) - { - iObserver->SetAudioRouteL( RadioEngine::ERadioHeadset ); - } - else if ( aValue == ERadioPSAudioOutputSpeaker ) - { - iObserver->SetAudioRouteL( RadioEngine::ERadioSpeaker ); - } - } - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishChannel( TInt aChannelId ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishChannel ( aChannelId = %d )", aChannelId ); - - TInt oldChannelId = 0; - if ( Get( KRadioPSDataChannel, oldChannelId ) && aChannelId != oldChannelId ) - { - return Set( KRadioPSDataChannel, aChannelId ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishFrequency( TUint32 aFreq ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishFrequency ( aFreq = %u )", aFreq ); - - TInt oldFreq = 0; - if ( Get( KRadioPSDataFrequency, oldFreq ) && aFreq != oldFreq ) - { - return Set( KRadioPSDataFrequency, aFreq ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishPowerState( TBool aPowerOn ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishStateL ( aPowerOn = %d )", aPowerOn ); - // If VR process gets killed, power on state remains published. - // Must not compare state transition here, because then power on might not be published. - TRadioPSRadioPowerState newState = aPowerOn ? ERadioPSRadioPowerOn : ERadioPSRadioPowerOff; - return Set( KRadioPSDataRadioPowerState, newState ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishVolume( TInt aVol ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishVolume ( aVol = %d )", aVol ); - - TInt oldVol = 0; - if ( Get( KRadioPSDataVolume, oldVol ) && aVol != oldVol ) - { - return Set( KRadioPSDataVolume, aVol ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishChannelDataChanged( TInt aChannelId ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishChannelDataChangedL ( aChannelId = %d )", aChannelId ); - - // Channel data changed notifications are allowed for the same channel multiple times, as the same channel's - // data can be changed many times in a row. - - return Set( KRadioPSDataChannelDataChanged, aChannelId ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishTuningState( TRadioPSTuningState aTuningState ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishSeekingStateL ( aTuningState = %d )", aTuningState ); - - TInt oldState = 0; - if ( Get( KRadioPSDataTuningState, oldState ) && aTuningState != oldState ) - { - return Set( KRadioPSDataTuningState, aTuningState ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishRadioMuteState( TBool aMuted ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishMuteStateL ( aMuted = %d )", aMuted ); - - TRadioPSRadioMuteState newState = aMuted ? ERadioPSMuteStateOn : ERadioPSMuteStateOff; - - TInt oldState = 0; - if ( Get( KRadioPSDataRadioMuteState, oldState ) && oldState != newState ) - { - return Set( KRadioPSDataRadioMuteState, newState ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishApplicationRunningState( TRadioPSApplicationRunningState aRunningState ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishApplicationRunningStateL ( aRunningState = %d )", aRunningState ); - // If VR process gets killed, wrong running state remains published. - // Must not compare state transition here, because then application start might not be published. - return Set( KRadioPSDataApplicationRunning, aRunningState ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishHeadsetStatus( TRadioPSHeadsetStatus aHeadsetStatus ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishHeadsetStatusL ( aHeadsetStatus = %d )", aHeadsetStatus ); - - TInt oldStatus = 0; - if ( Get( KRadioPSDataHeadsetStatus, oldStatus ) && aHeadsetStatus != oldStatus ) - { - return Set( KRadioPSDataHeadsetStatus, aHeadsetStatus ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishFrequencyDecimalCount( TRadioPSFrequencyDecimalCount aDecimalCount ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishFrequencyDecimalCountL ( aDecimalCount = %d )", aDecimalCount ); - - TInt oldCount = 0; - if ( Get( KRadioPSDataFrequencyDecimalCount, oldCount ) && aDecimalCount != oldCount ) - { - return Set( KRadioPSDataFrequencyDecimalCount, aDecimalCount ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishLoudspeakerStatus( TRadioPSLoudspeakerStatus aLoudspeakerStatus ) const - { - LOG_FORMAT( "CRadioPubSubImp::PublishLoudspeakerStatusL ( aLoudspeakerStatus = %d )", aLoudspeakerStatus ); - TInt oldStatus = 0; - if ( Get( KRadioPSDataLoudspeakerStatus, oldStatus ) && oldStatus != aLoudspeakerStatus ) - { - return Set( KRadioPSDataLoudspeakerStatus, aLoudspeakerStatus ); - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishRdsProgramService( const TDesC& aProgramService ) const - { - return Set( KRadioPSDataRdsProgramService, aProgramService ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishRdsRadioText( const TDesC& aRadioText ) const - { - return Set( KRadioPSDataRdsRadioText, aRadioText ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishChannelName( const TDesC& aName ) const - { - return Set( KRadioPSDataChannelName, aName ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishActivePreseListCount( TInt aCount ) const - { - return Set( KRadioPSDataActivePresetListCount, aCount ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishActivePreseListFocus( TInt aIndex ) const - { - return Set( KRadioPSDataActivePresetListFocus, aIndex ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioPubSubImp::PublishAntennaState( TRadioPSRadioAntennaState aState ) const - { - return Set( KRadioPSDataRadioAntennaState, aState ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioPubSubImp::SetControlEventObserver( MRadioControlEventObserver* aControlEventObserver ) - { - iObserver = aControlEventObserver; - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioremcontarget.cpp --- a/radioengine/utils/src/cradioremcontarget.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradioremcontarget.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -19,6 +19,7 @@ // User includes #include "cradioremcontarget.h" #include "cradioremcontargetimp.h" +#include "cradioenginelogger.h" // ================= MEMBER FUNCTIONS ======================= @@ -29,6 +30,7 @@ // EXPORT_C CRadioRemConTarget* CRadioRemConTarget::NewL() { + LEVEL3( LOG_METHOD_AUTO ); return CRadioRemConTargetImp::NewL(); } @@ -38,4 +40,5 @@ // CRadioRemConTarget::~CRadioRemConTarget() { + LEVEL3( LOG_METHOD_AUTO ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioremcontargetimp.cpp --- a/radioengine/utils/src/cradioremcontargetimp.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradioremcontargetimp.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -37,6 +37,7 @@ // CRadioRemConTargetImp::CRadioRemConTargetImp() { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -45,6 +46,7 @@ // void CRadioRemConTargetImp::ConstructL() { + LEVEL3( LOG_METHOD_AUTO ); RadioEngineUtils::InitializeL(); // Create interface selector. iInterfaceSelector = CRemConInterfaceSelector::NewL(); @@ -64,6 +66,7 @@ // CRadioRemConTargetImp* CRadioRemConTargetImp::NewL() { + LEVEL3( LOG_METHOD_AUTO ); CRadioRemConTargetImp* self = new ( ELeave ) CRadioRemConTargetImp(); CleanupStack::PushL( self ); self->ConstructL(); @@ -77,6 +80,7 @@ // CRadioRemConTargetImp::~CRadioRemConTargetImp() { + LEVEL3( LOG_METHOD_AUTO ); if ( iRepeatTimer ) { iRepeatTimer->Cancel(); @@ -94,6 +98,7 @@ // void CRadioRemConTargetImp::SetControlEventObserver( MRadioControlEventObserver* aControlEventObserver ) { + LEVEL3( LOG_METHOD_AUTO ); iObserver = aControlEventObserver; } @@ -104,7 +109,8 @@ void CRadioRemConTargetImp::MrccatoCommand( TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct ) { - LOG_FORMAT( "CRadioRemConTargetImp::MrccatoCommand ( aOperationId = %d, aButtonAct = %d )", aOperationId, aButtonAct ); + LOG_METHOD_AUTO; + LOG_FORMAT( "aOperationId = %d, aButtonAct = %d", aOperationId, aButtonAct ); //TODO: Refactor if ( iObserver ) { @@ -261,7 +267,7 @@ void CRadioRemConTargetImp::MrccatoPlay( TRemConCoreApiPlaybackSpeed /*aSpeed*/, TRemConCoreApiButtonAction aButtonAct ) { - LOG( "CRadioRemConTargetImp::MrccatoPlay" ); + LOG_METHOD_AUTO; if ( iObserver ) { if ( aButtonAct == ERemConCoreApiButtonClick ) @@ -280,7 +286,7 @@ TUint /*aMinorChannel*/, TRemConCoreApiButtonAction /*aButtonAct*/) { - LOG( "CRadioRemConTargetImp::MrccatoTuneFunction ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -290,7 +296,7 @@ void CRadioRemConTargetImp::MrccatoSelectDiskFunction( TUint /*aDisk*/, TRemConCoreApiButtonAction /*aButtonAct*/) { - LOG( "CRadioRemConTargetImp::MrccatoSelectDiskFunction ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -300,7 +306,7 @@ void CRadioRemConTargetImp::MrccatoSelectAvInputFunction( TUint8 /*aAvInputSignalNumber*/, TRemConCoreApiButtonAction /*aButtonAct*/) { - LOG( "CRadioRemConTargetImp::MrccatoSelectAvInputFunction ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -310,7 +316,7 @@ void CRadioRemConTargetImp::MrccatoSelectAudioInputFunction( TUint8 /*aAudioInputSignalNumber*/, TRemConCoreApiButtonAction /*aButtonAct*/) { - LOG( "CRadioRemConTargetImp::MrccatoSelectAudioInputFunction ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -319,7 +325,7 @@ // TInt CRadioRemConTargetImp::RepeatTimerCallback( TAny* aPtr ) { - LOG( "CRadioRemConTargetImp::RepeatTimerCallback" ); + LEVEL3( LOG_METHOD_AUTO ); CRadioRemConTargetImp* self = reinterpret_cast( aPtr ); @@ -356,7 +362,8 @@ // void CRadioRemConTargetImp::AnswerCall() { - LOG( "CRadioRemConTargetImp::AnswerCall() ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); + LOG( "This function currently unsupported." ); } // --------------------------------------------------------------------------- @@ -365,7 +372,7 @@ // void CRadioRemConTargetImp::AnswerEndCall() { - LOG( "CRadioRemConTargetImp::AnswerEndCall() " ); + LEVEL3( LOG_METHOD_AUTO ); if ( iObserver ) { TRAP_IGNORE( iObserver->AnswerEndCallL()) @@ -378,7 +385,7 @@ // void CRadioRemConTargetImp::DialCall( const TDesC8& /*aTelNumber*/ ) { - LOG( "CRadioRemConTargetImp::DialCall ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -387,7 +394,7 @@ // void CRadioRemConTargetImp::EndCall() { - LOG( "CRadioRemConTargetImp::EndCall() ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -396,7 +403,7 @@ // void CRadioRemConTargetImp::GenerateDTMF( const TChar /*aChar*/ ) { - LOG( "CRadioRemConTargetImp::GenerateDTMF ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -405,7 +412,7 @@ // void CRadioRemConTargetImp::LastNumberRedial() { - LOG( "CRadioRemConTargetImp::LastNumberRedial ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -414,7 +421,7 @@ // void CRadioRemConTargetImp::MultipartyCalling( const TDesC8& /*aData*/ ) { - LOG( "CRadioRemConTargetImp::MultipartyCalling ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -423,7 +430,7 @@ // void CRadioRemConTargetImp::SpeedDial( const TInt /*aIndex*/ ) { - LOG( "CRadioRemConTargetImp::SpeedDial ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -432,5 +439,5 @@ // void CRadioRemConTargetImp::VoiceDial( const TBool /*aActivate*/ ) { - LOG( "CRadioRemConTargetImp::VoiceDial ( currently unsupported in Visual Radio )" ); + LEVEL3( LOG_METHOD_AUTO ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiorepositoryentitybase.cpp --- a/radioengine/utils/src/cradiorepositoryentitybase.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradiorepositoryentitybase.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -16,6 +16,7 @@ */ #include "cradiorepositoryentitybase.h" +#include "cradioenginelogger.h" // ======== MEMBER FUNCTIONS ======== @@ -23,20 +24,22 @@ // // --------------------------------------------------------------------------- // -CRadioRepositoryEntityBase::CRadioRepositoryEntityBase( const TUid& aUid, +EXPORT_C CRadioRepositoryEntityBase::CRadioRepositoryEntityBase( const TUid& aUid, TUint32 aKey, MRadioRepositoryEntityObserver& aObserver, CActive::TPriority aPriority ) : CActive( aPriority ), iObserver( aObserver ), iUid( aUid ), iKey( aKey ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -CRadioRepositoryEntityBase::~CRadioRepositoryEntityBase() +EXPORT_C CRadioRepositoryEntityBase::~CRadioRepositoryEntityBase() { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -54,5 +57,6 @@ // TUint32 CRadioRepositoryEntityBase::Key() const { + LEVEL3( LOG_METHOD_AUTO ); return iKey; } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiorepositorymanager.cpp --- a/radioengine/utils/src/cradiorepositorymanager.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* 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: -* -*/ - -#include "cradiorepositorymanager.h" -#include "cradiorepositorymanagerimp.h" -#include "radioengineutils.h" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -EXPORT_C CRadioRepositoryManager* CRadioRepositoryManager::NewL( TInt aGranularity ) - { - return CRadioRepositoryManagerImp::NewL( aGranularity ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -EXPORT_C CRadioRepositoryManager::~CRadioRepositoryManager() - { - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt aValue ) - { - CRadioRepositoryManagerImp::SetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TReal& aValue ) - { - CRadioRepositoryManagerImp::SetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ) - { - CRadioRepositoryManagerImp::SetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ) - { - CRadioRepositoryManagerImp::SetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt& aValue ) - { - CRadioRepositoryManagerImp::GetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TReal& aValue ) - { - CRadioRepositoryManagerImp::GetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes8& aValue ) - { - CRadioRepositoryManagerImp::GetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -EXPORT_C void CRadioRepositoryManager::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes16& aValue ) - { - CRadioRepositoryManagerImp::GetRepositoryValueL( aUid, aKey, aValue ); - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiorepositorymanagerimp.cpp --- a/radioengine/utils/src/cradiorepositorymanagerimp.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,454 +0,0 @@ -/* -* 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: -* -*/ - -#include "cradiorepositoryentity.h" -#include "cradiorepositorymanager.h" -#include "cradiorepositorymanagerimp.h" -#include "radioengineutils.h" - -const TInt KVRRepositoryObserverArrayGranularity = 2; - -// ======== LOCAL FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Panics the application. -// --------------------------------------------------------------------------- -// -void Panic( TInt aReason ) - { - _LIT( category, "CRadioRepositoryManagerImp" ); - User::Panic( category, aReason ); - } - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRepositoryManagerImp* CRadioRepositoryManagerImp::NewL( TInt aGranularity ) - { - CRadioRepositoryManagerImp* self = new ( ELeave ) CRadioRepositoryManagerImp( aGranularity ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::ConstructL() - { - RadioEngineUtils::InitializeL(); - CheckRepositoryKeysL(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRepositoryManagerImp::CRadioRepositoryManagerImp( TInt aGranularity ) - : iObservers( KVRRepositoryObserverArrayGranularity ) - , iEntities( aGranularity ) - , iEnableSave( ETrue ) - { - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioRepositoryManagerImp::~CRadioRepositoryManagerImp() - { - iObservers.Close(); - iEntities.ResetAndDestroy(); - RadioEngineUtils::Release(); - } - -// --------------------------------------------------------------------------- -// Adds observer -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::AddObserverL( MRadioRepositoryEntityObserver* aObserver ) - { - iObservers.AppendL( aObserver ); - } - -// --------------------------------------------------------------------------- -// Removes observer -// --------------------------------------------------------------------------- -// - void CRadioRepositoryManagerImp::RemoveObserver( MRadioRepositoryEntityObserver* aObserver ) - { - TInt objectIndex = iObservers.Find( aObserver ); - - if ( objectIndex != KErrNotFound ) - { - iObservers.Remove( objectIndex ); - } - } - -// --------------------------------------------------------------------------- -// Enables or disables the saving of entities. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::EnableSave( TBool aEnable ) - { - iEnableSave = aEnable; - } - -// --------------------------------------------------------------------------- -// Adds an entity. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::AddEntityL( const TUid& aUid, TUint32 aKey, TRadioEntityType aType ) - { - CRadioRepositoryEntityBase* entity = NULL; - - switch ( aType ) - { - case ERadioEntityInt: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - case ERadioEntityReal: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - case ERadioEntityDes8: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - case ERadioEntityDes16: - entity = CRadioRepositoryEntity::NewL( aUid, aKey, *this ); - break; - default: - User::Leave( KErrNotSupported ); - break; - } - - CleanupStack::PushL( entity ); - iEntities.AppendL( entity ); - CleanupStack::Pop( entity ); - } - -// --------------------------------------------------------------------------- -// Removes an entity. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::RemoveEntity( const TUid& aUid, TUint32 aKey ) - { - TInt idx = EntityIndex( aUid, aKey ); - - if ( idx >= 0 ) - { - CRadioRepositoryEntityBase* entity = iEntities[idx]; - iEntities.Remove( idx ); - iEntities.GranularCompress(); - delete entity; - } - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, TInt aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, const TReal& aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::SetEntityValue( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ) - { - return DoSetEntityValue( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::EntityValueInt( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -const TReal& CRadioRepositoryManagerImp::EntityValueReal( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -const TDesC8& CRadioRepositoryManagerImp::EntityValueDes8( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -const TDesC16& CRadioRepositoryManagerImp::EntityValueDes16( const TUid& aUid, TUint32 aKey ) const - { - return DoEntityValue( aUid, aKey ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TReal& aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC8& aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::SetRepositoryValueL( const TUid& aUid, TUint32 aKey, const TDesC16& aValue ) - { - DoSetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TInt& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TReal& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes8& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Gets the value of a repository key. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::GetRepositoryValueL( const TUid& aUid, TUint32 aKey, TDes16& aValue ) - { - DoGetRepositoryValueL( aUid, aKey, aValue ); - } - -// --------------------------------------------------------------------------- -// Sets an entity's value. -// --------------------------------------------------------------------------- -// -template -TInt CRadioRepositoryManagerImp::DoSetEntityValue( const TUid& aUid, TUint32 aKey, const T& aValue ) - { - TInt idx = EntityIndex( aUid, aKey ); - - // If the entity could not be found, panic the application. - __ASSERT_ALWAYS( idx >= 0, ::Panic( KErrArgument ) ); - - return static_cast*>( iEntities[idx] )->SetValue( aValue, iEnableSave ); - } - -// --------------------------------------------------------------------------- -// Returns an entity's value. -// --------------------------------------------------------------------------- -// -template -const T& CRadioRepositoryManagerImp::DoEntityValue( const TUid& aUid, TUint32 aKey ) const - { - TInt idx = EntityIndex( aUid, aKey ); - - // If the entity could not be found, panic the application. - __ASSERT_ALWAYS( idx >= 0, ::Panic( KErrArgument ) ); - - return static_cast*>( iEntities[idx] )->Value(); - } - -// --------------------------------------------------------------------------- -// Sets a key's value in the repository. -// --------------------------------------------------------------------------- -// -template -void CRadioRepositoryManagerImp::DoSetRepositoryValueL( const TUid& aUid, TUint32 aKey, const T& aValue ) - { - CRepository* repository = CRepository::NewLC( aUid ); - User::LeaveIfError( repository->Set( aKey, aValue ) ); - CleanupStack::PopAndDestroy( repository ); - } - -// --------------------------------------------------------------------------- -// Returns a key's value in the repository. -// --------------------------------------------------------------------------- -// -template -void CRadioRepositoryManagerImp::DoGetRepositoryValueL( const TUid& aUid, TUint32 aKey, T& aValue ) - { - CRepository* repository = CRepository::NewLC( aUid ); - User::LeaveIfError( repository->Get( aKey, aValue ) ); - CleanupStack::PopAndDestroy( repository ); - } - -// --------------------------------------------------------------------------- -// Returns the entity's index that matches the supplied arguments. -// --------------------------------------------------------------------------- -// -TInt CRadioRepositoryManagerImp::EntityIndex( const TUid& aUid, TUint32 aKey ) const - { - TInt idx = KErrNotFound; - - for ( TInt i = 0; i < iEntities.Count(); i++ ) - { - CRadioRepositoryEntityBase* entity = iEntities[i]; - if ( entity->Uid() == aUid && entity->Key() == aKey ) - { - idx = i; - break; - } - } - - return idx; - } - -// --------------------------------------------------------------------------- -// SIS installation does not update central repository, this checks that the new keys are in the repository. -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::CheckRepositoryKeysL() - { - // After adding a new cenrep key to radiointernalcrkeys.h, add it also here with a default value - /* - CRepository* repository = CRepository::NewLC( KVRCRUid ); - - TInt ret = repository->Create( KVRCRNewValue, TInt( 123 ) ); - if ( ret != KErrAlreadyExists ) - { - User::LeaveIfError( ret ); - } - - CleanupStack::PopAndDestroy( repository ); - */ - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, TInt aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, const TReal& aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, const TDesC8& aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } - -// --------------------------------------------------------------------------- -// Forwards the repository value changes -// --------------------------------------------------------------------------- -// -void CRadioRepositoryManagerImp::HandleRepositoryValueChangeL( const TUid& aUid, - TUint32 aKey, const TDesC16& aValue, TInt aError ) - { - for ( TInt i = 0; i < iObservers.Count(); i++ ) - { - iObservers[i]->HandleRepositoryValueChangeL( aUid, aKey, aValue, aError ); - } - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradioroutableaudio.cpp --- a/radioengine/utils/src/cradioroutableaudio.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradioroutableaudio.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -21,6 +21,7 @@ // User includes #include "cradioroutableaudio.h" #include "cradioaudiorouter.h" +#include "cradioenginelogger.h" // --------------------------------------------------------------------------- @@ -30,6 +31,7 @@ EXPORT_C CRadioRoutableAudio::CRadioRoutableAudio( CRadioAudioRouter* aAudioRouter ) : iAudioRouter( aAudioRouter ) { + LEVEL3( LOG_METHOD_AUTO ); iAudioRouter->RegisterRoutableAudio( this ); } @@ -51,6 +53,7 @@ // EXPORT_C void CRadioRoutableAudio::SetAudioOutput( CAudioOutput* aAudioOutput ) { + LEVEL3( LOG_METHOD_AUTO ); delete iAudioOutput; iAudioOutput = aAudioOutput; } @@ -61,6 +64,7 @@ // EXPORT_C void CRadioRoutableAudio::DeleteAudioOutput() { + LEVEL3( LOG_METHOD_AUTO ); delete iAudioOutput; iAudioOutput = NULL; } @@ -71,6 +75,7 @@ // EXPORT_C void CRadioRoutableAudio::SetAudioRouteL( RadioEngine::TRadioAudioRoute aRoute ) { + LEVEL3( LOG_METHOD_AUTO ); if ( iAudioOutput ) { iAudioOutput->SetAudioOutputL( aRoute == RadioEngine::ERadioSpeaker ? CAudioOutput::EPublic @@ -84,6 +89,7 @@ // EXPORT_C TBool CRadioRoutableAudio::AudioRoutingSupported() const { + LEVEL3( LOG_METHOD_AUTO ); #ifdef __WINS__ return ETrue; #else diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiosystemeventcollector.cpp --- a/radioengine/utils/src/cradiosystemeventcollector.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradiosystemeventcollector.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -18,6 +18,7 @@ // User includes #include "cradiosystemeventcollector.h" #include "cradiosystemeventcollectorimp.h" +#include "cradioenginelogger.h" // ======== MEMBER FUNCTIONS ======== @@ -28,6 +29,7 @@ // EXPORT_C CRadioSystemEventCollector* CRadioSystemEventCollector::NewL() { + LEVEL3( LOG_METHOD_AUTO ); return CRadioSystemEventCollectorImp::NewL(); } @@ -37,4 +39,5 @@ // EXPORT_C CRadioSystemEventCollector::~CRadioSystemEventCollector() { + LEVEL3( LOG_METHOD_AUTO ); } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiosystemeventcollectorimp.cpp --- a/radioengine/utils/src/cradiosystemeventcollectorimp.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradiosystemeventcollectorimp.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -17,7 +17,6 @@ // System includes #include -#include // User includes #include "cradioaccessoryobserver.h" @@ -36,6 +35,7 @@ CRadioSystemEventCollectorImp::CRadioSystemEventCollectorImp() : iSystemEventObservers( KVRObserverArrayGranularity ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -44,15 +44,12 @@ // void CRadioSystemEventCollectorImp::ConstructL() { + LEVEL3( LOG_METHOD_AUTO ); RadioEngineUtils::InitializeL(); iSystemEventDetector = CRadioSystemEventDetector::NewL( *this ); iHeadsetObserver = CRadioAccessoryObserver::NewL(); iHeadsetObserver->SetObserver( this ); - - TInt criticalLevel; - CRadioRepositoryManager::GetRepositoryValueL( KCRUidUiklaf, - KUikOODDiskCriticalThreshold, criticalLevel ); } // --------------------------------------------------------------------------- @@ -61,6 +58,7 @@ // CRadioSystemEventCollectorImp* CRadioSystemEventCollectorImp::NewL() { + LEVEL3( LOG_METHOD_AUTO ); CRadioSystemEventCollectorImp* self = new( ELeave ) CRadioSystemEventCollectorImp; CleanupStack::PushL( self ); self->ConstructL(); @@ -74,6 +72,7 @@ // CRadioSystemEventCollectorImp::~CRadioSystemEventCollectorImp() { + LEVEL3( LOG_METHOD_AUTO ); delete iSystemEventDetector; delete iHeadsetObserver; @@ -87,6 +86,7 @@ // void CRadioSystemEventCollectorImp::AddObserverL( MRadioSystemEventObserver* aHeadsetObserver ) { + LEVEL3( LOG_METHOD_AUTO ); iSystemEventObservers.AppendL( aHeadsetObserver ); } @@ -96,6 +96,7 @@ // void CRadioSystemEventCollectorImp::RemoveObserver( MRadioSystemEventObserver* aSystemObserver ) { + LEVEL3( LOG_METHOD_AUTO ); TInt objectIndex = iSystemEventObservers.Find( aSystemObserver ); if ( objectIndex != KErrNotFound ) @@ -110,6 +111,7 @@ // TBool CRadioSystemEventCollectorImp::IsMobileNetworkCoverage() const { + LEVEL3( LOG_METHOD_AUTO ); return iSystemEventDetector->IsMobileNetworkCoverage(); } @@ -119,6 +121,7 @@ // TBool CRadioSystemEventCollectorImp::IsNetworkCoverage() const { + LEVEL3( LOG_METHOD_AUTO ); return iSystemEventDetector->IsNetworkCoverage(); } @@ -128,6 +131,7 @@ // TBool CRadioSystemEventCollectorImp::IsCallActive() const { + LEVEL3( LOG_METHOD_AUTO ); return iSystemEventDetector->IsCallActive(); } @@ -137,6 +141,7 @@ // TBool CRadioSystemEventCollectorImp::IsAudioResourcesAvailable() const { + LEVEL3( LOG_METHOD_AUTO ); return iSystemEventDetector->IsAudioResourcesAvailable(); } @@ -145,23 +150,17 @@ // --------------------------------------------------------------------------- TBool CRadioSystemEventCollectorImp::IsHeadsetConnectedL() const { + LEVEL3( LOG_METHOD_AUTO ); return iHeadsetObserver->IsHeadsetConnectedL(); } // --------------------------------------------------------------------------- -// Getter Vocie UI state -// --------------------------------------------------------------------------- -TBool CRadioSystemEventCollectorImp::IsVoiceUiActive() const - { - return iSystemEventDetector->IsVoiceUiActive(); - } - -// --------------------------------------------------------------------------- // Notifies the observers of system event // --------------------------------------------------------------------------- // void CRadioSystemEventCollectorImp::NotifyObserversL( TRadioSystemEventType aEvent ) { + LEVEL3( LOG_METHOD_AUTO ); for ( TInt i = 0; i < iSystemEventObservers.Count(); ++i ) { iSystemEventObservers[i]->HandleSystemEventL( aEvent ); @@ -174,6 +173,7 @@ // void CRadioSystemEventCollectorImp::NetworkUpCallbackL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioNetworkCoverageUp ); } @@ -183,6 +183,7 @@ // void CRadioSystemEventCollectorImp::NetworkDownCallbackL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioNetworkCoverageDown ); } @@ -192,6 +193,7 @@ // void CRadioSystemEventCollectorImp::CallActivatedCallbackL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioCallActivated ); } @@ -201,6 +203,7 @@ // void CRadioSystemEventCollectorImp::CallDeactivatedCallbackL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioCallDeactivated ); } @@ -210,6 +213,7 @@ // void CRadioSystemEventCollectorImp::AudioResourcesAvailableL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioAudioResourcesAvailable ); } @@ -219,6 +223,7 @@ // void CRadioSystemEventCollectorImp::AudioAutoResumeForbiddenL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioAudioAutoResumeForbidden ); } @@ -226,9 +231,10 @@ // From class MRadioSystemEventDetectorObserver. // --------------------------------------------------------------------------- // -void CRadioSystemEventCollectorImp::ErrorCallbackL( TInt DEBUGVAR( aError ) ) +void CRadioSystemEventCollectorImp::ErrorCallbackL( TInt DEBUGVAR3( aError ) ) { - LOG_FORMAT( "CRadioSystemEventCollectorImp::ErrorCallbackL - %d", aError ); + LEVEL3( LOG_METHOD_AUTO ); + LEVEL3( LOG_FORMAT( "aError = %d", aError ) ); // P&S get fail not considered as a critical issue. } @@ -238,6 +244,7 @@ // void CRadioSystemEventCollectorImp::HeadsetConnectedCallbackL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioHeadsetConnected ); } @@ -247,6 +254,7 @@ // void CRadioSystemEventCollectorImp::HeadsetDisconnectedCallbackL() { + LEVEL3( LOG_METHOD_AUTO ); NotifyObserversL( ERadioHeadsetDisconnected ); } @@ -256,6 +264,7 @@ // void CRadioSystemEventCollectorImp::AudioRouteChangedL( RadioEngine::TRadioAudioRoute aRoute ) { + LEVEL3( LOG_METHOD_AUTO ); TRadioSystemEventType ev = ERadioAudioRouteHeadset; if ( aRoute != RadioEngine::ERadioHeadset ) { diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/cradiosystemeventdetector.cpp --- a/radioengine/utils/src/cradiosystemeventdetector.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/cradiosystemeventdetector.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -30,11 +30,6 @@ #include #include -#ifdef COMPILE_IN_IVALO -# include -#endif //COMPILE_IN_IVALO -#include - // User includes #include "cradioenginelogger.h" #include "cradiosystemeventdetector.h" @@ -61,11 +56,10 @@ CRadioSystemEventDetector::CRadioSystemEventDetector( MRadioSystemEventDetectorObserver& aObserver ) : iObserver( aObserver ) , iIsMobileNetworkCoverage( EFalse ) - , iIsWlanCoverage( EFalse ) , iIsCallActive( EFalse ) , iIsAudioResourcesAvailable( ETrue ) - , iIsVoiceUiActive( EFalse ) { + LEVEL3( LOG_METHOD_AUTO ); } // --------------------------------------------------------------------------- @@ -74,11 +68,7 @@ // void CRadioSystemEventDetector::ConstructL() { -// FeatureManager::InitializeLibL(); -// TBool wlanSupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan ); -// FeatureManager::UnInitializeLib(); - TBool wlanSupported = EFalse; //TODO: Check if we have any need for this - + LOG_METHOD_AUTO; iNetworkStatusObserver = CRadioPropertyObserver::NewL( *this, KUidSystemCategory, KUidNetworkStatusValue, @@ -87,12 +77,6 @@ iIsMobileNetworkCoverage = iNetworkStatusObserver->ValueInt() == ESANetworkAvailable; - // On S60 platform, there is no guaranteed way of seeing whether WLAN is explicitly turned off - // in the settings, or whether the network is available. For now, we only check the existence of - // the WLAN support in the feature manager. We might also want to check whether WLAN access points - // have been configured. - iIsWlanCoverage = wlanSupported; - // Initialize call state observer. iCallStatusObserver = CRadioPropertyObserver::NewL( *this, KPSUidCtsyCallInformation, @@ -101,15 +85,6 @@ iCallStatusObserver->ActivateL(); iIsCallActive = iCallStatusObserver->ValueInt() != EPSCTsyCallStateNone; -#ifdef COMPILE_IN_IVALO - // Initialize voice ui observer. - iVoiceUiObserver = CRadioPropertyObserver::NewL( *this, - KPSUidVoiceUiAccMonitor, - KVoiceUiOpenKey, - CRadioPropertyObserver::ERadioPropertyInt ); - iVoiceUiObserver->ActivateL(); -#endif //COMPILE_IN_IVALO - #ifndef __WINS__ // Define audio types for not resuming. iNoAutoResumeAudioCategories = RArray( KVRAudioCategoryArrayGranularity ); @@ -129,10 +104,9 @@ // CRadioSystemEventDetector::~CRadioSystemEventDetector() { - FeatureManager::UnInitializeLib(); + LEVEL3( LOG_METHOD_AUTO ); delete iCallStatusObserver; delete iNetworkStatusObserver; - delete iVoiceUiObserver; delete iAudioPolicyObserver; iNoAutoResumeAudioCategories.Close(); @@ -144,6 +118,7 @@ // CRadioSystemEventDetector* CRadioSystemEventDetector::NewL( MRadioSystemEventDetectorObserver& aObserver ) { + LEVEL3( LOG_METHOD_AUTO ); CRadioSystemEventDetector* self = new ( ELeave ) CRadioSystemEventDetector( aObserver ); CleanupStack::PushL( self ); self->ConstructL(); @@ -161,28 +136,8 @@ const TUint aKey, const TInt aValue ) { - //TODO: Refactor - if ( aCategory == KUidSystemCategory && aKey == KUidNetworkStatusValue ) - { - switch ( aValue ) - { - case ESANetworkAvailable: - { - SetNetworkCoverageL( ETrue, iIsWlanCoverage ); - break; - } - case ESANetworkUnAvailable: - { - SetNetworkCoverageL( EFalse, iIsWlanCoverage ); - break; - } - default: - { - break; - } - } - } - else if ( aCategory == KPSUidCtsyCallInformation && aKey == KCTsyCallState ) + LEVEL2( LOG_METHOD_AUTO ); + if ( aCategory == KPSUidCtsyCallInformation && aKey == KCTsyCallState ) { if ( (!iIsCallActive ) && ( aValue > EPSCTsyCallStateNone )) { @@ -194,48 +149,6 @@ iIsCallActive = EFalse; iObserver.CallDeactivatedCallbackL(); } - else - { - // No change - } - } -#ifdef COMPILE_IN_IVALO - else if ( aCategory == KPSUidVoiceUiAccMonitor && aKey == KVoiceUiOpenKey ) - { - switch ( aValue ) - { - case KVoiceUiIsClose: - { - if ( iIsVoiceUiActive ) - { - iIsVoiceUiActive = EFalse; - LOG( "Voice UI not active." ); - if ( iIsAudioResourcesAvailable ) - { - LOG( "Audio resources available. Change informed." ); - iObserver.AudioResourcesAvailableL(); - } - } - break; - } - case KVoiceUiIsOpen: - { - if ( !iIsVoiceUiActive ) - { - iIsVoiceUiActive = ETrue; - LOG( "Voice UI active." ); - } - break; - } - default: - { - break; - } - } - } -#endif //COMPILE_IN_IVALO - else // NOP - { } } @@ -251,7 +164,7 @@ const TDesC8& aValue ) { #if 0 - LOG_METHOD_AUTO; + LEVEL2( LOG_METHOD_AUTO ); LOG_FORMAT( "Category: %d, Key: %d", aCategory, aKey ); if ( aCategory == KPSUidMMFAudioServer ) { @@ -349,24 +262,10 @@ // an error // --------------------------------------------------------------------------- // -void CRadioSystemEventDetector::HandlePropertyChangeErrorL( const TUid& aCategory, - const TUint aKey, - TInt aError ) +void CRadioSystemEventDetector::HandlePropertyChangeErrorL( const TUid& /*aCategory*/, + const TUint /*aKey*/, + TInt /*aError*/ ) { -#ifdef COMPILE_IN_IVALO - if ( aCategory == KPSUidVoiceUiAccMonitor && aKey == KVoiceUiOpenKey && aError == KErrNotFound ) - { - HandlePropertyChangeL( KPSUidVoiceUiAccMonitor, KVoiceUiOpenKey, KVoiceUiIsClose ); - } - else - { - iObserver.ErrorCallbackL( aError ); - } -#else - (void)aCategory; - (void)aKey; - (void)aError; -#endif //COMPILE_IN_IVALO } // --------------------------------------------------------------------------- @@ -375,6 +274,7 @@ // TBool CRadioSystemEventDetector::IsMobileNetworkCoverage() const { + LEVEL3( LOG_METHOD_AUTO ); return iIsMobileNetworkCoverage; } @@ -384,7 +284,8 @@ // TBool CRadioSystemEventDetector::IsNetworkCoverage() const { - return iIsWlanCoverage || iIsMobileNetworkCoverage; + LEVEL3( LOG_METHOD_AUTO ); + return iIsMobileNetworkCoverage; } // --------------------------------------------------------------------------- @@ -393,6 +294,7 @@ // TBool CRadioSystemEventDetector::IsCallActive() const { + LEVEL3( LOG_METHOD_AUTO ); return iIsCallActive; } @@ -402,41 +304,6 @@ // TBool CRadioSystemEventDetector::IsAudioResourcesAvailable() const { + LEVEL3( LOG_METHOD_AUTO ); return iIsAudioResourcesAvailable; } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CRadioSystemEventDetector::IsVoiceUiActive() const - { - return iIsVoiceUiActive; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioSystemEventDetector::SetNetworkCoverageL( const TBool aIsMobileNetworkCoverage, - const TBool aIsWlanCoverage ) - { - LOG_FORMAT( "CRadioSystemEventDetector::SetNetworkCoverageL ( mobile = %d wlan = %d )", aIsMobileNetworkCoverage, aIsWlanCoverage ); - - TBool wasCoverage = IsNetworkCoverage(); - iIsMobileNetworkCoverage = aIsMobileNetworkCoverage; - iIsWlanCoverage = aIsWlanCoverage; - TBool isCoverage = IsNetworkCoverage(); - - if ( isCoverage != wasCoverage ) - { - if ( isCoverage ) - { - iObserver.NetworkUpCallbackL(); - } - else - { - iObserver.NetworkDownCallbackL(); - } - } - } diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/src/radioengineutils.cpp --- a/radioengine/utils/src/radioengineutils.cpp Fri Jun 11 16:24:13 2010 +0100 +++ b/radioengine/utils/src/radioengineutils.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -27,9 +27,9 @@ // // --------------------------------------------------------------------------- // -EXPORT_C void RadioEngineUtils::InitializeL( CCoeEnv* aCoeEnv ) +EXPORT_C void RadioEngineUtils::InitializeL() { - CRadioEngineTls::InitializeL( aCoeEnv ); + CRadioEngineTls::InitializeL(); CRadioEngineTls::Instance().AddRef(); } @@ -52,15 +52,6 @@ } // --------------------------------------------------------------------------- -// Return the cone environment -// --------------------------------------------------------------------------- -// -EXPORT_C CCoeEnv* RadioEngineUtils::Env() - { - return CRadioEngineTls::Instance().Env(); - } - -// --------------------------------------------------------------------------- // Returns the file server session // --------------------------------------------------------------------------- // diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/bwins/fmradioengineutils_stubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/bwins/fmradioengineutils_stubu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,32 @@ +EXPORTS + ?ValueDes8@CRadioPropertyObserver@@QBEABVTDesC8@@XZ @ 1 NONAME ; class TDesC8 const & CRadioPropertyObserver::ValueDes8(void) const + ?SetAudioRouteL@CRadioRoutableAudio@@QAEXW4TRadioAudioRoute@RadioEngine@@@Z @ 2 NONAME ; void CRadioRoutableAudio::SetAudioRouteL(enum RadioEngine::TRadioAudioRoute) + ??0CRadioRoutableAudio@@QAE@PAVCRadioAudioRouter@@@Z @ 3 NONAME ; CRadioRoutableAudio::CRadioRoutableAudio(class CRadioAudioRouter *) + ?InitializeL@RadioEngineUtils@@SAXXZ @ 4 NONAME ; void RadioEngineUtils::InitializeL(void) + ?NewL@CRadioRemConTarget@@SAPAV1@XZ @ 5 NONAME ; class CRadioRemConTarget * CRadioRemConTarget::NewL(void) + ??1CRadioRepositoryEntityBase@@UAE@XZ @ 6 NONAME ; CRadioRepositoryEntityBase::~CRadioRepositoryEntityBase(void) + ??1TRadioMethodLogger@@QAE@XZ @ 7 NONAME ; TRadioMethodLogger::~TRadioMethodLogger(void) + ??1CRadioRoutableAudio@@UAE@XZ @ 8 NONAME ; CRadioRoutableAudio::~CRadioRoutableAudio(void) + ?SetAudioOutput@CRadioRoutableAudio@@IAEXPAVCAudioOutput@@@Z @ 9 NONAME ; void CRadioRoutableAudio::SetAudioOutput(class CAudioOutput *) + ?RegisterRoutableAudio@CRadioAudioRouter@@QAEXPAVCRadioRoutableAudio@@@Z @ 10 NONAME ; void CRadioAudioRouter::RegisterRoutableAudio(class CRadioRoutableAudio *) + ?ReadFrequencyStringLC@RadioEngineUtils@@SAPAVHBufC16@@KHH@Z @ 11 NONAME ; class HBufC16 * RadioEngineUtils::ReadFrequencyStringLC(unsigned long, int, int) + ?ValueDes@CRadioPropertyObserver@@QBEABVTDesC16@@XZ @ 12 NONAME ; class TDesC16 const & CRadioPropertyObserver::ValueDes(void) const + ??0CRadioRepositoryEntityBase@@IAE@ABVTUid@@KAAVMRadioRepositoryEntityObserver@@W4TPriority@CActive@@@Z @ 13 NONAME ; CRadioRepositoryEntityBase::CRadioRepositoryEntityBase(class TUid const &, unsigned long, class MRadioRepositoryEntityObserver &, enum CActive::TPriority) + ??1CRadioSystemEventCollector@@UAE@XZ @ 14 NONAME ; CRadioSystemEventCollector::~CRadioSystemEventCollector(void) + ??1CRadioAudioRouter@@UAE@XZ @ 15 NONAME ; CRadioAudioRouter::~CRadioAudioRouter(void) + ?ActivateL@CRadioPropertyObserver@@QAEXXZ @ 16 NONAME ; void CRadioPropertyObserver::ActivateL(void) + ?Logger@RadioEngineUtils@@SAPAVMRadioEngineLogger@@XZ @ 17 NONAME ; class MRadioEngineLogger * RadioEngineUtils::Logger(void) + ?NewL@CRadioSystemEventCollector@@SAPAV1@XZ @ 18 NONAME ; class CRadioSystemEventCollector * CRadioSystemEventCollector::NewL(void) + ?Logger@MRadioEngineLogger@@SAPAV1@XZ @ 19 NONAME ; class MRadioEngineLogger * MRadioEngineLogger::Logger(void) + ?Release@RadioEngineUtils@@SAXXZ @ 20 NONAME ; void RadioEngineUtils::Release(void) + ?DeleteAudioOutput@CRadioRoutableAudio@@IAEXXZ @ 21 NONAME ; void CRadioRoutableAudio::DeleteAudioOutput(void) + ?FormatFrequencyString@RadioEngineUtils@@SAXAAVTDes16@@KHAAVTDesC16@@@Z @ 22 NONAME ; void RadioEngineUtils::FormatFrequencyString(class TDes16 &, unsigned long, int, class TDesC16 &) + ?ValueInt@CRadioPropertyObserver@@QBEHXZ @ 23 NONAME ; int CRadioPropertyObserver::ValueInt(void) const + ?SetAudioRouteL@CRadioAudioRouter@@QAEXW4TRadioAudioRoute@RadioEngine@@@Z @ 24 NONAME ; void CRadioAudioRouter::SetAudioRouteL(enum RadioEngine::TRadioAudioRoute) + ?NewL@CRadioAudioRouter@@SAPAV1@AAVMRadioAudioRoutingObserver@@@Z @ 25 NONAME ; class CRadioAudioRouter * CRadioAudioRouter::NewL(class MRadioAudioRoutingObserver &) + ?FsSession@RadioEngineUtils@@SAAAVRFs@@XZ @ 26 NONAME ; class RFs & RadioEngineUtils::FsSession(void) + ?UnRegisterRoutableAudio@CRadioAudioRouter@@QAEXPAVCRadioRoutableAudio@@@Z @ 27 NONAME ; void CRadioAudioRouter::UnRegisterRoutableAudio(class CRadioRoutableAudio *) + ?AudioRoutingSupported@CRadioRoutableAudio@@QBEHXZ @ 28 NONAME ; int CRadioRoutableAudio::AudioRoutingSupported(void) const + ?NewL@CRadioPropertyObserver@@SAPAV1@AAVMRadioPropertyChangeObserver@@ABVTUid@@IW4TRadioPropertyType@1@@Z @ 29 NONAME ; class CRadioPropertyObserver * CRadioPropertyObserver::NewL(class MRadioPropertyChangeObserver &, class TUid const &, unsigned int, enum CRadioPropertyObserver::TRadioPropertyType) + ??0TRadioMethodLogger@@QAE@PBG0@Z @ 30 NONAME ; TRadioMethodLogger::TRadioMethodLogger(unsigned short const *, unsigned short const *) + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/eabi/fmradioengineutils_stubu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/eabi/fmradioengineutils_stubu.def Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,49 @@ +EXPORTS + _ZN16RadioEngineUtils11InitializeLEv @ 1 NONAME + _ZN16RadioEngineUtils21FormatFrequencyStringER6TDes16miR7TDesC16 @ 2 NONAME + _ZN16RadioEngineUtils21ReadFrequencyStringLCEmii @ 3 NONAME + _ZN16RadioEngineUtils6LoggerEv @ 4 NONAME + _ZN16RadioEngineUtils7ReleaseEv @ 5 NONAME + _ZN16RadioEngineUtils9FsSessionEv @ 6 NONAME + _ZN17CRadioAudioRouter14SetAudioRouteLEN11RadioEngine16TRadioAudioRouteE @ 7 NONAME + _ZN17CRadioAudioRouter21RegisterRoutableAudioEP19CRadioRoutableAudio @ 8 NONAME + _ZN17CRadioAudioRouter23UnRegisterRoutableAudioEP19CRadioRoutableAudio @ 9 NONAME + _ZN17CRadioAudioRouter4NewLER26MRadioAudioRoutingObserver @ 10 NONAME + _ZN17CRadioAudioRouterD0Ev @ 11 NONAME + _ZN17CRadioAudioRouterD1Ev @ 12 NONAME + _ZN17CRadioAudioRouterD2Ev @ 13 NONAME + _ZN18CRadioRemConTarget4NewLEv @ 14 NONAME + _ZN18MRadioEngineLogger6LoggerEv @ 15 NONAME + _ZN18TRadioMethodLoggerC1EPKtS1_ @ 16 NONAME + _ZN18TRadioMethodLoggerC2EPKtS1_ @ 17 NONAME + _ZN18TRadioMethodLoggerD1Ev @ 18 NONAME + _ZN18TRadioMethodLoggerD2Ev @ 19 NONAME + _ZN19CRadioRoutableAudio14SetAudioOutputEP12CAudioOutput @ 20 NONAME + _ZN19CRadioRoutableAudio14SetAudioRouteLEN11RadioEngine16TRadioAudioRouteE @ 21 NONAME + _ZN19CRadioRoutableAudio17DeleteAudioOutputEv @ 22 NONAME + _ZN19CRadioRoutableAudioC1EP17CRadioAudioRouter @ 23 NONAME + _ZN19CRadioRoutableAudioC2EP17CRadioAudioRouter @ 24 NONAME + _ZN19CRadioRoutableAudioD0Ev @ 25 NONAME + _ZN19CRadioRoutableAudioD1Ev @ 26 NONAME + _ZN19CRadioRoutableAudioD2Ev @ 27 NONAME + _ZN22CRadioPropertyObserver4NewLER28MRadioPropertyChangeObserverRK4TUidjNS_18TRadioPropertyTypeE @ 28 NONAME + _ZN22CRadioPropertyObserver9ActivateLEv @ 29 NONAME + _ZN26CRadioRepositoryEntityBaseC2ERK4TUidmR30MRadioRepositoryEntityObserverN7CActive9TPriorityE @ 30 NONAME + _ZN26CRadioRepositoryEntityBaseD0Ev @ 31 NONAME + _ZN26CRadioRepositoryEntityBaseD1Ev @ 32 NONAME + _ZN26CRadioRepositoryEntityBaseD2Ev @ 33 NONAME + _ZN26CRadioSystemEventCollector4NewLEv @ 34 NONAME + _ZN26CRadioSystemEventCollectorD0Ev @ 35 NONAME + _ZN26CRadioSystemEventCollectorD1Ev @ 36 NONAME + _ZN26CRadioSystemEventCollectorD2Ev @ 37 NONAME + _ZNK19CRadioRoutableAudio21AudioRoutingSupportedEv @ 38 NONAME + _ZNK22CRadioPropertyObserver8ValueDesEv @ 39 NONAME + _ZNK22CRadioPropertyObserver8ValueIntEv @ 40 NONAME + _ZNK22CRadioPropertyObserver9ValueDes8Ev @ 41 NONAME + _ZTI15CRadioEngineTls @ 42 NONAME + _ZTI19CRadioRoutableAudio @ 43 NONAME + _ZTI26CRadioRepositoryEntityBase @ 44 NONAME + _ZTV15CRadioEngineTls @ 45 NONAME + _ZTV19CRadioRoutableAudio @ 46 NONAME + _ZTV26CRadioRepositoryEntityBase @ 47 NONAME + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/group/bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,28 @@ +/* +* 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 the License "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: +* +*/ + +#include "../../../group/buildflags.hrh" + +#include + +PRJ_PLATFORMS +WINSCW ARMV5 + +PRJ_EXPORTS + +PRJ_MMPFILES +radioengineutils_stub.mmp diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/group/radioengineutils_stub.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/group/radioengineutils_stub.mmp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,80 @@ +/* +* 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 the License "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: +* +*/ + +#include "../../../group/buildflags.hrh" + +#include + +#include + +TARGET fmradioengineutils_stub.dll +TARGETTYPE DLL +UID 0x1000008D 0x01000002 +VERSION 10.0 + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT +PAGED +SMPSAFE + +USERINCLUDE ../inc +USERINCLUDE ../../api +USERINCLUDE ../../inc +USERINCLUDE /sf/mw/mmmw/mmserv/radioutility/inc +USERINCLUDE /sf/mw/mmmw/mmserv/inc +USERINCLUDE /sf/mw/mmmw/inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/remcon +SYSTEMINCLUDE /epoc32/include/internal +SYSTEMINCLUDE /epoc32/include/mmf/common +SYSTEMINCLUDE /epoc32/include/platform/mw + +SOURCEPATH ../../src +SOURCE radioengineutils.cpp +SOURCE cradioenginetls.cpp +SOURCE cradioroutableaudio.cpp +SOURCE cradioaudiorouter.cpp +SOURCE cradiopropertyobserver.cpp +SOURCE cradioremcontarget.cpp +SOURCE cradiorepositoryentitybase.cpp +SOURCE cradiosystemeventcollector.cpp +SOURCE cradiosystemeventcollectorimp.cpp +SOURCE cradiosystemeventdetector.cpp +SOURCE cradioenginelogger.cpp + +SOURCEPATH ../src +SOURCE cradioaccessoryobserver_stub.cpp +SOURCE cradioremcontargetimp_stub.cpp + +LIBRARY bafl.lib +LIBRARY accclient.lib +LIBRARY accpolicy.lib +LIBRARY centralrepository.lib +LIBRARY commonengine.lib +LIBRARY efsrv.lib +LIBRARY euser.lib +LIBRARY cone.lib +LIBRARY remconcoreapi.lib +LIBRARY remconextensionapi.lib +LIBRARY remconinterfacebase.lib +LIBRARY featmgr.lib +LIBRARY flogger.lib +LIBRARY Radio_Utility_Stub.lib +LIBRARY RadioSession_Stub.lib // SRadioStubManager functions + +MACRO STUB_CONSTELLATION diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/inc/cradioaccessoryobserver_stub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/inc/cradioaccessoryobserver_stub.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,90 @@ +/* +* 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 the License "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: +* +*/ + +#ifndef CRADIOACCESSORYOBSERVERSTUB_H +#define CRADIOACCESSORYOBSERVERSTUB_H + +#include +#include +#include +#include + +class MRadioHeadsetEventObserver; + +/** + * Observer of accessory states. + * + * Instance of this class observes notifications of headset state changes. + * In its turn it sends notifications to its observer of those changes. + * + */ +NONSHARABLE_CLASS( CRadioAccessoryObserver ): public CBase +{ +public: + + /** + * C++ default constructor. + */ + CRadioAccessoryObserver(); + + /** + * Static constructor. + */ + static CRadioAccessoryObserver* NewL(); + + /** + * Destructor. + */ + virtual ~CRadioAccessoryObserver(); + + /** + * Sets observer. The observer will be notified when headset has been + * pressed or headset is connected/disconnected. + * + * @param aObserver Observer + */ + void SetObserver( MRadioHeadsetEventObserver* aObserver ); + + /** + * Tells if there is a headset connected. + * + * @return ETrue if headset accessory is connected, + * EFalse otherwise + */ + TBool IsHeadsetConnectedL() const; + +private: + + /** + * By default Symbian 2nd phase constructor is private. + * + * @param aAccessoryServer Existing session for The Accessory Server. + */ + void ConstructL(); + + +private: // data + + // RadioStubManager pointer points inside RadioStubManagerChunk + SRadioStubManager* iRadioStubManager; + + // RadioStubManagerChunk handle + RChunk iRadioStubManagerChunk; + +}; + +#endif // CRADIOACCESSORYOBSERVERSTUB_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/inc/cradioremcontargetimp_stub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/inc/cradioremcontargetimp_stub.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,116 @@ +/* +* 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: +* +*/ + +#ifndef CRADIOREMCONTARGETIMP_H +#define CRADIOREMCONTARGETIMP_H + +// System includes +#include +#include +#include + +// User includes +#include "cradioremcontarget.h" + +// Forward declarations +class CRemConCallHandlingTarget; +class CRemConCoreApiTarget; +class CRemConInterfaceSelector; + +// Class declaration + +/** + * Media key listener + */ +NONSHARABLE_CLASS( CRadioRemConTargetImp ) : public CRadioRemConTarget + , public MRemConCoreApiTargetObserver + , public MRemConCallHandlingTargetObserver + { +public: + + static CRadioRemConTargetImp* NewL(); + + virtual ~CRadioRemConTargetImp(); + +private: + +// from base class CRadioRemConTarget + + void SetControlEventObserver( MRadioControlEventObserver* aControlEventObserver ); + +// from base class MRemConCoreApiTargetObserver + + void MrccatoCommand( TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct ); + void MrccatoPlay( TRemConCoreApiPlaybackSpeed aSpeed, TRemConCoreApiButtonAction aButtonAct ); + void MrccatoTuneFunction( TBool aTwoPart, TUint aMajorChannel, TUint aMinorChannel, TRemConCoreApiButtonAction aButtonAct ); + void MrccatoSelectDiskFunction( TUint aDisk, TRemConCoreApiButtonAction aButtonAct ); + void MrccatoSelectAvInputFunction( TUint8 aAvInputSignalNumber, TRemConCoreApiButtonAction aButtonAct ); + void MrccatoSelectAudioInputFunction( TUint8 aAudioInputSignalNumber, TRemConCoreApiButtonAction aButtonAct ); + +// from base class MRemConCallHandlingTargetObserver + + void AnswerCall(); + void AnswerEndCall(); + void DialCall( const TDesC8& aTelNumber ); + void EndCall(); + void GenerateDTMF( const TChar aChar ); + void LastNumberRedial(); + void MultipartyCalling( const TDesC8& aData ); + void SpeedDial( const TInt aIndex ); + void VoiceDial( const TBool aActivate ); + +private: + + CRadioRemConTargetImp(); + + void ConstructL(); + + /** + * Callback for repeat timer. + * @param aPtr Pointer to this class. + */ + static TInt RepeatTimerCallback( TAny* aPtr ); + +private: // data + + /** Pointer to observer in UI side, can be NULL. Not owned. */ + MRadioControlEventObserver* iObserver; + + /** RemCon interface selector. */ + CRemConInterfaceSelector* iInterfaceSelector; + + /** RemCon Core API target class. */ + CRemConCoreApiTarget* iCoreTarget; + + /** RemCon Call API target class. */ + CRemConCallHandlingTarget* iCallTarget; + + /** Timer for generating repeat events. */ + CPeriodic* iRepeatTimer; + + /** Operation id to repeat. */ + TRemConCoreApiOperationId iRepeatId; + + // RadioStubManager pointer points inside RadioStubManagerChunk + SRadioStubManager* iRadioStubManager; + + // RadioStubManagerChunk handle + RChunk iRadioStubManagerChunk; + + }; + +#endif // CRADIOREMCONTARGETIMP_H diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/src/cradioaccessoryobserver_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/src/cradioaccessoryobserver_stub.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,113 @@ +/* +* 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 the License "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: +* +*/ + +#include "cradioenginelogger.h" + +#include "cradioaccessoryobserver_stub.h" +#include "mradioheadseteventobserver.h" + +#define STUB iRadioStubManager->iAccessoryObserver + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioAccessoryObserver::CRadioAccessoryObserver() + { + LOG_METHOD_AUTO; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioAccessoryObserver::ConstructL() + { + LOG_METHOD_AUTO; + // Open chunk for test configuration/control data + TInt err = iRadioStubManagerChunk.OpenGlobal( + KRadioStubManagerLocalChunkName, + EFalse, // == Read | Write + EOwnerThread ); + User::LeaveIfError( err ); + if ( sizeof(SRadioStubManager) > iRadioStubManagerChunk.MaxSize() ) + { + User::Leave( KErrTooBig ); + } + TUint8* basePtr = iRadioStubManagerChunk.Base(); + User::LeaveIfNull( basePtr ); + iRadioStubManager = (SRadioStubManager*)basePtr; + if ( STUB.iLeaveNewL.iError ) + { + User::Leave( STUB.iLeaveNewL.iError ); + } + if ( STUB.iLeaveConstructL.iError ) + { + User::Leave( STUB.iLeaveConstructL.iError ); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioAccessoryObserver* CRadioAccessoryObserver::NewL() + { + LOG_METHOD_AUTO; + CRadioAccessoryObserver* self = new( ELeave ) CRadioAccessoryObserver; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioAccessoryObserver::~CRadioAccessoryObserver() + { + LOG_METHOD_AUTO; + iRadioStubManagerChunk.Close(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CRadioAccessoryObserver::IsHeadsetConnectedL() const + { + LOG_METHOD_AUTO; + if ( STUB.iLeaveIsHeadsetConnectedL.iError ) + { + User::Leave( STUB.iLeaveIsHeadsetConnectedL.iError ); + } + return STUB.iHeadsetConnected; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioAccessoryObserver::SetObserver( MRadioHeadsetEventObserver* aObserver ) + { + LOG_METHOD_AUTO; + STUB.iObserver = aObserver; + } + diff -r 6bcf277166c1 -r 451b2e1545b2 radioengine/utils/stub/src/cradioremcontargetimp_stub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioengine/utils/stub/src/cradioremcontargetimp_stub.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,460 @@ +/* +* 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 the License "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: +* +*/ + +// System includes +#include +#include +#include + +// User includes +#include "cradioenginelogger.h" +#include "cradioremcontargetimp_stub.h" +#include "mradiocontroleventobserver.h" +#include "radioengineutils.h" + +#define STUB iRadioStubManager->iRemConTarget + +// Constants +const TInt KVRVolumeTimerInitialDelay = 0; // Initial timer for headset volume up/down press event should expire immediately + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioRemConTargetImp::CRadioRemConTargetImp() + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::ConstructL() + { + LOG_METHOD_AUTO;; + // Open chunk for test configuration/control data + TInt err = iRadioStubManagerChunk.OpenGlobal( + KRadioStubManagerLocalChunkName, + EFalse, // == Read | Write + EOwnerThread ); + User::LeaveIfError( err ); + if ( sizeof(SRadioStubManager) > iRadioStubManagerChunk.MaxSize() ) + { + User::Leave( KErrTooBig ); + } + TUint8* basePtr = iRadioStubManagerChunk.Base(); + User::LeaveIfNull( basePtr ); + iRadioStubManager = (SRadioStubManager*)basePtr; + if ( STUB.iLeaveNewL.iError ) + { + User::Leave( STUB.iLeaveNewL.iError ); + } + if ( STUB.iLeaveConstructL.iError ) + { + User::Leave( STUB.iLeaveConstructL.iError ); + } + STUB.iRemConCoreApiTargetObserver = this; + STUB.iRemConCallHandlingTargetObserver = this; + RadioEngineUtils::InitializeL(); + // Create interface selector. + //iInterfaceSelector = CRemConInterfaceSelector::NewL(); + // Create a new CRemConCoreApiTarget, owned by the interface selector. + //iCoreTarget = CRemConCoreApiTarget::NewL( *iInterfaceSelector, *this ); + // Create a new CRemConCallHandlingTarget, owned by the interface selector. + //iCallTarget = CRemConCallHandlingTarget::NewL( *iInterfaceSelector, *this ); + // Start being a target. + //iInterfaceSelector->OpenTargetL(); + // Create repeat timer. + iRepeatTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioRemConTargetImp* CRadioRemConTargetImp::NewL() + { + LOG_METHOD_AUTO;; + CRadioRemConTargetImp* self = new ( ELeave ) CRadioRemConTargetImp(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CRadioRemConTargetImp::~CRadioRemConTargetImp() + { + LOG_METHOD_AUTO;; + if ( iRepeatTimer ) + { + iRepeatTimer->Cancel(); + } + delete iRepeatTimer; + //delete iInterfaceSelector; //deletes also iCallTarget and iCoreTarget + //iCoreTarget = NULL; + //iCallTarget = NULL; + RadioEngineUtils::Release(); + iRadioStubManagerChunk.Close(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::SetControlEventObserver( MRadioControlEventObserver* aControlEventObserver ) + { + LOG_METHOD_AUTO;; + iObserver = aControlEventObserver; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MrccatoCommand( TRemConCoreApiOperationId aOperationId, + TRemConCoreApiButtonAction aButtonAct ) + { + LOG_FORMAT( "aOperationId = %d, aButtonAct = %d", aOperationId, aButtonAct ); + LOG_METHOD_AUTO; + //TODO: Refactor + if ( iObserver ) + { + switch ( aOperationId ) + { + case ERemConCoreApiChannelUp: + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->ChannelUpL( ETrue ); iObserver->ChannelUpL( EFalse )) + } + else if ( aButtonAct == ERemConCoreApiButtonPress ) + { + TRAP_IGNORE( iObserver->ChannelUpL( ETrue )) + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) + { + TRAP_IGNORE( iObserver->ChannelUpL( EFalse )) + } + else {} + break; + } + case ERemConCoreApiChannelDown: + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->ChannelDownL( ETrue ); iObserver->ChannelDownL( EFalse )) + } + else if ( aButtonAct == ERemConCoreApiButtonPress ) + { + TRAP_IGNORE( iObserver->ChannelDownL( ETrue )) + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) + { + TRAP_IGNORE( iObserver->ChannelDownL( EFalse )) + } + else {} + break; + } + case ERemConCoreApiVolumeUp: + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->VolumeUpL( ETrue ); iObserver->VolumeUpL( EFalse )) + } + else if ( aButtonAct == ERemConCoreApiButtonPress ) + { + iRepeatTimer->Cancel(); + iRepeatId = ERemConCoreApiVolumeUp; +// iRepeatTimer->Start( KVRVolumeTimerInitialDelay, KAknStandardKeyboardRepeatRate, TCallBack( RepeatTimerCallback, this )); + iRepeatTimer->Start( KVRVolumeTimerInitialDelay, 1000000, TCallBack( RepeatTimerCallback, this )); + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) + { + iRepeatTimer->Cancel(); + } + else {} + break; + } + case ERemConCoreApiVolumeDown: + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->VolumeDownL( ETrue ); iObserver->VolumeDownL( EFalse )) + } + else if ( aButtonAct == ERemConCoreApiButtonPress ) + { + iRepeatTimer->Cancel(); + iRepeatId = ERemConCoreApiVolumeDown; +// iRepeatTimer->Start( KVRVolumeTimerInitialDelay, KAknStandardKeyboardRepeatRate, TCallBack( RepeatTimerCallback, this )); + iRepeatTimer->Start( KVRVolumeTimerInitialDelay, 1000000, TCallBack( RepeatTimerCallback, this )); + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) + { + iRepeatTimer->Cancel(); + } + else {} + break; + } + case ERemConCoreApiStop: + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->StopL( ETrue ); iObserver->StopL( EFalse )) + } + break; + } + case ERemConCoreApiBackward: + case ERemConCoreApiRewind: + { + if ( aButtonAct == ERemConCoreApiButtonPress ) + { + TRAP_IGNORE( iObserver->RewindL( ETrue )) + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) + { + TRAP_IGNORE( iObserver->RewindL( EFalse )) + } + else if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->BackwardL( ETrue ); iObserver->BackwardL( EFalse )) + } + else {} + break; + } + case ERemConCoreApiForward: + case ERemConCoreApiFastForward: + { + if ( aButtonAct == ERemConCoreApiButtonPress ) + { + TRAP_IGNORE( iObserver->FastForwardL( ETrue )) + } + else if ( aButtonAct == ERemConCoreApiButtonRelease ) + { + TRAP_IGNORE( iObserver->FastForwardL( EFalse )) + } + else if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->ForwardL( ETrue ); iObserver->ForwardL( EFalse )) + } + else {} + break; + } + case ERemConCoreApiPlay: + case ERemConCoreApiPause: + case ERemConCoreApiPausePlayFunction: + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->PausePlayL( ETrue ); iObserver->PausePlayL( EFalse )) + } + break; + } + default: + { + break; + } + } + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MrccatoPlay( TRemConCoreApiPlaybackSpeed /*aSpeed*/, + TRemConCoreApiButtonAction aButtonAct ) + { + LOG_METHOD_AUTO; + if ( iObserver ) + { + if ( aButtonAct == ERemConCoreApiButtonClick ) + { + TRAP_IGNORE( iObserver->PlayL( ETrue ); iObserver->PlayL( EFalse )) + } + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MrccatoTuneFunction( TBool /*aTwoPart*/, + TUint /*aMajorChannel*/, + TUint /*aMinorChannel*/, + TRemConCoreApiButtonAction /*aButtonAct*/) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MrccatoSelectDiskFunction( TUint /*aDisk*/, + TRemConCoreApiButtonAction /*aButtonAct*/) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MrccatoSelectAvInputFunction( TUint8 /*aAvInputSignalNumber*/, + TRemConCoreApiButtonAction /*aButtonAct*/) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MrccatoSelectAudioInputFunction( TUint8 /*aAudioInputSignalNumber*/, + TRemConCoreApiButtonAction /*aButtonAct*/) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CRadioRemConTargetImp::RepeatTimerCallback( TAny* aPtr ) + { + LOG_METHOD_AUTO; + + CRadioRemConTargetImp* self = reinterpret_cast( aPtr ); + + if ( self ) + { + if ( self->iObserver ) + { + switch ( self->iRepeatId ) + { + case ERemConCoreApiVolumeUp: + { + TRAP_IGNORE( self->iObserver->VolumeUpL( ETrue ); self->iObserver->VolumeUpL( EFalse )) + break; + } + case ERemConCoreApiVolumeDown: + { + TRAP_IGNORE( self->iObserver->VolumeDownL( ETrue ); self->iObserver->VolumeDownL( EFalse )) + break; + } + default: + { + break; + } + } + } + } + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::AnswerCall() + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::AnswerEndCall() + { + LOG_METHOD_AUTO; + if ( iObserver ) + { + TRAP_IGNORE( iObserver->AnswerEndCallL()) + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::DialCall( const TDesC8& /*aTelNumber*/ ) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::EndCall() + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::GenerateDTMF( const TChar /*aChar*/ ) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::LastNumberRedial() + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::MultipartyCalling( const TDesC8& /*aData*/ ) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::SpeedDial( const TInt /*aIndex*/ ) + { + LOG_METHOD_AUTO; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CRadioRemConTargetImp::VoiceDial( const TBool /*aActivate*/ ) + { + LOG_METHOD_AUTO; + } diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/buildflags.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/buildflags.pri Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,82 @@ +# +# 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: +# + +# ########################################################## +# Start of Flag definitions +# Add or remove comments to disable or enable the features +# ########################################################## + +# ########################################################## +# Start of Logging flag definitions +# ########################################################## + +# Full logging flag that enables the full logging including also timestamps +# Enabled by default in debug builds +CONFIG(debug, debug|release) : LOGGING_FLAGS += LOGGING_ENABLED + +# Uncomment to enable full logging in release builds +# LOGGING_FLAGS *= LOGGING_ENABLED + +# Timestamp logging flag that enables only timestamp logging +# LOGGING_FLAGS += TIMESTAMP_LOGGING_ENABLED + +# Combines Ui and Engine logs by feeding UI traces to the engine logger +# LOGGING_FLAGS += COMBINE_WITH_ENGINE_LOGGER + +# Logging level +# 1 - Normal level +# 2 - More verbose level +# 3 - Most verbose level +LOGGING_FLAGS += LOGGING_LEVEL=1 + +# Select which radio component is being logged +# 1 - Radio application +# 2 - Radio homescreen widget +LOGGING_FLAGS += LOGGED_COMPONENT=2 + +contains(LOGGING_FLAGS, TIMESTAMP_LOGGING_ENABLED)|contains(LOGGING_FLAGS, LOGGING_ENABLED) { + + # Writes debug prints to file if enabled + #LOGGING_FLAGS += TRACE_TO_FILE + + # Settings for the log file name + symbian:contains(LOGGING_FLAGS, TRACE_TO_FILE) { + LOGGING_FLAGS += \"TRACE_OUTPUT_FILE=\\\"c:/logs/radio/radiohswidget.txt\\\"\" + LOGGING_FLAGS += FILTER_BY_LOGMARKER=true + } +} + +# Method for testing signal-slot connections +# 1 - Log failed connection +# 2 - Log failed connection and halt debugger +LOGGING_FLAGS += CONNECT_TEST_MODE=2 + +# Logging is always enabled in Win32 environment +win32:LOGGING_FLAGS *= LOGGING_ENABLED + +DEFINES += $$LOGGING_FLAGS + +# ########################################################## +# End of Flag definitions +# ########################################################## + +# $$_PRO_FILE_PWD_ points to the directory of the pro file +MOC_DIR = $$_PRO_FILE_PWD_/tmp +RCC_DIR = $$_PRO_FILE_PWD_/tmp +OBJECTS_DIR = $$_PRO_FILE_PWD_/tmp +UI_DIR = $$_PRO_FILE_PWD_/tmp +UI_HEADERS_DIR = $$_PRO_FILE_PWD_/tmp +UI_SOURCES_DIR = $$_PRO_FILE_PWD_/tmp diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/inc/radiohswidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/inc/radiohswidget.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,261 @@ +/* +* 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: FM Radio home screen widget +* +*/ + +#ifndef RADIOHSWIDGET_H +#define RADIOHSWIDGET_H + +// System includes +#include + +// Forward declarations +class HbLabel; +class HbPushButton; +class XQSettingsManager; +class XQSettingsKey; +class RadioHsWidgetProfileReader; +class RadioHsWidgetRadioServiceClient; +class QGraphicsLinearLayout; + +/*! + \namespace FmRadio + \brief Wraps enumerators for radio state and service request visibility. + */ +namespace FmRadio +{ + /*! Enum for radio application states. */ + enum State + { + StateUndefined, + StateNotRunning, + StateStarting, + StateRunning, + StateSeeking, + StateAntennaNotConnected, + StateClosing + }; + + /*! Enum for controlling the visibility of the radio application. */ + enum VisibiltyAfterRequest + { + VisibiltyDoNotChange, + VisibiltyToForeground, + VisibiltyToBackground + }; + +} + +class RadioHsWidget : public HbWidget +{ + Q_OBJECT + +public: + RadioHsWidget(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0); + ~RadioHsWidget(); + + void handleRadioInformationChange(const int informationType, + const QVariant &information); + void handleRadioStateChange(const QVariant &value); + +private: + /*! Enum for information area layout states. */ + enum InformationAreaLayout + { + OneRow, + TwoRows, + Animation + }; + + /*! Enum for control button identifier. */ + enum ControlButtonIdentifier{ + Power, + Previous, + Next + }; + + /*! Enum for control button state. */ + enum ControlButtonState{ + Normal, + Pressed, + Disabled, + Latched + }; + + + /*! Enum for information types published by radio. */ + enum FmRadioInformationType { + Frequency, + StationName, + RadioText, + DynamicPsName, + Pty + }; + +signals: + + /* + This signal allows your widget to save its properties persistently. + Once properties are saved, the user may close and reopen the widget, + and the stored properties will still be available. The names + parameter contains names for the properties you want to store. The + home screen framework reads the corresponding property values from + the widget by calling QObject::property() method. Currently only + QString type properties are supported. The home screen framework + writes widget's properties just before calling the onInitialize slot. + Both compile-time and dynamic properties are supported. Optional. + */ + //void setPreferences(const QStringList &names); + + /* + Your widget can notify the home screen framework about its completion + by emitting this signal. With the current implementation, the + framework removes the widget after receiving this signal. Optional. + */ + //void finished(); + + /*! + Widget can notify the home screen framework about errors in its + execution by emitting this signal. With the current implementation, + the framework removes the widget after receiving this signal. + Optional. + */ + void error(); + +public slots: + /* These slots (prefixed with "on") are called by the home screen + * framework for controlling the widget's state during its lifetime. + * They are automatically connected by the framework. + */ + + /* Implement this slot if you want to be notified when your widget is + * added to the home screen. Upon receiving this event, your widget can + * perform any necessary initialization operations, such as preparing + * connections and allocating resources. Optional. + */ + void onInitialize(); + + /* This slot is called when your widget is shown in the home screen. You + * use this slot to activate your widget and begin processing data again + * after being quiescent. Each home screen compatible widget must define + * this slot. Mandatory. + */ + void onShow(); + + /* This slot is called when your widget is hidden from the home screen. + * You use this function to deactivate your widget and put it into a + * quiescent state. Each home screen compatible widget must define this + * slot. Mandatory. + */ + void onHide(); + + /* Implement this slot if you want to be notified when your widget is + * removed from the home screen. Upon receiving this event, your widget + * should perform any necessary cleanup operations, such as remove cache + * files, and release any resources it currently holds. Optional. + */ + //void onUninitialize(); + + + void changeButtonToPressed(int controlButtonId); + void changeButtonToReleased(int controlButtonId); + +private slots: + void closeRadio(); + void changeToPreviousStation(); + void changeToNextStation(); + void changeRadioToForeground(); + void changeRadioToBackground(); + void toggleRadioPower(); + +private: + void load(const QString &docml); + + void handleSimilarRadioInformation( + const FmRadioInformationType informationType, + const QVariant &information); + bool updateRadioInformation(const FmRadioInformationType informationType, + const QString &information); + void changeInRadioInformation(); + void clearRadioInformation(); + + void changeInformationAreaLayout(const InformationAreaLayout layout); + void changePowerButtonOn(const bool isPowerOn); + void enableStationButtons(); + void defineButton(HbPushButton &target, const QString &graphicsId, + const QStringList &suffix, const QString &icon, + const QString &iconColor); + void buttonEvent(ControlButtonIdentifier buttonId, + const ControlButtonState state); + void changeButtonToDisabled(int controlButtonId); + void changeButtonToEnabled(int controlButtonId); + + bool radioStartPermission(); + +private: + // Data + Q_DISABLE_COPY(RadioHsWidget) + + // UI components. + /*! Button for capturing taps on information area. */ + HbPushButton *mInformationAreaBackgroundButton; + /*! Control button for power. */ + HbPushButton *mPowerButton; + /*! Control button for previous station. */ + HbPushButton *mPreviousButton; + /*! Control button for next station. */ + HbPushButton *mNextButton; + /*! Layout for information area. */ + QGraphicsWidget *mInformationAreaTwoRowsLayout; + /*! Label that is shown when there is only one row of information. */ + HbLabel *mInformationLonelyRowLabel; + /*! Label for first row when there is two rows of information. */ + HbLabel *mInformationFirstRowLabel; + // TODO: This label should be modified to support marquee scrolling when Orbit supports it. + /*! Label for first second when there is two rows of information. */ + HbLabel *mInformationSecondRowLabel; + /*! Label for displaying animation. */ + HbLabel *mAnimationIcon; + + /*! Stores the state of the FM Radio application. */ + FmRadio::State mFmRadioState; + + /*! Stores the count of favorite stations. */ + int mFavoriteStationCount; + /*! Stores the value whether the current station is favorite or not. */ + bool mCurrentStationIsFavorite; + + /*! Stores the radio information. */ + QHash mRadioInformation; + /*! + String is used to format the text shown on first or only row from + radio information. + */ + QString mRadioInformationFirstRow; + /*! + String is used to format the text shown on second row from + radio information. + */ + QString mRadioInformationSecondRow; + + /*! Profile monitor is used to read P&S keys and profile information. */ + RadioHsWidgetProfileReader *mProfileMonitor; + + /*! For communicating with the FM Radio through Qt Highway. */ + RadioHsWidgetRadioServiceClient *mRadioServiceClient; + +}; + +#endif // RADIOHSWIDGET_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/inc/radiohswidgetplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/inc/radiohswidgetplugin.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,37 @@ +/* +* 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: FM Radio home screen widget plugin +* +*/ + +#ifndef RADIOHSWIDGETPLUGIN_H +#define RADIOHSWIDGETPLUGIN_H + +#include +#include + +QTM_USE_NAMESPACE + +class RadioHsWidgetPlugin : public QObject, public QServicePluginInterface +{ + Q_OBJECT + Q_INTERFACES(QtMobility::QServicePluginInterface) + +public: + QObject *createInstance(const QServiceInterfaceDescriptor &descriptor, + QServiceContext *context, + QAbstractSecuritySession *session); +}; + +#endif // RADIOHSWIDGETPLUGIN_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/inc/radiohswidgetprofilereader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/inc/radiohswidgetprofilereader.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,64 @@ +/* +* 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 profile reader +* +*/ + +#ifndef RADIOHSWIDGETPROFILEREADER_H_ +#define RADIOHSWIDGETPROFILEREADER_H_ + +// System includes +#include +#include + +// Forward declarations +class RadioHsWidget; +class XQSettingsManager; +class XQSettingsKey; + +class RadioHsWidgetProfileReader : public QObject +{ +Q_OBJECT + +public: + explicit RadioHsWidgetProfileReader(RadioHsWidget *parent = 0); + virtual ~RadioHsWidgetProfileReader(); + + void startMonitoringRadioRunningStatus(); + + bool isCurrentProfileOffline(); + +public slots: + void handleDeletedItem(const XQSettingsKey &key); + void handleChanges(const XQSettingsKey &key, const QVariant &value); + +private: + void radioRunningStatus(const QVariant &value); + +private: // data + /*! + Stores the reference to parent. This is used to call parents + functions when notifications are received. + */ + RadioHsWidget &mParent; + /*! For getting values and notifications of changes from P&S keys. */ + XQSettingsManager *mSettingsManager; + /*! + Stores internally the status of radio application read from the P&S + key. + */ + int mRadioStatus; +}; + +#endif /* RADIOHSWIDGETPROFILEREADER_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/inc/radiohswidgetradioserviceclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/inc/radiohswidgetradioserviceclient.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,81 @@ +/* +* 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 radio service client +* +*/ + +#ifndef RADIOHSWIDGETRADIOSERVICECLIENT_H_ +#define RADIOHSWIDGETRADIOSERVICECLIENT_H_ + +// System includes +#include +#include + +// User includes +#include "radiohswidget.h" +#include "radioservicedef.h" + +class RadioHsWidgetRadioServiceClient : public QObject +{ +Q_OBJECT + +public: + explicit RadioHsWidgetRadioServiceClient(RadioHsWidget *parent = 0); + virtual ~RadioHsWidgetRadioServiceClient(); + +public: + void commandFmRadio(const RadioServiceCommand::CommandId command); + void startMonitoring( + const FmRadio::VisibiltyAfterRequest visibility); + void stopMonitoring(); + QVariant createRadioNotificationData(int type, const QVariant& data); + +private slots: + void handleError(const int errorCode, const QString &errorMessage); + void handleFmRadioChange(const QVariant &value); + +private: + void handleRequestError(const int error); + + void createControlServiceRequest(); + void createMonitorServiceRequest(); + + void sendMonitorRequest( + const FmRadio::VisibiltyAfterRequest visibility); + void sendControlRequest(const QVariant &argument, + const FmRadio::VisibiltyAfterRequest visibility); + + void prepareRequestInfo(XQAiwRequest *request, + const FmRadio::VisibiltyAfterRequest visibility); + +private: // data + /*! + Stores the reference to parent. This is used to call parents + functions when notifications are received. + */ + RadioHsWidget &mParent; + /*! Is the request send. */ + bool mRequestPending; + /*! For service and interface listings and request creation. */ + XQApplicationManager mApplicationManager; + /*! Asynchronous monitoring request. */ + XQAiwRequest* mRadioMonitorRequest; + /*! Synchronous control request. */ + XQAiwRequest* mRadioControlRequest; + + /*! Is the first monitoring request done. */ + bool mDataInitialized; +}; + +#endif /* RADIOHSWIDGETRADIOSERVICECLIENT_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/locales/compile_ts.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/locales/compile_ts.bat Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,26 @@ +:: +:: 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: +:: + +@echo off + +set QM_FILE=fmradiohswidget.qm +set QM_FILE_EN_US=fmradiohswidget_en_us.qm +set QM_LOCATION=./ + + +ECHO Creating QM file +call lrelease -idbased fmradiohswidget.ts -qm %QM_LOCATION%%QM_FILE% +REM call lrelease -idbased fmradiohswidget_en_us.ts -qm %QM_LOCATION%%QM_FILE_EN_US% diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/locales/fmradiohswidget.qm Binary file radiohswidget/locales/fmradiohswidget.qm has changed diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/locales/fmradiohswidget.ts --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/locales/fmradiohswidget.ts Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,516 @@ + + + + + + Displayed in FM Radio home screen widget's information area. + Country Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Social Affairs + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Weather + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Personality + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Soft + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Rhythm and blues + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Information + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Phone In + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Current affairs + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Alarm + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Leisure + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Children’s programmes + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Light classical + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Alarm Test + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Religious talk + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Text in a home screen widget information area. Displayed when no station is tuned. + FM Radio + + txt_rad_list_fm_radio + rad_05 + list + rad + False + + + Displayed in FM Radio home screen widget's information area. Custom layout parent string. + News + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Easy Listening + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Top 40 + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Public + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Varied + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Nostalgia + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Classical + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + National Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Science + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Jazz Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Religious music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Other Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Folk Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Religion + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Soft rock + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Adult hits + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Drama + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Rock Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Serious classical + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + College + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Notification text which is displayed in home screen widget, when the headset antenna is not connected. + Connect wired headset. + + txt_rad_info_news + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Oldies Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Documentary + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Education + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Sport + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Pop Music + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Language + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Classic rock + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Text in a home screen widget information area. %L1 is the radio station's frequency. + %L1 Mhz + + txt_rad_list_l1_mhz + rad_05 + list + rad + False + + + Displayed in FM Radio home screen widget's information area. + Soft rhythm and blues + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Culture + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Talk + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Finance + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + Confirmation query which is displayed when the FM Radio is launched from the FM Radio home screen widget while the device is in offline mode. (Note that same text is also in FM radio textmap.) + Activate Fm Radio in off-line mode? + + qtl_dialog_pri5 + rad_05 + info + rad + False + + + Displayed in FM Radio home screen widget's information area. + Travel + + txt_rad_info_news_hs + rad_05 + info + rad + False + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/qmakepluginstubs/fmradiohswidget.qtplugin --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/qmakepluginstubs/fmradiohswidget.qtplugin Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,1 @@ +This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-06-22T09:54:17 diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/radiohswidget.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/radiohswidget.pro Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,89 @@ +# +# 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: Example of home screen widget +# + +include(buildflags.pri) + +TEMPLATE = lib +TARGET = fmradiohswidget +CONFIG += plugin +CONFIG += hb +CONFIG += mobility +MOBILITY = serviceframework + +LIBS += -lxqsettingsmanager +LIBS += -lxqservice +LIBS += -lxqserviceutil + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp +SOURCES += ../common/radiologger.cpp + +INCLUDEPATH += ./inc +INCLUDEPATH += ../common + +UID = 2002E6D6 + +RESOURCES = resources.qrc + +symbian: { + + DESTDIR = /private/20022F35/import/widgetregistry/$${UID} + + TARGET.UID3 = 0x$${UID} + TARGET.EPOCALLOWDLLDATA=1 + TARGET.VID = VID_DEFAULT + TARGET.CAPABILITY = CAP_GENERAL_DLL + + plugins.path = $${DESTDIR} + plugins.sources = $${TARGET}.dll + + widgetResources.path = $${DESTDIR} + widgetResources.sources += resource/$${TARGET}.xml + widgetResources.sources += resource/$${TARGET}.manifest + + localisedFiles.path = /resource/qt/translations + localisedFiles.sources += ./locales/*.qm + + DEPLOYMENT += plugins + DEPLOYMENT += widgetResources + DEPLOYMENT += localisedFiles + + MMP_RULES += SMPSAFE + + include(radiohswidget_exports_to_rom.pri) +} + +win32: { + + CONFIG(debug, debug|release) { + SUBDIRPART = debug + } else { + SUBDIRPART = release + } + + PLUGIN_SUBDIR = /hsresources/import/widgetregistry/$${UID} + + DESTDIR = $$PWD/../../../../../bin/$${SUBDIRPART}/$${PLUGIN_SUBDIR} + + manifest.path = $${DESTDIR} + manifest.files = ./resource/*.manifest ./resource/*.xml ./resource/*.css + + widgetLocalisation.path = $$PWD/../../../../../bin/$${SUBDIRPART}/resource/qt/translations + widgetLocalisation.files += ./locales/*.qm + + INSTALLS += manifest +} + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/radiohswidget_exports_to_rom.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/radiohswidget_exports_to_rom.pri Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,34 @@ +# +# 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: +# + +BLD_INF_RULES.prj_exports += \ +"$${LITERAL_HASH}include " + +#iby exports to core +BLD_INF_RULES.prj_exports += \ +"rom/fmradiohswidget.iby CORE_APP_LAYER_IBY_EXPORT_PATH(fmradiohswidget.iby)" + +#iby exports to language +#BLD_INF_RULES.prj_exports += \ +#"rom/fmradiohswidget_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(fmradiohswidget_resources.iby)" + +BLD_INF_RULES.prj_extensions += \ +$$LITERAL_HASH"ifdef MARM" \ + " START EXTENSION app-services/buildstubsis" \ + " OPTION SRCDIR rom/" \ + " OPTION SISNAME fmradiohswidget_stub" \ + " END" \ +$$LITERAL_HASH"endif" diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/resource/fmradiohswidget.docml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/resource/fmradiohswidget.docml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/resource/fmradiohswidget.manifest --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/resource/fmradiohswidget.manifest Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,9 @@ + + + fmradiohswidget + txt_fmradiohswidget_list_fm_radio_homescreen_widget + txt_fmradiohswidget_list_quick_access_for_fm_radio_in_your + qtg_large_radio + false + fmradiohswidget.xml + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/resource/fmradiohswidget.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/resource/fmradiohswidget.xml Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,12 @@ + + + fmradiohswidget + fmradiohswidget + FM Radio homescreen widget + + com.nokia.symbian.IHomeScreenWidget + 1.0 + FM Radio homescreen widget + + + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/resources.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/resources.qrc Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,5 @@ + + + resource/fmradiohswidget.docml + + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/rom/fmradiohswidget.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/rom/fmradiohswidget.iby Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,31 @@ +/* +* 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: +* +*/ + +#ifndef __RADIOHSWIDGET_IBY__ +#define __RADIOHSWIDGET_IBY__ + +// Use standard macros +#include + +file=ABI_DIR\BUILD_DIR\fmradiohswidget.dll SHARED_LIB_DIR\fmradiohswidget.dll +data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidget.qtplugin private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidget.qtplugin +data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidget.xml private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidget.xml +data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidget.manifest private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidget.manifest + +data=\epoc32\data\z\system\install\fmradiohswidget_stub.sis system\install\fmradiohswidget_stub.sis + +#endif //__RADIOHSWIDGET_IBY__ diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/rom/fmradiohswidget_resources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/rom/fmradiohswidget_resources.iby Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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: +* Iby file for FMRadio +* +*/ + + +#ifndef RADIOHSWIDGET_RESOURCES_IBY +#define RADIOHSWIDGET_RESOURCES_IBY + +// Use standard macros +#include + +#S60_APP_RESOURCE(fmradiohswidget) + +#data=DATAZ_\QT_TRANSLATIONS_DIR\fmradiohswidget.qm QT_TRANSLATIONS_DIR\fmradiohswidget.qm + +#endif // RADIOHSWIDGET_RESOURCES_IBY diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/rom/fmradiohswidget_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/rom/fmradiohswidget_stub.pkg Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,27 @@ +; +; 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: Stub package file for FM Radio home screen widget +; + +; Languages +&EN + +; Header +#{"fmradiohswidget"}, (0x2002E6D6), 1, 0, 0, TYPE=SA + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/sis/fmradiohswidget.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/sis/fmradiohswidget.bat Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,30 @@ +@rem +@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off + +if exist fmradiohswidget.sisx del fmradiohswidget.sisx + +makesis fmradiohswidget.pkg +signsis fmradiohswidget.sis fmradiohswidget.sisx ../../internal/sis/nokia_rndcert_02.der ../../internal/sis/nokia_rndcert_02.key + +if exist fmradiohswidget.sisx ( +echo fmradiohswidget.sisx creation SUCCEEDED +del fmradiohswidget.sis +) + +if not exist fmradiohswidget.sisx ( +echo fmradiohswidget.sisx creation FAILED +) \ No newline at end of file diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/sis/fmradiohswidget.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/sis/fmradiohswidget.pkg Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,55 @@ +; +; 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: +; + +; Language +&EN + +; SIS header: name, uid, version +#{"fmradiohswidget"}, (0x2002E6D6), 1, 0, 0, TYPE=SA, RU + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + +; Manual PKG pre-rules from PRO files +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +"../resource/fmradiohswidget.manifest" - "!:/private/20022F35/import/widgetregistry/20022F7E/fmradiohswidget.manifest",FM,"application/hs-widget-uninstall+xml",RR,RW + +"/epoc32/release/armv5/urel/fmradiohswidget.dll" - "!:/sys/bin/fmradiohswidget.dll" +"/epoc32/data/z/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.qtplugin" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.qtplugin" +"../resource/fmradiohswidget.manifest" - "!:/private/20022F35/import/widgetregistry/2002E6D6/radiohswidget.manifest" +"../resource/fmradiohswidget.xml" - "!:/private/20022F35/import/widgetregistry/2002E6D6/radiohswidget.xml" +;"/epoc32/data/z/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.png" - "!:/private/20022F35/import/widgetregistry/2002E6D6/radiohswidget.png" + + +;"/epoc32/release/armv5/urel/fmradiohswidget.dll" - "!:/sys/bin/fmradiohswidget.dll" +;"../radiohswidget/qmakepluginstubs/fmradiohswidget.qtplugin" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.qtplugin" +;"../radiohswidget/resource/fmradiohswidget.manifest" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.manifest" +;"../radiohswidget/resource/fmradiohswidget.s60xml" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.xml" +;"../radiohswidget/resource/fmradiohswidget.css" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.css" +;;"/epoc32/data/z/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.s60xml" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.xml" +;;"../radiohswidget/resource/fmradiohswidget.xml" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget.xml" +;;"../radiohswidget/resource/fmradiohswidget_icon.png" - "!:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidget_icon.png" + +;"/epoc32/data/z/resource/qt/translations/fmradiohswidget.qm" - "!:/resource/qt/translations/fmradiohswidget.qm" +;"/epoc32/data/z/resource/qt/translations/fmradiohswidget_en_us.qm" - "!:/resource/qt/translations/fmradiohswidget_en_us.qm" diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/src/radiohswidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/src/radiohswidget.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,1097 @@ +/* +* 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: FM Radio home screen widget +* +*/ + +// System includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "radiohswidget.h" +#include "radiohswidgetprofilereader.h" +#include "radiohswidgetradioserviceclient.h" +#include "radioservicedef.h" +#include "radio_global.h" +#include "radiologger.h" + +// Constants +/** Path to docml file */ +const QString DOCML(":/ui/resource/fmradiohswidget.docml"); + +/** DOCML object name for mainLayout */ +const QString DOCML_OBJECT_NAME_MAIN_LAYOUT("mainLayout"); +/** DOCML object name for contentLayout */ +const QString DOCML_OBJECT_NAME_CONTENT_LAYOUT("contentLayout"); +/** DOCML object name for tunerBackgroundPushButton */ +const QString DOCML_OBJECT_NAME_TUNER_BACKGROUND_BUTTON( + "tunerBackgroundPushButton"); +/** DOCML object name for tunerStackedLayout */ +const QString DOCML_OBJECT_NAME_TUNER_STACKED_LAYOUT("tunerStackedLayout"); +/** DOCML object name for tunerInformationStackedLayout */ +const QString DOCML_OBJECT_NAME_TUNER_INFORMATION_STACKED_LAYOUT( + "tunerInformationStackedLayout"); +/** DOCML object name for controlButtons */ +const QString DOCML_OBJECT_NAME_CONTROL_BUTTONS_LAYOUT("controlButtons"); +/** DOCML object name for powerToggleButton */ +const QString DOCML_OBJECT_NAME_POWER_BUTTON("powerButton"); +/** DOCML object name for previousPushButton */ +const QString DOCML_OBJECT_NAME_PREVIOUS_BUTTON("previousPushButton"); +/** DOCML object name for nextPushButton */ +const QString DOCML_OBJECT_NAME_NEXT_BUTTON("nextPushButton"); +/** DOCML object name for twoRowsLayout */ +const QString DOCML_OBJECT_NAME_TWO_ROWS_LAYOUT("twoRowsLayout"); +/** DOCML object name for firstRowLabel */ +const QString DOCML_OBJECT_NAME_FIRST_ROW_LABEL("firstRowLabel"); +/** DOCML object name for secondRowLabel */ +const QString DOCML_OBJECT_NAME_SECOND_ROW_LABEL("secondRowLabel"); +/** DOCML object name for lonelyRowLabel */ +const QString DOCML_OBJECT_NAME_LONELY_ROW_LABEL("lonelyRowLabel"); +/** DOCML object name for animationIcon */ +const QString DOCML_OBJECT_NAME_ANIMATION_ICON("animationIcon"); + +/** Unknown favorite station count. */ +const int FAVORITE_STATION_COUNT_UNDEFINED(-1); +/** One favorite station set. */ +const int FAVORITE_STATION_COUNT_ONE(1); +/** Favorite station count lower boundary including this number. */ +const int FAVORITE_STATION_COUNT_LOWER_BOUNDARY(0); +/** Favorite station count upper boundary including this number. */ +const int FAVORITE_STATION_COUNT_UPPER_BOUNDARY(100); + +// Graphics identifiers for different push button states +const QString CONTROL_BUTTON_GRAPHICS_NORMAL ("qtg_fr_hsbutton_normal"); +const QString CONTROL_BUTTON_GRAPHICS_PRESSED ("qtg_fr_hsbutton_pressed"); +const QString CONTROL_BUTTON_GRAPHICS_DISABLED("qtg_fr_hsbutton_disabled"); +const QString CONTROL_BUTTON_GRAPHICS_LATCHED ("qtg_fr_hsbutton_latched"); + +// Push button icon colors for each of the states (normal, pressed, disabled +// and latched) +const QString CONTROL_BUTTON_ICON_COLOR_NORMAL ("qtc_button_normal"); +const QString CONTROL_BUTTON_ICON_COLOR_PRESSED ("qtc_button_pressed"); +const QString CONTROL_BUTTON_ICON_COLOR_DISABLED("qtc_button_disabled"); +const QString CONTROL_BUTTON_ICON_COLOR_LATCHED ("qtc_button_latched"); + +// File name suffix lists for push buttons +const QStringList POWER_BUTTON_SUFFIX( + (QStringList() << "_l" << "_c" << "_cr")); +const QStringList PREVIOUS_BUTTON_SUFFIX( + (QStringList() << "_cl" << "_c" << "_cr")); +const QStringList NEXT_BUTTON_SUFFIX( + (QStringList() << "_cl" << "_c" << "_r")); + +/** Icon for power button off. */ +const QString POWER_BUTTON_ICON_OFF("qtg_mono_power"); +/** Icon for power button on. */ +const QString POWER_BUTTON_ICON_ON ("qtg_mono_power"); + +// Tuner background button graphics for different states. +const QString TUNER_BUTTON_NORMAL_OFF("qtg_fr_tuner"); +const QString TUNER_BUTTON_NORMAL_ON("qtg_fr_tuner"); +const QString TUNER_BUTTON_NORMAL_PRESSED("qtg_fr_hsitems2_pressed"); + +/*! + \class RadioHsWidget + \brief Implementation of FM Radio home screen widget. + + RadioHsWidget implements needed functions for the FM Radio home screen + widget. +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constructs a widget which is a child of \a parent, with widget flags set + to \a flags. + + Constructor should be empty and all the actual construction should be + done in onInitialize(). + */ +RadioHsWidget::RadioHsWidget(QGraphicsItem* parent, Qt::WindowFlags flags) + : HbWidget(parent, flags), + mInformationAreaBackgroundButton(NULL), + mPowerButton(NULL), + mPreviousButton(NULL), + mNextButton(NULL), + mInformationAreaTwoRowsLayout(NULL), + mInformationLonelyRowLabel(NULL), + mInformationFirstRowLabel(NULL), + mInformationSecondRowLabel(NULL), + mAnimationIcon(NULL), + mFmRadioState(FmRadio::StateUndefined), + mFavoriteStationCount(FAVORITE_STATION_COUNT_UNDEFINED), + mCurrentStationIsFavorite(false), + mProfileMonitor(NULL), + mRadioServiceClient(NULL) +{ + LOG_METHOD; +} + +/*! + Destructor + */ +RadioHsWidget::~RadioHsWidget() +{ + LOG_METHOD; +} + +/*! + Handles changes in FM Radio information. + + \param informationType Type of changed information. + \param information Actual information. + */ +void RadioHsWidget::handleRadioInformationChange(const int informationType, + const QVariant &information) +{ + LOG_METHOD; + switch (informationType) { + + case RadioServiceNotification::FavoriteCount: + LOG("FavoriteCount"); + if (information.canConvert(QVariant::Int) && + information.toInt() >= FAVORITE_STATION_COUNT_LOWER_BOUNDARY && + information.toInt() <= FAVORITE_STATION_COUNT_UPPER_BOUNDARY) { + mFavoriteStationCount = information.toInt(); + // If there are favorite stations, enable the next/previous + // buttons. + LOG_FORMAT("mFavoriteStationCount: %d", mFavoriteStationCount); + // Enable or disable buttons only if favoriteCount differs + // from 1. CurrentIsFavorite case handles situation when there + // is only one favorite station. + if (mFavoriteStationCount != FAVORITE_STATION_COUNT_ONE) { + enableStationButtons(); + } + } else { + mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + } + break; + + case RadioServiceNotification::CurrentIsFavorite: + LOG("CurrentIsFavorite"); + if (information.canConvert(QVariant::Bool)) { + mCurrentStationIsFavorite = information.toBool(); + LOG_FORMAT("currentIsFavorite: %d", mCurrentStationIsFavorite); + // If current station is favorite disable next/prev buttons. + // Radio sends this information only when there is only one + // favorite station set. + enableStationButtons(); + } + break; + + case RadioServiceNotification::RadioStatus: + LOG("RadioStatus"); + if (information.canConvert(QVariant::Int)) { + const int status = information.toInt(); + switch (status) { + case RadioStatus::Playing: + LOG("Playing"); + break; + case RadioStatus::Muted: + LOG("Muted"); + break; + case RadioStatus::Seeking: + LEVEL2(LOG("Seeking")); + handleRadioStateChange(FmRadio::StateSeeking); + break; + case RadioStatus::NoAntenna: + LEVEL2(LOG("NoAntenna")); + handleRadioStateChange(FmRadio::StateAntennaNotConnected); + break; + case RadioStatus::PoweringOff: + LEVEL2(LOG("PoweringOff")); + handleRadioStateChange(FmRadio::StateClosing); + break; + default: + LOG("default case at case RadioStatus"); + break; + } + } + break; + + case RadioServiceNotification::Frequency: + LOG("Frequency"); + // TODO: Should information.toString() be checked for too many characters? What's the limit? + if (information.canConvert(QVariant::String)) { + LOG_FORMAT("frequency: %s", GETSTRING(information.toString())); + // TODO: Remove comment when localisation is working on device. + //frequencyString = hbTrId("txt_fmradiohswidget_rad_list_l1_mhz").arg(freqString); + bool frequencyCleared = false; + // If widget has some frequency information and new frequency + // differs from that + if (mRadioInformation.contains(Frequency) + && mRadioInformation[Frequency].compare(information.toString()) != 0) { + // Clear all infromation from widget because station has changed. + clearRadioInformation(); + frequencyCleared = true; + } + // If widget do not have any frquency information, update it. + bool frequencyUpdated = updateRadioInformation(Frequency, + information.toString()); + if (frequencyCleared || frequencyUpdated) { + // Information changed, update the UI. + changeInRadioInformation(); + } + } + break; + + case RadioServiceNotification::Name: + LOG("Name"); + handleSimilarRadioInformation(StationName, information); + break; + + case RadioServiceNotification::Genre: + LOG("Genre"); + handleSimilarRadioInformation(Pty, information); + break; + + case RadioServiceNotification::RadioText: + LOG("RadioText"); + handleSimilarRadioInformation(RadioText, information); + break; + + case RadioServiceNotification::DynamicPS: + LOG("DynamicPS"); + handleSimilarRadioInformation(DynamicPsName, information); + break; + + default: + LOG("default case at notificationId"); + break; + } +} + +/*! + Handles changes in FM Radio state. + + \param value New state of the radio application. +*/ +void RadioHsWidget::handleRadioStateChange(const QVariant &value) +{ + LOG_METHOD; + int state; + if (value.canConvert(QVariant::Int)) { + state = value.toInt(); + } else { + return; + } + + if (state == mFmRadioState) { + // State did not change, so return. + return; + } + + switch (state) { + case FmRadio::StateUndefined: + LOG("FmRadio::StateUndefined"); + // Something went wrong. Widget should not be in this state after onInitialize(). + mFmRadioState = FmRadio::StateUndefined; + break; + case FmRadio::StateNotRunning: + LOG("FmRadio::StateNotRunning"); + mFmRadioState = FmRadio::StateNotRunning; + mRadioServiceClient->stopMonitoring(); + changePowerButtonOn(false); + mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mCurrentStationIsFavorite = false; + enableStationButtons(); + clearRadioInformation(); + mInformationFirstRowLabel->setPlainText(""); + mInformationSecondRowLabel->setPlainText(""); + mInformationLonelyRowLabel->setPlainText(hbTrId("txt_fmradiohswidget_rad_list_fm_radio")); + changeInformationAreaLayout(OneRow); + break; + case FmRadio::StateStarting: + LOG("FmRadio::StateStarting"); + mFmRadioState = FmRadio::StateStarting; + changePowerButtonOn(true); + mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mCurrentStationIsFavorite = false; + enableStationButtons(); + changeInformationAreaLayout(Animation); + break; + case FmRadio::StateRunning: + LOG("FmRadio::StateRunning"); + mFmRadioState = FmRadio::StateRunning; + // Stop timer if it is running because radio is now running. + mRadioServiceClient->startMonitoring( + FmRadio::VisibiltyDoNotChange); + changePowerButtonOn(true); + enableStationButtons(); + changeInformationAreaLayout(OneRow); + break; + case FmRadio::StateSeeking: + LOG("FmRadio::StateSeeking"); + mFmRadioState = FmRadio::StateSeeking; + mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mCurrentStationIsFavorite = false; + enableStationButtons(); + changeInformationAreaLayout(Animation); + break; + case FmRadio::StateAntennaNotConnected: + LOG("FmRadio::StateAntennaNotConnected"); + mFmRadioState = FmRadio::StateAntennaNotConnected; + mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mCurrentStationIsFavorite = false; + enableStationButtons(); + mInformationFirstRowLabel->setPlainText(""); + mInformationSecondRowLabel->setPlainText(""); + mInformationLonelyRowLabel->setPlainText(hbTrId( + "txt_fmradiohswidget_rad_info_connect_wired_headset")); + changeInformationAreaLayout(OneRow); + break; + case FmRadio::StateClosing: + LOG("FmRadio::StateClosing"); + mFmRadioState = FmRadio::StateClosing; + changePowerButtonOn(false); + mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mCurrentStationIsFavorite = false; + enableStationButtons(); + clearRadioInformation(); + mInformationFirstRowLabel->setPlainText(""); + mInformationSecondRowLabel->setPlainText(""); + mInformationLonelyRowLabel->setPlainText(hbTrId( + "txt_fmradiohswidget_rad_list_fm_radio")); + changeInformationAreaLayout(OneRow); + break; + default: + LOG_FORMAT("default case at state. State: %d", state); + break; + } +} + +/*! + Called when widget is initialized. Constructs objects and connects them. +*/ +void RadioHsWidget::onInitialize() +{ + LOG_METHOD_ENTER; + mProfileMonitor = new RadioHsWidgetProfileReader(this); + mRadioServiceClient = new RadioHsWidgetRadioServiceClient(this); + + load(DOCML); + + // Use signal mapper to indicate button identifiers to button event + // slots. + QSignalMapper* signalMapperPressed = new QSignalMapper(this); + signalMapperPressed->setMapping(mPowerButton, Power); + signalMapperPressed->setMapping(mPreviousButton, Previous); + signalMapperPressed->setMapping(mNextButton, Next); + + // Need to use different signal mapper for pressed and released events, + // both have same mappings but they are mapped to different slots. + QSignalMapper* signalMapperReleased = new QSignalMapper(this); + signalMapperReleased->setMapping(mPowerButton, Power); + signalMapperReleased->setMapping(mPreviousButton, Previous); + signalMapperReleased->setMapping(mNextButton, Next); + + // Connect button events to signal maps. + Radio::connect(mPowerButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map())); + Radio::connect(mPowerButton, SIGNAL(released()), signalMapperReleased, SLOT (map())); + Radio::connect(mPreviousButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map())); + Radio::connect(mPreviousButton, SIGNAL(released()), signalMapperReleased, SLOT (map())); + Radio::connect(mNextButton, SIGNAL(pressed()), signalMapperPressed, SLOT (map())); + Radio::connect(mNextButton, SIGNAL(released()), signalMapperReleased, SLOT (map())); + + // Connect mapper signals to self implemented slots. + Radio::connect(signalMapperPressed, SIGNAL(mapped(int)), this, SLOT(changeButtonToPressed(int))); + Radio::connect(signalMapperReleased, SIGNAL(mapped(int)), this, SLOT(changeButtonToReleased(int))); + + mProfileMonitor->startMonitoringRadioRunningStatus(); +} + +/*! + Called when widget is shown in the home screen +*/ +void RadioHsWidget::onShow() +{ + LOG_METHOD_ENTER; +} + +/*! + Called when widget is hidden from the home screen +*/ +void RadioHsWidget::onHide() +{ + LOG_METHOD_ENTER; +} + +/*! + Emited from HbPushButton:pressed() signal, changes the button layout to + pressed state. + + \param hsButtonIdentifier Identifies the button which was pressed. + */ +void RadioHsWidget::changeButtonToPressed(int hsButtonIdentifier) +{ + LEVEL2(LOG_METHOD); + buttonEvent(static_cast(hsButtonIdentifier), Pressed); +} + +/*! + Emited from HbPushButton:released() signal, changes the button layout to + normal state. + + \param hsButtonIdentifier Identifies the button which was released. + */ +void RadioHsWidget::changeButtonToReleased(int hsButtonIdentifier) +{ + LEVEL2(LOG_METHOD); + buttonEvent(static_cast(hsButtonIdentifier), Normal); +} + +/*! + Slot for closing FM Radio application from power button. + */ +void RadioHsWidget::closeRadio() +{ + LOG_SLOT_CALLER; + mRadioServiceClient->commandFmRadio(RadioServiceCommand::PowerOff); +} + +/*! + Slot for previous button clicked. + */ +void RadioHsWidget::changeToPreviousStation() +{ + LOG_SLOT_CALLER; + clearRadioInformation(); + mRadioServiceClient->commandFmRadio(RadioServiceCommand::Previous); +} + +/*! + Slot for next button clicked. + */ +void RadioHsWidget::changeToNextStation() +{ + LOG_SLOT_CALLER; + clearRadioInformation(); + mRadioServiceClient->commandFmRadio(RadioServiceCommand::Next); + +} + +/*! + Slot for bringing the radio application to foreground. + */ +void RadioHsWidget::changeRadioToForeground() +{ + LOG_SLOT_CALLER; + // If radio is not running start it to foreground by monitor request. + if (mFmRadioState == FmRadio::StateNotRunning) { + bool okToStartRadio = radioStartPermission(); + if (okToStartRadio) { + handleRadioStateChange(FmRadio::StateStarting); + mRadioServiceClient->startMonitoring( + FmRadio::VisibiltyToForeground); + } + } + else { + if (mFmRadioState == FmRadio::StateClosing) { + // Radio is closing but user wants to power it up again. + mRadioServiceClient->commandFmRadio(RadioServiceCommand::PowerOn); + // Stop and start monitoring to get refresh. + mRadioServiceClient->stopMonitoring(); + mRadioServiceClient->startMonitoring( + FmRadio::VisibiltyToBackground); + handleRadioStateChange(FmRadio::StateRunning); + } + // If radio is running, bring it to the foreground. + mRadioServiceClient->commandFmRadio(RadioServiceCommand::Foreground); + } +} + +/*! + Slot for putting the radio application to the background. + */ +void RadioHsWidget::changeRadioToBackground() +{ + LOG_SLOT_CALLER; + // If radio is not running start it to background by monitor request. + if (mFmRadioState == FmRadio::StateNotRunning) { + bool okToStartRadio = radioStartPermission(); + if (okToStartRadio) { + handleRadioStateChange(FmRadio::StateStarting); + mRadioServiceClient->startMonitoring( + FmRadio::VisibiltyToBackground); + } + } + else if (mFmRadioState == FmRadio::StateStarting) { + // Do nothing if radio is starting. + } + else if (mFmRadioState == FmRadio::StateClosing) { + // Radio is closing but user wants to power it up again. + mRadioServiceClient->commandFmRadio(RadioServiceCommand::PowerOn); + // Stop and start monitoring to get refresh. + mRadioServiceClient->stopMonitoring(); + mRadioServiceClient->startMonitoring( + FmRadio::VisibiltyToBackground); + handleRadioStateChange(FmRadio::StateRunning); + } + else { + // If radio is running, put it to the background. + // This is little bit useless because the radio is in background if + // user is able to click the widget. + mRadioServiceClient->commandFmRadio(RadioServiceCommand::Background); + } +} + +/*! + Powering off or on the radio. + */ +void RadioHsWidget::toggleRadioPower() +{ + LOG_SLOT_CALLER; + // If radio is not running start it to background by monitor request. + if (mFmRadioState == FmRadio::StateNotRunning || mFmRadioState == FmRadio::StateClosing) { + LEVEL2(LOG("Power on")); + // Start radio + changeRadioToBackground(); + } else { + LEVEL2(LOG("Power off")); + // Close radio + closeRadio(); + } +} + +/*! + Loads docml file. + + \param docml Docml filename to be loaded. + */ +void RadioHsWidget::load(const QString &docml) +{ + LOG_METHOD_ENTER; + + QScopedPointer documentLoader(new HbDocumentLoader()); + bool loaded = false; + documentLoader->load(docml, &loaded); + if (loaded) { + // Find mainLayout + HbWidget *mainLayout = qobject_cast ( + documentLoader->findWidget(DOCML_OBJECT_NAME_MAIN_LAYOUT)); + + if (mainLayout) { + QGraphicsLinearLayout *widgetLayout = new QGraphicsLinearLayout( + Qt::Vertical, this); + widgetLayout->addItem(mainLayout); + setLayout(widgetLayout); + } + + // Find contentLayout + HbWidget *contentLayout = qobject_cast ( + documentLoader->findWidget(DOCML_OBJECT_NAME_CONTENT_LAYOUT)); + if (contentLayout) { + + // Find stacked layout for tuner area. + HbWidget *tunerStackedLayout = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_TUNER_STACKED_LAYOUT)); + if (tunerStackedLayout) { + + // Find stacked layout for information area. + HbWidget *tunerInformationStackedLayout = qobject_cast< + HbWidget*> (documentLoader->findWidget( + DOCML_OBJECT_NAME_TUNER_INFORMATION_STACKED_LAYOUT)); + if (tunerInformationStackedLayout) { + } + + // Find lonely label + mInformationLonelyRowLabel = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_LONELY_ROW_LABEL)); + if (mInformationLonelyRowLabel) { + // TODO: Set the color in docml when application designer supports it. + QColor color = HbColorScheme::color( + "qtc_radio_tuner_normal"); + mInformationLonelyRowLabel->setTextColor(color); + } + + // Find layout for two rows + mInformationAreaTwoRowsLayout = qobject_cast< + QGraphicsWidget *> (documentLoader->findObject( + DOCML_OBJECT_NAME_TWO_ROWS_LAYOUT)); + if (mInformationAreaTwoRowsLayout) { + // Find first row + mInformationFirstRowLabel = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_FIRST_ROW_LABEL)); + if (mInformationFirstRowLabel) { + // TODO: Set the color in docml when application designer supports it. + QColor color = HbColorScheme::color( + "qtc_radio_tuner_normal"); + mInformationFirstRowLabel->setTextColor(color); + } + + // Find second row + mInformationSecondRowLabel = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_SECOND_ROW_LABEL)); + if (mInformationSecondRowLabel) { + // TODO: Set the color in docml when application designer supports it. + QColor color = HbColorScheme::color( + "qtc_radio_tuner_normal"); + mInformationSecondRowLabel->setTextColor(color); + } + } + + mAnimationIcon = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_ANIMATION_ICON)); + if (mAnimationIcon) { + // Use animation manager to access anim loading animation. + HbIconAnimationManager *animationManager = + HbIconAnimationManager::global(); + // TODO: Axml extension can be removed after wk24 release. + animationManager->addDefinitionFile(QLatin1String( + "qtg_anim_loading.axml")); + mAnimationIcon->setIcon(HbIcon("qtg_anim_loading")); + } + } + + // Find push button for tuner area. + mInformationAreaBackgroundButton = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_TUNER_BACKGROUND_BUTTON)); + if (mInformationAreaBackgroundButton) { + // Use the frame background. + HbFrameDrawer *tunerBackgroundButtonFrameDrawer = + new HbFrameDrawer("qtg_fr_tuner", + HbFrameDrawer::ThreePiecesHorizontal); + tunerBackgroundButtonFrameDrawer->setFillWholeRect(true); + mInformationAreaBackgroundButton->setFrameBackground( + tunerBackgroundButtonFrameDrawer); + // Connect the button's clicked signal. + Radio::connect(mInformationAreaBackgroundButton, + SIGNAL(clicked()), this, SLOT(changeRadioToForeground())); + } + + // Find layout for control buttons. + HbWidget *controlButtonsLayout = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_CONTROL_BUTTONS_LAYOUT)); + if (controlButtonsLayout) { + + // Find power button. + mPowerButton + = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_POWER_BUTTON)); + if (mPowerButton) { + defineButton(*mPowerButton, + CONTROL_BUTTON_GRAPHICS_NORMAL, POWER_BUTTON_SUFFIX, + POWER_BUTTON_ICON_ON, + CONTROL_BUTTON_ICON_COLOR_NORMAL); + // Connect the button's clicked signal. + Radio::connect(mPowerButton, SIGNAL(clicked()), this, + SLOT(toggleRadioPower())); + } + + // Find previous button. + mPreviousButton = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_PREVIOUS_BUTTON)); + if (mPreviousButton) { + defineButton(*mPreviousButton, + CONTROL_BUTTON_GRAPHICS_DISABLED, + PREVIOUS_BUTTON_SUFFIX, NULL, + CONTROL_BUTTON_ICON_COLOR_DISABLED); + // Connect the button's clicked signal. + Radio::connect(mPreviousButton, SIGNAL(clicked()), this, + SLOT(changeToPreviousStation())); + } + + // Find next button. + mNextButton + = qobject_cast ( + documentLoader->findWidget( + DOCML_OBJECT_NAME_NEXT_BUTTON)); + if (mNextButton) { + defineButton(*mNextButton, + CONTROL_BUTTON_GRAPHICS_DISABLED, NEXT_BUTTON_SUFFIX, + NULL, CONTROL_BUTTON_ICON_COLOR_DISABLED); + // Connect the button's clicked signal. + Radio::connect(mNextButton, SIGNAL(clicked()), this, + SLOT(changeToNextStation())); + } + } + } + } + else { + // Docml was not succesfully loaded. UI cannot be displayed. + // Emit error to home screen framework, which removes the widget. + emit error(); + } +} + +/*! + Groups handling of similar kind of radio information (textual) to one + function. + + \param informationType Type of changed information. + \param information Actual textual information. + */ +void RadioHsWidget::handleSimilarRadioInformation( + const FmRadioInformationType informationType, const QVariant &information) +{ + LOG_METHOD_ENTER; + // TODO: Should information.toString() be checked for too many characters? What's the limit? + if (information.canConvert(QVariant::String) && updateRadioInformation( + informationType, information.toString())) { + LOG_FORMAT("informationType: %d, information: %s", informationType, GETSTRING(information.toString())); + changeInRadioInformation(); + } +} + +/*! + Check if the the radio information is changed. If it is changed, it is + also updated. + + \param informationType Type of the information. + \param information Information text. + + \returns Returns \c true, if information is updated. Returns \c false otherwise. + */ +bool RadioHsWidget::updateRadioInformation(const FmRadioInformationType informationType, + const QString &information) +{ + LOG_METHOD_RET("%d"); + // If hash contains this type of information. + if (mRadioInformation.contains(informationType)) { + // If new information is empty. + if (information.isEmpty()) { + // Remove old information from the hash. + LEVEL2(LOG_FORMAT("informationType: %s removed", GETSTRING(informationType))); + mRadioInformation.remove(informationType); + // Return true to indicate the change. + return true; + } + // If new information differs from the old one. + if (mRadioInformation[informationType].compare(information) != 0) { + // Update the information. + LEVEL2(LOG_FORMAT("informationType: %s = %s", GETSTRING(informationType), GETSTRING(information))); + mRadioInformation[informationType] = information; + // And return true to indicate the change. + return true; + } + } else { // Hash do not contain this type of information. + // If new information is not empty. + if (!information.isEmpty()) { + // Add it to the hash. + LEVEL2(LOG_FORMAT("informationType: %s = %s", GETSTRING(informationType), GETSTRING(information))); + mRadioInformation[informationType] = information; + // Return true to indicate the change. + return true; + } + } + // Return false to indicate that nothing changed. + return false; +} + +/*! + Formatting radio information texts after a change. + */ +void RadioHsWidget::changeInRadioInformation() +{ + LOG_METHOD_ENTER; + // Clear the rows. + mRadioInformationFirstRow.clear(); + mRadioInformationSecondRow.clear(); + + // First row contains station name. + if (mRadioInformation.contains(StationName)) { + mRadioInformationFirstRow.append(mRadioInformation.value(StationName)); + } + else if (mRadioInformation.contains(Frequency)) { + // Or frequency. + mRadioInformationFirstRow.append(mRadioInformation.value(Frequency)); + } LEVEL2(LOG_FORMAT("mRadioInformationFirstRow: %s", GETSTRING(mRadioInformationFirstRow))); + + // Second row of information contains radio text. + if (mRadioInformation.contains(RadioText)) { + mRadioInformationSecondRow.append(mRadioInformation.value(RadioText)); + } + else if (mRadioInformation.contains(DynamicPsName)) { + // Or Dynamic PS name. + mRadioInformationSecondRow.append(mRadioInformation.value(DynamicPsName)); + } + else if (mRadioInformation.contains(Pty)) { + // Or PTY. + mRadioInformationSecondRow.append(mRadioInformation.value(Pty)); + } + LEVEL2(LOG_FORMAT("mRadioInformationSecondRow: %s", GETSTRING(mRadioInformationSecondRow))); + + // If second row is empty. + if (mRadioInformationSecondRow.isEmpty()) { + // Show only the lonely row. + mInformationLonelyRowLabel->setPlainText(mRadioInformationFirstRow); + changeInformationAreaLayout(OneRow); + } + else { + // Else display both rows. + mInformationFirstRowLabel->setPlainText(mRadioInformationFirstRow); + mInformationSecondRowLabel->setPlainText(mRadioInformationSecondRow); + changeInformationAreaLayout(TwoRows); + } +} + +/*! + Clears the radio station information. For example, when the station is + changed, old information should be cleared. + */ +void RadioHsWidget::clearRadioInformation() +{ + LOG_METHOD_ENTER; + mRadioInformation.clear(); +} + +/*! + Changes visible widgets of information area stacked layout. + + \param layout The layout to switch visible. + */ +void RadioHsWidget::changeInformationAreaLayout(const InformationAreaLayout layout) +{ + LOG_METHOD_ENTER; + mInformationLonelyRowLabel->setVisible(layout == OneRow); + mInformationAreaTwoRowsLayout->setVisible(layout == TwoRows); + mAnimationIcon->setVisible(layout == Animation); +} + +/*! + Changes state of power button. + + \param isPowerOn \c true the power is on and \c false the power is off. + */ +void RadioHsWidget::changePowerButtonOn(const bool isPowerOn) +{ + LEVEL2(LOG_METHOD); + if (isPowerOn) { + LEVEL2(LOG("Power on")); + // TODO: Temporarily set the text to clarify the action it performs. + // Remove when graphics displays the difference. + mPowerButton->setText("Off"); + buttonEvent(Power, Latched); + } else { + LEVEL2(LOG("Power off")); + // TODO: Temporarily set the text to clarify the action it performs. + // Remove when graphics displays the difference. + mPowerButton->setText("On"); + buttonEvent(Power, Normal); + } +} + +/*! + Changes enabled state of station buttons. + */ +void RadioHsWidget::enableStationButtons() +{ + LEVEL2(LOG_METHOD_ENTER); + if ((mFavoriteStationCount > 1) || (mFavoriteStationCount == 1 + && !mCurrentStationIsFavorite)) { + changeButtonToEnabled(Next); + changeButtonToEnabled(Previous); + } + else if ((mFavoriteStationCount == 1 && mCurrentStationIsFavorite) + || (mFavoriteStationCount < 1)) { + changeButtonToDisabled(Next); + changeButtonToDisabled(Previous); + } +} + +/*! + Makes homescreen specific push button based on parameters. + + \param target Target push button to modify. Must not be NULL. + \param graphicsId Defines the target button background graphics. + \param suffix Defines the suffix for the target button background graphics. + \param icon Defines the icon for the target button. + \param iconColor Defines the icon color for the target button. + */ +void RadioHsWidget::defineButton(HbPushButton &target, const QString &graphicsId, + const QStringList &suffix, const QString &icon, const QString &iconColor) +{ + LEVEL2(LOG_METHOD); + HbFrameDrawer* drawer = NULL; + + // First check if the drawer is already created for this push button + if (!target.frameBackground()) { + LEVEL2(LOG("Creating new frame background.")); + // Nope, create one now + drawer = new HbFrameDrawer(graphicsId, + HbFrameDrawer::ThreePiecesHorizontal); + target.setFrameBackground(drawer); + } + else { + // Frame drawer already created, only need to update frame graphics + drawer = target.frameBackground(); + drawer->setFrameGraphicsName(graphicsId); + } + + // Set file name suffix list, so that drawer can load correct 3-piece graphic files + drawer->setFileNameSuffixList(suffix); + + // Set the icon, if it is not NULL + if (!icon.isNull()) { + target.setIcon(HbIcon(icon)); + } + + // Update also the icon color + QColor color = HbColorScheme::color(iconColor); + target.icon().setColor(color); + + // Lastly, check if the buttton is disabled + if (iconColor == CONTROL_BUTTON_ICON_COLOR_DISABLED) { + target.setEnabled(false); + } + else { + target.setEnabled(true); + } +} + +/*! + Prepares the information needed for displaying the button correctly + reflecting its state. + + \param buttonId Identifies the button. + \param state Tells in what state the button is. + */ +void RadioHsWidget::buttonEvent(ControlButtonIdentifier buttonId, + const ControlButtonState state) +{ + LEVEL2(LOG_METHOD); + HbPushButton* target = NULL; + QStringList suffix; + QString icon; + + switch (buttonId) { + case Power: + LEVEL2(LOG("Power")); + target = mPowerButton; + icon = POWER_BUTTON_ICON_ON; + suffix = POWER_BUTTON_SUFFIX; + break; + case Previous: + LEVEL2(LOG("Previous")); + target = mPreviousButton; + suffix = PREVIOUS_BUTTON_SUFFIX; + break; + case Next: + LEVEL2(LOG("Next")); + target = mNextButton; + suffix = NEXT_BUTTON_SUFFIX; + break; + default: + LOG("default case at buttonId"); + break; + } + + QString buttonBackgroundGraphics; + QString buttonIconColors; + switch (state) { + case Normal: + LEVEL2(LOG("Normal")); + target->setProperty("state", "normal"); + buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_NORMAL; + buttonIconColors = CONTROL_BUTTON_ICON_COLOR_NORMAL; + break; + case Pressed: + LEVEL2(LOG("Pressed")); + target->setProperty("state", "pressed"); + buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_PRESSED; + buttonIconColors = CONTROL_BUTTON_ICON_COLOR_PRESSED; + break; + case Disabled: + LEVEL2(LOG("Disabled")); + target->setProperty("state", "disabled"); + buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_DISABLED; + buttonIconColors = CONTROL_BUTTON_ICON_COLOR_DISABLED; + break; + case Latched: + LEVEL2(LOG("Latched")); + target->setProperty("state", "latched"); + buttonBackgroundGraphics = CONTROL_BUTTON_GRAPHICS_LATCHED; + buttonIconColors = CONTROL_BUTTON_ICON_COLOR_LATCHED; + break; + default: + LOG("default case at button state"); + break; + } + + RadioHsWidget::defineButton(*target, buttonBackgroundGraphics, + suffix, icon, buttonIconColors); +} + +/*! + Disables specified push button. + + \param hsButtonIdentifier Which button is to be disabled. + */ +void RadioHsWidget::changeButtonToDisabled(int hsButtonIdentifier) +{ + LEVEL2(LOG_METHOD_ENTER); + buttonEvent(static_cast(hsButtonIdentifier), Disabled); +} + +/*! + Enabled specified push button. + + \param hsButtonIdentifier Which button is to be enabled. + */ +void RadioHsWidget::changeButtonToEnabled(int hsButtonIdentifier) +{ + LEVEL2(LOG_METHOD_ENTER); + changeButtonToReleased(hsButtonIdentifier); +} + +/*! + Checks the profile of the device. If profile is offline, user is asked a + permission to start the radio in offline profile. Dialog is shown on + behalf of the radio asking the permission. + + \returns \c true if radio can be started, \c false if device is in + offline profile and user didn't gave permission to start the radio. + */ +bool RadioHsWidget::radioStartPermission() +{ + LOG_METHOD_ENTER; + // This is true by default because we might not be in offline profile and + // starting the radio is allowed in other profiles without asking a + // permission. + bool radioStartPermssion = true; + if (mProfileMonitor->isCurrentProfileOffline()) { + // Device is in offline profile, ask the user for permission to start + HbDeviceMessageBox box(hbTrId( + "txt_fmradiohswidget_rad_info_activate_radio_in_offline_mode_hs"), + HbMessageBox::MessageTypeQuestion); + box.setTimeout(HbPopup::NoTimeout); + box.exec(); + // radioStartPermssion is now true or false, depending what the user + // selected. If user didn't gave permission, then radio is not + // started. + radioStartPermssion = box.isAcceptAction(box.triggeredAction()); + } + return radioStartPermssion; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/src/radiohswidgetplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/src/radiohswidgetplugin.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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: FM Radio home screen widget plugin +* +*/ + +// System includes +#include +#include +#include + +// User includes +#include "radiohswidgetplugin.h" +#include "radiohswidget.h" + +// Constants +/*! Home screen widget service interface name. */ +const QLatin1String HOME_SCREEN_WIDGET_INTERFACE_NAME( + "com.nokia.symbian.IHomeScreenWidget"); + +/*! + \class RadioHsWidgetPlugin + \brief Implementats the home screen widget plugin. + + RadioHsWidgetPlugin implements needed functions for creating instance of + RadioHsWidget. +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Initialize plugin for FM Radio home screen widget. Contains necessary information about + the RadioWidget that it can be loaded through QT Service Framework. + + \returns Pointer to a new RadioHsWidget or to the NULL. +*/ +QObject *RadioHsWidgetPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, + QServiceContext *context, + QAbstractSecuritySession *session) +{ + Q_UNUSED(context); + Q_UNUSED(session); + + // If descriptor interface name matches + if (descriptor.interfaceName() == HOME_SCREEN_WIDGET_INTERFACE_NAME) { + // Create and return new FM Radio home screen widget. + return new RadioHsWidget(); + } else { + // Otherwise return NULL. + return NULL; + } +} + +Q_EXPORT_PLUGIN2(fmradiohswidget, RadioHsWidgetPlugin) diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/src/radiohswidgetprofilereader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/src/radiohswidgetprofilereader.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -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 +// TODO: Profile information should be accessed from QtMobility when it is +// ready. +#include +#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); + } +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/src/radiohswidgetradioserviceclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/src/radiohswidgetradioserviceclient.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,361 @@ +/* +* 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 radio service client +* +*/ + +// System includes +#include + +// User includes +#include "radiohswidgetradioserviceclient.h" +#include "radiohswidget.h" +#include "radionotificationdata.h" +#include "radioservicedef.h" +#include "radiologger.h" + +/*! + \class RadioHsWidgetRadioServiceClient + \brief Implementation of QtHighway based communicator with radio application. + + RadioHsWidgetRadioServiceClient implements monitoring of radio + information and controlling of radio. This is done by service request + through QtHighway. +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constructs a profile reader which is a child of \a parent. + */ +RadioHsWidgetRadioServiceClient::RadioHsWidgetRadioServiceClient( + RadioHsWidget *parent) : + QObject(parent), + mParent(*parent), + mRequestPending(false), + mRadioMonitorRequest(NULL), + mRadioControlRequest(NULL), + mDataInitialized(false) +{ + LOG_METHOD; +} + +/*! + Destructor + */ +RadioHsWidgetRadioServiceClient::~RadioHsWidgetRadioServiceClient() +{ + LOG_METHOD; + stopMonitoring(); +} + +/*! + Command FM Radio station. + + \param command Command to request radio to perform. + */ +void RadioHsWidgetRadioServiceClient::commandFmRadio( + const RadioServiceCommand::CommandId command) +{ + LOG_METHOD_ENTER; + QVariant commandArgument; + commandArgument.setValue(static_cast(command)); + FmRadio::VisibiltyAfterRequest visibility; + if (command == RadioServiceCommand::Foreground) { + visibility = FmRadio::VisibiltyToForeground; + } else if (command == RadioServiceCommand::Background) { + visibility = FmRadio::VisibiltyToBackground; + } else { + visibility = FmRadio::VisibiltyDoNotChange; + } + sendControlRequest(commandArgument, visibility); +} + +/*! + Start radio monitoring. + + \param visibility Desired visibility for the radio after the request. + */ +void RadioHsWidgetRadioServiceClient::startMonitoring( + FmRadio::VisibiltyAfterRequest visibility) +{ + LOG_METHOD_ENTER; + createMonitorServiceRequest(); + sendMonitorRequest(visibility); +} + +/*! + Stops radio monitoring. + */ +void RadioHsWidgetRadioServiceClient::stopMonitoring() +{ + LOG_METHOD_ENTER; + // Delete the mRadioMonitorRequest. + if (mRadioMonitorRequest) { + delete mRadioMonitorRequest; + mRadioMonitorRequest = NULL; + mRequestPending = false; + mDataInitialized = false; + } +} + +/*! + Creates and returns RadioNotificationData. + This is needed because radionotificationdata.h cannot be + included on test code. + */ +QVariant RadioHsWidgetRadioServiceClient::createRadioNotificationData(int type, const QVariant& data) +{ + LOG_METHOD_ENTER; + QVariant ret; + ret.setValue(RadioNotificationData(type, data)); + return ret; +} + + +/*! + Handles request errors. + + \param errorCode Code of the error type. + \param errorMessage Error message. + */ +void RadioHsWidgetRadioServiceClient::handleError(const int errorCode, + const QString &errorMessage) +{ + LOG_METHOD_ENTER; + Q_UNUSED(errorMessage) + LEVEL2(LOG_SLOT_CALLER); + handleRequestError(errorCode); +} + +/*! + Handle changes in FM Radio. + + \param value List of information published by radio. + */ +void RadioHsWidgetRadioServiceClient::handleFmRadioChange( + const QVariant &value) +{ + LOG_METHOD_ENTER; + LEVEL2(LOG_SLOT_CALLER); + // Request is not pending anymore. + mRequestPending = false; + // If first request was refresh operation. + if (!mDataInitialized) { + LOG("Set operation to KRadioServiceMonitorOperation"); + // Change the operation to the monitoring. + mRadioMonitorRequest->setOperation(RADIO_MONITOR_SERVICE_OPERATION); + // Data is now initialized. + mDataInitialized = true; + } + // Request notifications again. + startMonitoring(FmRadio::VisibiltyDoNotChange); + + // If valid and right kind of data was received. + if (value.canConvert(QVariant::List) ) { + QVariantList notificationList = value.toList(); + // Iterate through the list. + foreach (const QVariant& variant, notificationList) { + // Extract notification data. + RadioNotificationData notification = variant.value(); + // And it's type. + const int notificationId = notification.mType; + // And the data + const QVariant notificationData = notification.mData; + // If the data is valid. + if (notificationData.isValid()) { + // Notify the observer about the new information. + mParent.handleRadioInformationChange(notificationId, notificationData); + } + } + } +} + +/*! + Handles request error. + + \param error Identifies the error. + */ +void RadioHsWidgetRadioServiceClient::handleRequestError(const int error) +{ + LOG_METHOD; + QString errorStr; + switch (error) { + case XQService::ENoError: + errorStr = "No error"; + break; + case XQService::EConnectionError: + errorStr = "Error in IPC Connection"; + break; + case XQService::EConnectionClosed: + errorStr = "IPC Connection is closed"; + stopMonitoring(); + mParent.handleRadioStateChange(FmRadio::StateNotRunning); + break; + case XQService::EServerNotFound: + errorStr = "Can not find server"; + break; + case XQService::EIPCError: + errorStr = "Known IPC error defined by SDK"; + break; + case XQService::EUnknownError: + errorStr = "Unknown IPC error"; + break; + case XQService::ERequestPending: + errorStr = "Already pending request"; + break; + default: + errorStr = "default case at error"; + break; + } + LOG(GETSTRING(errorStr)); +} + +/*! + Creates control service request object. + */ +void RadioHsWidgetRadioServiceClient::createControlServiceRequest() +{ + LOG_METHOD_ENTER; + if (!mRadioControlRequest) { + LOG("Create request"); + mRadioControlRequest = mApplicationManager.create( + RADIO_CONTROL_SERVICE, RADIO_CONTROL_SERVICE_OPERATION, false); + + if (mRadioControlRequest) { + LOG("Request created"); + // Connect request to handle it's error. + Radio::connect(mRadioControlRequest, + SIGNAL(requestError(int,const QString&)), this, + SLOT(handleError(int,const QString&))); + + // Request is synchronous. + mRadioControlRequest->setSynchronous(true); + // Request is not embedded. + mRadioControlRequest->setEmbedded(false); + } + } +} + +/*! + Creates monitor service request object. + */ +void RadioHsWidgetRadioServiceClient::createMonitorServiceRequest() +{ + LOG_METHOD_ENTER; + if (!mRadioMonitorRequest) { + // If data is not initialized, set operation to refresh, + // otherwise to monitor operation. + QString operation = mDataInitialized ? RADIO_MONITOR_SERVICE_OPERATION + : RADIO_MONITOR_SERVICE_REFRESH_OPERATION; + + LOG("Create request"); + mRadioMonitorRequest = mApplicationManager.create( + RADIO_MONITOR_SERVICE, operation, false); + + if (mRadioMonitorRequest) { + LOG("Request created"); + // Connect request to handle it's completion. + Radio::connect(mRadioMonitorRequest, SIGNAL(requestOk(const QVariant&)), + this, SLOT(handleFmRadioChange(const QVariant&))); + // Connect request to handle it's error. + Radio::connect(mRadioMonitorRequest, + SIGNAL(requestError(int,const QString&)), this, + SLOT(handleError(int,const QString&))); + + // Request is asynchronous. + mRadioMonitorRequest->setSynchronous(false); + // Request is not embedded. + mRadioMonitorRequest->setEmbedded(false); + } + } +} + +/*! + Sends the control request containing the command. + + \param argument Contains the command. + \param visibility Desired visibility for the radio after the request. + */ +void RadioHsWidgetRadioServiceClient::sendControlRequest( + const QVariant &argument, + const FmRadio::VisibiltyAfterRequest visibility) +{ + LOG_METHOD_ENTER; + if (!argument.isValid()) { + return; + } + + // If there is not mRadioControlRequest already. + if (!mRadioControlRequest) { + // Create it. + createControlServiceRequest(); + } + + // Set argument list for request. + QVariantList arguments; + arguments.append(argument); + mRadioControlRequest->setArguments(arguments); + + prepareRequestInfo(mRadioControlRequest, visibility); + + LOG("Send request"); + bool res = mRadioControlRequest->send(); + + /* + if (!res) { + LOG("Send failed"); + int error = mRadioControlRequest->lastError(); + handleRequestError(error); + } + */ +} + +/*! + Sends the monitor request. + + \param visibility Desired visibility for the radio after the request. + */ +void RadioHsWidgetRadioServiceClient::sendMonitorRequest( + const FmRadio::VisibiltyAfterRequest visibility) +{ + LOG_METHOD_ENTER; + prepareRequestInfo(mRadioMonitorRequest, visibility); + if (!mRequestPending) { + LOG("Send request"); + mRequestPending = mRadioMonitorRequest->send(); + } +} + +/*! + Prepares the visibility of the request. + + \param request Request to prepare. + \param visibility Desired visibility for the radio after the request. + */ +void RadioHsWidgetRadioServiceClient::prepareRequestInfo( + XQAiwRequest *request, + const FmRadio::VisibiltyAfterRequest visibility) +{ + LOG_METHOD_ENTER; + XQRequestInfo info; + if (visibility == FmRadio::VisibiltyToForeground) { + info.setForeground(true); + } else if (visibility == FmRadio::VisibiltyToBackground) { + info.setBackground(true); + } + if (request) { + request->setInfo(info); + } +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqaiwinterfacedescriptor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqaiwinterfacedescriptor.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,44 @@ +/* +* 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: XQAiwInterfaceDescriptor stub for FM Radio home screen widget +* unit testing. +* +*/ + +// User includes +#include "xqaiwinterfacedescriptor.h" +#include "radiologger.h" + +/*! + \class XQAiwInterfaceDescriptor + \brief Stub implementation of XQAiwInterfaceDescriptor for unit testing +*/ + +// ======== MEMBER FUNCTIONS ======== + +XQAiwInterfaceDescriptor::XQAiwInterfaceDescriptor() +{ + LOG_METHOD_ENTER; +} + +XQAiwInterfaceDescriptor::~XQAiwInterfaceDescriptor() +{ + LOG_METHOD_ENTER; +} + +bool XQAiwInterfaceDescriptor::operator==(const XQAiwInterfaceDescriptor& other) const +{ + LOG_METHOD_ENTER; + return *this == other; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqaiwinterfacedescriptor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqaiwinterfacedescriptor.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,36 @@ +/* +* 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: Stub for FM Radio home screen widget unit testing. +* +*/ + +#ifndef XQAIWINTERFACEDESCRIPTOR_H +#define XQAIWINTERFACEDESCRIPTOR_H + +// System includes +#include +#include + +class XQAiwInterfaceDescriptor : public QObject +{ + Q_OBJECT + +public: + XQAiwInterfaceDescriptor(); + ~XQAiwInterfaceDescriptor(); + bool operator==(const XQAiwInterfaceDescriptor& other) const; + +}; + +#endif // XQAIWINTERFACEDESCRIPTOR_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqaiwrequest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqaiwrequest.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,102 @@ +/* +* 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: XQAiwRequest stub for FM Radio home screen widget +* unit testing. +* +*/ + +// System includes +#include + +// User includes +#include "xqaiwrequest.h" +#include "xqrequestinfo.h" +#include "radioservicedef.h" +#include "radiologger.h" + +extern QVariantList request_mocks; +extern int send_count; + +/*! + \class XQAiwRequest + \brief Stub implementation of XQAiwRequest for unit testing +*/ + +// ======== MEMBER FUNCTIONS ======== + +XQAiwRequest::XQAiwRequest(const QString &interface, + const QString &operation, bool isEmbedded) : + mOperation(operation), + mRequestCount(0) +{ + LOG_METHOD_ENTER; +} + +XQAiwRequest::~XQAiwRequest() +{ + LOG_METHOD_ENTER; +} + +static void replyRequestOk(QVariant reply) +{ + LOG_METHOD_ENTER; +} + +void XQAiwRequest::setOperation(const QString &operation) +{ + LOG_METHOD_ENTER; + mOperation = operation; +} + +void XQAiwRequest::setSynchronous(bool synchronous) +{ + LOG_METHOD_ENTER; +} + +void XQAiwRequest::setEmbedded(bool embedded) +{ + LOG_METHOD_ENTER; +} + +bool XQAiwRequest::send() +{ + LOG_METHOD_ENTER; + pendingRequests.append(mOperation); + replyAfterDelay(); + return true; +} + +void XQAiwRequest::setInfo(const XQRequestInfo &info) +{ + LOG_METHOD_ENTER; +} + +bool XQAiwRequest::replyAfterDelay() +{ + LOG_METHOD; + QString operationStr; + bool ret = true; + if (mRequestCount < send_count) { + replyRequestOk((request_mocks.at(mRequestCount)).toList()); + ret = false; + } + return ret; +} + +void XQAiwRequest::replyRequestOk(const QVariantList &reply) +{ + LOG_METHOD_ENTER; + ++mRequestCount; + emit requestOk(reply); +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqaiwrequest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqaiwrequest.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,61 @@ +/* +* 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: Stub for FM Radio home screen widget unit testing. +* +*/ + +#ifndef XQAIWREQUEST_H +#define XQAIWREQUEST_H + +// System includes +#include +#include +#include + +// User includes +#include + +class XQAiwRequest : public QObject +{ + Q_OBJECT + +public: + XQAiwRequest(const QString &interface, const QString &operation, bool isEmbedded); + ~XQAiwRequest(); + + void replyRequestOk(const QVariantList &reply); + +public slots: + void setOperation(const QString &operation); + void setSynchronous(bool synchronous); + void setEmbedded(bool embedded); + bool send(); + void setInfo(const XQRequestInfo &info); + +signals: + void requestOk(const QVariant& result); + void requestError(int errorCode, const QString& errorMessage); + +private: + bool replyAfterDelay(); + + +private: // data + QString mOperation; + QStringList pendingRequests; + int mRequestCount; + +}; + +#endif // XQAIWREQUEST_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqapplicationmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqapplicationmanager.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,56 @@ +/* +* 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: XQApplicationManager stub for FM Radio home screen widget +* unit testing. +* +*/ + +// User includes +#include "xqapplicationmanager.h" +#include "xqaiwrequest.h" +#include "radioservicedef.h" +#include "radiologger.h" + +XQAiwRequest *application_manager_mock_refresh_request = new XQAiwRequest("interface", "operation", false); +XQAiwRequest *application_manager_mock_monitor_request = new XQAiwRequest("interface", "operation2", false); + +/*! + \class XQApplicationManager + \brief Stub implementation of XQApplicationManager for unit testing +*/ + +// ======== MEMBER FUNCTIONS ======== + +XQApplicationManager::XQApplicationManager() +{ + LOG_METHOD_ENTER; +} + +XQApplicationManager::~XQApplicationManager() +{ + LOG_METHOD_ENTER; +} + +XQAiwRequest* XQApplicationManager::create(const QString& interface, const QString& operation, bool embedded) +{ + LOG_METHOD_ENTER; + if (operation.compare(RADIO_MONITOR_SERVICE_REFRESH_OPERATION) == 0) { + application_manager_mock_refresh_request = new XQAiwRequest(interface, operation, embedded); + return application_manager_mock_refresh_request; + } else if (operation.compare(RADIO_MONITOR_SERVICE_OPERATION) == 0) { + application_manager_mock_monitor_request = new XQAiwRequest(interface, operation, embedded); + return application_manager_mock_monitor_request; + } + return NULL; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqapplicationmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqapplicationmanager.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,40 @@ +/* +* 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: Stub for FM Radio home screen widget unit testing. +* +*/ + +#ifndef XQAPPLICATIONMANAGER_H +#define XQAPPLICATIONMANAGER_H + +// System includes +#include + +// User includes +#include "xqaiwrequest.h" + +class XQApplicationManager : public QObject +{ + Q_OBJECT + +public: + + XQApplicationManager(); + ~XQApplicationManager(); + + XQAiwRequest* create(const QString& interface, const QString& operation, bool embedded = true); + +}; + +#endif // XQAPPLICATIONMANAGER_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqrequestinfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqrequestinfo.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,53 @@ +/* +* 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: XQRequestInfo stub for FM Radio home screen widget +* unit testing. +* +*/ + +// User includes +#include "xqrequestinfo.h" +#include "radiologger.h" + +/*! + \class XQRequestInfo + \brief Stub implementation of XQRequestInfo for unit testing +*/ + +// ======== MEMBER FUNCTIONS ======== + +XQRequestInfo::XQRequestInfo() +{ + LOG_METHOD_ENTER; +} + +XQRequestInfo::~XQRequestInfo() +{ + LOG_METHOD_ENTER; +} + +void XQRequestInfo::setForeground(bool on) +{ + LOG_METHOD_ENTER; +} + +void XQRequestInfo::setBackground(bool on) +{ + LOG_METHOD_ENTER; +} + +void XQRequestInfo::setInfo(const QString &key, const QVariant &value) +{ + LOG_METHOD_ENTER; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqrequestinfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqrequestinfo.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: Stub for FM Radio home screen widget unit testing. +* +*/ + +#ifndef XQREQUESTINFO_H +#define XQREQUESTINFO_H + +// System includes +#include +#include + +class XQRequestInfo : public QObject +{ + Q_OBJECT + +public: + XQRequestInfo(); + ~XQRequestInfo(); + + void setForeground(bool on); + void setBackground(bool on); + void setInfo(const QString &key, const QVariant &value); + +public slots: + +signals: + +}; + +#endif // XQREQUESTINFO_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqsettingskey.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqsettingskey.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,60 @@ +/* +* 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: XQSettingsKey stub for FM Radio home screen widget +* unit testing. +* +*/ + +// User includes +#include "xqsettingskey.h" +#include "radiologger.h" + +/*! + \class XQSettingsKey + \brief Stub implementation of XQSettingsKey for unit testing +*/ + +// ======== MEMBER FUNCTIONS ======== + +XQSettingsKey::XQSettingsKey(XQSettingsKey::Target target, long int uid, + unsigned long int key) +{ + LOG_METHOD_ENTER; + m_target = target; + m_uid = uid; + m_key = key; +} + +XQSettingsKey::~XQSettingsKey() +{ + LOG_METHOD_ENTER; +} + +XQSettingsKey::Target XQSettingsKey::target() const +{ + LOG_METHOD_ENTER; + return m_target; +} + +long int XQSettingsKey::uid() const +{ + LOG_METHOD_ENTER; + return m_uid; +} + +unsigned long int XQSettingsKey::key() const +{ + LOG_METHOD_ENTER; + return m_key; +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqsettingskey.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqsettingskey.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: Stub for FM Radio home screen widget unit testing. +* +*/ + +#ifndef XQSETTINGSKEY_H +#define XQSETTINGSKEY_H + +class XQSettingsKey +{ +public: + enum Target + { + TargetCentralRepository = 0, + TargetPublishAndSubscribe + }; + + XQSettingsKey(XQSettingsKey::Target target, long int uid, unsigned long int key); + ~XQSettingsKey(); + + XQSettingsKey::Target target() const; + long int uid() const; + unsigned long int key() const; + +protected: + XQSettingsKey::Target m_target; + long int m_uid; + unsigned long int m_key; +}; + +#endif // XQSETTINGSKEY_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqsettingsmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqsettingsmanager.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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: XQSettingsManager stub for FM Radio home screen widget +* unit testing. +* +*/ + +// User includes +#include "xqsettingsmanager.h" +#include "radiologger.h" + +extern QVariant settings_manager_mock_return_profile; +extern QVariant settings_manager_mock_return_2nd_profile; +extern bool settings_manager_mock_bool_return; + +/*! + \class XQSettingsManager + \brief Stub implementation of XQSettingsManager for unit testing +*/ + +// ======== MEMBER FUNCTIONS ======== + +XQSettingsManager::XQSettingsManager(QObject* parent) : QObject(parent) +{ + LOG_METHOD_ENTER; +} + +XQSettingsManager::~XQSettingsManager() +{ + LOG_METHOD_ENTER; +} + +QVariant XQSettingsManager::readItemValue(const XQSettingsKey& key, XQSettingsManager::Type type) +{ + LOG_METHOD_ENTER; + Q_UNUSED(key); + Q_UNUSED(type); + return settings_manager_mock_return_profile; +} + +bool XQSettingsManager::startMonitoring(const XQSettingsKey& key, XQSettingsManager::Type type) +{ + LOG_METHOD_ENTER; + // Set the 2nd startup mode. + settings_manager_mock_return_profile = settings_manager_mock_return_2nd_profile; + emit valueChanged(key, type); + return settings_manager_mock_bool_return; +} + +bool XQSettingsManager::stopMonitoring(const XQSettingsKey& key) +{ + return true; +} + diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/stub/xqsettingsmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/stub/xqsettingsmanager.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,68 @@ +/* +* 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: Stub for FM Radio home screen widget unit testing. +* +*/ + +#ifndef XQSETTINGSMANAGER_H +#define XQSETTINGSMANAGER_H + +// System includes +#include +#include + +// Forward declarations +class XQSettingsKey; + +class XQSettingsManager : public QObject +{ + Q_OBJECT + +public: + + enum Type + { + TypeVariant = 0, + TypeInt, + TypeDouble, + TypeString, + TypeByteArray + }; + + enum Error + { + NoError = 0, + OutOfMemoryError, + NotFoundError, + AlreadyExistsError, + PermissionDeniedError, + BadTypeError, + NotSupportedError, + UnknownError = -1 + }; + + XQSettingsManager(QObject* parent = 0); + ~XQSettingsManager(); + + QVariant readItemValue(const XQSettingsKey& key, XQSettingsManager::Type type = XQSettingsManager::TypeVariant); + bool startMonitoring(const XQSettingsKey& key, XQSettingsManager::Type type = XQSettingsManager::TypeVariant); + bool stopMonitoring(const XQSettingsKey& key); + +signals: + void valueChanged(const XQSettingsKey& key, const QVariant& value); + void itemDeleted(const XQSettingsKey& key); + +}; + +#endif // XQSETTINGSMANAGER_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/tsrc/buildflags.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/tsrc/buildflags.pri Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,82 @@ +# +# 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: +# + +# ########################################################## +# Start of Flag definitions +# Add or remove comments to disable or enable the features +# ########################################################## + +# ########################################################## +# Start of Logging flag definitions +# ########################################################## + +# Full logging flag that enables the full logging including also timestamps +# Enabled by default in debug builds +# CONFIG(debug, debug|release) : LOGGING_FLAGS += LOGGING_ENABLED + +# Uncomment to enable full logging in release builds +# LOGGING_FLAGS *= LOGGING_ENABLED + +# Timestamp logging flag that enables only timestamp logging +# LOGGING_FLAGS += TIMESTAMP_LOGGING_ENABLED + +# Combines Ui and Engine logs by feeding UI traces to the engine logger +# LOGGING_FLAGS += COMBINE_WITH_ENGINE_LOGGER + +# Logging level +# 1 - Normal level +# 2 - More verbose level +# 3 - Most verbose level +LOGGING_FLAGS += LOGGING_LEVEL=1 + +# Select which radio component is being logged +# 1 - Radio application +# 2 - Radio homescreen widget +LOGGING_FLAGS += LOGGED_COMPONENT=2 + +contains(LOGGING_FLAGS, TIMESTAMP_LOGGING_ENABLED)|contains(LOGGING_FLAGS, LOGGING_ENABLED) { + + # Writes debug prints to file if enabled + #LOGGING_FLAGS += TRACE_TO_FILE + + # Settings for the log file name + symbian:contains(LOGGING_FLAGS, TRACE_TO_FILE) { + LOGGING_FLAGS += \"TRACE_OUTPUT_FILE=\\\"c:/logs/radio/radiohswidget.txt\\\"\" + LOGGING_FLAGS += FILTER_BY_LOGMARKER=true + } +} + +# Method for testing signal-slot connections +# 1 - Log failed connection +# 2 - Log failed connection and halt debugger +LOGGING_FLAGS += CONNECT_TEST_MODE=2 + +# Logging is always enabled in Win32 environment +win32:LOGGING_FLAGS *= LOGGING_ENABLED + +DEFINES += $$LOGGING_FLAGS + +# ########################################################## +# End of Flag definitions +# ########################################################## + +# $$_PRO_FILE_PWD_ points to the directory of the pro file +MOC_DIR = $$_PRO_FILE_PWD_/tmp +RCC_DIR = $$_PRO_FILE_PWD_/tmp +OBJECTS_DIR = $$_PRO_FILE_PWD_/tmp +UI_DIR = $$_PRO_FILE_PWD_/tmp +UI_HEADERS_DIR = $$_PRO_FILE_PWD_/tmp +UI_SOURCES_DIR = $$_PRO_FILE_PWD_/tmp diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/tsrc/inc/radiohswidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/tsrc/inc/radiohswidget.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,93 @@ +/* +* 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: FM Radio home screen widget unit tests. +* +*/ + +#ifndef T_RADIOHSWIDGETSTUB_H +#define T_RADIOHSWIDGETSTUB_H + +// INCLUDES +#include +#include +#include + +/*! + \struct ReceivedInfo + \brief Helper to store received information on unit tests. +*/ +struct ReceivedInfo { + /*! Stores the type of received information. */ + int informationType; + /*! Stores the actual data of received information. */ + QVariant information; +}; + +/*! + \namespace FmRadio + \brief Wraps enumerators for radio state and service request visibility. + */ +namespace FmRadio +{ + /*! Enum for radio application states. */ + enum State + { + StateUndefined, + StateNotRunning, + StateStarting, + StateRunning, + StateSeeking, + StateAntennaNotConnected, + StateClosing + }; + + /*! Enum for controlling the visibility of the radio application. */ + enum VisibiltyAfterRequest + { + VisibiltyDoNotChange, + VisibiltyToForeground, + VisibiltyToBackground + }; + +} + +class RadioHsWidget : public QObject +{ + Q_OBJECT + +public: + + RadioHsWidget(); + ~RadioHsWidget(); + + void handleRadioInformationChange(const int informationType, + const QVariant &information); + + void handleRadioStateChange(const QVariant &value); + + ReceivedInfo receivedInformation(); + int receivedInformationCount(); + + void reset(); + +private: // data + + /*! Stores received information. Correctness of + RadioHsWidgetRadioServiceClient mediated information is checked from here. + */ + QList mReceivedInformation; + +}; + +#endif // T_RADIOHSWIDGETSTUB_H diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/tsrc/inc/t_radiohswidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/tsrc/inc/t_radiohswidget.h Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,86 @@ +/* +* 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: +* +*/ + + +#ifndef T_RADIOHSWIDGET_H_ +#define T_RADIOHSWIDGET_H_ + + +// System includes +#include + +// User includes +#include "radiohswidget.h" +#include "radiohswidgetprofilereader.h" +#include "radiohswidgetradioserviceclient.h" + +/*! + \struct SendInfo + \brief Helper to store send information on unit tests. +*/ +struct SendInfo { + /*! Stores the type of information send. */ + int informationType; + /*! Stores the information to send. */ + QVariant information; + /*! Stores the actual data of information send. */ + QVariant data; +}; + + +class TestRadioHsWidget : public QObject +{ + Q_OBJECT + +public: + + TestRadioHsWidget(); + ~TestRadioHsWidget(); + +public slots: + +private slots: + // test framework called slots + void initTestCase(); + void init(); + void cleanup(); + void cleanupTestCase(); + void offlineModeTest(); + void validReplies(); + void invalidReplies(); + +private: + void createSendInfo(int informationType, const QVariant information); + void verifyReceivedInformation(int informationType, + const QVariant &receivedInformation, const QVariant &sendInformation); + +private: // Data + /*! Stores RadioHsWidget stub. */ + QScopedPointer mRadioHsWidgetStub; + /*! Stores RadioHsWidgetProfileReader. */ + QScopedPointer mProfileReader; + /*! Stores RadioHsWidgetRadioServiceClient. */ + QScopedPointer mServiceClient; + + /*! Stores refresh request mock. */ + //XQAiwRequest *application_manager_mock_refresh_request; + + /*! Stores send information. */ + QList mSendInfos; +}; + +#endif /* T_RADIOHSWIDGET_H_ */ diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/tsrc/src/radiohswidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/tsrc/src/radiohswidget.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,107 @@ +/* +* 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: FM Radio home screen widget +* +*/ + +// User includes +#include "radiohswidget.h" +#include "radiologger.h" + +// This is defined in t_radiohswidget.cpp +extern int EMPTY_REPLY; + +/*! + \class RadioHsWidget + \brief Stub implementation of FM Radio home screen widget for unit + testing. + + RadioHsWidget implements needed functions for the FM Radio home screen + widget unit tests. +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constrcutor. + */ +RadioHsWidget::RadioHsWidget() +{ + LOG_METHOD; +} + +/*! + Destructor. + */ +RadioHsWidget::~RadioHsWidget() +{ + LOG_METHOD; +} + +/*! + Handles changes in FM Radio information. + + \param informationType Type of changed information. + \param information Actual information. + */ +void RadioHsWidget::handleRadioInformationChange(const int informationType, + const QVariant &information) +{ + LOG_METHOD; + if (informationType != EMPTY_REPLY) { + ReceivedInfo info; + info.informationType = informationType; + info.information = information; + mReceivedInformation.append(info); + } +} + +/*! + Handles changes in FM Radio state. + + \param value New state of the radio application. +*/ +void RadioHsWidget::handleRadioStateChange(const QVariant &value) +{ + LOG_METHOD; + Q_UNUSED(value); +} + +/*! + Returns the last received information and removes it from the list. +*/ +ReceivedInfo RadioHsWidget::receivedInformation() +{ + LOG_METHOD; + ReceivedInfo ret; + if (!mReceivedInformation.isEmpty()) { + ret = mReceivedInformation.takeLast(); + } + return ret; +} +/*! + Returns the count of received information. +*/ +int RadioHsWidget::receivedInformationCount() +{ + return mReceivedInformation.count(); +} + +/*! + Clears the received info list. +*/ +void RadioHsWidget::reset() +{ + mReceivedInformation.clear(); +} diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/tsrc/src/t_radiohswidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/tsrc/src/t_radiohswidget.cpp Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,405 @@ +/* +* 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: +* +*/ + +// System includes +#include + +// User Includes +#include "t_radiohswidget.h" +#include "xqsettingsmanager.h" +#include "xqapplicationmanager.h" +#include "xqaiwrequest.h" +#include "xqaiwinterfacedescriptor.h" +#include "radioservicedef.h" +#include "radiologger.h" + +// Constants +/** +* From ProfileEngineSDKCRKeys.h +* The id of the currently active profile, integer value. +* Possible values: +* +* 0 = General profile (default value)
+* 1 = Silent profile
+* 2 = Meeting profile
+* 3 = Outdoor profile
+* 4 = Pager profile
+* 5 = Off-line profile
+* 6 = Drive profile
+* 30-49 = User-created profiles
+**/ +const int PROFILE_GENERAL(0); +const int PROFILE_SILENT(1); +const int PROFILE_MEETING(2); +const int PROFILE_OUTDOOR(3); +const int PROFILE_PAGER(4); +const int PROFILE_OFFLINE(5); +const int PROFILE_DRIVE(6); +const int PROFILE_USER_CREATED(35); + +/** Requests are not embedded. */ +const bool EMBEDDED_REQUEST(false); + +/** Last request should be answered with empty reply. */ +int EMPTY_REPLY(-5); + +/** Test values for favorite station count. */ +const int FAVORITE_STATION_COUNT_INVALID_TOO_LOW1(-56); +const int FAVORITE_STATION_COUNT_INVALID_TOO_LOW2(-1); +const int FAVORITE_STATION_COUNT_VALID_LOWER_BOUNDARY(0); +const int FAVORITE_STATION_COUNT_VALID1(1); +const int FAVORITE_STATION_COUNT_VALID2(2); +const int FAVORITE_STATION_COUNT_VALID3(3); +const int FAVORITE_STATION_COUNT_VALID4(9); +const int FAVORITE_STATION_COUNT_VALID5(78); +const int FAVORITE_STATION_COUNT_VALID_UPPER_BOUNDARY(100); +const int FAVORITE_STATION_COUNT_INVALID_TOO_HIGH1(101); +const int FAVORITE_STATION_COUNT_INVALID_TOO_HIGH2(1256); + +/** Test values for textual information. */ +const QString TEST_FREQUENCY("99.9"); +const QString TEST_NAME("Radio Test"); +const QString TEST_GENRE("Test GenRe"); +const QString TEST_RADIO_TEXT("Test RDS"); +const QString TEST_DYNAMIC_PSNAME("Dynamic PS Name test"); +const QString TEST_EMPTY_STRING(""); +const QString TEST_INVALID_STRING; +/** This test string contains 1000 characters. */ +const QString TEST_TOO_LONG_STRING("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); + +/** Test values for service notification types. */ +const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW1(-357); +const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW2(-1); +const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW3(0); +const int RADIO_SERVICE_NOTIFICATION_ID_VALID_LOWER_BOUNDARY(1); +const int RADIO_SERVICE_NOTIFICATION_ID_VALID_UPPER_BOUNDARY(8); +const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH1(9); +const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH2(57982); +const int RADIO_STATUS_INVALID_TOO_LOW1(-581); +const int RADIO_STATUS_INVALID_TOO_LOW2(-1); +const int RADIO_STATUS_VALID_LOWER_BOUNDARY(0); +const int RADIO_STATUS_VALID_UPPER_BOUNDARY(5); +const int RADIO_STATUS_INVALID_TOO_HIGH1(6); +const int RADIO_STATUS_INVALID_TOO_HIGH2(456); + +/** Mock returns for settings manager stub. */ +QVariant settings_manager_mock_return_profile; +QVariant settings_manager_mock_return_2nd_profile; +bool settings_manager_mock_bool_return; + +/** These request are defined in stub xqapplicationmanager.cpp. */ +extern XQAiwRequest *application_manager_mock_refresh_request; +extern XQAiwRequest *application_manager_mock_monitor_request; + +/** List for request mocks. */ +QVariantList request_mocks; +/** Amount of requests send. */ +int send_count; + + +/*! + \class TestRadioHsWidget + \brief Unit testing for FM Radio hs widget. + + TestRadioHsWidget implements needed functions for the FM Radio home screen + widget unit tests. +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Main function. + + There's been problems with QTEST_MAIN macro, so main function is defined + here. +*/ +int main(int /* argc*/, char *argv[]) +{ + LOG_METHOD_ENTER; + TestRadioHsWidget tv; + + char *pass[3]; + pass[0] = argv[0]; + pass[1] = "-o"; + pass[2] = "c:\\data\\testradiohswidget.txt"; + + int res = QTest::qExec(&tv, 3, pass); + + return res; +} + +/*! + Constructor. + */ +TestRadioHsWidget::TestRadioHsWidget() +{ + LOG_METHOD_ENTER; +} + + +/*! + Destructor. + */ +TestRadioHsWidget::~TestRadioHsWidget() +{ + LOG_METHOD_ENTER; +} + +/*! + Called before each testfunction is executed. + */ +void TestRadioHsWidget::init() +{ + LOG_METHOD_ENTER; + settings_manager_mock_return_profile = PROFILE_GENERAL; + request_mocks.clear(); + mSendInfos.clear(); + send_count = -1; + mRadioHsWidgetStub.data()->reset(); +} + +/*! + Called after every testfunction. + */ +void TestRadioHsWidget::cleanup() +{ + LOG_METHOD_ENTER; +} + +/*! + Called before the first testfunction is executed + */ +void TestRadioHsWidget::initTestCase() +{ + LOG_METHOD_ENTER; + mRadioHsWidgetStub.reset(new RadioHsWidget()); + QVERIFY(mRadioHsWidgetStub); + mProfileReader.reset(new RadioHsWidgetProfileReader(mRadioHsWidgetStub.data())); + QVERIFY(mProfileReader); + mServiceClient.reset(new RadioHsWidgetRadioServiceClient(mRadioHsWidgetStub.data())); + QVERIFY(mServiceClient); +} + +/*! + Called after the last testfunction was executed. + */ +void TestRadioHsWidget::cleanupTestCase() +{ + LOG_METHOD_ENTER; +} + +/*! + Tests RadioHsWidgetProfileReader and it's isCurrentProfileOffline() + function. + */ +void TestRadioHsWidget::offlineModeTest() +{ + LOG_METHOD; + settings_manager_mock_return_profile = PROFILE_GENERAL; + bool isOffline = mProfileReader.data()->isCurrentProfileOffline(); + QVERIFY2(( isOffline == false ), "FmRadioHsWidget:RadioHsWidget profile is offline"); + settings_manager_mock_return_profile = PROFILE_OFFLINE; + isOffline = mProfileReader.data()->isCurrentProfileOffline(); + QVERIFY2(( isOffline == true ), "FmRadioHsWidget:RadioHsWidget profile is not offline"); + settings_manager_mock_return_profile = PROFILE_USER_CREATED; + isOffline = mProfileReader.data()->isCurrentProfileOffline(); + QVERIFY2(( isOffline == false ), "FmRadioHsWidget:RadioHsWidget profile is offline"); +} + +/*! + Tests RadioHsWidgetRadioServiceClient class and it's ability to receive + and forward valid information. + */ +void TestRadioHsWidget::validReplies() +{ + LOG_METHOD; + // Replies that should be ok. + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID_LOWER_BOUNDARY)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID1)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID2)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID3)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID4)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID5)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID_UPPER_BOUNDARY)); + createSendInfo(RadioServiceNotification::CurrentIsFavorite, QVariant(true)); + createSendInfo(RadioServiceNotification::CurrentIsFavorite, QVariant(false)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::UnSpecified)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::Playing)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::Muted)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::Seeking)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::NoAntenna)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::PoweringOff)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_VALID_LOWER_BOUNDARY)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_VALID_UPPER_BOUNDARY)); + createSendInfo(RadioServiceNotification::Frequency, QVariant(TEST_FREQUENCY)); + createSendInfo(RadioServiceNotification::Name, QVariant(TEST_NAME)); + createSendInfo(RadioServiceNotification::Name, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RadioServiceNotification::Genre, QVariant(TEST_GENRE)); + createSendInfo(RadioServiceNotification::RadioText, QVariant(TEST_RADIO_TEXT)); + createSendInfo(RadioServiceNotification::DynamicPS, QVariant(TEST_DYNAMIC_PSNAME)); + // Empty reply should be last to put RServiceClient to make an request, which is not replied. + createSendInfo(EMPTY_REPLY, QVariant(EMPTY_REPLY)); + + send_count = mSendInfos.count(); + + mServiceClient.data()->startMonitoring(FmRadio::VisibiltyToBackground); + mServiceClient.data()->stopMonitoring(); + + int receivedCount = mRadioHsWidgetStub.data()->receivedInformationCount(); + QVERIFY2((receivedCount == send_count - 1), "Send and received counts doesn't match"); + + ReceivedInfo temp; + for (int i = 0; i < send_count - 1; i++) { + temp = mRadioHsWidgetStub.data()->receivedInformation(); + QVERIFY(temp.informationType == mSendInfos.at(i).informationType); + verifyReceivedInformation(temp.informationType, temp.information, mSendInfos.at(i).information); + } +} + +/*! + Tests RadioHsWidgetRadioServiceClient class and it's ability to receive + and forward invalid information. + */ +void TestRadioHsWidget::invalidReplies() +{ + LOG_METHOD; + QList skipSendInfo; + // Replies that should not be ok. + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_LOW1)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_LOW2)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_HIGH1)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_HIGH2)); + createSendInfo(RadioServiceNotification::FavoriteCount, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::CurrentIsFavorite, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_LOW1)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_LOW1)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_HIGH1)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_HIGH2)); + createSendInfo(RadioServiceNotification::RadioStatus, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::Frequency, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::Name, QVariant(TEST_INVALID_STRING)); + createSendInfo(RadioServiceNotification::Name, QVariant(TEST_TOO_LONG_STRING)); + createSendInfo(RadioServiceNotification::Name, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::Genre, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::RadioText, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + createSendInfo(RadioServiceNotification::DynamicPS, QVariant()); + skipSendInfo.append(request_mocks.count() - 1); + // Replies that should generate a warning. + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_VALID_LOWER_BOUNDARY, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_VALID_UPPER_BOUNDARY, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW1, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW2, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW3, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH1, QVariant(TEST_EMPTY_STRING)); + createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH2, QVariant(TEST_EMPTY_STRING)); + // Empty reply should be last to put RServiceClient to make an request, which is not replied. + createSendInfo(EMPTY_REPLY, QVariant(EMPTY_REPLY)); + + send_count = mSendInfos.count(); + + mServiceClient.data()->startMonitoring(FmRadio::VisibiltyToBackground); + mServiceClient.data()->stopMonitoring(); + + int receivedCount = mRadioHsWidgetStub.data()->receivedInformationCount(); + int skippedCount = skipSendInfo.count(); + QVERIFY2((receivedCount == send_count - skippedCount - 1), "Send and received counts doesn't match"); + + ReceivedInfo temp; + for (int i = 0; i < send_count - 1; i++) { + if (skipSendInfo.contains(i)) { + // Skip verification for information that was filtered in + // RadioHsWidgetRadioServiceClient. + continue; + } + temp = mRadioHsWidgetStub.data()->receivedInformation(); + QVERIFY(temp.informationType == mSendInfos.at(i).informationType); + verifyReceivedInformation(temp.informationType, temp.information, mSendInfos.at(i).information); + } +} + +/*! + Helper function to store send information and append it to a request + mocks. + */ +void TestRadioHsWidget::createSendInfo(int informationType, const QVariant information) +{ + SendInfo info; + QVariantList notificationList; + + info.informationType = informationType; + info.information = information; + info.data = QVariant(mServiceClient.data()-> + createRadioNotificationData( + info.informationType, + info.information + )); + + mSendInfos.append(info); + + notificationList.append(info.data); + request_mocks.append(QVariant(notificationList)); +} + +/*! + Helper function to verify receved information. + */ +void TestRadioHsWidget::verifyReceivedInformation(int informationType, + const QVariant &receivedInformation, const QVariant &sendInformation) +{ + switch (informationType) { + case RadioServiceNotification::CurrentIsFavorite: + QVERIFY(receivedInformation.canConvert(QVariant::Bool)); + QCOMPARE(receivedInformation.toBool(), sendInformation.toBool()); + break; + case RadioServiceNotification::FavoriteCount: + // Fall through because of similar handling + case RadioServiceNotification::RadioStatus: + QVERIFY(receivedInformation.canConvert(QVariant::Int)); + QCOMPARE(receivedInformation.toInt(), sendInformation.toInt()); + break; + case RadioServiceNotification::Frequency: + // Fall through because of similar type of information and thus + // similar handling + case RadioServiceNotification::Name: + // Fall through because of similar type of information and thus + // similar handling + case RadioServiceNotification::Genre: + // Fall through because of similar type of information and thus + // similar handling + case RadioServiceNotification::RadioText: + // Fall through because of similar type of information and thus + // similar handling + case RadioServiceNotification::DynamicPS: + QVERIFY(receivedInformation.canConvert(QVariant::String)); + QCOMPARE(receivedInformation.toString(), sendInformation.toString()); + break; + default: + QWARN("Default case, shouldn't be here except if specifically testing RadioServiceNotification id out of bounds."); + QVERIFY(receivedInformation.canConvert(QVariant::String)); + QCOMPARE(receivedInformation.toString(), sendInformation.toString()); + break; + } +} + +//QTEST_MAIN(t_radiohswidget) diff -r 6bcf277166c1 -r 451b2e1545b2 radiohswidget/tsrc/t_radiohswidget.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radiohswidget/tsrc/t_radiohswidget.pro Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,64 @@ +# +# 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: +# + +TEMPLATE = app +TARGET = t_radiohswidget + +DEFINES -= XQSETTINGSMANAGER_LIBRARY +DEFINES += XQSETTINGSMANAGER_NO_LIBRARY +DEFINES -= XQSERVICE_EXPORT +DEFINES += XQ_BUILD_XQSERVICE_LIB +DEFINES -= XQSERVICEUTIL_EXPORT +DEFINES += XQ_BUILD_XQSERVICEUTIL_LIB + +symbian: { + TARGET.CAPABILITY = All -TCB -DRM + CONFIG -= hb + MMP_RULES += SMPSAFE +} + +INCLUDEPATH += ../stub +INCLUDEPATH += ../../common + +QT += core +QT += testlib + +CONFIG += qtestlib + +HEADERS += inc/t_radiohswidget.h +HEADERS += inc/radiohswidget.h +HEADERS += ../stub/xqsettingsmanager.h +HEADERS += ../stub/xqsettingskey.h +HEADERS += ../stub/xqapplicationmanager.h +HEADERS += ../stub/xqaiwrequest.h +HEADERS += ../stub/xqrequestinfo.h +HEADERS += ../stub/xqaiwinterfacedescriptor.h +HEADERS += ../inc/radiohswidgetprofilereader.h +HEADERS += ../inc/radiohswidgetradioserviceclient.h + +SOURCES += src/t_radiohswidget.cpp +SOURCES += src/radiohswidget.cpp +SOURCES += ../stub/xqsettingsmanager.cpp +SOURCES += ../stub/xqsettingskey.cpp +SOURCES += ../stub/xqapplicationmanager.cpp +SOURCES += ../stub/xqaiwrequest.cpp +SOURCES += ../stub/xqrequestinfo.cpp +SOURCES += ../stub/xqaiwinterfacedescriptor.cpp +SOURCES += ../src/radiohswidgetprofilereader.cpp +SOURCES += ../src/radiohswidgetradioserviceclient.cpp +SOURCES += ../../common/radiologger.cpp + +include(buildflags.pri) diff -r 6bcf277166c1 -r 451b2e1545b2 rom/fmradio.iby --- a/rom/fmradio.iby Fri Jun 11 16:24:13 2010 +0100 +++ b/rom/fmradio.iby Thu Jul 22 16:33:45 2010 +0100 @@ -23,23 +23,24 @@ // Use standard macros #include -S60_APP_EXE(qtfmradio) -data=ZPRIVATE\10003a3f\import\apps\qtfmradio_reg.rsc private\10003a3f\import\apps\qtfmradio_reg.rsc +S60_APP_EXE(fmradio) +data=ZRESOURCE\apps\fmradio.mif APP_RESOURCE_DIR\fmradio.mif +data=ZPRIVATE\10003a3f\import\apps\fmradio_reg.rsc private\10003a3f\import\apps\fmradio_reg.rsc -file=ABI_DIR\BUILD_DIR\radioenginewrapper.dll SHARED_LIB_DIR\radioenginewrapper.dll PAGED -file=ABI_DIR\BUILD_DIR\radiopresetstorage.dll SHARED_LIB_DIR\radiopresetstorage.dll PAGED -file=ABI_DIR\BUILD_DIR\radiouiengine.dll SHARED_LIB_DIR\radiouiengine.dll PAGED -file=ABI_DIR\BUILD_DIR\radiowidgets.dll SHARED_LIB_DIR\radiowidgets.dll PAGED -file=ABI_DIR\BUILD_DIR\radiowidgetsplugin.dll SHARED_LIB_DIR\radiowidgetsplugin.dll PAGED -data=\epoc32\data\z\resource\plugins\radiowidgetsplugin.qtplugin resource\plugins\radiowidgetsplugin.qtplugin +file=ABI_DIR\BUILD_DIR\fmradioenginewrapper.dll SHARED_LIB_DIR\fmradioenginewrapper.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradiopresetstorage.dll SHARED_LIB_DIR\fmradiopresetstorage.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradiouiengine.dll SHARED_LIB_DIR\fmradiouiengine.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradiowidgets.dll SHARED_LIB_DIR\fmradiowidgets.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradiowidgetsplugin.dll SHARED_LIB_DIR\fmradiowidgetsplugin.dll PAGED +data=\epoc32\data\z\resource\plugins\fmradiowidgetsplugin.qtplugin resource\plugins\fmradiowidgetsplugin.qtplugin -file=ABI_DIR\BUILD_DIR\radioengine.dll SHARED_LIB_DIR\radioengine.dll PAGED -file=ABI_DIR\BUILD_DIR\radioengineutils.dll SHARED_LIB_DIR\radioengineutils.dll PAGED -file=ABI_DIR\BUILD_DIR\radioenginesettings.dll SHARED_LIB_DIR\radioenginesettings.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradioengine.dll SHARED_LIB_DIR\fmradioengine.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradioengineutils.dll SHARED_LIB_DIR\fmradioengineutils.dll PAGED +file=ABI_DIR\BUILD_DIR\fmradioenginesettings.dll SHARED_LIB_DIR\fmradioenginesettings.dll PAGED -data=ZPRIVATE\10202be9\101FF976.txt private\10202be9\101FF976.txt -data=\epoc32\data\z\resource\radioenginesettings.rsc \resource\radioenginesettings.rsc +data=ZPRIVATE\10202be9\2002FF52.txt private\10202be9\2002FF52.txt +data=\epoc32\data\z\resource\fmradioenginesettings.rsc \resource\fmradioenginesettings.rsc -data=\epoc32\data\z\system\install\qtfmradio_stub.sis system\install\qtfmradio_stub.sis +data=\epoc32\data\z\system\install\fmradio_stub.sis system\install\fmradio_stub.sis #endif diff -r 6bcf277166c1 -r 451b2e1545b2 rom/fmradio_resources.iby --- a/rom/fmradio_resources.iby Fri Jun 11 16:24:13 2010 +0100 +++ b/rom/fmradio_resources.iby Thu Jul 22 16:33:45 2010 +0100 @@ -23,7 +23,7 @@ // Use standard macros #include -S60_APP_RESOURCE(qtfmradio) +S60_APP_RESOURCE(fmradio) data=DATAZ_\QT_TRANSLATIONS_DIR\fmradio.qm QT_TRANSLATIONS_DIR\fmradio.qm diff -r 6bcf277166c1 -r 451b2e1545b2 rom/qtfmradio_stub.pkg --- a/rom/qtfmradio_stub.pkg Fri Jun 11 16:24:13 2010 +0100 +++ b/rom/qtfmradio_stub.pkg Thu Jul 22 16:33:45 2010 +0100 @@ -18,7 +18,7 @@ &EN ; Header -#{"fmradio"}, (0xE6fe9aac), 1, 0, 0, TYPE=SA +#{"fmradio"}, (0x2002FF53), 1, 0, 0, TYPE=SA ; Localised Vendor name %{"Nokia"} diff -r 6bcf277166c1 -r 451b2e1545b2 tsrc/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/bld.inf Thu Jul 22 16:33:45 2010 +0100 @@ -0,0 +1,24 @@ +/* +* 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: +* +*/ + +PRJ_MMPFILES + +PRJ_TESTMMPFILES +#include "../radioengine/utils/stub/group/bld.inf" +#include "../radioengine/settings/stub/group/bld.inf" +#include "../radioengine/engine/stub/group/bld.inf" +#include "../radioengine/settings/tsrc/group/bld.inf"