--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayerapp/mpxvideoplayer/src/mpxvideoplayerappui.cpp Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,400 @@
+/*
+* 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: AppUI implementation
+*
+*/
+
+// Version : %version: da1mmcf#33 %
+
+
+#include <hlplch.h> // Help launcher
+#include <sysutil.h> // disk space check
+#include <f32file.h> // TDriveNumber::EDriveC
+#include <s32mem.h>
+#include <StringLoader.h>
+#include <AknQueryDialog.h>
+#include <aknview.h>
+#include <aknconsts.h>
+#include <akndef.h>
+#include <AiwGenericParam.h>
+#include <coeutils.h>
+
+#include <mpxplaybackutility.h>
+#include <mpxplaybackmessage.h>
+#include <mpxviewutility.h>
+#include <vcxmyvideosdefs.h>
+#include <mpxvideoplayer.rsg>
+
+#include "mpxvideoplayerappui.h"
+#include "mpxvideoplayerconstants.h"
+#include "mpxvideoplayerlogger.h"
+#include "mpxvideoplayerappuiengine.h"
+#include "mpxvideoplayeraiwparamextractor.h"
+#include "mpxvideo_debug.h"
+#include "videoplayerpskeys.h"
+
+// Matrix uid, needed for activating the suite view.
+const TInt KVcxMatrixUid = 0x101F4CD2;
+
+// The action=exit flag tells menu that the suite app view is exiting via options->exit.
+_LIT8( KVcxVideoSuiteExitMessage, "mm://tvvideosuite?action=exit" );
+
+// ======== MEMBER FUNCTIONS ========
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::CMpxVideoPlayerAppUi
+// -----------------------------------------------------------------------------
+//
+CMpxVideoPlayerAppUi::CMpxVideoPlayerAppUi()
+ : iEndKeyExit( EFalse )
+{
+ MPX_DEBUG(_L("CMpxVideoPlayerAppUi::CMpxVideoPlayerAppUi()"));
+}
+
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::ConstructL()
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::ConstructL()"));
+
+ BaseConstructL( EAknEnableSkin | EAknSingleClickCompatible );
+
+ DoWgIdUpkeep();
+
+ if ( IsEmbedded() )
+ {
+ //
+ // Set the orientation to landscape for Embedded instances
+ //
+ SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape );
+ }
+ else
+ {
+ //
+ // if we are stand alone mode store window group id to RProperty
+ // so we can identify it in ActionHandlerPlugin.
+ //
+ RProperty::Define( KVideoPlayerRPropertyCategory,
+ KVideoPlayerRPropertyWGIdKey,
+ RProperty::EInt );
+
+ RProperty::Set( KVideoPlayerRPropertyCategory,
+ KVideoPlayerRPropertyWGIdKey,
+ iCoeEnv->RootWin().Identifier() );
+ }
+
+ iAppUiEngine = CMpxVideoPlayerAppUiEngine::NewL( this );
+}
+
+
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::DoWgIdUpkeer
+// Checks if stored wgid is run by other application than us
+// -----------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::DoWgIdUpkeep()
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::DoWgIdUpkeep()"));
+
+ // Do the upkeep for stand alone wg identifier
+ // If we find that the WgId of this application is same
+ // as the one stored in RProperty we know that the stand
+ // alone has crashed and we have to clear it.
+ TInt wgId( 0 );
+ TInt err( RProperty::Get( KVideoPlayerRPropertyCategory, KVideoPlayerRPropertyWGIdKey, wgId ) );
+
+ if ( wgId && !err )
+ {
+ if ( IsEmbedded() && wgId == iCoeEnv->RootWin().Identifier() )
+ {
+ // Stored wgId is ours and we are in embedded mode. Delete!
+ RProperty::Delete( KVideoPlayerRPropertyCategory,
+ KVideoPlayerRPropertyWGIdKey );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::~CMpxVideoPlayerAppUi
+// Destructor. Frees reserved resources
+// -----------------------------------------------------------------------------
+//
+CMpxVideoPlayerAppUi::~CMpxVideoPlayerAppUi()
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::~CMpxVideoPlayerAppUi()"));
+
+ // If we are running in embedded we keep the RProperty alive when exiting.
+ if ( ! IsEmbedded() )
+ {
+ RProperty::Delete( KVideoPlayerRPropertyCategory,
+ KVideoPlayerRPropertyWGIdKey );
+ }
+
+ delete iAppUiEngine;
+}
+
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::HandleExit
+// Handles exit command
+// -----------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::HandleExit()
+{
+ Exit();
+}
+
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::ProcessCommandParametersL
+// From CEikAppUi, called from plugin when remind occurs and MpxVideoPlayer is not
+// exist
+// -----------------------------------------------------------------------------
+//
+TBool CMpxVideoPlayerAppUi::ProcessCommandParametersL( TApaCommand aCommand,
+ TFileName& aDocumentName,
+ const TDesC8& aTail )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::ProcessCommandParametersL()"),
+ _L("aCommand = %d"), aCommand );
+
+
+ return iAppUiEngine->ProcessCommandParametersL( aCommand, aDocumentName, aTail );
+}
+
+// ---------------------------------------------------------------------------
+// From CEikAppUi.
+// Handle window server events.
+// ---------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination )
+{
+ TInt eventType = aEvent.Type();
+ if ( eventType == KAknUidValueEndKeyCloseEvent // End Call key
+ || eventType == KAknShutOrHideApp ) // Exit cmd from Task Switcher
+ {
+ MPX_DEBUG(_L("CMpxVideoPlayerAppUi::HandleWsEventL() Closed by framework"));
+
+ iEndKeyExit = ETrue;
+ iAppUiEngine->PrepareCloseMpxL();
+ }
+
+ CAknAppUi::HandleWsEventL( aEvent, aDestination );
+}
+
+// -----------------------------------------------------------------------------
+// CMpxVideoPlayerAppUi::HandleCommandL
+// -----------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::HandleCommandL( TInt aCommand )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::HandleCommandL()"),
+ _L("aCommand = %d"), aCommand );
+
+ switch ( aCommand )
+ {
+ case EEikCmdExit: // fall through
+ case EAknCmdExit:
+ {
+ MPX_DEBUG(_L("CMpxVideoPlayerAppUi::HandleCommandL() - Exit"));
+
+ iAppUiEngine->PrepareCloseMpxL();
+
+ //
+ // Send message to matrix menu on a stand alone instance if:
+ // 1) End Key is pressed
+ // 2) Exit command has been issued
+ //
+ if ( ! IsEmbedded() && ( ! iEndKeyExit && iAppUiEngine->ExitToMatrixMenu() ) )
+ {
+ LaunchMmViewL( KVcxVideoSuiteExitMessage );
+ }
+
+ HandleExit();
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ iAppUiEngine->HandleSoftKeyBackL();
+ break;
+ }
+ case EAknCmdHelp:
+ {
+ MPX_DEBUG(_L("CMpxVideoPlayerAppUi::HandleCommandL() - Help"));
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), AppHelpContextL() );
+ break;
+ }
+ case EAknCmdHideInBackground:
+ {
+ iAppUiEngine->ClearPdlInformation();
+ break;
+ }
+ default:
+ {
+ // do nothing if the command is not reconized
+ break;
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Querying whether the application is launched in embedded mode or not.
+// ---------------------------------------------------------------------------
+//
+TBool CMpxVideoPlayerAppUi::IsEmbedded() const
+{
+ TBool embedded = iEikonEnv->StartedAsServerApp();
+
+ MPX_DEBUG(_L("CMpxVideoPlayerAppUi::IsEmbedded(%d)"), embedded );
+
+ return embedded;
+}
+
+// ---------------------------------------------------------------------------
+// Opens the specified file in response to a corresponding message.
+// ---------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::OpenFileL( RFile& aFile, const CAiwGenericParamList* aParams )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::OpenFileL(RFile)"));
+
+ MPX_TRAPD( err, iAppUiEngine->OpenFileL( aFile, aParams ) );
+
+ //
+ // Cancel comes from a Cancel on the Select AP dialog
+ // Perform a softkey back
+ //
+ if ( err )
+ {
+ if ( err == KErrCancel )
+ {
+ // if the app is launched in embedded mode (view history depth would be zero)
+ // we close the app using the softkey back, if it was launched by a active view
+ // we stay in that view.
+ if ( iAppUiEngine->ViewHistoryDepth() <= 0 )
+ {
+ MPX_TRAPD( error, HandleCommandL( EAknSoftkeyBack ) );
+ }
+ }
+ else
+ {
+ User::Leave( err );
+ }
+ }
+
+ aFile.Close();
+}
+
+// ---------------------------------------------------------------------------
+// From CEikAppUi.
+// Opens the specified file
+// ---------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::OpenFileL( const TDesC& aFileName )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::OpenFileL()"),
+ _L("aFileName = %S"), &aFileName );
+
+ MPX_TRAPD( err, iAppUiEngine->OpenFileL( aFileName ) );
+
+ //
+ // Cancel comes from a Cancel on the Select AP dialog
+ // Perform a softkey back
+ //
+ if ( err )
+ {
+ if ( err == KErrCancel )
+ {
+ // if the app is launched in embedded mode (view history depth would be zero)
+ // we close the app using the softkey back, if it was launched by a active view
+ // we stay in that view.
+ if ( iAppUiEngine->ViewHistoryDepth() <= 0 )
+ {
+ MPX_TRAPD( error, HandleCommandL( EAknSoftkeyBack ) );
+ }
+ }
+ else
+ {
+ User::Leave( err );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// From CEikAppUi
+// -----------------------------------------------------------------------------
+//
+MCoeMessageObserver::TMessageResponse
+CMpxVideoPlayerAppUi::HandleMessageL( TUint32 aClientHandleOfTargetWindowGroup,
+ TUid aMessageUid,
+ const TDesC8& aMessageParameters )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::HandleMessageL()"));
+
+ MCoeMessageObserver::TMessageResponse ret( EMessageNotHandled );
+
+ if ( iAppUiEngine->HandleMessageL( aMessageUid, aMessageParameters ) )
+ {
+ ret = EMessageHandled;
+ }
+ else
+ {
+ ret = CAknViewAppUi::HandleMessageL( aClientHandleOfTargetWindowGroup,
+ aMessageUid,
+ aMessageParameters );
+ }
+
+ return ret;
+}
+
+// ---------------------------------------------------------------------------
+// From CCoeAppUi.
+// Handle foreground event.
+// ---------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::HandleForegroundEventL( TBool aForeground )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::HandleForegroundEventL()"),
+ _L("aForeground = %d"), aForeground );
+
+ CAknViewAppUi::HandleForegroundEventL( aForeground );
+}
+
+// ---------------------------------------------------------------------------
+// Return active view.
+// ---------------------------------------------------------------------------
+CAknView* CMpxVideoPlayerAppUi::View()
+{
+ return iView;
+}
+
+// ---------------------------------------------------------------------------
+// Sends a message to Matrix Menu
+// ---------------------------------------------------------------------------
+//
+void CMpxVideoPlayerAppUi::LaunchMmViewL( const TDesC8& aMessage )
+{
+ MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUi::LaunchMmViewL()"));
+
+ TApaTaskList taskList( iCoeEnv->WsSession() );
+ TApaTask task = taskList.FindApp( TUid::Uid( KVcxMatrixUid ) );
+
+ if ( task.Exists() )
+ {
+ //
+ // Matrix is already running in background - send APA Message
+ //
+ task.SendMessage( TUid::Uid( KUidApaMessageSwitchOpenFileValue ), aMessage );
+ }
+}
+