localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp
branchRCL_3
changeset 40 52a167391590
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp	Wed Sep 01 12:20:40 2010 +0100
@@ -0,0 +1,615 @@
+/*
+* Copyright (c) 2002 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 FILES
+#include "obexutilsuilayer.h"
+#include "obexutilslaunchwaiter.h"
+#include "obexutilsdebug.h"
+
+#include <SecondaryDisplay/obexutilssecondarydisplayapi.h>
+#include <Obexutils.rsg>
+#include <aknnotewrappers.h>
+#include <AknGlobalConfirmationQuery.h>
+#include <eikon.rsg>
+#include <avkon.rsg>
+#include <muiu.mbg>
+
+#include <bautils.h>
+#include <featmgr.h>
+
+#include <stringresourcereader.h>
+#include <StringLoader.h>
+
+// Launching file manager related header files 
+#include <AiwServiceHandler.h> // The AIW service handler
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <AknLaunchAppService.h>  //  Used to launch file manager in embedded mode.
+#include <e32property.h> //for checking backup status
+
+//Constants
+const TInt KFileManagerUID3 = 0x101F84EB; /// File Manager application UID3
+const TInt KUiNumberOfZoomStates = 2;          // second for the mask
+const TInt KSortNumMax = 2;
+const TInt KNfcUnreadIconIndex = 10;
+const TInt KNfcReadIconIndex = 8;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::LaunchEditorApplicationOperationL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMsvOperation* TObexUtilsUiLayer::LaunchEditorApplicationOperationL( 
+	CMsvSession& aMsvSession,
+	CMsvEntry* aMessage,
+    TRequestStatus& aObserverRequestStatus )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::LaunchEditorApplicationOperationL()"));
+    CObexUtilsLaunchWaiter* waiterOperation = CObexUtilsLaunchWaiter::NewL(
+        aMsvSession,
+        aMessage, 
+        aObserverRequestStatus );
+    
+    return waiterOperation;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::LaunchEditorApplication
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsUiLayer::LaunchEditorApplicationL( CMsvEntry* /*aMessage*/,
+                                                           CMsvSession& /*aSession*/ )
+    {
+    // Obsolete
+    return KErrNotSupported;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::LaunchFileManager
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::LaunchFileManagerL( 
+     TDesC& aPath, 
+     TInt aSortMethod, 
+     TBool isEmbeddedMode )
+    {  
+    if ( isEmbeddedMode )
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() Embedded mode"));
+        
+        CAiwGenericParamList* inParams = CAiwGenericParamList::NewLC();
+        inParams->AppendL(TAiwGenericParam( EGenericParamDir, TAiwVariant( aPath ) ) );
+        inParams->AppendL(TAiwGenericParam( EGenericParamDir, TAiwVariant( aSortMethod ) ) );
+       
+        CAknLaunchAppService* launchService = CAknLaunchAppService::NewL(TUid::Uid( KFileManagerUID3 ), // Use File Manager app UID directly
+                                                                         NULL, 
+                                                                         inParams ); 
+        CleanupStack::PopAndDestroy( inParams );
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() Embedded mode completed "));
+        }
+    else
+        {
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() "));
+        TApaAppInfo appInfo;
+        RApaLsSession apaLsSession;
+        User::LeaveIfError( apaLsSession.Connect() );
+        CleanupClosePushL( apaLsSession );
+        User::LeaveIfError( apaLsSession.GetAppInfo( appInfo, TUid::Uid( KFileManagerUID3 ) ) ); // Use File Manager app UID directly
+        CApaCommandLine* apaCmdLine = CApaCommandLine::NewLC();
+        apaCmdLine->SetExecutableNameL( appInfo.iFullName );
+        apaCmdLine->SetCommandL( EApaCommandOpen );
+        apaCmdLine->SetDocumentNameL( aPath );
+        TBuf8<KSortNumMax> sortMode; 
+        sortMode.AppendNum( aSortMethod );
+        apaCmdLine->SetTailEndL( sortMode );
+        TThreadId dummy;
+        User::LeaveIfError( apaLsSession.StartApp( *apaCmdLine, dummy ) );
+        CleanupStack::PopAndDestroy( apaCmdLine );
+        CleanupStack::PopAndDestroy( &apaLsSession ); 
+        FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchFileManager() standalone mode completed "));
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexUtilsMessageHandler::LaunchEditorApplication
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::LaunchEditorApplicationL (TMsvId& aMsvIdParent)
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchEditorApplication() "));
+    CDummySessionObserver* sessionObs = new( ELeave )CDummySessionObserver;
+    CleanupStack::PushL( sessionObs );  //1st push
+    CMsvSession* msvSession = CMsvSession::OpenSyncL( *sessionObs ); 
+    CleanupStack::PushL( msvSession );  //2nd push
+    
+    // 1st, 2nd push?
+    CMsvEntry* parentEntry = msvSession->GetEntryL(aMsvIdParent);
+    CleanupStack::PushL(parentEntry);  // 3th push    
+    
+    TRequestStatus status = KRequestPending;
+    CObexUtilsLaunchWaiter* waiterOperation = CObexUtilsLaunchWaiter::NewL(
+                                                                    *msvSession,
+                                                                    parentEntry,
+                                                                    status);
+    CleanupStack::PopAndDestroy(3); // parentEntry, sessionObs, msvSession
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsMessageHandler::LaunchEditorApplication() completed "));         
+    }
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowErrorNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ShowErrorNoteL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowErrorNoteL()"));
+
+    TBuf<KObexUtilsMaxChar> textdata;
+    ReadResourceL( textdata, aResourceID );
+    
+    CAknErrorNote* note = new( ELeave )CAknErrorNote( ETrue );
+    CleanupStack::PushL( note );
+    PrepareDialogExecuteL( aResourceID, note );
+    CleanupStack::Pop( note );
+    note->ExecuteLD( textdata );
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowErrorNoteL() completed"));
+
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowInformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ShowInformationNoteL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowInformationNoteL()"));
+
+    TBuf<KObexUtilsMaxChar> textdata;
+    ReadResourceL( textdata, aResourceID );
+
+    CAknInformationNote* note = new( ELeave )CAknInformationNote;
+    CleanupStack::PushL( note );
+    PrepareDialogExecuteL( aResourceID, note );
+    CleanupStack::Pop( note );
+    note->ExecuteLD( textdata );
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowInformationNoteL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowGlobalInformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ShowGlobalConfirmationQueryL( const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowGlobalInformationNoteL()"));
+
+    TBuf<KObexUtilsMaxChar> textdata;
+    TRequestStatus status;    
+    
+    ReadResourceL( textdata, aResourceID );    	    
+    CAknGlobalConfirmationQuery* note = CAknGlobalConfirmationQuery::NewLC();        
+    
+    status=KRequestPending;
+    note->ShowConfirmationQueryL(status,
+                                textdata, 
+                                R_AVKON_SOFTKEYS_OK_EMPTY, 
+                                R_QGN_NOTE_ERROR_ANIM,KNullDesC,
+                                0,
+                                0,
+                                CAknQueryDialog::EErrorTone
+                                );    
+    User::WaitForRequest(status);
+    
+    CleanupStack::PopAndDestroy(note );    
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ShowGlobalInformationNoteL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL( const TInt& aResourceID)
+    {
+    CAknGlobalConfirmationQuery* pQ = CAknGlobalConfirmationQuery::NewL();
+    CleanupStack::PushL(pQ);
+    HBufC* stringholder = NULL;
+    stringholder = StringLoader::LoadLC( aResourceID);
+    TRequestStatus status = KRequestPending;
+    pQ->ShowConfirmationQueryL(status,*stringholder,R_AVKON_SOFTKEYS_YES_NO);
+    User::WaitForRequest(status);
+    CleanupStack::PopAndDestroy(2);//PQ and Stringholder
+    return (status.Int() == EAknSoftkeyYes);        
+    }
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ShowGlobalFileOpenConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TObexUtilsUiLayer::ShowGlobalFileOpenConfirmationQueryL( const TInt& aResourceID, const TDesC& aFilePath)
+    {
+    // Read string from resource file
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    
+    CStringResourceReader* stringResourceReader = CStringResourceReader::NewL(fileName);
+    CleanupStack::PushL(stringResourceReader);
+    const TDesC& resString = stringResourceReader->ReadResourceString(aResourceID);
+    RBuf manipString;
+    manipString.Assign(resString.AllocL());
+    CleanupStack::PopAndDestroy(stringResourceReader);
+    manipString.CleanupClosePushL();
+    
+    // Remove bracket section
+    _LIT(KPrefix, "[");
+    _LIT(KSuffix, "]");
+    TInt prefixPos = manipString.Find(KPrefix); 
+    if (prefixPos != KErrNotFound)
+        {
+        TInt keyLength = 0;
+        TInt suffixPos = manipString.Find(KSuffix); 
+        keyLength = (manipString.Mid(prefixPos)).Length()-(manipString.Mid(suffixPos)).Length()+1;
+        manipString.Delete(prefixPos, keyLength);  
+        }
+    
+    // Replace "%U" string parameter with file path
+    _LIT(KString, "%U");
+    TInt replacePos = manipString.Find(KString); 
+    if( replacePos == KErrNotFound )
+        {
+        User::Leave(KErrNotFound);
+        }
+    const TInt minRequiredSize = manipString.Length() - KString().Length() + aFilePath.Length();
+    // ensure that the buffer is big enough (otherwise re-alloc)
+    if(manipString.MaxLength() < minRequiredSize)
+        {
+        manipString.ReAllocL(minRequiredSize);
+        }
+    manipString.Replace(replacePos, KString().Length(), aFilePath);
+    
+    // Initiate query dialog
+    TRequestStatus status = KRequestPending;
+    
+    CAknGlobalConfirmationQuery* pQ = CAknGlobalConfirmationQuery::NewL();
+    CleanupStack::PushL(pQ);
+    pQ->ShowConfirmationQueryL(status, manipString, R_AVKON_SOFTKEYS_YES_NO);
+    User::WaitForRequest(status);
+    CleanupStack::PopAndDestroy(2, &manipString); // pQ, manipString
+    return (status.Int() == EAknSoftkeyYes);
+    }
+
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ReadResourceL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::ReadResourceL( TDes& aBuf, const TInt& aResourceID )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ReadResourceL()"));
+
+    RFs fileSession;
+    CleanupClosePushL<RFs>( fileSession );
+    User::LeaveIfError( fileSession.Connect() );
+    
+    TFileName fileName;
+    fileName += KObexUtilsFileDrive;
+    fileName += KDC_RESOURCE_FILES_DIR;
+    fileName += KObexUtilsResourceFileName;
+    
+    BaflUtils::NearestLanguageFile( fileSession, fileName );
+    
+    RResourceFile resourcefile;
+    CleanupClosePushL<RResourceFile>( resourcefile );
+    resourcefile.OpenL( fileSession, fileName );
+    resourcefile.ConfirmSignatureL( 0 );
+    HBufC8* readBuffer = resourcefile.AllocReadLC( aResourceID );
+    
+    const TPtrC16 ptrReadBuffer( (TText16*) readBuffer->Ptr(),( readBuffer->Length() + 1 ) >> 1 ); 
+    HBufC16* textBuffer=HBufC16::NewLC( ptrReadBuffer.Length() );
+    *textBuffer = ptrReadBuffer;
+    aBuf.Copy( *textBuffer );
+
+    CleanupStack::PopAndDestroy( 4 ); // textBuffer, fileSession, resourcefile, readBuffer
+    
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ReadResourceL() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::OperationNotSupported
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsUiLayer::OperationNotSupported()
+    {
+    return R_EIK_TBUF_NOT_AVAILABLE;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ContextIcon
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt TObexUtilsUiLayer::ContextIcon( const TMsvEntry& aContext, TContextMedia aMedia )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ContextIcon()"));
+
+    TInt icon = 0;
+    if( aMedia == EBluetooth )
+        {
+        if( aContext.Unread() )
+            {
+            icon = EMbmMuiuQgn_prop_mce_bt_unread - EMbmMuiuQgn_prop_mce_ir_unread;
+            }
+        else
+            {
+            icon = EMbmMuiuQgn_prop_mce_bt_read - EMbmMuiuQgn_prop_mce_ir_unread;
+            }
+        }
+    else if( aMedia == EInfrared )
+        {
+        if( aContext.Unread() )
+            {
+            icon = 0;
+            }
+        else
+            {
+            icon = EMbmMuiuQgn_prop_mce_ir_read - EMbmMuiuQgn_prop_mce_ir_unread;
+            }
+        }
+    else if( aMedia == ENfc )
+        {
+        if( aContext.Unread() )
+            {
+            icon = KNfcUnreadIconIndex;
+            }
+        else
+            {
+            icon = KNfcReadIconIndex;
+            }
+        }
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::ContextIcon() completed"));
+
+    return icon;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::UpdateBitmaps
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::UpdateBitmaps( TUid aMedia, 
+    TInt& aNumberOfZoomStates, TFileName& aBitmapFile, TInt& aStartBitmap, 
+    TInt& aEndBitmap )
+    {
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::UpdateBitmaps()"));
+
+    aBitmapFile = KCommonUiBitmapFile;
+    aNumberOfZoomStates = KUiNumberOfZoomStates;
+    if( aMedia == KUidMsgTypeBt )
+        {
+        aStartBitmap = EMbmMuiuQgn_prop_mce_ir_unread;
+        aEndBitmap = EMbmMuiuQgn_prop_mce_bt_read_mask;
+        }
+    else
+        {
+        aStartBitmap = EMbmMuiuQgn_prop_mce_ir_unread;
+        aEndBitmap = EMbmMuiuQgn_prop_mce_bt_unread_mask;
+        }
+
+    FLOG(_L("[OBEXUTILS]\t TObexUtilsUiLayer::UpdateBitmaps() completed"));
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::DeleteCBitMapArray
+// -----------------------------------------------------------------------------
+//
+inline void DeleteCBitMapArray(TAny* aPtr)
+    {
+    if (aPtr) 
+        {
+        TObexUtilsUiLayer::CBitmapArray* array =
+            reinterpret_cast<TObexUtilsUiLayer::CBitmapArray*>(aPtr);    
+        array->ResetAndDestroy();
+        delete array;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::CreateAndAppendBitmapL
+// -----------------------------------------------------------------------------
+//
+void CreateAndAppendBitmapL(const TAknsItemID&          aID,
+                            const TInt                  aFileBitmapId,
+                            CArrayPtr<TObexUtilsUiLayer::CBitmapArray>* aIconArrays     )
+    {
+    TFileName muiubmpFilename;
+    muiubmpFilename += KObexUtilsFileDrive;
+    muiubmpFilename += KDC_APP_BITMAP_DIR;
+    muiubmpFilename += KCommonUiBitmapFile;
+
+    TObexUtilsUiLayer::CBitmapArray* array=NULL;
+    array=new(ELeave) CArrayPtrFlat<CFbsBitmap>(KUiNumberOfZoomStates);
+    CleanupStack::PushL(TCleanupItem(DeleteCBitMapArray, array));
+
+    CFbsBitmap* bitmap=0, *mask=0;
+    
+    //Can not use CreateIconLC since the order in which bitmap and mask are pushed into Cleanup Stack is undefined.
+    AknsUtils::CreateIconL(
+        AknsUtils::SkinInstance(),
+        aID,
+        bitmap,
+        mask,
+        muiubmpFilename,
+        aFileBitmapId,
+        aFileBitmapId+1);
+    CleanupStack::PushL(mask);
+    CleanupStack::PushL(bitmap);
+
+    // warning: bmp is deleted by the array CleanupItem. Immediately Pop or risk double deletion upon a Leave.
+    array->AppendL(bitmap);
+    CleanupStack::Pop(bitmap);
+
+    // warning: bmp is deleted by the array CleanupItem. Immediately Pop or risk double deletion upon a Leave.
+    array->AppendL(mask);
+    CleanupStack::Pop(mask);
+
+    aIconArrays->AppendL(array);
+    CleanupStack::Pop(array);
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::CreateIconsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TObexUtilsUiLayer::CreateIconsL(
+    TUid aMedia,
+    CArrayPtr<TObexUtilsUiLayer::CBitmapArray>* aIconArrays )
+    {
+    if( aMedia == KUidMsgTypeBt ) //Bluetooth 
+        {
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrUnread,
+            EMbmMuiuQgn_prop_mce_ir_unread,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrRead,
+            EMbmMuiuQgn_prop_mce_ir_read,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceBtUnread,
+            EMbmMuiuQgn_prop_mce_bt_unread,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceBtRead,
+            EMbmMuiuQgn_prop_mce_bt_read,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceNfcRead,
+            0,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceNfcUnread,
+            0,
+            aIconArrays);        
+        }
+    else //Infrared
+        {
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrUnread,
+            EMbmMuiuQgn_prop_mce_ir_unread,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceIrRead,
+            EMbmMuiuQgn_prop_mce_ir_read,
+            aIconArrays);
+        CreateAndAppendBitmapL(
+            KAknsIIDQgnPropMceBtUnread,
+            EMbmMuiuQgn_prop_mce_bt_unread,
+            aIconArrays);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::IsBackupRunning
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool TObexUtilsUiLayer::IsBackupRunning()
+    {
+    const TUint32 KFileManagerBkupStatus = 0x00000001;
+    
+    TInt status = EFileManagerBkupStatusUnset;
+    TBool retValue = EFalse;
+    TInt err = RProperty::Get( TUid::Uid(KFileManagerUID3), KFileManagerBkupStatus,
+                              status );
+    if ( err == KErrNone )
+        {
+        if ( status == EFileManagerBkupStatusBackup || 
+             status == EFileManagerBkupStatusRestore )
+            {
+            TSecureId fileManagerSecureId( KFileManagerUID3 );
+            //only returning ETrue if backup process is still active
+            retValue = ProcessExists( fileManagerSecureId );
+            }
+        }
+   
+    return retValue;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::PrepareDialogExecuteL
+// -----------------------------------------------------------------------------
+//
+void TObexUtilsUiLayer::PrepareDialogExecuteL( const TInt& aResourceID, CEikDialog* aDialog )
+    {
+    if (IsCoverDisplayL())
+        {
+        TInt dialogIndex =
+            ((aResourceID & KResourceNumberMask) - KFirstResourceOffset) + KEnumStart;
+        aDialog->PublishDialogL( dialogIndex, KObexUtilsCategory );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::IsCoverDisplayL()
+// -----------------------------------------------------------------------------
+//
+TBool TObexUtilsUiLayer::IsCoverDisplayL()
+    {
+    TBool coverDisplay = EFalse;
+	FeatureManager::InitializeLibL();
+	if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) )
+		{
+		coverDisplay = ETrue;
+		}
+	FeatureManager::UnInitializeLib();
+    return coverDisplay;
+    }
+
+// -----------------------------------------------------------------------------
+// TObexUtilsUiLayer::ProcessExists
+// -----------------------------------------------------------------------------
+//
+TBool TObexUtilsUiLayer::ProcessExists( const TSecureId& aSecureId )
+    {
+    _LIT( KFindPattern, "*" );
+    TFindProcess finder(KFindPattern);
+    TFullName processName;
+    while( finder.Next( processName ) == KErrNone )
+        {
+        RProcess process;
+        if ( process.Open( processName ) == KErrNone )
+            {
+            TSecureId processId( process.SecureId() );
+            process.Close();
+            if( processId == aSecureId )
+                {
+                return ETrue;
+                }
+            }
+        }
+    return EFalse;
+    }
+//  End of File