filemanager/aiwprovider/src/filemanageraiwprovider.cpp
branchRCL_3
changeset 20 491b3ed49290
parent 19 95243422089a
child 21 65326cf895ed
--- a/filemanager/aiwprovider/src/filemanageraiwprovider.cpp	Thu Aug 19 09:42:45 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,443 +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:  This class offers AIW services
-*
-*/
-
-
-#include <e32std.h>
-#include <ecom/implementationproxy.h>
-#include <w32std.h>
-#include <apgtask.h>
-#include <apgcli.h>
-#include <apgwgnam.h>
-#include <apacmdln.h>
-#include <centralrepository.h>
-#include "FileManagerDebug.h"
-#include "FileManagerPrivateCRKeys.h"
-#include "filemanageraiwprovider.h"
-#include "FileManagerUID.h"
-
-const TImplementationProxy ImplementationTable[] =
-    {
-    IMPLEMENTATION_PROXY_ENTRY( 0x200110F9, CFileManagerAiwProvider::NewL )
-    };
-const TUid KUidDefaultFileManager = { KFileManagerUID3 };
-const TInt KMaxSortMethodStr = 20;
-_LIT( KRootMatch, "?:\\" );
-
-
-// ======== LOCAL FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// FindStandaloneAppL
-// ---------------------------------------------------------------------------
-//
-static TBool FindStandaloneAppL(
-        RWsSession& aWs, const TUid& aUid, TInt& aWgId )
-    {
-    FUNC_LOG;
-
-    aWgId = 0; // Used window group id is always greater than zero
-    RArray< RWsSession::TWindowGroupChainInfo > windowChain;
-    User::LeaveIfError( aWs.WindowGroupList( &windowChain ) );
-    CleanupClosePushL( windowChain );
-    TInt count( windowChain.Count() );
-    for( TInt i( 0 ); i < count; ++i )
-        {
-        const RWsSession::TWindowGroupChainInfo& entry( windowChain[ i ] );
-        CApaWindowGroupName* app = CApaWindowGroupName::NewLC(
-            aWs, entry.iId );
-        TUid appUid( app->AppUid() );
-        CleanupStack::PopAndDestroy( app );
-        // Match the app's UID and the embedded status.
-        // The app is standalone when there is no parent window group.
-        if ( appUid == aUid && entry.iParentId <= 0 )
-            {
-            // Standalone application found
-            aWgId = entry.iId;
-            break;
-            }
-        }
-    CleanupStack::PopAndDestroy( &windowChain );
-    return aWgId > 0;
-    }
-
-// ---------------------------------------------------------------------------
-// IsValidFolderToOpenPath
-// ---------------------------------------------------------------------------
-//
-static TBool IsValidFolderToOpenPath( const TDesC& aFullPath )
-    {
-    FUNC_LOG;
-
-    TInt len( aFullPath.Length() );
-    if ( !len )
-        {
-        return ETrue; // Allow empty to open main view
-        }
-    // Check that at least root folder exists
-    if ( aFullPath.Left( KRootMatch().Length() ).MatchF(
-            KRootMatch ) == KErrNotFound )
-        {
-        return EFalse;
-        }
-    return ETrue;
-    }
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::CFileManagerAiwProvider
-// ---------------------------------------------------------------------------
-//
-CFileManagerAiwProvider::CFileManagerAiwProvider()
-    {
-    FUNC_LOG;
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::NewL
-// ---------------------------------------------------------------------------
-//
-CFileManagerAiwProvider* CFileManagerAiwProvider::NewL()
-    {
-    FUNC_LOG;
-
-    return new ( ELeave ) CFileManagerAiwProvider();
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::~CFileManagerAiwProvider
-// ---------------------------------------------------------------------------
-//
-CFileManagerAiwProvider::~CFileManagerAiwProvider()
-    {
-    FUNC_LOG;
-
-    delete iService;
-    delete iInParamList;
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::InitialiseL
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::InitialiseL(
-        MAiwNotifyCallback& /*aFrameworkCallback*/,
-        const RCriteriaArray& /*aInterest*/ )
-    {
-    FUNC_LOG;
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::HandleServiceCmdL
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::HandleServiceCmdL(
-        const TInt& aCmdId,
-        const CAiwGenericParamList& aInParamList,
-        CAiwGenericParamList& /*aOutParamList*/,
-        TUint /*aCmdOptions*/,
-        const MAiwNotifyCallback* aCallback )
-    {
-    FUNC_LOG;
-
-    INFO_LOG2(
-        "CFileManagerAiwProvider::HandleServiceCmdL-aCmdId=%d,aCallback=0x%x",
-        aCmdId, aCallback );
-
-    TInt err( KErrNone );
-    switch ( aCmdId )
-        {
-        case KAiwCmdEdit:
-            {
-            TRAP( err, CmdEditL( aInParamList, aCallback ) );
-            break;
-            }
-        default:
-            {
-            ERROR_LOG1(
-                "CFileManagerAiwProvider::HandleServiceCmdL-InvalidCmd=%d",
-                aCmdId );
-            break;
-            }
-        }
-    LOG_IF_ERROR2(
-        err,
-        "CFileManagerAiwProvider::HandleServiceCmdL-aCmdId=%d-err=%d",
-        aCmdId, err );
-    User::LeaveIfError( err );
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::HandleServerAppExit
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::HandleServerAppExit( TInt /*aReason*/ )
-    {
-    FUNC_LOG;
-
-    TRAP_IGNORE( NotifyL( KAiwEventCompleted ) );
-    iCallback = NULL; // No notifications are needed after app exit
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::CmdEditL
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::CmdEditL(
-        const CAiwGenericParamList& aInParamList,
-        const MAiwNotifyCallback* aCallback )
-    {
-    FUNC_LOG;
-
-    iCmd = KAiwCmdEdit;
-    if ( IsFolderToOpenPathGiven( aInParamList ) )
-        {
-        if ( IsStandaloneLaunch( aInParamList ) )
-            {
-            LaunchStandaloneL( aInParamList );
-            }
-        else
-            {
-            LaunchEmbeddedL( aInParamList, aCallback );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::NotifyL
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::NotifyL( TInt aEvent )
-    {
-    FUNC_LOG;
-
-    if ( iCallback && iInParamList )
-        {
-        CAiwGenericParamList* eventParamList = CAiwGenericParamList::NewL();
-        CleanupStack::PushL( eventParamList );
-        // Must cast this because of AIW design error
-        const_cast< MAiwNotifyCallback* >( iCallback )->HandleNotifyL(
-    	    iCmd, aEvent, *eventParamList, *iInParamList );
-        CleanupStack::PopAndDestroy( eventParamList );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::GetAppUidL
-// ---------------------------------------------------------------------------
-//
-TUid CFileManagerAiwProvider::GetAppUidL()
-    {
-    FUNC_LOG;
-
-    CRepository* cenRep = CRepository::NewLC( KCRUidFileManagerSettings );
-    TInt uid( 0 );
-    User::LeaveIfError( cenRep->Get( KFileManagerAppUidForAiwService, uid ) );
-    CleanupStack::PopAndDestroy( cenRep );
-    return TUid::Uid( uid );
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::GetAppUid
-// ---------------------------------------------------------------------------
-//
-TUid CFileManagerAiwProvider::GetAppUid()
-    {
-    FUNC_LOG;
-
-    if ( !iAppUid.iUid )
-        {
-        // Read the application to start from CenRep
-        TRAPD( err, iAppUid = GetAppUidL() );
-        if ( err != KErrNone || !iAppUid.iUid )
-            {
-            // Use the default application
-            iAppUid = KUidDefaultFileManager;
-            }
-        ERROR_LOG1(
-            "CFileManagerAiwProvider::GetAppUid-Uid=0x%x", iAppUid.iUid );
-        }
-    return iAppUid;
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::LaunchEmbeddedL
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::LaunchEmbeddedL(
-        const CAiwGenericParamList& aInParamList,
-        const MAiwNotifyCallback* aCallback )
-    {
-    FUNC_LOG;
-
-    delete iService;
-    iService = NULL;
-    delete iInParamList;
-    iInParamList = NULL;
-    iCallback = NULL;
-
-    // Copy the input params for the launcher and then do the launch
-    iInParamList = CAiwGenericParamList::NewL();
-    TInt count( aInParamList.Count() );
-    for( TInt i( 0 ); i < count; ++i )
-        {
-        iInParamList->AppendL( aInParamList[ i ] );
-        }
-    iService = CAknLaunchAppService::NewL( GetAppUid(), this, iInParamList );
-    iCallback = aCallback;
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::IsStandaloneLaunch
-// ---------------------------------------------------------------------------
-//
-TBool CFileManagerAiwProvider::IsStandaloneLaunch(
-        const CAiwGenericParamList& aInParamList )
-    {
-    FUNC_LOG;
-
-    TBool ret( EFalse );
-    TInt i( 0 );
-    // Get sort method first
-    const TAiwGenericParam* param = aInParamList.FindFirst(
-        i, EGenericParamDir, EVariantTypeTInt32 );
-    if ( i != KErrNotFound && param )
-        {
-        // Then, check if standalone is requested
-        param = aInParamList.FindNext( i, EGenericParamDir, EVariantTypeTInt32 );
-        if ( i != KErrNotFound && param )
-            {
-            ret = param->Value().AsTInt32();
-            }
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::LaunchStandaloneL
-// ---------------------------------------------------------------------------
-//
-void CFileManagerAiwProvider::LaunchStandaloneL(
-        const CAiwGenericParamList& aInParamList )
-    {
-    FUNC_LOG;
-
-    TPtrC folderToOpen( KNullDesC );
-    TInt sortMethod( KErrNotFound );
-    TInt i( 0 );
-    // Get folder path
-    const TAiwGenericParam* param = aInParamList.FindFirst(
-        i, EGenericParamDir, EVariantTypeDesC );
-    if ( i != KErrNotFound && param )
-        {
-        folderToOpen.Set( param->Value().AsDes() );
-        }
-    // Get sort method
-    param = aInParamList.FindFirst( i, EGenericParamDir, EVariantTypeTInt32 );
-    if ( i != KErrNotFound && param )
-        {
-        sortMethod = param->Value().AsTInt32();
-        }
-
-    RWsSession wsSession;
-    User::LeaveIfError( wsSession.Connect() );
-    CleanupClosePushL( wsSession );
-    TInt wgId( 0 );
-    TUid appUid( GetAppUid() );
-    if ( FindStandaloneAppL( wsSession, appUid, wgId ) )
-        {
-        // Bring the existing standalone app to foreground
-        TApaTask apaTask( wsSession );
-        apaTask.SetWgId( wgId );
-        apaTask.BringToForeground();
-        }
-    else
-        {
-        // Start new standalone app
-        TApaAppInfo appInfo;
-        RApaLsSession apaLsSession;
-        User::LeaveIfError( apaLsSession.Connect() );
-        CleanupClosePushL( apaLsSession );
-        User::LeaveIfError( apaLsSession.GetAppInfo( appInfo, appUid ) );
-        CApaCommandLine* apaCmdLine = CApaCommandLine::NewLC();
-        apaCmdLine->SetExecutableNameL( appInfo.iFullName );
-        apaCmdLine->SetCommandL( EApaCommandOpen );
-        apaCmdLine->SetDocumentNameL( folderToOpen );
-        if ( sortMethod != KErrNotFound )
-            {
-            TBuf8< KMaxSortMethodStr > sortMethodStr;
-            sortMethodStr.AppendNum( sortMethod );
-            apaCmdLine->SetTailEndL( sortMethodStr );
-            }
-        TThreadId dummy;
-        User::LeaveIfError( apaLsSession.StartApp( *apaCmdLine, dummy ) );
-        CleanupStack::PopAndDestroy( apaCmdLine );
-        CleanupStack::PopAndDestroy( &apaLsSession );
-        }
-    CleanupStack::PopAndDestroy( &wsSession );
-    }
-
-// ---------------------------------------------------------------------------
-// CFileManagerAiwProvider::IsFolderToOpenPathGiven
-// ---------------------------------------------------------------------------
-//
-TBool CFileManagerAiwProvider::IsFolderToOpenPathGiven(
-        const CAiwGenericParamList& aInParamList )
-    {
-    FUNC_LOG;
-
-    TBool ret( EFalse );
-    TPtrC folderToOpen( KNullDesC );
-    TInt i( 0 );
-    // Ensure first that no files are defined, because only folder service
-    // is offered by this provider
-    const TAiwGenericParam* param = aInParamList.FindFirst(
-        i, EGenericParamFile, EVariantTypeAny );
-    if ( i == KErrNotFound )
-        {
-        // Get folder path and check it
-        i = 0;
-        param = aInParamList.FindFirst(
-            i, EGenericParamDir, EVariantTypeDesC );
-        if ( i != KErrNotFound && param )
-            {
-            folderToOpen.Set( param->Value().AsDes() );
-            ret = IsValidFolderToOpenPath( folderToOpen );
-            }
-        }
-    if ( !ret )
-        {
-        ERROR_LOG2(
-            "CFileManagerAiwProvider::IsFolderToOpenPathGiven-ret=%d,given=%S",
-            ret, &folderToOpen );
-        }
-    return ret;
-    }
-
-// ======== GLOBAL FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// ImplementationGroupProxy.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
-    {
-    FUNC_LOG;
-
-    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
-    return ImplementationTable;
-    }