--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/ui/src/irnowplayingview.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,880 @@
+/*
+* 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 <QPixmap>
+#include <QTimer>
+#include <hbmenu.h>
+#include <hbtoolbar.h>
+#include <hbaction.h>
+
+#include "irabstractviewmanager.h"
+#include "irapplication.h"
+#include "irplaycontroller.h"
+#include "irnowplayingview.h"
+#include "irnowplayingcontainer.h"
+#include "irstationdetailscontainer.h"
+#include "irqisdsdatastructure.h"
+#include "irqmetadata.h"
+#include "irqutility.h"
+#include "irqisdsclient.h"
+#include "irqfavoritesdb.h"
+#include "irlastplayedstationinfo.h"
+#include "irqnetworkcontroller.h"
+#include "irqmusicshop.h"
+#include "irqstatisticsreporter.h"
+#include "irqenums.h"
+#include "irmediakeyobserver.h"
+#include "irqsettings.h"
+#include "irqstationexporter.h"
+#include "iruidefines.h"
+
+// Const
+const int KNowPlayingLogoSize = 300; // Now playing logo size
+const char* NOW_PLAYING_VIEW_OBJECT_NAME = "ex-IRNowPlayingView"; // object name in the XML
+const char* KDefaultAdvertisementLink = ""; // default advertisement link
+
+// public functions
+
+/*
+ * Description : constructor
+ */
+IRNowPlayingView::IRNowPlayingView(IRApplication* aApplication, TIRViewId aViewId) :
+ IRBaseView(aApplication, aViewId),
+ iLogoPreset(NULL),
+ iStationDetailsContainer(NULL),
+ iIdleContainer(NULL),
+ iMusicShop(NULL),
+ iStationExporter(NULL),
+ iStereoAction(NULL),
+ iMusicShopAction(NULL),
+ iPlayStopAction(NULL),
+ iAdd2FavAction(NULL),
+ iAdvClickThroughUrl(KDefaultAdvertisementLink),
+ iGettingAdv(false),
+ iStationLogo(NULL),
+ iStereoMode(0),
+ iShowStationInfo(FALSE),
+ iLogoStatus(EDefaultLogo),
+ iFindinNmsAllowed(false),
+ iSongNameAvailable(false)
+{
+ // Create widget hierarchy
+ setObjectName(NOW_PLAYING_VIEW_OBJECT_NAME);
+
+ // List existing root elements - this allows us to refer to objects in the XML
+ // which are created outside the document.
+ QObjectList roots;
+ roots.append(this); // IRNowPlayingView is referred in XML file
+ iLoader.setObjectTree(roots);
+
+ // Load XML file
+ iLoader.load(NOW_PLAYING_VIEW_LAYOUT_FILENAME);
+
+ createMenu();
+ createToolBar();
+ initialize();
+
+ connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(updateSongInfo(IRQMetaData*)));
+ connect(iPlayController, SIGNAL(initializeLogo()), this, SLOT(initializeLogo()));
+ connect(iPlayController, SIGNAL(playingStarted()), this, SLOT(playingStarted()));
+ connect(iPlayController, SIGNAL(playingStopped()), this, SLOT(playingStopped()));
+
+ connect(iNetworkController, SIGNAL(networkRequestNotified(IRQNetworkEvent)),
+ this, SLOT(networkRequestNotified(IRQNetworkEvent)));
+ connect(iApplication->getMediaKeyObserver(), SIGNAL(playPausePressed()),
+ this, SLOT(playPressed()));
+ connect(iApplication->getMediaKeyObserver(), SIGNAL(stopPressed()),
+ this, SLOT(stop()));
+
+ // Initialize logo
+ QIcon icon(":/playback/default_cd.png");
+ iStationLogo = new HbIcon(icon);
+
+ // Initialize advertisement image
+ QIcon advIcon(":/playback/default_cd.jpg");
+ HbIcon advInitialImage(advIcon);
+ iStationExporter = new IRQStationExporter();
+ iNowPlayingContainer = new IRNowPlayingContainer(getViewManager());
+ connect(getViewManager(), SIGNAL(orientationChanged(Qt::Orientation)),
+ iNowPlayingContainer, SLOT(orientationChanged(Qt::Orientation)));
+ connect(iNowPlayingContainer, SIGNAL(volumePressed()),
+ iApplication->getMediaKeyObserver(), SLOT(showVolumeSlider()));
+ connect(iNowPlayingContainer, SIGNAL(advertisementPressed()),
+ this, SLOT(openAdvLink()));
+ setWidget(iNowPlayingContainer);
+ iNowPlayingContainer->setLogo(*iStationLogo);
+ iNowPlayingContainer->setAdvImage(advInitialImage);
+
+ HbEffect::add("nowplaying", ":/effect/view_flip_hide.fxml", "hide");
+ HbEffect::add("nowplaying", ":/effect/view_flip_show.fxml", "show");
+}
+
+/*
+ * Description : destructor
+ */
+IRNowPlayingView::~IRNowPlayingView()
+{
+ delete iIdleContainer;
+ iIdleContainer = NULL;
+
+ delete iStationExporter;
+ iStationExporter = NULL;
+
+ iNowPlayingContainer = NULL;
+ iStationDetailsContainer = NULL;
+
+ delete iLogoPreset;
+ iLogoPreset = NULL;
+
+ delete iStationLogo;
+ iStationLogo = NULL;
+
+ HbEffect::remove("nowplaying", ":/playback/view_flip_hide.fxml", "hide");
+ HbEffect::remove("nowplaying", ":/playback/view_flip_show.fxml", "show");
+}
+
+/*
+ * Description : from base class IRBaseView.
+ * handle system events reported by system event collector
+ * Parameters : aEvent : see the definiton of TIRSystemEventType.
+ * Return : EIR_DoDefault : caller does default handling
+ * EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRNowPlayingView::handleSystemEvent(TIRSystemEventType aEvent)
+{
+ Q_UNUSED(aEvent);
+ return EIR_DoDefault;
+}
+
+/*
+ * Description : from base class IRBaseView.
+ * handle view commands.
+ * Parameters : aCommand : see the definition of TIRViewCommand
+ * Return : EIR_DoDefault : caller does default handling
+ * EIR_NoDefault : caller doesn't do default handling
+ */
+TIRHandleResult IRNowPlayingView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
+{
+ Q_UNUSED(aReason);
+ TIRHandleResult ret = EIR_DoDefault;
+
+ switch (aCommand)
+ {
+ case EIR_ViewCommand_ACTIVATED:
+ connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
+ this, SLOT(presetLogoDownload(IRQPreset* )));
+ showWidget();
+ break;
+
+ case EIR_ViewCommand_DEACTIVATE:
+ if (ERequestIssued == iLogoStatus)
+ {
+ // cancel downloading logo
+ iIsdsClient->isdsLogoDownCancelTransaction();
+ iLogoStatus = EDefaultLogo;
+ }
+ disconnect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset*)),
+ this, SLOT(presetLogoDownload(IRQPreset* )));
+ break;
+ }
+
+ return ret;
+}
+
+/*
+ * Description : actions when view is launched.
+ */
+void IRNowPlayingView::launchAction()
+{
+ IRLastPlayedStationInfo *lastPlayedStationInfo =
+ iApplication->getLastPlayedStationInfo();
+ IRQPreset *preset = lastPlayedStationInfo->getLastPlayedStation();
+ if ( preset && (0 == preset->musicStoreStatus.compare("yes",Qt::CaseInsensitive)))
+ {
+ iFindinNmsAllowed = true;
+ }
+ else
+ {
+ iFindinNmsAllowed = false;
+ }
+
+ iShowStationInfo = true;
+ setUseNetworkReason(EIR_UseNetwork_StartingView);
+ iApplication->verifyNetworkConnectivity();
+}
+
+/*
+ * Description : start to converter the downloaded logo.
+ */
+void IRNowPlayingView::presetLogoDownload(IRQPreset* aPreset)
+{
+ if (NULL == aPreset)
+ return;
+
+ // Sometimes the logo downloaded by stationview will reach here because
+ // the isdsLogoDownCancelTransaction is delayed. So we judge the imageUrl here.
+ if (!iGettingAdv && (aPreset->imgUrl != iPlayController->getNowPlayingPreset()->imgUrl))
+ {
+ delete aPreset;
+ aPreset = NULL;
+ return;
+ }
+
+ delete iLogoPreset;
+ iLogoPreset = aPreset;
+
+ const unsigned char * logoData = iLogoPreset->logoData.Ptr();
+ QPixmap tempMap;
+ bool ret = tempMap.loadFromData(logoData, iLogoPreset->logoData.Length());
+ if( !ret )
+ {
+ if (iGettingAdv)
+ {
+ iGettingAdv = false;
+ QTimer::singleShot(1, this, SLOT(updateLogoInfo()));
+ }
+ else
+ {
+ iLogoStatus = ELogoDetermined;
+ }
+ return;
+ }
+
+ QIcon convertIcon(tempMap);
+ HbIcon hbIcon(convertIcon);
+
+ if (iGettingAdv)
+ {
+ iNowPlayingContainer->setAdvImage(hbIcon);
+ iAdvClickThroughUrl = iTempAdvClickThroughUrl;
+ iGettingAdv = false;
+ QTimer::singleShot(1, this, SLOT(updateLogoInfo()));
+ }
+ else
+ {
+ *iStationLogo = hbIcon;
+
+ // update the logo
+ iNowPlayingContainer->setLogo(hbIcon);
+ // temp solution, it will be deleted once there's adv info in preset
+ iNowPlayingContainer->setAdvImage(*iStationLogo);
+
+ if (iStationDetailsContainer)
+ {
+ iStationDetailsContainer->setLogo(hbIcon);
+ }
+ iLogoStatus = ELogoDetermined;
+ }
+}
+
+/*
+ * Description: slot function for signal triggered() of iPlayStopAction and
+ * playStopPressed() of irmediakeyobserver.
+ * According to the playing state, play or stop.
+ */
+void IRNowPlayingView::playStopControl()
+{
+ setUseNetworkReason(EIR_UseNetwork_PlayStation);
+ if (false == iApplication->verifyNetworkConnectivity())
+ {
+ return;
+ }
+ setUseNetworkReason(EIR_UseNetwork_NoReason);
+
+ if (iPlayController->isPlaying())
+ {
+ iPlayController->stop(EIRQUserTerminated);
+ }
+ else
+ {
+ iPlayController->resume();
+ }
+}
+
+/*
+ * Description: slot function for signal stopPressed() of irmediakeyobserver.
+ */
+void IRNowPlayingView::stop()
+{
+ iPlayController->stop(EIRQUserTerminated);
+}
+
+/*
+ * Description : update station info and now playing view
+ */
+void IRNowPlayingView::playingStarted()
+{
+ if (iShowStationInfo)
+ {
+ updateSongInfo(iPlayController->getMetaData());
+ updateAdvImage();
+ updateStationInfo();
+ iShowStationInfo = false;
+ }
+ updateMusicStatus();
+ HbIcon icon(QString("qtg_mono_stop"));
+ iPlayStopAction->setIcon(icon);
+}
+
+/*
+ * Description : update now playing view
+ */
+void IRNowPlayingView::playingStopped()
+{
+ HbIcon icon(QString("qtg_mono_play"));
+ iPlayStopAction->setIcon(icon);
+}
+
+/*
+ * Description: slot function for signal triggered() of iAdd2FavAction.
+ * add this preset to favorites
+ */
+void IRNowPlayingView::add2FavControl()
+{
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+ int retValue = iFavorites->addPreset(*nowPlayingPreset);
+ // show the information from favorites DB
+ switch (retValue)
+ {
+ case EIRQErrorNone:
+ popupNote(hbTrId("txt_irad_info_added_to_favorites"), HbMessageBox::MessageTypeInformation);
+ break;
+
+ case EIRQErrorOutOfMemory:
+ popupNote(hbTrId("txt_irad_info_can_not_add_more"), HbMessageBox::MessageTypeInformation);
+ break;
+
+ case EIRQErrorAlreadyExist:
+ popupNote(hbTrId("txt_irad_info_favorite_updated"), HbMessageBox::MessageTypeInformation);
+ break;
+
+ default:
+ Q_ASSERT(false);
+ break;
+ }
+}
+
+/*
+ * Description: slot function for signal triggered() of flip action.
+ * change the container of now playing view.
+ */
+void IRNowPlayingView::flipControl()
+{
+ // disconnect the signal to avoid users to click several times quickly.
+ iFlipAction->disconnect(SIGNAL(triggered()));
+ if (iIdleContainer == iStationDetailsContainer)
+ {
+ if (NULL == iStationDetailsContainer)
+ {
+ iStationDetailsContainer = new IRStationDetailsContainer(getViewManager());
+ }
+
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+ iStationDetailsContainer->setDetails(nowPlayingPreset, *iStationLogo);
+
+ HbEffect::start(iNowPlayingContainer, "nowplaying", QString("hide"), this, "hidePlayingWidgetComplete");
+ }
+ else
+ {
+ HbEffect::start(iStationDetailsContainer, "nowplaying", QString("hide"), this, "hideDetailsWidgetComplete");
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Slot: Handle animation completion on main widget
+// ---------------------------------------------------------------------------
+//
+void IRNowPlayingView::hidePlayingWidgetComplete(HbEffect::EffectStatus status)
+{
+ Q_UNUSED(status);
+ iIdleContainer = takeWidget();
+ setWidget(iStationDetailsContainer);
+ iFlipAction->setToolTip(hbTrId("txt_irad_tooltip_tiny_now_playing"));
+ HbEffect::start(iStationDetailsContainer, "nowplaying", QString("show"));
+
+ // reconnect the signal
+ iFlipAction->disconnect(SIGNAL(triggered()));
+ connect(iFlipAction, SIGNAL(triggered()), this, SLOT(flipControl()));
+}
+
+// ---------------------------------------------------------------------------
+// Slot: Handle animation completion on list widget
+// ---------------------------------------------------------------------------
+//
+void IRNowPlayingView::hideDetailsWidgetComplete(HbEffect::EffectStatus status)
+{
+ Q_UNUSED(status);
+ iIdleContainer = takeWidget();
+ setWidget(iNowPlayingContainer);
+ iFlipAction->setToolTip(hbTrId("txt_irad_tooltip_tiny_details"));
+ HbEffect::start(iNowPlayingContainer, "nowplaying", QString("show"));
+
+ // reconnect the signal
+ iFlipAction->disconnect(SIGNAL(triggered()));
+ connect(iFlipAction, SIGNAL(triggered()), this, SLOT(flipControl()));
+}
+
+/*
+ * Description: slot function for signal triggered() of iStereoAction.
+ * According to the stereo state.
+ */
+void IRNowPlayingView::stereoControl()
+{
+ if (iStereoMode)
+ {
+ iPlayController->disableStereo();
+ iStereoAction->setText(hbTrId("txt_irad_opt_activate_stereo"));
+ iStereoMode = 0;
+ }
+ else
+ {
+ iPlayController->enableStereo();
+ iStereoAction->setText(hbTrId("txt_irad_opt_deactivate_stereo"));
+ iStereoMode = 1;
+ }
+
+ iApplication->getSettings()->setStereoMode(iStereoMode);
+}
+
+/*
+ * Description: active open web address view
+ */
+void IRNowPlayingView::openWebAddressControl()
+{
+ getViewManager()->activateView(EIRView_OpenWebAddressView);
+}
+
+/*
+ * Description: active settings view
+ */
+void IRNowPlayingView::launchSettingsView()
+{
+ getViewManager()->activateView(EIRView_SettingsView);
+}
+
+/*
+ * Description : slot function for signal metaDataAvailable(IRQMetaData*) of play controller.
+ * If metadata is available, update the text
+ */
+void IRNowPlayingView::updateSongInfo(IRQMetaData* aMetaData)
+{
+#ifdef _DEBUG
+ if (iApplication->iTestPreferredBitrate)
+ {
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+ QList<int> bitRateList;
+ bitRateList.clear();
+ nowPlayingPreset->getAvailableBitrates(bitRateList);
+ QString songName;
+ QString bitrate;
+ for(int i=0; i<bitRateList.count(); i++)
+ {
+ songName = songName + bitrate.setNum(bitRateList[i]) + " : ";
+ }
+ songName = songName + " = " + bitrate.setNum(iPlayController->bitrateTrying());
+ iNowPlayingContainer->setSongName(songName);
+ return;
+ }
+#endif
+ iSongNameAvailable = false;
+ if (aMetaData)
+ {
+ iNowPlayingContainer->setSongName(aMetaData->getArtistSongName());
+ if(!aMetaData->getSongName().isEmpty() ||
+ !aMetaData->getArtistName().isEmpty())
+ {
+ iSongNameAvailable = true;
+ }
+ }
+ else
+ {
+ iNowPlayingContainer->setSongName("");
+ }
+
+ if(iFindinNmsAllowed && iSongNameAvailable)
+ {
+ iMusicShopAction->setIcon(HbIcon(":/playback/icon_musicshop_enable.png"));
+ }
+ else
+ {
+ iMusicShopAction->setIcon(HbIcon(":/playback/icon_musicshop_disable.png"));
+ }
+}
+
+// ---------------------------------------------------------------------------
+// IRNowPlayingView::initializeLogo()
+// Initialize the logo
+//---------------------------------------------------------------------------
+void IRNowPlayingView::initializeLogo()
+{
+ QIcon icon(":/playback/default_cd.png");
+ HbIcon hbIcon(icon);
+ *iStationLogo = hbIcon;
+ iLogoStatus = EDefaultLogo;
+
+ // While starting to play a new station, the container should be NowPlayingContainer
+ if (iStationDetailsContainer == widget())
+ {
+ flipControl();
+ }
+}
+
+/*
+ * Description : slot function for active network event
+ * Parameters : aEvent, see the definition of IRQNetworkEvent
+ */
+void IRNowPlayingView::networkRequestNotified(IRQNetworkEvent aEvent)
+{
+ //when we get here, it means that current view is the first view
+ if (getViewManager()->currentView() != this)
+ {
+ return;
+ }
+
+ switch (aEvent)
+ {
+ case EIRQNetworkConnectionEstablished:
+ iApplication->closeConnectingDialog();
+ if (EIR_UseNetwork_StartingView == getUseNetworkReason())
+ {
+ IRLastPlayedStationInfo *lastPlayedStationInfo =
+ iApplication->getLastPlayedStationInfo();
+ IRQPreset *preset = lastPlayedStationInfo->getLastPlayedStation();
+ if (preset)
+ {
+ iPlayController->connectToChannel(preset,lastPlayedStationInfo->connectedFrom());
+ }
+ }
+ else if (EIR_UseNetwork_PlayStation == getUseNetworkReason())
+ {
+ playStopControl();
+ }
+
+ setUseNetworkReason(EIR_UseNetwork_NoReason);
+
+ break;
+
+ case EIRQConnectingCancelled:
+ case EIRQDisplayNetworkMessageNoConnectivity:
+ {
+ IRQPreset *preset = iPlayController->getNowPlayingPreset();
+ //if IRPlayController::connectToChannel(IRQPreset*) hasn't been called, back to main view.
+ //otherwise stay in nowplaying view.
+ if (NULL == preset || preset->name == "")
+ {
+ getViewManager()->activateView(EIRView_MainView);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+// private functions
+
+/*
+ * Description : create menu for now playing view
+ */
+void IRNowPlayingView::createMenu()
+{
+ iStereoAction = qobject_cast<HbAction *> (iLoader.findObject("activateStereo"));
+ iStereoMode = iApplication->getSettings()->getStereoMode();
+ if (iStereoMode == 1)
+ {
+ iStereoAction->setText(hbTrId("txt_irad_opt_deactivate_stereo"));
+ }
+ HbAction *openWebAddressAction = qobject_cast<HbAction *> (iLoader.findObject("openWebAddressAction"));
+ HbAction *shareStationAction = qobject_cast<HbAction *> (iLoader.findObject("shareStationAction"));
+ HbAction *songRecAction = qobject_cast<HbAction *> (iLoader.findObject("songRecAction"));
+ HbAction *gotoMusicStoreAction = qobject_cast<HbAction *> (iLoader.findObject("gotoMusicStoreAction"));
+ HbAction *settings = qobject_cast<HbAction *> (iLoader.findObject("settings"));
+ HbAction *helpAction = qobject_cast<HbAction *> (iLoader.findObject("help"));
+ HbAction *exitAction = qobject_cast<HbAction *> (iLoader.findObject("exit"));
+
+ connect(iStereoAction, SIGNAL(triggered()), this, SLOT(stereoControl()));
+ connect(openWebAddressAction, SIGNAL(triggered()), this, SLOT(openWebAddressControl()));
+ connect(shareStationAction, SIGNAL(triggered()), this, SLOT(shareStationViaMms()));
+ connect(songRecAction, SIGNAL(triggered()), this, SLOT(recognizeSong()));
+ connect(gotoMusicStoreAction, SIGNAL(triggered()), this, SLOT(gotoMusicStore()));
+ connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
+ connect(helpAction, SIGNAL(triggered()), this, SLOT(helpAction()));
+ connect(exitAction, SIGNAL(triggered()), iApplication, SIGNAL(quit()));
+
+ HbMenu *viewMenu = menu();
+ connect(viewMenu, SIGNAL(aboutToShow()), this, SLOT(prepareMenu()));
+}
+
+/*
+ * Description : create tool bar for now playing view
+ */
+void IRNowPlayingView::createToolBar()
+{
+ iMusicShopAction = qobject_cast<HbAction *> (iLoader.findObject("musicShop"));
+ iPlayStopAction = qobject_cast<HbAction *> (iLoader.findObject("playStop"));
+ iAdd2FavAction = qobject_cast<HbAction *> (iLoader.findObject("addToFav"));
+ iFlipAction = qobject_cast<HbAction *> (iLoader.findObject("flip"));
+
+ iMusicShopAction->setAutoRepeat(false);
+ iPlayStopAction->setAutoRepeat(false);
+ iAdd2FavAction->setAutoRepeat(false);
+ iFlipAction->setAutoRepeat(false);
+ connect(iMusicShopAction, SIGNAL(triggered()), this, SLOT(findInMusicShop()));
+ connect(iPlayStopAction, SIGNAL(triggered()), this, SLOT(playStopControl()));
+ connect(iAdd2FavAction, SIGNAL(triggered()), this, SLOT(add2FavControl()));
+ connect(iFlipAction, SIGNAL(triggered()), this, SLOT(flipControl()));
+}
+
+/*
+ * Description : update station name and category according to the information in preset
+ */
+void IRNowPlayingView::updateStationInfo()
+{
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+ const QString &stationName = nowPlayingPreset->name;
+ iNowPlayingContainer->setStationName(stationName);
+
+ QString category = nowPlayingPreset->genreName + " / "
+ + nowPlayingPreset->countryName + " / "
+ + nowPlayingPreset->languageName;
+ if (" / / " == category)
+ {
+ category = "";
+ }
+ iNowPlayingContainer->setCategory(category);
+}
+
+/*
+ * Description : Update advertisement image
+ */
+void IRNowPlayingView::updateAdvImage()
+{
+ // TODO: in the future, it should judge the change of advertisement url
+ if (ELogoDetermined == iLogoStatus || ERequestIssued == iLogoStatus)
+ {
+ return;
+ }
+
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+
+ // TODO: initialize adv, in the future it will use default adv image
+ QIcon icon(":/playback/default_cd.png");
+ HbIcon hbIcon(icon);
+ iNowPlayingContainer->setAdvImage(hbIcon);
+
+ if (nowPlayingPreset->type)
+ {
+ // isds server channel
+ // TODO: it should use adv in preset, now the variants is not clear
+ if (nowPlayingPreset->advertisementInUse.size() > 0
+ && iAdvImageUrl != nowPlayingPreset->advertisementInUse)
+ {
+ iAdvImageUrl = nowPlayingPreset->advertisementInUse;
+ iTempAdvClickThroughUrl = nowPlayingPreset->advertisementUrl;
+ IRQPreset advPreset;
+ advPreset.imgUrl = iAdvImageUrl;
+ advPreset.type = 1;
+ iGettingAdv = true;
+ iIsdsClient->isdsLogoDownSendRequest(&advPreset);
+ }
+ else
+ {
+ updateLogoInfo();
+ }
+ }
+ else
+ {
+ updateLogoInfo();
+ }
+}
+
+/*
+ * Description : Update logo info
+ */
+void IRNowPlayingView::updateLogoInfo()
+{
+ if (ELogoDetermined == iLogoStatus || ERequestIssued == iLogoStatus
+ || iGettingAdv)
+ {
+ return;
+ }
+
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+
+ iNowPlayingContainer->setLogo(*iStationLogo);
+ if (nowPlayingPreset->type)
+ {
+ // isds server channel
+ iLogoStatus = ERequestIssued;
+ iIsdsClient->isdsLogoDownSendRequest(nowPlayingPreset, 2, KNowPlayingLogoSize, KNowPlayingLogoSize);
+ }
+ else
+ {
+ // users defined channel
+ if (iStationDetailsContainer)
+ {
+ iStationDetailsContainer->setLogo(*iStationLogo);
+ }
+ iLogoStatus = ELogoDetermined;
+ }
+}
+
+/*
+ * Description: show container
+ */
+void IRNowPlayingView::showWidget()
+{
+ if (iStationDetailsContainer)
+ {
+ IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+ iStationDetailsContainer->setDetails(nowPlayingPreset, *iStationLogo);
+ }
+
+ updateMusicStatus();
+ updateStationInfo();
+ updateSongInfo(iPlayController->getMetaData());
+ updateAdvImage();
+}
+
+/*
+ * Description: initializing.
+ */
+void IRNowPlayingView::initialize()
+{
+ iMusicShop = iApplication->getMusicShop();
+ iStatisticsReporter = iApplication->getStatisticsReporter();
+}
+
+
+
+/*
+* Description : slot function for music shop button in toolbar
+*/
+void IRNowPlayingView::findInMusicShop()
+{
+ if(!iFindinNmsAllowed)
+ {
+ popupNote(hbTrId("txt_irad_info_disallowed_by_this_station"), HbMessageBox::MessageTypeInformation);
+ return;
+ }
+
+ if(!iSongNameAvailable)
+ {
+ popupNote(hbTrId("txt_irad_info_no_song_info"), HbMessageBox::MessageTypeInformation);
+ return;
+ }
+
+ if(NULL == iMusicShop)
+ {
+ popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+ return;
+ }
+
+ IRQMetaData *metaData = iPlayController->getMetaData();
+ if( iMusicShop->findInMusicShop(metaData->getSongName(), metaData->getArtistName()))
+ {
+ if(iStatisticsReporter)
+ {
+ int channelId = iPlayController->getNowPlayingPreset()->presetId;
+ iStatisticsReporter->logNmsEvent(EIRQFind,channelId);
+ }
+ }
+ else
+ {
+ popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+ }
+}
+
+void IRNowPlayingView::helpAction()
+{
+ popupNote(hbTrId("Not Ready"), HbMessageBox::MessageTypeInformation);
+}
+
+void IRNowPlayingView::playPressed()
+{
+ if (getViewManager()->currentView() == this)
+ {
+ iPlayController->resume();
+ }
+}
+
+void IRNowPlayingView::gotoMusicStore()
+{
+ if(IRQMusicShop::launchMusicShop())
+ {
+ if(iStatisticsReporter)
+ {
+ int channelId = 0;
+ if(iPlayController)
+ {
+ IRQPreset *preset = iPlayController->getNowPlayingPreset();
+ if(preset)
+ {
+ channelId = preset->presetId;
+ }
+ }
+ iStatisticsReporter->logNmsEvent(EIRQLaunch,channelId);
+ }
+ }
+ else
+ {
+ popupNote(hbTrId("txt_irad_info_music_shop_not_available"), HbMessageBox::MessageTypeInformation);
+ }
+}
+
+void IRNowPlayingView::updateMusicStatus()
+{
+ IRQPreset *preset = iPlayController->getNowPlayingPreset();
+ if(preset && (0 == preset->musicStoreStatus.compare("yes",Qt::CaseInsensitive)))
+ {
+ iFindinNmsAllowed = true;
+ }
+ else
+ {
+ iFindinNmsAllowed = false;
+ }
+}
+
+void IRNowPlayingView::recognizeSong()
+{
+ if(IRQMusicShop::launchShazam())
+ {
+ if(iStatisticsReporter)
+ {
+ iStatisticsReporter->logSongRecogEvent();
+ }
+ }
+ else
+ {
+ popupNote(hbTrId("txt_irad_info_song_recognition_not_available"), HbMessageBox::MessageTypeInformation);
+ }
+}
+
+void IRNowPlayingView::openAdvLink()
+{
+ IRQUtility::openAdvLink(iAdvClickThroughUrl);
+}
+void IRNowPlayingView::shareStationViaMms()
+{
+ popupNote(hbTrId("Not Ready"), HbMessageBox::MessageTypeInformation);
+}
+
+void IRNowPlayingView::prepareMenu()
+{
+ HbAction *songRecAction = qobject_cast<HbAction *> (iLoader.findObject("songRecAction"));
+ songRecAction->setEnabled(iPlayController->isPlaying());
+}