mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerplugin.cpp
branchRCL_3
changeset 11 13afc0e517bd
parent 5 2a40e88564c8
child 13 a914e47e7a01
child 14 943ff5625028
--- a/mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerplugin.cpp	Tue Feb 02 00:09:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,632 +0,0 @@
-/*
-* Copyright (c) 2006-2007 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:  Active Idle player plug-in
-*
-*/
-
-
-#include <ecom/implementationproxy.h>
-#include <aiutility.h>
-
-#include <AknUtils.h>
-#include <StringLoader.h>
-#include <bautils.h>
-#include <avkon.rsg>
-
-#include <data_caging_path_literals.hrh> 	// KDC_APP_BITMAP_DIR
-#include <apgcli.h>           				// RApaLsSession
-#include <apacmdln.h>         				// CApaCommandLine
-#include <apgtask.h>
-
-#include <mpxlog.h>
-#include <mpxconstants.h> 					// KAppUidMusicPlayer
-#include <mpxparameter.h>
-#include <mpxmusicplayerviewplugin.hrh>
-#include <aiplayerpluginresource.rsg>
-
-#include "aiplayerplugin.h"
-#include "aiplayerpluginuids.hrh"
-#include "aiplayerplugincontentmodel.h"
-
-_LIT(KMPXZeroDurationMark, "--");
-const TInt KMPXMinSecSeparatorIndex = 2;
-const TInt KMPXOneSecInMicroSecs = 1000000;
-const TInt KMPXOneHourInSeconds = 60*60;
-const TInt KMPXTimeIndicatorLength = 16;
-const TInt KPlayerMusicPlayerParameterGranularity = 50;
-_LIT( KMPXAiPlayerRscPath, "z:aiplayerpluginresource.rsc" );
-
-const TInt KMPlayerResumeWaitTime = 1000000; // 1.0s
-
-// ======== MEMBER FUNCTIONS ========
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::ConstructL
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::ConstructL()
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::ConstructL() - begin");
-
-    iInfo.iUid = KUidMusicPlayerPlugin;
-    iInfo.iName.Copy(_L8("PlayerPlugin"));
-
-    iContent   = AiUtility::CreateContentItemArrayIteratorL(KAiPlplContent);
-    iResources = AiUtility::CreateContentItemArrayIteratorL(KAiPlplResources);
-    iEvents    = AiUtility::CreateContentItemArrayIteratorL(KAiPlplEvents);
-
-    // Read time format strings from AVKON resource
-    iLongFormatString = StringLoader::LoadL(R_QTN_TIME_DURAT_LONG_WITH_ZERO);
-    iShortFormatString = StringLoader::LoadL(R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO);
-
-    iCoeEnv = CCoeEnv::Static();
-
-    TParse parse;
-    parse.Set(KMPXAiPlayerRscPath, &KDC_APP_RESOURCE_DIR, NULL);
-    TFileName resourceFile;
-    resourceFile.Append(parse.FullName());
-    BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(), resourceFile);
-    iResourceOffset = iCoeEnv->AddResourceFileL(resourceFile);
-    iUnknownArtistText = StringLoader::LoadL(R_MPX_QTN_AIPP_UNKNOWN_ARTIST);
-
-    iPlayStarted = EFalse;
-    iCleanTimer = CPeriodic::NewL(CActive::EPriorityStandard);
-
-    MPX_DEBUG1("CAiPlayerPlugin::ConstructL() - end");
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::NewL
-// ----------------------------------------------------------------------------
-//
-CAiPlayerPlugin* CAiPlayerPlugin::NewL()
-    {
-    CAiPlayerPlugin* self = new (ELeave) CAiPlayerPlugin;
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::CAiPlayerPlugin
-// ----------------------------------------------------------------------------
-//
-CAiPlayerPlugin::CAiPlayerPlugin()
-    : iEngine(NULL)
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::~CAiPlayerPlugin()
-// ----------------------------------------------------------------------------
-//
-CAiPlayerPlugin::~CAiPlayerPlugin()
-    {
-    iObservers.Close();
-
-    Release( iContent );
-    Release( iResources );
-    Release( iEvents );
-
-    if ( iResourceOffset )
-        {
-        iCoeEnv->DeleteResourceFile(iResourceOffset);
-        }
-
-    delete iEngine;
-
-    delete iLongFormatString;
-    delete iShortFormatString;
-    delete iUnknownArtistText;
-
-    iCoeEnv = NULL;
-    iCleanTimer->Cancel();
-    delete iCleanTimer;
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::Resume
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::Resume( TAiTransitionReason aReason )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::ResumeL");
-    if ( !iEngine )
-        {
-        TRAPD(err, iEngine = CAiPlayerPluginEngine::NewL(*this));
-        if ( err == KErrNone )
-        	{
-			iState = iEngine->PlayerState();
-			PlayerStateChanged( iState );
-		    if (iState == EMPlayerStatePlaying || iState == EMPlayerStatePaused )
-				{
-				TrackInfoChanged( iEngine->Title(), iEngine->Artist() );
-				VolumeChanged( iEngine->Volume() );
-				PlaybackPositionChanged( iEngine->Position() );
-				}
-			}
-        }
-     else if ( aReason == EAiGeneralThemeChanged )
-        {
-        PlayerStateChanged( iEngine->PlayerState() );
-        }
-
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::Suspend
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::Suspend( TAiTransitionReason /*aReason*/ )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::Suspend");
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::Stop
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::Stop( TAiTransitionReason /*aReason*/ )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::Stop");
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::SubscribeL
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::SubscribeL( MAiContentObserver& aObserver )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::SubscribeL");
-    return iObservers.AppendL(&aObserver);
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::ConfigureL
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::ConfigureL( RAiSettingsItemArray& /*aSettings*/ )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::ConfigureL");
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::Extension
-// ----------------------------------------------------------------------------
-//
-TAny* CAiPlayerPlugin::Extension( TUid aUid )
-    {
-    if (aUid == KExtensionUidProperty)
-        {
-        return static_cast<MAiPropertyExtension*>(this);
-        }
-    else if (aUid == KExtensionUidEventHandler)
-        {
-        return static_cast<MAiEventHandlerExtension*>(this);
-        }
-    return NULL; // Requested extension not supported
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::GetPropertyL
-// ----------------------------------------------------------------------------
-//
-TAny* CAiPlayerPlugin::GetPropertyL( TInt aProperty )
-    {
-    switch (aProperty)
-        {
-        case EAiPublisherInfo:
-        return &iInfo;
-
-        case EAiPublisherContent:
-        return static_cast<MAiContentItemIterator*>(iContent);
-
-        case EAiPublisherResources:
-        return static_cast<MAiContentItemIterator*>(iResources);
-
-        case EAiPublisherEvents:
-        return static_cast<MAiContentItemIterator*>(iEvents);
-        }
-
-    User::Leave(KErrNotSupported);
-    return NULL;
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::SetPropertyL
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::SetPropertyL( TInt aProperty, TAny* aValue )
-    {
-    if (aValue)
-        {
-        switch (aProperty)
-            {
-            case EAiPublisherInfo:
-                {
-                const TAiPublisherInfo* info =
-                    static_cast<const TAiPublisherInfo*>(aValue);
-
-                iInfo.iUid.iUid = info->iUid.iUid;
-                iInfo.iName.Copy( info->iName );
-                }
-            break;
-            }
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::HandleEvent
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::HandleEvent( TInt aEvent, const TDesC& aParam )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::HandleEvent");
-    TRAPD(err, DoHandleEventL( aEvent, aParam ) );
-    if ( err != KErrNone )
-    	{
-		MPX_DEBUG2("CAiPlayerPlugin::HandleEvent err[%d]", err);
-		}
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::DoHandleEventL
-// ----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::DoHandleEventL( TInt aEvent, const TDesC& aParam )
-    {
-    MPX_DEBUG2("CAiPlayerPlugin::DoHandleEventL %d", aEvent);
-
-	TInt volume = iEngine->Volume();
-    switch (aEvent)
-        {
-        case EAiPlplEventVolInc:
-            {
-            iEngine->SetVolumeL(++volume);
-            iLastSetVolume = volume;
-            }
-            break;
-        case EAiPlplEventVolDec:
-            {
-            iEngine->SetVolumeL(--volume);
-            iLastSetVolume = volume;
-            }
-            break;
-    	case EAiPlplEventVolSet:
-    		{
-    		TLex lex;
-    		lex.Assign(aParam);
-    		if( lex.Val(volume) == KErrNone )
-    		    {
-        		iEngine->SetVolumeL(volume);
-    		    }
-            iLastSetVolume = volume;
-    		}
-        	break;
-    	case EAiPlplEventVolMute:
-    		{
-    		iLastSetVolume = volume;
-       		iEngine->SetVolumeL(0);
-    		}
-	        break;
-    	case EAiPlplEventVolRestore:
-    		{
-    		if( iLastSetVolume == 0 )
-    		    {
-    		    // So that "muting muted" don't function funky way.
-    		    iLastSetVolume = 1;
-    		    }
-       		iEngine->SetVolumeL(iLastSetVolume);
-    		}
-	        break;
-        case EAiPlplEventLaunchLibrary:
-            {
-            MPX_DEBUG1("CAiPlayerPlugin::DoHandleEventL() EAiPlplEventLaunchLibrary");
-            //Launch player
-            TApaTaskList tasList(iEikonEnv->WsSession());
-            TApaTask task = tasList.FindApp(KAppUidMusicPlayerX);
-            if (task.Exists())
-                {
-                MPX_DEBUG1("CAiPlayerPlugin::DoHandleEventL() Music app is already launched. Go to Now Playing view.");
-                RWsSession& wsSession( iCoeEnv->WsSession() );
-                CMPXParameter* param = new ( ELeave ) CMPXParameter();
-                CleanupStack::PushL( param );
-                param->iType.iUid = KMPXPluginTypePlaybackUid;
-                param->iCmdForward = EMPXCmdFwdNowPlaying;
-
-                MPX_DEBUG1( "CAiPlayerPlugin::DoHandleEventL start Externalize" );
-                CBufBase* buffer = CBufFlat::NewL( KPlayerMusicPlayerParameterGranularity );
-                CleanupStack::PushL( buffer );
-                RBufWriteStream writeStream( *buffer );
-                CleanupClosePushL( writeStream );
-                param->ExternalizeL( writeStream );
-                writeStream.CommitL();
-                buffer->Compress();
-                CleanupStack::PopAndDestroy( &writeStream );
-
-                MPX_DEBUG2( "CAiPlayerPlugin::DoHandleEventL start Send message, message size = %d", buffer->Size() );
-                wsSession.SendMessageToWindowGroup( task.WgId(), KAppUidMusicPlayerX, buffer->Ptr( 0 ));
-                MPX_DEBUG1( "CAiPlayerPlugin::DoHandleEventL Send message complete" );
-                CleanupStack::PopAndDestroy( buffer );
-                CleanupStack::PopAndDestroy( param );
-                }
-            else
-                {
-				// Launch Music Player Application
-                MPX_DEBUG1("CAiPlayerPlugin::DoHandleEventL() Launch Music app for the first time");
-				RProcess process;
-				TApaAppInfo appInfo;
-				RApaLsSession session;
-				TInt res = session.Connect(); // Ignore error
-				CleanupClosePushL( session );
-				TInt err = session.GetAppInfo( appInfo, KAppUidMusicPlayerX );
-				if ( !err )
-						{
-						process.Create( appInfo.iFullName, KNullDesC );// Ignore error
-						TRAP( err,
-							{
-							CApaCommandLine* commandLine = CApaCommandLine::NewLC();
-							commandLine->SetDocumentNameL( KNullDesC );
-							commandLine->SetExecutableNameL( appInfo.iFullName );
-							commandLine->SetProcessEnvironmentL( process );
-							session.StartApp( *commandLine ); // Ignore error
-							CleanupStack::PopAndDestroy(); // commandLine
-							});
-						process.Resume();
-						process.Close();
-						}
-				CleanupStack::PopAndDestroy(); // Close RApaLsSession session
-                }
-            }
-            break;
-        default:
-        	break;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CAiPlayerPlugin::ClearL
-// ----------------------------------------------------------------------------
-//
-TInt CAiPlayerPlugin::ClearL(TAny* aPtr)
-	{
-    MPX_DEBUG1("CAiPlayerPlugin::ClearL");
-  	CAiPlayerPlugin* plugin = reinterpret_cast<CAiPlayerPlugin*> (aPtr);
-    for (TInt i = 0; i < plugin->iObservers.Count(); i++)
-    	{
-        MAiContentObserver* observer = plugin->iObservers[i];
-        observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentArtistCaption, 1);
-        observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentTitleCaption, 1);
-        observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentDurationCaption, 1);
-        observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentElapsedTime,1);
-        observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentStatus, 1);
-        observer->Clean((MAiPropertyExtension&) *plugin, EAiPlplContentVolume,1);
-        observer->Commit(0);
-    	}
-    plugin->iCleanTimer->Cancel();
-    return KErrNone;
-	}
-
-// -----------------------------------------------------------------------------
-// CAiPlayerPlugin::PlayerStateChanged
-// -----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::PlayerStateChanged( TMPlayerState aState )
-    {
-    MPX_DEBUG2("CAiPlayerPlugin::PlayerStateChanged [%d]", aState);
-    iState = aState;
-    for (TInt i = 0; i < iObservers.Count(); i++)
-        {
-        MAiContentObserver* observer = iObservers[i];
-        observer->StartTransaction(reinterpret_cast<TInt32>(this));
-        switch(iState)
-            {
-            case EMPlayerStatePlaying:
-                {
-       			iPlayStarted = ETrue;
-       			iCleanTimer->Cancel();
-                observer->Publish(*this,
-                                  EAiPlplContentStatus,
-                                  EAiPlplResourcePlayIcon,
-                                  1);
-                }
-                break;
-            case EMPlayerStatePaused:
-                {
-       			iPlayStarted = ETrue;
-                iCleanTimer->Cancel();
-                observer->Publish(*this,
-                                  EAiPlplContentStatus,
-                                  EAiPlplResourcePauseIcon,
-                                  1);
-                PlaybackPositionChanged(iEngine->Position());
-                }
-                break;
-            case EMPlayerStateSeeking:
-                PlaybackPositionChanged(iEngine->Position());
-                break;
-            default:    // EMPlayerStateOther
-       			if ( iPlayStarted )
-       				{
-       				iCleanTimer->Start(KMPlayerResumeWaitTime,
-       			                        KMPlayerResumeWaitTime,
-       			                        TCallBack(ClearL,this));
-       				}
-       			iPlayStarted = EFalse;
-                break;
-            }
-        observer->Commit(reinterpret_cast<TInt32>(this));
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CAiPlayerPlugin::TrackInfoChanged
-// -----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::TrackInfoChanged( const TDesC& aTitle, const TDesC& aArtist )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::TrackInfoChanged");
-    for (TInt i = 0; i < iObservers.Count(); i++)
-        {
-        MAiContentObserver* observer = iObservers[i];
-        observer->StartTransaction(reinterpret_cast<TInt32>(this));
-
-        if ( &aTitle && aTitle.Length() ) //Check if hte reference exists add if is not empty
-            {
-            observer->Publish(*this, EAiPlplContentTitleCaption, aTitle, 1);
-            }
-        if ( &aArtist && aArtist.Length() ) //Check if hte reference exists add if is not empty
-            {
-            observer->Publish(*this, EAiPlplContentArtistCaption, aArtist, 1);
-            }
-        else
-            {
-            observer->Publish(*this, EAiPlplContentArtistCaption, *iUnknownArtistText, 1);
-            }
-        observer->Commit(reinterpret_cast<TInt32>(this));
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CAiPlayerPlugin::PlaybackPositionChanged
-// -----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::PlaybackPositionChanged( TInt aPosition )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::PlaybackPositionChanged");
-
-    TBuf<KMPXTimeIndicatorLength> elapsed;
-    TBuf<KMPXTimeIndicatorLength> total;
-
-    TInt64 playbackPosInSeconds;
-    TInt64 totalLengthInSeconds;
-
-    playbackPosInSeconds = aPosition;
-    totalLengthInSeconds = iEngine->Duration();
-
-    TPtrC format = *iShortFormatString;
-
-    if (totalLengthInSeconds >= KMPXOneHourInSeconds)
-        {
-        // For tracks longer than an hour we use different time format and a
-        // slightly different layout which has more space for the time labels.
-        format.Set(*iLongFormatString);
-        }
-
-    TTime elapsedTime(playbackPosInSeconds * KMPXOneSecInMicroSecs);
-    TTime totalTime(totalLengthInSeconds * KMPXOneSecInMicroSecs);
-
-    if (aPosition == 0)
-    	{
-    	totalLengthInSeconds = 0;
-    	}
-
-    // Convert total playing time to texts.
-    elapsedTime.FormatL(elapsed, format);
-
-    if (totalLengthInSeconds)
-        {
-        // Time remaining
-        totalTime.FormatL(total, format);
-        }
-    else
-        {
-        // Time remaining: --:--
-        TLocale locale;
-        TBuf<KMPXTimeIndicatorLength> pos;
-        TChar separator = locale.TimeSeparator(KMPXMinSecSeparatorIndex);
-        total = KMPXZeroDurationMark;
-        total.Append(separator);
-        total += KMPXZeroDurationMark;
-        }
-
-    AknTextUtils::LanguageSpecificNumberConversion(elapsed);
-    AknTextUtils::LanguageSpecificNumberConversion(total);
-
-    iElapsedTime.Copy(elapsed);
-
-    iDuration.Copy(elapsed);
-    iDuration.Append(_L("/"));
-    iDuration.Append(total);
-
-    if ( iState == EMPlayerStatePlaying || iState == EMPlayerStatePaused || iState == EMPlayerStateSeeking )
-        {
-        for (TInt i = 0; i < iObservers.Count(); i++)
-            {
-            MAiContentObserver* observer = iObservers[i];
-            observer->StartTransaction(reinterpret_cast<TInt32>(this));
-
-            //for (Classic view)
-            observer->Publish(*this,
-                           EAiPlplContentElapsedTime,
-                           iElapsedTime,
-                           1);
-
-            //for (Navibar view)
-            observer->Publish(*this,
-                           EAiPlplContentDurationCaption,
-                           iDuration,
-                           1);
-
-            observer->Commit(reinterpret_cast<TInt32>(this));
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CAiPlayerPlugin::VolumeChanged
-// -----------------------------------------------------------------------------
-//
-void CAiPlayerPlugin::VolumeChanged( TInt aVolume )
-    {
-    MPX_DEBUG1("CAiPlayerPlugin::VolumeChanged");
-
-    for (TInt i = 0; i < iObservers.Count(); i++)
-        {
-        MAiContentObserver* observer = iObservers[i];
-        observer->StartTransaction(reinterpret_cast<TInt32>(this));
-
-        // Order of enum TAiPlplPluginResourceIds is important
-        // must stay EAiPlplResourceVol0= 0 ... EAiPlplResourceVol10 = 10
-        // for this to work
-        if ( aVolume>=0 && aVolume<=10 )
-            {
-            observer->Publish(*this,
-                              EAiPlplContentVolume,
-                              aVolume,
-                              1);
-            }
-        observer->Commit(reinterpret_cast<TInt32>(this));
-        }
-    }
-
-// ======== GLOBAL FUNCTIONS ========
-
-// Provide a key pair value table for ECOM.
-// Used to identify the correct construction function for the requested interface.
-const TImplementationProxy ImplementationTable[] =
-{
-    IMPLEMENTATION_PROXY_ENTRY( AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PLAYERPLUGIN,
-                                CAiPlayerPlugin::NewL )
-};
-
-
-// Return an instance of the proxy table.
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
-{
-    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
-    return ImplementationTable;
-}
-