internetradio2.0/uisrc/irfirsttimeview.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) 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