internetradio2.0/uisrc/irstationsview.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2004 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:  Stations view class
*
*/


/* ---------------------------------------------------------------------------
*  Version history:
*  Template version:
*  <ccm_history>
*
*  Version: 8, Thu Aug 18 14:32:00 2008 by Rohit
*  Ref:
*  Fixed bug : Tapping StationInfo toolbar-option for last station in Station list is causing crash
*  Modified GetStationsViewActualIndex() to remove increment of currentIndex.
*
*  Version: 8, Thurs July 18 12:00:00 2008 by Prabina
*  Ref:
*  Code Review Comments Fixed
*
*  Version: 7, May 28 wed 16:34:00 2008 by Rohit
*  Fixed bug to verify network before invoking Song Information view
*
*  Version: 6, Tues March 29 10:30:00 2008 by Prabina
*  Ref:
*  Stations View Container Derived from CCoeControl
*
*  Version: 5, Tues March 25 17:30:00 2008 by Prabina
*  Ref:
*  Fixing the PCLint errors
*
*  Version: 4, Mon March 24 18:00:00 2008 by Prabina
*  Ref:
*  Added WorkAround for adding different stations to favourites list , Added Wait dialog for adding to favourites
*
*  Version: 3, Fri March 21 17:20:00 2008 by Prabina
*  Ref:
*  Added WorkAround for supporting different Resolutions , Added Wait Dialog for Loading of stations ,
*  Handled Single/Double tapping on the list itmes
*
*  Version: 2, Thurs March 20 15:50:00 2008 by Prabina
*  Ref:
*  Created new views for the Station Directory Views , Enabled the Touch toolbar functionality ,
*  Help Options enabled
*
*  </ccm_history>
* ============================================================================
*/


#include <akniconarray.h>
#include <akntitle.h>
#include <eikmenup.h>
#include <gulicon.h>
#include <stringloader.h>
#include <psserv.h>
#include <hlplch.h>
#include <aknnotewrappers.h>
#include <eikenv.h>
#include <internetradio.rsg>
#include <internetradio.mbg>
//For Touch Toolbar
#include <akntoolbar.h>
#include <akntouchpane.h>
#include <aknbutton.h>
#include <aknwaitdialog.h>

#include "irui.h"
#include "ir.hrh"
#include "ircommon.h"
#include "irdebug.h"
#include "irbaseview.h"
#include "irstationsview.h"
#include "irstationsviewcontainer.h"
#include "irapplication.h"
#include "irisdswrapper.h"
#include "irsettings.h"
#include "irmainview.h"
#include "irnowplayingwrapper.h"
#include "irstationinfoview.h"
#include "irimageconverter.h"
#include "irlogodownloadengine.h"
#include "irdataprovider.h"
#include "irhttpdataprovider.h"
#include "irnetworkcontroller.h"
#include "iractivenetworkobserver.h"
#include "irdialoglauncher.h"
#include "irfilteredmodel.h"
#include "irpubsub.h"

const TInt KImagesSize = 59;
const TInt KImageReqFrom = 0;

// ---------------------------------------------------------------------------
// CIRStationsView::CIRStationsView()
// C++ default constructor can NOT contain any code, that might leave.
// ---------------------------------------------------------------------------
//
CIRStationsView::CIRStationsView():iCallRequestPending(EFalse)
    {
	IRLOG_DEBUG( "CIRStationsView::CIRStationsView" );
    iResultsReqMade = EFalse;
	}


// ---------------------------------------------------------------------------
// void CIRStationsView::ConstructL()
// EPOC default constructor can leave.
// ---------------------------------------------------------------------------
//
void CIRStationsView::ConstructL()
    {
	IRLOG_DEBUG( "CIRStationsView::ConstructL - Entering" );
    CIRBaseView::ConstructL( R_IR_STATIONS );
	MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
    TRgb color;
    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
    				                                      EAknsCIQsnTextColorsCG6 );
	if(color.Gray2()!=0)
		{
		CreateAndSetToolbarL(R_IR_STATIONSVIEW_WHITE_TOOLBAR);
		}
	else
		{
		CreateAndSetToolbarL(R_IR_STATIONSVIEW_BLACK_TOOLBAR);	
		}
	if( AknLayoutUtils::PenEnabled() && Toolbar() )
		{
		Toolbar()->SetToolbarObserver( this );
		}
    
    iFilteredIndex = 0;
    iFirstTimeLaunchFlag= EFalse;
    iRequestPending = EFalse;
    iAddToFav= EFalse;
    iStationDetails = EFalse;
	IRLOG_DEBUG( "CIRStationsView::ConstructL - Exiting" );
    }

// -----------------------------------------------------------------------------
// CIRStationsView::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CIRStationsView* CIRStationsView::NewL()
    {
 	IRLOG_DEBUG( "CIRStationsView::NewL" );
    CIRStationsView* self = CIRStationsView::NewLC();
    CleanupStack::Pop( self );
    IRLOG_DEBUG( "CIRStationsView::NewL - Exiting" );
    return self;
    }


// ---------------------------------------------------------------------------
// CIRStationsView::NewLC()
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CIRStationsView* CIRStationsView::NewLC()
    {
	IRLOG_DEBUG( "CIRStationsView::NewLC - Entering" );
    CIRStationsView* self = new( ELeave ) CIRStationsView;
    CleanupStack::PushL( self );
    self->ConstructL();
    IRLOG_DEBUG( "CIRStationsView::NewLC - Exiting" );
    return self;
	}


// ---------------------------------------------------------------------------
// CIRStationsView::~CIRStationsView()
// Destructor
// ---------------------------------------------------------------------------
//
CIRStationsView::~CIRStationsView()
    {
	IRLOG_DEBUG( "CIRStationsView::~CIRStationsView - Entering" );
	if ( iContainer )
		{
		AppUi()->RemoveFromViewStack( *this, iContainer );
		delete iContainer;
		iContainer = NULL;
		}
	if ( Toolbar() )
		{
		Toolbar()->SetToolbarVisibility(EFalse, EFalse);
		Toolbar()->SetToolbarObserver( NULL );
		}
	iFilteredIndex = 0;
	IRLOG_DEBUG( "CIRStationsView::~CIRStationsView - Exiting" );
    }

// ---------------------------------------------------------------------------
// TUid CIRStationsView::Id() const
// From class CAknView.
// Returns view id.
// ---------------------------------------------------------------------------
//
TUid CIRStationsView::Id() const
    {
    IRLOG_DEBUG( "CIRStationsView::Id" );
    return KIRStationsViewId;
    }

// ---------------------------------------------------------------------------
// void CIRStationsView::DoActivateL( )
// From class CAknView.
// Handles view activation.
// ---------------------------------------------------------------------------
//
void CIRStationsView::DoActivateL( const TVwsViewId& aPrevViewId,
        TUid aCustomMessageId, const TDesC8& aCustomMessage )
    {
	IRLOG_DEBUG( "CIRStationsView::DoActivateL - Entering" );

	TInt customMessageId = aCustomMessageId.iUid;
	if(customMessageId == 1)
		{
		SetCurrentFocus(0);
		SetCurrentTopItem(0);
		iFirstTimeLaunchFlag= ETrue;
		}
	aCustomMessageId.iUid = 0;
	iUi->iPresentViewID = KIRStationsViewId;
	
	////////////////////////////////////////////////////////////

	if(iResultsReqMade)
		{
		if(iContainer)
			{
		    delete iContainer;
		    iContainer = NULL;
			}
	    iResultsReqMade = EFalse;
		}
	
	////////////////////////////////////////////////////////////

	
	ConstructToolbarL();
    if ( !iContainer )
        {
 	    iContainer = CIRStationsViewContainer::NewL( *this, ClientRect() );
 	    iContainer->CreateListBoxL();
 		AppUi()->AddToViewStackL( *this, iContainer);
        }
    else
        {
		// we must notify a resource change in order to update the skin context
		// This is a flaw of CEikFormattedCellListBox
	//	_LIT(KText,"")
	//	iContainer->iStationsSearchBox->SetSearchTextL  (KText)
	//	iContainer->RefreshViewBack()
		
		iContainer->SetRect(ClientRect());
        iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
        AppUi()->AddToViewStackL( *this, iContainer);
 	//	iContainer->iItemArray->Reset()
	//	iContainer->UpdateStationsViewL()
       }


    iContainer->ActivateL();
    iContainer->MakeVisible( ETrue );
  	SetStatusPaneTextL();
    CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
    EnableObserverL(EIRSystemEventObserver);
	HandleStatusPaneSizeChange();
    iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
	IRLOG_DEBUG( "CIRStationsView::DoActivateL - Exiting" );
	}

// ---------------------------------------------------------------------------
// void CIRStationsView::DoDeactivate()
// From class CAknView.
// Handles view deactivation.
// ---------------------------------------------------------------------------
//
void CIRStationsView::DoDeactivate()
    {
	IRLOG_DEBUG( "CIRStationsView::DoDeactivate - Entering" );
    if(&(iUi->SystemEventCollector()))
	    {
		DisableObserver(EIRSystemEventObserver);
	    }
    if ( iContainer )
        {
        if(iContainer->iStationsListBox && iContainer->GetSearchBoxPointer())
		    {
			iContainer->GetSearchBoxPointer()->GetSearchText(iContainer->iFindString);
			if(iContainer->GetSearchBoxPointer() && iContainer->iFindString.Length()!=0)
				{
				if(iIndex)
					{
					SetCurrentFocus(iIndex);
					}
				else
					{
					iContainer->Comparestrings();
					SetCurrentFocus(iIndex);
					}
				}
			else
				{
				SetCurrentFocus(iContainer->GetCurrentItemIndex());
				}
			SetCurrentTopItem(iContainer->GetListBoxTopIndex());
		    }
        AppUi()->RemoveFromViewStack( *this, iContainer );
        iContainer->MakeVisible( EFalse );
        }
 	if ( Toolbar() )
        {
        Toolbar()->SetToolbarVisibility(EFalse, EFalse);
        Toolbar()->SetToolbarObserver( NULL );
        }
    iFirstTimeLaunchFlag= EFalse;
    iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
	IRLOG_DEBUG( "CIRStationsView::DoDeactivate - Exiting" );
    }

// ---------------------------------------------------------------------------
// void CIRStationsView::HandleCommandL( TInt aCommand )
// From class CAknView.
// Command handling function.
// ---------------------------------------------------------------------------
//
void CIRStationsView::HandleCommandL( TInt aCommand )
	{
	IRLOG_DEBUG( "CIRStationsView::HandleCommandL - Entering" );
	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
	iCommand = aCommand;

	switch(aCommand)
		{
		//Activate NowPlaying view.
		case EGotoNowPlayingViewCmd:
			{
			appUi->SetHistory(EFalse);
			appUi->SavePrevIDL(KIRStationsViewId, aCommand);
			}
		break;
		case EAddtoFavouritesCmd:
			{
			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
				{
				break;
				}
			else if( iUi->VerifyNetworkConnectivityL() )
				{
				iRequestPending = ETrue;
				iAddToFav = ETrue;
				iListenRequest = EFalse;
				iStationDetails = EFalse;
				break;
				}
			else
				{
				iAddToFav = ETrue;
				AddToFavouritesL(GetStationsViewActualIndex(),aCommand);
				}
			}
		break;
		case EListenCmd:
			{
			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
				{
				break;
				}
			iUi->SetListenFromPls(EFalse);
			if( iUi->VerifyNetworkConnectivityL() )
				{
				iRequestPending = ETrue;
				iListenRequest = ETrue;
				iAddToFav = EFalse;
				iStationDetails = EFalse;
				break;			
				}
			else
				{
				//SetCurrentFocus(GetStationsViewActualIndex())
				ListenChannelL(GetStationsViewActualIndex());	
				}
			}
		break;
		//Activate settings view.
		case ESettingsCmd:
			{
			AppUi()->ActivateLocalViewL(KIRSettingsViewId);
			}
		break;
		case EHelpCmd:
			{
			if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
				{
				HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
				}
			}
		break;
		case EStationDetailsCmd:
			{
			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
				{
				break;
				}
			if( iUi->VerifyNetworkConnectivityL() )
				{
				iRequestPending = ETrue;
				iStationDetails = ETrue;
				iAddToFav = EFalse;
				iListenRequest = EFalse;
				break;
				}
			else
				{
				iStationDetails = ETrue;
				TInt currentIndex = GetStationsViewActualIndex();
	    		SetCurrentFocus(currentIndex);
				DisplayStationInformationL(currentIndex, aCommand);	
				}
			}
		break;
		case EAdvertisementUrl:
			{
			if ( iUi->CheckAndNotifyLowDiskSpaceL() )
				{
				break;
				}
			else if( iUi->VerifyNetworkConnectivityL() )
				{
				break;
				}
			if(iUi->iIsdsWrapper->iClickThroughUrl)
				{
				if((iUi->iIsdsWrapper->iClickThroughUrl->Length())!=0)
					{
					iContainer->OpenUrlL(*iUi->iIsdsWrapper->iClickThroughUrl);		
					}
				}
			else
				{
				iUi->iIsdsWrapper->GetDialogLauncherInstance()->ShowErrorNoteL
					(R_IRAPP_ERROR_URL_UNAVAILABLE,ETrue);
				}
			}
		break;
		default:
			{
			CIRBaseView::HandleCommandL( aCommand );
			}
		break;
		}
	IRLOG_DEBUG( "CIRStationsView::HandleCommandL - Exiting" );
	}
// ---------------------------------------------------------------------------
// void CIRStationsView::SetStatusPaneTextL()
// Sets the title pane of the search results view
// ---------------------------------------------------------------------------
//

void CIRStationsView:: SetStatusPaneTextL() const
 	{
	IRLOG_DEBUG( "CIRStationsView::SetStatusPaneTextL - Entering" );
	static_cast<CAknTitlePane*>( StatusPane()->ControlL( 
	TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( iUi->iStationsViewTitleString );
	IRLOG_DEBUG( "CIRStationsView::SetStatusPaneTextL - Exiting" );
	}

// ---------------------------------------------------------------------------
// void CIRStationsView::DynInitMenuPaneL()
// Dynamically initialises a menu pane
// ---------------------------------------------------------------------------
//
void CIRStationsView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
	{
	IRLOG_DEBUG( "CIRStationsView::DynInitMenuPaneL - Entering" );
	CIRUi* appUi = static_cast<CIRUi*>( AppUi() );

	if(!aMenuPane) User::Leave(KErrNotFound);
		{
		if(aResourceId == R_IR_MENU_STATIONS)
			{
			// Now Playing option
			if(iNowPlayingWrapper->iPlaying)
				{
				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
				}
			else
				{
				 aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
				}
			}
		}
	IRLOG_DEBUG( "CIRStationsView::DynInitMenuPaneL - Exiting" );
	}

// ---------------------------------------------------------------------------
// void CIRStationsView::ListenChannelL()
// Request for listening to a channel
// ---------------------------------------------------------------------------
//

void CIRStationsView:: ListenChannelL(TInt aCurrentIndex)
 	{
	IRLOG_DEBUG( "CIRStationsView::ListenChannelL - Entering" );
 	iNowPlayingWrapper->SetView(EStations);
 	iNowPlayingWrapper->SetWhenUserCancelsBufferingWaitBar(EFalse);
 	iNowPlayingWrapper->SetListenFromIsdsValue(EFalse);
 	iNowPlayingWrapper->SetWhenUserCancelsIsdsBufferingWaitBar(EFalse);
 	iNowPlayingWrapper->CreateWaitDialogL();
	iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingStart);

	iIsdsWrapper->IsdsListenRequestL(this,aCurrentIndex);
	IRLOG_DEBUG( "CIRStationsView::ListenChannelL - Exiting" );
	}
// ---------------------------------------------------------------------------
// Touch Toolbar
//
// ---------------------------------------------------------------------------

void CIRStationsView::ConstructToolbarL()
    {
	IRLOG_DEBUG( "CIRStationsView::ConstructToolbarL - Entering" );
    SetToolbarItems();
    
	// Update rect, as changes in toolbar visibility also affect layout.
	if(iContainer)
		{
		iContainer->SetRect( ClientRect() );
		iContainer->DrawDeferred();
		}
		
	IRLOG_DEBUG( "CIRStationsView::ConstructToolbarL - Exiting" );
    }



// --------------------------------------------------------------------------
// CIRStationsView::OfferToolbarEventL
// --------------------------------------------------------------------------
//
void CIRStationsView::OfferToolbarEventL ( TInt aCommand )
	{
	IRLOG_DEBUG( "CIRStationsView::OfferToolbarEventL - Entering" );
	HandleCommandL(aCommand);
	IRLOG_DEBUG( "CIRStationsView::OfferToolbarEventL - Exiting" );
	}




// ---------------------------------------------------------------------------
// From class CAknView.
// Foreground event handling function.
// ---------------------------------------------------------------------------
//
void CIRStationsView::HandleForegroundEventL( TBool aForeground )
    {
	IRLOG_DEBUG( "CIRStationsView::HandleForegroundEventL - Entering" );
	CIRBaseView::HandleForegroundEventL( aForeground );

	if ( aForeground )
		{
		if ( iContainer )
			{
			MAknsSkinInstance * skin=AknsUtils::SkinInstance () ;
		    TRgb color;
		    TInt skinColor=AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors,
		    				                                      EAknsCIQsnTextColorsCG6 );
			if(color.Gray2()!=0)
				{
				CreateAndSetToolbarL(R_IR_STATIONSVIEW_WHITE_TOOLBAR);
				}
			else
				{
				CreateAndSetToolbarL(R_IR_STATIONSVIEW_BLACK_TOOLBAR);	
				}
			if( AknLayoutUtils::PenEnabled() && Toolbar() )
				{
				Toolbar()->SetToolbarObserver( this );
				}
			ConstructToolbarL();
			iContainer->DrawDeferred();
			}
		}
	IRLOG_DEBUG( "CIRStationsView::HandleForegroundEventL - Exiting" );
    }

// ---------------------------------------------------------------------------
// From class CAknView.
// Event handler for status pane size changes.
// ---------------------------------------------------------------------------
//
void CIRStationsView::HandleStatusPaneSizeChange()
    {
	IRLOG_DEBUG( "CIRStationsView::HandleStatusPaneSizeChange - Entering" );
    CIRBaseView::HandleStatusPaneSizeChange();

    if ( iContainer )
        {
        iContainer->SetRect( ClientRect() );
       }
	IRLOG_DEBUG( "CIRStationsView::HandleStatusPaneSizeChange - Exiting" );
    }

// ---------------------------------------------------------------------------
// CIRStationsView::AddToFavouritesL()
//
// ---------------------------------------------------------------------------
//
void CIRStationsView::AddToFavouritesL(TInt aCurrentIndex,TInt aCommand)
	{
	IRLOG_DEBUG( "CIRStationsView::AddToFavouritesL - Entering" );
	iLoadingCancelled = EFalse;

	//request isds for preset data to be added to favorites
	iIsdsWrapper->IsdsPresetRequestL(this,aCurrentIndex,aCommand);

	//Display a loading Progress Bar
	IRLOG_DEBUG( "CIRStationsView::AddToFavouritesL - Exiting" );
	}

// ---------------------------------------------------------------------------
// CIRStationsView::DisplayStationInformation()
//
// ---------------------------------------------------------------------------
//
void CIRStationsView::DisplayStationInformationL(TInt aCurrentIndex,TInt aCommand)
	{
	IRLOG_DEBUG( "CIRStationsView::DisplayStationInformationL - Entering" );

	//request isds for preset data to be added to favorites
	iIsdsWrapper->IsdsPresetRequestL(this, aCurrentIndex, aCommand, EFalse);

	//Display a loading Progress Bar
	IRLOG_DEBUG( "CIRStationsView::DisplayStationInformationL - Exiting" );
	}


// ---------------------------------------------------------------------------
// void CIRStationsView::ResponseL()
// Activates the Stations view after getting the IsdsResponse
// ---------------------------------------------------------------------------
//
void CIRStationsView::ResponseL( CIRIsdsPreset* /*aPreset*/ )
	{
	IRLOG_DEBUG( "CIRStationsView::ResponseL - Entering" );
	//TO DO :: The line can be removed in future written to fix
	// Code Scanner ERROR
	ResetPendingRequests(EFalse);	
	IRLOG_DEBUG( "CIRStationsView::ResponseL - Exiting" );
	
	}

// ---------------------------------------------------------------------------
// void CIRStationsView::PresetResponseL()
// Issues Request to listen to a particular channel
// ---------------------------------------------------------------------------
//
void CIRStationsView::PresetResponseL(CIRIsdsPreset* aPreset)
	{
	IRLOG_DEBUG( "CIRStationsView::PresetResponseL - Entering" );
	if ( iUi->CheckAndNotifyLowDiskSpaceL() )
		{
		return;
		}
	
	if( EStationDetailsCmd == iCommand )
		{
		ResetPendingRequests(EFalse);
		iUi->iStationInfoView->SetStationPresetL( aPreset );
		AppUi()->ActivateLocalViewL(KIRStationInfoViewId);
		}
	else
		{
		if(!iNowPlayingWrapper->GetWhenUserCancelsIsdsBufferingWaitBar())
			{
			ResetPendingRequests(EFalse);
			iNowPlayingWrapper->SetListenFromIsdsValue(ETrue);
			iNowPlayingWrapper->ListenToChannelL(aPreset);
			}
		}
	IRLOG_DEBUG( "CIRStationsView::PresetResponseL - Exiting" );
	}

// ---------------------------------------------------------------------------
// void CIRStationsView::ErrorL()
// Handles the errors from Isds
// ---------------------------------------------------------------------------
//
void CIRStationsView::ErrorL()
	{
	IRLOG_DEBUG( "CIRStationsView::ErrorL - Entering" );
	if(iIsdsWrapper->GetListenRequest())
		{
 		IRRDEBUG2("CIRNowPlayingWrapper:: DestroyWaitDialog9", KNullDesC); 
 		iUi->GetPubSubManagerInstance()->PublishBufferingState(EIRStateBufferingError);
		iNowPlayingWrapper->DestroyWaitDialogL();
		iIsdsWrapper->SetListenRequest(EFalse);
		}
	if(iIsdsWrapper->iConnTimeOut)
		{
		iIsdsWrapper->iConnTimeOut = EFalse;
		}
	IRLOG_DEBUG( "CIRStationsView::ErrorL - Exiting" );
	}



// ---------------------------------------------------------------------------
// CIRStationsView::LogoRequestL()
// called from the container
// ---------------------------------------------------------------------------
//
void CIRStationsView::LogoRequestL()
	{
	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Entering" );
	if(iContainer)
		{
		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
				GetLogoDownloadEngine()->SendRequestL(iContainer->iTempPreset,this,
									KImageReqFrom,KImagesSize,KImagesSize);
		}
	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Exiting" );
	}



// ---------------------------------------------------------------------------
// CIRStationsView::PresetLogoDownloadedL()
// from base class MLogoDownloadObserver
// ---------------------------------------------------------------------------
//
void CIRStationsView::PresetLogoDownloadedL(CIRIsdsPreset* aPreset)
	{
	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadedL - Entering" );
	if(iContainer)
		{
		iContainer->PresetLogoDownloadL(aPreset);
		}
	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadedL - Exiting" );
	}


// ---------------------------------------------------------------------------
// CIRStationsView::PresetLogoDownloadError()
// from base class MLogoDownloadObserver
// ---------------------------------------------------------------------------
//
void CIRStationsView::PresetLogoDownloadError(CIRIsdsPreset* /*aPreset*/)
	{
	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadError" );
	//call the API of stations view container
	if(iContainer)
		{
		TRAP_IGNORE(iContainer->HandleLogoErrorL())
		}
	IRLOG_DEBUG( "CIRStationsView::PresetLogoDownloadError - Exiting" );
	}


// ---------------------------------------------------------------------------
// CIRStationsView::LogoRequestL()
// called from the container				
// ---------------------------------------------------------------------------
//
void CIRStationsView::AdRequestL()
	{
	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Entering" );
	if(iContainer)
		{
		iUi->iIsdsWrapper->GetISDSInstance()->GetDataProvider()->GetHttpDataProvider()->
		GetLogoDownloadEngine()->SendRequestL(iContainer->iAdvPreset,this);
		}
	IRLOG_DEBUG( "CIRStationsView::LogoRequestL - Exiting" );
	}
// ---------------------------------------------------------------------------
// CIRStationsView::GetFilteredIndex()
// Returns the filtered Index				
// ---------------------------------------------------------------------------
//
TInt CIRStationsView::GetFilteredIndex()
	{
	IRLOG_DEBUG( "CIRStationsView::GetFilteredIndex - Entering" );
	return iFilteredIndex;
	}
// ---------------------------------------------------------------------------
// CIRStationsView::SetLoadingCancelled()
// Sets iLoadingCancelled to aValue				
// ---------------------------------------------------------------------------
//
void CIRStationsView::SetLoadingCancelled(TBool aValue)
	{
	IRLOG_DEBUG( "CIRStationsView::SetLoadingCancelled - Entering" );
	iLoadingCancelled = aValue;
	IRLOG_DEBUG( "CIRStationsView::SetLoadingCancelled - Exiting" );
	}

// ---------------------------------------------------------
// CIRStationsView::SetActualFilteredItemIndex ()
// Sets the actual index of the station
// ---------------------------------------------------------
//
void CIRStationsView::SetActualFilteredItemIndex(TInt aIndex)
	{
	IRLOG_DEBUG( "CIRStationsView::SetActualFilteredItemIndex - Entering." );
	iIndex = aIndex;
	IRLOG_DEBUG( "CIRStationsView::SetActualFilteredItemIndex - Exiting." );
	}
// ---------------------------------------------------------
// CIRStationsView::GetActualFilteredItemIndex ()
// Gets the actual index of the station
// ---------------------------------------------------------
//
TInt CIRStationsView::GetActualFilteredItemIndex()
	{
	IRLOG_DEBUG( "CIRStationsView::GetActualFilteredItemIndex - Entering." );
	IRLOG_DEBUG( "CIRStationsView::GetActualFilteredItemIndex - Exiting." );
	return iIndex;
	}
// ---------------------------------------------------------------------------
// CIRStationsView::GetStationsViewActualIndex().
// Returns the actual index.
// ---------------------------------------------------------------------------
//
TInt CIRStationsView::GetStationsViewActualIndex()
    {
 	IRLOG_DEBUG( "CIRStationsViewContainer::GetStationsViewActualIndex - Entering" );
   	TInt currentIndex = iContainer->GetCurrentItemIndex();
	SetCurrentFocus(currentIndex);
	TBuf<KFindStringLength> findstring ;
   if(iContainer->GetSearchBoxPointer())
	   {
    	iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
	   }
	if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0)
		{
		iFilteredIndex = currentIndex;
		iContainer->Comparestrings();
		currentIndex = iIndex;
		}
	if(iContainer->GetLogoNotSupported())
		{
		currentIndex = 	currentIndex +1;
		}

	IRLOG_DEBUG( "CIRStationsViewContainer::GetStationsViewActualIndex - Exiting" );
	return currentIndex;
    }
// ---------------------------------------------------------
// CIRStationsView::GetFirstLaunchFlag ()
// returns whether is launching for the first time /coming from other view
// which is activated from this view.
// ---------------------------------------------------------
//
TBool CIRStationsView::GetFirstLaunchFlag()
	{
	IRLOG_DEBUG( "CIRStationsView::GetFirstLaunchFlag - Entering." );
	IRLOG_DEBUG( "CIRStationsView::GetFirstLaunchFlag - Exiting." );
	return iFirstTimeLaunchFlag;
	}
// ---------------------------------------------------------------------------
// void CIRStationsView::SetToolbarItems()
// Setting toolbar items when text is entered
//  ---------------------------------------------------------------------------
void CIRStationsView:: SetToolbarItems()
	{
	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Entering" );
	if(Toolbar())
		{
		if(iContainer)
			{
			Toolbar()->SetToolbarVisibility(ETrue, EFalse);
			if(iContainer->iStationsListBox)
				{
				TInt currentIndex = iContainer->GetCurrentItemIndex();
				TBuf<KFindStringLength> findstring ;
				if(iContainer->GetSearchBoxPointer())
					{
					iContainer->GetSearchBoxPointer()->GetSearchText(findstring);
					}
				TInt filterModelCount = iContainer->GetFilterdModelPointer()->NumberOfItems();	
				if(iContainer->GetSearchBoxPointer() && findstring.Length()!=0 
				&& filterModelCount == 0)
					{
					Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
					Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
					Toolbar()->SetItemDimmed(EStationDetailsCmd,ETrue,ETrue);
					}
				else
					{
					if (currentIndex == 0 && !iContainer->GetLogoNotSupported())  
						{
						if (iUi->iIsdsWrapper->GetBannerUrl())
							{
							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,ETrue,ETrue);
							Toolbar()->SetItemDimmed(EListenCmd,ETrue,ETrue);
							Toolbar()->SetItemDimmed(EStationDetailsCmd,ETrue,ETrue);
							}
						else
							{
							Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
							Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
							Toolbar()->SetItemDimmed(EStationDetailsCmd,EFalse,ETrue);
							}
						}
					else
						{
						Toolbar()->SetItemDimmed(EAddtoFavouritesCmd,EFalse,ETrue);
						Toolbar()->SetItemDimmed(EListenCmd,EFalse,ETrue);
						Toolbar()->SetItemDimmed(EStationDetailsCmd,EFalse,ETrue);
						}
					}
				Toolbar()->DrawNow();
				}
			}
		}
	IRLOG_DEBUG( "CIRMainView::SetToolbarItems - Exiting" );
	}

// ---------------------------------------------------------
// CIRStationsView::HandleSystemEventL
// from base class MIRSystemEventObserver
// ---------------------------------------------------------
//
void CIRStationsView::HandleSystemEventL(TIRSystemEventType aEventType)
	{
	IRLOG_DEBUG(" CIRNowPlayingView::::HandleSystemEventL - Entering");
	
	CIRUi* appUi = static_cast<CIRUi*>(AppUi());
	switch (aEventType)
		{
		case EIRCallActivated:
			{
			if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
				{
				if(iUi->iIsdsWrapper->iIsdsWaitDialog)
					{
					TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
					}
				if((!iCallRequestPending && iCommand==EStationDetailsCmd) ||
				  (!iCallRequestPending && iCommand==EAddtoFavouritesCmd))
					{
					iUi->iIsdsWrapper->IsdsCancelRequest();
					iCallRequestPending = ETrue;
					}
				if(iUi->iIsdsWrapper->GetListenRequest())
					{
					iNowPlayingWrapper->DestroyWaitDialogL();
					iUi->iIsdsWrapper->SetListenRequest(EFalse);
					iUi->iIsdsWrapper->IsdsCancelRequest();
					}
				}
			break;
			}
		case EIRCallDeactivated:
			{
			if((iCallRequestPending && iCommand==EStationDetailsCmd) ||
			  (iCallRequestPending && iCommand==EAddtoFavouritesCmd))
				{
				iCallRequestPending = EFalse;
				HandleCommandL( iCommand );
				}
			break;
			}
		default:
			{
			break;
			}
		}
	IRLOG_DEBUG( "CIRNowPlayingView::HandleSystemEventL - Exiting." );
	}	


// ---------------------------------------------------------------------------
//Notifies all observers whose network request is active
// to reissue the request  
//NotifyActiveNetworkObserversL()
// ---------------------------------------------------------------------------

void CIRStationsView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
	{
	IRLOG_DEBUG( "CIRStationsView::NotifyActiveNetworkObserversL  - Entering." );
	IRRDEBUG2("CIRStationsView::NotifyActiveNetworkObserversL entering ", KNullDesC);

	switch(aEvent)
		{
		case ENetworkConnectionDisconnected:
			{
			iNowPlayingWrapper->HandleNetworkDisconnected();
			}
			break;
		case ENetworkConnectionEstablished :
			{
		
			if(iContainer)
				{
				if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
					{
					if(iAddToFav)
						{
						iAddToFav = ETrue;
						iListenRequest = EFalse;
						iStationDetails = EFalse;
						AddToFavouritesL(GetStationsViewActualIndex(),EAddtoFavouritesCmd);
						}
					else if (iStationDetails)
						{
						iStationDetails = ETrue;
						iAddToFav = EFalse;
						iListenRequest = EFalse;
						TInt currentIndex = GetStationsViewActualIndex();
			    		SetCurrentFocus(currentIndex);
						DisplayStationInformationL(currentIndex, EStationDetailsCmd);	
						}
					else if(iListenRequest)
						{
						iListenRequest = EFalse;
						SetCurrentFocus(GetStationsViewActualIndex());
						ListenChannelL(GetStationsViewActualIndex());	
						}
					else
						{
							
						}
					}
				}
			if(iUi->iNetworkController->IsHandingOverConnection())
			ResetPendingRequests(EFalse);				
			}
		}
		
	IRLOG_DEBUG( "CIRStationsView::NotifyActiveNetworkObserversL  - Exiting." );
	IRRDEBUG2("CIRStationsView::NotifyActiveNetworkObserversL exiting ", KNullDesC);

	}
	
	
	
// -----------------------------------------------------------------------------
// Notified by network controller when user cancels network connection, to reset 
// the pending requests  
// ResetPendingRequests()
// -----------------------------------------------------------------------------
void CIRStationsView::ResetPendingRequests(TBool aValue)
	{
	iRequestPending = aValue;
	iAddToFav  = aValue;
	iListenRequest  = aValue;
	iStationDetails  = aValue;
	
	}