diff -r 1a6714c53019 -r cce62ebc198e fmradio/fmradio/src/fmradioscanlocalstationsview.cpp --- a/fmradio/fmradio/src/fmradioscanlocalstationsview.cpp Thu Aug 19 09:55:21 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1710 +0,0 @@ -/* -* Copyright (c) 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: Implementation of the class CFMRadioScanLocalStationsView -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include // for basic note -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "fmradiobacksteppingservicewrapper.h" -#include "fmradioengine.h" -#include "fmradiordsreceiverbase.h" -#include "fmradio.hrh" -#include "fmradioscanlocalstationsview.h" -#include "fmradiopreset.h" -#include "fmradioscanlocalstationscontainer.h" -#include "debug.h" -#include "fmradioappui.h" - - -const TInt KMSKControlID(3); - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::NewL -// Two-phase constructor of CFMRadioScanLocalStationsView -// --------------------------------------------------------------------------- -// -CFMRadioScanLocalStationsView* CFMRadioScanLocalStationsView::NewL( CRadioEngine& aRadioEngine, - MChannelListHandler& aObserver ) - { - CFMRadioScanLocalStationsView* self = new (ELeave) CFMRadioScanLocalStationsView( aRadioEngine, - aObserver ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::CFMRadioScanLocalStationsView -// Parameter constructor ( default constructor ) -// --------------------------------------------------------------------------- -// -CFMRadioScanLocalStationsView::CFMRadioScanLocalStationsView( CRadioEngine& aRadioEngine, - MChannelListHandler& aObserver ): - iNowPlayingIndex( KErrNotFound ), - iScanAndSaveActivated( EFalse ), - iScanCancelled( EFalse ), - iRadioEngine( aRadioEngine ), - iTuneRequested( EFalse ), - iObserver( aObserver ), - iCancelType( EFMRadioCancelScanDefault ) - { - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::ConstructL -// EPOC two-phased constructor -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::ConstructL() - { - BaseConstructL( R_FMRADIO_SEARCH_STATIONS_VIEW ); - PrepareToolbar(); - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::~CFMRadioScanLocalStationsView -// Class destructor -// --------------------------------------------------------------------------- -// -CFMRadioScanLocalStationsView::~CFMRadioScanLocalStationsView() - { - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = NULL; - } - - if ( iScanningNote ) - { - TRAP_IGNORE( iScanningNote->ProcessFinishedL() ); - iScanningNote = NULL; - } - iScannedChannels.ResetAndDestroy(); - iScannedChannels.Close(); - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::Id -// Return the unique identifier corresponding to this view -// --------------------------------------------------------------------------- -// -TUid CFMRadioScanLocalStationsView::Id() const - { - return KFMRadioScanLocalStationsViewId; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::DoActivateL -// Activate the channel list view -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/ ) - { - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::DoActivateL Start") ) ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); // Redraw softkeys - - - HBufC* title = StringLoader::LoadLC( R_FMRADIO_SEARCH_STATIONS_VIEW_TITLE, iCoeEnv ); - static_cast( StatusPane()->ControlL( - TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( *title ); - CleanupStack::PopAndDestroy( title ); - - if ( !iContainer ) - { - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::DoActivateL inside second, not iContainer if") ) ); - iContainer = CFMRadioScanLocalStationsContainer::NewL( ClientRect(), iRadioEngine ); - iContainer->SetMopParent( this ); - iContainer->SetObserver( this ); - AppUi()->AddToStackL( *this, iContainer ); - } - AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsViewActive ); - - ResetListAndStartScanL(); - iRadioEngine.RdsReceiver().AddObserver( this ); - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::HandleCommandL -// Interprets view's menu,softkey and other commands and acts -// accordingly by calling the appropriate command handler -// function for further action. -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::HandleCommandL( TInt aCommand ) - { - CFMRadioAppUi* appUi = static_cast( AppUi() ); - switch ( aCommand ) - { - case EAknSoftkeyBack: // go back to the main view - { - appUi->ActivateLocalViewL( KFMRadioChannelListViewId ); - break; - } - case EEikBidCancel: - { - if ( iFaded ) - { - appUi->HandleCommandL( aCommand ); - } - else - { - appUi->ActivateLocalViewL( KFMRadioChannelListViewId ); - } - break; - } - case EFMRadioCmdSaveChannel: - { - HandleOneChannelSaveL(); - break; - } - case EFMRadioCmdSaveAllChannels: - SaveAllChannelsL(); - break; - case EFMRadioCmdScanLocalStationsScan: // start station scanning - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); // Redraw softkeys - //reset all counters, make station list empty - ResetListAndStartScanL(); - break; - } - - case EFMRadioCmdListenCh: - { - PlayCurrentlySelectedChannelL(); - SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE ); - break; - } - default: // Send all other commands to AppUi - appUi->HandleCommandL( aCommand ); - break; - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SetLastListenedChannel -// Keep track of the last selected channel -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SetLastListenedChannel( TInt aIndex ) - { - iChIndex = aIndex; - if ( iContainer ) - { - iContainer->UpdateLastListenedChannel( aIndex ); // Update index - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SetNowPlayingChannelL -// Keep track of the current selected channel -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SetNowPlayingChannelL( TInt aChannelIndex ) - { - TInt oldIndex = iNowPlayingIndex; - iNowPlayingIndex = aChannelIndex; - - if ( iContainer && ( aChannelIndex != oldIndex ) ) - { - if ( ChannelInUse( oldIndex ) && - !iScannedChannels[ oldIndex ]->PresetNameValid() ) - { - // Remove dynamic ps name - iContainer->UpdateChannelListContentL( oldIndex, - KNullDesC, - iScannedChannels[ oldIndex ]->PresetFrequency(), - EFalse, - EFalse ); - } - iContainer->UpdateNowPlayingIconL( iNowPlayingIndex, oldIndex ); - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::CurrentlyPlayingChannel -// Returns the index of the playing channel item from the channel list. -// --------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::CurrentlyPlayingChannel() - { - return iNowPlayingIndex; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::ChannelInPlay -// Return true/false to indicate whether the channel specified -// is in play -// --------------------------------------------------------------------------- -// -TBool CFMRadioScanLocalStationsView::ChannelInPlay( TInt aChannelIndex ) const - { - if( aChannelIndex == iNowPlayingIndex ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::ChannelInUse -// Return true/false to indicate whether the channel specified -// is in use -// --------------------------------------------------------------------------- -// -TBool CFMRadioScanLocalStationsView::ChannelInUse( const TInt aChannelIndex ) const - { - TBool ret = EFalse; - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::ChannelInUse Start") ) ); - - if ( aChannelIndex >= KMinNumberOfChannelListItems && - aChannelIndex < iScannedChannels.Count() ) - { - ret = ETrue; - } - return ret; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::FadeAndShowExit -// Fade the view and all controls associated with it. Change -// the soft keys so that "Exit" is displayed -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::FadeAndShowExit( TBool aFaded ) - { - TInt err = KErrNone; - iFaded = aFaded; - SetToolbarDimmedState( aFaded ); - if ( iContainer ) - { - if ( aFaded ) // Fade - { - // In case options menu is open when headset is disconnected - StopDisplayingMenuBar(); - iContainer->SetFaded( aFaded ); - TRAP( err,Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_EXIT ) ); - } - else - { - iContainer->SetFaded( aFaded ); - TRAP( err,Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ) ); - // Update index to be sure it is up-to-date (in case if list was scrolled in idle state) - iContainer->UpdateLastListenedChannel( iChIndex ); - - if( iScannedChannels.Count() > 0 ) - { - TRAP_IGNORE( SetMiddleSoftKeyIconL(); ) - - if ( ( CurrentlyPlayingChannel() == CurrentlySelectedChannel() ) ) - { - SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE ); - } - else - { - SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR ); - } - } - } - Cba()->DrawDeferred(); - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::UpdateDisplayForFocusGained -// Update the view after a focus gained event. -// 1. Fade/Unfade view -// 2. Update MSK label -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::UpdateDisplayForFocusGained() - { - FadeAndShowExit( iFaded ); - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::UpdateChannelListContentL -// Make a request to the channel container to update the -// content of the channel at aIndex with the values specified -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::UpdateChannelListContentL( TInt aIndex, - TInt aChannelFrequency ) - { - TBool nowPlaying = EFalse; - if( ChannelInPlay( aIndex ) ) - { - nowPlaying = ETrue; - } - else - { - nowPlaying = EFalse; - } - if ( iContainer ) - { - iContainer->UpdateChannelListContentL( aIndex, KNullDesC, aChannelFrequency, nowPlaying ); - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::CurrentlySelectedChannel -// Returns the index of the selected channel item from the -// channel list. If the container is active get the info from -// it, because it may have more up-to-date info. -// --------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::CurrentlySelectedChannel() - { - if ( iContainer ) - { - iChIndex = iContainer->CurrentlySelectedChannel(); - } - return iChIndex; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::NextChannel -// Retrieve the index of the next channel that has been set. -// --------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::NextChannel() - { - if ( iContainer ) - { - iChIndex = iContainer->CurrentlySelectedChannel(); - } - else - { - iChIndex = iRadioEngine.GetPresetIndex(); - } - - TInt nextChannel = iChIndex; - for ( TInt i = iChIndex + 1; i < KMaxNumberOfChannelListItems; i++ ) - { - if ( ChannelInUse( i ) ) - { - nextChannel = i; - break; - } - } - if ( nextChannel == iChIndex ) - { - for ( TInt i = 0; i < iChIndex; i++ ) - { - if ( ChannelInUse( i ) ) - { - nextChannel = i; - break; - } - } - } - return nextChannel; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::PreviousChannel -// Retrieve the index of the previous channel that has been set. -// --------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::PreviousChannel() - { - if ( iContainer ) - { - iChIndex = iContainer->CurrentlySelectedChannel(); - } - else - { - iChIndex = iRadioEngine.GetPresetIndex(); - } - - TInt previousChannel = iChIndex; - - for ( TInt i = iChIndex - 1; i >= 0; i-- ) - { - if ( ChannelInUse( i ) ) - { - previousChannel = i; - break; - } - } - if ( previousChannel == iChIndex ) - { - for ( TInt i = KMaxNumberOfChannelListItems - 1; i > iChIndex; i-- ) - { - if ( ChannelInUse( i ) ) - { - previousChannel = i; - break; - } - } - } - return previousChannel; - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::HandleControlEventL -// Handles control event observing. In this case the interest -// is only on the channel selection from the channel list. -// Other events are not reported by the container, -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::HandleControlEventL( CCoeControl* aControl, - TCoeEvent aEventType ) - { - if ( aControl == iContainer ) - { - if ( aEventType == MCoeControlObserver::EEventRequestFocus ) - { - // Don't display MSK when display is faded. - if ( !iFaded && !AknLayoutUtils::PenEnabled() ) - { - // event sent if up or down arrow keys are pressed - if ( ( CurrentlyPlayingChannel() == CurrentlySelectedChannel() ) ) - { - SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE ); - } - else - { - SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR ); - } - } - else if ( ChannelInUse( CurrentlySelectedChannel() ) ) - { - PlayCurrentlySelectedChannelL(); - } - } - else if ( aEventType == MCoeControlObserver::EEventStateChanged - && ChannelInUse( CurrentlySelectedChannel() ) ) - { - PlayCurrentlySelectedChannelL(); - } - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::DoDeactivate -// Deactivate the channel list view -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::DoDeactivate() - { - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::DoDeactivate") ) ); - CFMRadioAppUi* appUi = static_cast( AppUi() ); - - if ( iToolbar ) - { - // hide toolbar so it is not visible when activating view again - iToolbar->SetToolbarVisibility( EFalse ); - } - - if ( appUi->RadioEngine() ) - { - iRadioEngine.RdsReceiver().RemoveObserver( this ); - } - if ( iContainer ) - { - appUi->RemoveFromViewStack( *this, iContainer ); - } - - iScanAndSaveActivated = EFalse; - - // If exiting, iRadioEngine is no longer valid object - if( appUi->RadioEngine() ) - { - appUi->RadioEngine()->CancelScanLocalStationsScan(); - // Stop seek doesn't get called automatically as this is not active view anymore - TRAP_IGNORE( StopSeekL() ) - } - - delete iContainer; - iContainer = NULL; - // release allocated memory for scanned stations - iScannedChannels.ResetAndDestroy(); - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::DynInitMenuPaneL -// Sets the state of menu items dynamically according to the -// state of application data. -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - if ( aResourceId == R_FMRADIO_SEARCH_STATIONS_OPTIONS_MENU ) // Main menu - { - if ( iRadioEngine.IsAudioRoutingPossible() ) - { - if ( iRadioEngine.GetAudioOutput() == CRadioEngine::EFMRadioOutputIHF ) - { - // Delete existing menu option and add a new one - aMenuPane->DeleteMenuItem( EFMRadioCmdActivateIhf ); - if ( iRadioEngine.IsHeadsetConnected() ) - { - aMenuPane->SetItemTextL( EFMRadioCmdDeactivateIhf, R_QTN_FMRADIO_OPTIONS_DEACTIVATE ); - } - } - else - { - // Delete existing menu option and add a new one - aMenuPane->DeleteMenuItem( EFMRadioCmdDeactivateIhf ); - aMenuPane->SetItemTextL( EFMRadioCmdActivateIhf, R_QTN_FMRADIO_OPTIONS_ACTIVATE ); - } - } - else - { - aMenuPane->SetItemDimmed( EFMRadioCmdDeactivateIhf, ETrue ); - aMenuPane->SetItemDimmed( EFMRadioCmdActivateIhf, ETrue ); - } - - TInt scannedChannelCount = iScannedChannels.Count(); - - if ( scannedChannelCount < 2 ) - { - aMenuPane->DeleteMenuItem( EFMRadioCmdSaveAllChannels ); - } - - if ( scannedChannelCount < 1) - { - aMenuPane->SetItemDimmed( EFMRadioCmdSaveChannel, ETrue ); - } - - // if help is not enabled, disable help option - if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); - } - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::LayoutChangedL -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::LayoutChangedL( TInt aType ) - { - if( iContainer ) - { - iContainer->SetRect( ClientRect() ); - iContainer->HandleResourceChange( aType ); - } - } - -// --------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SetMiddleSoftKeyLabelL -// Sets middle softkey label. -// --------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SetMiddleSoftKeyLabelL( const TInt aResourceId, - const TInt aCommandId ) - { - if ( !AknLayoutUtils::PenEnabled() ) - { - CEikButtonGroupContainer* cbaGroup = Cba(); - if ( cbaGroup ) - { - cbaGroup->RemoveCommandFromStack( KMSKControlID, iCurrentMSKCommandId ); - HBufC* middleSKText = StringLoader::LoadLC( aResourceId, iCoeEnv ); - TPtr mskPtr = middleSKText->Des(); - cbaGroup->AddCommandToStackL( - KMSKControlID, - aCommandId, - mskPtr ); - CleanupStack::PopAndDestroy( middleSKText ); - iCurrentMSKCommandId = aCommandId; - } - } - } - -// --------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SetMiddleSoftKeyIconL -// Sets middle softkey icon. -// --------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SetMiddleSoftKeyIconL() - { - if ( !AknLayoutUtils::PenEnabled() ) - { - CEikButtonGroupContainer* cbaGroup = Cba(); - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - if ( cbaGroup ) - { - TFileName mbmFileName; - TFindFile finder( iCoeEnv->FsSession() ); - TInt err = finder.FindByDir( KFMRadioBmpFile, KDC_APP_BITMAP_DIR ); - if ( err == KErrNone ) - { - mbmFileName.Copy( finder.File() ); - } - - AknsUtils::CreateColorIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnPropMskMenu, - KAknsIIDQsnComponentColors, - EAknsCIQsnComponentColorsCG13, - bitmap, - mask, - mbmFileName, - EMbmFmradioQgn_prop_msk_menu, - EMbmFmradioQgn_prop_msk_menu_mask, - KRgbBlack ); - - CleanupStack::PushL( bitmap ); - CleanupStack::PushL( mask ); - - cbaGroup->RemoveCommandFromStack( KMSKControlID, iCurrentMSKCommandId ); - cbaGroup->AddCommandToStackL( - KMSKControlID, - EAknSoftkeyContextOptions, - *bitmap, - *mask ); - - iCurrentMSKCommandId = EAknSoftkeyContextOptions; - - CleanupStack::PopAndDestroy( 2, bitmap ); - } - } - } - -// ----------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SaveAllChannelsL -// Saves all the scanned channels into Radio Engine's presets. -// ----------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SaveAllChannelsL() - { - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - - if ( appUi->NumberOfChannelsStored() > 0 ) - { - //We have some tuned channels, - //so we have to check does the user want to - //add new channes or replace the old ones. - TInt numberOfEmptySlots = KMaxNumberOfChannelListItems - appUi->NumberOfChannelsStored(); - if( numberOfEmptySlots >= iScannedChannels.Count() ) - { - //more vacant than new channels - //we can add or replace - TInt index(0); - CAknListQueryDialog* query = new (ELeave) CAknListQueryDialog( &index ); - query->PrepareLC( R_FMRADIO_LISTQUERY_SAVE_ALL_REPLACE_APPEND ); - if( query->RunLD() ) - { - const TInt KIndexOfSaveAllReplaceExistingCmd = 0; - const TInt KIndexOfSaveAllAppendCmd = 1; - if( index == KIndexOfSaveAllReplaceExistingCmd ) - { - SaveFoundChannelsToPresetsL( EReplace ); - } - else if( index == KIndexOfSaveAllAppendCmd ) - { - SaveFoundChannelsToPresetsL( EAppend ); - } - } - else - { - ShowToolbar( ETrue ); - } - } - else - { - //no room for all the channels - if( numberOfEmptySlots == 0 ) - { - CAknQueryDialog* query = CAknQueryDialog::NewL(); - if ( query->ExecuteLD( R_FMRADIO_REPLACE_EXISTING_CHANNELS_QUERY ) ) - { - SaveFoundChannelsToPresetsL( EReplace ); - } - else - { - ShowToolbar( ETrue ); - } - } - else - { - TInt index(0); - CAknListQueryDialog* query = new (ELeave) CAknListQueryDialog( &index ); - query->PrepareLC( R_FMRADIO_LISTQUERY_SAVE_ALL_REPLACE_APPEND_LIST_ALMOST_FULL ); - if( query->RunLD() ) - { - const TInt KIndexOfSaveAllAppendCmd = 0; - const TInt KIndexOfSaveAllReplaceExistingCmd = 1; - if( index == KIndexOfSaveAllReplaceExistingCmd ) - { - SaveFoundChannelsToPresetsL( EReplace ); - } - else if( index == KIndexOfSaveAllAppendCmd ) - { - SaveFoundChannelsToPresetsL( EAppend ); - } - } - else - { - ShowToolbar( ETrue ); - } - } - } - } - else - { - //No previous channels - SaveFoundChannelsToPresetsL( EReplace ); - } - } - -// ----------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::ShowConfirmationQueryL -// Get confirmation from user. -// ----------------------------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::ShowConfirmationQueryL(TInt aResText, TInt aResQuery) - { - TInt accepted = EFalse; - HBufC* prompt = StringLoader::LoadLC( aResText, iEikonEnv ); - CAknQueryDialog* queryDlg = CAknQueryDialog::NewL(); - accepted = queryDlg->ExecuteLD( aResQuery, *prompt ); - CleanupStack::PopAndDestroy( prompt ); - return accepted; - } - -// ----------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::StopSeekL -// Invoked by AppUi when a seek is completed or aborted. -// ----------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::StopSeekL() - { - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::StopSeekL") ) ); - - if ( iTuneRequested ) - { - iTuneRequested = EFalse; - - // if tune request comes from scan all (= ResetListAndStartScanL ) - // then start the whole scan - if ( iScanAndSaveActivated ) - { - AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsScan ); - } - else - { - iRadioEngine.SetMuteOn( EFalse ); - } - } - else if ( iScanAndSaveActivated ) - { - // No channels found or user has canceled search before any channels are found - if ( iRadioEngine.GetTunedFrequency() == iLowerFrequencyBound && - iScannedChannels.Count() == 0 ) - { - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - - if ( appUi->IsStartupWizardRunning() ) - { - //no stations are found in Wizard - if (iCancelType == EFMRadioCancelScanDefault) - { - HBufC* string = NULL; - string = StringLoader::LoadLC( R_QTN_FMRADIO_NO_STATIONS_FOUND, iEikonEnv ); - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); // waiting - note->ExecuteLD( *string ); - CleanupStack::PopAndDestroy( string ); - } - - iScanAndSaveActivated = EFalse; - - RemoveScanningInProgressNoteL(); - RestoreRadio(); - appUi->AutoTuneInMainView(ETrue); - - ActivateMainViewL(); - } - else - { - if( iContainer ) - { - HBufC* listEmptyText = NULL; - listEmptyText = StringLoader::LoadLC( R_QTN_FMRADIO_LIST_NO_STATIONS_FOUND, iEikonEnv ); - iContainer->SetStationListEmptyTextL( *listEmptyText ); - CleanupStack::PopAndDestroy( listEmptyText ); - - iContainer->ResetChannelListL(); - } - - iScanAndSaveActivated = EFalse; - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); // Redraw softkeys - RemoveScanningInProgressNoteL(); - - UpdateToolbar(); - ShowToolbar( ETrue ); - RestoreRadio(); - } - } - else - { - AddTunedFrequencyToListL(); - } - } - else - { - RemoveScanningInProgressNoteL(); - TBool restoreFrequency = EFalse; - TInt tunedFrequency = iRadioEngine.GetTunedFrequency(); - - if ( tunedFrequency == iLowerFrequencyBound && - iScannedChannels.Count() == 0 ) - { - restoreFrequency = ETrue; - } - UpdateToolbar(); - RestoreRadio( restoreFrequency ); - - // update now playing index if the tuning is triggered from accessory - TInt frequencyIndex = FrequencyIndex( tunedFrequency ); - - if ( frequencyIndex != KErrNotFound ) - { - SetNowPlayingChannelL( frequencyIndex ); - SetLastListenedChannel( frequencyIndex ); - } - else // frequency is not in the list, remove now playing channel status - { - SetNowPlayingChannelL( KErrNotFound ); - } - } - } - -// ----------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RestoreRadio -// Restores the radio after scanning -// ----------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RestoreRadio( TBool aTuneInitialFrequency ) - { - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::RestoreRadio") ) ); - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - // if iInitialTunedFrequency is 0, radio has already been restored - if ( iInitialTunedFrequency ) - { - if ( aTuneInitialFrequency ) - { - iTuneRequested = ETrue; - iRadioEngine.Tune( iInitialTunedFrequency ); - } - iInitialTunedFrequency = 0; - } - appUi->SetStartupWizardRunning( EFalse ); - } - -// ----------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::AddTunedFrequencyToListL -// Updates found channels to the list. -// ----------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::AddTunedFrequencyToListL() - { - FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::AddTunedFrequencyToListL") ) ); - TInt tunedFrequency = iRadioEngine.GetTunedFrequency(); - - if ( KErrNotFound == FrequencyIndex( tunedFrequency ) ) - { - // the frequency is new and may be added - CFMRadioPreset* channel = CFMRadioPreset::NewL(); - CleanupStack::PushL( channel ); - channel->SetPresetFrequency( tunedFrequency ); - // Make the name invalid by default so that possibly dynamic PS name won't get saved - channel->SetPresetNameValid( EFalse ); - - TInt freqIndex = SortedFrequencyListIndex( tunedFrequency ); - - if ( freqIndex < ( iScannedChannels.Count() - 1 ) ) - { - iScannedChannels.InsertL( channel, freqIndex ); - } - else - { - iScannedChannels.AppendL( channel ); - } - CleanupStack::Pop( channel ); - - // update a radiostation slot in the list - // check if there is place - if ( iContainer ) - { - iContainer->InsertScannedChannelToListL( freqIndex, tunedFrequency ); - iContainer->DrawDeferred(); - } - // scan for another frequency - AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsScan ); - } - else - { - //stop scanning - iScanAndSaveActivated = EFalse; - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); // Redraw softkeys - - RemoveScanningInProgressNoteL(); - SetMiddleSoftKeyIconL(); - SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE ); - - if ( iContainer ) - { - iContainer->UpdateLastListenedChannel( 0 ); // select the first channel - PlayCurrentlySelectedChannelL(); - iContainer->DrawDeferred(); - } - - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - - if ( appUi->IsStartupWizardRunning() ) - { - appUi->SetStartupWizardRunning( EFalse ); - - if ( iScanCancelled ) - { - iScanCancelled = EFalse; - ActivateMainViewL(); - } - else - { - SaveAllChannelsL(); - } - } - else - { - UpdateToolbar(); - ShowToolbar( ETrue ); - } - } - } - -// ----------------------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::ResetCountersL -// Called when a new scan is activated. -// ----------------------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::ResetListAndStartScanL() - { - User::LeaveIfNull( iContainer ); - iNowPlayingIndex = KErrNotFound; - ShowToolbar( EFalse ); - iContainer->SetStationListEmptyTextL( KNullDesC ); - iScanAndSaveActivated = ETrue; - DisplayScanningInProgressNoteL(); - - iInitialTunedFrequency = 0; - iScanCancelled = EFalse; - iCancelType = EFMRadioCancelScanDefault; - iScannedChannels.ResetAndDestroy(); - iContainer->InitializeChannelListL(); - - //mute radio - if ( !iRadioEngine.IsMuteOn() ) - { - iRadioEngine.SetMuteOn( ETrue ); - } - - //update upper and lower frequency bands - iRadioEngine.GetFrequencyBandRange( iLowerFrequencyBound, iUpperFrequencyBound ); - - iInitialTunedFrequency = iRadioEngine.GetTunedFrequency(); - - if ( iRadioEngine.GetTunedFrequency() != iLowerFrequencyBound ) - { - iTuneRequested = ETrue; - iRadioEngine.Tune( iLowerFrequencyBound ); - } - else - { - AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsScan ); - } - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsContainer::DisplayScanningInProgressNoteL -// Display a wait note while the channel fill is occuring. -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::DisplayScanningInProgressNoteL() - { - iScanningNote = new ( ELeave ) CAknWaitDialog( reinterpret_cast( &iScanningNote ) ); - iScanningNote->SetCallback( this ); - - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - - if ( appUi->IsStartupWizardRunning() ) - { - iScanningNote->PrepareLC( R_FMRADIO_SEARCH_STATIONS_WAIT_CANCEL_NOTE ); - } - else - { - iScanningNote->PrepareLC( R_FMRADIO_SEARCH_STATIONS_WAIT_NOTE ); - } - - iScanningNote->RunLD(); - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsContainer::RemoveScanningInProgressNoteL -// Remove and destroy the scanning fill note. -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RemoveScanningInProgressNoteL() - { - FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::RemoveScanningInProgressNoteL"))); - if ( iScanningNote ) - { - iScanningNote->ProcessFinishedL(); // Inform seek note to stop and hide it - iScanningNote = NULL; - } - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsContainer::DialogDismissedL -// Called when user cancels waiting note or process finishes -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::DialogDismissedL( TInt aButtonId ) - { - FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::DialogDismissedL"))); - iScanningNote = NULL; - if ( aButtonId == EAknSoftkeyCancel ) - { - // cancel any process in here - /*Dialog get this button ID when dismissed, if headset is pulled off - we don't want to change the cancel type*/ - if( iCancelType != EFMRadioCancelScanByHeadsetDisconnect) - { - SetScanCanceled(EFMRadioCancelScanBySoftkey); - } - iRadioEngine.CancelScanLocalStationsScan(); - } - } - -void CFMRadioScanLocalStationsView::SetScanCanceled( TFMRadioCancelScanType aType ) - { - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - - if ( appUi->IsStartupWizardRunning() ) - { - FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::SetScanCanceled"))); - iScanCancelled = ETrue; - iCancelType = aType; - } - else - { - iScanCancelled = EFalse; - iCancelType = EFMRadioCancelScanDefault; - } - } - -TFMRadioCancelScanType CFMRadioScanLocalStationsView::CancelType() - { - return iCancelType; - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsContainer::SaveFoundChannelsToPresets -// Save scanned channels to presets -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SaveFoundChannelsToPresetsL( TSavingMode aSavingMode ) - { - FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::SaveFoundChannelsToPresetsL Mode %d"), aSavingMode ) ); - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - - //store as much as the list is keeping - TInt limit; - TInt chCount = iScannedChannels.Count(); - - if ( chCount >= KMaxNumberOfChannelListItems ) - { - limit = KMaxNumberOfChannelListItems; - } - else - { - limit = chCount; - } - - TInt savedChannelCount = 0; - - if ( aSavingMode == EAppend ) - { - /** Append found channels to preset list */ - for ( TInt freqIx = 0; KMaxNumberOfChannelListItems > iObserver.Channels().Count() && - chCount > freqIx; freqIx++ ) - { - const TDesC& name = iScannedChannels[ freqIx ]->PresetNameValid() ? - iScannedChannels[ freqIx ]->PresetName() : KNullDesC; - - iObserver.AddChannelToListL( name, - iScannedChannels[ freqIx ]->PresetFrequency() ); - - savedChannelCount++; - - } - - iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 ); - - } - else // Replace - { - iObserver.UpdateChannelsL( ERemoveAllFromRepository, 0, 0 ); - - for ( TInt index = 0; index < limit; index++ ) - { - const TDesC& name = iScannedChannels[ index ]->PresetNameValid() ? - iScannedChannels[ index ]->PresetName() : KNullDesC; - iObserver.AddChannelToListL( name, - iScannedChannels[ index ]->PresetFrequency() ); - savedChannelCount++; - } - iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 ); - } - - // display note about how many many channels were saved to the preset list - HBufC* string = NULL; - string = StringLoader::LoadLC( R_QTN_FMRADIO_STATIONS_SAVED, savedChannelCount, iEikonEnv ); - CAknConfirmationNote* note = new ( ELeave ) CAknConfirmationNote( ETrue ); // waiting - note->ExecuteLD( *string ); - CleanupStack::PopAndDestroy( string ); - - ActivateMainViewL(); - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsView::PlayCurrentlySelectedChannel -// Play currently selected channel from scan local stations list -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::PlayCurrentlySelectedChannelL() - { - FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::PlayCurrentlySelectedChannelL"))); - - TInt selectedChannel = CurrentlySelectedChannel(); - if ( ChannelInUse( selectedChannel ) ) - { - TInt selectedFrequency = iScannedChannels[ selectedChannel ]->PresetFrequency(); - - if ( iRadioEngine.GetTunedFrequency() != selectedFrequency ) - { - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - iTuneRequested = ETrue; - SetNowPlayingChannelL( selectedChannel ); - SetLastListenedChannel( selectedChannel ); - appUi->TuneL( selectedFrequency ); - } - else - { - SetNowPlayingChannelL( selectedChannel ); - SetLastListenedChannel( selectedChannel ); - iRadioEngine.SetMuteOn( EFalse ); - } - } - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsView::ShowToolbar -// Sets toolbar visibility. -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::ShowToolbar( TBool aVisible ) - { - if ( iToolbar && AknLayoutUtils::PenEnabled() ) - { - iToolbar->SetToolbarVisibility( aVisible ); - iToolbar->UpdateBackground(); - iToolbar->DrawDeferred(); - // just to make sure container has the right rect when toolbar is displayed - if ( aVisible && iContainer ) - { - iContainer->SetRect( ClientRect() ); - } - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsDataProgrammeService -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsDataProgrammeService( const TDesC& aProgramService ) - { - FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::RdsDataProgrammeService"))); - if ( iContainer && !iTuneRequested && aProgramService.Length() > 0 ) - { - TInt tunedChannel = CurrentlyPlayingChannel(); - - TRAP_IGNORE - ( - if ( ChannelInUse( tunedChannel ) ) - { - iContainer->UpdateChannelListContentL( tunedChannel, - aProgramService, - iScannedChannels[ tunedChannel ]->PresetFrequency(), - ETrue, - ETrue ); - - // update PS name also to the list containing the scanned preset values - iScannedChannels[ tunedChannel ]->SetPresetNameL( aProgramService ); - iContainer->DrawDeferred(); - } - ) - } - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsDataPsNameIsStatic -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsDataPsNameIsStatic( TBool aStatic ) - { - TInt tunedChannel = CurrentlyPlayingChannel(); - if( ChannelInUse( tunedChannel ) ) - { - iScannedChannels[ tunedChannel ]->SetPresetNameValid( aStatic ); - } - } - -// --------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsDataRadioText -// --------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsDataRadioText( const TDesC&/* aRadioText */) - { - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsAfSearchBegin -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsAfSearchBegin() - { - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsAfSearchEnd -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsAfSearchEnd( TUint32 /*aFrequency*/, TInt /*aError*/ ) - { - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsAfSearchStateChange -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsAfSearchStateChange( TBool /*aEnabled*/ ) - { - } - -// --------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::RdsAvailable -// --------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::RdsAvailable( TBool /*aAvailable*/ ) - { - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::PrepareToolbar -// Prepare toolbar for displaying basic radio command buttons -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::PrepareToolbar() - { - if ( AknLayoutUtils::PenEnabled() ) - { - iToolbar = Toolbar(); - iToolbar->SetToolbarVisibility( EFalse ); - // Set observer - iToolbar->SetToolbarObserver( this ); - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::OfferToolbarEventL -// Handle commands from toolbar. -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::OfferToolbarEventL( TInt aCommandId ) - { - switch ( aCommandId ) - { - case EFMRadioToolbarButtonCmdSaveAll: - { - HandleCommandL( EFMRadioCmdSaveAllChannels ); - break; - } - case EFMRadioToolbarButtonCmdScan: - { - HandleCommandL( EFMRadioCmdScanLocalStationsScan ); - break; - } - case EFMRadioToolbarButtonCmdToggleIhf: - { - if ( iRadioEngine.GetAudioOutput() == CRadioEngine::EFMRadioOutputHeadset ) - { - AppUi()->HandleCommandL( EFMRadioCmdActivateIhf ); - } - else - { - AppUi()->HandleCommandL( EFMRadioCmdDeactivateIhf ); - } - break; - } - default: - { - break; - } - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SetToolbarDimmedState -// set toolbar buttons dimmed state -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SetToolbarDimmedState( const TBool aState ) - { - if ( iToolbar && AknLayoutUtils::PenEnabled() ) - { - iToolbar->SetDimmed( aState ); - if ( !aState ) - { - UpdateToolbar(); - } - iToolbar->DrawDeferred(); - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::UpdateToolbar -// Set save buttons dimming state -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::UpdateToolbar() - { - if ( iContainer && iToolbar && AknLayoutUtils::PenEnabled() ) - { - if ( iRadioEngine.IsAudioRoutingPossible() ) - { - if ( iRadioEngine.IsHeadsetConnected() ) - { - CAknButton* centerButton = NULL; - centerButton = static_cast( iToolbar->ControlOrNull( EFMRadioToolbarButtonCmdToggleIhf ) ); - - iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdToggleIhf, EFalse, ETrue ); - - if ( iRadioEngine.GetAudioOutput() == CRadioEngine::EFMRadioOutputIHF ) - { - if ( centerButton ) - { - centerButton->SetCurrentState( 1, ETrue ); - } - } - else - { - if ( centerButton ) - { - centerButton->SetCurrentState( 0, ETrue ); - } - } - } - else - { - iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdToggleIhf, ETrue, ETrue ); - } - } - else - { - iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdToggleIhf, ETrue, ETrue ); - } - - TInt chCount = iScannedChannels.Count(); - if ( chCount == 0 ) - { //dim save buttons - iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdSaveAll, ETrue, ETrue ); - } - else if ( chCount == 1 ) - { //dim 'save all' button. - iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdSaveAll, ETrue, ETrue ); - } - else - { //undim both - iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdSaveAll, EFalse, ETrue ); - } - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::IsFrequencyScanned -// check if the frequency is already found -// -------------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::FrequencyIndex( TInt aFrequency ) - { - TInt frequencyIndex = KErrNotFound; - TInt chCount = iScannedChannels.Count(); - - for ( TInt i = 0; i < chCount; i++ ) - { - if ( aFrequency == iScannedChannels[ i ]->PresetFrequency() ) - { - frequencyIndex = i; - break; - } - } - return frequencyIndex; - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::HandleOneChannelSaveL -// Handle single channel save -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::HandleOneChannelSaveL() - { - TInt currentPresetCount = iObserver.Channels().Count(); - TInt chIndex = iContainer->CurrentlySelectedChannel(); - TBool continueWithSave = ETrue; - - if ( !ChannelInUse( chIndex ) ) - { - User::Leave( KErrNotFound ); - } - // check if the channel list is full and show replace query if necessary - if ( currentPresetCount == KMaxNumberOfChannelListItems ) - { - CAknQueryDialog* query = CAknQueryDialog::NewL(); - if ( query->ExecuteLD( R_FMRADIO_REPLACE_EXISTING_CHANNELS_QUERY ) ) - { - iObserver.UpdateChannelsL( ERemoveAllFromRepository, 0, 0 ); - } - else - { - continueWithSave = EFalse; - } - } - if ( continueWithSave ) - { - const TDesC& name = iScannedChannels[ chIndex ]->PresetNameValid() ? - iScannedChannels[ chIndex ]->PresetName() : KNullDesC; - TInt presetFrequency = iScannedChannels[ chIndex ]->PresetFrequency(); - iObserver.AddChannelToListL( name, - presetFrequency ); - iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 ); - - TBool updateNowPlayingIcon = EFalse; - TInt tunedIndex = CurrentlyPlayingChannel(); - // update now playing icon and list index - if ( chIndex == tunedIndex ) - { - // channel is going be deleted so now playing index is not in the list - iNowPlayingIndex = KErrNotFound; - } - else if ( chIndex < tunedIndex ) - { - iNowPlayingIndex = tunedIndex - 1; - iContainer->HideNowPlayingIconL( tunedIndex, ETrue ); - updateNowPlayingIcon = ETrue; - } - else - { - // NOP - } - - // remove also from the UI list - iContainer->RemoveChannelListContentL( chIndex ); - - if ( updateNowPlayingIcon ) - { - iContainer->UpdateNowPlayingIconL( tunedIndex - 1 ); - } - // received PS name is shown - if ( name.Length() > 0 ) - { - HBufC* nameSavedString = StringLoader::LoadLC( R_QTN_FMRADIO_SAVING_DONE_ONE, name, iEikonEnv ); - CAknConfirmationNote* saveInfoNote = new ( ELeave ) CAknConfirmationNote( ETrue ); // waiting - saveInfoNote->ExecuteLD( *nameSavedString ); - CleanupStack::PopAndDestroy( nameSavedString ); - } - else // show frequency - { - TReal frequency = static_cast( presetFrequency / static_cast( KHzConversionFactor ) ); - TRealFormat format( KFrequencyMaxLength, iRadioEngine.DecimalCount() ); - TBuf frequencyString; - frequencyString.Num( frequency, format ); - AknTextUtils::LanguageSpecificNumberConversion( frequencyString ); - - HBufC* freqSavedString = StringLoader::LoadLC( R_QTN_FMRADIO_SAVING_DONE_ONE_NO_NAME, frequencyString, iEikonEnv ); - CAknConfirmationNote* saveInfoNote = new ( ELeave ) CAknConfirmationNote( ETrue ); // waiting - saveInfoNote->ExecuteLD( *freqSavedString ); - CleanupStack::PopAndDestroy( freqSavedString ); - } - // channel info is removed after save - delete iScannedChannels[ chIndex ]; - iScannedChannels.Remove( chIndex ); - iScannedChannels.Compress(); - } - UpdateToolbar(); - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::ActivateMainViewL -// Activates main view -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::ActivateMainViewL() - { - CAknViewAppUi* appUi = AppUi(); - - if ( !appUi->IsForeground() ) - { - // don't bring radio automatically to the foreground - // if the view is about to change - // and we are still in the background - appUi->SetCustomControl( 1 ); - appUi->ActivateLocalViewL( KFMRadioMainViewId ); - appUi->SetCustomControl( 0 ); - } - else - { - appUi->ActivateLocalViewL( KFMRadioMainViewId ); - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SetContextMenu -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::SetContextMenu( TInt aMenuTitleResourceId ) - { - if ( !AknLayoutUtils::PenEnabled() ) - { - CEikMenuBar* menubar = MenuBar(); - if ( menubar ) - { - menubar->SetContextMenuTitleResourceId( aMenuTitleResourceId ); - menubar->SetMenuType( CEikMenuBar::EMenuContext ); - } - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::HandleScanListRemConEventL -// -------------------------------------------------------------------------------- -// -void CFMRadioScanLocalStationsView::HandleScanListRemConEventL( TAccessoryEvent aEvent ) - { - TInt scannedChannelCount = iScannedChannels.Count(); - - if ( scannedChannelCount >= 1 ) - { - TInt selectedChannelIndex = CurrentlySelectedChannel(); - TInt nextChannellIndex = 0; - - if ( aEvent == EForward ) - { - nextChannellIndex = selectedChannelIndex + 1; - - if ( nextChannellIndex >= scannedChannelCount ) - { - // go around the the list to the first channnel - nextChannellIndex = 0; - } - } - else if ( aEvent == ERewind ) - { - nextChannellIndex = selectedChannelIndex - 1; - - if ( nextChannellIndex < KMinNumberOfChannelListItems ) - { - // jump to the last item - nextChannellIndex = scannedChannelCount - 1; - } - } - // check that index is really a valid one - if ( ChannelInUse( nextChannellIndex ) ) - { - TInt nextChannelFrequency = iScannedChannels[ nextChannellIndex ]->PresetFrequency(); - // tune if necessary - if ( iRadioEngine.GetTunedFrequency() != nextChannelFrequency ) - { - CFMRadioAppUi* appUi = static_cast( iCoeEnv->AppUi() ); - appUi->TuneL( nextChannelFrequency ); - } - } - } - } - -// -------------------------------------------------------------------------------- -// CFMRadioScanLocalStationsView::SortedFrequencyListIndex -// -------------------------------------------------------------------------------- -// -TInt CFMRadioScanLocalStationsView::SortedFrequencyListIndex( TInt aFrequency ) - { - TInt channelCount = iScannedChannels.Count(); - TInt sortedIndex = 0; - - for ( TInt i = 0; i < channelCount; i++ ) - { - TInt presetFreq = iScannedChannels[i]->PresetFrequency(); - - if ( aFrequency > presetFreq ) - { - sortedIndex = i + 1; - } - else if ( aFrequency < presetFreq ) - { - sortedIndex = i; - break; - } - } - return sortedIndex; - } - -// End of File