diff -r 5294c000a26d -r 112a725ff2c2 homescreenplugins/videoahlplugin/src/videoactionhandler.cpp --- a/homescreenplugins/videoahlplugin/src/videoactionhandler.cpp Mon Mar 15 12:40:47 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,461 +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 the License "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: interface class definition for action handler plugin* -*/ - - -// Version : %version: 21 % - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "videoahpluginconstants.h" -#include "videoactionhandler.h" -#include "videoplayerpskeys.h" -#include "iptvlastwatcheddata.h" -#include "iptvlastwatchedapi.h" -#include "vcxhgvodtelephonyclient.h" - -// CONSTANTS -const TUid KUidMPXVideoPlayerApp = { 0x200159B2 }; -const TUid KUidMediaSettingsApp = { 0x10005A3F }; - -_LIT8( KKeyMessage, "message" ); -_LIT8( KKeyMessageData, "message_data" ); - -// Constants for wg name. Used to identify if wg is actually ours. -_LIT( KVideoPlayerWgName, "*200159b2*"); -const TUint KVideoPlayerWgNameSize = 50; - -// ======== MEMBER FUNCTIONS ======== - -// ---------------------------------------------------------------------------- -// CVideoActionHandler::ConstructL -// ---------------------------------------------------------------------------- -// -void CVideoActionHandler::ConstructL() - { - iMediatorEventProvider = CMediatorEventProvider::NewL(); - } - -// ---------------------------------------------------------------------------- -// CVideoActionHandler::NewL -// ---------------------------------------------------------------------------- -// -CVideoActionHandler* CVideoActionHandler::NewL() - { - CVideoActionHandler* self = CVideoActionHandler::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// ---------------------------------------------------------------------------- -// CVideoActionHandler::NewLC -// ---------------------------------------------------------------------------- -// -CVideoActionHandler* CVideoActionHandler::NewLC() - { - CVideoActionHandler* self = new( ELeave ) CVideoActionHandler; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::~CVideoActionHandler -// --------------------------------------------------------------------------- -CVideoActionHandler::~CVideoActionHandler() - { - delete iMediatorEventProvider; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::ExecuteActionL -// Executes provided action -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::ExecuteActionL( const CLiwMap* aMap ) - { - TInt errCode( KErrNotFound ); - - TVideoPlayerActivationMessage* activationMsg = new( ELeave ) TVideoPlayerActivationMessage; - CleanupStack::PushL( activationMsg ); - - errCode = PrepareMessageL( aMap, *activationMsg ); - if( KErrNone == errCode ) - { - errCode = StartAppL( *activationMsg ); - } - CleanupStack::PopAndDestroy( activationMsg ); - - return errCode; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::PrepareMessageL -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::PrepareMessageL( const CLiwMap* aMap, - TVideoPlayerActivationMessage& aActivationMsg ) - { - TInt err( KErrNone ); - - TLiwVariant variant; - variant.PushL(); - err = ExtractVariant( aMap, variant, KKeyMessage ); - - if( err != KErrNone ) - { - CleanupStack::PopAndDestroy( &variant ); - return err; - } - - TPtrC message = variant.AsDes(); - - - aActivationMsg.iServiceId = 0; - aActivationMsg.iFileId = 0; - aActivationMsg.iDrive = 0; - aActivationMsg.iMsgSender = TVideoPlayerActivationMessage::EMatrixMenu; - - if ( !message.CompareF( KVcxNsExtLaunchVideoCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::ELaunchVideoToPlayer; - TLiwVariant variantData; - variantData.PushL(); - err = ExtractVariant( aMap, variantData, KKeyMessageData ); - - if( err == KErrNone ) - { - TPtrC data = variantData.AsDes(); - aActivationMsg.iFullPath = data; - } - else if( err == KErrNotFound ) - { - err = KErrNone; - } - CleanupStack::PopAndDestroy( &variantData ); - } - else if ( !message.CompareF( KVcxNsExtLaunchLastWatchedCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::ELaunchVideoToPlayer; - LoadLwDataL( aActivationMsg ); - } - else if ( !message.CompareF( KVcxNsExtOpenStorageCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::EOpenVideoStorage; - } - else if ( !message.CompareF( KVcxNsExtInternetVideoCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::EOpenInternetVideos; - } - else if ( !message.CompareF( KVcxNsExtServiceCatalCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::EOpenServiceCatalogue; - } - else if ( !message.CompareF( KVcxNsExtVideoShopCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::EOpenVideoShop; - } - else if ( !message.CompareF( KVcxNsExtLaunchVCSettingsCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::EOpenVCSettings; - } - else if ( !message.CompareF( KVcxNsExtOpenLiveTVCmd ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::ELiveTVMessage; - } - else if( !message.CompareF( KVcxNsExtLaunchLiveTVLastWatch ) ) - { - aActivationMsg.iMsgType = TVideoPlayerActivationMessage::ELiveTVMessageLastWatched; - } - else if( !message.CompareF( KVcxNsExtLoadTvVideoSuite ) ) - { - // If the player app is running - // in background, switch to that - TryBringVideoPlayerToForegroundL(); - - SendMediatorEvent( KVcxNsAhEventSuiteLoaded ); - // This needs cleaner way to not to execute the cmd. - err = KErrNotSupported; - } - else if ( !message.CompareF( KVcxNsExtUnloadTvVideoSuite ) ) - { - SendMediatorEvent( KVcxNsAhEventSuiteUnloaded ); - // This needs cleaner way to not to execute the cmd. - err = KErrNotSupported; - } - else - { - err = KErrNotSupported; - } - CleanupStack::PopAndDestroy( &variant ); - - return err; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::StartAppL -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::StartAppL( TVideoPlayerActivationMessage& aMessage ) - { - TInt err(KErrNone); - - // If settings are requested launch them, otherwise launch my videos - if (aMessage.iMsgType == TVideoPlayerActivationMessage::EOpenVCSettings) - { - err = LaunchMediaSettingsL( aMessage ); - } - else - { - err = LaunchMyVideosL( aMessage ); - } - - return err; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::ExtractVariant -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::ExtractVariant( const CLiwMap* aMap, - TLiwVariant& aVariant, - const TDesC8& aKeyName ) - - { - TInt errCode( KErrNone ); - TBool found( EFalse ); - TRAP( errCode, found = aMap->FindL( aKeyName, aVariant ) ); - - if ( errCode == KErrNone && !found ) - { - errCode = KErrNotFound; - } - - return errCode; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::SendMediatorEvent -// --------------------------------------------------------------------------- -// -void CVideoActionHandler::SendMediatorEvent( TInt aEvent ) - { - iMediatorEventProvider->RaiseEvent( - TUid::Uid( KVcxNsAhMediatorDomain ), - TUid::Uid( KVcxNsAhMediatorCategory ), - aEvent, - TVersion( KVcxNsAhEventVersion, 0, 0 ), - KNullDesC8() ); - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::LaunchMediaSettingsL -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::LaunchMediaSettingsL( TVideoPlayerActivationMessage& aMessage ) - { - // KIptvVodStartPlayer is not currently used. Any case we need it? - return LaunchMatrixTaskL( aMessage, KUidMediaSettingsApp, KVideoPlayerVodStartPlayer ); - } - - -// --------------------------------------------------------------------------- -// CVideoActionHandler::LaunchMyVideosL -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::LaunchMyVideosL( TVideoPlayerActivationMessage& aMessage ) - { - // KIptvVodStartPlayer is not currently used. Any case we need it? - return LaunchMatrixTaskL( aMessage, KUidMPXVideoPlayerApp, KVideoPlayerVodStartPlayer ); - } - - -// --------------------------------------------------------------------------- -// CVideoActionHandler::LaunchMatrixTaskL -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::LaunchMatrixTaskL( TVideoPlayerActivationMessage& aMessage, TUid appUID, TInt aActivationMessage ) - { - - TInt err(KErrNone); - - TPckg message(aMessage); - - RWsSession session; - User::LeaveIfError(session.Connect()); - - // check if there is existing stand alone running - TInt ourWgId( 0 ); - TInt ret( 0 ); - - // No need to check wgId if we are lauching Media Settings - if ( appUID != KUidMediaSettingsApp ) - { - ret = RProperty::Get( KVideoPlayerRPropertyCategory, KVideoPlayerRPropertyWGIdKey, ourWgId ); - } - - if( !ret ) - { - // check if the wgId is really one of our own - TBuf wgName; - session.GetWindowGroupNameFromIdentifier(ourWgId, wgName ); - if( wgName.MatchF( KVideoPlayerWgName ) == KErrNotFound ) - { - // Clear wg id, it is not ours anymore - ourWgId = 0; - } - } - - if( ourWgId != 0 ) - { - // Send message to our wg id - TUid play = TUid::Uid(aActivationMessage); - session.SetWindowGroupOrdinalPosition( ourWgId, 0 ); - err = session.SendMessageToWindowGroup( ourWgId, play, message ); - } - else - { - // No stand alone available, create new one - RApaLsSession lsSession; - err = lsSession.Connect(); - TApaAppInfo appInfo; - - if (lsSession.GetAppInfo(appInfo, appUID) == KErrNone) - { - CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); - cmdLine->SetExecutableNameL(appInfo.iFullName); - cmdLine->SetTailEndL(message); - User::LeaveIfError(lsSession.StartApp(*cmdLine)); - CleanupStack::PopAndDestroy(cmdLine); - } - else - { - err = KErrNotFound; - } - - lsSession.Close(); - } - - session.Close(); - return err; - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::LoadLwDataL -// --------------------------------------------------------------------------- -// -void CVideoActionHandler::LoadLwDataL( TVideoPlayerActivationMessage& aMessage ) - { - CIptvLastWatchedData* data = CIptvLastWatchedData::NewL(); - CleanupStack::PushL( data ); - - CIptvLastWatchedApi* lwApi = CIptvLastWatchedApi::NewL(); - CleanupStack::PushL( lwApi ); - - lwApi->GetLastWatchedDataL( *data ); - - if ( data->ParentalControl() != KVcxMyvideosCenRepParentControlKeyOff ) - { - TInt parentControlSetting( KVcxMyvideosCenRepParentControlKeyDefault ); - CRepository* rep = NULL; - TInt error; - TRAP( error, rep = CRepository::NewL( TUid::Uid( KVcxMyVideosCenRepUid ) ) ) - - if ( error == KErrNone ) - { - CleanupStack::PushL( rep ); - - error = rep->Get( KVcxMyvideosCenRepParentControlKey, parentControlSetting ); - - if ( error == KErrNone && parentControlSetting != KVcxMyvideosCenRepParentControlKeyOff ) - { - if ( static_cast( data->ParentalControl() ) >= parentControlSetting ) - { - CVcxHgVodTelephonyClient* tc = new( ELeave ) CVcxHgVodTelephonyClient(); - CleanupStack::PushL(tc); - - if ( !tc->CheckLockCodeL() ) - { - CErrorUI* eu = CErrorUI::NewLC(); - eu->ShowGlobalErrorNoteL( KErrPermissionDenied ); - CleanupStack::PopAndDestroy( eu ); - User::Leave( KErrPermissionDenied ); - } - - CleanupStack::PopAndDestroy( tc ); - } - } - CleanupStack::PopAndDestroy( rep ); - } - } - - if( data->MpxId() != KIdUndefined ) - { - aMessage.iServiceId = data->MpxId(); - aMessage.iFullPath = data->Uri(); - } - else - { - aMessage.iServiceId = 0; - aMessage.iFullPath = data->Uri(); - } - - CleanupStack::PopAndDestroy( lwApi ); - CleanupStack::PopAndDestroy( data ); - } - -// --------------------------------------------------------------------------- -// CVideoActionHandler::TryBringVideoPlayerToForegroundL -// --------------------------------------------------------------------------- -// -TInt CVideoActionHandler::TryBringVideoPlayerToForegroundL() - { - TInt ret ( KErrNotFound ); - RWsSession session; - User::LeaveIfError( session.Connect() ); - CleanupClosePushL( session ); - - TInt ourWgId( 0 ); - TInt error = RProperty::Get( KVideoPlayerRPropertyCategory, KVideoPlayerRPropertyWGIdKey, ourWgId ); - - if( error == KErrNone && ourWgId != 0 ) - { - TBuf wgName; - session.GetWindowGroupNameFromIdentifier(ourWgId, wgName ); - - if( wgName.MatchF( KVideoPlayerWgName ) != KErrNotFound ) - { - ret = session.SetWindowGroupOrdinalPosition( ourWgId, 0 ); - } - } - - CleanupStack::PopAndDestroy( &session ); - return ret; - }