--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irfirsttimeview.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,616 @@
+/*
+* Copyright (c) 2008-2008 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: Find Station View
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <aknnotewrappers.h>
+#include <akntoolbar.h>
+#include <akntouchpane.h>
+#include <aknbutton.h>
+#include <internetradio.rsg>
+#include "irfirsttimeview.h"
+#include <internetradio.mbg>
+#include "irfirsttimecontainer.h"
+#include "ircommon.h"
+/* don't need to change to lower case */
+#include <AknQueryDialog.h>
+#include "irisdswrapper.h"
+
+
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irbaseview.h"
+#include "irsettings.h"
+#include <stringloader.h>
+#include "irnowplayingwrapper.h"
+
+
+#include "hlplch.h"
+#include "irsettings.h"
+#include "irdialoglauncher.h"
+#include "irnetworkcontroller.h"
+#include "iractivenetworkobserver.h"
+#include "irsearchresultsview.h"
+
+
+
+const TInt KStringSize = 20;
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeView::CIRFirstTimeView():iCallRequestPending(EFalse)
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::CIRFirstTimeView" );
+ // Nothing here
+ }
+
+
+// ---------------------------------------------------------------------------
+// EPOC default constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::ConstructL()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::ConstructL - Entering" );
+ CIRBaseView::ConstructL( R_IR_FIRSTTIME_VIEW );
+ iRequestPending = EFalse;
+ IRLOG_DEBUG( "CIRFirstTimeView::ConstructL - Exiting" );
+ }
+
+// -----------------------------------------------------------------------------
+// CIRFirstTimeView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIRFirstTimeView* CIRFirstTimeView::NewL()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::NewL" );
+ CIRFirstTimeView* self = CIRFirstTimeView::NewLC();
+ CleanupStack::Pop( self );
+ IRLOG_DEBUG( "CIRFirstTimeView::NewL - Exiting" );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFirstTimeView::NewLC()
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeView* CIRFirstTimeView::NewLC()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::NewLC - Entering" );
+ CIRFirstTimeView* self = new( ELeave ) CIRFirstTimeView();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ IRLOG_DEBUG( "CIRFirstTimeView::NewLC - Exiting" );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CIRFirstTimeView::~CIRFirstTimeView()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::~CIRFirstTimeView - Entering" );
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::~CIRFirstTimeView - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns view id.
+// ---------------------------------------------------------------------------
+//
+TUid CIRFirstTimeView::Id() const
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::Id" );
+ return KIRFirstTimeViewId;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Event handler for status pane size changes.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::HandleStatusPaneSizeChange()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleStatusPaneSizeChange - Entering" );
+ CIRBaseView::HandleStatusPaneSizeChange();
+
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleStatusPaneSizeChange - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view activation.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId, const TDesC8& aCustomMessage )
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::DoActivateL - Entering" );
+ CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+ TInt customMessageId = aCustomMessageId.iUid;
+ if(customMessageId == 1)
+ {
+ SetCurrentFocus(0);
+ }
+ aCustomMessageId.iUid = 0;
+
+ iFirstTime = appUi->IsFirstTime();
+ appUi->iPresentViewID = KIRFirstTimeViewId;
+
+ if ( !iContainer )
+ {
+ iContainer = new( ELeave ) CIRFirstTimeContainer(*this);
+ iContainer->SetMopParent( this );
+ iContainer->ConstructL( ClientRect() );
+ AppUi()->AddToViewStackL( *this, iContainer );
+ }
+ else
+ {
+ // we must notify a resource change in order to update the skin context
+ // This is a flaw of CEikFormattedCellListBox
+ iContainer->SetRect( ClientRect() );
+ iContainer->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
+ }
+
+ iContainer->ActivateL();
+ iContainer->MakeVisible( ETrue );
+ SetTitleL( R_IRAPP_FIRSTTIME_TITLE );
+
+
+ if ( iFirstTime && !(iUi->IsFlagIfAnyFavL()))
+ {
+ SetTitleL( R_IRAPP_FIRSTTIME_TITLE);
+ CIRBaseView::DoActivateL( aPrevViewId, TUid::Uid(1), aCustomMessage );
+ }
+ else
+ {
+ SetTitleL( R_IRAPP_FINDSTATIONS_TITLE );
+ CIRBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+ }
+ HandleStatusPaneSizeChange();
+ iUi->iNetworkController->RegisterActiveNetworkObserverL(*this);
+ EnableObserverL(EIRSystemEventObserver);
+ IRLOG_DEBUG( "CIRFirstTimeView::DoActivateL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles view deactivation.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::DoDeactivate()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::DoDeactivate - Entering" );
+ iFirstTime = EFalse;
+ if(&(iUi->SystemEventCollector()))
+ {
+ DisableObserver(EIRSystemEventObserver);
+ }
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ iContainer->MakeVisible( EFalse );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ iUi->iNetworkController->DeleteActiveNetworkObserver(*this);
+ IRLOG_DEBUG( "CIRFirstTimeView::DoDeactivate - Exiting" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Command handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::HandleCommandL( TInt aCommand )
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleCommandL - Entering" );
+ CIRUi* appUi = static_cast<CIRUi*>( iCoeEnv->AppUi( ) );
+ SetCurrentFocus(iContainer->GetCurrentItemIndex());
+ iCommand = aCommand;
+
+ switch ( aCommand )
+ {
+ case EFirstTimeSelectCmd:
+ {
+
+ switch(iContainer->GetCurrentItemIndex( ) )
+ {
+ case 0:
+ {
+ TBuf8<2> dummy;
+ TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRStationDirectoryViewId);
+ AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+ }
+ break;
+ case 1:
+ {
+ if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+ {
+ HBufC *SearchTitle = StringLoader::LoadLC(R_IRAPP_SEARCH_STRING);
+ _LIT(KNullText,"");
+ RBuf string1;
+ string1.Create(KStringSize);
+ string1.Append(KNullText);
+ ShowQueryDialogL(*SearchTitle,string1);
+ CleanupStack::PopAndDestroy(SearchTitle);
+ string1.Close();
+ }
+ }
+ break;
+ case 2:
+ {
+ if( !iUi->CheckAndNotifyLowDiskSpaceL() )
+ {
+ appUi->SetEditStation(EFalse);
+ appUi->ActivateLocalViewL(KIRAddManuallyStationViewID);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ }
+ break;
+
+ case EFirstTimeSettingsCmd:
+ {
+ AppUi()->ActivateLocalViewL(KIRSettingsViewId);
+ }
+ break;
+
+ case EHelpCmd:
+ {
+ if ( !iUi->CheckAndNotifyLowDiskSpaceL() )
+ {
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+ AppUi()->AppHelpContextL() );
+ }
+ }
+ break;
+
+ case EGotoNowPlayingViewCmd:
+ {
+ appUi->SetHistory(EFalse);
+ AppUi()->ActivateLocalViewL(KIRNowPlayingViewID);
+ }
+ break;
+ default:
+ {
+ if(iFirstTime)
+ {
+ CIRBaseView::HandleCommandL( EAknSoftkeyExit );
+ }
+ else
+ {
+ CIRBaseView::HandleCommandL( aCommand );
+ }
+ break;
+ }
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleCommandL - Exiting" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Foreground event handling function.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::HandleForegroundEventL( TBool aForeground )
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleForegroundEventL - Entering" );
+ CIRBaseView::HandleForegroundEventL( aForeground );
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleForegroundEventL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::DynInitMenuPaneL()
+// Dynamically initialises a menu pane
+// ---------------------------------------------------------------------------
+//
+
+
+void CIRFirstTimeView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::DynInitMenuPaneL - Entering" );
+ CIRUi* appUi = static_cast<CIRUi*>( AppUi() );
+
+ if(!aMenuPane) User::Leave(KErrNotFound);
+ {
+ if(aResourceId == R_IR_FIRSTTIME_MENU)
+ {
+ /*
+ // Update Application option
+ if(appUi->iIRSettings->IsUpdateAvailable())
+ {
+ aMenuPane->SetItemDimmed(EUpdateApplicationCmd,EFalse);
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(EUpdateApplicationCmd,ETrue);
+ }
+ */
+
+ // Now Playing option
+ if(iNowPlayingWrapper->iPlaying)
+ {
+ aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,EFalse);
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed(EGotoNowPlayingViewCmd,ETrue);
+ }
+ }
+
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::DynInitMenuPaneL - Exiting" );
+ }
+
+
+void CIRFirstTimeView::ShowQueryDialogL(const TDesC& aTitle, TDes& aBuffer)
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::ShowQueryDialogL - Entering" );
+ CAknTextQueryDialog* Dialog =
+ CAknTextQueryDialog::NewL(aBuffer,CAknQueryDialog::ENoTone);
+ Dialog->PrepareLC(R_SEARCH_STRING_DIALOG);
+ Dialog->SetPromptL(aTitle);
+ iSearchValue = Dialog->RunLD();
+
+ if( iSearchValue)
+ {
+ iUi->iSearchString = aBuffer;
+
+ if( iUi->VerifyNetworkConnectivityL() )
+ {
+ iRequestPending = ETrue;
+ }
+ else
+ {
+ IssueSearchRequestL();
+ }
+
+
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::ShowQueryDialogL - Exiting" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::ResponseL()
+// Activates the SearchResults view after getting the IsdsResponse
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::ResponseL(CIRIsdsPreset* /*aPreset*/ )
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::ResponseL() started." );
+
+
+ if(iIsdsWrapper->iStationsData->Count())
+ {
+ CIRUi* appUi = static_cast< CIRUi*>(AppUi());
+ TBuf8<2> dummy;
+ TVwsViewId viewId(TUid::Uid(KUIDIRAPP),KIRSearchResultsViewID);
+ if(appUi->IsForeground())
+ {
+ AppUi()->ActivateViewL(viewId ,TUid::Uid(1),dummy);
+ appUi->iActivationPending = KNullUid ;
+ }
+ else
+ {
+ appUi->iActivationPending =KIRSearchResultsViewID;
+ }
+ }
+ else
+ {
+ iIsdsWrapper->GetDialogLauncherInstance()->ShowInformationNoteL( R_IRAPP_RESULTS_NONE,ETrue );
+ iIsdsWrapper->iError = EFalse;
+
+ }
+
+ IRLOG_DEBUG( "CIRFirstTimeView::ResponseL() exiting." );
+ }
+
+
+void CIRFirstTimeView::PresetResponseL(CIRIsdsPreset* /*aPreset*/)
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::PresetResponseL() started." );
+ IRLOG_DEBUG( "CIRFirstTimeView::PresetResponseL() exiting." );
+ return;
+ }
+
+void CIRFirstTimeView::ErrorL()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::ErrorL - Entering" );
+ if(iIsdsWrapper->iDialogDismissed)
+ {
+ iIsdsWrapper->iDialogDismissed=EFalse;
+ return;
+ }
+ if(iIsdsWrapper->iConnTimeOut)
+ {
+ iIsdsWrapper->iConnTimeOut = EFalse;
+ }
+ if(iIsdsWrapper->iError)
+ {
+ if(iIsdsWrapper->GetDialogLauncherInstance())
+ {
+ iIsdsWrapper->GetDialogLauncherInstance()->ShowInformationNoteL( R_IRAPP_RESULTS_NONE,ETrue );
+ iIsdsWrapper->iError = EFalse;
+ }
+ }
+
+ IRLOG_DEBUG( "CIRFirstTimeView::ErrorL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+//Notifies all observers whose network request is active
+// to reissue the request
+//NotifyActiveNetworkObserversL()
+// ---------------------------------------------------------------------------
+
+void CIRFirstTimeView::NotifyActiveNetworkObserversL(TIRNetworkEvent aEvent)
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::NotifyActiveNetworkObserversL - Entering" );
+ IRRDEBUG2("CIRFirstTimeView::NotifyActiveNetworkObserversL entering ", KNullDesC);
+
+ switch(aEvent)
+ {
+ case ENetworkConnectionDisconnected:
+ {
+ iNowPlayingWrapper->HandleNetworkDisconnected();
+ }
+ break;
+ case ENetworkConnectionEstablished:
+ {
+ if(iContainer)
+ {
+ if(iRequestPending || iUi->iNetworkController->IsHandingOverConnection())
+ {
+ if(iSearchValue)
+ {
+ IssueSearchRequestL();
+ }
+ }
+ }
+
+ ResetPendingRequests(EFalse);
+ }
+ }
+
+ IRRDEBUG2("CIRFirstTimeView::NotifyActiveNetworkObserversL exiting ", KNullDesC);
+
+ IRLOG_DEBUG( "CIRFirstTimeView::NotifyActiveNetworkObserversL - Exiting" );
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// Notified by network controller when user cancels network connection, to reset
+// the pending requests
+// ResetPendingRequests()
+// -----------------------------------------------------------------------------
+void CIRFirstTimeView::ResetPendingRequests(TBool aValue)
+ {
+ iRequestPending = aValue;
+// iSearchValue = aValue
+ }
+
+
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::IssueSearchRequestL()
+// Issues a search request to the Isds Client
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::IssueSearchRequestL()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Entering" );
+ //Display a searching Progress Bar
+
+ iIsdsWrapper->IsdsSearchRequestL(this,iUi->iSearchString);
+ iUi->iSearchResultsView->iSearchReqMade = ETrue;
+ IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Exiting" );
+ }
+// ---------------------------------------------------------
+// CIRFirstTimeView::HandleSystemEventL
+// from base class MIRSystemEventObserver
+// ---------------------------------------------------------
+//
+void CIRFirstTimeView::HandleSystemEventL(TIRSystemEventType aEventType)
+ {
+ IRLOG_DEBUG(" CIRFirstTimeView::HandleSystemEventL - Entering");
+
+ switch (aEventType)
+ {
+ case EIRCallActivated:
+ {
+ if( iUi->GetNetworkControllerInstance()->IdentifyConnectionType() != EWiFi )
+ {
+ if(iUi->iIsdsWrapper->iIsdsWaitDialog)
+ {
+ TRAP_IGNORE( iUi->iIsdsWrapper->DestroyWaitDialogL() );
+ }
+ if(!iCallRequestPending && iCommand==EFirstTimeSelectCmd &&
+ (iContainer->GetCurrentItemIndex() == 1))
+ {
+ iUi->iIsdsWrapper->IsdsCancelRequest();
+ iCallRequestPending = ETrue;
+ }
+ }
+ break;
+ }
+ case EIRCallDeactivated:
+ {
+ if(iCallRequestPending && iCommand==ESelectCmd &&
+ (iContainer->GetCurrentItemIndex() == 1))
+ {
+ iCallRequestPending = EFalse;
+ if(iSearchValue)
+ {
+ IssueSearchRequestL();
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::HandleSystemEventL - Exiting." );
+ }
+// ---------------------------------------------------------------------------
+// void CIRFirstTimeView::RefreshView()
+// Refreshes the view when layout changes.
+// ---------------------------------------------------------------------------
+//
+void CIRFirstTimeView::RefreshView()
+ {
+ IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Entering" );
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ IRLOG_DEBUG( "CIRFirstTimeView::IssueSearchRequestL - Exiting" );
+ }
+// End of file