internetradio2.0/uisrc/irfirsttimeview.cpp
changeset 0 09774dfdd46b
--- /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