--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irnowplayingviewcontainer.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,478 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+#include <aknutils.h>
+#include <alf/alfanchorlayout.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfenv.h>
+#include <alf/alfevent.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfvisual.h>
+#include <alf/alftimedvalue.h>
+#include <alf/alfdisplay.h>
+#include <data_caging_path_literals.hrh>
+#include <touchfeedback.h>
+
+
+#include <internetradio.rsg>
+#include <alf/alfimagevisual.h>
+#include <aknview.h>
+#include <aknview.h>
+#include <aknvolumepopup.h>
+#include <stringloader.h>
+#include <e32des8.h>
+#include "internetradio.mbg"
+#include "irui.h"
+#include "ir.hrh"
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irnowplayingviewcontainer.h"
+#include "irnowplayingview.h"
+#include "irnowplayingwrapper.h"
+#include "irfavoritesdb.h"
+#include "irstationlogocontrol.h"
+#include "irstationinformationdisplay.h"
+#include "irradioidle.h"
+
+#ifdef MUL_USE_COMMON_COMPONENTS
+using namespace GestureHelper;
+/** The base value for the control group id needed when constructing gesture control. */
+const TInt KIRFreeControlGroupIdBase = 10;
+#endif
+const TInt KControl1 =0;
+
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer::CIRNowPlayingViewContainer()
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer::CIRNowPlayingViewContainer(CAlfEnv& aEnv ):iAlfEnv (aEnv)
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::CIRNowPlayingViewContainer" );
+ }
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewL( CAlfEnv& aEnv )
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewL( CAlfEnv& aEnv,
+ CIRNowPlayingView* aInstance)
+{
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewL" );
+ CIRNowPlayingViewContainer* self = CIRNowPlayingViewContainer::NewLC(aEnv,aInstance);
+ CleanupStack::Pop(self);
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewL - Exiting." );
+ return self;
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewL( CAlfEnv& aEnv )
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer* CIRNowPlayingViewContainer::NewLC( CAlfEnv& aEnv,
+ CIRNowPlayingView* aInstance)
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewLC - Entering" );
+ CIRNowPlayingViewContainer* self = new( ELeave ) CIRNowPlayingViewContainer(aEnv);
+ CleanupStack::PushL( self );
+ self->ConstructL(aInstance);
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::NewLC - Exiting" );
+ return self;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingViewContainer::ConstructL( CAlfEnv& aEnv )
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::ConstructL( CIRNowPlayingView* aInstance )
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::ConstructL - Entering" );
+ iNowPlayingView=aInstance;
+ #ifdef MUL_USE_COMMON_COMPONENTS
+ // Control group id that client must not use.
+ const TInt freeControlGroupId = KIRFreeControlGroupIdBase + KIRMaximumViewId.iUid;
+ CGestureControl::ConstructL( *this, iAlfEnv, iAlfEnv.PrimaryDisplay(), freeControlGroupId );
+ #else
+ CAlfControl::ConstructL( iAlfEnv );
+ #endif
+ // Create Main View
+ iLayout = CAlfAnchorLayout::AddNewL( *this );
+ LayoutControl();
+ iByteCounter=CAlfTextVisual::AddNewL( *this, iLayout);
+ iBitrate = CAlfTextVisual::AddNewL( *this, iLayout);
+ CAlfDeckLayout* deck = CAlfDeckLayout::AddNewL( *this, iLayout );
+ iLogoControl = CIRStationLogoControl::NewL( Env(), KIRNowPlayingViewID.iUid, deck );
+ iRadioIdle = CIRRadioIdle::NewL( iAlfEnv, KIRNowPlayingViewID.iUid, deck );
+ // Update radio idle skin color
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ if ( skin )
+ {
+ TRgb textColor; // text color when not highlighted
+ AknsUtils::GetCachedColor( skin, textColor, KAknsIIDQsnTextColors,
+ EAknsCIQsnTextColorsCG6 );
+ TRgb highlightColor; // text color when highlighted
+ AknsUtils::GetCachedColor( skin, highlightColor, KAknsIIDQsnTextColors,
+ EAknsCIQsnTextColorsCG10 );
+ iRadioIdle->SetPrimaryColor( textColor );
+ iRadioIdle->SetSecondaryColor( highlightColor );
+ }
+ iStationInformationDisplay = CIRStationInformationDisplay::NewL( iAlfEnv,
+ KIRNowPlayingViewID.iUid,iLayout);
+ if (iNowPlayingView->iUi->IsLandscapeOrientation() )
+ {
+ // Set display orientation.
+ iStationInformationDisplay->SetDisplayOrientation( ETrue );
+ }
+ iAlfEnv.ControlGroup( KIRNowPlayingViewID.iUid ).AppendL( this ); // Transfers ownership. No leaving code must be run after this call.
+ iFeedback = MTouchFeedback::Instance();
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::ConstructL - Exiting" );
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer()
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer - Entering" );
+ iLogoControl = NULL;
+ iLayout = NULL;
+ iStationInformationDisplay = NULL;
+ iBitrate = NULL;
+ iByteCounter = NULL;
+ iNowPlayingView = NULL;
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::~CIRNowPlayingViewContainer - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns a reference to the station logo control.
+// ---------------------------------------------------------------------------
+//
+CIRStationLogoControl& CIRNowPlayingViewContainer::StationLogoControl()
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::StationLogoControl" );
+ return *iLogoControl;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns a reference to the radio idle control.
+// ---------------------------------------------------------------------------
+//
+CIRRadioIdle& CIRNowPlayingViewContainer::RadioIdle()
+ {
+ return *iRadioIdle;
+ }
+#ifdef MUL_USE_COMMON_COMPONENTS
+// ---------------------------------------------------------------------------
+// From class MGestureObserver.
+// Called when user makes gestures.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::HandleGestureL( const MGestureEvent& aEvent )
+ {
+ IRLOG_DEBUG(" *** S60VisualRadio -- CVRNowPlayingContainer::HandleGestureL ");
+ TGestureCode eventCode( aEvent.Code( MGestureEvent::EAxisBoth ) );
+ switch ( eventCode )
+ {
+ case GestureHelper::EGestureStart:
+ {
+ if ( iFeedback )
+ {
+ // Give feedback when gesture starts.
+ iFeedback->InstantFeedback( ETouchFeedbackBasic );
+ }
+ break;
+ }
+ case GestureHelper::EGestureTap:
+ {
+ iNowPlayingView->HandleCommandL(EIRCmdVolumeControl);
+ break;
+ }
+ case GestureHelper::EGestureSwipeLeft:
+ {
+ iNowPlayingView->HandleCommandL( EIRCmdStepPrevPreset );
+ break;
+ }
+ case GestureHelper::EGestureSwipeRight:
+ {
+ iNowPlayingView->HandleCommandL( EIRCmdStepNextPreset );
+ break;
+ }
+ default:
+ break;
+ }
+ }
+#else
+
+
+// ---------------------------------------------------------------------------
+// From class CAlfControl.
+// Called when an event occurs.
+// ---------------------------------------------------------------------------
+//
+TBool CIRNowPlayingViewContainer::OfferEventL( const TAlfEvent& aEvent )
+ {
+ TBool eventHandled = EFalse;
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::OfferEventL - Entering" );
+ if(aEvent.IsPointerEvent())
+ {
+ if ( iFeedback )
+ {
+ iFeedback->InstantFeedback( ETouchFeedbackBasic );
+ }
+ TriggerCommandL(EIRCmdVolumeControl);
+ eventHandled = ETrue;
+ }
+ else if(aEvent.IsKeyEvent() )
+ {
+ const TKeyEvent& kEvent = aEvent.KeyEvent();
+ KeyHitL( kEvent.iScanCode );
+ }
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::OfferEventL - Exiting" );
+ return eventHandled;
+ }
+#endif
+// ---------------------------------------------------------------------------
+// Returns a reference to the station information display.
+// ---------------------------------------------------------------------------
+//
+CIRStationInformationDisplay& CIRNowPlayingViewContainer::StationInformationDisplay()
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::StationInformationDisplay " );
+ return *iStationInformationDisplay;
+ }
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingViewContainer::SetRdsTextL( const TDesC& aText )
+// Set the text in the visual.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::SetBitrateL( const TDesC& aText )
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetBitrateL - Entering" );
+ iBitrate->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+ iBitrate->SetStyle( EAlfTextStyleSmall );
+ iBitrate->SetTextL( aText );
+ iBitrate->SetWrapping( CAlfTextVisual::ELineWrapManual );
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetBitrateL - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// void CIRNowPlayingViewContainer::SetRdsTextL1( const TDesC& aText )
+// Set the text in the visual.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::SetByteCounterL( const TDesC& aText )
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetByteCounterL - Entering" );
+ iByteCounter->SetColor( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+ iByteCounter->SetStyle( EAlfTextStyleSmall );
+ iByteCounter->SetTextL( aText );
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetByteCounterL - Exiting" );
+ }
+// ---------------------------------------------------------------------------
+// CIRNowPlayingViewContainer::KeyHit()
+// Loads the fonts required to draw this view
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRNowPlayingViewContainer::KeyHitL( TInt aScanCode
+ /*TVRRockerButtonHitTestType aType */)
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::KeyHit - Entering" );
+ TBool ret = EFalse;
+ switch ( aScanCode )
+ {
+ case EStdKeyRightArrow:
+ {
+ TriggerCommandL(EIRCmdStepNextPreset);
+ }
+ break;
+ case EStdKeyLeftArrow:
+ {
+ TriggerCommandL(EIRCmdStepPrevPreset);
+ }
+ break;
+ case EStdKeyDevice3:
+ {
+ if(iNowPlayingView->iNowPlayingWrapper->iPlaying)
+ {
+ TriggerCommandL(EIRCmdStop);
+ }
+ else
+ {
+ TriggerCommandL(EIRCmdPlay);
+ }
+ }
+ break;
+ case EStdKeyUpArrow:
+ break;
+ case EStdKeyDownArrow:
+ break;
+ default:
+ break;
+ }
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::KeyHit - Exiting" );
+ return ret;
+ }
+// ---------------------------------------------------------------------------
+// Layouts this control.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::LayoutControl()
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::LayoutControl - Entering" );
+ TInt ordinal = KControl1;
+ TInt resId ;
+
+
+ //Set anchor for ByteCounter
+ resId = iNowPlayingView->iUi->ChooseLayoutResource(
+ R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT,
+ R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT_MIRRORED,
+ R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT_LANDSCAPE,
+ R_IR_NOWPLAYING_VIEW_BYTECOUNTER_LAYOUT_LANDSCAPE_MIRRORED );
+ SetLayoutAnchor( ordinal, resId );
+ ordinal++;
+
+ //Set anchor for the BitRate
+ resId = iNowPlayingView->iUi->ChooseLayoutResource(
+ R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT,
+ R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT_MIRRORED,
+ R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT_LANDSCAPE,
+ R_IR_NOWPLAYING_VIEW_BITRATE_LAYOUT_LANDSCAPE_MIRRORED );
+ SetLayoutAnchor( ordinal, resId );
+ ordinal++;
+
+ // Set anchor for station logo.
+ resId = iNowPlayingView->iUi->ChooseLayoutResource(
+ R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT,
+ R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT_MIRRORED,
+ R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT_LANDSCAPE,
+ R_IR_NOWPLAYING_VIEW_LOGO_BITMAP_LAYOUT_LANDSCAPE_MIRRORED );
+ SetLayoutAnchor( ordinal, resId );
+ ordinal++;
+
+ // Set anchor for station information.
+ resId = iNowPlayingView->iUi->ChooseLayoutResource(
+ R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT,
+ R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT_MIRRORED,
+ R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT_LANDSCAPE,
+ R_IR_NOWPLAYING_VIEW_STATION_INFORMATION_LAYOUT_LANDSCAPE_MIRRORED );
+ SetLayoutAnchor( ordinal, resId );
+ ordinal++;
+
+ if ( iNowPlayingView->iUi->IsLandscapeOrientation() )
+ {
+ // Set anchor for RDS data on landscape.
+ resId = R_IR_NOWPLAYING_VIEW_METADATA_LAYOUT_LANDSCAPE;
+ if ( AknLayoutUtils::LayoutMirrored() )
+ {
+ resId = R_IR_NOWPLAYING_VIEW_METADATA_LAYOUT_LANDSCAPE_MIRRORED;
+ }
+ SetLayoutAnchor( ordinal, resId );
+ ordinal++;
+ }
+ else
+ {
+ // If RDS data is on separate layout then remove it
+ iLayout->Detach( ordinal );
+ }
+ if ( iStationInformationDisplay )
+ {
+ iStationInformationDisplay->SetDisplayOrientation(
+ iNowPlayingView->iUi->IsLandscapeOrientation() );
+ }
+ iLayout->UpdateChildrenLayout();
+
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::LayoutControl - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// Sets layout anchor for child visual.
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::SetLayoutAnchor( TInt aOrdinal, TInt aResourceId )
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetLayoutAnchor - Entering" );
+
+ // Read LAFs.
+ TSize size = iAlfEnv.PrimaryDisplay().VisibleArea().Size();
+ TRect rect( size );
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( rect, aResourceId );
+
+ // Set top/left anchor.
+ iLayout->Attach( aOrdinal,
+ EAlfAnchorTypeTopLeft,
+ TAlfXYMetric( TAlfMetric( layoutRect.Rect().iTl.iX ),
+ TAlfMetric( layoutRect.Rect().iTl.iY ) ),
+ EAlfAnchorAttachmentOriginTopLeft );
+
+ // Set bottom/right anchor.
+ iLayout->Attach( aOrdinal,
+ EAlfAnchorTypeBottomRight,
+ TAlfXYMetric( TAlfMetric( layoutRect.Rect().iBr.iX ),
+ TAlfMetric( layoutRect.Rect().iBr.iY ) ),
+ EAlfAnchorAttachmentOriginTopLeft );
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::SetLayoutAnchor - Exiting" );
+ }
+
+// ---------------------------------------------------------------------------
+// Triggers the command to view handling
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::TriggerCommandL( TInt iCommandId)
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+ TVwsViewId viewId( KNullUid, KNullUid );
+ CAknViewAppUi* appUi = static_cast<CAknViewAppUi*>( CCoeEnv::Static()->AppUi() );
+ TInt err = appUi->GetActiveViewId( viewId );
+ RProcess process;
+ TSecureId id = process.SecureId();
+ // TO be DOne GetActiveViewId doesn't always work (when switched back to VRA through RadioLauncher icon
+ if( !err && viewId.iAppUid.iUid == id.iId )
+ {
+ CAknView* view = appUi->View( viewId.iViewUid );
+ if( view )
+ {
+ view->ProcessCommandL( iCommandId );
+ }
+ }
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Exiting" );
+ }
+//Calls the Views Draw Function
+// ---------------------------------------------------------------------------
+//
+void CIRNowPlayingViewContainer::DrawViewL( TBool aStationHasLogo)
+ {
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+ iNowPlayingView->DrawViewL(aStationHasLogo);
+ IRLOG_DEBUG( "CIRNowPlayingViewContainer::TriggerCommandL - Entering" );
+ }