--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irstationdirectoryview.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,692 @@
+/*
+* Copyright (c) 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: Station Directory View
+*
+*/
+
+/* ---------------------------------------------------------------------------
+* Version history:
+* Template version:
+* <ccm_history>
+*
+* Version: 2, 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
+*
+* </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+* Version history:
+* Template version:
+* <ccm_history>
+*
+* Version: 3, Tues March 25 17:30:00 2008 by Prabina
+* Ref:
+* Fixing the PCLint errors
+*
+*
+* </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+* Version history:
+* Template version:
+* <ccm_history>
+*
+* Version: 4, Tues April 04 16:40:00 2008 by Prabina
+* Ref:
+* Added WorkAround for retaining of focus & Page retaining
+*
+*
+* </ccm_history>
+* ============================================================================
+*/
+/* ---------------------------------------------------------------------------
+* Version history:
+* Template version:
+* <ccm_history>
+*
+* Version: 5, Thurs July 18 12:00:00 2008 by Prabina
+* Ref:
+* Code Review Comments Fixed
+*
+*
+* </ccm_history>
+* ============================================================================
+*/
+// SYSTEM INCLUDE FILES
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <psserv.h>
+#include <hlplch.h>
+#include <eikenv.h>
+#include <internetradio.rsg>
+
+// INCLUDE FILES
+#include "irdebug.h"
+#include "irui.h"
+#include "irbaseview.h"
+#include "irstationdirectoryview.h"
+#include "irstationdirectorycontainer.h"
+#include "ircategoryview.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irviewstack.h"
+#include "irisdswrapper.h"
+#include "irnowplayingwrapper.h"
+#include "hlplch.h"
+#include "irsettings.h"
+#include "irnetworkcontroller.h" //Added for demo of ALR //TO DO::Remove after demo
+#include "iractivenetworkobserver.h"
+#include "irtopstationsview.h"
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryView::CIRStationDirectoryView( ):iCallRequestPending(EFalse)
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::CIRStationDirectoryView" );
+ }
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ConstructL()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::ConstructL - Entering" );
+ CIRBaseView::ConstructL( R_IR_STATION_DIRECTORY );
+ SetCurrentFocus(0);
+ iRequestPending = EFalse;
+ IRLOG_DEBUG( "CIRStationDirectoryView::ConstructL - Exiting" );
+ }
+
+// -----------------------------------------------------------------------------
+// CIRStationDirectoryView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRStationDirectoryView* CIRStationDirectoryView::NewL()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::NewL" );
+ CIRStationDirectoryView* self = CIRStationDirectoryView::NewLC();
+ CleanupStack::Pop( self );
+ IRLOG_DEBUG( "CIRStationDirectoryView::NewL - Exiting" );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRStationDirectoryView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryView* CIRStationDirectoryView::NewLC()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::NewLC" );
+ CIRStationDirectoryView* self = new( ELeave ) CIRStationDirectoryView();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ IRLOG_DEBUG( "CIRStationDirectoryView::NewLC - Exiting" );
+ return self;
+ }
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRStationDirectoryView::~CIRStationDirectoryView()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::~CIRStationDirectoryView - Entering" );
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ iContainer->MakeVisible( EFalse );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::~CIRStationDirectoryView - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRStationDirectoryView::Id() const
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::Id" );
+ return KIRStationDirectoryViewId;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleStatusPaneSizeChange()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleStatusPaneSizeChange - Entering" );
+ CIRBaseView::HandleStatusPaneSizeChange();
+
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleStatusPaneSizeChange - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::DoActivateL - Entering" );
+
+ TInt customMessageId = aCustomMessageId.iUid;
+ if(customMessageId == 1)
+ {
+ SetCurrentFocus(0);
+ }
+ aCustomMessageId.iUid = 0;
+ iUi->iPresentViewID = KIRStationDirectoryViewId;
+
+ if ( !iContainer )
+ {
+ iContainer = CIRStationDirectoryContainer::NewL( *this, ClientRect() );
+ iContainer->SetMopParent( this );
+ AppUi()->AddToViewStackL( *this, iContainer );
+ }
+ else
+ {
+ iContainer->SetRect( ClientRect( ) );
+ iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+ }
+
+ iContainer->ActivateL( );
+ iContainer->MakeVisible( ETrue );
+
+ SetTitleL(R_IRAPP_STAT_DIR_TITLE);
+ CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+ HandleStatusPaneSizeChange();
+
+ iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+ EnableObserverL(EIRSystemEventObserver);
+ IRLOG_DEBUG( "CIRStationDirectoryView::DoActivateL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DoDeactivate()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::DoDeactivate - Entering" );
+ if(&(iUi->SystemEventCollector()))
+ {
+ DisableObserver(EIRSystemEventObserver);
+ }
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ iContainer->MakeVisible( EFalse );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+ IRLOG_DEBUG( "CIRStationDirectoryView::DoDeactivate - Exiting" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleCommandL( TInt aCommand )
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleCommandL - Entering" );
+ CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+ CIRViewStack& viewStack = appUi->ViewStack();
+ switch ( aCommand )
+ {
+ case ESelectCmd:
+ {
+ if( iUi->CheckAndNotifyLowDiskSpaceL() )
+ {
+ break;
+ }
+ else if( iUi->VerifyNetworkConnectivityL() )
+ {
+ iRequestPending = ETrue;
+ }
+ else
+ {
+ SetCurrentFocus(iContainer->GetCurrentItemIndex());
+ iRequestIssued = ETrue;
+ DoCategoryRequestL();
+ }
+ }
+ break;
+
+ case EGotoNowPlayingViewCmd:
+ {
+ appUi->SetHistory(EFalse);
+ appUi->SavePrevIDL(KIRStationDirectoryViewId, aCommand);
+ }
+ break;
+ //Activate settings view.
+ case ESettingsCmd:
+ {
+ AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+ }
+ break;
+
+ case EHelpCmd:
+ {
+ if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+ {
+ HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(),
+ AppUi()->AppHelpContextL());
+ }
+ }
+ break;
+ case EAknSoftkeyBack:
+ {
+ if((appUi->IsFirstTime()))
+ {
+ CIRBaseView::HandleCommandL( aCommand );
+ }
+ else
+ {
+ if(viewStack.Count() == 2 )
+ {
+ TUid topView = viewStack.Pop();
+ if(viewStack.Peek()==KIRMainChoiceViewID)
+ {
+ viewStack.PushL(topView);
+ CIRBaseView::HandleCommandL( aCommand );
+ }
+ else
+ {
+ viewStack.Pop();
+ appUi->ActivateLocalViewL(KIRMainChoiceViewID);
+ }
+ }
+
+ else if(viewStack.Count() >2 )
+ {
+ CIRBaseView::HandleCommandL( aCommand );
+ }
+ else
+ {
+ viewStack.Pop();
+ appUi->ActivateLocalViewL(KIRMainChoiceViewID);
+ }
+ }
+ }
+ break;
+ default:
+ {
+ CIRBaseView::HandleCommandL( aCommand );
+ }
+ break;
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleCommandL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleForegroundEventL( TBool aForeground )
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleForegroundEventL - Entering" );
+
+ CIRBaseView::HandleForegroundEventL( aForeground );
+ if ( aForeground )
+ {
+ if ( iContainer )
+ {
+ iContainer->DrawDeferred();
+ }
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleForegroundEventL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// CIRStationDirectoryView::DoCategoryRequestL()
+//
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DoCategoryRequestL()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::DoCategoryRequestL - Entering" );
+ iLoadingCancelled = EFalse;
+ TInt currentIndex = iContainer->GetCurrentItemIndex();
+ if(currentIndex >= 0)
+ {
+ switch (currentIndex)
+ {
+ // if the browse by genre's is selected.
+ case EGenreData:
+ {
+ iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::EGenre);
+ iUi->iCategoryView->iCategoryReqMade = ETrue;
+ }
+ break;
+ // if the browse by language's is selected.
+ case ELanguageData:
+ {
+ iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::ELanguages);
+ iUi->iCategoryView->iCategoryReqMade = ETrue;
+ }
+ break;
+ // if the browse by country is selected.
+ case ECountryData:
+ {
+ iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::ECountries);
+ iUi->iCategoryView->iCategoryReqMade = ETrue;
+ }
+ break;
+ // if top station's is selected.
+ case ETopStationData:
+ {
+ iIsdsWrapper->IsdsCategoryRequestL(this,CIRIsdsClient::Ehotpicks);
+ iUi->iTopStationsView->iResultsReqMade = ETrue;
+ }
+ break;
+ default:
+ {
+ //No implementation
+ }
+ break;
+ }
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::DoCategoryRequestL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::ResponseL()
+// Activates the SearchResults view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ResponseL( CIRIsdsPreset* /*aPreset*/ )
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::ResponseL - Entering" );
+ ResetPendingRequests(EFalse);
+ if(!iLoadingCancelled)
+ {
+ TInt currentIndex = iContainer->GetCurrentItemIndex();
+ if(currentIndex >= 0)
+ {
+ switch (currentIndex)
+ {
+ // if the browse by genre's is selected.
+ case EGenreData:
+ {
+ iUi->iCategoryViewTitleType = EGenreData;
+ ActivateCategoryViewL();
+ }
+ break;
+ // if the browse by language's is selected.
+ case ELanguageData:
+ {
+ iUi->iCategoryViewTitleType = ELanguageData;
+ ActivateCategoryViewL();
+ }
+ break;
+ // if the browse by country is selected.
+ case ECountryData:
+ {
+ iUi->iCategoryViewTitleType = ECountryData;
+ ActivateCategoryViewL();
+ }
+ break;
+ // if top station's is selected.
+ case ETopStationData:
+ {
+ iUi->iCategoryViewTitleType = ETopStationData;
+ TBuf8<2> dummy;
+ TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRTopStationsViewId);
+ if(iUi->IsForeground())
+ {
+ AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+ iUi->iActivationPending = KNullUid ;
+ }
+ else
+ {
+ iUi->iActivationPending =KIRTopStationsViewId;
+ }
+ }
+ break;
+ default:
+ {
+ //No implementation
+ }
+ break;
+ }
+ }
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::ResponseL - Exiting" );
+ }
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::ActivateCategoryViewL()
+// Activates the Category view
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ActivateCategoryViewL()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::ActivateCategoryViewL - Entering" );
+ CIRUi* appUi = static_cast< CIRUi*>(AppUi());
+ TBuf8<2> dummy;
+ TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRCategoryViewId);
+
+ if(appUi->IsForeground())
+ {
+ AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+ appUi->iActivationPending = KNullUid ;
+ }
+ else
+ {
+ appUi->iActivationPending =KIRCategoryViewId;
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::ActivateCategoryViewL - Exiting" );
+
+ }
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::PresetResponseL()
+// Issues Request to listen to a particular channel
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::PresetResponseL(CIRIsdsPreset* /*aPreset*/)
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::PresetResponseL - Entering" );
+
+ //No Implementation Required
+
+ IRLOG_DEBUG( "CIRStationDirectoryView::PresetResponseL - Exiting" );
+ }
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::ErrorL()
+// Handles the errors from Isds
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::ErrorL()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::ErrorL - Entering" );
+ if(iIsdsWrapper->iConnTimeOut)
+ {
+ iIsdsWrapper->iConnTimeOut = EFalse;
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::ErrorL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::DynInitMenuPaneL - Entering" );
+ CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+ if(!aMenuPane) User::Leave(KErrNotFound);
+ {
+ if(aResourceId == R_IR_STATION_DIRECTORY_MENU)
+ {
+ // Now Playing option
+ if(iNowPlayingWrapper->iPlaying)
+ {
+ aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+ }
+ }
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::DynInitMenuPaneL - Exiting" );
+ }
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRStationDirectoryView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::NotifyActiveNetworkObserversL - Entering" );
+ IRRDEBUG2("CIRStationDirectoryView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+ switch(aEvent)
+ {
+ case ENetworkConnectionDisconnected:
+ {
+ iNowPlayingWrapper->HandleNetworkDisconnected();
+ }
+ break;
+ case ENetworkConnectionEstablished:
+ {
+ if(iContainer)
+ {
+ if(iRequestPending)
+ {
+ iRequestIssued = ETrue;
+ SetCurrentFocus(iContainer->GetCurrentItemIndex());
+ iRequestPending=EFalse;
+ DoCategoryRequestL();
+ }
+
+ if(iUi->iNetworkController->IsHandingOverConnection())
+ {
+ if(iRequestIssued)
+ {
+ iRequestIssued=EFalse;
+ SetCurrentFocus(iContainer->GetCurrentItemIndex());
+ DoCategoryRequestL();
+ }
+ }
+ }
+ }
+ }
+
+ IRLOG_DEBUG( "CIRStationDirectoryView::NotifyActiveNetworkObserversL - Exiting" );
+ IRRDEBUG2("CIRStationDirectoryView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset
+// the pending requests
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRStationDirectoryView::ResetPendingRequests(TBool aValue)
+ {
+ iRequestPending = aValue;
+ iRequestIssued = aValue;
+ }
+
+// ---------------------------------------------------------
+// CIRStationDirectoryView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRStationDirectoryView::HandleSystemEventL(TIRSystemEventType aEventType)
+ {
+ IRLOG_DEBUG(" CIRStationDirectoryView::HandleSystemEventL - Entering");
+
+ switch (aEventType)
+ {
+ case EIRCallActivated:
+ {
+ if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+ {
+ if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+ {
+ TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+ }
+ if(!iCallRequestPending && iCommand==ESelectCmd)
+ {
+ iUi->iIsdsWrapper->IsdsCancelRequest();
+ iCallRequestPending = ETrue;
+ }
+ }
+ break;
+ }
+ case EIRCallDeactivated:
+ {
+ if(iCallRequestPending && iCommand==ESelectCmd)
+ {
+ iCallRequestPending = EFalse;
+ HandleCommandL( iCommand );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::HandleSystemEventL - Exiting." );
+ }
+// ---------------------------------------------------------------------------
+// void CIRStationDirectoryView::IssueSearchRequestL()
+// Issues a search request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRStationDirectoryView::RefreshView()
+ {
+ IRLOG_DEBUG( "CIRStationDirectoryView::IssueSearchRequestL - Entering" );
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ IRLOG_DEBUG( "CIRStationDirectoryView::IssueSearchRequestL - Exiting" );
+ }
+// End of file