--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/data/DevEncUiDmAdapter.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2005 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: Registery info for the Camera Control DM Adapter.
+*
+*/
+
+// INCLUDES
+#include <ecom/registryinfo.rh>
+#include "DevEncUids.hrh"
+//#include <smldmadapter.h> // for KSmlDMInterfaceUid
+
+// CONSTANTS
+
+// MACROS
+
+// RESOURCE DEFINITIONS
+
+//-----------------------------------------------------------------------------
+//
+// theInfo
+// -
+//
+//-----------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO theRegistryInfo
+ {
+ dll_uid = KDevEncOmaDmPluginUid; // The DLL's 3rd UID.
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = 0x102018B4; //KSmlDMInterfaceUid
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = KDevEncOmaDmPluginImplUid;
+ version_no = 1;
+ display_name = "Device Encryption DM Adapter";
+ default_data = "";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
+
+// End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/group/DevEncUiDmAdapter.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2005 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 <platform_paths.hrh>
+#include "../inc/DevEncUids.hrh"
+
+
+TARGET devencuidmadapter.dll
+TARGETTYPE PLUGIN
+CAPABILITY CAP_ECOM_PLUGIN CAP_GENERAL_DLL
+UID 0x10009D8D KDevEncOmaDmPluginUid
+VENDORID VID_DEFAULT
+LANG SC
+
+SOURCEPATH ../../common
+SOURCE DevEncLog.cpp
+SOURCEPATH ../src
+SOURCE DevEncAdapter.cpp
+SOURCE DevEncAdapterImp.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../common
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE /epoc32/include/swi
+SYSTEMINCLUDE /epoc32/include/ecom
+
+START RESOURCE ../data/DevEncUiDmAdapter.rss
+TARGET devencuidmadapter.rsc
+END
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY centralrepository.lib
+LIBRARY dmutil.lib
+STATICLIBRARY dmutils.lib
+LIBRARY charconv.lib
+LIBRARY devenccommonutils.lib
+DEBUGLIBRARY flogger.lib
+
+
+// End Of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2004 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: Provides the information required for building DevEncDmAdapter.
+*
+*/
+//#ifdef FF_NATIVE_FILE_ENCRYPTION
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// ROM files
+
+// Exported headers
+
+// Central repository files
+
+PRJ_MMPFILES
+DevEncUiDmAdapter.mmp
+
+//#endif
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/inc/DevEncAdapter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,450 @@
+/*
+* Copyright (c) 2005 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: Camera Control DM Adapter.
+*
+*/
+#ifndef __DEVENCADAPTER_H
+#define __DEVENCADAPTER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <smldmadapter.h>
+#include <centralrepository.h>
+#include <featurecontrol.h>
+#include <DevEncEngineConstants.h>
+#include <DevEncDiskUtils.h>
+#include <DevEncKeyUtils.h>
+#include <DevEncSession.h>
+
+enum TDevEncCommand
+ {
+ EDmDecrypt = 0,
+ EDmEncryptDefault,
+ EDmEncryptBackup,
+ EDmEncryptRestore
+ };
+
+
+// CLASS DECLARATION
+
+/**
+* Adapter class
+* Provides DM adapter interface
+*/
+class CDevEncAdapter : public CSmlDmAdapter
+ {
+
+ public: // Constructors, destructor
+ /**
+ * Create instance of CDevEncAdapter
+ * @param aDmCallBack
+ * @return Instance of CDevEncAdapter
+ */
+ static CDevEncAdapter* NewL( MSmlDmCallback* aDmCallback );
+
+ /**
+ * Create instance of CDevEncAdapter
+ * @param aDmCallBack
+ * @return Instance of CDevEncAdapter
+ */
+ static CDevEncAdapter* NewLC( MSmlDmCallback* aDmCallback );
+
+ /**
+ * C++ Destructor
+ */
+ virtual ~CDevEncAdapter();
+
+ public:
+ /**
+ * The function returns current version of the DDF.
+ * By asking current DDF versions from adapters DM Module can control
+ * possible changes in the data structure and send the changed DDF
+ * description to a management server.
+ * This function is always called after DDFStructureL.
+ * @param aVersion DDF version of the adapter. (filled by the adapter)
+ * @publishedPartner
+ * @prototype
+ */
+ void DDFVersionL( CBufBase& aVersion );
+
+ /**
+ * The function for filling the DDF structure of the adapter
+ * This function is only called once, immediately after the adapter is created.
+ * @param aDDFObject Reference to root object. A DM adapter starts filling
+ the data structure by calling AddChildObjectL to the root object and
+ so describes the DDF of the adapter.
+ * @publishedPartner
+ * @prototype
+ */
+ void DDFStructureL( MSmlDmDDFObject& aDDF );
+
+ /**
+ * The function creates new leaf objects, or replaces data in existing leaf
+ * objects. The information about the success of the command should be
+ * returned by calling SetStatusL function of MSmlDmCallback callback
+ * interface. This makes it possible to buffer the commands. However, all
+ * the status codes for buffered commands must be returned at the latest when
+ * the adapter's CompleteOutstandingCmdsL() is called.
+ * @param aURI URI of the object
+ * @param aLUID LUID of the object (if the adapter has earlier returned a
+ LUID to the DM Module). For new objects, this is the LUID
+ inherited through the parent node.
+ * @param aObject Data of the object.
+ * @param aType MIME type of the object
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this command
+ * @publishedPartner
+ * @prototype
+ */
+ void UpdateLeafObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aObject,
+ const TDesC8& aType,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function creates new leaf objects, or replaces data in existing leaf
+ * objects, in the case where data is large enough to be streamed. The
+ * information about the success of the command should be returned by calling
+ * SetStatusL function of MSmlDmCallback callback interface. This makes it
+ * possible to buffer the commands. However, all the status codes for buffered
+ * commands must be returned at the latest when the CompleteOutstandingCmdsL()
+ * of adapter is called.
+ * @param aURI URI of the object
+ * @param aLUID LUID of the object (if the adapter has earlier returned a
+ LUID to the DM Module). For new objects, this is the LUID
+ inherited through the parent node.
+ * @param aStream Data of the object. Adapter should create write stream
+ and return, when data is written to stream by DM agent,
+ StreamCommittedL() is called by DM engine
+ * @param aType MIME type of the object
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void UpdateLeafObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ RWriteStream*& aStream,
+ const TDesC8& aType,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function deletes an object and its child objects. The SetStatusL
+ * should be used as described in UpdateLeafObjectL()
+ * @param aURI URI of the object
+ * @param aLUID LUID of the object (if the adapter have earlier returned
+ LUID to the DM Module).
+ * @param aStatusRef Reference to correct command, i.e. this reference must
+ be used when calling the SetStatusL of this command.
+ * @publishedPartner
+ * @prototype
+ */
+ void DeleteObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function fetches data of a leaf object. The SetStatusL should be used
+ * as described in UpdateLeafObjectL(). The data is returned by using the
+ * SetResultsL function of MSmlCallback callback interface, and may be streamed.
+ * @param aURI URI of the object
+ * @param aLUID LUID of the object (if the adapter have earlier
+ returned LUID to the DM Module).
+ * @param aType MIME type of the object
+ * @param aResultsRef Reference to correct results, i.e. this reference
+ must be used when returning the result by calling
+ the SetResultsL.
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void FetchLeafObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aType,
+ TInt aResultsRef,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function fetches the size of the data of a leaf object. The size is
+ * in bytes, and must reflect the number of bytes that will be transferred
+ * when the framework calls FetchLeafObjectL. The SetStatusL should be used
+ * as described in FetchLeafObjectL(). The size value is returned by using
+ * the SetResultsL function of MSmlCallback callback interface, and must be
+ * a decimal integer expressed as a string, eg. "1234".
+ * Results from this call MUST NOT be streamed.
+ * @param aURI URI of the object
+ * @param aLUID LUID of the object (if the adapter have earlier
+ returned LUID to the DM Module).
+ * @param aType MIME type of the object
+ * @param aResultsRef Reference to correct results, i.e. this reference
+ must be used when returning the result by calling
+ the SetResultsL.
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void FetchLeafObjectSizeL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aType,
+ TInt aResultsRef,
+ TInt aStatusRef
+ );
+ /**
+ * The function fetches URI list. An adapter returns the list of URI segments
+ * under the given URI be separated by slash ("/"). The URI segment names for
+ * new objects must be given by the adapter.
+ * The list is returned by calling the SetResultsL function of MSmlCallback
+ * callback interface. Results from this call MUST NOT be streamed.
+ * @param aParentURI URI of the parent object
+ * @param aParentLUID LUID of the parent object (if the
+ adapter have earlier returned LUID to
+ the DM Module).
+ * @param aPreviousURISegmentList URI list with mapping LUID information,
+ which is known by DM engine. An adapter
+ can use this information when verifying
+ if old objects still exists. An adapter
+ also knows what objects are new to DM
+ engine and can provide LUID mapping for
+ them. aPreviousURISegmentList parameter
+ (see above) helps to recognise new
+ objects.
+ * @param aResultsRef Reference to correct results, i.e. this
+ reference must be used when returning
+ the result by calling the SetResultsL.
+ * @param aStatusRef Reference to correct command, i.e. this
+ reference must be used when calling the
+ SetStatusL of this command.
+ * @publishedPartner
+ * @prototype
+ */
+ void ChildURIListL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+ TInt aResultsRef,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function adds node object. In some cases an implementation of the
+ * function may be empty function, if the node object does not need concrete
+ * database update. Still this function may be helpful to an adapter, i.e. in
+ * passing mapping LUID of the node to DM Module. The SetStatusL should be
+ * used as described in UpdateLeafObjectL()
+ * @param aURI URI of the object
+ * @param aParentLUID LUID of the parent object (if the adapter have
+ earlier returned LUID to the DM Module).
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void AddNodeObjectL( const TDesC8& aURI,
+ const TDesC8& aParentLUID,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function implements execute command. The information about the success
+ * of the command should be returned by calling SetStatusL function of
+ * MSmlDmCallback callback interface. This makes it possible to buffer the
+ * commands.
+ * However, all the status codes for buffered commands must be returned at
+ * the latest when the CompleteOutstandingCmdsL() of adapter is called.
+ * @param aURI URI of the command
+ * @param aLUID LUID of the object (if the adapter have earlier
+ returned LUID to the DM Module).
+ * @param aArgument Argument for the command
+ * @param aType MIME type of the object
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void ExecuteCommandL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aArgument,
+ const TDesC8& aType,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function implements execute command. The information about the
+ * success of the command should be returned by calling SetStatusL function
+ * of MSmlDmCallback callback interface. This makes it possible to buffer the
+ * commands.
+ * However, all the status codes for buffered commands must be returned at
+ * the latest when the CompleteOutstandingCmdsL() of adapter is called.
+ * @param aURI URI of the command
+ * @param aLUID LUID of the object (if the adapter have earlier
+ returned LUID to the DM Module).
+ * @param aStream Argument for the command. Adapter should create
+ write stream and return, when data is written to
+ stream by DM agent, StreamCommittedL() is called by
+ DM engine
+ * @param aType MIME type of the object
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void ExecuteCommandL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ RWriteStream*& aStream,
+ const TDesC8& aType,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function implements copy command. The information about the success of
+ * the command should be returned by calling SetStatusL function of
+ * MSmlDmCallback callback interface. This makes it possible to buffer the
+ * commands.
+ * However, all the status codes for buffered commands must be returned at
+ * the latest when the CompleteOutstandingCmdsL() of adapter is called.
+ * @param aTargetURI Target URI for the command
+ * @param aSourceLUID LUID of the target object (if one exists, and if the adapter
+ has earlier returned a LUID to the DM Module).
+ * @param aSourceURI Source URI for the command
+ * @param aSourceLUID LUID of the source object (if the adapter has
+ earlier returned a LUID to the DM Module).
+ * @param aType MIME type of the objects
+ * @param aStatusRef Reference to correct command, i.e. this reference
+ must be used when calling the SetStatusL of this
+ command.
+ * @publishedPartner
+ * @prototype
+ */
+ void CopyCommandL( const TDesC8& aTargetURI,
+ const TDesC8& aTargetLUID,
+ const TDesC8& aSourceURI,
+ const TDesC8& aSourceLUID,
+ const TDesC8& aType,
+ TInt aStatusRef
+ );
+
+ /**
+ * The function indicates start of Atomic command.
+ * @publishedPartner
+ * @prototype
+ */
+ void StartAtomicL();
+
+ /**
+ * The function indicates successful end of Atomic command. The adapter
+ * should commit all changes issued between StartAtomicL() and
+ * CommitAtomicL()
+ * @publishedPartner
+ * @prototype
+ */
+ void CommitAtomicL();
+
+ /**
+ * The function indicates unsuccessful end of Atomic command. The adapter
+ * should rollback all changes issued between StartAtomicL() and
+ * RollbackAtomicL(). If rollback fails for a command, adapter should use
+ * SetStatusL() to indicate it.
+ * @publishedPartner
+ * @prototype
+ */
+ void RollbackAtomicL();
+
+ /**
+ * Returns ETrue if adapter supports streaming otherwise EFalse.
+ * @param aItemSize size limit for stream usage
+ * @return TBool ETrue for streaming support
+ * @publishedPartner
+ * @prototype
+ */
+ TBool StreamingSupport( TInt& aItemSize );
+
+ /**
+ * Called when stream returned from UpdateLeafObjectL or ExecuteCommandL has
+ * been written to and committed. Not called when fetching item.
+ * @publishedPartner
+ * @prototype
+ */
+ void StreamCommittedL();
+
+ /**
+ * The function tells the adapter that all the commands of the message that
+ * can be passed to the adapter have now been passed. This indicates that
+ * the adapter must supply status codes and results to any buffered commands.
+ * This must be done at latest by the time this function returns.
+ * This function is used at the end of SyncML messages, and during processing
+ * of Atomic. In the case of Atomic processing, the function will be
+ * followed by a call to CommitAtomicL or RollbackAtomicL.
+ * @publishedPartner
+ * @prototype
+ */
+ void CompleteOutstandingCmdsL();
+
+ private: // New methods
+ void FillNodeInfoL( MSmlDmDDFObject& aDDFObject,
+ TSmlDmAccessTypes& aAccessTypes,
+ MSmlDmDDFObject::TScope aScope,
+ MSmlDmDDFObject::TDFFormat aFormat,
+ MSmlDmDDFObject::TOccurence aOccurence,
+ const TDesC8& aDescription,
+ const TDesC8& aMIMEType );
+
+ TPtrC8 CDevEncAdapter::LastURISeg( const TDesC8& aURI );
+
+ HBufC8* CDevEncAdapter::AskPassWordL();
+
+ TBool CheckBatteryL();
+
+ private: // Constructor
+ /**
+ * Symbian 2nd phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * C++ Constructor
+ */
+ CDevEncAdapter( TAny* aEcomArguments );
+
+ private: // Data
+ CDevEncDiskUtils* iDiskUtils;
+ CDevEncKeyUtils* iKeyUtils;
+ CDevEncSession* iPhoneMemorySession;
+ CDevEncSession* iMemoryCardSession;
+ TInt iStatusRef;
+ TInt iResultRef;
+ HBufC8* iPkcs5Key;
+ CRepository* iUiCenRep;
+ TBool iPhoneMemOpPending;
+ TBool iMemCardOpPending;
+ TInt iPendingCommand;
+ RTimer iTimer;
+
+ };
+
+#endif // __CDevEncAdapter_H
+
+// End Of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/inc/DevEncUids.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2005 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: Uids of components related to Device Encryption.
+*
+*/
+#ifndef DEVENCUIUIDS_HRH
+#define DEVENCUIUIDS_HRH
+
+#define KDevEncUiUid 0x2000259A
+#define KDevEncStarterUid 0x2000259B
+#define KDevEncOmaDmPluginUid 0x200025B5
+#define KDevEncOmaDmPluginImplUid 0x200025BB
+#define KDevEncRfsPluginUid 0x200025B6
+#define KDevEncRfsPluginImplUid 0x200025BC
+#define KDevEncCommonUtilsUid 0x200025B7
+#define KDevEncNotifPluginUid 0x20002672
+#define KDevEncNotifPluginImplUid 0x20002673
+#define KDevEncPasswdDlgUid 0x20002674
+
+#define KDevEncNokiaVID 0x70000001
+
+#endif // DEVENCUIUIDS_HRH
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/sis/DevEncDmAdapter.pkg Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,39 @@
+;
+; Copyright (c) 2009 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:
+;
+; DevEncDmAdapter.pkg
+;
+;Language - standard language definitions
+&EN
+
+;Standard SIS file header (use UI application UID)
+#{"DevEncUiDmAdapter"},(0x200025B5),1,0,0
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;Files to install
+
+;----------------------------------------------------------------------------
+; Device Encryption Device Management Adapter
+;----------------------------------------------------------------------------
+"\epoc32\release\armv5\urel\DevEncUiDmAdapter.dll" -"!:\sys\bin\DevEncUiDmAdapter.dll"
+"\epoc32\data\z\resource\plugins\DevEncUiDmAdapter.rsc" -"!:\resource\plugins\DevEncUiDmAdapter.rsc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/src/DevEncAdapter.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1084 @@
+/*
+* Copyright (c) 2005 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: SW Installer DM Adapter.
+*
+*/
+
+// INCLUDE
+#include <implementationproxy.h>
+#include <smldmadapter.h>
+#include <data_caging_path_literals.hrh>
+#include <centralrepository.h>
+#include <hwrmpowerstatesdkpskeys.h> // For power state
+#include <DevEncExternalCRKeys.h>
+#include <DevEncDef.h>
+#include "DevEncLog.h"
+#include "DevEncAdapter.h"
+#include "DevEncUids.hrh"
+
+
+// CONSTANTS
+_LIT8( KIntType,"int" ); // Leaf inputs
+_LIT8( KTextType,"text/plain" ); // Leaf inputs
+_LIT8( KDevEncAdapterVersion, "1.0" ); // Adapter version
+_LIT8( KDevEncRootNode, "DevEnc" ); // root URI
+_LIT8( KPhoneMemoryCmdNode, "PhoneMemoryCmd" ); // URI postfix
+_LIT8( KMemoryCardCmdNode, "MemoryCardCmd" ); // URI postfix
+_LIT8( KPhoneMemoryStatusNode, "PhoneMemoryStatus" ); // URI postfix
+_LIT8( KMemoryCardStatusNode, "MemoryCardStatus" ); // URI postfix
+_LIT8( KMemoryCardEncKeyNode, "MemoryCardEncKey" ); // URI postfix
+_LIT8( KUIStateNode, "UIState" ); // URI postfix
+_LIT8( KPhoneMemoryProgNode, "PhoneMemoryProgress" ); // URI postfix
+_LIT8( KMemoryCardProgNode, "MemoryCardProgress" ); // URI postfix
+_LIT8( KPhoneMemoryCmdDescription, "Phone memory encryption command" ); // Description
+_LIT8( KMemoryCardCmdDescription, "Memory card encryption command" ); // Description
+_LIT8( KPhoneMemoryStatusDescription, "Phone memory encryption status" ); // Description
+_LIT8( KMemoryCardStatusDescription, "Memory card encryption status" ); // Description
+_LIT8( KMemoryCardEncKeyDescription, "Memory card encryption key" ); // Description
+_LIT8( KUIStateDescription, "State of encryption settings" ); // Description
+_LIT8( KPhoneMemoryProgDescription, "En/Decryption progress in percents (phone)" ); // Description
+_LIT8( KMemoryCardProgDescription, "En/Decryption progress in percents (memory card)" ); // Description
+_LIT8( KSeparator, "/" );
+
+static const TUint32 KSizeOfSettingId = 16; // Contanst size declaration
+static const TInt KBufGranularity = 8;
+static const TDriveNumber KPhoneMemoryDriveNum = EDriveC;
+static const TDriveNumber KMemoryCardDriveNum = EDriveF;
+static const TUid KPSCategory = { 0x101F9A02 }; // DM client SID
+static const TInt KPkcs5PSKey = KDevEncOmaDmPluginImplUid;
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::NewL
+// Symbian 1st phase contructor
+// (static, may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+CDevEncAdapter* CDevEncAdapter::NewL( MSmlDmCallback* aCallback )
+ {
+ CDevEncAdapter* self = NewLC( aCallback );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::NewLC
+// Symbian 1st phase contructor. Push object to cleanup-stack
+// (static, may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+CDevEncAdapter* CDevEncAdapter::NewLC( MSmlDmCallback* aCallback )
+ {
+ CDevEncAdapter* self = new ( ELeave ) CDevEncAdapter( aCallback );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::CDevEncAdapter()
+// C++ Constructor
+// Status : Draft
+// ----------------------------------------------------------------------------
+CDevEncAdapter::CDevEncAdapter( TAny* aEcomArguments )
+ : CSmlDmAdapter::CSmlDmAdapter( aEcomArguments ),
+ iPhoneMemOpPending( EFalse ),
+ iMemCardOpPending( EFalse )
+ {
+ DFLOG( "CDevEncAdapter Constructor" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::ConstructL
+// 2nd phase contructor
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::ConstructL()
+ {
+ DFLOG( "CDevEncAdapter::ConstructL Begin" );
+ iDiskUtils = new (ELeave) CDevEncDiskUtils();
+ iKeyUtils = new (ELeave) CDevEncKeyUtils();
+ iPhoneMemorySession = new (ELeave) CDevEncSession( KPhoneMemoryDriveNum );
+ iMemoryCardSession = new (ELeave) CDevEncSession( KMemoryCardDriveNum );
+ User::LeaveIfError(iPhoneMemorySession->Connect());
+ User::LeaveIfError(iMemoryCardSession->Connect());
+ iTimer.CreateLocal();
+ iUiCenRep = CRepository::NewL( TUid::Uid( KCRDevEncUiSettings ) );
+ DFLOG( "CDevEncAdapter::ConstructL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::~CDevEncAdapter()
+// C++ Destructor
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+CDevEncAdapter::~CDevEncAdapter()
+ {
+ DFLOG( "CDevEncAdapter Destructor Begin" );
+ if (iDiskUtils)
+ {
+ delete iDiskUtils;
+ iDiskUtils = NULL;
+ }
+
+ if (iKeyUtils)
+ {
+ delete iKeyUtils;
+ iKeyUtils = NULL;
+ }
+
+ if (iPhoneMemorySession)
+ {
+ iPhoneMemorySession->Close();
+ delete iPhoneMemorySession;
+ iPhoneMemorySession = NULL;
+ }
+
+ if (iMemoryCardSession)
+ {
+ iMemoryCardSession->Close();
+ delete iMemoryCardSession;
+ iMemoryCardSession = NULL;
+ }
+
+ if ( iPkcs5Key )
+ {
+ delete iPkcs5Key;
+ iPkcs5Key = NULL;
+ }
+ if (iTimer.Handle())
+ iTimer.Close();
+
+ if (iUiCenRep)
+ {
+ delete iUiCenRep;
+ iUiCenRep = NULL;
+ }
+ DFLOG( "CDevEncAdapter Destructor End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::DDFVersionL
+// Return DM plug-in version
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::DDFVersionL( CBufBase& aDDFVersion )
+ {
+ // Insert version information
+ DFLOG( "CDevEncAdapter::DDFVersionL Begin" );
+ aDDFVersion.InsertL( 0, KDevEncAdapterVersion );
+ DFLOG( "CDevEncAdapter::DDFVersionL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::DDFStructureL
+// Return DM plug-in structure
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+ {
+ // Declare accesses
+ DFLOG( "CDevEncAdapter::DDFStructureL Begin" );
+ TSmlDmAccessTypes accessTypes;
+ accessTypes.SetGet();
+
+ // Create root node
+ MSmlDmDDFObject& root = aDDF.AddChildObjectL( KDevEncRootNode );
+ FillNodeInfoL( root,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ MSmlDmDDFObject::EOne,
+ KNullDesC8(),
+ KNullDesC8() );
+
+ // Create leaf nodes
+
+ accessTypes.Reset();
+ accessTypes.SetReplace(); // Command nodes are write-only
+
+ MSmlDmDDFObject& node1 = root.AddChildObjectL( KPhoneMemoryCmdNode );
+ FillNodeInfoL( node1,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KPhoneMemoryCmdDescription,
+ KIntType );
+
+ MSmlDmDDFObject& node2 = root.AddChildObjectL( KMemoryCardCmdNode );
+ FillNodeInfoL( node2,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KMemoryCardCmdDescription,
+ KIntType );
+
+ accessTypes.Reset();
+ accessTypes.SetGet(); // Status nodes are read-only
+
+ MSmlDmDDFObject& node3 = root.AddChildObjectL( KPhoneMemoryStatusNode );
+ FillNodeInfoL( node3,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KPhoneMemoryStatusDescription,
+ KIntType );
+
+ MSmlDmDDFObject& node4 = root.AddChildObjectL( KMemoryCardStatusNode );
+ FillNodeInfoL( node4,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KMemoryCardStatusDescription,
+ KIntType );
+
+ accessTypes.SetReplace();
+
+ MSmlDmDDFObject& node5 = root.AddChildObjectL( KMemoryCardEncKeyNode );
+ FillNodeInfoL( node5,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EB64,
+ MSmlDmDDFObject::EOne,
+ KMemoryCardEncKeyDescription,
+ KTextType );
+
+ MSmlDmDDFObject& node6 = root.AddChildObjectL( KUIStateNode );
+ FillNodeInfoL( node6,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KUIStateDescription,
+ KIntType );
+
+ accessTypes.Reset();
+ accessTypes.SetGet(); // Progress nodes are read-only
+
+ MSmlDmDDFObject& node7 = root.AddChildObjectL( KPhoneMemoryProgNode );
+ FillNodeInfoL( node7,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KPhoneMemoryProgDescription,
+ KIntType );
+
+ MSmlDmDDFObject& node8 = root.AddChildObjectL( KMemoryCardProgNode );
+ FillNodeInfoL( node8,
+ accessTypes,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::EInt,
+ MSmlDmDDFObject::EOne,
+ KMemoryCardProgDescription,
+ KIntType );
+ DFLOG( "CDevEncAdapter::DDFStructureL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::StreamingSupport
+// Return streaming support status, set supported item size
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+TBool CDevEncAdapter::StreamingSupport( TInt& /* aItemSize */ )
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::StreamingSupport" );
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::StreamCommittedL
+// Commit stream buffer
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::StreamCommittedL()
+ {
+ DFLOG( "CDevEncAdapter::StreamCommitted" );
+ // Intentionally left empty
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::CompleteOutstandingCmdsL
+// Complete outstanding commands
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::CompleteOutstandingCmdsL()
+ {
+ DFLOG( "CDevEncAdapter::CompleteOutstandingCmdsL Begin" );
+ MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
+ TInt status;
+
+ TRequestStatus reqStatus;
+ TBool pending = ( iPhoneMemOpPending || iMemCardOpPending );
+ DFLOG2( "CDevEncAdapter: pending %d", ( pending ? 1 : 0 ) );
+
+ if ( iPhoneMemOpPending )
+ {
+ iPhoneMemOpPending = EFalse;
+ DFLOG2( "CDevEncAdapter: iPendingCommand %d", iPendingCommand );
+ switch ( iPendingCommand )
+ {
+ case EDmDecrypt:
+ iPhoneMemorySession->DiskStatus( status );
+ if ( status == EEncrypted )
+ {
+ DFLOG( "CDevEncAdapter: phone memory decrypt" );
+ iPhoneMemorySession->StartDiskDecrypt();
+ }
+ else
+ {
+ DFLOG2( "CDevEncAdapter: Cannot decrypt, phone mem status %d",
+ status );
+ retValue = CSmlDmAdapter::EError;
+ }
+ break;
+ case EDmEncryptDefault:
+ iPhoneMemorySession->DiskStatus( status );
+ if ( status == EDecrypted )
+ {
+ // if FOTA couldn't be disabled then the encryption cannot be performed
+ if( retValue != CSmlDmAdapter::EError )
+ {
+ DFLOG( "CDevEncAdapter: phone memory encrypt" );
+ iPhoneMemorySession->StartDiskEncrypt();
+ }
+ }
+ else
+ {
+ DFLOG2( "CDevEncAdapter: Cannot encrypt, phone mem status %d",
+ status );
+ retValue = CSmlDmAdapter::EError;
+ }
+ break;
+ default:
+ // Unknown or not valid command for phone memory
+ DFLOG2( "CDevEncAdapter: Invalid command %d",
+ iPendingCommand );
+ retValue = CSmlDmAdapter::EInvalidObject;
+ break;
+ }
+ }
+
+ if ( iMemCardOpPending )
+ {
+ iMemCardOpPending = EFalse;
+ switch ( iPendingCommand )
+ {
+ case EDmDecrypt:
+ iMemoryCardSession->DiskStatus( status );
+ if ( status == EEncrypted )
+ {
+ DFLOG( "CDevEncAdapter: memory card decrypt" );
+ TInt opStatus = iMemoryCardSession->StartDiskDecrypt();
+ }
+ else
+ {
+ DFLOG2( "CDevEncAdapter: Cannot decrypt, card status %d",
+ status );
+ retValue = CSmlDmAdapter::EError;
+ }
+ break;
+ case EDmEncryptRestore:
+ case EDmEncryptBackup:
+ iMemoryCardSession->DiskStatus( status );
+ if ( status == EDecrypted )
+ {
+ HBufC8* passwd = AskPassWordL();
+ if ( iPendingCommand == EDmEncryptBackup )
+ {
+ DFLOG( "CDevEncAdapter: memory card backup" );
+ _LIT_SECURITY_POLICY_S0( KPSSecurityPolicy, KPSCategory.iUid );
+
+ RProperty::Define( KPkcs5PSKey,
+ RProperty::EByteArray,
+ KPSSecurityPolicy,
+ KPSSecurityPolicy );
+ iKeyUtils->CreateSetKey( reqStatus,
+ iPkcs5Key,
+ *passwd,
+ KEncryptionKeyLength );
+ User::WaitForRequest( reqStatus );
+ User::LeaveIfError( reqStatus.Int() );
+ TInt ret = RProperty::Set( KPSCategory,
+ KPkcs5PSKey,
+ *iPkcs5Key );
+ if ( ret != KErrNone )
+ {
+ DFLOG2( "CDevEncAdapter: Error storing key: %d", ret );
+ User::Leave( ret );
+ }
+ }
+ else if ( iPendingCommand == EDmEncryptRestore )
+ {
+ DFLOG( "CDevEncAdapter: memory card restore" );
+ iKeyUtils->SetKey( reqStatus, *iPkcs5Key, *passwd );
+ User::WaitForRequest( reqStatus );
+ DFLOG2( "CDevEncAdapter::CompleteOutstandingCmdsL: \
+ SetKey: %d", reqStatus.Int() );
+ User::LeaveIfError( reqStatus.Int() );
+ }
+ DFLOG( "CDevEncAdapter: memory card encrypt" );
+ TInt opStatus = iMemoryCardSession->StartDiskEncrypt();
+ delete passwd;
+ passwd = NULL;
+ }
+ else
+ {
+ DFLOG2( "CDevEncAdapter: Cannot encrypt, card status %d",
+ status );
+ retValue = CSmlDmAdapter::EError;
+ }
+ break;
+ case EDmEncryptDefault:
+ iMemoryCardSession->DiskStatus( status );
+ if ( status == EDecrypted )
+ {
+ DFLOG( "CDevEncAdapter: memory card encrypt" );
+ TInt opStatus = iMemoryCardSession->StartDiskEncrypt();
+ }
+ else
+ {
+ DFLOG2( "CDevEncAdapter: Cannot encrypt, card status %d",
+ status );
+ retValue = CSmlDmAdapter::EError;
+ }
+ break;
+ default:
+ // Unknown or not valid command for memory card
+ DFLOG2( "CDevEncAdapter: Invalid command %d",
+ iPendingCommand );
+ retValue = CSmlDmAdapter::EInvalidObject;
+ break;
+ }
+ }
+
+ if ( pending )
+ {
+ Callback().SetStatusL( iStatusRef, retValue );
+ }
+ DFLOG( "CDevEncAdapter::CompleteOutstandingCmdsL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::FillNodeInfoL
+// Fill node info
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::FillNodeInfoL( MSmlDmDDFObject& aDDFObject,
+ TSmlDmAccessTypes& aAccessTypes,
+ MSmlDmDDFObject::TScope aScope,
+ MSmlDmDDFObject::TDFFormat aFormat,
+ MSmlDmDDFObject::TOccurence aOccurence,
+ const TDesC8& aDescription,
+ const TDesC8& aMIMEType )
+ {
+ DFLOG( "CDevEncAdapter::FillNodeInfoL Begin" );
+ aDDFObject.SetAccessTypesL( aAccessTypes );
+ aDDFObject.SetScopeL( aScope );
+ aDDFObject.SetOccurenceL( aOccurence );
+ aDDFObject.SetDFFormatL( aFormat );
+ aDDFObject.SetDescriptionL( aDescription );
+ if ( aFormat != MSmlDmDDFObject::ENode )
+ {
+ aDDFObject.AddDFTypeMimeTypeL( aMIMEType );
+ }
+ DFLOG( "CDevEncAdapter::FillNodeInfoL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::CopyCommandL
+// Copy object
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/,
+ const TDesC8& /*aTargetLUID*/,
+ const TDesC8& /*aSourceURI*/,
+ const TDesC8& /*aSourceLUID*/,
+ const TDesC8& /*aType*/,
+ TInt aStatusRef )
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::CopyCommandL Begin" );
+ Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ DFLOG( "CDevEncAdapter::CopyCommandL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// DeleteObjectL
+// Delete object
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::DeleteObjectL( const TDesC8& /* aURI */,
+ const TDesC8& /* aLUID */,
+ TInt aStatusRef )
+
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::DeleteObjectL Begin" );
+ Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ DFLOG( "CDevEncAdapter::DeleteObjectL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::FetchLeafObjectL
+// Fetch leaf
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::FetchLeafObjectL( const TDesC8& aURI,
+ const TDesC8& /* aLUID */,
+ const TDesC8& aType,
+ TInt aResultsRef,
+ TInt aStatusRef )
+ {
+ DFLOG( "CDevEncAdapter::FetchLeafObjectL Begin" );
+
+ MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
+ CBufFlat* result = CBufFlat::NewL( KBufGranularity );
+ CleanupStack::PushL( result );
+
+ if ( aURI.Compare( KDevEncRootNode ) >= 0 )
+ {
+ TPtrC8 leaf = LastURISeg( aURI );
+ TBuf8<KSizeOfSettingId> buf;
+
+ if ( leaf == KPhoneMemoryStatusNode )
+ {
+ TInt status;
+ iPhoneMemorySession->DiskStatus( status );
+ buf.Num( status );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KMemoryCardStatusNode )
+ {
+ TInt status;
+ iMemoryCardSession->DiskStatus( status );
+ buf.Num( status );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KMemoryCardEncKeyNode )
+ {
+ iPkcs5Key = HBufC8::NewL( RProperty::KMaxPropertySize );
+ TPtr8 keyPtr = iPkcs5Key->Des();
+ keyPtr.FillZ( RProperty::KMaxPropertySize );
+ TInt ret = RProperty::Get( KPSCategory,
+ KPkcs5PSKey,
+ keyPtr );
+ if ( ret != KErrNone )
+ {
+ DFLOG2( "CDevEncAdapter::FetchLeafObjectL: Error reading key: %d", ret );
+ User::Leave( ret );
+ }
+ result->InsertL( 0, *iPkcs5Key );
+ }
+ else if ( leaf == KUIStateNode )
+ {
+ TInt status;
+ iUiCenRep->Get( KDevEncUiDmControl, status );
+ buf.Num( status );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KPhoneMemoryProgNode )
+ {
+ TInt progress = -1;
+ iPhoneMemorySession->Progress( progress );
+ buf.Num( progress );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KMemoryCardProgNode )
+ {
+ TInt progress = -1;
+ iMemoryCardSession->Progress( progress );
+ buf.Num( progress );
+ result->InsertL( 0, buf );
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ }
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ }
+
+ if ( retValue == CSmlDmAdapter::EOk )
+ {
+ result->Compress();
+ Callback().SetResultsL( aResultsRef, *result, aType );
+ }
+
+ CleanupStack::PopAndDestroy( result );
+ // Respond
+ Callback().SetStatusL( aStatusRef, retValue );
+ DFLOG( "CDevEncAdapter::FetchLeafObjectL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::FetchLeafObjectSizeL
+// Calculate leaf object size
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::FetchLeafObjectSizeL( const TDesC8& aURI,
+ const TDesC8& /* aLUID */,
+ const TDesC8& /* aType */,
+ TInt aResultsRef,
+ TInt aStatusRef )
+ {
+ DFLOG( "CDevEncAdapter::FetchLeafObjectSizeL Begin" );
+
+ MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
+ CBufFlat* result = CBufFlat::NewL( KBufGranularity );
+ CleanupStack::PushL( result );
+
+ if ( aURI.Compare( KDevEncRootNode ) >= 0 )
+ {
+ TPtrC8 leaf = LastURISeg( aURI );
+ TBuf8<KSizeOfSettingId> buf;
+
+ if ( leaf == KPhoneMemoryStatusNode )
+ {
+ buf.AppendNum( sizeof(TInt) );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KMemoryCardStatusNode )
+ {
+ buf.AppendNum( sizeof(TInt) );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KMemoryCardEncKeyNode )
+ {
+ buf.AppendNum( KEncryptionKeyLength );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KUIStateNode )
+ {
+ buf.AppendNum( sizeof(TInt) );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KPhoneMemoryProgNode )
+ {
+ buf.AppendNum( sizeof(TInt) );
+ result->InsertL( 0, buf );
+ }
+ else if ( leaf == KMemoryCardProgNode )
+ {
+ buf.AppendNum( sizeof(TInt) );
+ result->InsertL( 0, buf );
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ }
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ }
+
+ if ( retValue == CSmlDmAdapter::EOk )
+ {
+ result->Compress();
+ Callback().SetResultsL( aResultsRef, *result, KIntType );
+ }
+
+ CleanupStack::PopAndDestroy( result );
+ // Respond
+ Callback().SetStatusL( aStatusRef, retValue );
+ DFLOG( "CDevEncAdapter::FetchLeafObjectSizeL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::ChildURIListL
+// Create child URI list
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::ChildURIListL( const TDesC8& aURI,
+ const TDesC8& /* aLUID */,
+ const CArrayFix<TSmlDmMappingInfo>& /* aPreviousURISegmentList */,
+ TInt aResultsRef,
+ TInt aStatusRef )
+ {
+ DFLOG( "CDevEncAdapter::ChildURIListL Begin" );
+ MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
+
+ if ( aURI.Compare( KDevEncRootNode ) == 0 )
+ {
+ CBufFlat* buf = CBufFlat::NewL( KBufGranularity );
+ CleanupStack::PushL( buf );
+ buf->InsertL( 0, KPhoneMemoryCmdNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KMemoryCardCmdNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KPhoneMemoryStatusNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KMemoryCardStatusNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KMemoryCardEncKeyNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KUIStateNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KPhoneMemoryProgNode );
+ buf->InsertL( buf->Size(), KSeparator );
+ buf->InsertL( buf->Size(), KMemoryCardProgNode );
+
+ buf->Compress();
+ Callback().SetResultsL( aResultsRef, *buf, KNullDesC8 );
+ CleanupStack::PopAndDestroy( buf );
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ }
+
+ // Respond
+ Callback().SetStatusL( aStatusRef, retValue );
+ DFLOG( "CDevEncAdapter::ChildURIListL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::AddNodeObjectL
+// Add node
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::AddNodeObjectL( const TDesC8& /* aURI */,
+ const TDesC8& /* aParentLUID */,
+ TInt aStatusRef )
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::AddNodeObjectL Begin" );
+ Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ DFLOG( "CDevEncAdapter::AddNodeObjectL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::ExecuteCommandL
+// Execute command
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::ExecuteCommandL( const TDesC8& /* aURI */,
+ const TDesC8& /* aLUID */,
+ const TDesC8& /* aArgument */,
+ const TDesC8& /* aType */,
+ TInt aStatusRef )
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::ExecuteCommandL Begin" );
+ Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ DFLOG( "CDevEncAdapter::ExecuteCommandL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::ExecuteCommandL
+// Execute command, streaming enabled
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::ExecuteCommandL( const TDesC8& /* aURI */,
+ const TDesC8& /* aLUID */,
+ RWriteStream*& /* aStream */,
+ const TDesC8& /* aType */,
+ TInt aStatusRef )
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::ExecuteCommandL Begin" );
+ Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ DFLOG( "CDevEncAdapter::ExecuteCommandL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::UpdateLeafObjectL
+// Update leaf object
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::UpdateLeafObjectL( const TDesC8& aURI,
+ const TDesC8& /* aLUID */,
+ const TDesC8& aObject,
+ const TDesC8& /* aType */,
+ TInt aStatusRef )
+ {
+ DFLOG( "CDevEncAdapter::UpdateLeafObjectL Begin" );
+ MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
+ DFLOG2( "CDevEncAdapter: Object: %S", &aObject );
+
+ if ( aURI.Compare( KDevEncRootNode ) >= 0 )
+ {
+ TPtrC8 leaf = LastURISeg( aURI );
+ TLex8 lex;
+
+ if ( leaf == KPhoneMemoryCmdNode )
+ {
+ DFLOG( "CDevEncAdapter: leaf: KPhoneMemoryCmdNode" );
+ DFLOG2( "CDevEncAdapter: iMemCardOpPending %d", ( iMemCardOpPending ? 1 : 0 ) );
+ if ( iMemCardOpPending )
+ {
+ retValue = CSmlDmAdapter::EObjectInUse;
+ }
+ else
+ {
+ if( !CheckBatteryL() )
+ {
+ retValue = CSmlDmAdapter::EError;
+ }
+ else
+ {
+ lex.Assign( aObject );
+ lex.Val( iPendingCommand );
+ iPhoneMemOpPending = ETrue;
+ iStatusRef = aStatusRef;
+ return; // Completed in CompleteOutstandingCmdsL
+ }
+ }
+ }
+ else if ( leaf == KMemoryCardCmdNode )
+ {
+ DFLOG( "CDevEncAdapter: leaf: KMemoryCardCmdNode" );
+ DFLOG2( "CDevEncAdapter: iPhoneMemOpPending %d", ( iPhoneMemOpPending ? 1 : 0 ) );
+ if ( iPhoneMemOpPending )
+ {
+ retValue = CSmlDmAdapter::EObjectInUse;
+ }
+ else
+ {
+ if( !CheckBatteryL() )
+ {
+ retValue = CSmlDmAdapter::EError;
+ }
+ else
+ {
+ lex.Assign( aObject );
+ lex.Val( iPendingCommand );
+ iMemCardOpPending = ETrue;
+ iStatusRef = aStatusRef;
+ return; // Completed in CompleteOutstandingCmdsL
+ }
+ }
+ }
+ else if ( leaf == KMemoryCardEncKeyNode )
+ {
+ DFLOG( "CDevEncAdapter: leaf: KMemoryCardEncKeyNode" );
+ iPkcs5Key = aObject.AllocL();
+ }
+ else if ( leaf == KUIStateNode )
+ {
+ DFLOG( "CDevEncAdapter: leaf: KUIStateNode" );
+ lex.Assign( aObject );
+ TInt value;
+ lex.Val( value );
+ iUiCenRep->Set( KDevEncUiDmControl, value );
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ DFLOG( "CDevEncAdapter: Not Found" );
+ }
+ }
+ else
+ {
+ retValue = CSmlDmAdapter::ENotFound;
+ DFLOG( "CDevEncAdapter: Not Found" );
+ }
+ Callback().SetStatusL( aStatusRef, retValue );
+ DFLOG( "CDevEncAdapter::UpdateLeafObjectL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::UpdateLeafObjectL
+// Update leaf object, streaming enabled
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */,
+ const TDesC8& /* aLUID */,
+ RWriteStream*& /* aStream */,
+ const TDesC8& /* aType */,
+ TInt aStatusRef )
+ {
+ // Not supported
+ DFLOG( "CDevEncAdapter::UpdateLeafObjectL Begin" );
+ Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ DFLOG( "CDevEncAdapter::UpdateLeafObjectL End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::StartAtomicL
+// Start atomic
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::StartAtomicL()
+ {
+ DFLOG( "CDevEncAdapter::StartAtomicL" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::CommitAtomicL
+// Commit atomic commands
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::CommitAtomicL()
+ {
+ DFLOG( "CDevEncAdapter::CommitAtomicL" );
+ }
+
+// ----------------------------------------------------------------------------
+// CDevEncAdapter::RollbackAtomicL
+// Lose all modifications after 'StartAtomicL' command
+// (may leave)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+void CDevEncAdapter::RollbackAtomicL()
+ {
+ DFLOG( "CDevEncAdapter::RollbackAtomicL" );
+ }
+
+TPtrC8 CDevEncAdapter::LastURISeg( const TDesC8& aURI )
+ {
+ DFLOG( "CDevEncAdapter::LastURISeg Begin" );
+ TInt i;
+ for ( i = aURI.Length()-1; i >= 0; i-- )
+ {
+ if ( aURI[i] == '/' )
+ {
+ break;
+ }
+ }
+ DFLOG( "CDevEncAdapter::LastURISeg End" );
+ return aURI.Mid( i+1 );
+ }
+
+HBufC8* CDevEncAdapter::AskPassWordL()
+ {
+ DFLOG( "CDevEncAdapter::AskPassWordL Begin" );
+ RNotifier notif;
+ TInt err = notif.Connect();
+ DFLOG2( "CDevEncAdapter::AskPassWordL notif.Connect(): %d", err );
+ User::LeaveIfError( err );
+ TBuf8<KMaxPasswordLength> passwd;
+ passwd.SetLength(KMaxPasswordLength);
+ TRequestStatus status = KRequestPending;
+ DFLOG( "CDevEncAdapter::AskPassWordL StartNotifierAndGetResponse" );
+ notif.StartNotifierAndGetResponse(
+ status,
+ TUid::Uid( KDevEncPasswdDlgUid ),
+ KNullDesC8,
+ passwd );
+ User::WaitForRequest( status );
+ notif.Close();
+ err = status.Int();
+ DFLOG2( "CDevEncAdapter::AskPassWordL status.Int(): %d", err );
+ User::LeaveIfError( err );
+ HBufC8* passwdBuf = passwd.AllocL();
+ DFLOG( "CDevEncAdapter::AskPassWordL End" );
+ return passwdBuf;
+ }
+
+// ---------------------------------------------------------------------------
+// CDevEncAdapter::CheckBatteryL()
+// Checks if there's enough battery power to update
+// ---------------------------------------------------------------------------
+//
+TBool CDevEncAdapter::CheckBatteryL()
+ {
+#ifdef __WINS__
+
+ // In the emulator, the battery level is always 0 and the charger is never
+ // connected, so just return ETrue.
+ return ETrue;
+
+#else // __WINS__
+
+ // Running on target. Check the real battery and charger status
+
+ TInt chargingstatus( EChargingStatusError );
+ TInt batterylevel( 1 );
+ TBool enoughPower( EFalse );
+
+ // Read battery
+ DFLOG( "CDevEncAdapter::CheckBatteryL" );
+ RProperty pw;
+ User::LeaveIfError( pw.Attach( KPSUidHWRMPowerState, KHWRMBatteryLevel ) );
+ User::LeaveIfError( pw.Get( batterylevel ) );
+ pw.Close();
+
+ User::LeaveIfError( pw.Attach( KPSUidHWRMPowerState, KHWRMChargingStatus ) );
+ User::LeaveIfError( pw.Get( chargingstatus ));
+ pw.Close();
+
+ // Too low battery, power insufficient
+ if ( batterylevel >= EBatteryLevelLevel4 )
+ {
+ enoughPower = ETrue;
+ }
+ // But charger is connected, power sufficient
+ if ( ( chargingstatus != EChargingStatusError ) &&
+ ( chargingstatus != EChargingStatusNotConnected ) )
+ {
+ enoughPower = ETrue;
+ }
+
+ DFLOG3( "CDevEncAdapter: Battery level: %d (0..7), chargingstatus %d",
+ batterylevel, chargingstatus );
+ DFLOG2( "CDevEncAdapter: CheckBatteryL %d", ( enoughPower ? 1 : 0 ) );
+ return enoughPower;
+
+#endif // __WINS__
+ }
+
+// ========================= OTHER EXPORTED FUNCTIONS =========================
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncDmAdapter/src/DevEncAdapterImp.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2005 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: Printing Framework DM Adapter.
+*
+*/
+
+// INCLUDE
+#include <implementationproxy.h>
+#include "DevEncAdapter.h"
+#include "DevEncUids.hrh"
+
+// ----------------------------------------------------------------------------
+// ImplementationTable
+// Ecom plug-in implementation table
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ IMPLEMENTATION_PROXY_ENTRY( KDevEncOmaDmPluginImplUid, CDevEncAdapter::NewL )
+#else // !__EABI__
+ { { KDevEncOmaDmPluginImplUid }, CDevEncAdapter::NewL }
+#endif // __EABI__
+ };
+
+// ----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Instance of implementation proxy
+// (exported)
+// Status : Draft
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+
+ return ImplementationTable;
+ }
+
+// End Of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/data/200255CF.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2005 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: ECOM plugin resource file for GSConfigPlugin.
+*
+*/
+
+#include <registryinfo.rh>
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = 0x200255CF; // dll UID
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = 0x10207236; // common UID for all GS plugins
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x200255CF;
+ version_no = 1;
+ display_name = "Device Encryption Plugin";
+ default_data = "0x1020743A"; // Parent UID
+ opaque_data = "20"; // Order number
+ }
+ };
+ }
+ };
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/data/devencgspluginrsc.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2005 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: Resource file for DE Plugin.
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+NAME GSDP // 4 letter ID
+
+// INCLUDES
+
+
+#include <data_caging_paths_strings.hrh>
+#include <devencgsplugin.loc>
+
+
+#include <uikon.rh>
+
+// CONSTANTS
+
+// RESOURCE DEFINITIONS
+
+//----------------------------------------------------
+//
+//
+// Needed or loading the resource fails!
+//
+//----------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+ {
+ }
+
+//----------------------------------------------------
+//
+// r_gs_config_plugin_caption
+// Configuration Contexts Plugin caption.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_gs_de_plugin_caption
+ {
+ buf = qtn_cp_folder_de;
+ }
+
+
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2005 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: Information required for building GSConfigPlugin.
+*
+*/
+
+// To get the APP_LAYER_LOC_EXPORT_PATH-definition
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+#include "devencgspluginexports.inc"
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+ OPTION TARGETFILE gsprofilesplugin.mif
+ OPTION HEADERFILE gsprofilesplugin.mbg
+ OPTION SOURCES -c8,8 qgn_prop_cp_perso_prof
+END
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+ OPTION TARGETFILE devencgsplugin.mif
+ OPTION HEADERFILE devencgsplugin.mbg
+
+ OPTION SOURCES \
+ -c8,8 qgn_prop_cp_devenc.svg
+END
+
+PRJ_MMPFILES
+//gnumakefile devencgspluginicons.mk
+devencgsplugin.mmp
+
+PRJ_TESTMMPFILES
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/group/devencgsplugin.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2005 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: Project specification file for deviceencryptiongsplugin.
+*
+*/
+
+
+#include <data_caging_paths.hrh> //this is needed for RESOURCE_FILES_DIR
+#include <platform_paths.hrh>
+
+CAPABILITY CAP_ECOM_PLUGIN
+TARGET devencgsplugin.dll
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x200255CF // dll uid is 0x200255CF
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../src
+SOURCE devencgsplugin.cpp
+SOURCE devencgspluginImplementationTable.cpp
+
+USERINCLUDE ../data
+USERINCLUDE ../inc
+
+SYSTEMINCLUDE .
+SYSTEMINCLUDE /epoc32/include/ecom
+
+// Default system include paths for application layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH ../data
+
+//ECOM resource definition
+START RESOURCE 200255CF.rss
+ TARGET devencgsplugin.rsc
+ TARGETPATH ECOM_RESOURCE_DIR
+END
+
+// Gsplugin caption
+START RESOURCE devencgspluginrsc.rss
+HEADER
+TARGETPATH RESOURCE_FILES_DIR
+LANGUAGE_IDS
+END // Gsplugin caption
+
+
+LIBRARY apparc.lib
+LIBRARY avkon.lib
+LIBRARY bafl.lib
+LIBRARY commonengine.lib // RConeResourceLoader
+LIBRARY cone.lib
+LIBRARY ecom.lib
+LIBRARY efsrv.lib
+LIBRARY egul.lib
+LIBRARY eikcoctl.lib
+LIBRARY eikcore.lib
+LIBRARY euser.lib
+LIBRARY featmgr.lib
+LIBRARY gsecomplugin.lib
+LIBRARY gsframework.lib // Base classes
+LIBRARY ws32.lib
+LIBRARY aknskins.lib // AknsUtils.h
+LIBRARY apgrfx.lib // RApaLsSession
+LIBRARY servicehandler.lib // For AIW
+
+DEBUGLIBRARY flogger.lib
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/group/devencgspluginexports.inc Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,12 @@
+
+// To get the APP_LAYER_SYSTEMINCLUDE-definition
+#include <platform_paths.hrh>
+
+#ifndef DEVENCGSPLUGINEXPORTS_INC
+#define DEVENCGSPLUGINEXPORTS_INC
+
+../loc/devencgsplugin.loc APP_LAYER_LOC_EXPORT_PATH(devencgsplugin.loc)
+
+#endif // DEVENCGSPLUGINEXPORTS_INC
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/group/qgn_prop_cp_devenc.svg Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="44" height="44" viewBox="0 0 44 44"
+ overflow="visible" enable-background="new 0 0 44 44" xml:space="preserve">
+<rect fill="none" width="44" height="44"/>
+<g>
+ <path d="M10.21,2.25c-1.654,0-3,1.346-3,3v26c0,1.654,1.346,3,3,3h14c1.654,0,3-1.346,3-3v-26c0-1.654-1.346-3-3-3H10.21z"/>
+ <path fill="#625C52" d="M26.21,31.25c0,1.102-0.9,2-2,2h-14c-1.1,0-2-0.898-2-2v-26c0-1.1,0.9-2,2-2h14c1.1,0,2,0.9,2,2V31.25z"/>
+ <path fill="#B2A99F" d="M24.21,3.25h-14c-1.1,0-2,0.9-2,2v4.432l1-0.063V5.25h16v7.381l1-0.5V5.25
+ C26.21,4.15,25.31,3.25,24.21,3.25z"/>
+ <rect x="10.21" y="6.25" fill="#ACA49C" width="14" height="18"/>
+ <polygon fill="#FFFFFF" points="23.21,13.648 23.21,7.25 11.21,7.25 11.21,19.648 "/>
+ <path fill="#4C4642" d="M19.21,32.25c0.553,0,1-0.449,1-1v-4c0-0.551-0.447-1-1-1h-4c-0.553,0-1,0.449-1,1v4c0,0.551,0.447,1,1,1
+ H8.489c0.348,0.594,0.986,1,1.721,1h14c0.734,0,1.373-0.406,1.721-1H19.21z"/>
+ <rect x="15.21" y="27.25" fill="#FFFFFF" width="4" height="4"/>
+</g>
+<g>
+ <g>
+ <path d="M37.214,36.25l-5.586,4H20.214c-1.1,0-2-0.9-2-2v-15c0-1.1,0.9-2,2-2h15c1.1,0,2,0.9,2,2V36.25z"/>
+ <path fill="#2C5190" d="M20.214,22.25c-0.265,0-0.516,0.104-0.705,0.295c-0.19,0.189-0.295,0.44-0.295,0.705v15
+ c0,0.265,0.104,0.516,0.295,0.705c0.189,0.19,0.44,0.295,0.705,0.295c0,0,10.224,0,11,0c0.463-0.464,4.537-2.951,5-3.414
+ c0-0.776,0-12.586,0-12.586c0-0.552-0.448-1-1-1H20.214z"/>
+ <path fill="#708ACE" d="M20.214,22.25c-0.265,0-0.516,0.104-0.705,0.295c-0.19,0.189-0.295,0.44-0.295,0.705v12l17-8.5v-3.5
+ c0-0.552-0.448-1-1-1H20.214z"/>
+ <rect x="32.214" y="25.25" fill="#E4C787" width="4" height="2"/>
+ <rect x="32.214" y="29.25" fill="#E4C787" width="4" height="2"/>
+ <rect x="32.214" y="33.25" fill="#E4C787" width="4" height="2"/>
+ <path d="M30.214,28.776c0-1.395-1.132-2.526-2.526-2.526c-1.396,0-2.527,1.132-2.527,2.526c0,0.933,0.51,1.739,1.264,2.177
+ l-2,3.562l-0.242,1.048l6.033-0.048l-1.265-4.562C29.7,30.516,30.214,29.709,30.214,28.776z"/>
+ </g>
+ <path fill="#FFFFFF" d="M29.214,28.776c0-1.395-1.132-2.526-2.526-2.526c-1.396,0-2.527,1.132-2.527,2.526
+ c0,0.933,0.51,1.739,1.264,2.177l-1,3.562h4.526l-1-3.562C28.7,30.516,29.214,29.709,29.214,28.776z"/>
+</g>
+<g>
+ <path d="M13.553,13.502c-1.413,0-1.537-1.207-1.537-2.37c0-1.052,0.174-2.26,1.562-2.26c1.369,0,1.512,1.195,1.512,2.26
+ C15.09,12.308,14.953,13.502,13.553,13.502z M13.553,9.444c-0.492,0-0.523,0.691-0.523,1.688c0,1.163,0.05,1.798,0.523,1.798
+ c0.466,0,0.517-0.635,0.517-1.798C14.07,10.129,14.039,9.444,13.553,9.444z"/>
+ <path d="M18.706,13.452h-2.863v-0.535h0.959V9.656l-0.959,0.206V9.326l1.419-0.441h0.541v4.032h0.903V13.452z"/>
+ <path d="M20.872,13.502c-1.413,0-1.537-1.207-1.537-2.37c0-1.052,0.174-2.26,1.562-2.26c1.369,0,1.513,1.195,1.513,2.26
+ C22.409,12.308,22.272,13.502,20.872,13.502z M20.872,9.444c-0.492,0-0.523,0.691-0.523,1.688c0,1.163,0.05,1.798,0.523,1.798
+ c0.466,0,0.517-0.635,0.517-1.798C21.389,10.129,21.357,9.444,20.872,9.444z"/>
+ <path d="M15.047,19.493h-2.863v-0.535h0.959v-3.261l-0.959,0.205v-0.535l1.419-0.441h0.542v4.032h0.902V19.493z"/>
+ <path d="M17.213,19.543c-1.413,0-1.537-1.208-1.537-2.371c0-1.052,0.174-2.259,1.562-2.259c1.369,0,1.513,1.194,1.513,2.259
+ C18.75,18.348,18.613,19.543,17.213,19.543z M17.213,15.485c-0.492,0-0.523,0.69-0.523,1.687c0,1.163,0.05,1.799,0.523,1.799
+ c0.466,0,0.516-0.636,0.516-1.799C17.729,16.17,17.697,15.485,17.213,15.485z"/>
+ <path d="M22.365,19.493h-2.862v-0.535h0.958v-3.261l-0.958,0.205v-0.535l1.419-0.441h0.541v4.032h0.902V19.493z"/>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/inc/devencgsplugin.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2005 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: DeviceEncryptionGsPlugin implementation.
+*
+*/
+
+#ifndef DEVENCGSPLUGIN_H
+#define DEVENCGSPLUGIN_H
+
+// User includes
+#include <../../common/DevEncUids.hrh>
+
+// System includes
+#include <gsplugininterface.h>
+#include <ConeResLoader.h>
+#include <AknServerApp.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <eikdgfty.h>
+#include <eiklibry.h>
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+
+// Classes referenced
+class CAknNullService;
+class CRepository;
+
+// Constants
+const TUid KDeviceEncryptionGsPluginUID = { KDevEncGsPluginUid }; // dll uid
+const TUid KDeviceEncryptionGsPluginImplUID = { KDevEncGsPluginImplUid }; // dll impl uid
+const TUid KDeviceEncryptionAppUid = { KDevEncUiUid }; // UI uid
+
+_LIT( KDeviceEncryptionApp, "z:\\sys\\bin\\DevEncUi.exe" );
+_LIT( KDeviceEncryptionGsPluginResourceFileName, "z:devencGsPluginRsc.rsc" );
+_LIT( KDeviceEncryptionGsPluginIconDirAndName, "z:devencgsplugin.mbm"); // Use KDC_BITMAP_DIR
+
+// CLASS DECLARATION
+
+//For embedding CC in CS
+class TAppInfo
+ {
+ public:
+ TAppInfo( TUid aUid, const TDesC& aFile )
+ : iUid( aUid ), iFile( aFile )
+ {}
+ TUid iUid;
+ TFileName iFile;
+ };
+
+
+/**
+* CDeviceEncryptionGsPlugin.
+*
+* This class handles state and application logic of CDeviceEncryptionGsPlugin.
+* The plugin is a type of EGSItemTypeSettingDialog and therefore the GS FW will
+* call HandleSelection() instead of DoActivate(). No CAknView functionality is
+* supported even though the base class is CAknView derived via
+* CGSPluginInterface.
+*
+*/
+class CDeviceEncryptionGsPlugin : public CGSPluginInterface,
+ public MAknServerAppExitObserver // Embedding
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Symbian OS two-phased constructor
+ * @return
+ */
+ static CDeviceEncryptionGsPlugin* NewL( TAny* aInitParams );
+
+ /**
+ * Destructor.
+ */
+ ~CDeviceEncryptionGsPlugin();
+
+ public: // From CAknView
+
+ /**
+ * See base class.
+ */
+ TUid Id() const;
+
+ public: // From CGSPluginInterface
+
+ /**
+ * See base class.
+ */
+ void GetCaptionL( TDes& aCaption ) const;
+
+ /**
+ * See base class.
+ */
+ TInt PluginProviderCategory() const;
+
+ /**
+ * See base class.
+ */
+ TGSListboxItemTypes ItemType();
+
+ /**
+ * See base class.
+ */
+ void GetValue( const TGSPluginValueKeys aKey,
+ TDes& aValue );
+
+ /**
+ * See base class.
+ */
+ void HandleSelection( const TGSSelectionTypes aSelectionType );
+
+ /**
+ * See base class.
+ */
+ CGulIcon* CreateIconL( const TUid aIconType );
+
+ protected: // New
+
+ /**
+ * C++ default constructor.
+ */
+ CDeviceEncryptionGsPlugin();
+
+ /**
+ * Symbian OS default constructor.
+ */
+ void ConstructL();
+
+ protected: // From CAknView
+
+ /**
+ * This implementation is empty because this class, being just a dialog,
+ * does not implement the CAknView finctionality.
+ */
+ void DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * This implementation is empty because this class, being just a dialog,
+ * does not implement the CAknView finctionality.
+ */
+ void DoDeactivate();
+
+ private:
+
+ /**
+ * Opens localized resource file.
+ */
+ void OpenLocalizedResourceFileL(
+ const TDesC& aResourceFileName,
+ RConeResourceLoader& aResourceLoader );
+
+ /**
+ * Launches provisioning application.
+ */
+ void LaunchDEAppL();
+
+ /**
+ * Launches application as embedded.
+ */
+ void EmbedAppL( const TAppInfo& aApp );
+
+ protected:
+
+ //Resource loader.
+ RConeResourceLoader iResources;
+
+ CAknNullService* iNullService;
+
+ CApaDocument* iEmbedded;
+ };
+
+#endif // DEVENCGSPLUGIN_H
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/loc/devencgsplugin.loc Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 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: Localization strings for .
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+// **CAPTIONS
+
+//d:Text of a list item in main view list
+//d:Used by
+//l:list_single_large_graphic_pane_t1
+//w:
+//r: 5.0
+#define qtn_cp_folder_de "Device Encryption"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/src/devencgsplugin.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 2005 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: GSProfilesPlugin implementation.
+*
+*/
+
+
+// User includes
+#include "devencgsplugin.h"
+#include <GSParentPlugin.h>
+#include <GSCommon.hrh>
+#include <devencgspluginrsc.rsg> // GUI Resource
+//#include <DevEncUi.rsg>
+#include <devencgsplugin.mbg>
+#include <GSPrivatePluginProviderIds.h>
+#include <hwrmvibrasdkcrkeys.h>
+#include <AknLaunchAppService.h>
+#include <AiwCommon.h>
+// System includes
+#include <AknNullService.h>
+#include <bautils.h>
+#include <StringLoader.h>
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::CDeviceEncryptionGsPlugin
+//
+// ---------------------------------------------------------------------------
+//
+CDeviceEncryptionGsPlugin::CDeviceEncryptionGsPlugin()
+ : iResources( *iCoeEnv ), iNullService(NULL)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::~CDeviceEncryptionGsPlugin
+//
+// ---------------------------------------------------------------------------
+//
+CDeviceEncryptionGsPlugin::~CDeviceEncryptionGsPlugin()
+ {
+ iResources.Close();
+
+ if ( iNullService )
+ {
+ delete iNullService;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::ConstructL()
+ {
+ OpenLocalizedResourceFileL( KDeviceEncryptionGsPluginResourceFileName, iResources );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CDeviceEncryptionGsPlugin* CDeviceEncryptionGsPlugin::NewL( TAny* /*aInitParams*/ )
+ {
+ CDeviceEncryptionGsPlugin* self = new ( ELeave ) CDeviceEncryptionGsPlugin();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::Id (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+TUid CDeviceEncryptionGsPlugin::Id() const
+ {
+ return KDeviceEncryptionGsPluginImplUID;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::DoActivateL (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::DoDeactivate (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::DoDeactivate()
+ {
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::GetCaptionL (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::GetCaptionL( TDes& aCaption ) const
+ {
+// HBufC* result = iEikonEnv->AllocReadResourceAsDes16L( R_GS_DE_PLUGIN_CAPTION );
+ HBufC* result = StringLoader::LoadL( R_GS_DE_PLUGIN_CAPTION );
+
+ if (result->Des().Length() < aCaption.MaxLength())
+ {
+ aCaption.Copy( *result );
+ }
+ else
+ {
+ aCaption = KNullDesC;
+ }
+
+ delete result;
+// aCaption.Copy( _L("Device Encryption") );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::PluginProviderCategory (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+TInt CDeviceEncryptionGsPlugin::PluginProviderCategory() const
+ {
+ return KGSPluginProviderInternal;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::ItemType (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+TGSListboxItemTypes CDeviceEncryptionGsPlugin::ItemType()
+ {
+ return EGSItemTypeSettingDialog;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::GetValue (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::GetValue( const TGSPluginValueKeys /*aKey*/,
+ TDes& /*aValue*/ )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::HandleSelection (from CGSPluginInterface)
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::HandleSelection(
+ const TGSSelectionTypes /*aSelectionType*/ )
+ {
+ //TRAP_IGNORE( LaunchDEAppL() );
+ LaunchDEAppL();
+ }
+
+// ---------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::CreateIconL (from CGSPluginInterface)
+//
+// ---------------------------------------------------------------------------
+//
+
+CGulIcon* CDeviceEncryptionGsPlugin::CreateIconL( const TUid aIconType )
+ {
+ CGulIcon* icon;
+ TParse* fp = new ( ELeave ) TParse();
+ CleanupStack::PushL( fp );
+ fp->Set( KDeviceEncryptionGsPluginIconDirAndName, &KDC_BITMAP_DIR, NULL );
+
+ if ( aIconType == KGSIconTypeLbxItem )
+ {
+ icon = AknsUtils::CreateGulIconL(
+ AknsUtils::SkinInstance(),
+ KAknsIIDQgnPropCpPersoProf,
+ //KAknsIIDQgnPropCpDevenc,
+ fp->FullName(),
+ EMbmDevencgspluginQgn_prop_cp_devenc,
+ EMbmDevencgspluginQgn_prop_cp_devenc_mask );
+ }
+ else
+ {
+ icon = CGSPluginInterface::CreateIconL( aIconType );
+ }
+
+ CleanupStack::PopAndDestroy( fp );
+
+ return icon;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::OpenLocalizedResourceFileL
+//
+// -----------------------------------------------------------------------------
+
+void CDeviceEncryptionGsPlugin::OpenLocalizedResourceFileL(
+ const TDesC& aResourceFileName,
+ RConeResourceLoader& aResourceLoader )
+ {
+ RFs fsSession;
+ User::LeaveIfError( fsSession.Connect() );
+ CleanupClosePushL(fsSession);
+
+ // Find the resource file:
+ TParse parse;
+ parse.Set( aResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL );
+ TFileName fileName( parse.FullName() );
+
+ // Get language of resource file:
+ BaflUtils::NearestLanguageFile( fsSession, fileName );
+
+ // Open resource file:
+ aResourceLoader.OpenL( fileName );
+
+ CleanupStack::PopAndDestroy(&fsSession);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::LaunchProfilesAppL
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::LaunchDEAppL()
+ {
+ // Get the correct application data
+ RWsSession ws;
+ User::LeaveIfError(ws.Connect());
+ CleanupClosePushL(ws);
+
+ // Find the task with uid
+ TApaTaskList taskList(ws);
+ TApaTask task = taskList.FindApp( KDeviceEncryptionAppUid );
+
+ if ( task.Exists() )
+ {
+ task.BringToForeground();
+ }
+ else
+ {
+ //Launch application as embedded
+ TAppInfo app( KDeviceEncryptionAppUid, KDeviceEncryptionApp );
+ iEmbedded=NULL;
+ EmbedAppL( app );
+ }
+ CleanupStack::PopAndDestroy(&ws);
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDeviceEncryptionGsPlugin::EmbedAppL
+//
+// -----------------------------------------------------------------------------
+//
+void CDeviceEncryptionGsPlugin::EmbedAppL( const TAppInfo& aApp )
+ {
+ if ( iNullService )
+ {
+ delete iNullService;
+ iNullService = NULL;
+ }
+ iNullService = CAknNullService::NewL( aApp.iUid, this );
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncGsPlugin/src/devencgspluginImplementationTable.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2005 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: ECOM proxy table for GSProfilesPlugin.
+*
+*/
+
+
+// User includes
+#include "devencgsplugin.h"
+
+// System includes
+#include <e32std.h>
+#include <implementationproxy.h>
+
+
+// Constants
+const TImplementationProxy KDeviceEncryptionGsPluginImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( 0x200255CF, CDeviceEncryptionGsPlugin::NewL ),
+ };
+
+
+// ---------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Gate/factory function
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount )
+ {
+ aTableCount = sizeof( KDeviceEncryptionGsPluginImplementationTable )
+ / sizeof( TImplementationProxy );
+ return KDeviceEncryptionGsPluginImplementationTable;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/data/20002672.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2005 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 file specifies the interface and implementation
+* information for USBUINotif Ecom Plugins.
+*
+*/
+
+#include "registryinfo.rh"
+#include "uikon.hrh"
+#include "DevEncUids.hrh"
+
+RESOURCE REGISTRY_INFO theInfo
+{
+ dll_uid = KDevEncNotifPluginUid;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KUikonUidPluginInterfaceNotifiers;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = KDevEncNotifPluginImplUid;
+ version_no = 1;
+ display_name = "TTNOTIFY2V2 Plugin 1";
+ default_data = "TTNOTIFY2V2";
+ opaque_data = "0";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/data/DevEncNotifPlugin.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2005 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: Resource file for DE Plugin.
+*
+*/
+
+NAME DENP
+
+#include <eikon.rsg>
+#include <eikon.rh>
+
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.loc>
+
+#include <devenc.loc>
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+// === QUERIES ================================================================
+
+RESOURCE DIALOG r_devenc_passwd_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = ECodeLayout;
+ label = qtn_encryption_passphrase_ask;
+ control = SECRETED
+ {
+ };
+ };
+ }
+ };
+ }
+
+RESOURCE TBUF r_devenc_invalid_passwd_string
+ {
+ buf = qtn_encryption_note_invalid_password;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/group/DevEncNotifPlugin.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2005 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: OMA DM adapter for controlling camera.
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh> //this is needed for RESOURCE_FILES_DIR
+#include "../../common/DevEncUids.hrh"
+
+TARGET devencnotifplugin.dll
+TARGETTYPE plugin
+UID 0x10009D8D KDevEncNotifPluginUid
+TARGETPATH SHARED_LIB_DIR
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../../common
+SOURCE DevEncLog.cpp
+SOURCEPATH ../src
+SOURCE DevEncPasswdDlg.cpp
+SOURCE DevEncNotifPluginImp.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../../common
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/platform/mw/uikon
+SYSTEMINCLUDE /epoc32/include/ecom
+
+// Notifier resource file
+START RESOURCE ../data/DevEncNotifPlugin.rss
+HEADER
+TARGETPATH RESOURCE_FILES_DIR
+LANGUAGE_IDS
+END
+
+// ECom resource file
+START RESOURCE ../data/20002672.rss
+//#ifdef SYMBIAN_SECURE_ECOM
+TARGET devencnotifplugin.rsc
+//#endif
+END
+
+LIBRARY euser.lib cone.lib
+LIBRARY ecom.lib eiksrv.lib
+LIBRARY commonengine.lib
+LIBRARY avkon.lib bafl.lib
+LIBRARY charconv.lib
+LIBRARY eiksrvui.lib
+DEBUGLIBRARY flogger.lib
+
+// End Of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2005 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: Device Encryption OMA DM Adapter.
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+// ROM files
+
+// Exported headers
+
+// Central repository files
+
+PRJ_MMPFILES
+DevEncNotifPlugin.mmp
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/inc/DevEncPasswdDlg.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2005 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: CCDevEncPasswdDlg declaration.
+*
+*/
+
+#ifndef CDEVENCPASSWDDLG_H
+#define CDEVENCPASSWDDLG_H
+
+#include <e32base.h> // For CActive, link against: euser.lib
+#include <e32std.h> // For RTimer, link against: euser.lib
+#include <eiknotapi.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h>
+
+class CDevEncPasswdDlg : public CActive,
+ public MEikSrvNotifierBase2
+ {
+ public:
+ // Cancel and destroy
+ ~CDevEncPasswdDlg();
+
+ // Two-phased constructor.
+ static CDevEncPasswdDlg* NewL();
+
+ // Two-phased constructor.
+ static CDevEncPasswdDlg* NewLC();
+
+ public: // Functions from MEikSrvNotifierBase2
+ /** Frees all resources owned by this notifier.
+
+ This function is called by the notifier framework when all resources allocated
+ by notifiers should be freed. As a minimum, this function should delete this
+ object (i.e. delete this;).
+
+ Note that it is important to implement this function correctly to avoid memory
+ leaks. */
+ virtual void Release();
+ /** Performs any initialisation that this notifier may require.
+
+ The function is called when the notifier is loaded (when the plug-in DLL is
+ loaded). It is called only once.
+
+ As a minimum, the function should return a TNotifierInfo instance describing
+ the notifier parameters. A good implementation would be to set this into a
+ data member, and then to return it. This is because the same information is
+ returned by Info().
+
+ The function is safe to leave from, so it is possible, although rarely necessary,
+ to allocate objects as you would normally do in a ConstructL() function as
+ part of two-phase construction.
+
+ @return Describes the parameters of the notifier. */
+ virtual TNotifierInfo RegisterL();
+ /** Gets the notifier parameters.
+
+ This is usually the same information as returned by RegisterL() but can be
+ varied at run time.
+
+ @return Describes the parameters of the notifier. */
+ virtual TNotifierInfo Info() const;
+ /** Starts the notifier.
+
+ This is called as a result of a client-side call to RNotifier::StartNotifier(),
+ which the client uses to start a notifier from which it does not expect a
+ response.
+
+ The function is synchronous, but it should be implemented so that it completes
+ as soon as possible, allowing the notifier framework to enforce its priority
+ mechanism.
+
+ It is not possible to to wait for a notifier to complete before returning
+ from this function unless the notifier is likely to finish implementing its
+ functionality immediately.
+
+ @param aBuffer Data that can be passed from the client-side. The format and
+ meaning of any data is implementation dependent.
+ @return A pointer descriptor representing data that may be returned. The format
+ and meaning of any data is implementation dependent. */
+ virtual TPtrC8 StartL(const TDesC8& aBuffer);
+ /** Starts the notifier.
+
+ This is called as a result of a client-side call to the asynchronous function
+ RNotifier::StartNotifierAndGetResponse(). This means that the client is waiting,
+ asynchronously, for the notifier to tell the client that it has finished its
+ work.
+
+ It is important to return from this function as soon as possible, and derived
+ classes may find it useful to take a copy of the reply-slot number and
+ the RMessage object.
+
+ The implementation of a derived class must make sure that Complete() is called
+ on the RMessage object when the notifier is deactivated.
+
+ This function may be called multiple times if more than one client starts
+ the notifier.
+
+ @param aBuffer Data that can be passed from the client-side. The format and
+ meaning of any data is implementation dependent.
+ @param aReplySlot Identifies which message argument to use for the reply.
+ This message argument will refer to a modifiable descriptor, a TDes8 type,
+ into which data can be returned. The format and meaning of any returned data
+ is implementation dependent.
+ @param aMessage Encapsulates a client request. */
+ virtual void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+
+ /** Cancels an active notifier.
+
+ This is called as a result of a client-side call to RNotifier::CancelNotifier().
+
+ An implementation should free any relevant resources and complete any outstanding
+ messages, if relevant. */
+ virtual void Cancel();
+ /** Updates a currently active notifier with new data.
+
+ This is called as a result of a client-side call to RNotifier::UpdateNotifier().
+
+ @param aBuffer Data that can be passed from the client-side. The format and
+ meaning of any data is implementation dependent.
+ @return A pointer descriptor representing data that may be returned. The format
+ and meaning of any data is implementation dependent. */
+ virtual TPtrC8 UpdateL(const TDesC8& aBuffer);
+ private:
+ // C++ constructor
+ CDevEncPasswdDlg();
+
+ // Second-phase constructor
+ void ConstructL();
+
+ private: // From CActive
+ // Handle completion
+ void RunL();
+
+ // How to cancel me
+ void DoCancel();
+
+ // Override to handle leaves from RunL(). Default implementation causes
+ // the active scheduler to panic.
+ TInt RunError( TInt aError );
+
+ private:
+ TNotifierInfo iInfo;
+ CAknTextQueryDialog* iDlg;
+ CAknErrorNote* iNote;
+ RMessagePtr2 iMessage; // Received message
+ TInt iReplySlot; // Reply slot
+ TBool iNeedToCompleteMessage; // Flag for releasing messages
+ TInt iResourceFileFlag; // Flag for eikon env.
+ CEikonEnv* iEikEnv; // Local eikonenv
+ RTimer iTimer;
+ };
+
+#endif // CDEVENCPASSWDDLG_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/src/DevEncNotifPluginImp.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2005 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: Printing Framework DM Adapter.
+*
+*/
+
+// INCLUDE FILES
+
+#include <eikenv.h>
+#include <implementationproxy.h>
+
+#include "DevEncUids.hrh"
+#include "DevEncPasswdDlg.h"
+#include "DevEncLog.h"
+
+// CONSTANTS
+
+
+
+// ================= EXPORTED FUNCTIONS =======================================
+
+// ----------------------------------------------------------------------------
+//
+// Instantiate notifiers
+//
+// ----------------------------------------------------------------------------
+
+LOCAL_C void CreateNotifiersL( CArrayPtrFlat<MEikSrvNotifierBase2>* aNotifiers )
+ {
+ CDevEncPasswdDlg* passWdDlg = CDevEncPasswdDlg::NewLC();
+ aNotifiers->AppendL( passWdDlg );
+ CleanupStack::Pop( passWdDlg );
+ }
+
+// ----------------------------------------------------------------------------
+//
+// Lib main entry point: Creates a notifiers array.
+//
+// ----------------------------------------------------------------------------
+
+EXPORT_C CArrayPtr<MEikSrvNotifierBase2>* NotifierArray()
+ {
+ CArrayPtrFlat<MEikSrvNotifierBase2>* notifiers = NULL;
+
+ TRAPD( err, notifiers = new (ELeave)CArrayPtrFlat<MEikSrvNotifierBase2>( 1 ));
+
+ if ( err == KErrNone )
+ {
+ if( notifiers )
+ {
+ TRAPD( err, CreateNotifiersL( notifiers ));
+ if( err )
+ {
+ TInt count = notifiers->Count();
+ while(count--)
+ {
+ (*notifiers)[count]->Release();
+ }
+ delete notifiers;
+ notifiers = NULL;
+ }
+ }
+ }
+ else
+ {
+ DFLOG( "NotifierArray: CArrayPtrFlat: error" );
+ }
+
+ return notifiers;
+ }
+
+// ----------------------------------------------------------------------------
+//
+// DLL entry point
+//
+// ----------------------------------------------------------------------------
+#ifndef EKA2
+GLDEF_C TInt E32Dll( TDllReason /* aReason */)
+ {
+ return( KErrNone );
+ }
+#endif
+
+// ----------------------------------------------------------------------------
+//
+// ECOM
+//
+// ----------------------------------------------------------------------------
+
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ {{KDevEncNotifPluginImplUid},(TFuncPtr)NotifierArray},
+#else
+ IMPLEMENTATION_PROXY_ENTRY( KDevEncNotifPluginImplUid, NotifierArray ),
+#endif
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+ return ImplementationTable;
+ }
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncNotifPlugin/src/DevEncPasswdDlg.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2005 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: CDevEncPasswdDlg implementation.
+*
+*/
+
+#include "DevEncPasswdDlg.h"
+#include "DevEncUids.hrh"
+#include "DevEncDef.h"
+#include <eiksrvui.h>
+#include <DevEncNotifPlugin.rsg>
+#include <StringLoader.h>
+#include <bautils.h> // BAFL utils (for language file)
+#include <data_caging_path_literals.hrh>
+#include <utf.h>
+#include "DevEncLog.h"
+
+#define KErrorNoteTimeout 2000000
+_LIT(KFileDrive,"z:");
+_LIT(KResourceFileName, "DevEncNotifPlugin.rsc");
+
+CDevEncPasswdDlg::CDevEncPasswdDlg() :
+ CActive( EPriorityStandard ), // Standard priority
+ iNeedToCompleteMessage( EFalse )
+ {
+ }
+
+CDevEncPasswdDlg* CDevEncPasswdDlg::NewLC()
+ {
+ CDevEncPasswdDlg* self = new ( ELeave ) CDevEncPasswdDlg();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CDevEncPasswdDlg* CDevEncPasswdDlg::NewL()
+ {
+ CDevEncPasswdDlg* self = CDevEncPasswdDlg::NewLC();
+ CleanupStack::Pop(); // self;
+ return self;
+ }
+
+void CDevEncPasswdDlg::ConstructL()
+ {
+ DFLOG( "CDevEncPasswdDlg::ConstructL Begin" );
+ CActiveScheduler::Add( this ); // Add to scheduler
+
+ iEikEnv = CEikonEnv::Static();
+ iTimer.CreateLocal();
+ TFileName filename;
+ filename += KFileDrive;
+ filename += KDC_RESOURCE_FILES_DIR; // From data_caging_path_literals.hrh
+ filename += KResourceFileName;
+ BaflUtils::NearestLanguageFile( iEikEnv->FsSession(), filename );
+ iResourceFileFlag = iEikEnv->AddResourceFileL( filename );
+ DFLOG( "CDevEncPasswdDlg::ConstructL End" );
+ }
+
+CDevEncPasswdDlg::~CDevEncPasswdDlg()
+ {
+ DFLOG( "CDevEncPasswdDlg::~CDevEncPasswdDlg Begin" );
+ Cancel();
+ iEikEnv->DeleteResourceFile( iResourceFileFlag );
+ if ( iNeedToCompleteMessage )
+ {
+ iMessage.Complete( KErrDied );
+ }
+ iTimer.Close();
+ DFLOG( "CDevEncPasswdDlg::~CDevEncPasswdDlg End" );
+ }
+
+void CDevEncPasswdDlg::DoCancel()
+ {
+
+ }
+
+void CDevEncPasswdDlg::Release()
+ {
+ delete this;
+ }
+
+CDevEncPasswdDlg::TNotifierInfo CDevEncPasswdDlg::RegisterL()
+ {
+ DFLOG( "CDevEncPasswdDlg::RegisterL Begin" );
+ iInfo.iUid = TUid::Uid( KDevEncPasswdDlgUid );
+ iInfo.iChannel = TUid::Uid( KDevEncPasswdDlgUid );
+ iInfo.iPriority = ENotifierPriorityVHigh;
+ DFLOG( "CDevEncPasswdDlg::RegisterL End" );
+ return iInfo;
+ }
+
+CDevEncPasswdDlg::TNotifierInfo CDevEncPasswdDlg::Info() const
+ {
+ return iInfo;
+ }
+
+TPtrC8 CDevEncPasswdDlg::StartL(const TDesC8& /*aBuffer*/)
+ {
+ return TPtrC8();
+ }
+
+void CDevEncPasswdDlg::StartL(const TDesC8& /*aBuffer*/, TInt aReplySlot, const RMessagePtr2& aMessage)
+ {
+ DFLOG( "CDevEncPasswdDlg::StartL Begin" );
+ iMessage = aMessage;
+ iReplySlot = aReplySlot;
+ iNeedToCompleteMessage = ETrue;
+
+ SetActive();
+ iStatus = KRequestPending;
+ TRequestStatus* stat = &iStatus;
+ User::RequestComplete( stat, KErrNone );
+ DFLOG( "CDevEncPasswdDlg::StartL End" );
+ }
+
+void CDevEncPasswdDlg::Cancel()
+ {
+ CActive::Cancel();
+ }
+
+TPtrC8 CDevEncPasswdDlg::UpdateL(const TDesC8& /*aBuffer*/)
+ {
+ return TPtrC8();
+ }
+
+
+void CDevEncPasswdDlg::RunL()
+ {
+ DFLOG( "CDevEncPasswdDlg::RunL Begin" );
+ TBuf<KMaxPasswordLength> passwdIn;
+ TBuf8<KMaxPasswordLength> passwdOut;
+
+ STATIC_CAST( CEikServAppUi*, iEikEnv->AppUi())->
+ SuppressAppSwitching( ETrue );
+
+ iDlg = CAknTextQueryDialog::NewL( passwdIn );
+ iDlg->SetMaxLength( KMaxPasswordLength );
+ DFLOG( "CDevEncPasswdDlg: PasswdDlg: ExecuteLD" );
+ TInt resp = iDlg->ExecuteLD( R_DEVENC_PASSWD_QUERY );
+ iDlg = NULL;
+
+ if ( resp == EEikBidCancel )
+ {
+ iMessage.Complete( KErrCancel );
+ iNeedToCompleteMessage = EFalse;
+ }
+ else
+ {
+ if ( CnvUtfConverter::ConvertFromUnicodeToUtf8( passwdOut, passwdIn ) )
+ {
+ iNote = new (ELeave) CAknErrorNote();
+ HBufC* prompt = StringLoader::LoadLC( R_DEVENC_INVALID_PASSWD_STRING );
+ iNote->ExecuteLD( *prompt );
+ iNote = NULL;
+ CleanupStack::PopAndDestroy( prompt );
+
+ iTimer.After( iStatus, KErrorNoteTimeout );
+ SetActive();
+ return;
+ }
+ else
+ {
+ iMessage.WriteL( iReplySlot, passwdOut );
+ iMessage.Complete( KErrNone );
+ iNeedToCompleteMessage = EFalse;
+ }
+ }
+ STATIC_CAST( CEikServAppUi*, iEikEnv->AppUi())->
+ SuppressAppSwitching( EFalse );
+ DFLOG( "CDevEncPasswdDlg::RunL End" );
+ }
+
+TInt CDevEncPasswdDlg::RunError( TInt aError )
+ {
+ if( iNeedToCompleteMessage )
+ {
+ iMessage.Complete( aError );
+ }
+
+ iNeedToCompleteMessage = EFalse;
+ iReplySlot = NULL;
+ STATIC_CAST( CEikServAppUi*, iEikEnv->AppUi())->
+ SuppressAppSwitching( EFalse );
+
+ return aError;
+ }
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/aif/DevEncUi_aif.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005 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: RSS for creating the aif file for Device Encryption UI.
+*
+*/
+
+#include <aiftool.rh>
+#include <DevEncUids.hrh>
+
+RESOURCE AIF_DATA
+ {
+ app_uid=ESSYSAPP_APP_UID;
+ hidden = KAppIsHidden;
+ num_icons = 2;
+ embeddability = KAppNotEmbeddable;
+ newfile = KAppDoesNotSupportNewFile;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/data/DevEncUi.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,857 @@
+/*
+* Copyright (c) 2005 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: Application resource file.
+*
+*/
+
+// RESOURCE IDENTIFIER
+NAME DENC // 4 letter ID
+
+// INCLUDES
+#include <appinfo.rh>
+#include <avkon.loc>
+#include <avkon.mbg> // For wait note
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <eikon.rh>
+#include <devenc.loc>
+#include "DevEnc.hrh"
+#include "DevEncUiDef.h"
+
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// Define the resource file signature
+// This resource should be empty.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+ {
+ }
+
+// -----------------------------------------------------------------------------
+//
+// Default Document Name
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+ {
+ buf = "DevEncUi";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// Define default menu and CBA key.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+ {
+ cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+ }
+
+// -----------------------------------------------------------------------------
+//
+// Localizable application information
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_devencui_localisable_app_info
+ {
+ short_caption = qtn_apps_encryption_grid;
+ caption_and_icon = CAPTION_AND_ICON_INFO
+ {
+ caption = qtn_encryption_title;
+
+ // TBD: Is this valid?
+ number_of_icons = 1;
+ icon_file = "\\resource\\apps\\DevEncUi_aif.mif";
+ };
+ }
+
+// ---------------------------------------------------------
+//
+// r_devencui_mainview
+// Define main view
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_devencui_mainview
+ {
+ menubar = r_devencui_menubar_main;
+ cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+ }
+
+// ---------------------------------------------------------
+//
+// r_devencui_encrview
+// Define encryption view
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_devencui_encrview
+ {
+ menubar = r_devencui_menubar_encr;
+ cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+ }
+
+// ---------------------------------------------------------
+//
+// r_devencui_decrview
+// Define decryption view
+//
+// ---------------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_devencui_decrview
+ {
+ menubar = r_devencui_menubar_decr;
+ cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_devencui_menubar_encr
+// Menubar for NFEUI example
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_devencui_menubar_encr
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_devencui_menu_encr; }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_devencui_menubar_decr
+// Menubar for NFEUI example
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_devencui_menubar_decr
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_devencui_menu_decr; }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_devencui_menubar
+// Menubar for NFEUI example
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_devencui_menubar_main
+ {
+ titles =
+ {
+ MENU_TITLE { menu_pane = r_devencui_menu_main; }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_devencui_menu_main
+// Main menu options
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_devencui_menu_main
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EDevEncUiCommandChange;
+ txt = qtn_options_change;
+ flags = EEikMenuItemAction;
+ },
+ MENU_ITEM
+ {
+ command = EDevEncUiCommandHelp;
+ txt = qtn_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EAknSoftkeyExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_devencui_menu_encr
+// Encryption menu options
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_devencui_menu_encr
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EDevEncUiCommandHelp;
+ txt = qtn_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EAknSoftkeyExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_devencui_menu_decr
+// Decryption menu options
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_devencui_menu_decr
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EDevEncUiCommandHelp;
+ txt = qtn_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EAknSoftkeyExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_setting_item_list
+// settings item list for the application
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_SETTING_ITEM_LIST r_devencui_setting_item_list
+ {
+ items =
+ {
+ AVKON_SETTING_ITEM
+ {
+ identifier = EPhoneEncryptionSettingItem;
+ setting_page_resource = r_settingslist_phonememory_setting_page;
+ associated_resource = r_settingslist_phonememory_popup_setting_texts;
+ name = qtn_encryption_phonememory;
+ },
+ AVKON_SETTING_ITEM
+ {
+ identifier = EMemoryCardEncryptionSettingItem;
+ setting_page_resource = r_settingslist_memorycard_setting_page;
+ associated_resource = r_settingslist_memorycard_popup_setting_texts;
+ name = qtn_encryption_memorycard;
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_phonememory_setting_page
+// hints setting page for the setting list
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_SETTING_PAGE r_settingslist_phonememory_setting_page
+ {
+ label = qtn_encryption_phonememory_setting_title;
+ type = EAknCtPopupSettingList;
+ editor_resource_id = r_settingslist_phonememory_popup_setting_list;
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_phonememory_encryption_setting_page
+// hints setting page for the setting list
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_SETTING_PAGE r_settingslist_memorycard_setting_page
+ {
+ label = qtn_encryption_memorycard_setting_title;
+ type = EAknCtPopupSettingList;
+ editor_resource_id = r_settingslist_memorycard_popup_setting_list;
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_phonememory_popup_setting_texts
+// popup setting list for the hint item of the
+// setting list
+//
+//----------------------------------------------------
+//
+RESOURCE POPUP_SETTING_LIST r_settingslist_phonememory_popup_setting_list
+ {
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_phonememory_popup_setting_texts
+// popup setting list for the hint item of the
+// setting list
+//
+//----------------------------------------------------
+//
+RESOURCE POPUP_SETTING_LIST r_settingslist_memorycard_popup_setting_list
+ {
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_hints_popup_setting_texts
+// popped up and non-popped up texts for the hint
+// item of the setting list
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_settingslist_phonememory_popup_setting_texts
+ {
+ setting_texts_resource = r_settingslist_encryption_state_texts;
+ popped_up_texts_resource = r_settingslist_hints_popup_texts;
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_hints_popup_setting_texts
+// popped up and non-popped up texts for the hint
+// item of the setting list
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_settingslist_memorycard_popup_setting_texts
+ {
+ setting_texts_resource = r_settingslist_encryption_state_texts;
+ popped_up_texts_resource = r_settingslist_hints_popup_texts;
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_hints_texts
+// non-popped up texts for the hint
+// item of the setting list
+//
+//----------------------------------------------------
+//
+RESOURCE ARRAY r_settingslist_encryption_state_texts
+ {
+ items =
+ {
+ AVKON_ENUMERATED_TEXT
+ {
+ value = 1;
+ text = qtn_encryption_phonememory_setting_on;
+ },
+ AVKON_ENUMERATED_TEXT
+ {
+ value = 0;
+ text = qtn_encryption_phonememory_setting_off;
+ }
+
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_settingslist_hints_popup_texts
+// popped up texts for the hint
+// item of the setting list
+//
+//----------------------------------------------------
+//
+RESOURCE ARRAY r_settingslist_hints_popup_texts
+ {
+ items =
+ {
+ LBUF
+ {
+ txt = qtn_encryption_phonememory_setting_on;
+ },
+ LBUF
+ {
+ txt = qtn_encryption_phonememory_setting_off;
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_devencui_confirmation_query
+// confirmation query for the application
+//
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_devencui_confirmation_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EDevEncUiDlgCIdConfirmationQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ label = qtn_encryption_note_lock;
+ };
+ }
+ };
+ }
+
+// ---------------------------------------------------------
+//
+// r_devencui_encrypt_confirmation_query_dialog
+// About dialog - show version and copyright info etc.
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE DIALOG r_devencui_encrypt_confirmation_query_dialog
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ label = qtn_encryption_note_header;
+ headinglayout = R_AVKON_WML_SIGN_QUERY_HEADING_PANE;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ message = qtn_encryption_note_lock;
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_devencui_data_query
+// data query for the application
+//
+//----------------------------------------------------
+RESOURCE DIALOG r_devencui_data_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EDevEncUiDlgCIdDataQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EDataLayout;
+ control =
+ EDWIN
+ {
+ width = KMaxFileNameLength;
+ lines = 1;
+ maxlength = KMaxFileNameLength;
+ };
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_devencui_code_query
+// secret data query for the application
+//
+//----------------------------------------------------
+RESOURCE DIALOG r_devencui_code_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EDevEncUiSecretCodeQueryId;
+ control = AVKON_DATA_QUERY
+ {
+ layout = ECodeLayout;
+ label = qtn_encryption_passphrase_ask;
+ control = SECRETED
+ {
+ num_letters = KMaxPasswordLength;
+ };
+ };
+ }
+ };
+ }
+
+//----------------------------------------------------
+//
+// r_devencui_list_query
+// list query for the application
+//
+//----------------------------------------------------
+//
+//RESOURCE AVKON_LIST_QUERY r_devencui_list_query
+// {
+// items =
+// {
+// AVKON_LIST_QUERY_DLG_LINE
+// {
+// control = AVKON_LIST_QUERY_CONTROL
+// {
+// listtype = EAknCtSinglePopupMenuListBox;
+// heading = qtn_encryption_selectkey;
+// listbox = AVKON_LIST_QUERY_LIST
+// {
+// // array of items will be defined dynamically
+// };
+// };
+// }
+// };
+// }
+RESOURCE DIALOG r_devencui_list_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtListQueryControl;
+ id = EListQueryControl;
+ control = AVKON_LIST_QUERY_CONTROL
+ {
+ listtype = EAknCtSinglePopupMenuListBox;
+ heading = qtn_encryption_selectkey;
+ listbox = AVKON_LIST_QUERY_LIST
+ {
+ };
+ };
+ }
+ };
+ }
+
+// ---------------------------------------------------------
+// r_devencui_encryption_listbox
+//
+//
+// ---------------------------------------------------------
+//
+RESOURCE LISTBOX r_devencui_encryption_listbox
+ {
+ array_id = r_devencui_encryption_listbox_items;
+ flags = EAknListBoxSelectionList;
+ }
+
+// ---------------------------------------------------------
+// r_devencui_encryption_listbox_items
+//
+//
+// ---------------------------------------------------------
+//
+RESOURCE ARRAY r_devencui_encryption_listbox_items
+ {
+ items =
+ {
+ LBUF
+ {
+ txt = "\t"qtn_encryption_encrypt"\t\t";
+ },
+ LBUF
+ {
+ txt = "\t"qtn_encryption_encryptsave"\t\t";
+ },
+ LBUF
+ {
+ txt = "\t"qtn_encryption_encryptload"\t\t";
+ }
+ };
+ }
+
+// ---------------------------------------------------------
+// r_devencui_decryption_listbox
+//
+//
+// ---------------------------------------------------------
+//
+RESOURCE LISTBOX r_devencui_decryption_listbox
+ {
+ array_id = r_devencui_decryption_listbox_items;
+ flags = EAknListBoxSelectionList;
+ }
+
+// ---------------------------------------------------------
+// r_devencui_decryption_listbox_items
+//
+//
+// ---------------------------------------------------------
+//
+RESOURCE ARRAY r_devencui_decryption_listbox_items
+ {
+ items =
+ {
+ LBUF
+ {
+ txt = "\t"qtn_encryption_decrypt"\t\t";
+ },
+ LBUF
+ {
+ txt = "\t"qtn_encryption_decryptturnoff"\t\t";
+ }
+ };
+ }
+
+RESOURCE DIALOG r_devencui_creating_key_waitnote
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EDevEncUiWaitNoteId;
+ control = AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_encryption_note_wait;
+ //imagefile = "z:\\system\data\avkon.mbm";
+ imagefile = "z:\\resource\apps\avkon2.mbm";
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// Resources for messages.
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE TBUF r_devencui_text_encryption_on { buf =
+ qtn_encryption_phonememory_setting_on; }
+
+RESOURCE TBUF r_devencui_text_encryption_off { buf =
+ qtn_encryption_phonememory_setting_off; }
+
+RESOURCE TBUF r_devencui_text_apps_grid { buf =
+ qtn_apps_encryption_grid; }
+
+RESOURCE TBUF r_devencui_text_title { buf =
+ qtn_encryption_title; }
+
+RESOURCE TBUF r_devencui_text_phonememory { buf =
+ qtn_encryption_phonememory; }
+
+RESOURCE TBUF r_devencui_text_memorycard { buf =
+ qtn_encryption_memorycard; }
+
+RESOURCE TBUF r_devencui_text_note_lock { buf =
+ qtn_encryption_note_lock; }
+
+RESOURCE TBUF r_devencui_text_note_encrypting { buf =
+ qtn_encryption_note_encrypting; }
+
+RESOURCE TBUF r_devencui_text_note_phone_decrypting { buf =
+ qtn_encryption_note_phone_decrypting; }
+
+RESOURCE TBUF r_devencui_text_encrypt { buf =
+ qtn_encryption_encrypt; }
+
+RESOURCE TBUF r_devencui_text_encryptsave { buf =
+ qtn_encryption_encryptsave; }
+
+RESOURCE TBUF r_devencui_text_encryptload { buf =
+ qtn_encryption_encryptload; }
+
+RESOURCE TBUF r_devencui_text_note_wait { buf =
+ qtn_encryption_note_wait; }
+
+RESOURCE TBUF r_devencui_text_passphrase_protect { buf =
+ qtn_encryption_passphrase_protect; }
+
+RESOURCE TBUF r_devencui_text_filename { buf =
+ qtn_encryption_filename; }
+
+RESOURCE TBUF r_devencui_text_note_saveinfo { buf =
+ qtn_encryption_note_saveinfo; }
+
+RESOURCE TBUF r_devencui_text_selectkey { buf =
+ qtn_encryption_selectkey; }
+
+RESOURCE TBUF r_devencui_text_passphrase_ask { buf =
+ qtn_encryption_passphrase_ask; }
+
+RESOURCE TBUF r_devencui_text_note_memorycard_encrypted { buf =
+ qtn_encryption_note_memorycard_encrypted; }
+
+RESOURCE TBUF r_devencui_text_decrypt { buf =
+ qtn_encryption_decrypt; }
+
+RESOURCE TBUF r_devencui_text_decryptturnoff { buf =
+ qtn_encryption_decryptturnoff; }
+
+RESOURCE TBUF r_devencui_text_note_decrypting { buf =
+ qtn_encryption_note_decrypting; }
+
+RESOURCE TBUF r_devencui_text_note_decryptingdestroy { buf =
+ qtn_encryption_note_decryptingdestroy; }
+
+RESOURCE TBUF r_devencui_text_note_decrypt_loadkey { buf =
+ qtn_encryption_note_decrypt_loadkey; }
+
+RESOURCE TBUF r_devencui_text_note_insertunencrypted { buf =
+ qtn_encryption_note_insertunencrypted; }
+
+RESOURCE TBUF r_devencui_text_note_decrypt_nomemrycard { buf =
+ qtn_encryption_note_decrypt_nomemrycard; }
+
+RESOURCE TBUF r_devencui_text_note_memorycard_unencrypted { buf =
+ qtn_encryption_note_memorycard_unencrypted; }
+
+RESOURCE TBUF r_devencui_text_note_insertencrypted { buf =
+ qtn_encryption_note_insertencrypted; }
+
+RESOURCE TBUF r_devencui_text_note_encryptioninterrupt { buf =
+ qtn_encryption_note_encryptioninterrupt; }
+
+RESOURCE TBUF r_devencui_text_phonememory_setting_title { buf =
+ qtn_encryption_phonememory_setting_title; }
+
+RESOURCE TBUF r_devencui_text_memorycard_setting_title { buf =
+ qtn_encryption_memorycard_setting_title; }
+
+RESOURCE TBUF r_devencui_text_note_wrongkeyfile { buf =
+ qtn_encryption_note_wrongkeyfile; }
+
+RESOURCE TBUF r_devencui_text_note_unusedmemorycard { buf =
+ qtn_encryption_note_unusedmemorycard; }
+
+RESOURCE TBUF r_devencui_text_encrypt_process { buf =
+ qtn_encryption_encrypt_process; }
+
+RESOURCE TBUF r_devencui_text_decrypt_process { buf =
+ qtn_encryption_decrypt_process; }
+
+RESOURCE TBUF r_devencui_text_note_insertoff_unusedmemorycard { buf =
+ qtn_encryption_note_insertoff_unusedmemorycard; }
+
+RESOURCE TBUF r_devencui_text_note_inserton_unusedmemorycard { buf =
+ qtn_encryption_note_inserton_unusedmemorycard; }
+
+RESOURCE TBUF r_devencui_text_phonememory_setting_on { buf =
+ qtn_encryption_phonememory_setting_on; }
+
+RESOURCE TBUF r_devencui_text_phonememory_setting_off { buf =
+ qtn_encryption_phonememory_setting_off; }
+
+RESOURCE TBUF r_devencui_text_memorycard_setting_on { buf =
+ qtn_encryption_memorycard_setting_on; }
+
+RESOURCE TBUF r_devencui_text_memorycard_setting_off { buf =
+ qtn_encryption_memorycard_setting_off; }
+
+RESOURCE TBUF r_devencui_text_apps_list { buf =
+ qtn_apps_encryption_list; }
+
+RESOURCE TBUF r_devencui_note_header { buf =
+ qtn_encryption_note_header; }
+
+RESOURCE TBUF r_devencui_note_admin_control { buf =
+ qtn_encryption_note_admin_control; }
+
+// Own text buffers
+
+RESOURCE TBUF r_devencui_text_corrupted { buf =
+ qtn_encryption_corrupted; }
+
+RESOURCE TBUF r_devencui_text_battery_low { buf =
+ qtn_encryption_battery_low; }
+
+RESOURCE TBUF r_devencui_text_no_keys_found { buf =
+ qtn_encryption_note_no_keys_found; }
+
+RESOURCE TBUF r_devencui_text_invalid_password { buf =
+ qtn_encryption_note_invalid_password; }
+
+RESOURCE TBUF r_devencui_text_key_error { buf =
+ qtn_encryption_note_key_error; }
+
+RESOURCE TBUF r_devencui_text_bad_name { buf =
+ qtn_encryption_note_bad_name; }
+
+RESOURCE TBUF r_devencui_text_file_exists { buf =
+ qtn_encryption_note_file_exists; }
+
+RESOURCE TBUF r_devencui_fota_not_poss { buf =
+ qtn_conf_encr_not_poss; }
+
+//----------------------------------------------------
+//
+// r_devencui_confirmation_query_ok_empty
+//
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_devencui_confirmation_query_ok_empty
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationLayout;
+ };
+ }
+ };
+ }
+
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/data/DevEncUi_reg.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2005 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: Application registration resource file.
+*
+*/
+
+#include <appinfo.rh>
+#include <data_caging_paths_strings.hrh>
+#include <DevEncUi.rsg>
+#include <devenc.loc>
+#include "DevEncUids.hrh"
+
+UID2 KUidAppRegistrationResourceFile
+UID3 KDevEncUiUid
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "DevEncUi";
+ localisable_resource_file = APP_RESOURCE_DIR"\\DevEncUi";
+ localisable_resource_id = R_DEVENCUI_LOCALISABLE_APP_INFO;
+ embeddability = KAppEmbeddable;
+ hidden = KAppIsHidden;
+ newfile = KAppDoesNotSupportNewFile;
+ datatype_list =
+ {
+ DATATYPE
+ {
+ priority = EDataTypePriorityHigh;
+ type = "application/vnd.nokia.pk5";
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/group/DevEncUi.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2005 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: Project specification file for DevEncUi.
+*
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "../../common/DevEncUids.hrh"
+
+TARGET devencui.exe
+TARGETTYPE exe
+UID 0x0 KDevEncUiUid
+//EPOCSTACKSIZE 0x5000
+
+VENDORID KDevEncNokiaVID
+CAPABILITY CAP_GENERAL_DLL CAP_APPLICATION WriteDeviceData DiskAdmin -DRM
+
+SOURCEPATH ../src
+SOURCE DevEncUi.cpp
+SOURCE DevEncUiApplication.cpp
+SOURCE DevEncUiAppui.cpp
+SOURCE DevEncUiCreateKeyProcess.cpp
+SOURCE DevEncUiDecrView.cpp
+SOURCE DevEncUiDecrViewContainer.cpp
+SOURCE DevEncUiDocument.cpp
+SOURCE DevEncUiEncrView.cpp
+SOURCE DevEncUiEncrViewContainer.cpp
+SOURCE DevEncUiEncryptionOperator.cpp
+SOURCE DevEncUiFileManager.cpp
+SOURCE DevEncUiMainView.cpp
+SOURCE DevEncUiMainViewContainer.cpp
+SOURCE DevEncUiMemoryEntity.cpp
+SOURCE DevEncUiSecretMinMaxCodeQuery.cpp
+SOURCE DevEncUiSettingItemList.cpp
+SOURCE DevEncUiTimer.cpp
+
+SOURCEPATH ../../common
+SOURCE DevEncLog.cpp
+
+SOURCEPATH ../data
+
+START RESOURCE DevEncUi.rss
+HEADER
+TARGETPATH APP_RESOURCE_DIR
+LANGUAGE_IDS
+END //RESOURCE
+
+START RESOURCE DevEncUi_reg.rss
+DEPENDS DevEncUi.rsg
+HEADER
+TARGETPATH /private/10003a3f/apps
+END //RESOURCE
+
+USERINCLUDE ../inc
+USERINCLUDE ../../common
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE /epoc32/include/platform/mw/uikon
+
+LIBRARY aknicon.lib
+LIBRARY aknnotify.lib
+LIBRARY aknskins.lib
+LIBRARY aknskinsrv.lib
+LIBRARY aknswallpaperutils.lib
+LIBRARY apparc.lib
+LIBRARY avkon.lib
+LIBRARY bafl.lib
+LIBRARY centralrepository.lib
+LIBRARY charconv.lib
+LIBRARY commonengine.lib
+LIBRARY cone.lib
+LIBRARY devenccommonutils.lib
+LIBRARY efsrv.lib
+LIBRARY egul.lib
+LIBRARY eikcoctl.lib
+LIBRARY eikcore.lib
+LIBRARY eikctl.lib
+LIBRARY eikdlg.lib
+LIBRARY eiksrv.lib
+LIBRARY estor.lib
+LIBRARY euser.lib
+LIBRARY hlplch.lib // Help launcher
+LIBRARY platformenv.lib // for system path literals
+LIBRARY secui.lib
+LIBRARY ws32.lib
+LIBRARY terminalcontrol.lib
+DEBUGLIBRARY flogger.lib
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2005 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: Provides the information required for building DevEncUi.
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// Exported headers
+../loc/devenc.loc APP_LAYER_LOC_EXPORT_PATH(devenc.loc)
+
+//../inc/encryption.hlp.hrh /epoc32/include/cshelp/encryption.hlp.hrh
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+ OPTION TARGETFILE DevEncUi_aif.mif
+ OPTION SOURCES \
+ -c8,8 qgn_menu_encryption.svg
+END
+
+PRJ_MMPFILES
+DevEncUi.mmp
+
+//gnumakefile Icons_aif_scalable_dc.mk
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/group/qgn_menu_encryption.svg Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="44" height="44" viewBox="0 0 44 44"
+ overflow="visible" enable-background="new 0 0 44 44" xml:space="preserve">
+<rect fill="none" width="44" height="44"/>
+<g>
+ <path d="M10.21,2.25c-1.654,0-3,1.346-3,3v26c0,1.654,1.346,3,3,3h14c1.654,0,3-1.346,3-3v-26c0-1.654-1.346-3-3-3H10.21z"/>
+ <path fill="#625C52" d="M26.21,31.25c0,1.102-0.9,2-2,2h-14c-1.1,0-2-0.898-2-2v-26c0-1.1,0.9-2,2-2h14c1.1,0,2,0.9,2,2V31.25z"/>
+ <path fill="#B2A99F" d="M24.21,3.25h-14c-1.1,0-2,0.9-2,2v4.432l1-0.063V5.25h16v7.381l1-0.5V5.25
+ C26.21,4.15,25.31,3.25,24.21,3.25z"/>
+ <rect x="10.21" y="6.25" fill="#ACA49C" width="14" height="18"/>
+ <polygon fill="#FFFFFF" points="23.21,13.648 23.21,7.25 11.21,7.25 11.21,19.648 "/>
+ <path fill="#4C4642" d="M19.21,32.25c0.553,0,1-0.449,1-1v-4c0-0.551-0.447-1-1-1h-4c-0.553,0-1,0.449-1,1v4c0,0.551,0.447,1,1,1
+ H8.489c0.348,0.594,0.986,1,1.721,1h14c0.734,0,1.373-0.406,1.721-1H19.21z"/>
+ <rect x="15.21" y="27.25" fill="#FFFFFF" width="4" height="4"/>
+</g>
+<g>
+ <g>
+ <path d="M37.214,36.25l-5.586,4H20.214c-1.1,0-2-0.9-2-2v-15c0-1.1,0.9-2,2-2h15c1.1,0,2,0.9,2,2V36.25z"/>
+ <path fill="#2C5190" d="M20.214,22.25c-0.265,0-0.516,0.104-0.705,0.295c-0.19,0.189-0.295,0.44-0.295,0.705v15
+ c0,0.265,0.104,0.516,0.295,0.705c0.189,0.19,0.44,0.295,0.705,0.295c0,0,10.224,0,11,0c0.463-0.464,4.537-2.951,5-3.414
+ c0-0.776,0-12.586,0-12.586c0-0.552-0.448-1-1-1H20.214z"/>
+ <path fill="#708ACE" d="M20.214,22.25c-0.265,0-0.516,0.104-0.705,0.295c-0.19,0.189-0.295,0.44-0.295,0.705v12l17-8.5v-3.5
+ c0-0.552-0.448-1-1-1H20.214z"/>
+ <rect x="32.214" y="25.25" fill="#E4C787" width="4" height="2"/>
+ <rect x="32.214" y="29.25" fill="#E4C787" width="4" height="2"/>
+ <rect x="32.214" y="33.25" fill="#E4C787" width="4" height="2"/>
+ <path d="M30.214,28.776c0-1.395-1.132-2.526-2.526-2.526c-1.396,0-2.527,1.132-2.527,2.526c0,0.933,0.51,1.739,1.264,2.177
+ l-2,3.562l-0.242,1.048l6.033-0.048l-1.265-4.562C29.7,30.516,30.214,29.709,30.214,28.776z"/>
+ </g>
+ <path fill="#FFFFFF" d="M29.214,28.776c0-1.395-1.132-2.526-2.526-2.526c-1.396,0-2.527,1.132-2.527,2.526
+ c0,0.933,0.51,1.739,1.264,2.177l-1,3.562h4.526l-1-3.562C28.7,30.516,29.214,29.709,29.214,28.776z"/>
+</g>
+<g>
+ <path d="M13.553,13.502c-1.413,0-1.537-1.207-1.537-2.37c0-1.052,0.174-2.26,1.562-2.26c1.369,0,1.512,1.195,1.512,2.26
+ C15.09,12.308,14.953,13.502,13.553,13.502z M13.553,9.444c-0.492,0-0.523,0.691-0.523,1.688c0,1.163,0.05,1.798,0.523,1.798
+ c0.466,0,0.517-0.635,0.517-1.798C14.07,10.129,14.039,9.444,13.553,9.444z"/>
+ <path d="M18.706,13.452h-2.863v-0.535h0.959V9.656l-0.959,0.206V9.326l1.419-0.441h0.541v4.032h0.903V13.452z"/>
+ <path d="M20.872,13.502c-1.413,0-1.537-1.207-1.537-2.37c0-1.052,0.174-2.26,1.562-2.26c1.369,0,1.513,1.195,1.513,2.26
+ C22.409,12.308,22.272,13.502,20.872,13.502z M20.872,9.444c-0.492,0-0.523,0.691-0.523,1.688c0,1.163,0.05,1.798,0.523,1.798
+ c0.466,0,0.517-0.635,0.517-1.798C21.389,10.129,21.357,9.444,20.872,9.444z"/>
+ <path d="M15.047,19.493h-2.863v-0.535h0.959v-3.261l-0.959,0.205v-0.535l1.419-0.441h0.542v4.032h0.902V19.493z"/>
+ <path d="M17.213,19.543c-1.413,0-1.537-1.208-1.537-2.371c0-1.052,0.174-2.259,1.562-2.259c1.369,0,1.513,1.194,1.513,2.259
+ C18.75,18.348,18.613,19.543,17.213,19.543z M17.213,15.485c-0.492,0-0.523,0.69-0.523,1.687c0,1.163,0.05,1.799,0.523,1.799
+ c0.466,0,0.516-0.636,0.516-1.799C17.729,16.17,17.697,15.485,17.213,15.485z"/>
+ <path d="M22.365,19.493h-2.862v-0.535h0.958v-3.261l-0.958,0.205v-0.535l1.419-0.441h0.541v4.032h0.902V19.493z"/>
+</g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUi.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2005 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: Enumerations used in the application UI.
+*
+*/
+
+#ifndef __DEVENCUI_HRH__
+#define __DEVENCUI_HRH__
+
+// DevEncUi enumerate command codes
+enum TDevEncUiCommandIds
+ {
+ EDevEncUiCommandChange = 4242, // start value must not be 0
+ EDevEncUiCommandHelp,
+
+ // These MMC-related commands are used in the Encryption view.
+ EDevEncUiCommandEncryptWithoutSavingKey,
+ EDevEncUiCommandEncryptAndSaveKey,
+ EDevEncUiCommandEncryptWithRestoredKey,
+
+ // These MMC-related commands are used in the Decryption view.
+ EDevEncUiCommandDecrypt,
+ EDevEncUiCommandDecryptAndTurnOffEncryption,
+
+ EDevEncUiInternalCommandEncrypt,
+ EDevEncUiInternalCommandDecrypt,
+
+ // ID's of some UI items
+ EPhoneEncryptionSettingItem,
+ EMemoryCardEncryptionSettingItem,
+ EDevEncUiDlgCIdConfirmationQuery,
+ EDevEncUiDlgCIdDataQuery,
+ EDevEncUiWaitNoteId,
+ EDevEncUiSecretCodeQueryId
+ };
+
+enum TDevEncUiMemoryType
+ {
+ EPhoneMemory,
+ EMemoryCard
+ };
+
+enum TDevEncUiMemoryEntityState
+ {
+ EMemStateUnknown,
+ EMemDecrypted,
+ EMemEncrypting,
+ EMemEncrypted,
+ EMemDecrypting,
+ EMemCorrupted
+ };
+
+enum TDevEncUiViewIds
+ {
+ EDevEncUiMainViewId = 1,
+ EDevEncUiEncrViewId,
+ EDevEncUiDecrViewId,
+ EDevEncUiNumberOfViews
+ };
+
+#endif // __DEVENCUI_HRH__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUi.pan Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2005 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: Application panic codes.
+*
+*/
+
+#ifndef __DEVENCUI_PAN__
+#define __DEVENCUI_PAN__
+
+/** DevEncUi application panic codes */
+enum TDevEncUiPanics
+ {
+ EDevEncUi = 1
+ // add further panics here
+ };
+
+inline void Panic( TDevEncUiPanics aReason )
+ {
+ _LIT(applicationName,"DevEncUi");
+ User::Panic(applicationName, aReason);
+ }
+
+#endif // __DEVENCUI_PAN__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiApplication.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2005 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: Application entry point.
+*
+*/
+
+#ifndef __DEVENCUIAPPLICATION_H__
+#define __DEVENCUIAPPLICATION_H__
+
+// INCLUDES
+#include <aknapp.h>
+
+// CLASS DECLARATION
+
+/**
+* CDevEncUiApplication application class.
+* Provides factory to create concrete document object.
+* An instance of CDevEncUiApplication is the application part of the
+* AVKON application framework for the DEVENCUI example application.
+*/
+class CDevEncUiApplication : public CAknApplication
+ {
+ public: // Functions from base classes
+
+ /**
+ * From CApaApplication, AppDllUid.
+ * @return Application's UID (KUidDEVENCUIApp).
+ */
+ TUid AppDllUid() const;
+
+ protected: // Functions from base classes
+
+ /**
+ * From CApaApplication, CreateDocumentL.
+ * Creates CDevEncUiDocument document object. The returned
+ * pointer in not owned by the CDevEncUiApplication object.
+ * @return A pointer to the created document object.
+ */
+ CApaDocument* CreateDocumentL();
+ };
+
+#endif // __DEVENCUIAPPLICATION_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiAppui.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2005 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 class of the application.
+*
+*/
+
+#ifndef __DEVENCUIAPPUI_H__
+#define __DEVENCUIAPPUI_H__
+
+// INCLUDES
+#include <aknViewAppUi.h>
+#include <AknQueryDialog.h>
+#include <DevEncMmcObserver.h>
+#include "DevEncUiMemInfoObserver.h"
+#include "DevEncUiTimer.h"
+
+// FORWARD DECLARATIONS
+class CDevEncUiEncrView;
+class CDevEncUiEncryptionOperator;
+class CDevEncUiDecrView;
+class CDevEncUiMainView;
+class CDevEncUiMemoryEntity;
+class CRepository;
+
+// CLASS DECLARATION
+/**
+* CDevEncUiAppUi application UI class.
+* Interacts with the user through the UI and request message processing
+* from the handler class
+*/
+class CDevEncUiAppUi : public CAknViewAppUi,
+ public MMemoryCardObserver,
+ public MDevEncUiMemInfoObserver,
+ public MDevEncUiTimerCallback
+ {
+ public: // Constructors and destructor
+
+ /**
+ * ConstructL.
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * CDevEncUiAppUi.
+ * C++ default constructor. This needs to be public due to
+ * the way the framework constructs the AppUi
+ */
+ CDevEncUiAppUi();
+
+ /**
+ * Virtual Destructor.
+ */
+ virtual ~CDevEncUiAppUi();
+
+ /**
+ * Dynamically initialises a menu pane.
+ * The Uikon framework calls this function, if it is implemented in a
+ * menu's observer, immediately before the menu pane is activated.
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * From MMemoryCardObserver.
+ */
+ void MMCStatusChangedL();
+
+ /**
+ * From MDevEncUiMemInfoObserver.
+ */
+ void UpdateInfo( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint aProgress );
+
+ /**
+ * From MDevEncUiTimerCallback
+ */
+ void Timeout();
+
+ protected:
+ /**
+ * From CAknViewAppUi. Handles changes in keyboard focus when an
+ * application switches to foreground.
+ */
+ void HandleForegroundEventL( TBool aForeground );
+
+ private: // Functions from base classes
+
+ /**
+ * From CEikAppUi, HandleCommandL.
+ * Takes care of command handling.
+ * @param aCommand Command to be handled.
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * Displays the context-sensitive help.
+ */
+ void DisplayHelpL();
+
+ void DoUpdateInfoL( TDevEncUiMemoryType aType,
+ TUint aState );
+
+ /**
+ * From CEikAppUi.
+ * Command line processing.
+ *
+ * When DocumentHandler wants to launch NpdViewer as a standalone
+ * application, it use RApaLsSession::StartDocument(filename, ...).
+ *
+ * CEikonEnv::ConstructAppFromCommandLineL(...), at first, pass
+ * the filename information to ProcessCommandParametersL
+ * correctly. But default CEikAppUi::ProcessCommandParametersL
+ * overwrite it's reference parameter (TFileName& aDocumentName) to
+ * application's defualt document name such as "NpdViewer.ini".
+ * (In EikAppUi.cpp,
+ * Application()->GetDefaultDocumentFileName(aDocumentName);
+ * do this).
+ * So, when CEikonEnv::ConstructAppFromCommandLineL(...) calls
+ * CApaDocument::OpenFileL(...), the filename information from
+ * Document Handler had been lost.
+ *
+ * On the other hand, when DocumentHandler wants to launch NpdViewer
+ * as a embeded application, it use CApaDocument::OpenFileL() directly
+ * and never call ProcessCommandParametersL.
+ *
+ * So, in order to pass a correct filename information to OpenFileL
+ * in both case, we decide to override this function.
+ *
+ * @param aCommand command. (ignored)
+ * @param aDocumentName Filename.
+ * @param aTail optional command line parampeter. (ignored)
+ * @return ETrue if aDocumentName file exists.
+ */
+ TBool ProcessCommandParametersL(
+ TApaCommand aCommand,
+ TFileName& aDocumentName,
+ const TDesC8& aTail);
+
+ /**
+ * From CEikAppUi.
+ * Start fileviewer with specified filename.
+ * Both standalone and embeded case, this function is really called
+ *
+ * @param aFilename Filename to view.
+ */
+ void OpenFileL(const TDesC& aFilename);
+
+ /**
+ * Copy a file to a new path (Others folder)
+ **/
+ void CopyL(const TDesC &anOld, const TDesC &aNew);
+
+ public:
+
+ /**
+ * Start fileviewer with specified file handle.
+ * Both standalone and embeded case, this function is really called
+ *
+ * @param aFile File handle.
+ */
+ void OpenFileL(RFile& aFile);
+
+ private: // Data
+
+ /** Created by this class, ownership transferred to CAknAppUi */
+ CDevEncUiMainView* iMainView;
+
+ /** Created by this class, ownership transferred to CAknAppUi */
+ CDevEncUiEncrView* iEncryptionView;
+
+ /** Created by this class, ownership transferred to CAknAppUi */
+ CDevEncUiDecrView* iDecryptionView;
+
+ /** Owned */
+ CDevEncUiEncryptionOperator* iEncOperator;
+
+ /** Owned */
+ RArray<CDevEncUiMemoryEntity*> iMemEntities;
+
+ /** Owned */
+ CRepository* iCrSettings;
+
+ /** Owned */
+ CMmcObserver* iObserver;
+
+ /** Owned */
+ RFs iFs;
+
+ /** Holds the current MMC mount status (from file server) */
+ TInt iMmcStatus;
+
+ /** Hold the current MMC encryption status (from NFE) */
+ TInt iMmcEncState;
+
+ /** ETrue if a Mmc status update is ongoing (to prevent re-entry) */
+ TBool iStatusUpdateOngoing;
+
+ /** Owned */
+ CDevEncUiTimer* iTimer;
+
+ /** ETrue if the application is foreground */
+ TBool iForeground;
+
+ /** ETrue if the application hasn't completed yet the construction phase */
+ TBool iConstructionOnGoing;
+ };
+
+#endif // __DEVENCUIAPPUI_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiConfig.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+#ifndef __DEVENCUI_CONFIG_H__
+#define __DEVENCUI_CONFIG_H__
+
+// Comment this out to disable logs
+#define DEVENCUI_LOG
+
+#endif // __DEVENCUI_CONFIG_H__
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiContainerEventCallback.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005 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: Mixin class for notifying observers about user selections.
+*
+*/
+
+#ifndef DEVENCUI_CONTAINEREVENTCALLBACK_H_
+#define DEVENCUI_CONTAINEREVENTCALLBACK_H_
+
+#include "DevEnc.hrh"
+
+class MContainerEventCallback
+ {
+ public:
+ virtual void EncryptionStatusChangeReq(
+ TDevEncUiMemoryType aType ) = 0;
+ };
+
+#endif /*DEVENCUI_CONTAINEREVENTCALLBACK_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiCreateKeyProcess.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2005 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: Shows a progress notification during the creation of keys.
+*
+*/
+
+#ifndef DEVENCUI_CREATEKEYPROCESS_H_
+#define DEVENCUI_CREATEKEYPROCESS_H_
+
+#include <AknWaitNoteWrapper.h>
+#include <e32base.h>
+
+class CDevEncUiCreateKeyProcess : public CBase,
+ public MAknBackgroundProcess
+
+ {
+ public:
+ virtual ~CDevEncUiCreateKeyProcess();
+ static TBool RunLD();
+
+ private:
+ CDevEncUiCreateKeyProcess();
+ void ProcessFinished();
+ void DialogDismissedL( TInt aButtonId );
+ TBool IsProcessDone() const;
+ void StepL();
+
+ // Data
+ TInt iCount;
+ };
+
+#endif /*DEVENCUI_CREATEKEYPROCESS_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiDecrView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2005 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: Decryption view.
+*
+*/
+
+#ifndef __DEVENCUI_DECRVIEW_H__
+#define __DEVENCUI_DECRVIEW_H__
+
+//INCLUDES
+
+// System includes
+#include <aknview.h>
+
+//User Includes
+#include "DevEncUiDocument.h"
+
+// FORWARD DECLARATIONS
+class CDevEncUiDecrViewContainer;
+class CDevEncUiMemoryEntity;
+
+class CDevEncUiDecrView: public CAknView
+ {
+ public: // constructors and destructor
+
+ /**
+ * Symbian OS 2 phase constructor.
+ * Constructs the CDevEncUiDecrView using the NewLC method, popping
+ * the constructed object from the CleanupStack before returning it.
+ *
+ * @param aRect The rectangle for this window
+ * @return The newly constructed CDevEncUiDecrView
+ */
+ static CDevEncUiDecrView* NewL( RArray<CDevEncUiMemoryEntity*>& aMemEntities );
+
+ /**
+ * Symbian OS 2 phase constructor.
+ * Constructs the CDevEncUiDecrView using the constructor and ConstructL
+ * method, leaving the constructed object on the CleanupStack before returning it.
+ *
+ * @param aRect The rectangle for this window
+ * @return The newly constructed CDevEncUiDecrView
+ */
+ static CDevEncUiDecrView* NewLC( RArray<CDevEncUiMemoryEntity*>& aMemEntities );
+ CDevEncUiDecrViewContainer* Container();
+
+ /**
+ * Destructor. Frees up memory.
+ */
+ ~CDevEncUiDecrView();
+ CDevEncUiAppUi& GetAppUi();
+
+ protected:
+ /**
+ * HandleStatusPaneSizeChange.
+ * Called by the framework when the application status pane
+ * size is changed.
+ */
+ void HandleStatusPaneSizeChange();
+
+ void HandleResourceChangeL( TInt aType );
+
+ private: // from CAknView
+
+ /**
+ * Called by the framework
+ * @return The Uid for this view
+ */
+ TUid Id() const;
+
+ /**
+ * From CEikAppUi, takes care of command handling for this view.
+ * @param aCommand command to be handled
+ */
+ void HandleCommandL( TInt aCommand );
+
+ CDevEncUiDecrView( RArray<CDevEncUiMemoryEntity*>& aMemEntities );
+
+ /**
+ * Called by the framework when the view is activated. Constructs the
+ * container if necessary, setting this view as its MOP parent, and
+ * adding it to the control stack.
+ */
+ void DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * Called by the framework when the view is deactivated.
+ * Removes the container from the control stack and deletes it.
+ */
+ void DoDeactivate();
+
+ private: // constructors
+
+ /**
+ * Symbian OS 2nd phase constructor.
+ * Uses the superclass constructor to construct the view using the
+ * R_EMCCVIEWSWITCHED_VIEW1 resource.
+ */
+ void ConstructL();
+
+ private: // data
+ /** Owned. What this view will display */
+ CDevEncUiDecrViewContainer* iContainer;
+ TUid iId;
+
+ /** Not owned */
+ RArray<CDevEncUiMemoryEntity*>& iMemEntities;
+
+ };
+
+#endif // __DEVENCUI_DECRVIEW_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiDecrViewContainer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2005 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: Container for the decryption view.
+*
+*/
+
+#ifndef __DEVENCUI_GRAPHIC_VIEW_CONTAINER_H__
+#define __DEVENCUI_GRAPHIC_VIEW_CONTAINER_H__
+
+//INCLUDES
+
+//System Includes
+#include <coecntrl.h>
+#include <aknview.h>
+#include <eiklbo.h>
+
+//User Includes
+
+//FORWARD DECLARATIONS
+class CAknDoubleStyle2ListBox;
+
+class CDevEncUiDecrViewContainer : public CCoeControl,
+ public MEikListBoxObserver
+ {
+public:
+ /**
+ * @function NewLC
+ * @abstract Creates a CDevEncUiEncrViewContainer object, which will
+ * draw itself to aRect
+ * @param aRect A rectangle that defines the size and location of the
+ * displayable area for the view
+ * @param aDocument the document
+ **/
+ static CDevEncUiDecrViewContainer* NewL(const TRect& aRect, CAknView& aOwningView);
+ /**
+ * @function NewL
+ * @abstract Creates a CDevEncUiEncrViewContainer object, which will draw
+ * itself to aRect
+ * @param aRect A rectangle that defines the size and location of the
+ * displayable area for the view
+ * @param aDocument the document
+ **/
+ static CDevEncUiDecrViewContainer* NewLC(const TRect& aRect, CAknView& aOwningView);
+
+ /**
+ * Destructor.
+ **/
+ ~CDevEncUiDecrViewContainer();
+
+ // from MEikListBoxObserver
+ void HandleListBoxEventL( CEikListBox* aListBox,
+ TListBoxEvent aEventType );
+
+ /**
+ * From CCoeControl. Called by the framework in compound controls
+ * @return The number of controls in this CSimpleListContainer
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl. Called by the framework in compound controls
+ * @param The index of the control to return
+ * @return The control for aIndex
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Called by the framework to draw this control. Clears the area in
+ * aRect.
+ * @param aRect in which to draw
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * Called by the framework whenever a key event occurs.
+ * @param aKeyEvent the Key event which occured, e.g. select key pressed
+ * @param aType the type of Key event which occurred, e.g. key up, key down
+ * @return TKeyResponse EKeyWasNotConsumed if the key was not processed,
+ * EKeyWasConsumed if it was
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+ /**
+ * Called by framework when the view size is changed. Resizes the
+ * iLabel accordingly.
+ */
+ void SizeChanged();
+
+private:
+ /**
+ * @function CDevEncUiEncrViewContainer
+ * @abstract Performs the first stage construction
+ * @param aOwningView the view that owns this container
+ **/
+ CDevEncUiDecrViewContainer(CAknView& aOwningView/*CDevEncUiDocument* aDocument*/);
+
+ /**
+ * @function ConstructL
+ * @abstract Performs the second phase construction, setting the bounding
+ * rectangle to aRect
+ * @param aRect the display area for the view
+ **/
+ void ConstructL(const TRect& aRect);
+
+ /**
+ * Constructs the iListBox, setting its window.
+ */
+ void CreateListL();
+
+private:
+ CAknView& iOwningView;
+ CAknDoubleStyle2ListBox* iListBox;
+};
+
+
+#endif // __DEVENCUI_GRAPHIC_VIEW_CONTAINER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiDef.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2005 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: Common definitions for the application.
+*
+*/
+
+#ifndef DEVENCUIDEF_H_
+#define DEVENCUIDEF_H_
+
+enum TDevEncUiDefinitions
+ {
+ KMinPasswordLength = 4, // Same as for security code
+ KMaxPasswordLength = 50,
+ KMaxKeyNameLength = 50,
+ KMaxFilenameLength = 100
+ };
+
+#endif /*DEVENCUIDEF_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiDocument.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2005 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: Document class of the application.
+*
+*/
+
+#ifndef __DEVENCUIDOCUMENT_H__
+#define __DEVENCUIDOCUMENT_H__
+
+// INCLUDES
+#include <AknDoc.h>
+
+// FORWARD DECLARATIONS
+class CDevEncUiAppUi;
+class CEikApplication;
+
+
+// CLASS DECLARATION
+
+/**
+* CDevEncUiDocument application class.
+* An instance of class CDevEncUiDocument is the Document part of the
+* AVKON application framework for the DEVENCUI example application.
+*/
+class CDevEncUiDocument : public CAknDocument
+ {
+ public: // Constructors and destructor
+
+ /**
+ * NewL.
+ * Two-phased constructor.
+ * Construct a CDevEncUiDocument for the AVKON application aApp
+ * using two phase construction, and return a pointer
+ * to the created object.
+ * @param aApp Application creating this document.
+ * @return A pointer to the created instance of CDevEncUiDocument.
+ */
+ static CDevEncUiDocument* NewL( CEikApplication& aApp );
+
+ /**
+ * NewLC.
+ * Two-phased constructor.
+ * Construct a CDevEncUiDocument for the AVKON application aApp
+ * using two phase construction, and return a pointer
+ * to the created object.
+ * @param aApp Application creating this document.
+ * @return A pointer to the created instance of CDevEncUiDocument.
+ */
+ static CDevEncUiDocument* NewLC( CEikApplication& aApp );
+
+ /**
+ * ~CDevEncUiDocument
+ * Virtual Destructor.
+ */
+ virtual ~CDevEncUiDocument();
+
+ public: // Functions from base classes
+
+ /**
+ * CreateAppUiL
+ * From CEikDocument, CreateAppUiL.
+ * Create a CDevEncUiAppUi object and return a pointer to it.
+ * The object returned is owned by the Uikon framework.
+ * @return Pointer to created instance of AppUi.
+ */
+ CEikAppUi* CreateAppUiL();
+
+ private: // Constructors
+
+ /**
+ * ConstructL
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * CDevEncUiDocument.
+ * C++ default constructor.
+ * @param aApp Application creating this document.
+ */
+ CDevEncUiDocument( CEikApplication& aApp );
+
+ /**
+ * From CEikDocument.
+ * Always return NULL, so as not to create a INI file.
+ *
+ * @param aDoOpen ETrue if file exists. (ignored)
+ * @param aFilename file to view.
+ * @param aFs FileServerSession. (ignored)
+ * @return file store. (always NULL)
+ */
+ CFileStore* OpenFileL(
+ TBool /*aDoOpen*/,
+ const TDesC& aFilename,
+ RFs& /*aFs*/);
+
+ /**
+ * From CEikDocument.
+ *
+ * @param aFileStore. (ignored)
+ * @param aFile.
+ */
+ void OpenFileL(
+ CFileStore*& /*aFileStore*/,
+ RFile& aFile);
+
+ };
+
+#endif // __DEVENCUIDOCUMENT_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiEncrView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2005 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: Encryption view.
+*
+*/
+
+#ifndef __DEVENCUI_ENCRVIEW_H__
+#define __DEVENCUI_ENCRVIEW_H__
+
+//INCLUDES
+
+// System includes
+#include <aknview.h>
+
+//User Includes
+#include "DevEncUiDocument.h"
+
+// FORWARD DECLARATIONS
+class CDevEncUiEncrViewContainer;
+class CDevEncUiEncryptionOperator;
+class CDevEncUiMemoryEntity;
+
+class CDevEncUiEncrView: public CAknView
+ {
+ public: // constructors and destructor
+ static CDevEncUiEncrView* NewL( RArray<CDevEncUiMemoryEntity*>& aMemEntities );
+ static CDevEncUiEncrView* NewLC( RArray<CDevEncUiMemoryEntity*>& aMemEntities );
+ CDevEncUiEncrViewContainer* Container();
+ ~CDevEncUiEncrView();
+ CDevEncUiAppUi& GetAppUi();
+
+ private: // from CAknView
+ TUid Id() const;
+ void HandleCommandL( TInt aCommand );
+ CDevEncUiEncrView( RArray<CDevEncUiMemoryEntity*>& aMemEntities );
+
+ void DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ void DoDeactivate();
+
+ private: // constructors
+ void ConstructL();
+
+ protected:
+ /**
+ * HandleStatusPaneSizeChange.
+ * Called by the framework when the application status pane
+ * size is changed.
+ */
+ void HandleStatusPaneSizeChange();
+
+ private: // data
+ /** Owned. What this view will display */
+ CDevEncUiEncrViewContainer* iContainer;
+ TUid iId;
+
+ /** Not owned */
+ RArray<CDevEncUiMemoryEntity*>& iMemEntities;
+ };
+
+#endif // __DEVENCUI_ENCRVIEW_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiEncrViewContainer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2005 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: Container for the encryption view.
+*
+*/
+
+#ifndef __DEVENCUI_GRAPHIC_VIEW_CONTAINER_H__
+#define __DEVENCUI_GRAPHIC_VIEW_CONTAINER_H__
+
+//INCLUDES
+
+//System Includes
+#include <coecntrl.h>
+#include <aknview.h>
+#include <eiklbo.h>
+
+//User Includes
+
+//FORWARD DECLARATIONS
+class CAknDoubleStyle2ListBox;
+
+class CDevEncUiEncrViewContainer : public CCoeControl,
+ public MEikListBoxObserver
+ {
+public:
+ /**
+ * @function NewLC
+ * @abstract Creates a CDevEncUiEncrViewContainer object, which will
+ * draw itself to aRect
+ * @param aRect A rectangle that defines the size and location of the
+ * displayable area for the view
+ * @param aDocument the document
+ **/
+ static CDevEncUiEncrViewContainer* NewL(const TRect& aRect, CAknView& aOwningView);
+
+ /**
+ * @function NewL
+ * @abstract Creates a CDevEncUiEncrViewContainer object, which will draw
+ * itself to aRect
+ * @param aRect A rectangle that defines the size and location of the
+ * displayable area for the view
+ * @param aDocument the document
+ **/
+ static CDevEncUiEncrViewContainer* NewLC( const TRect& aRect,
+ CAknView& aOwningView );
+
+ /**
+ * Destructor.
+ **/
+ ~CDevEncUiEncrViewContainer();
+
+ // from MEikListBoxObserver
+ void HandleListBoxEventL( CEikListBox* aListBox,
+ TListBoxEvent aEventType );
+
+ /**
+ * From CCoeControl. Called by the framework in compound controls
+ * @return The number of controls in this CSimpleListContainer
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl. Called by the framework in compound controls
+ * @param The index of the control to return
+ * @return The control for aIndex
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * Called by the framework to draw this control. Clears the area in
+ * aRect.
+ * @param aRect in which to draw
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * Called by the framework whenever a key event occurs.
+ * @param aKeyEvent the Key event which occured, e.g. select key pressed
+ * @param aType the type of Key event which occurred, e.g. key up, key down
+ * @return TKeyResponse EKeyWasNotConsumed if the key was not processed,
+ * EKeyWasConsumed if it was
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+ /**
+ * Called by framework when the view size is changed. Resizes the
+ * iLabel accordingly.
+ */
+ void SizeChanged();
+
+private:
+ /**
+ * @function CDevEncUiEncrViewContainer
+ * @abstract Performs the first stage construction
+ * @param aOwningView the view that owns this container
+ **/
+ CDevEncUiEncrViewContainer( CAknView& aOwningView/*CDevEncUiDocument* aDocument*/);
+
+ /**
+ * @function ConstructL
+ * @abstract Performs the second phase construction, setting the bounding
+ * rectangle to aRect
+ * @param aRect the display area for the view
+ **/
+ void ConstructL( const TRect& aRect );
+
+ /**
+ * Constructs the iListBox, setting its window.
+ */
+ void CreateListL();
+
+private:
+ CAknView& iOwningView;
+ CAknDoubleStyle2ListBox* iListBox;
+};
+
+
+#endif // __DEVENCUI_GRAPHIC_VIEW_CONTAINER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiEncryptionOperator.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2005 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: Performs required preparations before encryption
+* operations can place.
+*
+*/
+
+#ifndef DEVENCUI_ENCRYPTIONOPERATOR_H_
+#define DEVENCUI_ENCRYPTIONOPERATOR_H_
+
+//INCLUDES
+
+//System includes
+#include <avkon.rsg>
+#include <e32base.h>
+#include <badesca.h> // for CDesCArrayFlat
+
+//User Includes
+
+// FORWARD DECLARATIONS
+class CDevEncUiMemoryEntity;
+class CEikonEnv;
+class CAknViewAppUi;
+class CRepository;
+
+class CDevEncUiEncryptionOperator: public CBase
+ {
+ public:
+ // Constructors and destructor
+ static CDevEncUiEncryptionOperator* NewL( CEikonEnv& aEikonEnv,
+ CAknViewAppUi& aAppUi,
+ CRepository*& aCrSettings );
+ static CDevEncUiEncryptionOperator* NewLC( CEikonEnv& aEikonEnv,
+ CAknViewAppUi& aAppUi,
+ CRepository*& aCrSettings );
+ ~CDevEncUiEncryptionOperator();
+
+ // Functions related to encryption
+ void HandlePhoneMemEncryptRequestL( CDevEncUiMemoryEntity* aMem, CDevEncUiMemoryEntity* aPrimaryMem = NULL );
+
+ void HandleMmcEncryptRequestL( CDevEncUiMemoryEntity* aMem,
+ TInt aCommand );
+
+ void HandleMmcDecryptRequestL( CDevEncUiMemoryEntity* aMem,
+ TInt aCommand );
+
+ void DestroyKeyQueryL( TBool aShowMmcNote );
+
+ void BatteryStatusCallback();
+
+ void SuggestMmcEncryptionL( CDevEncUiMemoryEntity* aMem );
+
+ void SuggestMmcDecryptionL( CDevEncUiMemoryEntity* aMem );
+
+ void SuggestMmcImportKeyL( CDevEncUiMemoryEntity* aMem,
+ TBool aFirstAttempt );
+
+ void ShowWrongKeyNoteL();
+
+ /**
+ * Displays an error note.
+ * @param aResourceId the error text to display
+ */
+ void ErrorNoteL( TInt aResourceId,
+ TBool aWaitingNote = ETrue );
+
+ /**
+ * Displays an information note.
+ * @param aResourceId the text to display
+ */
+ void InfoNoteL( TInt aResourceId,
+ TBool aWaitingNote = EFalse );
+
+ private:
+ CDevEncUiEncryptionOperator( CEikonEnv& aEikonEnv,
+ CAknViewAppUi& aAppUi,
+ CRepository*& aCrSettings );
+
+ // Second-phase constructor
+ void ConstructL();
+
+ TBool PrepareEncryptionL();
+
+ TBool PrepareDecryptionL();
+
+ void SetPowerMenuStatusL( TBool aOpen );
+
+ TBool MessageQueryL( TInt aResourceId,
+ TInt aSoftKeysId = R_AVKON_SOFTKEYS_OK_CANCEL );
+
+ TBool QueryDialogL( TInt aResourceId,
+ TInt aSoftKeysId = R_AVKON_SOFTKEYS_OK_CANCEL );
+
+ TBool DataQueryDialogL( TDes& aResult,
+ TInt aPromptResourceId,
+ TInt aMaxLength );
+
+ /**
+ * Displays a query dialog to let the user enter a password.
+ * @param aPromptResourceId the prompt text to display
+ * @param aPassword On return, contains the password
+ * @return ETrue if the user entered a password, EFalse if
+ * the dialog was cancelled.
+ */
+ TBool PasswordQueryL( TInt aPromptResourceId,
+ TDes8& aPassword );
+
+ /**
+ * Checks if there's enough battery power to update.
+ * @return ETrue if battery OK or charger connected
+ */
+ TBool CheckBatteryL();
+
+ /**
+ * Prompts the user for a key name and password, then creates
+ * a pkcs#5 encrypted key using the common utility component.
+ * @return ETrue if the key was created and saved successfully
+ */
+ TBool CreateAndSaveKeyL();
+
+ /**
+ * Lets the user select a key and enter a password, then loads
+ * the specified key and takes it in use using the common utility
+ * component.
+ * @return ETrue if the key was loaded and set successfully
+ */
+ TBool LoadAndSetKeyL();
+
+ /**
+ * Creates a random key and sets it in the security driver.
+ * @return ETrue if the key was created and set successfully
+ */
+ TBool CreateKeyL();
+
+ /**
+ * Resets the key in the security driver (fills with null chars).
+ * Before destroying the key, a confirmation query is shown to
+ * the user.
+ */
+ void DestroyKeyL();
+
+ void RemountMmcL();
+
+ TInt CheckMMCStatus();
+
+ // For testing, remove
+ void CheckNotesL();
+ void CheckNotesWithHeaderL();
+
+
+ // data
+ /** Not owned */
+ CEikonEnv& iEikEnv;
+
+ /** Not owned */
+ CAknViewAppUi& iAppUi;
+
+ /** Owned */
+ CDesCArrayFlat* iListQueryItemArray;
+
+ /** Not owned */
+ CRepository*& iCrSettings;
+ };
+
+#endif /* DEVENCUI_ENCRYPTIONOPERATOR_H_ */
+
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiFileManager.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2005 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 class of the application.
+*
+*/
+
+#ifndef CDEVENCUIFILEMANAGER_H_
+#define CDEVENCUIFILEMANAGER_H_
+
+#include <e32base.h>
+#include <f32file.h>
+
+class CDir;
+class CFileStore;
+//class RFs;
+
+class CDevEncUiFileManager : public CBase
+ {
+ public:
+ virtual ~CDevEncUiFileManager();
+ void ConstructL();
+
+ void InteractiveKeySaveL( const TDesC8& aPkcs5Key );
+ void InteractiveKeyLoadL( HBufC8*& aPkcs5Key );
+
+ TInt OpenFileStore( const TDesC& aFilename,
+ CFileStore*& aStore );
+
+ void SaveKeyL( CFileStore* aStore,
+ const TDesC8& aPkcs5Key ) const;
+
+ void LoadKeyL( const TFileName& aFileName,
+ HBufC8*& aPkcs5Key );
+
+ void GetKeyListL( CDir*& aList );
+
+ TInt DriveToChar( TInt aDrive, TChar &aChar );
+
+ TInt KeyFolder( TDes& aResult );
+
+ TInt RemountMmc();
+
+ private:
+ RFs iFs;
+ };
+
+#endif /*CDEVENCUIFILEMANAGER_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiLog.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2005 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: Debug logging functionality.
+*
+*/
+
+#ifndef __DEVENCUI_LOG_H__
+#define __DEVENCUI_LOG_H__
+
+#include "DevEncUiConfig.hrh"
+
+#if defined( _DEBUG ) && defined ( DEVENCUI_LOG )
+
+#include <e32base.h>
+#include <e32cmn.h>
+#include <e32debug.h>
+
+class CFileLog : public CBase
+ {
+ public:
+ static void Printf( TRefByValue<const TDesC> aFmt, ... );
+ };
+
+// Debug trace to stdout
+#define DLOG( aText ) \
+ { \
+ _LIT( KText, aText ); \
+ RDebug::Print( KText ); \
+ }
+
+// Debug trace to stdout
+#define DLOG2( aText, aParam ) \
+ { \
+ _LIT( KText, aText ); \
+ RDebug::Print( KText, aParam ); \
+ }
+
+// Debug trace to stdout
+#define DLOG3( aText, aParam1, aParam2 ) \
+ { \
+ _LIT( KText, aText ); \
+ RDebug::Print( KText, aParam1, aParam2 ); \
+ }
+
+// Debug trace to file
+#define FLOG( aText ) \
+ { \
+ _LIT( KLogText, aText ); \
+ CFileLog::Printf( KLogText ); \
+ }
+
+// Debug trace to file
+#define FLOG2( aText, b ) \
+ { \
+ _LIT( KLogText, aText ); \
+ CFileLog::Printf( KLogText, b ); \
+ }
+
+// Debug trace to file
+#define FLOG3( aText, b, c ) \
+ { \
+ _LIT( KLogText, aText ); \
+ CFileLog::Printf( KLogText, b, c ); \
+ }
+
+// Debug trace to stdout and file
+#define DFLOG( aText ) \
+ { \
+ DLOG( aText ); \
+ FLOG( aText ); \
+ }
+
+// Debug trace to stdout and file
+#define DFLOG2( aText, aParam ) \
+ { \
+ DLOG2( aText, aParam ); \
+ FLOG2( aText, aParam ); \
+ }
+
+// Debug trace to stdout and file
+#define DFLOG3( aText, aParam1, aParam2 ) \
+ { \
+ DLOG3( aText, aParam1, aParam2 ); \
+ FLOG3( aText, aParam1, aParam2 ); \
+ }
+
+// Debug trace a string literal to file
+#define FLOGBUF( aText ) \
+ { \
+ CFileLog::Printf( aText ); \
+ }
+
+#else // _DEBUG not defined, no logging code will be included at all
+
+#define DLOG( a )
+#define DLOG2( a, b )
+#define DLOG3( a, b, c )
+#define FLOG( a )
+#define FLOG2( a, b )
+#define FLOG3( a, b, c )
+#define DFLOG( a )
+#define DFLOG2( a, b )
+#define DFLOG3( a, b, c )
+#define FLOGBUF( a )
+
+#endif // _DEBUG
+
+#endif // __DEVENCUI_LOG_H__
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiMainView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2005 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: Main view of the application.
+*
+*/
+
+#ifndef __DEVENCUI_MAINVIEW_H__
+#define __DEVENCUI_MAINVIEW_H__
+
+//INCLUDES
+
+//System includes
+#include <aknview.h> // CAknView
+#include <centralrepository.h>
+
+//User Includes
+#include "DevEncUiContainerEventCallback.h"
+#include "DevEncUiDocument.h"
+
+// FORWARD DECLARATIONS
+class CDevEncUiEncryptionOperator;
+class CDevEncUiMainViewContainer;
+class CDevEncUiMemoryEntity;
+
+class CDevEncUiMainView: public CAknView,
+ public MContainerEventCallback
+ {
+ public:
+ // constructors and destructor
+ static CDevEncUiMainView* NewL( RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ CRepository*& aSettings,
+ TInt& aMmcStatus );
+ static CDevEncUiMainView* NewLC( RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ CRepository*& aSettings,
+ TInt& aMmcStatus );
+ ~CDevEncUiMainView();
+ CDevEncUiAppUi& GetAppUi();
+
+ // from MContainerEventCallback
+ void EncryptionStatusChangeReq( TDevEncUiMemoryType aType );
+
+ protected:
+ void DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane );
+
+ /**
+ * HandleStatusPaneSizeChange.
+ * Called by the framework when the application status pane
+ * size is changed.
+ */
+ void HandleStatusPaneSizeChange();
+
+ private:
+ // from CAknView
+ TUid Id() const;
+ void HandleCommandL( TInt aCommand );
+ CDevEncUiMainView( RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ CRepository*& aSettings,
+ TInt& aMmcStatus );
+
+ void DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ void DoDeactivate();
+
+ // constructors
+ void ConstructL();
+
+ void HandleMemoryCardEncryptRequestL( CDevEncUiMemoryEntity* aMem );
+
+ void DoEncryptionStatusChangeReqL( TDevEncUiMemoryType aType );
+
+ TBool DmControlsMemory( TDevEncUiMemoryType aType,
+ TInt aDmControlSetting );
+
+ void ErrorNoteL( TInt aResourceId );
+
+ // data
+ /** ID of this view */
+ TUid iId;
+
+ /** Owned */
+ CDevEncUiMainViewContainer* iContainer;
+
+ /** Not owned */
+ RArray<CDevEncUiMemoryEntity*>& iMemEntities;
+
+ /** Owned */
+ CDevEncUiEncryptionOperator* iEncOperator;
+
+ /** Not owned */
+ CRepository*& iCrSettings;
+
+ /** Not owned */
+ TInt& iMmcStatus;
+ };
+
+#endif // __DEVENCUI_MAINVIEW_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiMainViewContainer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2005 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: Container for the main view.
+*
+*/
+
+#ifndef __DEVENCUI_MAINVIEW_CONTAINER_H__
+#define __DEVENCUI_MAINVIEW_CONTAINER_H__
+
+//INCLUDES
+
+//System Includes
+#include <coecntrl.h>
+#include <aknlists.h>
+#include <aknview.h>
+#include <DevEncExternalCRKeys.h>
+
+//User Includes
+
+#include "DevEnc.hrh"
+#include "DevEncUiContainerEventCallback.h"
+#include "DevEncUiMemInfoObserver.h"
+
+//FORWARD DECLARATIONS
+class CDevEncUiDocument;
+class CDevEncUiSettingItemList;
+class CRepository;
+class CDevEncUiMemoryEntity;
+
+class CDevEncUiMainViewContainer : public CCoeControl,
+ public MDevEncUiMemInfoObserver
+ {
+ public:
+ virtual TInt CountComponentControls() const;
+ /**
+ * @function NewL
+ * @abstract Creates a CDevEncUiMainViewContainer object, which will draw itself to aRect
+ * @param aRect A rectangle that defines the size and location of the displayable area
+ * for the view
+ * @param aDocument the document
+ **/
+ static CDevEncUiMainViewContainer* NewL( const TRect& aRect,
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ MContainerEventCallback& aCallback,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus );
+
+ /**
+ * @function NewLC
+ * @abstract Creates a CDevEncUiMainViewContainer object, which will draw itself to aRect
+ * @param aRect A rectangle that defines the size and location of the displayable area
+ * for the view
+ * @param aDocument the document
+ **/
+ static CDevEncUiMainViewContainer* NewLC( const TRect& aRect,
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ MContainerEventCallback& aCallback,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus );
+ ~CDevEncUiMainViewContainer();
+
+ /**
+ * From CCoeControl. Called by the framework whenever a key event occurs.
+ * Passes the key event to the settings list if it is not null, otherwise returns
+ * EKeyWasNotConsumed
+ * @param aKeyEvent the Key event which occured, e.g. select key pressed
+ * @param aType the type of Key event which occurred, e.g. key up, key down
+ * @return TKeyResponse EKeyWasNotConsumed if the key was not processed,
+ * EKeyWasConsumed if it was
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * @function ConstructL
+ * @abstract Performs the second phase construction, setting the bounding
+ * rectangle to aRect
+ * @param aRect the display area for the view
+ **/
+ void ConstructL(const TRect& aRect);
+
+ TInt SelectedItem();
+
+ /**
+ * Shows a popup dialog to let user set the state of the selected item.
+ * @return ETrue if desired state of the selected item was changed
+ */
+ TBool ChangeSelectedItemL();
+
+ /**
+ * From MDevEncUiMemInfoObserver
+ * */
+ void UpdateInfo( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint aProgress = 0 );
+
+ protected:
+ virtual CCoeControl* ComponentControl(TInt aIndex) const;
+
+ /**
+ * From CCoeControl
+ * */
+ void SizeChanged();
+
+ /**
+ * From CCoeControl
+ * */
+ void HandleResourceChange(TInt aType);
+
+ private:
+ CDevEncUiMainViewContainer( RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ MContainerEventCallback& aCallback,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus );
+ void DoUpdateInfoL( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint aProgress /*= 0*/ );
+
+ private:
+ /** Owned */
+ MContainerEventCallback& iCallback;
+
+ /** Owned */
+ CDevEncUiSettingItemList* iSettingItemList;
+
+ /** Not owned */
+ RArray<CDevEncUiMemoryEntity*>& iMemEntities;
+
+ /** Not owned */
+ CRepository*& iCrSettings;
+
+ /** Not owned */
+ TInt& iMmcStatus;
+};
+
+
+#endif // __DEVENCUI_MAINVIEW_CONTAINER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiMemInfoObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2005 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: Mixin class for passing memory status updates to observers.
+*
+*/
+
+
+#ifndef __DEVENCUI_MEMINFOOBSERVER_H__
+#define __DEVENCUI_MEMINFOOBSERVER_H__
+
+#include "DevEnc.hrh"
+#include <DevEncEngineConstants.h>
+
+class MDevEncUiMemInfoObserver
+ {
+ public:
+ virtual void UpdateInfo( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint aProgress = 0 ) = 0;
+ };
+
+#endif // __DEVENCUI_MEMINFOOBSERVER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiMemoryEntity.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2005 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: Class for managing different types of memory on a
+* very abstract level.
+*
+*/
+
+#ifndef DEVENCUI_MEMORYENTITY_H
+#define DEVENCUI_MEMORYENTITY_H
+
+#include <e32base.h>
+#include <eikenv.h>
+
+#include "DevEnc.hrh"
+#include "DevEncUiMemInfoObserver.h"
+#include "DevEncDiskStatusObserver.h"
+
+class CDevEncSession;
+class CDevEncUiInfoObserver;
+
+class CDevEncUiMemoryEntity : public CBase,
+ public MDiskStatusObserver
+ {
+ public:
+ /**
+ * Constructs the CDevEncUiMemoryEntity using the NewLC method, popping
+ * the constructed object from the CleanupStack before returning it.
+ *
+ * @return The newly constructed CDevEncUiMemoryEntity
+ */
+ static CDevEncUiMemoryEntity* NewL( CEikonEnv* aEikonEnv,
+ TDevEncUiMemoryType aType );
+
+ /**
+ * Constructs the CDevEncUiMemoryEntity using the constructor and ConstructL
+ * method, leaving the constructed object on the CleanupStack before returning it.
+ *
+ * @return The newly constructed CDevEncUiMemoryEntity
+ */
+ static CDevEncUiMemoryEntity* NewLC( CEikonEnv* aEikonEnv,
+ TDevEncUiMemoryType aType );
+
+ /**
+ * Adds an observer to this object's list of observers.
+ * @param aInfoObserver The observer to add
+ * @leave Symbian error code
+ */
+ void AddObserverL( MDevEncUiMemInfoObserver* aInfoObserver );
+
+ /**
+ * Removes an observer from this object's list of observers.
+ * Any errors are ignored.
+ * @param aInfoObserver The observer to remove
+ */
+ void RemoveObserver( MDevEncUiMemInfoObserver* aInfoObserver );
+
+ /**
+ * Called periodically. Not intended for use by other classes.
+ * @param aPtr Pointer to an instance of this class.
+ */
+ static TInt ProgressTick( TAny* aPtr );
+
+ /**
+ * Called periodically. Not intended for use by other classes.
+ * @param aPtr Pointer to an instance of this class.
+ */
+ static TInt PollTick( TAny* aPtr );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CDevEncUiMemoryEntity();
+
+ /**
+ * Starts the encryption of this memory.
+ */
+ void StartEncryptionL();
+
+ /**
+ * Starts the decryption of this memory.
+ */
+ void StartDecryptionL();
+
+ void Cancel();
+
+ /**
+ * Gets the state of this memory entity.
+ * @return the current state
+ */
+ TUint State() const;
+
+ /**
+ * Sends the current memory state information to all observers.
+ * @return none
+ */
+ virtual void UpdateMemoryInfo();
+
+ /*
+ * From MDiskStatusObserver
+ */
+ void DiskStatusChangedL( TInt aStatus );
+
+ private:
+ // functions
+
+ /**
+ * C++ Constructor
+ **/
+ CDevEncUiMemoryEntity( CEikonEnv* aEikonEnv, TDevEncUiMemoryType aType );
+
+ /**
+ * Second-phase constructor
+ **/
+ virtual void ConstructL();
+
+ /**
+ * Sets the internal state and calls UpdateMemoryInfo()
+ * @param aState the new state
+ **/
+ virtual void SetState( TUint aState );
+
+ /**
+ * Starts a timer to periodically update the memory state in the UI.
+ * @param aInterval the polling interval
+ **/
+ void StartPolling( TTimeIntervalMicroSeconds32 aInterval );
+
+ /**
+ * Helper function, called by StartPolling.
+ * Starts a timer to periodically update the memory state in the UI.
+ * @param aInterval the polling interval
+ **/
+ void DoStartPollingL( TTimeIntervalMicroSeconds32 aInterval );
+
+ /**
+ * Fetches the encryption state and progress. Called periodically.
+ **/
+ virtual void CheckProgress();
+
+ /**
+ * Performs periodical processing of timeouts. Calls CheckProgress().
+ **/
+ virtual void DoProgressTick();
+
+ /**
+ * Performs periodical processing of timeouts.
+ * Checks if the encryption status has changed.
+ **/
+ virtual void DoPollTickL();
+
+ void RestoreAutolockSettings();
+
+ // Data
+ /** Not owned */
+ CEikonEnv* iEikEnv;
+
+ /** Owned */
+ CDiskStatusObserver* iDiskStatusObserver;
+
+ /** Owned */
+ CPeriodic* iPeriodic;
+
+ /** Owned */
+ RArray<MDevEncUiMemInfoObserver*> iObservers;
+
+ /** Owned */
+ CDevEncSession* iSession;
+
+ TUint iState;
+ TUint iPrevState;
+ const TDevEncUiMemoryType iType;
+ TInt iPercentDone;
+ TInt iPrevPercentDone;
+ };
+
+#endif // DEVENCUI_MEMORYENTITY_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiSecretMinMaxCodeQuery.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+#ifndef DEVENCUISECRETMINMAXCODEQUERY_H_
+#define DEVENCUISECRETMINMAXCODEQUERY_H_
+
+#include <AknQueryDialog.h>
+#include <aknnotedialog.h>
+#include "DevEnc.hrh"
+
+class CDevEncUiSecretMinMaxCodeQuery : public CAknTextQueryDialog
+ {
+ public://construction and destruction
+ /**
+ * C++ Constructor.
+ * @param aDataText TDes& (code which is entered in query)
+ * @param aMinLength TInt (code min length)
+ * @param aMaxLength TInt (code max length)
+ */
+ CDevEncUiSecretMinMaxCodeQuery( TDes& aDataText,
+ TInt aMinLength,
+ TInt aMaxLength );
+ /**
+ * Destructor.
+ */
+ ~CDevEncUiSecretMinMaxCodeQuery();
+
+ protected://from CAknTextQueryDialog
+ /**
+ * From CAknTextQueryDialog. This function is called by the UIKON
+ * dialog framework just before the dialog is activated, after it has
+ * called PreLayoutDynInitL() and the dialog has been sized.
+ */
+ void PreLayoutDynInitL();
+
+ /**
+ * From CAknTextQueryDialog. This function is called by the UIKON
+ * framework if the user activates a button in the button panel.
+ * It is not called if the Cancel button is activated,
+ * unless the EEikDialogFlagNotifyEsc flag is set.
+ * @param aButtonId The ID of the button that was activated
+ * @return Should return ETrue if the dialog should exit,
+ * and EFalse if it should not.
+ */
+ TBool OkToExitL( TInt aButtonId );
+
+ /**
+ * From CAknTextQueryDialog. This function is called by the UIKON
+ * dialog framework just after a key is pressed
+ * @param aKeyEvent TKeyEvent&
+ * @param aType TEventCode
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * From MAknQueryControlObeserver. Overrides the default
+ * implementation in CAknQueryDialog. Gets called by framework when
+ * text in editor is edited.
+ */
+ void UpdateLeftSoftKeyL();
+
+ private: // Data
+ TInt iMinLength;
+ TInt iMaxLength;
+ };
+
+#endif /*DEVENCUISECRETMINMAXCODEQUERY_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiSettingItemList.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2005 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: Device Encryption UI settings item list.
+*
+*/
+
+#ifndef DEVENCUI_SETTINGITEMLIST_H
+#define DEVENCUI_SETTINGITEMLIST_H
+
+// INCLUDES
+
+// System includes
+#include <aknsettingitemlist.h> // CAknSettingItemList
+
+// User includes
+#include "DevEnc.hrh"
+
+// CLASS DECLARATION
+
+class CDevEncUiSettingItemList : public CAknSettingItemList
+ {
+ public: // Constructors and destructor
+ CDevEncUiSettingItemList();
+ ~CDevEncUiSettingItemList();
+
+ // From CAknSettingItemList
+ /**
+ * Creates the actual setting items for the list, passing
+ * ownership of them to the calling class. Each setting
+ * item has a piece of member data which it sets values in.
+ */
+ CAknSettingItem* CreateSettingItemL( TInt identifier );
+
+ // From CAknSettingItemList
+ virtual void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+
+ /**
+ * Called by the framework whenever an item is selected.
+ * Causes the edit page for the currently selected setting item to
+ * be displayed and stores any changes made.
+ * @param aIndex the index of the item to change
+ * @param aCalledFromMenu If ETrue, opens a popup window to let the
+ * user select the state of this item. Otherwise the item state
+ * is just changed.
+ */
+ void EditItemL ( TInt aIndex, TBool aCalledFromMenu );
+
+ // Members
+ /**
+ * Gets the index of the currently selected item.
+ * @return the index
+ */
+ TInt SelectedItem();
+
+ /**
+ * Opens a popup window to let the user select the state of this item
+ */
+ void ChangeSelectedItemL();
+
+ /**
+ * Sets the text of a list item. Does not change the state.
+ * @param aIndex the index of the item to change
+ * @param aNewText the new text
+ */
+ void SetItemTextL( TInt aIndex, const TDesC& aNewText );
+
+ /**
+ * Sets the state of a list item.
+ * @param aIndex the index of the item to change
+ * @param aSetting the new state
+ */
+ void SetItemStateL( TInt aIndex, TBool aSetting );
+
+ /**
+ * Gets the state of a list item.
+ * @param aIndex the index of the item to change
+ * @param aSetting Contains the current setting when finished.
+ */
+ void ItemState( TInt aIndex, TBool& aSetting );
+
+ /**
+ * From CAknSettingItemList
+ *
+ * Handles a change to the control's resources of type aType
+ * which are shared across the environment, e.g. colors or fonts.
+ *
+ * @since 2.0
+ * @param aType Reason for the "resource" change, usually an system event UID
+ */
+ void HandleResourceChange( TInt aType );
+
+ private:
+ // From CAknSettingItemList
+ /**
+ * Called by framework when the view size is changed. Resizes the
+ * setting list accordingly.
+ */
+ void SizeChanged();
+
+ // Member data
+ /* Holds the UI representation of the current state of the phone
+ * memory encryption. This does not always correlate to the real memory
+ * state, as this variable often contains a new setting that has not
+ * been validated yet. */
+ TBool iPhoneMemSetting;
+
+ /* Holds the UI representation of the current state of the memory
+ * card encryption. This does not always correlate to the real memory
+ * state, as this variable often contains a new setting that has not
+ * been validated yet. */
+ TBool iMmcSetting;
+
+ /** Owned. Holds the current state text of the phone memory */
+ HBufC* iPhoneMemStateText;
+
+ /** Owned. Holds the current state text of the memory card */
+ HBufC* iMmcStateText;
+ };
+
+#endif // #ifndef DEVENCUI_SETTINGITEMLIST_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiTimer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2005 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:
+*
+*/
+
+#ifndef DEVENCUITIMER_H_
+#define DEVENCUITIMER_H_
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class MDevEncUiTimerCallback
+ {
+ public:
+ virtual void Timeout()=0;
+ };
+
+class CDevEncUiTimer : public CTimer
+ {
+ public:
+ static CDevEncUiTimer* NewL( MDevEncUiTimerCallback* aCallback );
+ ~CDevEncUiTimer();
+
+ void StartAppL( const TUint32& aUid );
+
+ protected:
+ // from CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError );
+
+ private:
+ // Functions
+ CDevEncUiTimer( MDevEncUiTimerCallback* aCallback );
+
+ void ConstructL();
+
+ // Data
+ MDevEncUiTimerCallback* iCallback; // parent
+ };
+
+#endif /*DEVENCUITIMER_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/inc/DevEncUiUids.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2005 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: DevEncUi ids, that can be used both in cpp and rss files.
+*
+*/
+
+#ifndef DEVENCUIUIDS_HRH
+#define DEVENCUIUIDS_HRH
+
+#define KDevEncUiUid 0x2000259A
+
+#endif // DEVENCUIUIDS_HRH
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/loc/devenc.loc Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,354 @@
+/*
+* Copyright (c) 2005 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: String localization file.
+*
+*/
+
+// LOCALISATION STRINGS
+
+
+// d:Application name in menu grid view.
+// l:cell_app_pane_t1
+// r:3.1
+//
+#define qtn_apps_encryption_grid "Encryption"
+
+// d:Application name displayed in title.
+// l:title_pane_t1
+// r:3.1
+//
+#define qtn_encryption_title "Encryption"
+
+// d:Setting list item for phone memory encryption.
+// d:Possible values are "On" and "Off".
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_phonememory "Phone memory"
+
+// d:Setting list item for memory card encryption.
+// d:Possible values are "On" and "Off"
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_memorycard "Memory card"
+
+// d:Information note, scrollable. Displayed after user has selected to start memory encryption and Autolock period setting is "None".
+// d:softkeys are OK and Cancel.
+// d:Keep translation consistent with "Autolock period" (qtn_set_autolock) and "Phone and SIM card" (qtn_set_dev_sim_security).
+// l:popup_info_list_pane_t1_6_rows
+// r:3.1
+//
+#define qtn_encryption_note_lock "To encrypt phone memory, it is highly recommended to enable 'Autolock' and set lock code in 'Phone and SIM card' settings to prevent unauthorised data access."
+
+// d:Information note, scrollable. Displayed after user has selected to start memory encryption.
+// d:Softkeys are OK and Cancel.
+// l:popup_info_list_pane_t1
+// r:3.1
+//
+#define qtn_encryption_note_encrypting "Encryption process is long. Power-off button is disabled. Please do not remove the battery during the process."
+
+// d:Information note, scrollable. Displayed after user has selected to start memory decryption.
+// l:popup_info_list_pane_t1
+// r:3.1
+//
+#define qtn_encryption_note_phone_decrypting "This will decrypt the phone memory. Decryption process is long. Power-off button is disabled. Please do not remove the battery during the process. After decryption, encryption key is destroyed."
+
+// d:Displayed when user is about to start Memory card encryption.
+// d:Memory card will be encrypted without saving the key.
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_encrypt "Encrypt witht sav. key"
+
+// d:Displayed when user is about to start Memory card encryption.
+// d:Memory card will be encrypted and key will be saved.
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_encryptsave "Encrypt and save key"
+
+// d:Displayed when user is about to start Memory card encryption.
+// d:Memory card will be encrypted with the restored key.
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_encryptload "Encrypt / restored key"
+
+// d:Wait note. Displayed while encryption key is being created.
+// d:Displayed after user has selected to start encrypting Memory card.
+// l:popup_note_wait_window
+// r:3.1
+//
+#define qtn_encryption_note_wait "Creating encryption key"
+
+// d:Data query text. User is asked to enter passphrase to protect the encryption key.
+// l:popup_query_data_window
+// r:3.1
+//
+#define qtn_encryption_passphrase_protect "Enter key's passphrase to protect the key:"
+
+// d:Data query. User is asked to enter name for the encryption key.
+// d:Displayed after user has selected "Encrypt and save the key" (qtn_encryption_encryptsave).
+// l:popup_query_data_window
+// r:3.1
+//
+#define qtn_encryption_filename "Save key as:"
+
+// d:Confirmation note. Displayed after kkey is saved successfully.
+// d:Keep the localisation of Other consistent with string qtn_fmgr_def_fldr_others.
+// l:popup_note_window
+// r:3.1
+//
+#define qtn_encryption_note_saveinfo "Key saved succesfully in Other folder"
+
+// d:Heading in list query. User is asked to select key file.
+// l:heading_pane_t1
+// r:3.1
+//
+#define qtn_encryption_selectkey "Select key file:"
+
+// d:Data query. User is asked to enter key's phassphrase.
+// l:popup_query_data_window
+// r:3.1
+//
+#define qtn_encryption_passphrase_ask "Enter key's passphrase:"
+
+// d:Information note. Inform the user that the memory card is encrypted.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_memorycard_encrypted "Encrypted memory card"
+
+// d:Displayed when user is about to start Memory card decryption.
+// d:Memory card will be decrypted.
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_decrypt "Decrypt"
+
+// d:Displayed when user is about to start Memory card decryption.
+// d:Memory card will be decrypted and encryption will be set off.
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_decryptturnoff "Decrypt / turn off encr."
+
+// d:Information note, scrollable. Displayed after user has selected to start memory decryption.
+// d:Softkeys are OK and Cancel.
+// l:popup_info_list_pane_t1
+// r:3.1
+//
+#define qtn_encryption_note_decrypting "The decryption process is long. The power off button is disabled. Please don't remove the battery during the process."
+
+// d:Information note, scrollable. Displayed after user has selected to start memory decryption.
+// d:Softkeys are OK and Cancel.
+// l:popup_info_list_pane_t1
+// r:3.1
+//
+#define qtn_encryption_note_decryptingdestroy "Decryption process is long. Power-off button is disabled. Please do not remove the battery during the process. After decryption, encryption key is destroyed."
+
+// d:Information note, scrollable. Displayed after user has selected to start memory encryption.
+// d:Softkeys are Yes and No.
+// l:popup_info_list_pane_t1
+// r:3.1
+//
+#define qtn_encryption_note_decrypt_loadkey "Memory card encrypted with another key. To decrypt it, import its key. Importing the new key will destroy the current key in driver. Continue?"
+
+// d:Confirmation query. Displayed in case insert an unencrypted memory card in the phone and encryption is on.
+// d:Softkeys are Yes and No.
+// l:popup_note_window
+// r:3.1
+//
+#define qtn_encryption_note_insertunencrypted "Memory card encryption setting is 'On'. Encrypt this memory card?"
+
+// d:Confirmation query. Displayed in case user select to turn off the encryption when no memory card is inside phone.
+// d:Softkeys are Yes and No.
+// l:popup_note_window
+// r:3.1
+//
+#define qtn_encryption_note_decrypt_nomemrycard "Turning off memory card encryption will destroy the current key in driver. Continue?"
+
+// d:Information note. Informs the user that the memory card is not an encrypted one.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_memorycard_unencrypted "Unencrypted memory card"
+
+// d:Confirmation query. Displayed in case user inserts encrypted memory card in the phone and encryption is off.
+// l:popup_note_window
+// r:3.1
+//
+#define qtn_encryption_note_insertencrypted "This memory card is encrypted but the phone encryption is off. Decrypt this memory card?"
+
+// d:Information note. Displayed when the encryption is interrupted and cancelled.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_encryptioninterrupt "Memory card encryption cancelled"
+
+// d:Setting list item, static. Possible values are On (qtn_encryption_phonememory_setting_on) and Off (qtn_encryption_phonememory_setting_off).
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_phonememory_setting_title "Phone mem. encrypt.:"
+
+// d:Setting list item, static. Possible values are On (qtn_encryption_memorycard_setting_on) and Off (qtn_encryption_memorycard_setting_off).
+// l:list_setting_pane_t1
+// r:3.1
+//
+#define qtn_encryption_memorycard_setting_title "Mem. card encryption:"
+
+// d:Information note. Inform the user that the key file is wrong.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_wrongkeyfile "Incorrect key file"
+
+// d:Information note. Inform the user that the inserted memory card cannot be used.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_unusedmemorycard "Memory card cannot be used"
+
+// d:Text displayed after setting Phone memory or Memory card encryption On.
+// d:Indicates the process of memory encryption. %N is replaced with the percentage of how much of the memory is encrypted.
+// l:list_set_graphic_pane_t1
+// r:3.1
+//
+#define qtn_encryption_encrypt_process "Encrypting, %N%"
+
+// d:Text displayed after setting Phone memory or Memory card encryption Off.
+// d:Indicates the process of memory decryption. %N is replaced with the percentage of how much of the memory is decrypted.
+// l:list_set_graphic_pane_t1
+// r:3.1
+//
+#define qtn_encryption_decrypt_process "Decrypting, %N%"
+
+// d:Confirmation query, one softkey OK. Displayed in case memory card cannot be used unless encryption is set on.
+// l:popup_note_window
+// r:3.1
+//
+#define qtn_encryption_note_insertoff_unusedmemorycard "This memory card cannot be used. To use it, turn on memory card encryption."
+
+// d:Confirmation query, one softkey OK. Displayed in case memory cannot be used because key does not match to the memory card.
+// l:popup_note_window
+// r:3.1
+//
+#define qtn_encryption_note_inserton_unusedmemorycard "Key not matched to this memory card. Memory card cannot be used."
+
+// d:Setting list item, dynamic. Setting the phone memory encryption on.
+// l:list_set_graphic_pane_t1
+// r:3.1
+//
+#define qtn_encryption_phonememory_setting_on "On"
+
+// d:Setting list item, dynamic. Setting the phone memory encryption off.
+// l:list_set_graphic_pane_t1
+// r:3.1
+//
+#define qtn_encryption_phonememory_setting_off "Off"
+
+// d:Setting list item, dynamic. Setting the memory card encryption on.
+// l:list_set_graphic_pane_t1
+// r:3.1
+//
+#define qtn_encryption_memorycard_setting_on "On"
+
+// d:Setting list item, dynamic. Setting the memory card encryption off.
+// l:list_set_graphic_pane_t1
+// r:3.1
+//
+#define qtn_encryption_memorycard_setting_off "Off"
+
+// d:Application name in menu list view.
+// l:list_single_large_graphic_pane_t1
+// r:3.1
+//
+#define qtn_apps_encryption_list "Encryption"
+
+// d:Header text.
+// d:Displayed as a header for several scrollable notes (e.g qtn_encryption_note_lock, qtn_encryption_note_encrypting)
+// l:heading_pane_t1
+// r:3.1
+//
+#define qtn_encryption_note_header "Note:"
+
+
+/************* Own defines *****************************************/
+
+
+// d:Information note. memory card is corrupted.
+// d:
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_corrupted "Corrupted"
+
+// d:Information note. Informs that the battery is low.
+// d: User is asked to change battery or connect a charger.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_battery_low "Battery low. Change battery or connect charger."
+
+// d:Information note. Informs that no keys were found.
+// d:
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_no_keys_found "No keys found"
+
+// d:Information note. Informs that password is invalid.
+// d:
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_invalid_password "Invalid password"
+
+// d:Information note. Informs about key error.
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_key_error "Key error"
+
+// d:Information note. Informs that encryption is controlled by admin.
+// d:
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_admin_control "Encryption controlled by admin"
+
+// d:Information note. Informs about invalid name and asks user to enter name again.
+// d:
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_bad_name "Invalid name. Try again."
+
+// d:Information note. Informs that the file already exists.
+// d:
+// l:popup_note_window/opt2
+// r:3.1
+//
+#define qtn_encryption_note_file_exists "File already exists"
+
+// d:Confirmation query. Informs that phone memory cannot be encrypted while
+// d:firmware update process is ongoing.
+// l:popup_note_window
+// r:3.2
+//
+#define qtn_conf_encr_not_poss "Device encryption cannot be activated when an update over the air is ongoing. Wait for the update to stop and try again."
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/rom/DevEncUi.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005 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: Contains information about binary files and their locations.
+*
+*/
+
+#ifndef __DEVENCUI_IBY__
+#define __DEVENCUI_IBY__
+
+S60_APP_EXE( DevEncUi )
+//S60_APP_BITMAP( essysapp )
+S60_APP_AIF_ICONS( DevEncUi )
+S60_APP_AIF_RSC( DevEncUi )
+data=DATAZ_\private\10003a3f\apps\DevEncUi_reg.rsc private\10003a3f\import\apps\DevEncUi_reg.rsc
+data=DATAZ_\resource\apps\DevEncUi.rsc resource\apps\DevEncUi.rsc
+
+#endif // __DEVENCUI_IBY__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/sis/DevEncUi.pkg Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,37 @@
+;
+; Copyright (c) 2009 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:
+;
+; DevEncUi.pkg
+;
+;Language - standard language definitions
+&EN
+
+;Standard SIS file header
+#{"DevEncUi"},(0x2000259A),1,0,0
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;Files to install
+"\epoc32\release\armv5\urel\DevEncUi.exe" -"!:\sys\bin\DevEncUi.exe"
+"\epoc32\data\z\resource\apps\DevEncUi.rsc" -"!:\resource\apps\DevEncUi.rsc"
+;"\epoc32\data\z\resource\apps\DevEncUi.mif" -"!:\resource\apps\DevEncUi.mif"
+"\epoc32\data\z\private\10003a3f\apps\DevEncUi_reg.rsc" -"!:\private\10003a3f\import\apps\DevEncUi_reg.rsc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUi.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2005 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: Implementation of application entry point functions.
+*
+*/
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "DevEncUiApplication.h"
+
+
+// -----------------------------------------------------------------------------
+// NewApplication()
+//
+// -----------------------------------------------------------------------------
+//
+LOCAL_C CApaApplication* NewApplication()
+ {
+ return new CDevEncUiApplication;
+ }
+
+// -----------------------------------------------------------------------------
+// E32Main()
+//
+// -----------------------------------------------------------------------------
+//
+GLDEF_C TInt E32Main()
+ {
+ return EikStart::RunApplication( NewApplication );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiApplication.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiApplication.
+*
+*/
+
+// INCLUDE FILES
+#include "DevEncLog.h"
+#include "DevEncUiDocument.h"
+#include "DevEncUiApplication.h"
+#include "DevEncUids.hrh"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// UID for the application
+// this should correspond to the uid defined in the mmp file
+const TUid KUidDevEncUIApp = { KDevEncUiUid };
+
+// --------------------------------------------------------------------------
+// CDevEncUiApplication::AppDllUid()
+// Returns application UID
+// --------------------------------------------------------------------------
+//
+TUid CDevEncUiApplication::AppDllUid() const
+ {
+ // Return the UID for the DevEncUI application
+ return KUidDevEncUIApp;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiApplication::CreateDocumentL()
+// Creates CApaDocument object
+// --------------------------------------------------------------------------
+//
+CApaDocument* CDevEncUiApplication::CreateDocumentL()
+ {
+ DFLOG( "CDevEncUiApplication::CreateDocumentL" );
+ // Create an DevEncUI document, and return a pointer to it
+ return ( static_cast<CApaDocument*>
+ ( CDevEncUiDocument::NewL( *this ) ) );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiAppui.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,565 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiAppUi.
+*
+*/
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <centralrepository.h>
+#include <DevEncUi.rsg>
+#include <csxhelp/devenc.hlp.hrh>
+#include <e32event.h>
+#include <hlplch.h> // Help launcher
+#include <StringLoader.h> // TBD: Needed?
+#include <w32std.h>
+#include <DevEncExternalCRKeys.h>
+
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUi.pan"
+#include "DevEncUiAppui.h"
+#include "DevEncUiEncrView.h"
+#include "DevEncUiEncryptionOperator.h"
+#include "DevEncUiDecrView.h"
+
+#include "DevEncUiMainView.h"
+#include "DevEncUiMemoryEntity.h"
+#include "DevEncUids.hrh"
+
+#include <AknGlobalNote.h>
+
+//Local definitions
+const TInt KDevEncUiConstructionDelay( 1000000 );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// --------------------------------------------------------------------------
+// CDevEncUiAppUi::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// --------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::ConstructL()
+ {
+ // Initialise app UI with standard value.
+ BaseConstructL( EAknEnableSkin | EAknSingleClickCompatible );
+
+ DFLOG( ">>CDevEncUiAppUi::ConstructL" );
+
+ User::LeaveIfError( iFs.Connect() );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => Create drive path" );
+ // Create private folder. TBD: Needed?
+ TInt error = iFs.CreatePrivatePath( EDriveC );
+ if ( error == KErrAlreadyExists )
+ {
+ error = KErrNone;
+ }
+ DFLOG( "CDevEncUiAppUi::ConstructL => Leave ?" );
+ User::LeaveIfError( error );
+ DFLOG( "CDevEncUiAppUi::ConstructL => No, constructing CR" );
+
+ // Central repository settings
+ iCrSettings = CRepository::NewL( TUid::Uid( KCRDevEncUiSettings ) );
+ DFLOG( "CDevEncUiAppUi::ConstructL => Adding observer" );
+
+ // Create MMC observer
+ iObserver = CMmcObserver::NewL( this, &iFs );
+ iObserver->StartObserver();
+
+ // Call the MMC callback function once to get the initial card status
+ MMCStatusChangedL();
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => constructing mass memory" );
+
+ CDevEncUiMemoryEntity* massMemory = CDevEncUiMemoryEntity::NewLC( iEikonEnv,
+ EPhoneMemory );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => adding to mem entities" );
+ iMemEntities.AppendL( massMemory );
+ CleanupStack::Pop( massMemory );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => constructing memory card" );
+
+ CDevEncUiMemoryEntity* memoryCard = CDevEncUiMemoryEntity::NewLC( iEikonEnv,
+ EMemoryCard );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => adding to mem entities" );
+ iMemEntities.AppendL( memoryCard );
+ CleanupStack::Pop( memoryCard );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => constructing phone memory" );
+
+ CDevEncUiMemoryEntity* phoneMemory = CDevEncUiMemoryEntity::NewLC( iEikonEnv,
+ EPrimaryPhoneMemory );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL => adding to mem entities" );
+ iMemEntities.AppendL( phoneMemory );
+ CleanupStack::Pop( phoneMemory );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL() => Create enc operator" );
+
+ // Create encryption operator
+ iEncOperator = CDevEncUiEncryptionOperator::NewL( *iEikonEnv,
+ *this,
+ iCrSettings );
+
+ DFLOG( "CDevEncUiAppUi::ConstructL() => Create views" );
+
+ // Create views
+ iMainView = CDevEncUiMainView::NewL( iMemEntities,
+ iCrSettings,
+ iMmcStatus );
+
+ AddViewL( iMainView ); // transfer ownership
+
+ iEncryptionView = CDevEncUiEncrView::NewL( iMemEntities );
+ AddViewL( iEncryptionView ); // transfer ownership
+
+ iDecryptionView = CDevEncUiDecrView::NewL( iMemEntities );
+ AddViewL( iDecryptionView ); // transfer ownership
+
+ SetDefaultViewL( *iMainView );
+
+ DFLOG( "ConstructL 6" );
+
+ iConstructionOnGoing = ETrue;
+
+ iTimer = CDevEncUiTimer::NewL( this );
+ iTimer->After( KDevEncUiConstructionDelay );
+
+ DFLOG( "<<CDevEncUiAppUi::ConstructL" );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiAppUi::CDevEncUiAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// --------------------------------------------------------------------------
+//
+CDevEncUiAppUi::CDevEncUiAppUi()
+ {
+ // No implementation required
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiAppUi::~CDevEncUiAppUi()
+// Destructor.
+// --------------------------------------------------------------------------
+//
+CDevEncUiAppUi::~CDevEncUiAppUi()
+ {
+ DFLOG( ">>CDevEncUiAppUi::~CDevEncUiAppUi" );
+ delete iObserver;
+ iFs.Close();
+ delete iEncOperator;
+ if (iMemEntities.Count())
+ iMemEntities[ EMemoryCard ]->RemoveObserver( this );
+ for ( TInt i = 0; i < iMemEntities.Count(); i++ )
+ {
+ delete iMemEntities[i];
+ }
+ iMemEntities.Close();
+ delete iCrSettings;
+ delete iTimer;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiAppUi::HandleCommandL()
+// Takes care of command handling.
+// --------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::HandleCommandL( TInt aCommand )
+ {
+ DFLOG( ">>CDevEncUiAppUi::HandleCommandL" );
+
+ switch( aCommand )
+ {
+ // These commands are specific to the memory card
+ case EDevEncUiCommandEncryptWithoutSavingKey: // fall through
+ case EDevEncUiCommandEncryptAndSaveKey:
+ case EDevEncUiCommandEncryptWithRestoredKey:
+ {
+ // Pass the MMC memory entity to the operator, along with the command
+ iEncOperator->HandleMmcEncryptRequestL( iMemEntities[ EMemoryCard ],
+ aCommand );
+ break;
+ }
+
+ case EDevEncUiCommandDecrypt: // fall through
+ case EDevEncUiCommandDecryptAndTurnOffEncryption:
+ {
+ // Pass the MMC memory entity to the operator, along with the command
+ iEncOperator->HandleMmcDecryptRequestL( iMemEntities[ EMemoryCard ],
+ aCommand );
+ break;
+ }
+
+ case EDevEncUiCommandHelp:
+ {
+ DisplayHelpL();
+ break;
+ }
+
+ case EAknSoftkeyBack:
+ {
+ // Get the current view
+ TVwsViewId wsViewId;
+ TInt err = GetActiveViewId( wsViewId );
+ if ( ( err != KErrNone ) ||
+ ( wsViewId.iAppUid.iUid != KDevEncUiUid ) )
+ {
+ User::Leave( err );
+ }
+
+ // Go to the main view from the encryption and decryption views
+ if ( wsViewId.iViewUid.iUid == EDevEncUiEncrViewId ||
+ wsViewId.iViewUid.iUid == EDevEncUiDecrViewId )
+ {
+ ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ }
+ if ( wsViewId.iViewUid.iUid == EDevEncUiMainViewId )
+ {
+ Exit();
+ }
+ break;
+ }
+
+ case EEikCmdExit: // fall through
+ case EAknSoftkeyExit:
+ {
+ Exit();
+ break;
+ }
+
+ default:
+ Panic( EDevEncUi );
+ break;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Called by the framework when the app is moved to or from foreground.
+//
+// --------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::HandleForegroundEventL( TBool aForeground )
+ {
+ DFLOG( "CDevEncUiAppUi::HandleForegroundEventL" );
+ DFLOG2( "CDevEncUiAppUi::HandleForegroundEventL => aForeground = %d ", aForeground );
+ CAknAppUi::HandleForegroundEventL( aForeground );
+
+ iForeground = aForeground;
+
+ if( iConstructionOnGoing )
+ {
+ DFLOG( "CDevEncUiAppUi::HandleForegroundEventL => Construction on going" );
+ if( iTimer )
+ {
+ iTimer->Cancel();
+ }
+ iTimer->After( KDevEncUiConstructionDelay );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Called by the framework before the options menu is shown.
+// Sets the correct menu items.
+// --------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::DynInitMenuPaneL( TInt /*aResourceId*/,
+ CEikMenuPane* /*aMenuPane*/ )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// Called by the framework before the context-sensitive help is shown.
+// Sets the correct menu items.
+// --------------------------------------------------------------------------
+//
+//CArrayFix<TCoeHelpContext>* CDevEncUiAppUi::HelpContextL()
+// {
+// TCoeHelpContext& aContext
+// }
+
+// --------------------------------------------------------------------------
+// Called by the framework before the context-sensitive help is shown.
+// Sets the correct menu items.
+// --------------------------------------------------------------------------
+void CDevEncUiAppUi::DisplayHelpL()
+ {
+ CArrayFix<TCoeHelpContext>* contexts =
+ new ( ELeave ) CArrayFixFlat<TCoeHelpContext>( 1 );
+ CleanupStack::PushL( contexts );
+ TCoeHelpContext context;
+ context.iMajor = TUid::Uid( KDevEncUiUid );
+
+ // Get the currently active view
+ TVwsViewId wsViewId;
+ TInt err = GetActiveViewId( wsViewId );
+ if ( ( err != KErrNone ) ||
+ ( wsViewId.iAppUid.iUid != KDevEncUiUid ) )
+ {
+ User::Leave( err );
+ }
+
+ // Set the help context for the current view
+ switch ( wsViewId.iViewUid.iUid )
+ {
+ case EDevEncUiEncrViewId:
+ {
+ context.iContext = KES_HLP_ENCRYPTION_ENCRYPT;
+ }
+ break;
+ case EDevEncUiDecrViewId:
+ {
+ context.iContext = KES_HLP_ENCRYPTION_DECRYPT;
+ }
+ break;
+ default: // Main view
+ {
+ context.iContext = KES_HLP_ENCRYPTION_MAIN;
+ }
+ break;
+ }
+
+ contexts->AppendL( context );
+ CleanupStack::Pop( contexts );
+ HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(), contexts );
+ }
+
+// --------------------------------------------------------------------------
+// Called by CDevEncMmcObserver when MMC status changes.
+//
+// --------------------------------------------------------------------------
+void CDevEncUiAppUi::MMCStatusChangedL()
+ {
+ DFLOG( "CDevEncUiAppUi::MMCStatusChangedL" );
+ TVolumeInfo volInfo;
+
+ TInt err = iFs.Volume( volInfo, /*EDriveE*/EDriveF );
+ switch ( err )
+ {
+ case KErrNone:
+ {
+ // Readable MMC inserted
+ DFLOG( "MMC inserted" );
+ iMmcStatus = EMmcOk;
+ break;
+ }
+
+ case KErrNotReady:
+ {
+ // MMC ejected
+ DFLOG( "MMC ejected" );
+ iMmcStatus = EMmcNotPresent;
+ break;
+ }
+
+ case KErrCorrupt:
+ {
+ // Corrupt or unformatted MMC, or wrong key
+ DFLOG( "MMC corrupt, unformatted or encrypted with other key" );
+ iMmcStatus = EMmcNotReadable;
+ break;
+ }
+
+ default:
+ {
+ DFLOG2( "RFs::Volume returned error %d", err );
+ break;
+ }
+ } // switch
+ }
+
+// --------------------------------------------------------------------------
+// Called by memory entity when memory status changes.
+//
+// --------------------------------------------------------------------------
+void CDevEncUiAppUi::UpdateInfo( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint /*aProgress*/ )
+ {
+ DFLOG( "CDevEncUiAppUi::UpdateInfo" );
+ TInt error( KErrNone );
+ TRAP( error, DoUpdateInfoL( aType, aState ) );
+ DFLOG2( "CDevEncUiAppUi::DoUpdateInfo returned %d", error );
+ }
+
+// --------------------------------------------------------------------------
+// Helper function called by UpdateInfo when memory status changes.
+//
+// --------------------------------------------------------------------------
+void CDevEncUiAppUi::DoUpdateInfoL( TDevEncUiMemoryType aType,
+ TUint aState )
+ {
+ DFLOG( ">>CDevEncUiAppUi::DoUpdateInfoL" );
+ if ( aType != EMemoryCard )
+ {
+ return;
+ }
+
+ // Prevent re-entry
+ if ( iStatusUpdateOngoing )
+ {
+ return;
+ }
+ iStatusUpdateOngoing = ETrue;
+
+ DFLOG3( "CDevEncUiAppUi::DoUpdateInfoL, type %d, state %d",
+ aType, aState );
+ DFLOG2( "Mmc state %d", iMmcStatus );
+ DFLOG2( "Enc state %d", iMmcEncState );
+
+ // Check encryption key status
+ TInt mmcKeyInDriver( 0 );
+ iCrSettings->Get( KDevEncUserSettingMemoryCard, mmcKeyInDriver );
+
+ if ( ( iMmcStatus == EMmcOk ) &&
+ ( iMmcEncState == EUnmounted ) &&
+ ( aState == EDecrypted ) )
+ {
+ // A readable memory card has just been inserted
+
+ if ( mmcKeyInDriver )
+ {
+ // We have a valid encryption key, but the newly inserted
+ // card is decrypted. Ask if the user wants to encrypt.
+ // (see UI spec 2.13)
+ iEncOperator->SuggestMmcEncryptionL(
+ iMemEntities[ EMemoryCard ] );
+ }
+ }
+
+ if ( ( iMmcStatus == EMmcNotReadable ) &&
+ ( iMmcEncState == EUnmounted ) &&
+ ( aState == ECorrupted ) )
+ {
+ // An unreadable memory card has just been inserted
+
+ if ( mmcKeyInDriver )
+ {
+ // We seem to have the wrong encryption key in the driver.
+ // Inform the user that the card cannot be used.
+ // (see UI spec 2.16)
+ iEncOperator->ErrorNoteL(
+ R_DEVENCUI_TEXT_NOTE_INSERTON_UNUSEDMEMORYCARD );
+ }
+ else
+ {
+ DFLOG( "CDevEncUiAppUi::DoUpdateInfoL => SuggestMmcDecryption" );
+ // We have no encryption key in the driver.
+ // Ask if the user wants to import a key and decrypt.
+ // (see UI spec 2.17)
+ iEncOperator->SuggestMmcDecryptionL(
+ iMemEntities[ EMemoryCard ] );
+ }
+ }
+
+ iMmcEncState = aState;
+ iStatusUpdateOngoing = EFalse;
+ DFLOG( "<<CDevEncUiAppUi::DoUpdateInfoL" );
+ }
+
+// --------------------------------------------------------------------------
+// Called by the CDevEncUiTimer when the event is generated.
+//
+// --------------------------------------------------------------------------
+void CDevEncUiAppUi::Timeout()
+ {
+ DFLOG( "CDevEncUiAppUi::Timeout()" );
+
+ if( iForeground )
+ {
+ DFLOG( "CDevEncUiAppUi::Timeout() => Construction completed" );
+ //the construction is completed now
+ iConstructionOnGoing = EFalse;
+ // This class needs to observe memory card status changes.
+ // (This call results in a call to UpdateInfo, hence we need to be fully
+ // constructed before this.)
+ TRAP_IGNORE(iMemEntities[ EMemoryCard ]->AddObserverL( this ));
+
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiAppUi::ProcessCommandParametersL
+// From CEikAppUi
+// -----------------------------------------------------------------------------
+//
+TBool CDevEncUiAppUi::ProcessCommandParametersL(
+ TApaCommand /*aCommand*/,
+ TFileName& /*aDocumentName*/,
+ const TDesC8& /*aTail*/ )
+ {
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiAppUi::OpenFileL
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::OpenFileL(const TDesC& /*aFilename*/)
+ {
+ DFLOG("CDevEncUiAppUi::OpenFileL");
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiAppUi::OpenFileL()
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::OpenFileL(RFile& aFile)
+ {
+ _LIT(KTargetDir,"c:\\data\\others\\");
+ TBuf16<100> destinationPath;
+ destinationPath.Copy( KTargetDir );
+ TBuf16<250> sourcePath;
+ aFile.FullName( sourcePath );
+
+ // if the paths are the same, the copy operation will not be executed
+ if ( sourcePath.Left( destinationPath.Length() ).CompareF( destinationPath ) )
+ {
+ // copy the file to Others folder
+ TRAPD(err, CopyL( sourcePath, destinationPath ));
+
+ if( err == KErrNone )
+ {
+ iEncOperator->InfoNoteL( R_DEVENCUI_TEXT_NOTE_SAVEINFO, ETrue );
+ ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ }
+ else
+ {
+ Exit();
+ }
+ }
+ else
+ {
+ ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiAppUi::Copy()
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiAppUi::CopyL(const TDesC &anOld, const TDesC &aNew)
+ {
+ CFileMan* fileMan=CFileMan::NewL( iFs );
+ CleanupStack::PushL( fileMan );
+
+ User::LeaveIfError(fileMan->Copy( anOld, aNew ));
+
+ CleanupStack::PopAndDestroy( fileMan );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiCreateKeyProcess.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiCreateKeyProcess.
+*
+*/
+
+#include "DevEncLog.h"
+#include "DevEncUiCreateKeyProcess.h"
+#include <DevEncUi.rsg>
+
+CDevEncUiCreateKeyProcess::CDevEncUiCreateKeyProcess()
+ {
+ iCount = 0;
+ }
+
+CDevEncUiCreateKeyProcess::~CDevEncUiCreateKeyProcess()
+ {
+ }
+
+void CDevEncUiCreateKeyProcess::ProcessFinished()
+ {
+ }
+
+void CDevEncUiCreateKeyProcess::DialogDismissedL( TInt /*aButtonId*/ )
+ {
+ }
+
+//TInt CDevEncUiCreateKeyProcess::CycleError( TInt aError )
+// {
+// return aError;
+// }
+
+TBool CDevEncUiCreateKeyProcess::IsProcessDone() const
+ {
+ return ( iCount == 3 );
+ }
+
+void CDevEncUiCreateKeyProcess::StepL()
+ {
+ // Simulate processing
+ User::After( 1000000 );
+ iCount++;
+ }
+
+TBool CDevEncUiCreateKeyProcess::RunLD()
+ {
+ TBool returnvalue = EFalse;
+
+ CDevEncUiCreateKeyProcess* process = new ( ELeave ) CDevEncUiCreateKeyProcess();
+ CleanupStack::PushL( process );
+
+ CAknWaitNoteWrapper* waitNoteWrapper =
+ CAknWaitNoteWrapper::NewL();
+
+ CleanupStack::PushL( reinterpret_cast<CBase*>( waitNoteWrapper ) );
+
+ if ( waitNoteWrapper->ExecuteL( R_DEVENCUI_CREATING_KEY_WAITNOTE,
+ *process,
+ ETrue ) )
+ {
+ returnvalue = ETrue;
+ }
+ else //note was cancelled
+ {
+ returnvalue = EFalse;
+ }
+
+ CleanupStack::PopAndDestroy( waitNoteWrapper );
+ CleanupStack::PopAndDestroy( process );
+ return returnvalue;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiDecrView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiDecrView.
+*
+*/
+
+// INCLUDE FILES
+// Class includes
+#include "DevEncUiDecrView.h"
+
+// System includes
+#include <aknViewAppUi.h> // CAknViewAppUi
+#include <DevEncUi.rsg>
+
+// User includes
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUiDecrViewContainer.h"
+#include "DevEncUiMemoryEntity.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::CDevEncUiDecrView
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrView::~CDevEncUiDecrView()
+ {
+ delete iContainer;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrView* CDevEncUiDecrView::NewL( RArray<CDevEncUiMemoryEntity*>& aMemEntities )
+ {
+ CDevEncUiDecrView* self = CDevEncUiDecrView::NewLC( aMemEntities );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::NewLC
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrView* CDevEncUiDecrView::NewLC( RArray<CDevEncUiMemoryEntity*>& aMemEntities )
+ {
+ CDevEncUiDecrView* self = new ( ELeave ) CDevEncUiDecrView( aMemEntities );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::CDevEncUiDecrView
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrView::CDevEncUiDecrView( RArray<CDevEncUiMemoryEntity*>& aMemEntities )
+ : iMemEntities( aMemEntities )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::Container
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrViewContainer* CDevEncUiDecrView::Container()
+ {
+ return iContainer;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::GetAppUi
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiAppUi& CDevEncUiDecrView::GetAppUi()
+ {
+ CAknViewAppUi* aknViewAppUi = AppUi();
+ CDevEncUiAppUi* appUi = reinterpret_cast<CDevEncUiAppUi*>( aknViewAppUi );
+ return ( *appUi );
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrView::ConstructL()
+ {
+ BaseConstructL( R_DEVENCUI_DECRVIEW );
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::Id
+//
+// -----------------------------------------------------------------------------
+//
+TUid CDevEncUiDecrView::Id() const
+ {
+ return TUid::Uid( EDevEncUiDecrViewId );
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::DoActivateL
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ if ( !iContainer )
+ {
+ iContainer = CDevEncUiDecrViewContainer::NewL( AppUi()->ClientRect(),
+ *this );
+ iContainer->SetMopParent( this );
+ AppUi()->AddToStackL( *this, iContainer );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::DoDeactivate
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrView::DoDeactivate()
+ {
+ if (iContainer)
+ {
+ AppUi()->RemoveFromStack( iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrView::HandleCommandL
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrView::HandleCommandL( TInt aCommand )
+ {
+
+ switch ( aCommand )
+ {
+
+ case EAknSoftkeyBack:
+ {
+ AppUi()->HandleCommandL( EAknSoftkeyBack );
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Called by the framework when the application status pane
+// size is changed. Passes the new client rectangle to the container.
+// --------------------------------------------------------------------------
+void CDevEncUiDecrView::HandleStatusPaneSizeChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+void CDevEncUiDecrView::HandleResourceChangeL( TInt aType )
+ {
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ // do re-layout
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ iContainer->HandleResourceChange( aType );
+ }
+ }
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiDecrViewContainer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiDecrViewContainer.
+*
+*/
+
+// INCLUDE FILES
+
+// Class includes
+#include "DevEncUiDecrViewContainer.h"
+
+// System Includes
+#include <aknlists.h>
+#include <barsread.h>
+#include <coemain.h>
+#include <DevEncUi.rsg>
+#include <eikenv.h>
+
+// User Includes
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUi.pan"
+#include "DevEncUiAppui.h"
+#include "DevEncUiDocument.h"
+#include "DevEncUiDecrView.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::NewLC
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrViewContainer* CDevEncUiDecrViewContainer::NewLC( const TRect& aRect,
+ CAknView& aOwningView )
+ {
+ CDevEncUiDecrViewContainer* self =
+ new ( ELeave ) CDevEncUiDecrViewContainer( aOwningView );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrViewContainer* CDevEncUiDecrViewContainer::NewL( const TRect& aRect,
+ CAknView& aOwningView )
+ {
+ CDevEncUiDecrViewContainer* self = NewLC( aRect, aOwningView );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrViewContainer::ConstructL( const TRect& aRect )
+ {
+ // Create a window for this application view
+ CreateWindowL();
+
+ CreateListL();
+
+ // Set the windows size
+ SetRect( aRect );
+
+ // Activate the window, which makes it ready to be drawn
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::CreateListL
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrViewContainer::CreateListL()
+ {
+ // First phase construction
+ iListBox = new ( ELeave ) CAknDoubleStyle2ListBox;
+ iListBox->SetContainerWindowL( *this );
+
+ // Second Phase Construction
+ TResourceReader reader;
+ iEikonEnv->CreateResourceReaderLC( reader, R_DEVENCUI_DECRYPTION_LISTBOX );
+ iListBox->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader (Can't pass T-classes as parameter)
+
+ iListBox->SetListBoxObserver( this );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::CDevEncUiDecrViewContainer
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrViewContainer::CDevEncUiDecrViewContainer( CAknView& aOwningView )
+ : iOwningView( aOwningView )
+ {
+ // No implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::CDevEncUiDecrViewContainer
+//
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDecrViewContainer::~CDevEncUiDecrViewContainer()
+ {
+ delete iListBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::HandleListBoxEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrViewContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ switch ( aEventType )
+ {
+ case EEventItemDoubleClicked: // FALLTHROUGH
+ case EEventEnterKeyPressed:
+ {
+ if ( iListBox->CurrentItemIndex() == 0 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandDecrypt );
+ }
+ if ( iListBox->CurrentItemIndex() == 1 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandDecryptAndTurnOffEncryption );
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::CountComponentControls
+// Return number of controls inside this container
+// -----------------------------------------------------------------------------
+//
+TInt CDevEncUiDecrViewContainer::CountComponentControls() const
+ {
+ return 1;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::ComponentControl
+//
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CDevEncUiDecrViewContainer::ComponentControl( TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ return iListBox;
+ default:
+ return NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::Draw
+//
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDecrViewContainer::Draw( const TRect& aRect ) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.Clear( aRect );
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::OfferKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CDevEncUiDecrViewContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ if ( !iListBox )
+ {
+ return EKeyWasNotConsumed;
+ }
+ if ( aKeyEvent.iCode == EKeyDevice3 /* OK key */ )
+ {
+ if ( iListBox->CurrentItemIndex() < 0 )
+ {
+ return EKeyWasConsumed;
+ }
+ // User selected a list item. Notify the callback instance.
+ if ( iListBox->CurrentItemIndex() == 0 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandDecrypt );
+ }
+ if ( iListBox->CurrentItemIndex() == 1 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandDecryptAndTurnOffEncryption );
+ }
+ return EKeyWasConsumed;
+ }
+ return iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiDecrViewContainer::SizeChanged()
+//
+// --------------------------------------------------------------------------
+//
+ void CDevEncUiDecrViewContainer::SizeChanged()
+ {
+ if ( iListBox )
+ {
+ iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+ }
+ }
+
+//End Of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiDocument.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiDocument.
+*
+*/
+
+// INCLUDE FILES
+#include "DevEncLog.h"
+#include "DevEncUiAppui.h"
+#include "DevEncUiDocument.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDocument* CDevEncUiDocument::NewL( CEikApplication&
+ aApp )
+ {
+ CDevEncUiDocument* self = NewLC( aApp );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDocument* CDevEncUiDocument::NewLC( CEikApplication&
+ aApp )
+ {
+ CDevEncUiDocument* self =
+ new ( ELeave ) CDevEncUiDocument( aApp );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDocument::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDocument::ConstructL()
+ {
+ // No implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDocument::CDevEncUiDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CDevEncUiDocument::CDevEncUiDocument( CEikApplication& aApp )
+ : CAknDocument( aApp )
+ {
+ // No implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// CDevEncUiDocument::~CDevEncUiDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CDevEncUiDocument::~CDevEncUiDocument()
+ {
+ // No implementation required
+ }
+
+// ---------------------------------------------------------------------------
+// CDevEncUiDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CDevEncUiDocument::CreateAppUiL()
+ {
+ DFLOG( "CDevEncUiDocument::CreateAppUiL" );
+ // Create the application user interface, and return a pointer to it
+ // the framework takes ownership of this object
+ return ( static_cast <CEikAppUi*> ( new ( ELeave )
+ CDevEncUiAppUi ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CDevEncUiDocument::OpenFileL
+// -----------------------------------------------------------------------------
+//
+CFileStore* CDevEncUiDocument::OpenFileL(
+ TBool /*aDoOpen*/,
+ const TDesC& aFilename,
+ RFs& /*aFs*/)
+ {
+ iAppUi->OpenFileL(aFilename);
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// void CDevEncUiDocument::OpenFileL()
+// -----------------------------------------------------------------------------
+//
+void CDevEncUiDocument::OpenFileL(
+ CFileStore*& /*aFileStore*/,
+ RFile& aFile)
+ {
+ ((CDevEncUiAppUi*) iAppUi)->OpenFileL(aFile);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiEncrView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiEncrView.
+*
+*/
+
+// INCLUDE FILES
+// Class includes
+#include "DevEncUiEncrView.h"
+
+// System includes
+#include <aknViewAppUi.h> // CAknViewAppUi
+#include <DevEncUi.rsg>
+
+// User includes
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUiEncrViewContainer.h"
+#include "DevEncUiMemoryEntity.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+/**
+* Destructor. Frees up memory for the iLabel.
+*/
+CDevEncUiEncrView::~CDevEncUiEncrView()
+ {
+ delete iContainer;
+ }
+
+/**
+* Symbian OS 2 phase constructor.
+* Constructs the CDevEncUiEncrView using the NewLC method, popping
+* the constructed object from the CleanupStack before returning it.
+*
+* @param aRect The rectangle for this window
+* @return The newly constructed CDevEncUiEncrView
+*/
+CDevEncUiEncrView* CDevEncUiEncrView::NewL( RArray<CDevEncUiMemoryEntity*>& aMemEntities )
+ {
+ CDevEncUiEncrView* self = CDevEncUiEncrView::NewLC( aMemEntities );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+/**
+* Symbian OS 2 phase constructor.
+* Constructs the CDevEncUiEncrView using the constructor and ConstructL
+* method, leaving the constructed object on the CleanupStack before returning it.
+*
+* @param aRect The rectangle for this window
+* @return The newly constructed CDevEncUiEncrView
+*/
+CDevEncUiEncrView* CDevEncUiEncrView::NewLC( RArray<CDevEncUiMemoryEntity*>& aMemEntities )
+ {
+ CDevEncUiEncrView* self = new ( ELeave ) CDevEncUiEncrView( aMemEntities );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CDevEncUiEncrView::CDevEncUiEncrView( RArray<CDevEncUiMemoryEntity*>& aMemEntities )
+ : iMemEntities( aMemEntities )
+ {
+ }
+
+CDevEncUiEncrViewContainer* CDevEncUiEncrView::Container()
+ {
+ return iContainer;
+ }
+
+CDevEncUiAppUi& CDevEncUiEncrView::GetAppUi()
+ {
+ CAknViewAppUi* aknViewAppUi = AppUi();
+ CDevEncUiAppUi* appUi = reinterpret_cast<CDevEncUiAppUi*>( aknViewAppUi );
+ return ( *appUi );
+ }
+
+/**
+* Symbian OS 2nd phase constructor.
+* Uses the superclass constructor to construct the view using the
+* R_EMCCVIEWSWITCHED_VIEW1 resource.
+*/
+void CDevEncUiEncrView::ConstructL()
+ {
+ BaseConstructL( R_DEVENCUI_ENCRVIEW );
+ }
+
+/**
+* Called by the framework
+* @return The Uid for this view
+*/
+TUid CDevEncUiEncrView::Id() const
+ {
+ return TUid::Uid( EDevEncUiEncrViewId );
+ }
+
+/**
+* Called by the framework when the view is activated. Constructs the
+* container if necessary, setting this view as its MOP parent, and
+* adding it to the control stack.
+*/
+void CDevEncUiEncrView::DoActivateL( const TVwsViewId& /*aPrevViewId*/ ,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ if ( ! iContainer )
+ {
+ iContainer = CDevEncUiEncrViewContainer::NewL( AppUi()->ClientRect(),
+ *this );
+ iContainer->SetMopParent( this );
+ AppUi()->AddToStackL( *this, iContainer );
+ }
+ }
+
+/**
+* Called by the framework when the view is deactivated.
+* Removes the container from the control stack and deletes it.
+*/
+void CDevEncUiEncrView::DoDeactivate()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromStack( iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ }
+
+/**
+* From CEikAppUi, takes care of command handling for this view.
+*
+* @param aCommand command to be handled
+*/
+void CDevEncUiEncrView::HandleCommandL( TInt aCommand )
+ {
+ DFLOG2( "CDevEncUiEncrView::HandleCommandL %d", aCommand );
+
+ switch ( aCommand )
+ {
+ case EAknSoftkeyBack:
+ {
+ AppUi()->HandleCommandL( EAknSoftkeyBack );
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Called by the framework when the application status pane
+// size is changed. Passes the new client rectangle to the container.
+// --------------------------------------------------------------------------
+void CDevEncUiEncrView::HandleStatusPaneSizeChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiEncrViewContainer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiEncrViewContainer.
+*
+*/
+
+// INCLUDE FILES
+
+// Class includes
+#include "DevEncUiEncrViewContainer.h"
+
+// System Includes
+#include <aknlists.h>
+#include <barsread.h>
+#include <coemain.h>
+#include <DevEncUi.rsg>
+#include <eikenv.h>
+
+// User Includes
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUi.pan"
+#include "DevEncUiAppui.h"
+#include "DevEncUiDocument.h"
+#include "DevEncUiEncrView.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::NewLC
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncrViewContainer* CDevEncUiEncrViewContainer::NewLC( const TRect& aRect,
+ CAknView& aOwningView )
+ {
+ CDevEncUiEncrViewContainer* self =
+ new ( ELeave ) CDevEncUiEncrViewContainer( aOwningView );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::NewL
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncrViewContainer* CDevEncUiEncrViewContainer::NewL(
+ const TRect& aRect,
+ CAknView& aOwningView )
+ {
+ CDevEncUiEncrViewContainer* self = NewLC( aRect, aOwningView );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::ConstructL
+//
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncrViewContainer::ConstructL( const TRect& aRect )
+ {
+ // Create a window for this application view
+ CreateWindowL();
+
+ CreateListL();
+
+ // Set the windows size
+ SetRect( aRect );
+
+ // Activate the window, which makes it ready to be drawn
+ ActivateL();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::CreateListL
+//
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncrViewContainer::CreateListL()
+ {
+ // First phase construction
+ iListBox = new ( ELeave ) CAknDoubleStyle2ListBox;
+ iListBox->SetContainerWindowL( *this );
+
+ // Second Phase Construction
+ TResourceReader reader;
+ iEikonEnv->CreateResourceReaderLC( reader, R_DEVENCUI_ENCRYPTION_LISTBOX );
+ iListBox->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); // reader (Can't pass T-classes as parameter)
+
+ iListBox->SetListBoxObserver( this );
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::CDevEncUiEncrViewContainer
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncrViewContainer::CDevEncUiEncrViewContainer(
+ CAknView& aOwningView )
+ : iOwningView( aOwningView )
+ {
+ // No implementation required
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::CDevEncUiEncrViewContainer
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncrViewContainer::~CDevEncUiEncrViewContainer()
+ {
+ delete iListBox;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::HandleListBoxEventL
+//
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncrViewContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ switch ( aEventType )
+ {
+ case EEventItemDoubleClicked: // FALLTHROUGH
+ case EEventEnterKeyPressed:
+ {
+ if ( iListBox->CurrentItemIndex() == 0 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandEncryptWithoutSavingKey );
+ }
+ if ( iListBox->CurrentItemIndex() == 1 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandEncryptAndSaveKey );
+ }
+ if ( iListBox->CurrentItemIndex() == 2 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandEncryptWithRestoredKey );
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::CountComponentControls
+// Return number of controls inside this container
+// --------------------------------------------------------------------------
+//
+TInt CDevEncUiEncrViewContainer::CountComponentControls() const
+ {
+ return 1;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::ComponentControl
+//
+// --------------------------------------------------------------------------
+//
+CCoeControl* CDevEncUiEncrViewContainer::ComponentControl( TInt aIndex ) const
+ {
+ switch ( aIndex )
+ {
+ case 0:
+ return iListBox;
+ default:
+ return NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::Draw
+//
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncrViewContainer::Draw( const TRect& aRect ) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.Clear( aRect );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::OfferKeyEventL
+//
+// --------------------------------------------------------------------------
+//
+TKeyResponse CDevEncUiEncrViewContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ if ( !iListBox )
+ {
+ return EKeyWasNotConsumed;
+ }
+ if ( aKeyEvent.iCode == EKeyDevice3 /* OK key */ )
+ {
+ if ( iListBox->CurrentItemIndex() == 0 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandEncryptWithoutSavingKey );
+ }
+ if ( iListBox->CurrentItemIndex() == 1 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandEncryptAndSaveKey );
+ }
+ if ( iListBox->CurrentItemIndex() == 2 )
+ {
+ iOwningView.HandleCommandL( EDevEncUiCommandEncryptWithRestoredKey );
+ }
+ return EKeyWasConsumed;
+ }
+ return iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncrViewContainer::SizeChanged()
+//
+// --------------------------------------------------------------------------
+//
+ void CDevEncUiEncrViewContainer::SizeChanged()
+ {
+ if ( iListBox )
+ {
+ iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+ }
+ }
+
+//End Of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiEncryptionOperator.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1349 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiEncryptionOperator.
+*
+*/
+
+// INCLUDE FILES
+#include <DevEncExternalCRKeys.h>
+// Class includes
+#include "DevEncLog.h"
+#include "DevEncUids.hrh"
+#include "DevEncUiEncryptionOperator.h"
+
+#include "DevEncUiFileManager.h"
+
+//System includes
+#include <aknmessagequerydialog.h>
+#include <aknViewAppUi.h>
+#include <AknWaitNoteWrapper.h>
+#include <aknnotewrappers.h> // for CAknErrorNote
+#include <bautils.h> // For BAFL, localized resource files
+#include <centralrepository.h>
+#include <coemain.h>
+#include <data_caging_path_literals.hrh> // for resource files dir
+#include <DevEncUi.rsg>
+#include <eikenv.h>
+#include <e32property.h>
+#include <etelmm.h>
+#include <f32file.h>
+#include <gsfwviewuids.h> // For general settings view UIDs (autolock)
+#include <hwrmpowerstatesdkpskeys.h> // For power state
+#include <SecUiSecuritySettings.h> // for autolock
+#include <SettingsInternalCRKeys.h>
+#include <StringLoader.h>
+#include <utf.h> // For character conversion
+#include <TerminalControl3rdPartyAPI.h>
+
+#include <DevEncKeyUtils.h>
+
+//User includes
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUiCreateKeyProcess.h"
+#include "DevEncDef.h"
+#include "DevEncUiMemoryEntity.h"
+#include "DevEncUiSecretMinMaxCodeQuery.h"
+//for KMaxAutolockPeriod = 20;
+#include "DevEncSession.h"
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::~CDevEncUiEncryptionOperator
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncryptionOperator::~CDevEncUiEncryptionOperator()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::NewL
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncryptionOperator* CDevEncUiEncryptionOperator::NewL( CEikonEnv& aEikonEnv,
+ CAknViewAppUi& aAppUi,
+ CRepository*& aCrSettings )
+ {
+ CDevEncUiEncryptionOperator* self =
+ CDevEncUiEncryptionOperator::NewLC( aEikonEnv,
+ aAppUi,
+ aCrSettings );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::NewLC
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncryptionOperator* CDevEncUiEncryptionOperator::NewLC( CEikonEnv& aEikonEnv,
+ CAknViewAppUi& aAppUi,
+ CRepository*& aCrSettings )
+ {
+ CDevEncUiEncryptionOperator* self =
+ new ( ELeave ) CDevEncUiEncryptionOperator( aEikonEnv,
+ aAppUi,
+ aCrSettings );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CDevEncUiEncryptionOperator
+//
+// --------------------------------------------------------------------------
+//
+CDevEncUiEncryptionOperator::CDevEncUiEncryptionOperator( CEikonEnv& aEikonEnv,
+ CAknViewAppUi& aAppUi,
+ CRepository*& aCrSettings )
+ : iEikEnv( aEikonEnv ),
+ iAppUi( aAppUi ),
+ iCrSettings( aCrSettings )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::ConstructL
+//
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::ConstructL()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::HandlePhoneMemEncryptRequestL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::HandlePhoneMemEncryptRequestL( CDevEncUiMemoryEntity* aMem, CDevEncUiMemoryEntity* aPrimaryMem )
+ {
+ // Check the battery level first
+ if ( ! CheckBatteryL() )
+ {
+ // The battery level is too low and no charger is connected.
+ // Show a note to the user.
+ ErrorNoteL( R_DEVENCUI_TEXT_BATTERY_LOW );
+ User::Leave( KErrNotReady );
+ }
+
+ if ( (aMem->State() == EDecrypted) || (aPrimaryMem && (aPrimaryMem->State() == EDecrypted)) )
+ {
+ // Encryption is off -> encrypt
+ if ( PrepareEncryptionL() )
+ {
+ if ( aMem->State() == EDecrypted )
+ {
+ DFLOG( "Starting Mass Storage encryption" );
+ aMem->StartEncryptionL();
+ }
+ if( aPrimaryMem && (aPrimaryMem->State() == EDecrypted) )
+ {
+ DFLOG( "Starting phone memory encryption" );
+ aPrimaryMem->StartEncryptionL();
+ }
+ }
+ else
+ {
+ DFLOG( "Encryption cancelled" );
+ }
+ }
+ else if ( (aMem->State() == EEncrypted) || (aPrimaryMem && (aPrimaryMem->State() == EEncrypted)) )
+ {
+ if ( PrepareDecryptionL() )
+ {
+ if ( aMem->State() == EEncrypted )
+ {
+ DFLOG( "Starting Mass Storage decryption" );
+ aMem->StartDecryptionL();
+ }
+ if( aPrimaryMem && (aPrimaryMem->State() == EEncrypted) )
+ {
+ DFLOG( "Starting phone memory decryption" );
+ aPrimaryMem->StartDecryptionL();
+ }
+ }
+ else
+ {
+ DFLOG( "Decryption cancelled" );
+ }
+ }
+ else
+ {
+ DFLOG2( "Phone memory busy, state = %d, no action", aMem->State() );
+ }
+
+ // Depending on the user's selection, the memory may be in the same
+ // state as before or in a new state. This call will let all observers
+ // know what state the memory ended up in.
+ aMem->UpdateMemoryInfo();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::PrepareEncryptionL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::PrepareEncryptionL()
+ {
+ TBool result( EFalse );
+
+ // Show the confirmation query about autolock
+ CAknMessageQueryDialog* yesNoQuery = new ( ELeave ) CAknMessageQueryDialog;
+ if ( ! yesNoQuery->ExecuteLD( R_DEVENCUI_ENCRYPT_CONFIRMATION_QUERY_DIALOG ) )
+ {
+ // User answered no. Do nothing
+ DFLOG( "User cancelled after autolock warning. No action." );
+ return result;
+ }
+
+ // Autolock must be on before encryption can be enabled.
+ // Get the current autolock status and the current max autolock period
+ TInt lockTime = 0;
+ TBuf8<21> autoLockPeriodBuf;
+
+ RTerminalControl terminalCtrl;
+ TInt ctrlConnect = terminalCtrl.Connect();
+ DFLOG2( "DEVENC: terminal control connected %d", ctrlConnect );
+
+ RTerminalControl3rdPartySession session;
+ TInt retValue = session.Open( terminalCtrl );
+ DFLOG2( "DEVENC: terminal control session open %d", retValue );
+
+ TInt err2 = session.GetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, autoLockPeriodBuf );
+ DFLOG2( "DEVENC: max value get returned value %d", err2 );
+
+ TLex8 lexAutolock( autoLockPeriodBuf );
+ lexAutolock.Val( lockTime );
+ DFLOG2( "lockTime = %d", lockTime );
+
+ //Get current max autolock period
+ TBuf8<21> oldMaxPeriodBuf;
+ TInt maxperioderr = session.GetDeviceLockParameter( RTerminalControl3rdPartySession::EMaxTimeout, oldMaxPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", maxperioderr );
+
+#ifndef __WINS__
+ // Setting the autolock works only in target
+
+ if ( lockTime == 0 )
+ {
+ // Autolock disabled. Go to the autolock settings
+ DFLOG( "Autolock currently disabled, going to settings" );
+
+ // Create the filename of the SecUi resource file
+ _LIT( KFileDrive, "z:" );
+ _LIT( KSecUiResourceFileName, "SecUi.rsc" );
+ TFileName filename;
+ filename += KFileDrive;
+ filename += KDC_RESOURCE_FILES_DIR;
+ filename += KSecUiResourceFileName;
+
+ // Convert to a localized resource filename if possible
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ BaflUtils::NearestLanguageFile( fs, filename );
+
+ // Load the SecUi resource file
+ TInt rfileOffset( 0 );
+ TRAPD( err, rfileOffset = iEikEnv.AddResourceFileL( filename ) );
+ if ( err )
+ {
+ DFLOG2( "Add resource file error %d", err );
+ }
+ User::LeaveIfError( err );
+
+ // Set maximum autolock period
+
+ TBuf8<21> maxPeriodBuf;
+ maxPeriodBuf.AppendNum( KMaxAutolockPeriod );
+ TInt err3 = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::EMaxTimeout, maxPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err3 );
+
+ // Let the user set an autolock period
+ CSecuritySettings* secSett = CSecuritySettings::NewL();
+ CleanupStack::PushL( secSett );
+ TInt newLockTime = secSett->ChangeAutoLockPeriodL( lockTime );
+ CleanupStack::PopAndDestroy( secSett );
+
+ iEikEnv.DeleteResourceFile( rfileOffset );
+
+ if ( newLockTime == 0 )
+ {
+ // User cancelled or set autolock off -> do nothing
+ DFLOG( "User selected not to enable autolock. No action." );
+
+ //restore the old maximum period value
+ TInt err3 = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::EMaxTimeout, oldMaxPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err3 );
+
+ //the autolock period is now at KMaxAutolockPeriod( =20 ) so we have to set it as it was previously
+ err3 = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, autoLockPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err3 );
+
+ session.Close();
+ terminalCtrl.Close();
+ return result;
+ }
+
+ TBuf8<21> newLockTimeBuf;
+ newLockTimeBuf.AppendNum( newLockTime );
+
+ TInt setResult = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, newLockTimeBuf );
+ if ( setResult )
+ {
+ // TBI: Log the failure and leave with error
+ DFLOG2( "ERROR: session.SetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, .. ) returned %d", setResult );
+ session.Close();
+ terminalCtrl.Close();
+ return result;
+ }
+ lockTime = newLockTime;
+ }
+ else
+ {
+ DFLOG( "Autolock already enabled. Set only the current maximum period" );
+
+ //By setting the max autolock period the autolock period is set to max if it was greater than that
+ TBuf8<21> maxPeriodBuf;
+ maxPeriodBuf.AppendNum( KMaxAutolockPeriod );
+ TInt err3 = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::EMaxTimeout, maxPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err3 );
+ }
+#endif // __WINS__
+
+ DFLOG2( "Autolock time is %d", lockTime );
+
+ // Autolock is now enabled, so we can proceed with the encryption
+ // Warn the user about the long encryption process
+ if ( MessageQueryL( R_DEVENCUI_TEXT_NOTE_ENCRYPTING ) )
+ {
+ result = ETrue;
+ DFLOG( "Starting encryption" );
+ }
+ else
+ {
+ DFLOG( "Encryption cancelled" );
+ //the encryption was cancelled. Let's set the old autolock values
+ //restore the old maximum period value
+ TInt err3 = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::EMaxTimeout, oldMaxPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err3 );
+
+ //the autolock period is now at KMaxAutolockPeriod( =20 ) so we have to set it as it was previously
+ err3 = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, autoLockPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err3 );
+ }
+
+ session.Close();
+ terminalCtrl.Close();
+
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::PrepareDecryptionL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::PrepareDecryptionL()
+ {
+ // Warn the user about the long decryption process
+ return MessageQueryL( R_DEVENCUI_TEXT_NOTE_PHONE_DECRYPTING );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::MessageQueryL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::MessageQueryL( TInt aResourceId,
+ TInt aSoftKeysId )
+ {
+ TBool result( EFalse );
+
+ // Show a message query with OK and Cancel buttons and the specified text
+ CAknMessageQueryDialog* query =
+ new ( ELeave ) CAknMessageQueryDialog;
+ query->PrepareLC( R_DEVENCUI_ENCRYPT_CONFIRMATION_QUERY_DIALOG );
+ query->ButtonGroupContainer().SetCommandSetL( aSoftKeysId );
+ HBufC* prompt = StringLoader::LoadLC( aResourceId, &iEikEnv );
+ query->SetMessageTextL( *prompt );
+ CleanupStack::PopAndDestroy( prompt );
+ if ( query->RunLD() )
+ {
+ result = ETrue;
+ }
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::QueryDialog()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::QueryDialogL( TInt aResourceId,
+ TInt aSoftKeysId )
+ {
+ TBool result( EFalse );
+ CAknQueryDialog* query = CAknQueryDialog::NewL();
+ query->PrepareLC( R_DEVENCUI_CONFIRMATION_QUERY ); // CleanupStack OK
+ HBufC* prompt = StringLoader::LoadLC( aResourceId, &iEikEnv );
+ query->SetPromptL( *prompt );
+ query->ButtonGroupContainer().SetCommandSetL( aSoftKeysId );
+
+ CleanupStack::PopAndDestroy( prompt );
+ if ( query->RunLD() )
+ {
+ result = ETrue;
+ }
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::DataQueryDialogL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::DataQueryDialogL( TDes& aResult,
+ TInt aPromptResourceId,
+ TInt aMaxLength )
+ {
+ // The descriptor contained the prompt text for the query. The prompt
+ // text can also be defined in the resource structure of the query
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId, &iEikEnv );
+
+ // create dialog instance
+ CAknTextQueryDialog* dlg =
+ new( ELeave ) CAknTextQueryDialog( aResult, *prompt );
+
+ CleanupStack::PopAndDestroy( prompt );
+
+ // Sets the maximum length of the text editor
+ dlg->SetMaxLength( aMaxLength );
+
+ // Prepares the dialog, constructing it from the specified resource
+ dlg->PrepareLC( R_DEVENCUI_DATA_QUERY );
+
+ // Launch the dialog
+ return dlg->RunLD();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::HandleMmcEncryptRequestL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::HandleMmcEncryptRequestL( CDevEncUiMemoryEntity* aMem,
+ TInt aCommand )
+ {
+ // Check the battery level first
+ if ( ! CheckBatteryL() )
+ {
+ // The battery level is too low and no charger is connected.
+ // Show a note to the user.
+ ErrorNoteL( R_DEVENCUI_TEXT_BATTERY_LOW );
+ User::Leave( KErrNotReady );
+ }
+
+ TBool proceed( EFalse );
+ switch ( aCommand )
+ {
+ case EDevEncUiCommandEncryptWithRestoredKey:
+ {
+ DFLOG( "Encrypt with restored key selected" );
+ proceed = LoadAndSetKeyL(); // No cleanup stack needed
+ break;
+ }
+
+ case EDevEncUiCommandEncryptAndSaveKey:
+ {
+ DFLOG( "Encrypt and save key selected" );
+ proceed = CreateAndSaveKeyL(); // No cleanup stack needed
+ if( proceed )
+ {
+ InfoNoteL( R_DEVENCUI_TEXT_NOTE_SAVEINFO, ETrue );
+ DFLOG( "Key saved succesfully" );
+ }
+ break;
+ }
+
+ case EDevEncUiCommandEncryptWithoutSavingKey:
+ {
+ DFLOG( "Encrypt without saving key selected" );
+ // Create an encryption key and take it in use
+ // The key will remain in the driver until the next key is set,
+ // and it can not be retrieved.
+ proceed = CreateKeyL(); // No cleanup stack needed
+ break;
+ }
+
+ case EDevEncUiCommandEncryptWithCurrentKey:
+ {
+ DFLOG( "Encrypt with current key selected" );
+ proceed = ETrue;
+ }
+
+ default:
+ {
+ DFLOG( "Invalid command" );
+ break;
+ }
+ }
+
+ if ( aMem->State() == EUnmounted )
+ {
+ if( !proceed )
+ {
+ // The encryption operation was cancelled, just go back to encryption view
+ DFLOG( "No Mmc present and operation was cancelled -> no encryption" );
+ }
+ else
+ {
+ // The encryption operation was succesfull, go back to main view
+ iAppUi.ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ proceed = EFalse;
+ DFLOG( "No Mmc present -> no encryption" );
+ }
+ }
+
+ if ( aMem->State() == ECorrupted )
+ {
+ if( !proceed )
+ {
+ DFLOG( "Mmc probably enc with another key -> wait for remount" );
+ }
+ else
+ {
+ // Mmc was probably encrypted with another key. We have just set a
+ // new key, so now we have to wait until the state changes and hope
+ // that the card is readable. If it is, a note will be shown to the
+ // user. (See UI spec 2.7)
+ InfoNoteL( R_DEVENCUI_TEXT_NOTE_MEMORYCARD_ENCRYPTED, ETrue );
+ iAppUi.ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ proceed = EFalse;
+ DFLOG( "Mmc probably enc with another key -> wait for remount" );
+ RemountMmcL();
+ }
+ }
+
+ if ( proceed )
+ {
+ TInt encrypt( 0 );
+
+ // Check DM admin status
+ TInt dmControlSetting( 0 );
+ iCrSettings->Get( KDevEncUiDmControl, dmControlSetting );
+
+ if( ( dmControlSetting & KDmControlsMemoryCard ) && ( aCommand == EDevEncUiCommandEncryptWithCurrentKey ) )
+ {
+ //if the DM admin is controlling the encryption, encrypt straight away
+ encrypt = ETrue;
+ }
+ else
+ {
+ encrypt = MessageQueryL( R_DEVENCUI_TEXT_NOTE_ENCRYPTING );
+ }
+
+ // Warn the user about the long encryption process
+ if ( encrypt )
+ {
+ // Start the encryption
+ DFLOG( "Starting encryption" );
+ aMem->StartEncryptionL();
+ // Go back to main view
+ iAppUi.ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ }
+ else
+ {
+ DFLOG( "Encryption cancelled" );
+ // Stay in the Encryption view
+ // Show a note to the user about that the new key is in use,
+ // but the card is still decrypted (UI spec 2.3)
+ InfoNoteL( R_DEVENCUI_TEXT_NOTE_ENCRYPTIONINTERRUPT, ETrue );
+ iAppUi.ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ }
+ }
+
+ // Depending on the user's selection, the memory may be in the same
+ // state as before or in a new state. This call will let all observers
+ // know what state the memory ended up in.
+ aMem->UpdateMemoryInfo();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CreateKeyL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::CreateKeyL()
+ {
+ TBool proceed( EFalse );
+ CDevEncKeyUtils* utils = new ( ELeave ) CDevEncKeyUtils;
+ CleanupStack::PushL( utils );
+// User::LeaveIfError(utils->Connect());
+ TRequestStatus status;
+ utils->CreateSetKey( status, KEncryptionKeyLength );
+ User::WaitForRequest( status );
+// utils->Close();
+ CleanupStack::PopAndDestroy( utils );
+ if ( ! status.Int() )
+ {
+ // Save the Mmc encryption key status
+ User::LeaveIfError( iCrSettings->Set( KDevEncUserSettingMemoryCard,
+ ETrue ) );
+ proceed = ETrue;
+ }
+ return proceed;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CreateAndSaveKeyL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::CreateAndSaveKeyL()
+ {
+ TBool proceed( EFalse );
+
+ TBool passwordOk( EFalse );
+ TBool keyFileNameOk( EFalse );
+ TBool keyCreated( EFalse );
+ TBool keySaved( EFalse );
+ CFileStore* file( NULL );
+ HBufC* keyFileName = HBufC::NewLC( KMaxFilenameLength );
+
+ // Get the key password from the user
+ HBufC8* password = HBufC8::NewLC( KMaxPasswordLength );
+ TPtr8 passwordPtr = password->Des();
+ passwordOk = PasswordQueryL( R_DEVENCUI_TEXT_PASSPHRASE_PROTECT,
+ passwordPtr );
+
+ CDevEncUiFileManager* fm = new ( ELeave ) CDevEncUiFileManager;
+ CleanupStack::PushL( fm );
+ fm->ConstructL();
+
+ HBufC8* pkcs5Key( NULL );
+
+ if ( passwordOk )
+ {
+ DFLOG( "Password entered" );
+ // The user entered the correct password
+
+ // Construct file path
+ _LIT( KDevEncKeyFileExtension, ".pk5");
+ TBuf<KMaxFileName> filePath;
+ User::LeaveIfError( fm->KeyFolder( filePath ) );
+ TInt pathLen( filePath.Length() );
+
+ // Get the key file name from the user
+ TBool filenameEntered( EFalse );
+ TBool cancelPressed( EFalse );
+ TPtr16 keyFileNamePtr = keyFileName->Des();
+ while ( ( ! cancelPressed ) && ( ! file ) )
+ {
+ filenameEntered = DataQueryDialogL( keyFileNamePtr,
+ R_DEVENCUI_TEXT_FILENAME,
+ KMaxFilenameLength );
+ if ( !filenameEntered )
+ {
+ // User pressed cancel, stop here
+ cancelPressed = ETrue;
+ }
+ else
+ {
+ // User entered a file name. Try to open a file store
+ filePath.Append( keyFileNamePtr );
+ filePath.Append( KDevEncKeyFileExtension );
+ TInt openError = fm->OpenFileStore( filePath,
+ file );
+ if ( openError )
+ {
+ DFLOG2( "Error opening file: %d", openError );
+
+ // Notify the user that something went wrong
+ if ( openError == KErrAlreadyExists )
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_FILE_EXISTS );
+ }
+ else
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_BAD_NAME );
+ }
+
+ // Remove the file name from the path and try again
+ filePath.Delete( pathLen, filePath.Length() - pathLen );
+ }
+ else
+ {
+ DFLOG( "File opened:" );
+ DFLOGBUF( filePath );
+ keyFileNameOk = ETrue;
+ CleanupStack::PushL( file );
+ }
+ }
+ } // end of while
+ }
+ else
+ {
+ DFLOG( "Password incorrect" );
+ }
+
+ if ( keyFileNameOk )
+ {
+ // Create the encryption key
+ CDevEncKeyUtils* utils = new ( ELeave ) CDevEncKeyUtils;
+ CleanupStack::PushL( utils );
+// User::LeaveIfError(utils->Connect());
+
+ TRequestStatus status;
+ utils->CreateSetKey( status, pkcs5Key, *password, KEncryptionKeyLength );
+ User::WaitForRequest( status );
+// utils->Close();
+ CleanupStack::PopAndDestroy( utils );
+
+ if ( status.Int() )
+ {
+ DFLOG2( "Error creating key: %d", status.Int() );
+ }
+ else
+ {
+ keyCreated = ETrue;
+ CleanupStack::PushL( pkcs5Key );
+ // Save the Mmc encryption key status
+ User::LeaveIfError( iCrSettings->Set( KDevEncUserSettingMemoryCard,
+ ETrue ) );
+ }
+ }
+
+ if ( keyCreated )
+ {
+ // Save the key
+ fm->SaveKeyL( file, *pkcs5Key );
+ CleanupStack::PopAndDestroy( pkcs5Key );
+ keySaved = ETrue;
+ }
+
+ if ( keySaved )
+ {
+ // Finally, start the encryption
+ proceed = ETrue;
+ }
+
+ // Cleanup on demand
+ if ( file )
+ {
+ CleanupStack::PopAndDestroy( file );
+ }
+ if ( fm )
+ {
+ CleanupStack::PopAndDestroy( fm );
+ }
+ if ( password )
+ {
+ CleanupStack::PopAndDestroy( password );
+ }
+ if ( keyFileName )
+ {
+ CleanupStack::PopAndDestroy( keyFileName );
+ }
+
+ return proceed;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::LoadAndSetKeyL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::LoadAndSetKeyL()
+ {
+ TBool proceed( EFalse );
+
+ TBool keySelected( EFalse );
+ TBool passwordOk( EFalse );
+ TBool askPassword( ETrue );
+ HBufC8* pkcs5Key( NULL );
+ TBuf8<KMaxPasswordLength> password8;
+
+ // Get a list of existing keys in the private directory
+ CDevEncUiFileManager* fm = new ( ELeave ) CDevEncUiFileManager;
+ CleanupStack::PushL( fm );
+ fm->ConstructL();
+ CDir* dir( NULL );
+ fm->GetKeyListL( dir );
+
+ DFLOG2( "Found %d keys", dir->Count() );
+
+ if ( dir->Count() <= 0 )
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_NO_KEYS_FOUND );
+ User::Leave( KErrNotReady );
+ }
+
+ // Create a list for the query
+ iListQueryItemArray = new ( ELeave ) CDesCArrayFlat( dir->Count() );
+ for ( TInt i = 0; i < dir->Count(); i++ )
+ {
+ TEntry entry( (*dir)[i] );
+ HBufC* tmpFileName = entry.iName.AllocLC();
+ iListQueryItemArray->AppendL( entry.iName );
+ CleanupStack::PopAndDestroy( tmpFileName );
+ }
+
+ // Let the user select which key to load
+ TInt index( 0 ); // the index of the selected item
+ CAknListQueryDialog* query =
+ new ( ELeave ) CAknListQueryDialog( &index );
+ query->PrepareLC( R_DEVENCUI_LIST_QUERY );
+ query->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_BACK );
+ query->SetItemTextArray( iListQueryItemArray );
+ // Keep ownership of the item array
+ query->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ if ( query->RunLD() )
+ {
+ DFLOG2( "User selected key %d", index );
+ DFLOGBUF( ( *dir )[index].iName );
+ // Load the key file.
+
+ // Construct file path
+ TBuf<KMaxFileName> filePath;
+ DFLOG("Start find key folder");
+ User::LeaveIfError( fm->KeyFolder( filePath ) );
+ DFLOG("Stop find key folder");
+
+ TFileName filename;
+ filename.Append( filePath );
+ filename.Append( ( *dir )[index].iName );
+ fm->LoadKeyL( filename,
+ pkcs5Key );
+ CleanupStack::PushL( pkcs5Key );
+ keySelected = ETrue;
+ DFLOG( "Key loaded" );
+ }
+ else
+ {
+ // User cancelled the query
+ DFLOG( "Key file query cancelled by user, stopping here" );
+ }
+
+ while ( askPassword )
+ {
+ if ( keySelected )
+ {
+ // Get the key password from the user
+ passwordOk = PasswordQueryL( R_DEVENCUI_TEXT_PASSPHRASE_ASK,
+ password8 );
+ }
+ else
+ {
+ //The user pressed back. Do not ask the password
+ askPassword = EFalse;
+ }
+
+ if ( passwordOk )
+ {
+ DFLOG( "Password ok, setting key" );
+ CDevEncKeyUtils* utils = new ( ELeave ) CDevEncKeyUtils;
+ CleanupStack::PushL( utils );
+// User::LeaveIfError(utils->Connect());
+
+ TRequestStatus status;
+ utils->SetKey( status, *pkcs5Key, password8 );
+ User::WaitForRequest( status );
+// utils->Close();
+ CleanupStack::PopAndDestroy( utils );
+ if ( status.Int() )
+ {
+ const TInt KErrBadPassphrase( -11000 );
+ DFLOG2( "Error taking key in use: %d", status.Int() );
+ if ( status.Int() == KErrBadPassphrase )
+ {
+ DFLOG( "Invalid password" );
+ ErrorNoteL( R_DEVENCUI_TEXT_INVALID_PASSWORD );
+ }
+ else
+ {
+ DFLOG2( "Key read error %d", status.Int() );
+ ErrorNoteL( R_DEVENCUI_TEXT_KEY_ERROR );
+ askPassword = EFalse;
+ }
+ }
+ else
+ {
+ DFLOG( "New key is now in use" );
+ // Save the Mmc encryption key status
+ User::LeaveIfError( iCrSettings->Set( KDevEncUserSettingMemoryCard,
+ ETrue ) );
+ proceed = ETrue;
+ askPassword = EFalse;
+ }
+ }
+ else
+ {
+ askPassword = EFalse;
+ }
+ }
+ // Cleanup on demand
+ if ( pkcs5Key )
+ {
+ CleanupStack::PopAndDestroy( pkcs5Key );
+ }
+ if ( fm )
+ {
+ CleanupStack::PopAndDestroy( fm );
+ }
+
+ return proceed;
+ }
+
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::PasswordQueryL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::PasswordQueryL( TInt aPromptResourceId,
+ TDes8& aResult )
+ {
+ TBool passwordOk( EFalse );
+ TBuf<KMaxPasswordLength> password;
+ TBuf8<KMaxPasswordLength> password8;
+ CDevEncUiSecretMinMaxCodeQuery* query =
+ new ( ELeave ) CDevEncUiSecretMinMaxCodeQuery( password,
+ KMinPasswordLength,
+ KMaxPasswordLength );
+
+ HBufC* prompt = StringLoader::LoadLC( aPromptResourceId, &iEikEnv );
+ query->SetPromptL( *prompt );
+ CleanupStack::PopAndDestroy( prompt );
+
+ // Prompt the user for the key password
+ if ( ( query->ExecuteLD( R_DEVENCUI_CODE_QUERY ) ) )
+ {
+ // This indicates that the user filled in some password and
+ // pressed OK.
+ passwordOk = ETrue;
+ }
+ else
+ {
+ DFLOG( "Key password dialog cancelled" );
+ }
+
+ if ( passwordOk )
+ {
+ // Convert the password to UTF-8
+ if ( CnvUtfConverter::ConvertFromUnicodeToUtf8( password8,
+ password ) )
+ {
+ DFLOG( "Password conversion failed" );
+ passwordOk = EFalse;
+ }
+ else
+ {
+ aResult.Copy( password8 );
+ }
+ }
+
+ return passwordOk;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::HandleMmcDecryptRequestL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::HandleMmcDecryptRequestL( CDevEncUiMemoryEntity* aMem,
+ TInt aCommand )
+ {
+ // Check the battery level first
+ if ( ! CheckBatteryL() )
+ {
+ // The battery level is too low and no charger is connected.
+ // Show a note to the user.
+ ErrorNoteL( R_DEVENCUI_TEXT_BATTERY_LOW );
+ User::Leave( KErrNotReady );
+ }
+
+ TBool proceed( EFalse );
+ switch ( aCommand )
+ {
+ case EDevEncUiCommandDecrypt:
+ {
+ DFLOG( "Decrypt selected" );
+ // Warn the user about the long decryption process
+ proceed = MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPTING );
+ break;
+ }
+ case EDevEncUiCommandDecryptAndTurnOffEncryption:
+ {
+ DFLOG( "Decrypt and turn off selected" );
+ // Warn the user about the long decryption process,
+ // and that the key will be destroyed
+ proceed = MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPTINGDESTROY );
+ // Save the Mmc encryption key status
+ User::LeaveIfError( iCrSettings->Set( KDevEncUserSettingMemoryCard,
+ EFalse ) );
+ // The key will actually be destroyed in the DevEncStarter
+ // component, because the user may exit from the UI at any time.
+ // By saving the encryption key status in the central repository,
+ // we ensure that the Starter knows that it's supposed to destroy
+ // the key when the operation is complete
+ // TBI: Destroy the key in Starter after decryption is complete.
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ if ( aMem->State() == EUnmounted )
+ {
+ // Just go back to main view, no decryption operation
+ iAppUi.ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ proceed = EFalse;
+ DFLOG( "No Mmc present -> no decryption" );
+ }
+
+ if ( proceed )
+ {
+ // Start the decryption
+ DFLOG( "Starting decryption" );
+ aMem->StartDecryptionL();
+ // Go back to main view
+ iAppUi.ActivateLocalViewL( TUid::Uid( EDevEncUiMainViewId ) );
+ }
+ else
+ {
+ DFLOG( "Decryption cancelled" );
+ // Stay in the decryption view
+ }
+
+ // Depending on the user's selection, the memory may be in the same
+ // state as before or in a new state. This call will let all observers
+ // know what state the memory ended up in.
+ aMem->UpdateMemoryInfo();
+ }
+
+// ---------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CheckBatteryL()
+// Checks if there's enough battery power to update
+// ---------------------------------------------------------------------------
+//
+TBool CDevEncUiEncryptionOperator::CheckBatteryL()
+ {
+#ifdef __WINS__
+
+ // In the emulator, the battery level is always 0 and the charger is never
+ // connected, so just return ETrue.
+ return ETrue;
+
+#else // __WINS__
+
+ // Running on target. Check the real battery and charger status
+
+ TInt chargingstatus( EChargingStatusError );
+ TInt batterylevel( 1 );
+ TBool enoughPower( EFalse );
+
+ // Read battery
+ DFLOG( "CDevEncUiEncryptionOperator::CheckBatteryL" );
+ RProperty pw;
+ User::LeaveIfError( pw.Attach( KPSUidHWRMPowerState, KHWRMBatteryLevel ) );
+ User::LeaveIfError( pw.Get( batterylevel ) );
+ pw.Close();
+
+ User::LeaveIfError( pw.Attach( KPSUidHWRMPowerState, KHWRMChargingStatus ) );
+ User::LeaveIfError( pw.Get( chargingstatus ));
+ pw.Close();
+
+ // Too low battery, power insufficient
+ if ( batterylevel >= EBatteryLevelLevel4 )
+ {
+ enoughPower = ETrue;
+ }
+ // But charger is connected, power sufficient
+ if ( ( chargingstatus != EChargingStatusError ) &&
+ ( chargingstatus != EChargingStatusNotConnected ) )
+ {
+ enoughPower = ETrue;
+ }
+
+ DFLOG3( "Battery level: %d (0..7), chargingstatus %d",
+ batterylevel, chargingstatus );
+ DFLOG2( "CheckBatteryL %d", ( enoughPower ? 1 : 0 ) );
+ return enoughPower;
+
+#endif // __WINS__
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::ErrorNoteL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::ErrorNoteL( TInt aResourceId,
+ TBool aWaitingNote )
+ {
+ HBufC* message = StringLoader::LoadLC( aResourceId );
+ CAknErrorNote* errorNote = new ( ELeave ) CAknErrorNote( aWaitingNote );
+ errorNote->ExecuteLD( *message );
+ CleanupStack::PopAndDestroy( message );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::InfoNoteL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::InfoNoteL( TInt aResourceId,
+ TBool aWaitingNote )
+ {
+ HBufC* message = StringLoader::LoadLC( aResourceId );
+ CAknInformationNote* note = new ( ELeave ) CAknInformationNote( aWaitingNote );
+ note->ExecuteLD( *message );
+ CleanupStack::PopAndDestroy( message );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::DestroyKeyQueryL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::DestroyKeyQueryL( TBool aShowMmcNote )
+ {
+ TBool destroy = QueryDialogL( R_DEVENCUI_TEXT_NOTE_DECRYPT_NOMEMRYCARD, R_AVKON_SOFTKEYS_YES_NO );
+ if ( destroy )
+ {
+ DestroyKeyL();
+ if ( aShowMmcNote )
+ {
+ InfoNoteL( R_DEVENCUI_TEXT_NOTE_MEMORYCARD_UNENCRYPTED );
+ }
+ }
+ else
+ {
+ DFLOG( "User cancelled destroy key query" );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::DestroyKeyL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::DestroyKeyL()
+ {
+ DFLOG( "CDevEncUiEncryptionOperator::DestroyKeyL" );
+ CDevEncKeyUtils* utils = new ( ELeave ) CDevEncKeyUtils;
+ CleanupStack::PushL( utils );
+// User::LeaveIfError(utils->Connect());
+
+ TRequestStatus status;
+ utils->ResetKey( status );
+ User::WaitForRequest( status );
+// utils->Close();
+ CleanupStack::PopAndDestroy( utils );
+ if ( status.Int() )
+ {
+ DFLOG2( "DestroyKeyL error %d", status.Int() );
+ }
+ else
+ {
+ DFLOG( "DestroyKeyL done" );
+ // We no longer have a key in the driver. Update the user setting.
+ iCrSettings->Set( KDevEncUserSettingMemoryCard, 0 );
+ }
+ User::LeaveIfError( status.Int() );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::SuggestMmcEncryptionL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::SuggestMmcEncryptionL(
+ CDevEncUiMemoryEntity* aMem )
+ {
+ TInt encrypt( 0 );
+
+ // Check DM admin status
+ TInt dmControlSetting( 0 );
+ iCrSettings->Get( KDevEncUiDmControl, dmControlSetting );
+
+ if( dmControlSetting & KDmControlsMemoryCard )
+ {
+ //The admin is controlling the encryption, encrypt straight away without questions
+ encrypt = ETrue;
+ }
+ else
+ {
+ encrypt = MessageQueryL( R_DEVENCUI_TEXT_NOTE_INSERTUNENCRYPTED,
+ R_AVKON_SOFTKEYS_YES_NO );
+ }
+
+ if ( encrypt )
+ {
+ HandleMmcEncryptRequestL( aMem,
+ EDevEncUiCommandEncryptWithCurrentKey );
+ }
+ else
+ {
+ DFLOG( "User selected not to encrypt the card" );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::SuggestMmcDecryptionL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::SuggestMmcDecryptionL( CDevEncUiMemoryEntity* aMem )
+ {
+ TBool decrypt = MessageQueryL( R_DEVENCUI_TEXT_NOTE_INSERTENCRYPTED,
+ R_AVKON_SOFTKEYS_YES_NO );
+ if ( decrypt )
+ {
+ SuggestMmcImportKeyL( aMem, ETrue );
+ }
+ else
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_NOTE_INSERTOFF_UNUSEDMEMORYCARD );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::SuggestMmcImportKeyL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::SuggestMmcImportKeyL(
+ CDevEncUiMemoryEntity* /*aMem*/,
+ TBool aFirstAttempt )
+ {
+ DFLOG( "CDevEncUiEncryptionOperator::SuggestMmcImportKeyL" );
+ TBool import( ETrue );
+ if ( aFirstAttempt )
+ {
+ DFLOG( "CDevEncUiEncryptionOperator::SuggestMmcImportKeyL => firstAttempt" );
+ import = MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPT_LOADKEY,
+ R_AVKON_SOFTKEYS_YES_NO );
+ }
+
+ if ( import )
+ {
+ TBool reloadKey = ETrue;
+ // Loop while user chooses correct key or cancels operation
+ while ( reloadKey )
+ {
+ TBool keySet = LoadAndSetKeyL();
+ if ( !keySet )
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_NOTE_UNUSEDMEMORYCARD );
+ reloadKey = EFalse;
+ }
+ else
+ {
+ // New key is in use, now we need to remount the mmc
+ RemountMmcL();
+
+ // Check that key is valid
+ TInt err = CheckMMCStatus();
+
+ if( err == KErrCorrupt )
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_NOTE_WRONGKEYFILE );
+ reloadKey = ETrue;
+ }
+ else
+ {
+ reloadKey = EFalse;
+ }
+ }
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CheckMMCStatus()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiEncryptionOperator::CheckMMCStatus()
+ {
+ TVolumeInfo volInfo;
+ RFs fs;
+ TInt err = fs.Connect();
+ if (err == KErrNone)
+ {
+ fs.Volume( volInfo, EDriveF );
+ fs.Close();
+ }
+ return err;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::RemountMmc()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::RemountMmcL()
+ {
+ CDevEncUiFileManager* fm = new ( ELeave ) CDevEncUiFileManager;
+ CleanupStack::PushL( fm );
+ fm->ConstructL();
+ TInt error = fm->RemountMmc();
+ CleanupStack::PopAndDestroy( fm );
+ if ( error )
+ {
+ DFLOG2( "Mmc remount failed, error %d", error );
+ User::Leave( error );
+ }
+ else
+ {
+ DFLOG( "Mmc remounted" );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::ShowWrongKeyNoteL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::ShowWrongKeyNoteL()
+ {
+ ErrorNoteL( R_DEVENCUI_TEXT_NOTE_INSERTON_UNUSEDMEMORYCARD );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CheckNotesWithHeaderL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiEncryptionOperator::CheckNotesWithHeaderL()
+ {
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPT_LOADKEY );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPT_NOMEMRYCARD );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPTING );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_DECRYPTINGDESTROY );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_ENCRYPTING );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_ENCRYPTIONINTERRUPT );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_INSERTENCRYPTED );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_INSERTOFF_UNUSEDMEMORYCARD );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_INSERTON_UNUSEDMEMORYCARD );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_INSERTUNENCRYPTED );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_LOCK );
+ MessageQueryL( R_DEVENCUI_TEXT_NOTE_PHONE_DECRYPTING );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiEncryptionOperator::CheckNotesL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiEncryptionOperator::CheckNotesL()
+ {
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_DECRYPT_LOADKEY );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_DECRYPT_NOMEMRYCARD );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_DECRYPTING );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_DECRYPTINGDESTROY );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_ENCRYPTING );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_ENCRYPTIONINTERRUPT );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_INSERTENCRYPTED );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_INSERTOFF_UNUSEDMEMORYCARD );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_INSERTON_UNUSEDMEMORYCARD );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_INSERTUNENCRYPTED );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_LOCK );
+ QueryDialogL( R_DEVENCUI_TEXT_NOTE_PHONE_DECRYPTING );
+ }
+
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiFileManager.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiFileManager.
+*
+*/
+
+#include "DevEncLog.h"
+#include "DevEncUids.hrh"
+#include "DevEncUiFileManager.h"
+
+#include <pathinfo.h>
+#include <s32file.h>
+#include <s32std.h>
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::CDevEncUiFileManager()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiFileManager::ConstructL()
+ {
+ User::LeaveIfError( iFs.Connect() );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::CDevEncUiFileManager()
+//
+// --------------------------------------------------------------------------
+CDevEncUiFileManager::~CDevEncUiFileManager()
+ {
+ iFs.Close();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::SaveKeyL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiFileManager::SaveKeyL( CFileStore* aStore,
+ const TDesC8& aPkcs5Key ) const
+ {
+ RStoreWriteStream write;
+
+ aStore->SetTypeL( aStore->Layout() );
+
+ //write the encryption key to a new stream
+ write.CreateLC( *aStore );
+ write << aPkcs5Key;
+ write.CommitL();
+ CleanupStack::PopAndDestroy(); //CreateLC()
+
+ aStore->Commit();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::LoadKeyL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiFileManager::LoadKeyL( const TFileName& aFileName,
+ HBufC8*& aPkcs5Key )
+ {
+ DFLOG2( "CDevEncUiFileManager::LoadKeyL Filename %S", &aFileName );
+ //prepare to read the streams back in, creating a new TPBEncryptionData
+ RStoreReadStream read;
+
+ // open the next PFS
+ CFileStore *store = CPermanentFileStore::OpenLC( iFs,
+ aFileName,
+ EFileRead );
+
+ DFLOG("CPermanentFileStore::OpenLC passed");
+
+ TStreamId dataStreamId( 1 ); // we know it was the first stream written
+ read.OpenLC( *store, dataStreamId );
+ DFLOG("RStoreReadStream::OpenLC passed");
+ //read in Encryption key
+ aPkcs5Key = HBufC8::NewL( read, KMaxTInt );
+ DFLOG("HBufC8::NewL passed");
+ CleanupStack::Pop(); // read
+ read.Close();
+ CleanupStack::PopAndDestroy( store );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::OpenFileStore()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiFileManager::OpenFileStore( const TDesC& aFilename,
+ CFileStore*& aStore )
+ {
+ // Leaves with KErrAlreadyExists if file exists from before
+ TInt error( KErrNone );
+ CFileStore* store( NULL );
+ TRAP( error, store = CPermanentFileStore::CreateL( iFs,
+ aFilename,
+ EFileRead | EFileWrite ) );
+ if ( !error )
+ {
+ aStore = store;
+ }
+ return error;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::GetKeyListL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiFileManager::GetKeyListL( CDir*& aList )
+ {
+ // Construct file path
+ _LIT( KAsterisk, "*" );
+ _LIT( KDevEncKeyFileExtension, ".pk5");
+
+ TBuf<KMaxFileName> filePath;
+ User::LeaveIfError( KeyFolder( filePath ) );
+ filePath.Append( KAsterisk );
+ filePath.Append( KDevEncKeyFileExtension );
+
+ TInt error = iFs.GetDir( filePath,
+ KEntryAttNormal, // Any file, not hidden and system files
+ ESortByName,
+ aList );
+ if ( error )
+ {
+ DFLOG2( "Could not get dir listing, error %d", error );
+ User::Leave( error );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::DriveToChar()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiFileManager::DriveToChar( TInt aDrive, TChar &aChar )
+ {
+ return iFs.DriveToChar( aDrive, aChar );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::KeyFolder()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiFileManager::KeyFolder( TDes& aResult )
+ {
+ DFLOG("KeyFolder()");
+ TInt result( KErrNone );
+ if ( !result )
+ {
+ DFLOG("1st Append");
+ aResult.Append( PathInfo::PhoneMemoryRootPath() );
+ DFLOG("2nd Append");
+ aResult.Append( PathInfo::OthersPath() );
+ }
+ DFLOG2( "CDevEncUiFileManager::KeyFolder %S", &aResult );
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiFileManager::RemountMmc()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiFileManager::RemountMmc()
+ {
+ return iFs.RemountDrive( /*EDriveE*/EDriveF );
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiLog.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2005 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: Implementation of CFileLog.
+*
+*/
+
+#include "DevEncUiLog.h"
+#include <flogger.h>
+
+#if defined( _DEBUG ) && defined ( DEVENCUI_LOG )
+
+_LIT( KDevEncUiLogDir, "DevEnc");
+_LIT( KDevEncUiLogFile, "DevEncUi.log");
+
+void CFileLog::Printf( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat( KDevEncUiLogDir,
+ KDevEncUiLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ list );
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiMainView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,441 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiMainView.
+*
+*/
+
+// INCLUDES
+
+// Class include
+#include "DevEncUiMainView.h"
+
+// System includes
+#include <aknnotewrappers.h>
+#include <aknViewAppUi.h> // CAknViewAppUi
+#include <DevEncUi.rsg>
+#include <e32cmn.h>
+#include <StringLoader.h>
+#include <DevEncExternalCRKeys.h>
+
+// User includes
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUiEncryptionOperator.h"
+
+#include "DevEncUiMainViewContainer.h"
+#include "DevEncUiMemoryEntity.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+/**
+* Destructor. Frees up memory for the iLabel.
+*/
+CDevEncUiMainView::~CDevEncUiMainView()
+ {
+ for ( TInt i = 0; i < iMemEntities.Count(); i++ )
+ {
+ iMemEntities[i]->RemoveObserver( iContainer );
+ }
+ delete iContainer;
+ delete iEncOperator;
+ }
+
+/**
+* Symbian OS 2 phase constructor.
+* Constructs the CDevEncUiMainView using the NewLC method, popping
+* the constructed object from the CleanupStack before returning it.
+*
+* @param aRect The rectangle for this window
+* @return The newly constructed CDevEncUiMainView
+*/
+CDevEncUiMainView* CDevEncUiMainView::NewL(
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus )
+ {
+ CDevEncUiMainView* self = CDevEncUiMainView::NewLC( aMemEntities,
+ aCrSettings,
+ aMmcStatus );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+/**
+* Symbian OS 2 phase constructor.
+* Constructs the CDevEncUiMainView using the constructor and ConstructL
+* method, leaving the constructed object on the CleanupStack before returning it.
+*
+* @param aRect The rectangle for this window
+* @return The newly constructed CDevEncUiMainView
+*/
+CDevEncUiMainView* CDevEncUiMainView::NewLC(
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus )
+ {
+ CDevEncUiMainView* self =
+ new ( ELeave ) CDevEncUiMainView( aMemEntities,
+ aCrSettings,
+ aMmcStatus );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CDevEncUiMainView::CDevEncUiMainView( RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus )
+ : iMemEntities( aMemEntities ),
+ iCrSettings( aCrSettings ),
+ iMmcStatus( aMmcStatus )
+ {
+ }
+
+/**
+* Symbian OS 2nd phase constructor.
+* Uses the superclass constructor to construct the view
+*/
+void CDevEncUiMainView::ConstructL()
+ {
+ BaseConstructL( R_DEVENCUI_MAINVIEW );
+
+ iContainer = CDevEncUiMainViewContainer::NewL( AppUi()->ClientRect(),
+ iMemEntities,
+ *this,
+ iCrSettings,
+ iMmcStatus );
+ iContainer->SetMopParent( this );
+
+ for ( TInt i = 0; i < iMemEntities.Count(); i++ )
+ {
+ iMemEntities[i]->AddObserverL( iContainer );
+ }
+ }
+
+/**
+* Called by the framework
+* @return The Uid for this view
+*/
+TUid CDevEncUiMainView::Id() const
+ {
+ return TUid::Uid( EDevEncUiMainViewId );
+ }
+
+/**
+* Called by the framework when the view is activated.
+* Adds the container to the control stack.
+*/
+void CDevEncUiMainView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/)
+ {
+ AppUi()->AddToStackL( *this, iContainer );
+
+ if ( iEikonEnv->StartedAsServerApp() )
+ {
+ CEikButtonGroupContainer* cba = Cba();
+ cba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+ }
+ }
+
+/**
+* Called by the framework when the view is deactivated.
+* Removes the container from the control stack.
+*/
+void CDevEncUiMainView::DoDeactivate()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromStack( iContainer );
+ }
+ }
+
+/**
+* From CEikAppUi, takes care of command handling for this view.
+*
+* @param aCommand command to be handled
+*/
+void CDevEncUiMainView::HandleCommandL( TInt aCommand )
+ {
+
+ switch ( aCommand )
+ {
+ case EDevEncUiCommandChange:
+ {
+ // Show the toggle popup
+ if ( iContainer->ChangeSelectedItemL() )
+ {
+ // The user made a new selection
+ TDevEncUiMemoryType memoryType =
+ static_cast<TDevEncUiMemoryType>( iContainer->SelectedItem() );
+ EncryptionStatusChangeReq( memoryType );
+ }
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+void CDevEncUiMainView::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ if ( ! iContainer ||
+ iMemEntities.Count() == 0 )
+ {
+ return;
+ }
+
+ // Disable the "Change" menu item if an encryption operation is ongoing
+ if ( aResourceId == R_DEVENCUI_MENU_MAIN )
+ {
+ TBool proceed( ETrue );
+ TInt dmControl( 0 );
+ TInt err = iCrSettings->Get( KDevEncUiDmControl, dmControl );
+ if ( err )
+ {
+ DFLOG2( "Cenrep error %d", err );
+ User::Leave( err );
+ }
+
+ // Check if phone memory encryption is controlled by dev management
+ if ( ( dmControl & KDmControlsPhoneMemory ) &&
+ ( iContainer->SelectedItem() == EPhoneMemory ) )
+ {
+ // Selected memory is controlled by DM -> disable "Change"
+ aMenuPane->SetItemDimmed( EDevEncUiCommandChange, ETrue );
+ proceed = EFalse;
+ }
+
+ // Check if memory card encryption is controlled by dev management
+ if ( ( dmControl & KDmControlsMemoryCard ) &&
+ ( iContainer->SelectedItem() == EMemoryCard ) )
+ {
+ // Selected memory is controlled by DM -> disable "Change"
+ aMenuPane->SetItemDimmed( EDevEncUiCommandChange, ETrue );
+ proceed = EFalse;
+ }
+
+ if ( !proceed )
+ {
+ DFLOG( "Hiding Change, item is controlled by DM" );
+ return;
+ }
+
+ // Show the "Change" item if encryption status can be changed
+ TBool allowChange( EFalse );
+ if ( ( iMemEntities[ EMemoryCard ]->State() == EUnmounted ||
+ iMemEntities[ EMemoryCard ]->State() == EDecrypted ||
+ iMemEntities[ EMemoryCard ]->State() == EEncrypted ) &&
+ ( iMemEntities[ EPhoneMemory ]->State() == EDecrypted ||
+ iMemEntities[ EPhoneMemory ]->State() == EEncrypted ) )
+ {
+ allowChange = ETrue;
+ }
+
+ if ( allowChange )
+ {
+ aMenuPane->SetItemDimmed( EDevEncUiCommandChange, EFalse );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( EDevEncUiCommandChange, ETrue );
+ }
+ }
+ }
+
+
+
+CDevEncUiAppUi& CDevEncUiMainView::GetAppUi()
+ {
+ CAknViewAppUi* aknViewAppUi = AppUi();
+ CDevEncUiAppUi* appUi = reinterpret_cast<CDevEncUiAppUi*>( aknViewAppUi );
+ return ( *appUi );
+ }
+
+void CDevEncUiMainView::EncryptionStatusChangeReq( TDevEncUiMemoryType aType )
+ {
+ // Can't do anything about errors here
+ TInt error( KErrNone );
+ TRAP( error, DoEncryptionStatusChangeReqL( aType ) );
+ if ( error )
+ {
+ DFLOG2( "DoEncryptionStatusChangeReqL error %d", error );
+ }
+ }
+
+// TBI: Async this function and create a subfunction with -L
+void CDevEncUiMainView::DoEncryptionStatusChangeReqL( TDevEncUiMemoryType aType )
+ {
+ DFLOG( "CDevEncUiMainView::DoEncryptionStatusChangeReqL" );
+
+ // Check if we are allowed to start an encryption operation
+ TInt dmControl( 0 );
+ TInt err = iCrSettings->Get( KDevEncUiDmControl, dmControl );
+ if ( err )
+ {
+ DFLOG2( "Cenrep error %d", err );
+ User::Leave( err );
+ }
+ if ( DmControlsMemory( aType, dmControl ) )
+ {
+ // Encryption controlled by admin
+ ErrorNoteL( R_DEVENCUI_NOTE_ADMIN_CONTROL );
+ return;
+ }
+
+ // Create the encryption operator if necessary
+ if ( ! iEncOperator )
+ {
+ iEncOperator = CDevEncUiEncryptionOperator::NewL( *iEikonEnv,
+ *AppUi(),
+ iCrSettings );
+ }
+
+ // Get the currently highlighted memory type
+ CDevEncUiMemoryEntity* mem = iMemEntities[ aType ];
+
+ DFLOG3( "Mem type: %d, state: %d", aType, mem->State() );
+
+ if ( aType == EPhoneMemory )
+ {
+ CDevEncUiMemoryEntity* phoneMemory = iMemEntities[ EPrimaryPhoneMemory];
+ iEncOperator->HandlePhoneMemEncryptRequestL( mem, phoneMemory );
+ }
+ else // aType = EMemoryCard
+ {
+ HandleMemoryCardEncryptRequestL( mem );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainView::ErrorNoteL()
+// TBI: Create base class and move this there
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainView::ErrorNoteL( TInt aResourceId )
+ {
+ HBufC* message = StringLoader::LoadLC( aResourceId );
+ CAknErrorNote* errorNote = new ( ELeave ) CAknErrorNote;
+ errorNote->ExecuteLD( *message );
+ CleanupStack::PopAndDestroy( message );
+ }
+
+// TBI: Create base class and move this there
+TBool CDevEncUiMainView::DmControlsMemory( TDevEncUiMemoryType aType,
+ TInt aDmControlSetting )
+ {
+ TBool result( EFalse );
+ if ( ( aType == EPhoneMemory ) &&
+ ( aDmControlSetting & KDmControlsPhoneMemory ) )
+ {
+ result = ETrue;
+ }
+ if ( ( aType == EMemoryCard ) &&
+ ( aDmControlSetting & KDmControlsMemoryCard ) )
+ {
+ result = ETrue;
+ }
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainView::HandleMemoryCardEncryptRequestL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainView::HandleMemoryCardEncryptRequestL( CDevEncUiMemoryEntity* aMem )
+ {
+ // Check if the driver has a known encryption key
+ TInt mmcEncrOn( 0 );
+ iCrSettings->Get( KDevEncUserSettingMemoryCard, mmcEncrOn );
+
+ if ( aMem->State() == EDecrypted ||
+ aMem->State() == EUnmounted )
+ {
+ if ( mmcEncrOn )
+ {
+ // Mmc decrypted or ejected but encryption is on ->
+ // suggest destruction of key
+ DFLOG( "Mmc decrypted, encryption key set -> destroy key?" );
+ if ( aMem->State() == EDecrypted )
+ {
+ // Mmc inserted -> indicate that it is decrypted
+ // (see UI spec 2.12)
+ iEncOperator->DestroyKeyQueryL( ETrue );
+ }
+ else
+ {
+ // Mmc ejected -> no need to show note
+ // (see UI spec 2.11)
+ iEncOperator->DestroyKeyQueryL( EFalse );
+ }
+ }
+ else
+ {
+ // Mmc decrypted and encryption is off -> show encryption menu
+ DFLOG( "Mmc decrypted, encryption key not set -> enc menu" );
+ AppUi()->ActivateLocalViewL( TUid::Uid( EDevEncUiEncrViewId ) );
+ }
+ }
+ else if ( aMem->State() == EEncrypted )
+ {
+ // Encryption is on -> show decryption menu
+ DFLOG( "Mmc encrypted -> decr menu" );
+ AppUi()->ActivateLocalViewL( TUid::Uid( EDevEncUiDecrViewId ) );
+ }
+ else if ( aMem->State() == ECorrupted )
+ {
+ if ( mmcEncrOn )
+ {
+ // Mmc seems to be encrypted with another key.
+ // Ask if the user wants to import another key.
+ // (See UI spec 2.10)
+ DFLOG( "CDevEncUiMainView::HandleMemoryCardEncryptRequestL => Mmc encrypted with another key, enc on -> import key" );
+ iEncOperator->SuggestMmcImportKeyL( aMem, ETrue );
+ }
+ else
+ {
+ // Mmc is probably encrypted with another key -> show encryption
+ // menu to let user choose a key
+ DFLOG( "Mmc encrypted, encryption key not set -> enc menu" );
+ AppUi()->ActivateLocalViewL( TUid::Uid( EDevEncUiEncrViewId ) );
+ }
+ }
+ else
+ {
+ DFLOG2( "Mmc busy, state = %d, no action", aMem->State() );
+ }
+ // Depending on the user's selection, the memory may be in the same
+ // state as before or in a new state. This call will let all observers
+ // know what state the memory ended up in.
+ aMem->UpdateMemoryInfo();
+
+ }
+
+// --------------------------------------------------------------------------
+// Called by the framework when the application status pane
+// size is changed. Passes the new client rectangle to the container.
+// --------------------------------------------------------------------------
+void CDevEncUiMainView::HandleStatusPaneSizeChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiMainViewContainer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,564 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiMainViewContainer.
+*
+*/
+
+
+// INCLUDE FILES
+
+// Class includes
+#include "DevEncUiMainViewContainer.h"
+
+//System includes
+#include <centralrepository.h>
+#include <coemain.h>
+#include <eikenv.h>
+#include <DevEncEngineConstants.h>
+#include <StringLoader.h>
+#include <DevEncUi.rsg>
+
+//User includes
+#include "DevEncLog.h"
+#include "DevEncUi.pan"
+#include "DevEncUiAppui.h"
+#include "DevEncUiDocument.h"
+#include "DevEncUiMainView.h"
+#include "DevEncUiSettingItemList.h"
+#include "DevEncUiMemoryEntity.h"
+
+// Local definitions
+const TInt KPercent100( 100 );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::NewLC()
+// --------------------------------------------------------------------------
+//
+CDevEncUiMainViewContainer* CDevEncUiMainViewContainer::NewLC(
+ const TRect& aRect,
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ MContainerEventCallback& aCallback,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus )
+ {
+ CDevEncUiMainViewContainer* self =
+ new ( ELeave ) CDevEncUiMainViewContainer( aMemEntities,
+ aCallback,
+ aCrSettings,
+ aMmcStatus );
+
+ CleanupStack::PushL( self );
+ self->ConstructL(aRect);
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::NewL()
+// --------------------------------------------------------------------------
+//
+CDevEncUiMainViewContainer* CDevEncUiMainViewContainer::NewL(
+ const TRect& aRect,
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ MContainerEventCallback& aCallback,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus )
+ {
+ CDevEncUiMainViewContainer* self = NewLC( aRect,
+ aMemEntities,
+ aCallback,
+ aCrSettings,
+ aMmcStatus );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::ConstructL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainViewContainer::ConstructL(const TRect& aRect)
+ {
+ // Create a window for this application view
+ CreateWindowL();
+ // TBD: Give the list some settings
+ iSettingItemList = new ( ELeave ) CDevEncUiSettingItemList();
+ iSettingItemList->SetMopParent( this );
+ iSettingItemList->ConstructFromResourceL( R_DEVENCUI_SETTING_ITEM_LIST );
+ SetRect( aRect );
+ ActivateL();
+ }
+
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::CDevEncUiMainViewContainer()
+// --------------------------------------------------------------------------
+//
+CDevEncUiMainViewContainer::CDevEncUiMainViewContainer(
+ RArray<CDevEncUiMemoryEntity*>& aMemEntities,
+ MContainerEventCallback& aCallback,
+ CRepository*& aCrSettings,
+ TInt& aMmcStatus )
+ : iMemEntities( aMemEntities ),
+ iCallback( aCallback ),
+ iCrSettings( aCrSettings ),
+ iMmcStatus( aMmcStatus )
+ {
+ // No implementation required
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::CDevEncUiMainViewContainer()
+// --------------------------------------------------------------------------
+//
+CDevEncUiMainViewContainer::~CDevEncUiMainViewContainer()
+ {
+ delete iSettingItemList;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::CountComponentControls()
+// --------------------------------------------------------------------------
+//
+TInt CDevEncUiMainViewContainer::CountComponentControls() const
+ {
+ return 1;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::ComponentControl()
+// --------------------------------------------------------------------------
+//
+CCoeControl* CDevEncUiMainViewContainer::ComponentControl( TInt aIndex ) const
+ {
+ CCoeControl* returnedItem( NULL );
+ switch (aIndex)
+ {
+ case 0:
+ returnedItem = iSettingItemList;
+ break;
+ default:
+ break;
+ }
+ return returnedItem;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::SizeChanged()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainViewContainer::SizeChanged()
+ {
+ if ( iSettingItemList )
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+ mainPaneRect );
+ iSettingItemList->SetRect( mainPaneRect );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::HandleResourceChange()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainViewContainer::HandleResourceChange( TInt aType )
+ {
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ if ( iSettingItemList )
+ {
+ TRect mainPaneRect;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+ mainPaneRect );
+ iSettingItemList->SetRect( mainPaneRect );
+ iSettingItemList->HandleResourceChange( aType );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::OfferKeyEventL()
+// --------------------------------------------------------------------------
+//
+TKeyResponse CDevEncUiMainViewContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ if ( aKeyEvent.iCode == EKeyDevice3 /* OK key */ ||
+ aKeyEvent.iCode == EKeyEnter /* Enter key*/ )
+ {
+ // User selected a list item. Proceed to toggle the status
+ TInt selectedItem = iSettingItemList->SelectedItem();
+ if ( selectedItem < 0 )
+ {
+ return EKeyWasConsumed;
+ }
+ TDevEncUiMemoryType type = static_cast<TDevEncUiMemoryType>( selectedItem );
+ iCallback.EncryptionStatusChangeReq( type );
+ return EKeyWasConsumed;
+ }
+ else
+ {
+ if ( iSettingItemList )
+ return iSettingItemList->OfferKeyEventL( aKeyEvent, aType );
+ else
+ return EKeyWasNotConsumed;
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ // CDevEncUiMainViewContainer::SelectedItem()
+ // --------------------------------------------------------------------------
+ //
+TInt CDevEncUiMainViewContainer::SelectedItem()
+ {
+ if ( !iSettingItemList )
+ {
+ return -1;
+ }
+ return iSettingItemList->SelectedItem();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::ChangeSelectedItemL()
+// --------------------------------------------------------------------------
+//
+TBool CDevEncUiMainViewContainer::ChangeSelectedItemL()
+ {
+ TBool itemChanged( EFalse );
+ if ( !iSettingItemList )
+ {
+ return itemChanged;
+ }
+ // Get index of currently selected item
+ TInt selectedItem = iSettingItemList->SelectedItem();
+ if ( selectedItem < 0 )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ // Fetch the current setting for later comparison
+ TBool currentSetting( EFalse );
+ iSettingItemList->ItemState( selectedItem, currentSetting );
+
+ // Let the user change the value (synchronously during this call)
+ iSettingItemList->ChangeSelectedItemL();
+
+ // Compare the new setting for changes
+ TBool newSetting( EFalse );
+ iSettingItemList->ItemState( selectedItem, newSetting );
+
+ // Notify our callback observer if the setting was changed. This always
+ // eventually results in a call to UpdateInfo, which means that if the
+ // user decides to interrupt the operation, the values in the setting
+ // item list are updated accordingly.
+ if ( newSetting != currentSetting )
+ {
+ itemChanged = ETrue;
+ }
+ return itemChanged;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::UpdateInfo()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainViewContainer::UpdateInfo( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint aProgress /* = 0*/ )
+ {
+ DFLOG( ">>CDevEncUiMainViewContainer::UpdateInfoL" );
+ TInt err( KErrNone );
+ TRAP( err, DoUpdateInfoL( aType, aState, aProgress ) );
+ if ( err )
+ {
+ DFLOG2( "CDevEncUiMainViewContainer::UpdateInfoL => error is %d", err );
+ // TBI: Log the error
+ }
+ DFLOG( "<<CDevEncUiMainViewContainer::UpdateInfoL" );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMainViewContainer::DoUpdateInfoL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiMainViewContainer::DoUpdateInfoL( TDevEncUiMemoryType aType,
+ TUint aState,
+ TUint aProgress /*= 0*/ )
+ {
+ DFLOG( ">>CDevEncUiMainViewContainer::DoUpdateInfoL" );
+ DFLOG2( "CDevEncUiMainViewContainer::DoUpdateInfoL, type %d", aType );
+ DFLOG3( "New state %d, new progress %d", aState, aProgress );
+
+ if ( aType > EPrimaryPhoneMemory )
+ {
+ // Unknown memory type
+ User::Leave( KErrUnknown );
+ }
+ if ( aState > ECorrupted )
+ {
+ // Unknown state
+ User::Leave( KErrCorrupt );
+ }
+ if ( aProgress > KPercent100 )
+ {
+ // Invalid progress value
+ User::Leave( KErrOverflow );
+ }
+
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => Passed first area of error ");
+
+ HBufC* stateText( NULL );
+
+ switch ( aState )
+ {
+ case EDecrypted:
+ {
+ if ( ( aType == EMemoryCard ) && ( iMmcStatus == EMmcOk ) )
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => Memory card OK ");
+ // The Mmc is readable and decrypted, but there may be a key
+ // in the driver. In that case, we need to show "On" even
+ // though the card itself is not encrypted.
+ TBool mmcEncKeyInDriver( EFalse );
+ User::LeaveIfError(
+ iCrSettings->Get( KDevEncUserSettingMemoryCard,
+ mmcEncKeyInDriver ) );
+ if ( mmcEncKeyInDriver )
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => MMCKey in driver ");
+ // "On"
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_ENCRYPTION_ON,
+ iEikonEnv );
+ // Update the On/Off popup settings
+ iSettingItemList->SetItemStateL( aType, ETrue );
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => MMCKey NOT in driver ");
+ // "Off"
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_ENCRYPTION_OFF,
+ iEikonEnv );
+ // Update the On/Off popup settings
+ iSettingItemList->SetItemStateL( aType, EFalse );
+ }
+ }
+ else if (aType == EMemoryCard)
+ {
+ stateText = StringLoader::LoadLC( R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv );
+ iSettingItemList->SetItemStateL( aType, EFalse );
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => Phone Memory or Mass Storage ");
+ if (aType == EPhoneMemory) // Mass Storage
+ {
+ if ( iMemEntities.Count() > EPrimaryPhoneMemory )
+ {
+ TUint phoneMemState = iMemEntities[EPrimaryPhoneMemory]->State();
+ DFLOG2( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Mass Storage, need Phone Memory State: %d", phoneMemState);
+ if (phoneMemState == ECorrupted)
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_CORRUPTED, iEikonEnv);
+ }
+ else
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv);
+ }
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Mass Storage, no Phone Memory");
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv);
+ }
+ }
+ else // aType == EPrimaryPhoneMemory, means Phone Memory
+ {
+ if ( iMemEntities.Count() > EPhoneMemory )
+ {
+ TUint massStoreState = iMemEntities[EPhoneMemory]->State();
+ DFLOG2( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Phone Memory, need Mass Storage State: %d", massStoreState);
+ if (massStoreState == ECorrupted)
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_CORRUPTED, iEikonEnv);
+ }
+ else
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv);
+ }
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Phone Memory, no Mass Storage");
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv);
+ }
+ }
+
+ // Update the On/Off popup settings
+ iSettingItemList->SetItemStateL( EPhoneMemory, EFalse );
+ }
+ break;
+ }
+ case EEncrypting:
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => EEncrypting ");
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_ENCRYPT_PROCESS,
+ //R_DEVENCUI_TEXT_DECRYPT,
+ aProgress,
+ iEikonEnv );
+ break;
+ }
+ case EEncrypted:
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => Phone Memory or Mass Storage ");
+ if (aType == EPhoneMemory) // Mass Storage
+ {
+ if ( iMemEntities.Count() > EPrimaryPhoneMemory )
+ {
+ TUint phoneMemState = iMemEntities[EPrimaryPhoneMemory]->State();
+ DFLOG2( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Mass Storage, need Phone Memory State: %d", phoneMemState);
+ if (phoneMemState == ECorrupted)
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_CORRUPTED, iEikonEnv);
+ }
+ else if (phoneMemState == EDecrypted)
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv);
+ }
+ else
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_ON, iEikonEnv);
+ }
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Mass Storage, no Phone Memory");
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_ON, iEikonEnv);
+ }
+ }
+ else if (aType == EPrimaryPhoneMemory)// Phone Memory
+ {
+ if ( iMemEntities.Count() > EPhoneMemory )
+ {
+ TUint massStoreState = iMemEntities[EPhoneMemory]->State();
+ DFLOG2( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Phone Memory, need Mass Storage State: %d", massStoreState);
+ if (massStoreState == ECorrupted)
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_CORRUPTED, iEikonEnv);
+ }
+ else if (massStoreState == EDecrypted)
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_OFF, iEikonEnv);
+ }
+ else
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_ON, iEikonEnv);
+ }
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL, Now Phone Memory, no Mass Storage");
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_ON, iEikonEnv);
+ }
+ }
+ else // Memory Card
+ {
+ stateText = StringLoader::LoadLC(R_DEVENCUI_TEXT_ENCRYPTION_ON, iEikonEnv);
+ }
+ // Update the On/Off popup settings
+ if ( aType != EPrimaryPhoneMemory )
+ {
+ iSettingItemList->SetItemStateL( aType, ETrue );
+ }
+ else
+ {
+ iSettingItemList->SetItemStateL( EPhoneMemory, ETrue );
+ }
+ break;
+ }
+ case EDecrypting:
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => EDecrypting ");
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_DECRYPT_PROCESS,
+ aProgress,
+ iEikonEnv );
+ break;
+ }
+ case ECorrupted: // fall through
+ case EUnmounted:
+ default:
+ {
+ if ( aType == EMemoryCard )
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => MMC Corrupted ");
+ // Mmc is a) not inserted, b) corrupted or c) encrypted with
+ // another key. Check the user setting, and show "On" if any
+ // key is in the driver.
+ TBool mmcEncKeyInDriver( EFalse );
+ User::LeaveIfError(
+ iCrSettings->Get( KDevEncUserSettingMemoryCard,
+ mmcEncKeyInDriver ) );
+ if ( mmcEncKeyInDriver )
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => MMC On ");
+ // "On"
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_ENCRYPTION_ON,
+ iEikonEnv );
+ // Update the On/Off popup settings
+ iSettingItemList->SetItemStateL( aType, ETrue );
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => MMC Off ");
+ // "Off"
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_ENCRYPTION_OFF,
+ iEikonEnv );
+ // Update the On/Off popup settings
+ iSettingItemList->SetItemStateL( aType, EFalse );
+ }
+ }
+ else
+ {
+ DFLOG( "CDevEncUiMainViewContainer::DoUpdateInfoL => NON OF THE PREVIOUS");
+ stateText = StringLoader::LoadLC(
+ R_DEVENCUI_TEXT_CORRUPTED,
+ iEikonEnv );
+ }
+ break;
+ }
+ } // End of switch
+
+ if (aType != EPrimaryPhoneMemory)
+ {
+ iSettingItemList->SetItemTextL( aType, *stateText );
+ }
+ else
+ {
+ iSettingItemList->SetItemTextL( EPhoneMemory, *stateText );
+ }
+ CleanupStack::PopAndDestroy( stateText );
+
+ DFLOG( ">>CDevEncUiMainViewContainer::DoUpdateInfoL" );
+ }
+
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiMemoryEntity.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,535 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiMemoryEntity.
+*
+*/
+
+#include "DevEncLog.h"
+#include "DevEncUiMemoryEntity.h"
+#include "DevEncUiMemInfoObserver.h"
+
+#include "DevEncDiskUtils.h"
+#include "DevEncSession.h"
+#include <f32file.h> // for TDriveNumer
+#include <DevEncEngineConstants.h>
+#include <TerminalControl3rdPartyAPI.h>
+
+// Local definitions
+const TInt KPercent100( 100 );
+const TTimeIntervalMicroSeconds32 KProgressInterval( 500000 ); // ms, 0.5 seconds
+const TTimeIntervalMicroSeconds32 KPollInterval( 2000000 ); // ms, 2 seconds
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::CDevEncUiMemoryEntity()
+//
+// --------------------------------------------------------------------------
+CDevEncUiMemoryEntity::CDevEncUiMemoryEntity(
+ CEikonEnv* aEikonEnv,
+ TDevEncUiMemoryType aType )
+ : iEikEnv( aEikonEnv ),
+ iType( aType )
+ {
+ // TBI: Get the real states from the underlying SW levels
+ iState = EDecrypted;
+ }
+
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::~CDevEncUiMemoryEntity()
+//
+// --------------------------------------------------------------------------
+CDevEncUiMemoryEntity::~CDevEncUiMemoryEntity()
+ {
+ if ( iPeriodic )
+ {
+ iPeriodic->Cancel();
+ delete iPeriodic;
+ }
+ iObservers.Close();
+ if ( iSession )
+ {
+ iSession->Close();
+ delete iSession;
+ }
+ delete iDiskStatusObserver;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::NewL()
+//
+// --------------------------------------------------------------------------
+CDevEncUiMemoryEntity* CDevEncUiMemoryEntity::NewL(
+ CEikonEnv* aEikonEnv,
+ TDevEncUiMemoryType aType )
+ {
+ CDevEncUiMemoryEntity* self =
+ CDevEncUiMemoryEntity::NewLC( aEikonEnv, aType );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::NewLC()
+//
+// --------------------------------------------------------------------------
+CDevEncUiMemoryEntity* CDevEncUiMemoryEntity::NewLC(
+ CEikonEnv* aEikonEnv,
+ TDevEncUiMemoryType aType )
+ {
+ CDevEncUiMemoryEntity* self =
+ new ( ELeave ) CDevEncUiMemoryEntity( aEikonEnv, aType );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::ConstructL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::ConstructL()
+ {
+ DFLOG2( ">>CDevEncUiMemoryEntity::ConstructL, drive = %d", iType );
+
+ switch( iType )
+ {
+ case EPhoneMemory: iSession = new ( ELeave ) CDevEncSession( /*EDriveC*/EDriveE );
+ iDiskStatusObserver = CDiskStatusObserver::NewL( this, /*EDriveC*/EDriveE );
+ break;
+
+ case EPrimaryPhoneMemory: iSession = new ( ELeave ) CDevEncSession( EDriveC );
+ iDiskStatusObserver = CDiskStatusObserver::NewL( this, EDriveC );
+ break;
+
+ case EMemoryCard: iSession = new ( ELeave ) CDevEncSession( /*EDriveE*/EDriveF );
+ iDiskStatusObserver = CDiskStatusObserver::NewL( this, /*EDriveE*/EDriveF );
+ break;
+ }
+
+ // Get initial memory state
+ TInt nfeDiskStatus( EUnmounted );
+#ifndef __WINS__
+ User::LeaveIfError( iSession->Connect() );
+ TInt err = iSession->DiskStatus( nfeDiskStatus );
+ if ( err )
+ {
+ DFLOG2( "Could not get disk status, error %d", err );
+ nfeDiskStatus = EDecrypted;
+ //User::Leave( err );
+ }
+#else
+ nfeDiskStatus = EDecrypted;
+#endif
+ SetState( nfeDiskStatus );
+
+ if ( ( iState == EEncrypting ) ||
+ ( iState == EDecrypting ) )
+ {
+ // If the app was started in the middle of an ongoing operation,
+ // start polling the progress
+ StartPolling( KProgressInterval );
+ }
+ else
+ {
+ // Otherwise poll every once in a while to see if the status changes
+ //StartPolling( KPollInterval );
+ }
+
+ DFLOG( "<<CDevEncUiMemoryEntity::ConstructL" );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::AddObserverL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::AddObserverL( MDevEncUiMemInfoObserver* aInfoObserver )
+ {
+ DFLOG( "CDevEncUiMemoryEntity::AddObserverL" );
+ if ( !aInfoObserver )
+ {
+ User::Leave( KErrArgument );
+ }
+ iObservers.AppendL( aInfoObserver );
+
+ // The new observer probably wants to know the current states
+ UpdateMemoryInfo();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::RemoveObserver()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::RemoveObserver( MDevEncUiMemInfoObserver* aInfoObserver )
+ {
+ if ( !aInfoObserver )
+ {
+ return;
+ }
+ TInt index( iObservers.Find( aInfoObserver ) );
+ if ( index != KErrNotFound )
+ {
+ iObservers.Remove( index );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::StartEncryptionL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::StartEncryptionL()
+ {
+ DFLOG( ">>CDevEncUiMemoryEntity::StartEncryptionL" );
+
+#ifndef __WINS__
+
+ if ( ! iSession->Connected() )
+ {
+ User::LeaveIfError( iSession->Connect() );
+ DFLOG( "Connected" );
+ }
+
+ // Make sure the memory is decrypted
+ TInt nfeDiskStatus( EUnmounted );
+ TInt err = iSession->DiskStatus( nfeDiskStatus );
+ if ( err )
+ {
+ DFLOG2( "Could not get disk status, error %d", err );
+ User::Leave( err );
+ }
+ if ( nfeDiskStatus != EDecrypted )
+ {
+ DFLOG2( "Memory is in wrong state (%d), leaving", nfeDiskStatus );
+ User::Leave( KErrNotReady );
+ }
+
+ // Launch the encryption process
+ err = iSession->StartDiskEncrypt();
+ if ( err )
+ {
+ DFLOG2( "Could not start encryption, error %d", err );
+ User::Leave( err );
+ }
+
+ // Set our internal state and update UI
+ iPercentDone = 0;
+ SetState( EEncrypting );
+
+ // Start a timer to periodically update the memory state in the UI
+ StartPolling( KProgressInterval );
+
+#endif // __WINS__
+
+ DFLOG( "<<CDevEncUiMemoryEntity::StartEncryptionL" );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::StartPolling()
+// Starts a timer to periodically update the memory state in the UI
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::StartPolling(
+ TTimeIntervalMicroSeconds32 aInterval )
+ {
+ TInt error( KErrNone );
+ TRAP( error, DoStartPollingL( aInterval ) );
+ DFLOG2( "CDevEncUiMemoryEntity::StartPolling result %d", error );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::DoStartPollingL()
+// Starts a timer to periodically update the memory state in the UI
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::DoStartPollingL(
+ TTimeIntervalMicroSeconds32 aInterval )
+ {
+ TCallBack pollCallBack( PollTick, static_cast<TAny*>( this ) );
+ TCallBack progressCallBack( ProgressTick, static_cast<TAny*>( this ) );
+
+ if ( !iPeriodic )
+ {
+ iPeriodic = CPeriodic::NewL( EPriorityNormal );
+ }
+ iPeriodic->Cancel();
+
+ if ( aInterval == KProgressInterval )
+ {
+ iPeriodic->Start( 0, aInterval, progressCallBack );
+ }
+ else
+ {
+ iPeriodic->Start( 0, aInterval, pollCallBack );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::StartDecryptionL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::StartDecryptionL()
+ {
+ DFLOG( ">>CDevEncUiMemoryEntity::StartDecryptionL" );
+
+#ifndef __WINS__
+
+ if ( ! iSession->Connected() )
+ {
+ User::LeaveIfError( iSession->Connect() );
+ DFLOG( "Connected " );
+ }
+
+ // Make sure the memory is encrypted
+ TInt nfeDiskStatus( EUnmounted );
+ TInt err = iSession->DiskStatus( nfeDiskStatus );
+ if ( err )
+ {
+ DFLOG2( "Could not get disk status, error %d", err );
+ //User::Leave( err );
+ }
+ if ( nfeDiskStatus != EEncrypted )
+ {
+ DFLOG2( "Memory is in wrong state (%d), leaving", nfeDiskStatus );
+ User::Leave( KErrNotReady );
+ }
+
+ // Launch the decryption process
+ err = iSession->StartDiskDecrypt();
+ if ( err )
+ {
+ DFLOG2( "Could not start decryption, error %d", err );
+ User::Leave( err );
+ }
+
+ // Set our internal state and update UI
+ iPercentDone = 0;
+ SetState( EDecrypting );
+
+ // Start a timer to periodically update the memory state in the UI
+ StartPolling( KProgressInterval );
+
+#endif // __WINS__
+
+ DFLOG( "<<CDevEncUiMemoryEntity::StartDecryptionL" );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::ProgressTick()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiMemoryEntity::ProgressTick( TAny* aPtr )
+ {
+ CDevEncUiMemoryEntity* self = static_cast<CDevEncUiMemoryEntity*>( aPtr );
+ self->DoProgressTick();
+ return 0;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::DoProgressTick()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::DoProgressTick()
+ {
+ CheckProgress();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::PollTick()
+//
+// --------------------------------------------------------------------------
+TInt CDevEncUiMemoryEntity::PollTick( TAny* aPtr )
+ {
+ CDevEncUiMemoryEntity* self = static_cast<CDevEncUiMemoryEntity*>( aPtr );
+ TInt error( KErrNone );
+ TRAP( error, self->DoPollTickL() );
+ DFLOG2( "CDevEncUiMemoryEntity::PollTick result %d", error );
+ return 0;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::DoPollTickL()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::DoPollTickL()
+ {
+ DFLOG( "CDevEncUiMemoryEntity::DoPollTickL" );
+ TInt nfeDiskStatus( EUnmounted );
+ TInt err = iSession->DiskStatus( nfeDiskStatus );
+ if ( err )
+ {
+ DFLOG2( "Could not get disk status, error %d", err );
+ // Ignore error
+ return;
+ }
+ if ( ( nfeDiskStatus == EEncrypting ) ||
+ ( nfeDiskStatus == EDecrypting ) )
+ {
+ // Some other component has started an encryption operation.
+ // Indicate this to the UI and start polling the progress.
+ DFLOG2( "CDevEncUiMemoryEntity::DoPollTick: New operation %d",
+ nfeDiskStatus );
+ SetState( nfeDiskStatus );
+ StartPolling( KProgressInterval );
+ }
+ else
+ {
+ if ( iState != nfeDiskStatus )
+ {
+ DFLOG( "CDevEncUiMemoryEntity::DoPollTickL => SetState" );
+ // The Mmc status has changed, but we are not in the middle of
+ // any operation. Just set the new state.
+ SetState( nfeDiskStatus );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::SetState()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::SetState( TUint aState )
+ {
+ DFLOG3( "CDevEncUiMemoryEntity::SetState, prev %d, new %d",
+ iState, aState );
+ iState = aState;
+ UpdateMemoryInfo();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::CheckProgress()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::CheckProgress()
+ {
+ ASSERT( iSession );
+ ASSERT( iSession->Connected() );
+
+ TInt err = iSession->Progress( iPercentDone );
+
+ if ( err )
+ {
+ DFLOG( "Could not get progress" );
+ iPeriodic->Cancel();
+ }
+ else if ( iPercentDone >= KPercent100 )
+ {
+ DFLOG( "Operation complete" );
+ iPeriodic->Cancel();
+ iPercentDone = 0;
+
+ // The disk needs to be finalized, but the finalization is done in
+ // the starter component.
+
+ DFLOG2( "CDevEncUiMemoryEntity::CheckProgress => iSession->DriveNumber() = %d", iSession->DriveNumber() );
+
+ if ( iState == EDecrypted && iSession->DriveNumber() == EDriveC )
+ {
+ DFLOG( "CDevEncUiMemoryEntity::CheckProgress => RestoreAutolockSettings" );
+ RestoreAutolockSettings();
+ }
+ // Restart the polling at a slower pace
+ // StartPolling( KPollInterval );
+ }
+ else // Not yet finished...
+ {
+ UpdateMemoryInfo();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::RestoreAutolockSettings()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::RestoreAutolockSettings()
+ {
+#ifndef __WINS__
+ //the user chose to decrypt the phone memory. restore the previuos autolock settings
+ RTerminalControl terminalCtrl;
+ TInt ctrlConnect = terminalCtrl.Connect();
+ DFLOG2( "DEVENC: terminal control connected %d", ctrlConnect );
+
+ RTerminalControl3rdPartySession session;
+ TInt retValue = session.Open( terminalCtrl );
+ DFLOG2( "DEVENC: terminal control session open %d", retValue );
+
+ //read the current autolock period
+ TBuf8<21> autoLockPeriodBuf;
+ TInt err2 = session.GetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, autoLockPeriodBuf );
+ DFLOG2( "DEVENC: max value get returned value %d", err2 );
+
+ //this is set to 0 because the Tarm control prevent the autolock from being disabled otherwise.
+ TBuf8<21> oldMaxPeriodBuf;
+ oldMaxPeriodBuf.AppendNum( 0 );
+ TInt err = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::EMaxTimeout, oldMaxPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err );
+
+ //set the autolock period as it was previously
+ err = session.SetDeviceLockParameter( RTerminalControl3rdPartySession::ETimeout, autoLockPeriodBuf );
+ DFLOG2( "DEVENC: max value set returned value %d", err );
+
+ session.Close();
+ terminalCtrl.Close();
+#endif
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::UpdateMemoryInfo()
+//
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::UpdateMemoryInfo()
+ {
+ DFLOG( "CDevEncUiMemoryEntity::UpdateMemoryInfo" );
+ for ( TInt i = 0; i < iObservers.Count(); i++ )
+ {
+ iObservers[i]->UpdateInfo( iType, iState, iPercentDone );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::State()
+//
+// --------------------------------------------------------------------------
+TUint CDevEncUiMemoryEntity::State() const
+ {
+ return iState;
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiMemoryEntity::DiskStatusChangedL()
+// From MDiskStatusObserver
+// --------------------------------------------------------------------------
+void CDevEncUiMemoryEntity::DiskStatusChangedL( TInt aNfeStatus )
+ {
+ if ( ( aNfeStatus == EEncrypting ) ||
+ ( aNfeStatus == EDecrypting ) )
+ {
+ // Some other component has started an encryption operation.
+ // Indicate this to the UI and start polling the progress.
+ DFLOG2( "CDevEncStarterMemoryEntity::DoPollTick: New operation %d",
+ aNfeStatus );
+ SetState( aNfeStatus );
+ StartPolling( KProgressInterval );
+ }
+ else
+ {
+ if ( iState != aNfeStatus )
+ {
+ // The Mmc status has changed, but we are not in the middle of
+ // any operation. Just set the new state.
+ SetState( aNfeStatus );
+ }
+ }
+ }
+
+// End of File
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiSecretMinMaxCodeQuery.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2005 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 <aknappui.h>
+#include <aknQueryControl.h>
+#include <AknQueryDialog.h>
+#include <aknsoundsystem.h>
+#include <DevEncUi.rsg>
+#include <eikseced.h>
+
+#include "DevEncLog.h"
+#include "DevEnc.hrh"
+#include "DevEncUiSecretMinMaxCodeQuery.h"
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ----------------------------------------------------------
+// CCodeQueryDialog::CCodeQueryDialog()
+// C++ constructor
+// ----------------------------------------------------------
+//
+CDevEncUiSecretMinMaxCodeQuery::CDevEncUiSecretMinMaxCodeQuery(
+ TDes& aDataText,
+ TInt aMinLength,
+ TInt aMaxLength )
+ : CAknTextQueryDialog( aDataText, ENoTone ),
+ iMinLength( aMinLength ),
+ iMaxLength( aMaxLength )
+ {
+ }
+//
+// ----------------------------------------------------------
+// CDevEncUiSecretMinMaxCodeQuery::~CodeQueryDialog()
+// Destructor
+// ----------------------------------------------------------
+//
+CDevEncUiSecretMinMaxCodeQuery::~CDevEncUiSecretMinMaxCodeQuery()
+ {
+ }
+//
+// ----------------------------------------------------------
+// CDevEncUiSecretMinMaxCodeQuery::PreLayoutDynInitL()
+// Called by framework before dialog is shown
+// ----------------------------------------------------------
+//
+void CDevEncUiSecretMinMaxCodeQuery::PreLayoutDynInitL()
+ {
+ CAknTextQueryDialog::PreLayoutDynInitL();
+ SetMaxLength( iMaxLength );
+ }
+//
+// ---------------------------------------------------------
+// CDevEncUiSecretMinMaxCodeQuery::OfferKeyEventL
+// called by framework when any key is pressed
+// ---------------------------------------------------------
+//
+TKeyResponse CDevEncUiSecretMinMaxCodeQuery::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ // '#' key
+ if ( aKeyEvent.iScanCode == EStdKeyHash && aType == EEventKeyUp )
+ {
+ TryExitL( EEikBidOk );
+ return EKeyWasConsumed;
+ }
+
+ // '*' key
+ if ( aKeyEvent.iCode == '*' )
+ {
+ return EKeyWasConsumed;
+ }
+
+ // end key
+ if ( aKeyEvent.iCode == EKeyPhoneEnd )
+ {
+ TryExitL( EAknSoftkeyCancel );
+ return EKeyWasConsumed;
+ }
+
+ return CAknTextQueryDialog::OfferKeyEventL( aKeyEvent,aType );
+ }
+
+// ---------------------------------------------------------
+// CDevEncUiSecretMinMaxCodeQuery::OkToExitL()
+// Called by framework when the softkey is pressed
+// ---------------------------------------------------------
+TBool CDevEncUiSecretMinMaxCodeQuery::OkToExitL( TInt aButtonId )
+ {
+ TInt length = 0;
+ TBool returnvalue( EFalse );
+
+ switch( aButtonId )
+ {
+ case EAknSoftkeyOk:
+ {
+ CAknQueryControl* control = QueryControl();
+ if ( control )
+ {
+ length = control->GetTextLength();
+ }
+ if ( length < iMinLength )
+ {
+ returnvalue = EFalse;
+ }
+ else
+ {
+ returnvalue = CAknTextQueryDialog::OkToExitL( aButtonId );
+ }
+ }
+ break;
+
+ case EEikBidCancel: //Also includes EAknSoftkeyCancel as they have the same numerical value
+ {
+ returnvalue = ETrue;
+ break;
+ }
+ default:
+ break;
+ }
+ return returnvalue;
+ }
+
+void CDevEncUiSecretMinMaxCodeQuery::UpdateLeftSoftKeyL()
+ {
+ CAknQueryControl* control = QueryControl();
+ if ( control )
+ {
+ TBool makeVisible( control->GetTextLength() >= iMinLength );
+ MakeLeftSoftkeyVisible( makeVisible );
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiSettingItemList.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2005 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: Implementation of CDevEncUiSettingItemList.
+*
+*/
+
+// INCLUDE FILES
+
+// Class include
+#include "DevEncUiSettingItemList.h"
+
+// System include
+#include <StringLoader.h>
+#include <DevEncUi.rsg>
+
+// User include
+
+// Constants
+const TInt KOffTextIndex( 0 );
+const TInt KOnTextIndex( 1 );
+const TInt KOffEnumerationValue( 0 );
+const TInt KOnEnumerationValue( 1 );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::CDevEncUiSettingItemList()
+// --------------------------------------------------------------------------
+//
+CDevEncUiSettingItemList::CDevEncUiSettingItemList()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::~CDevEncUiSettingItemList()
+// --------------------------------------------------------------------------
+//
+CDevEncUiSettingItemList::~CDevEncUiSettingItemList()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SizeChanged()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::SizeChanged()
+ {
+ if ( ListBox() )
+ {
+ ListBox()->SetRect( Rect() );
+ ListBox()->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::HandleResourceChange()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::HandleResourceChange( TInt aType )
+ {
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ // do re-layout
+ if ( ListBox() )
+ {
+ ListBox()->SetRect( Rect() );
+ ListBox()->HandleResourceChange( aType );
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::CreateSettingItemL()
+// --------------------------------------------------------------------------
+//
+CAknSettingItem* CDevEncUiSettingItemList::CreateSettingItemL( TInt aIdentifier )
+ {
+ CAknSettingItem* settingItem = NULL;
+
+ switch ( aIdentifier )
+ {
+ case EPhoneEncryptionSettingItem:
+ settingItem =
+ new ( ELeave ) CAknBinaryPopupSettingItem( aIdentifier,
+ iPhoneMemSetting );
+ break;
+ case EMemoryCardEncryptionSettingItem:
+ settingItem =
+ new ( ELeave ) CAknBinaryPopupSettingItem( aIdentifier,
+ iMmcSetting );
+ break;
+ }
+ return settingItem; // passing ownership
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::HandleListBoxEventL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+ {
+ if ( aEventType == EEventItemDoubleClicked )
+ {
+ TKeyEvent event;
+ event.iCode = EKeyEnter;
+ event.iScanCode = EStdKeyEnter;
+ event.iRepeats = 0;
+ iCoeEnv->SimulateKeyEventL( event, EEventKey );
+ return;
+ }
+ CAknSettingItemList::HandleListBoxEventL(aListBox, aEventType);
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::ChangeSelectedItemL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::ChangeSelectedItemL()
+ {
+ if ( ! ListBox() )
+ {
+ User::Leave( KErrNotFound );
+ }
+ EditItemL( ListBox()->CurrentItemIndex(), ETrue );
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SelectedItem()
+// --------------------------------------------------------------------------
+//
+TInt CDevEncUiSettingItemList::SelectedItem()
+ {
+ if ( ! ListBox() )
+ {
+ return -1;
+ }
+ return ListBox()->CurrentItemIndex();
+ }
+
+
+ // --------------------------------------------------------------------------
+ // CDevEncUiSettingItemList::EditItemL()
+ // --------------------------------------------------------------------------
+ //
+void CDevEncUiSettingItemList::EditItemL( TInt aIndex, TBool aCalledFromMenu )
+ {
+ CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+ (*SettingItemArray())[aIndex]->StoreL();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SetItemTextL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::SetItemTextL( TInt aIndex, const TDesC& aNewText )
+ {
+ // Sanity check
+ if ( aIndex > ( SettingItemArray()->Count() - 1 ) )
+ {
+ User::Leave( KErrOverflow );
+ }
+ // Get hold of the existing texts for the selected item
+ // The binary popup setting item has two texts, one for each setting.
+ // Just to be sure, we set them both.
+ CAknBinaryPopupSettingItem* settingItem =
+ reinterpret_cast<CAknBinaryPopupSettingItem*>
+ ( ( *SettingItemArray() )[aIndex] );
+ CArrayPtr<CAknEnumeratedText>* textArray =
+ settingItem->EnumeratedTextArray();
+ CAknEnumeratedText* enumTextOn = textArray->At( KOnTextIndex );
+ CAknEnumeratedText* enumTextOff = textArray->At( KOffTextIndex );
+
+ // Delete the previous texts thoroughly
+ HBufC* prevTextOn = enumTextOn->Value();
+ HBufC* prevTextOff = enumTextOff->Value();
+ textArray->Delete( KOnTextIndex );
+ textArray->Delete( KOffTextIndex );
+ delete prevTextOn;
+ delete prevTextOff;
+
+ // Set the new enumeration values (matching the ones in the rss file)
+ enumTextOn->SetEnumerationValue( KOnEnumerationValue );
+ enumTextOff->SetEnumerationValue( KOffEnumerationValue );
+
+ // Set the new texts
+ enumTextOn->SetValue( aNewText.AllocL() ); // Ownership transferred to array
+ enumTextOff->SetValue( aNewText.AllocL() ); // Ownership transferred to array
+ textArray->AppendL( enumTextOn );
+ textArray->AppendL( enumTextOff );
+
+ // The list updates itself
+ HandleChangeInItemArrayOrVisibilityL();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::SetItemStateL()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::SetItemStateL( TInt aIndex, TBool aSetting )
+ {
+ if ( aIndex == EPhoneMemory )
+ {
+ iPhoneMemSetting = aSetting;
+ }
+ else
+ {
+ iMmcSetting = aSetting;
+ }
+ // Load the new value to the framework's internal data
+ ( *SettingItemArray() )[ aIndex ]->LoadL();
+ }
+
+// --------------------------------------------------------------------------
+// CDevEncUiSettingItemList::ItemState()
+// --------------------------------------------------------------------------
+//
+void CDevEncUiSettingItemList::ItemState( TInt aIndex, TBool& aSetting )
+ {
+ // Fetch the current value from the framework's internal data
+ if ( aIndex == EPhoneMemory )
+ {
+ aSetting = iPhoneMemSetting;
+ }
+ else
+ {
+ aSetting = iMmcSetting;
+ }
+ }
+
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/DevEncUi/src/DevEncUiTimer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2005 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 "DevEncUiTimer.h"
+#include "DevEncLog.h"
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ----------------------------------------------------------
+// CDevEncUiTimer::NewL
+// Instancies CDevEncUiTimer object
+// ----------------------------------------------------------
+//
+CDevEncUiTimer* CDevEncUiTimer::NewL( MDevEncUiTimerCallback* aCallback )
+ {
+ CDevEncUiTimer* self = new ( ELeave ) CDevEncUiTimer( aCallback );
+ CleanupStack::PushL ( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------------
+// CDevEncUiTimer::ConstructL()
+// Initializes data objects
+// ----------------------------------------------------------
+//
+void CDevEncUiTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ }
+
+// ----------------------------------------------------------
+// CDevEncUiTimer::CDevEncUiTimer()
+// Constructor
+// ----------------------------------------------------------
+//
+CDevEncUiTimer::CDevEncUiTimer( MDevEncUiTimerCallback* aCallback )
+ : CTimer( EPriorityStandard ),
+ iCallback( aCallback )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ----------------------------------------------------------
+// CDevEncUiTimer::CDevEncUiTimer()
+// Destructor
+// ----------------------------------------------------------
+//
+CDevEncUiTimer::~CDevEncUiTimer()
+ {
+ Cancel();
+ }
+
+// ----------------------------------------------------------
+// CDevEncUiTimer::RunError()
+// CActive Object method
+// ----------------------------------------------------------
+//
+TInt CDevEncUiTimer::RunError( TInt aError )
+ {
+ return aError;
+ }
+
+// ----------------------------------------------------------
+// CDevEncUiTimer::RunL()
+// CActive Object method
+// ----------------------------------------------------------
+//
+void CDevEncUiTimer::RunL()
+ {
+ DFLOG2( "CDevEncUiTimer::RunL, status %d", iStatus.Int() );
+ if ( iStatus == KErrNone )
+ {
+ iCallback->Timeout();
+ }
+ }
+
+// ----------------------------------------------------------
+// CDevEncUiTimer::DoCancel()
+// CActive Object method
+// ----------------------------------------------------------
+//
+void CDevEncUiTimer::DoCancel()
+ {
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/common/DevEnc.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2005 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: Enumerations used in the application UI.
+*
+*/
+
+#ifndef __DEVENCUI_HRH__
+#define __DEVENCUI_HRH__
+
+// DevEncUi enumerate command codes
+enum TDevEncUiCommandIds
+ {
+ EDevEncUiCommandChange = 4242, // start value must not be 0
+ EDevEncUiCommandHelp,
+
+ // These MMC-related commands are used in the Encryption view.
+ EDevEncUiCommandEncryptWithoutSavingKey,
+ EDevEncUiCommandEncryptAndSaveKey,
+ EDevEncUiCommandEncryptWithRestoredKey,
+
+ // This MMC-related command is not shown to the user. It is used
+ // when the encryption key is in the security driver and the user
+ // inserts an unencrypted card.
+ EDevEncUiCommandEncryptWithCurrentKey,
+
+ // These MMC-related commands are used in the Decryption view.
+ EDevEncUiCommandDecrypt,
+ EDevEncUiCommandDecryptAndTurnOffEncryption,
+
+ EDevEncUiInternalCommandEncrypt,
+ EDevEncUiInternalCommandDecrypt,
+
+ // ID's of some UI items
+ EPhoneEncryptionSettingItem,
+ EMemoryCardEncryptionSettingItem,
+ EDevEncUiDlgCIdConfirmationQuery,
+ EDevEncUiDlgCIdDataQuery,
+ EDevEncUiWaitNoteId,
+ EDevEncUiSecretCodeQueryId
+ };
+
+enum TDevEncUiMemoryType
+ {
+ EPhoneMemory,
+ EMemoryCard,
+ EPrimaryPhoneMemory
+ };
+
+enum TDevEncUiMemoryEntityState
+ {
+ EMemStateUnknown = 0,
+ EMemDecrypted = 1,
+ EMemEncrypting = 2,
+ EMemEncrypted = 3,
+ EMemDecrypting = 4,
+ EMemCorrupted = 5
+ };
+
+enum TDevEncUiViewIds
+ {
+ EDevEncUiMainViewId = 1,
+ EDevEncUiEncrViewId,
+ EDevEncUiDecrViewId,
+ EDevEncUiNumberOfViews
+ };
+
+enum TDevEncUiMmcStatus
+ {
+ EMmcNotPresent = 0,
+ EMmcNotReadable = 1,
+ EMmcOk = 2
+ };
+
+#endif // __DEVENCUI_HRH__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/common/DevEncConfig.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2005 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: Common build configuration of Device Encryption components.
+*
+*/
+
+#ifndef __DEVENCUI_CONFIG_H__
+#define __DEVENCUI_CONFIG_H__
+
+// Comment this out to disable logs
+#define DEVENC_LOG
+
+#endif // __DEVENCUI_CONFIG_H__
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/common/DevEncDef.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2005 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: Common definitions for the application.
+*
+*/
+
+#ifndef DEVENCDEF_H_
+#define DEVENCDEF_H_
+
+enum
+ {
+ KMinPasswordLength = 4, // Same as for security code
+ KMaxPasswordLength = 50,
+ KMaxKeyNameLength = 50,
+ KMaxFilenameLength = 100,
+ KEncryptionKeyLength = 32
+ };
+#endif /*DEVENCDEF_H_*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/common/DevEncLog.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2005 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: Implementation of CFileLog.
+*
+*/
+
+#include "DevEncLog.h"
+#include <flogger.h>
+
+#if defined( _DEBUG ) && defined ( DEVENC_LOG )
+
+_LIT( KDevEncLogDir, "DevEnc");
+_LIT( KDevEncLogFile, "DevEnc.log");
+
+void CFileLog::Printf( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ RFileLogger::WriteFormat( KDevEncLogDir,
+ KDevEncLogFile,
+ EFileLoggingModeAppend,
+ aFmt,
+ list );
+ }
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/common/DevEncLog.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2005 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: Debug logging functionality.
+*
+*/
+
+#ifndef __DEVENC_LOG_H__
+#define __DEVENC_LOG_H__
+
+#include "DevEncConfig.hrh"
+
+#if defined( _DEBUG ) && defined ( DEVENC_LOG )
+
+#include <e32base.h>
+#include <e32cmn.h>
+#include <e32debug.h>
+
+class CFileLog : public CBase
+ {
+ public:
+ static void Printf( TRefByValue<const TDesC> aFmt, ... );
+ };
+
+// Debug trace to stdout
+#define DLOG( aText ) \
+ { \
+ _LIT( KText, aText ); \
+ RDebug::Print( KText ); \
+ }
+
+// Debug trace to stdout
+#define DLOG2( aText, aParam ) \
+ { \
+ _LIT( KText, aText ); \
+ RDebug::Print( KText, aParam ); \
+ }
+
+// Debug trace to stdout
+#define DLOG3( aText, aParam1, aParam2 ) \
+ { \
+ _LIT( KText, aText ); \
+ RDebug::Print( KText, aParam1, aParam2 ); \
+ }
+
+// Debug trace to file
+#define FLOG( aText ) \
+ { \
+ _LIT( KLogText, aText ); \
+ CFileLog::Printf( KLogText ); \
+ }
+
+// Debug trace to file
+#define FLOG2( aText, b ) \
+ { \
+ _LIT( KLogText, aText ); \
+ CFileLog::Printf( KLogText, b ); \
+ }
+
+// Debug trace to file
+#define FLOG3( aText, b, c ) \
+ { \
+ _LIT( KLogText, aText ); \
+ CFileLog::Printf( KLogText, b, c ); \
+ }
+
+// Debug trace to stdout and file
+#define DFLOG( aText ) \
+ { \
+ DLOG( aText ); \
+ FLOG( aText ); \
+ }
+
+// Debug trace to stdout and file
+#define DFLOG2( aText, aParam ) \
+ { \
+ DLOG2( aText, aParam ); \
+ FLOG2( aText, aParam ); \
+ }
+
+// Debug trace to stdout and file
+#define DFLOG3( aText, aParam1, aParam2 ) \
+ { \
+ DLOG3( aText, aParam1, aParam2 ); \
+ FLOG3( aText, aParam1, aParam2 ); \
+ }
+
+// Debug trace a string literal to file
+#define FLOGBUF( aText ) \
+ { \
+ CFileLog::Printf( aText ); \
+ }
+
+// Debug trace a string literal
+#define DLOGBUF( aText ) \
+ { \
+ RDebug::Print( aText ); \
+ }
+
+// Debug trace a string literal to file and stdout
+#define DFLOGBUF( aText ) \
+ { \
+ DLOGBUF( aText ); \
+ FLOGBUF( aText ); \
+ }
+
+#else // _DEBUG not defined, no logging code will be included at all
+
+#define DLOG( a )
+#define DLOG2( a, b )
+#define DLOG3( a, b, c )
+#define FLOG( a )
+#define FLOG2( a, b )
+#define FLOG3( a, b, c )
+#define DFLOG( a )
+#define DFLOG2( a, b )
+#define DFLOG3( a, b, c )
+#define FLOGBUF( a )
+#define DFLOGBUF( a )
+
+#endif // _DEBUG
+
+#endif // __DEVENC_LOG_H__
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/common/DevEncUids.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2005 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: Uids of components related to Device Encryption.
+*
+*/
+
+#ifndef DEVENCUIUIDS_HRH
+#define DEVENCUIUIDS_HRH
+
+#define KDevEncUiUid 0x2000259A
+#define KDevEncStarterUid 0x2000259B
+#define KDevEncOmaDmPluginUid 0x200025B5
+#define KDevEncOmaDmPluginImplUid 0x200025BB
+#define KDevEncRfsPluginUid 0x200025B6
+#define KDevEncRfsPluginImplUid 0x200025BC
+#define KDevEncCommonUtilsUid 0x200025B7
+#define KDevEncNotifPluginUid 0x20002672
+#define KDevEncNotifPluginImplUid 0x20002673
+#define KDevEncPasswdDlgUid 0x20002674
+#define KDevEncGsPluginUid 0x200255CF
+#define KDevEncGsPluginImplUid 0x200255D0
+
+#define KDevEncNokiaVID 0x70000001
+
+#endif // DEVENCUIUIDS_HRH
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2005 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: Provides the information required for building all
+* Device Encryption components.
+*
+*/
+
+#include <ProductVariant.hrh>
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+
+// ROM files
+../rom/DevEnc.iby CORE_APP_LAYER_IBY_EXPORT_PATH(DevEncryption.iby)
+../rom/DevEncResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(DevEncResources.iby)
+
+// Exported headers
+../common/DevEncDef.h APP_LAYER_PLATFORM_EXPORT_PATH(DevEncDef.h)
+
+PRJ_MMPFILES
+
+#include "../DevEncNotifPlugin/group/bld.inf"
+#include "../DevEncUi/group/bld.inf"
+#include "../DevEncDmAdapter/group/bld.inf"
+#include "../DevEncGsPlugin/group/bld.inf"
+#include "../help/group/bld.inf"
+
+
+// End of file
Binary file deviceencryption/help/data/xhtml.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/help/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 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:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_EXPORTS
+:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite
+
+../inc/devenc.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/devenc.hlp.hrh)
+../rom/deviceencryptionhelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(deviceencryptionhelps_variant.iby)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/help/inc/devenc.hlp.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+//
+// devenc.hlp.hrh generated by CSXHelp Utilities.
+//
+
+#ifndef __DEVENC_HLP_HRH__
+#define __DEVENC_HLP_HRH__
+
+_LIT(KES_HLP_ENCRYPTION_DECRYPT, "ES_HLP_ENCRYPTION_DECRYPT"); //
+_LIT(KES_HLP_ENCRYPTION_ENCRYPT, "ES_HLP_ENCRYPTION_ENCRYPT"); //
+_LIT(KES_HLP_ENCRYPTION_MAIN, "ES_HLP_ENCRYPTION_MAIN"); //
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/help/rom/deviceencryptionhelps_variant.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef __DEVICEENCRPTIONHELPS_VARIANT_IBY__
+#define __DEVICEENCRPTIONHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x2000259A\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x2000259A\contents.zip)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x2000259A\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x2000259A\index.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x2000259A\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x2000259A\keywords.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x2000259A\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x2000259A\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/layers.sysdef.xml Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+ <!ENTITY layer_real_source_path "sf/app/files/deviceencryption" >
+]>
+
+<SystemDefinition name="DeviceEncryption" schema="1.4.0">
+ <systemModel>
+ <layer name="app_layer">
+ <module name="DeviceEncryption">
+ <unit unitID="ES.DeviceEncryption" mrp="" bldFile="&layer_real_source_path;/group" name="DeviceEncryption" />
+ </module>
+ </layer>
+ </systemModel>
+</SystemDefinition>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/rom/DevEnc.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2005 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: Contains information about binary files and their locations.
+*
+*/
+
+#ifndef __DEVENC0_IBY__
+#define __DEVENC0_IBY__
+#ifdef FF_DEVICE_ENCRYPTION_FEATURE
+
+//---------------------------------------------------------------------------
+// Device Encryption UI
+//---------------------------------------------------------------------------
+
+S60_APP_EXE( DevEncUi )
+S60_APP_BITMAP( DevEncUi )
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,DevEncUi)
+S60_APP_AIF_ICONS( DevEncUi )
+S60_APP_AIF_RSC( DevEncUi )
+
+//---------------------------------------------------------------------------
+// Device Encryption OMA DM Adapter
+//---------------------------------------------------------------------------
+ECOM_PLUGIN(DevEncUiDmAdapter.dll,DevEncUiDmAdapter.rsc)
+
+//---------------------------------------------------------------------------
+// Device Encryption Notifier plugin
+//---------------------------------------------------------------------------
+ECOM_PLUGIN(devencnotifplugin.dll,devencnotifplugin.rsc)
+//---------------------------------------------------------------------------
+// Device Encryption GS Plugin
+//---------------------------------------------------------------------------
+ECOM_PLUGIN(devencgsplugin.dll,200255CF.rsc)
+data=DATAZ_\BITMAP_DIR\devencgsplugin.mif BITMAP_DIR\devencgsplugin.mif
+
+#endif // FF_DEVICE_ENCRYPTION_FEATURE
+#endif // __DEVENC0_IBY__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/rom/DevEncResources.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2005 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: Contains information about binary files and their locations.
+*
+*/
+
+#ifndef __DEVENCRESOURCES_IBY__
+#define __DEVENCRESOURCES_IBY__
+#ifdef FF_DEVICE_ENCRYPTION_FEATURE
+
+// Device Encryption UI
+//data=DATAZ_\resource\apps\DevEncUi.rsc resource\apps\DevEncUi.rsc
+S60_APP_RESOURCE (DevEncUi)
+
+//DevEnc Notification plugin
+data=DATAZ_\RESOURCE_FILES_DIR\devencnotifplugin.rsc RESOURCE_FILES_DIR\devencnotifplugin.rsc
+
+// Device Encryption GS Plugin
+data=DATAZ_\resource\devencGsPluginRsc.rsc resource\devencGsPluginRsc.rsc
+
+#endif // FF_DEVICE_ENCRYPTION_FEATURE
+
+#endif // __DEVENCRESOURCES_IBY__
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/sis/DevEnc.pkg Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,62 @@
+;
+; Copyright (c) 2009 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:
+;
+; DevEnc.pkg
+;
+;Language - standard language definitions
+&EN
+
+;Standard SIS file header (use UI application UID)
+#{"DevEncUi"},(0x2000259A),1,0,0
+
+;Localised Vendor name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;Files to install
+
+;----------------------------------------------------------------------------
+; Device Encryption UI
+;----------------------------------------------------------------------------
+"\epoc32\release\armv5\urel\DevEncUi.exe" -"!:\sys\bin\DevEncUi.exe"
+"\epoc32\data\z\resource\apps\DevEncUi.rsc" -"!:\resource\apps\DevEncUi.rsc"
+"\epoc32\data\z\private\10003a3f\apps\DevEncUi_reg.rsc" -"!:\private\10003a3f\import\apps\DevEncUi_reg.rsc"
+;"\epoc32\data\z\private\10202be9\200025A6.txt" -"!:\private\10202be9\200025A6.txt"
+;"\epoc32\data\z\resource\apps\DevEncUi.mif" -"!:\resource\apps\DevEncUi.mif"
+
+;----------------------------------------------------------------------------
+; Device Encryption Common Utilities
+;----------------------------------------------------------------------------
+"\epoc32\release\armv5\urel\devenccommonutils.dll" -"!:\sys\bin\devenccommonutils.dll"
+
+;----------------------------------------------------------------------------
+; Device Encryption Device Management Adapter
+;----------------------------------------------------------------------------
+"\epoc32\release\armv5\urel\DevEncUiDmAdapter.dll" -"!:\sys\bin\DevEncUiDmAdapter.dll"
+"\epoc32\data\z\resource\plugins\DevEncUiDmAdapter.rsc" -"!:\resource\plugins\DevEncUiDmAdapter.rsc"
+
+;----------------------------------------------------------------------------
+; Device Encryption Notifier Plugin
+;----------------------------------------------------------------------------
+"\epoc32\release\armv5\urel\DevEncNotifPlugin.dll" -"!:\sys\bin\DevEncNotifPlugin.dll"
+;"\epoc32\release\armv5\urel\DevEncNotifWrapper.dll" -"!:\sys\bin\DevEncNotifWrapper.dll"
+"\epoc32\data\z\resource\plugins\DevEncNotifPlugin.rsc" -"!:\resource\plugins\DevEncNotifPlugin.rsc"
+"\epoc32\data\z\resource\devencnotifplugin.rsc" -"!:\resource\devencnotifplugin.rsc"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/deviceencryption/sysdef_1_4_0.dtd Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+ name CDATA #REQUIRED
+ schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+ name CDATA #REQUIRED
+ levels CDATA #IMPLIED
+ span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+ name CDATA #REQUIRED
+ level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+ unitID ID #REQUIRED
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ bldFile CDATA #REQUIRED
+ priority CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+ name CDATA #REQUIRED
+ version CDATA #REQUIRED
+ late (Y|N) #IMPLIED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+ name ID #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+ name ID #REQUIRED
+ abldTarget CDATA #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+ name ID #REQUIRED
+ abldOption CDATA #REQUIRED
+ description CDATA #REQUIRED
+ enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+ command CDATA #REQUIRED
+ targetList IDREFS #IMPLIED
+ unitParallel (Y | N | y | n) #REQUIRED
+ targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+ name CDATA #REQUIRED
+ cwd CDATA #REQUIRED
+ command CDATA #REQUIRED>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Aif/FileManageraif.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002-2006 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: Resource definitions for project FileManager
+*
+*/
+
+
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+{
+ app_uid = 0x101f84eb;
+ num_icons = 2;
+ embeddability = KAppNotEmbeddable;
+ hidden = KAppNotHidden;
+ newfile = KAppDoesNotSupportNewFile;
+}
+
+// End of File
Binary file filemanager/Aif/icon44.bmp has changed
Binary file filemanager/Aif/icon44m.bmp has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/data/FileManager.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1514 @@
+/*
+* Copyright (c) 2002-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: Resource definitions for project FileManager
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+NAME FMGR // 4 letter ID
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.loc>
+#include <pathconfiguration.hrh>
+#include <aknsconstants.hrh>
+#include <data_caging_paths_strings.hrh>
+#include <CommonDialogs.rh>
+#include <filemanager.mbg>
+#include <drmcommon.loc>
+#include <filemanager.loc>
+#include "FileManagerEngine.hrh" // filemanager_mbm_file_location
+#include "FileManager.hrh"
+
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf = qtn_fmgr_main_title; }
+
+RESOURCE EIK_APP_INFO
+{
+ status_pane = r_filemanager_status_pane;
+}
+
+/**
+ * STATUS_PANE_APP_MODEL
+ * FileManager default status pane
+ */
+RESOURCE STATUS_PANE_APP_MODEL r_filemanager_status_pane
+ {
+ layout = R_AVKON_STATUS_PANE_LAYOUT_USUAL;
+ panes =
+ {
+ SPANE_PANE
+ {
+ id = EEikStatusPaneUidTitle;
+ type = EAknCtTitlePane;
+ resource = r_filemanager_title_pane;
+ }
+ };
+ }
+
+/**
+ * TITLE_PANE
+ * FileManager default title pane text
+ */
+RESOURCE TITLE_PANE r_filemanager_title_pane
+ {
+ txt = qtn_fmgr_main_title;
+ }
+
+#include <appinfo.rh>
+
+RESOURCE LOCALISABLE_APP_INFO r_filemanager_localisable_app_info
+ {
+ short_caption = qtn_apps_fmgr_grid;
+ caption_and_icon =
+ CAPTION_AND_ICON_INFO
+ {
+ caption = qtn_apps_fmgr_list;
+#ifdef __SCALABLE_ICONS
+ number_of_icons = 1;
+ icon_file = APP_BITMAP_DIR"\\FileManager_aif.mif";
+#else
+ number_of_icons = 2;
+ icon_file = APP_BITMAP_DIR"\\FileManager_aif.mbm";
+#endif
+ };
+ }
+
+/**
+* AVKON_VIEW
+* General view
+*/
+RESOURCE AVKON_VIEW r_filemanager_main_view
+ {
+ cba = r_filemanager_softkeys_options_exit__open;
+ menubar = r_filemanager_main_menubar;
+ }
+/**
+* AVKON_VIEW
+* General view (embedded)
+*/
+RESOURCE AVKON_VIEW r_filemanager_main_view_embedded
+ {
+ cba = r_filemanager_softkeys_options_exit__open_embedded;
+ menubar = r_filemanager_main_menubar;
+ }
+
+/**
+* AVKON_VIEW
+* Folders view
+*/
+RESOURCE AVKON_VIEW r_filemanager_folders_view
+ {
+ cba = r_filemanager_softkeys_options_back__open;
+ menubar = r_filemanager_memory_store_menubar;
+ }
+
+/**
+* AVKON_VIEW
+* Search results view
+*/
+/*
+RESOURCE AVKON_VIEW r_filemanager_search_results_view
+ {
+ cba = r_filemanager_softkeys_options_back__open;
+ menubar = r_filemanager_search_results_menubar;
+ }
+*/
+/**
+* MENU_BAR
+* Phone memory menu bar
+*/
+RESOURCE MENU_BAR r_filemanager_main_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_filemanager_main_view_menu;
+ }
+ };
+ }
+
+/**
+* MENU_BAR
+* Memory store menu bar
+*/
+RESOURCE MENU_BAR r_filemanager_memory_store_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_filemanager_memory_store_view_menu;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_main_view_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerOpen;
+ txt = qtn_fldr_open;
+ flags = EEikMenuItemAction;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerConnectRemoveDrive;
+ txt = qtn_rd_opt_connect;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerDisconnectRemoveDrive;
+ txt = qtn_rd_opt_disconnect;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerEject;
+ txt = qtn_fmgr_options_eject;
+ },
+#ifndef RD_FILE_MANAGER_BACKUP
+ MENU_ITEM
+ {
+ command = EFileManagerBackup;
+ txt = qtn_memc_options_backup;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerRestore;
+ txt = qtn_memc_options_restore;
+ },
+#endif // !RD_FILE_MANAGER_BACKUP
+ MENU_ITEM
+ {
+ command = EFileManagerFindFile;
+ txt = qtn_fmgr_options_find_file;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorage;
+ cascade = r_filemanager_memory_storage_menu;
+ txt = qtn_fmgr_options_memory_sub;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerRemoveDrives;
+ cascade = r_filemanager_remote_drives_menu;
+ txt = qtn_fmgr_opt_remote_drives;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EAknCmdHelp;
+ txt = qtn_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EAknSoftkeyExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_memory_store_view_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerOpen;
+ txt = qtn_fldr_open;
+ flags = EEikMenuItemAction;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerConnectRemoveDrive;
+ txt = qtn_rd_opt_connect;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerDisconnectRemoveDrive;
+ txt = qtn_rd_opt_disconnect;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerRefreshRemoteDrive;
+ txt = qtn_fmgr_rd_opt_refresh;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerDelete;
+ txt = qtn_fldr_delete;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerOrganise;
+ cascade = r_filemanager_organise_menu;
+ txt = qtn_fmgr_options_organise;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMark;
+ cascade = r_filemanager_mark_unmark_menu;
+ txt = qtn_options_list;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerRename;
+ txt = qtn_fldr_rename;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerFindFile;
+ txt = qtn_fmgr_options_find_file;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSort;
+ cascade = r_filemanager_sort_menu;
+ txt = qtn_fmgr_options_sort_submenu;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSearchSort;
+ cascade = r_filemanager_search_sort_menu;
+ txt = qtn_fmgr_options_sort_submenu;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerReceiveViaIR;
+ txt = qtn_album_cmd_receive_via_ir;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerDetails;
+ cascade = r_filemanager_details_menu;
+ txt = qtn_fmgr_options_memory_storage_details;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerUnlockMemoryCard;
+ txt = qtn_memc_options_unlock;
+ flags = EEikMenuItemSpecific;
+ },
+#ifdef RD_MULTIPLE_DRIVE
+ MENU_ITEM
+ {
+ command = EFileManagerFormatMassStorage;
+ txt = qtn_fmgr_options_format_mass;
+ },
+#endif // RD_MULTIPLE_DRIVE
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardPassword;
+// cascade = r_filemanager_memory_card_password_menu;
+// txt = qtn_fmgr_options_card_password;
+// },
+// MENU_ITEM
+// {
+// command = EFileManagerUnlockMemoryCard;
+// txt = qtn_memc_options_unlock;
+// },
+ MENU_ITEM
+ {
+ command = EAknCmdHelp;
+ txt = qtn_options_help;
+ },
+ MENU_ITEM
+ {
+ command = EAknSoftkeyExit;
+ txt = qtn_options_exit;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_memory_storage_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageUnlock;
+ txt = qtn_fmgr_unlock_memory;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageDetails;
+ txt = qtn_fmgr_options_memory_storage_details;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageName;
+ txt = qtn_fmgr_options_card_name;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageRename;
+ txt = qtn_fmgr_options_card_rename;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageSetPassword;
+ txt = qtn_fmgr_options_set_memc_passwd;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageChangePassword;
+ txt = qtn_fmgr_options_change_memc_passwd;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageRemovePassword;
+ txt = qtn_fmgr_options_remove_memc_passwd;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageFormat;
+ txt = qtn_fmgr_options_card_format;
+ flags = EEikMenuItemSpecific;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_organise_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerMoveToFolder;
+ txt = qtn_options_org_move_to_folder;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerCopyToFolder;
+ txt = qtn_options_org_copy_to;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerNewFolder;
+ txt = qtn_options_org_new_folder;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_sort_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerSortByName;
+ txt = qtn_fmgr_options_sort_by_name;
+ flags = EEikMenuItemRadioStart;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortByType;
+ txt = qtn_fmgr_options_sort_by_type;
+ flags = EEikMenuItemRadioMiddle;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortMostRecentFirst;
+ txt = qtn_fmgr_options_sort_recent_first;
+ flags = EEikMenuItemRadioMiddle;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortLargestFirst;
+ txt = qtn_fmgr_options_sort_largest_first;
+ flags = EEikMenuItemRadioEnd;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_search_sort_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerSortByMatch;
+ txt = qtn_fmgr_options_sort_by_match;
+ flags = EEikMenuItemRadioStart;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortByName;
+ txt = qtn_fmgr_options_sort_by_name;
+ flags = EEikMenuItemRadioMiddle;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortByType;
+ txt = qtn_fmgr_options_sort_by_type;
+ flags = EEikMenuItemRadioMiddle;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortMostRecentFirst;
+ txt = qtn_fmgr_options_sort_recent_first;
+ flags = EEikMenuItemRadioMiddle;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerSortLargestFirst;
+ txt = qtn_fmgr_options_sort_largest_first;
+ flags = EEikMenuItemRadioEnd;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_remote_drives_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerRemoveDrivesSettings;
+ txt = qtn_fmgr_opt_rd_settings;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerRemoveDrivesMapDrive;
+ txt = qtn_fmgr_opt_rd_new_drive;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerRemoveDrivesDelete;
+ txt = qtn_fmgr_opt_rd_delete_drive;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerConnectRemoveDrive;
+ txt = qtn_rd_opt_connect;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerDisconnectRemoveDrive;
+ txt = qtn_rd_opt_disconnect;
+ flags = EEikMenuItemSpecific;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_details_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerFileDetails;
+ txt = qtn_fmgr_options_details;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerFolderDetails;
+ txt = qtn_fmgr_options_details;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMoreInfoOnline;
+ txt = qtn_drm_options_more_info;
+ flags = EEikMenuItemSpecific;
+ }
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardDetails;
+// txt = qtn_fmgr_options_card_details;
+// },
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryState;
+// txt = qtn_fmgr_options_memory_details;
+// }
+ };
+ }
+
+//RESOURCE MENU_PANE r_filemanager_memory_card_menu
+// {
+// items =
+// {
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardName;
+// txt = qtn_fmgr_options_card_name;
+// },
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardRename;
+// txt = qtn_fmgr_options_card_rename;
+// },
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardFormat;
+// txt = qtn_fmgr_options_card_format;
+// }
+// };
+// }
+//
+//RESOURCE MENU_PANE r_filemanager_memory_card_password_menu
+// {
+// items =
+// {
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardPasswordSet;
+// txt = qtn_fmgr_options_set_password;
+// },
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardPasswordChange;
+// txt = qtn_fmgr_options_change_passwd;
+// },
+// MENU_ITEM
+// {
+// command = EFileManagerMemoryCardPasswordRemove;
+// txt = qtn_fmgr_options_remove_passwd;
+// }
+// };
+// }
+
+RESOURCE MENU_BAR r_filemanager_context_sensitive_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_filemanager_context_sensitive_menu;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_context_sensitive_menu
+ {
+ items=
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerOrganise;
+ cascade = r_filemanager_organise_context_sensitive_menu;
+ txt = qtn_fmgr_options_organise;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerDelete;
+ txt = qtn_fldr_delete;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMark;
+ cascade = r_filemanager_context_sensitive_mark_unmark_menu;
+ txt = qtn_options_list;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerUnlockMemoryCard;
+ txt = qtn_memc_options_unlock;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMemoryStorageFormat;
+ txt = qtn_fmgr_options_card_format;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_organise_context_sensitive_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerMoveToFolder;
+ txt = qtn_options_org_move_to_folder;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerCopyToFolder;
+ txt = qtn_options_org_copy_to;
+ }
+ };
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+/**
+* AVKON_VIEW
+* Backup view
+*/
+RESOURCE AVKON_VIEW r_filemanager_backup_view
+ {
+ cba = r_filemanager_softkeys_options_back__change;
+ menubar = r_filemanager_backup_menubar;
+ }
+
+/**
+* MENU_BAR
+* Backup menu bar
+*/
+RESOURCE MENU_BAR r_filemanager_backup_menubar
+ {
+ titles =
+ {
+ MENU_TITLE
+ {
+ menu_pane = r_filemanager_backup_view_menu;
+ }
+ };
+ }
+
+RESOURCE MENU_PANE r_filemanager_backup_view_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ { command = EFileManagerOpen; txt = qtn_options_change; },
+ MENU_ITEM
+ { command = EFileManagerBackup; txt = qtn_fmgr_options_backup_now; },
+ MENU_ITEM
+ { command = EFileManagerRestore; txt = qtn_fmgr_options_restore; },
+ MENU_ITEM
+ { command = EFileManagerDeleteBackup; txt = qtn_fmgr_options_delete_backup; },
+ MENU_ITEM
+ { command = EAknCmdHelp; txt = qtn_options_help; },
+ MENU_ITEM
+ { command = EAknSoftkeyExit; txt = qtn_options_exit; }
+ };
+ }
+
+RESOURCE AVKON_VIEW r_filemanager_restore_view
+ {
+ cba = R_AVKON_SOFTKEYS_OK_CANCEL__MARK;
+ menubar = R_AVKON_MENUPANE_EMPTY;
+ }
+
+RESOURCE AVKON_VIEW r_filemanager_scheduled_backup_view
+ {
+ cba = R_AVKON_SOFTKEYS_EMPTY;
+ menubar = R_AVKON_MENUPANE_EMPTY;
+ }
+
+RESOURCE ARRAY r_filemanager_backup_contents_texts
+ {
+ items =
+ {
+ LBUF { txt = qtn_fmgr_backup_content_all; },
+ LBUF { txt = qtn_fmgr_backup_content_settings; },
+ LBUF { txt = qtn_fmgr_backup_content_messages; },
+ LBUF { txt = qtn_fmgr_backup_content_contacts; },
+ LBUF { txt = qtn_fmgr_backup_content_calendar; },
+ LBUF { txt = qtn_fmgr_backup_content_bookmarks; },
+ LBUF { txt = qtn_fmgr_backup_content_userfiles; }
+ };
+ }
+
+RESOURCE ARRAY r_filemanager_backup_weekday_texts
+ {
+ items =
+ {
+ LBUF { txt = qtn_week_long_monday; },
+ LBUF { txt = qtn_week_long_tuesday; },
+ LBUF { txt = qtn_week_long_wednesday; },
+ LBUF { txt = qtn_week_long_thursday; },
+ LBUF { txt = qtn_week_long_friday; },
+ LBUF { txt = qtn_week_long_saturday; },
+ LBUF { txt = qtn_week_long_sunday; }
+ };
+ }
+
+RESOURCE ARRAY r_filemanager_backup_scheduling_texts
+ {
+ items =
+ {
+ LBUF { txt = qtn_fmgr_backup_no_scheduling; },
+ LBUF { txt = qtn_fmgr_backup_daily; },
+ LBUF { txt = qtn_fmgr_backup_weekly; }
+ };
+ }
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+RESOURCE MENU_PANE r_filemanager_mark_unmark_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerMarkOne;
+ txt = qtn_options_list_mark_one;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerUnmarkOne;
+ txt = qtn_options_list_unmark_one;
+ flags = EEikMenuItemSpecific;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMarkAll;
+ txt = qtn_options_list_mark_all;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerUnmarkAll;
+ txt = qtn_options_list_unmark_all;
+ }
+ };
+ }
+RESOURCE MENU_PANE r_filemanager_context_sensitive_mark_unmark_menu
+ {
+ items =
+ {
+ MENU_ITEM
+ {
+ command = EFileManagerMarkOne;
+ txt = qtn_options_list_mark_one;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerUnmarkOne;
+ txt = qtn_options_list_unmark_one;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerMarkAll;
+ txt = qtn_options_list_mark_all;
+ },
+ MENU_ITEM
+ {
+ command = EFileManagerUnmarkAll;
+ txt = qtn_options_list_unmark_all;
+ }
+ };
+ }
+
+RESOURCE MEMORYSELECTIONDIALOG r_filemanager_copy_memory_selectiondialog
+ {
+ softkey_1 = text_softkey_ok;
+ locations =
+ {
+ LOCATION { root_path = text_phone_memory_root_path; },
+ LOCATION { root_path = text_memory_card_root_path; }
+ };
+ }
+
+RESOURCE MEMORYSELECTIONDIALOG r_filemanager_move_memory_selectiondialog
+ {
+ softkey_1 = text_softkey_ok;
+ locations =
+ {
+ LOCATION { root_path = text_phone_memory_root_path; },
+ LOCATION { root_path = text_memory_card_root_path; }
+ };
+ }
+
+RESOURCE MEMORYSELECTIONDIALOG r_filemanager_find_memory_selectiondialog
+ {
+ title = qtn_fmgr_find_prtx;
+ softkey_1 = text_softkey_ok;
+ locations =
+ {
+ LOCATION { root_path = text_phone_memory_root_path; },
+ LOCATION { root_path = text_memory_card_root_path; }
+ };
+ }
+
+RESOURCE FILESELECTIONDIALOG r_filemanager_find_folder_selectiondialog
+ {
+ title = qtn_fmgr_find_prtx;
+ softkey_1_file = text_softkey_select;
+ softkey_1_folder = text_softkey_open;
+ softkey_2_root_level = text_softkey_cancel;
+ softkey_2_subfolder = text_softkey_back;
+ }
+
+RESOURCE CBA r_filemanager_softkeys_search_cancel__search
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOk; txt = text_softkey_search; },
+ CBA_BUTTON { id = EAknSoftkeyCancel; txt = text_softkey_cancel; },
+ CBA_BUTTON { id = EAknSoftkeyOk; txt = text_softkey_search; }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_search_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = r_filemanager_softkeys_search_cancel__search;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EDataLayout;
+ label = qtn_fldr_name_prmpt;
+ control = EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
+ //width = 35;
+ lines = 1;
+ maxlength = 35;
+ };
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_find_wait_dialog
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralQuery;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_fmgr_wnote_search;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_delete_wait_dialog
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralQuery;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_fldr_deleting_wait_note;
+ imagefile = AVKON_BITMAP_FILE; // bitmap file
+ imageid = EMbmAvkonQgn_note_erased;
+ imagemask = EMbmAvkonQgn_note_erased_mask;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+//-----------------------------------------------------------------------------
+//
+// r_aknexnote_progress_note
+// For progress note.
+//
+//-----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_filemanager_progress_note_copy
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control = AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ singular_label = qtn_gen_note_copying;
+ plural_label = qtn_gen_note_copying;
+ imagefile = avkon_mbm_file_location;
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_wait_note_copy
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_gen_note_copying;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_progress_note_move
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control = AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ singular_label = qtn_fldr_moving_wait_note;
+ plural_label = qtn_fldr_moving_wait_note;
+ imagefile = avkon_mbm_file_location;
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_wait_note_move
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_fldr_moving_wait_note;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_wait_note_open
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_gen_note_opening;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_wait_note_open_with_cancel
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_gen_note_opening;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_eject_confirm_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ bmpfile = AVKON_ICON_FILE;
+ bmpid = EMbmAvkonQgn_note_info;
+ bmpmask = EMbmAvkonQgn_note_info_mask;
+ animation = R_QGN_NOTE_INFO_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_wait_note_process
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_gen_note_processing;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_file_receive_dialog
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ singular_label = qtn_ir_connecting;
+ plural_label = "";
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_progress_note_with_cancel
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ imagefile = AVKON_ICON_FILE;
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_progress_note
+ {
+ flags = EAknProgressNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EProgressLayout;
+ imagefile = AVKON_ICON_FILE;
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_wait_note
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_EMPTY;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EAknNoteProgressBar;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ imagefile = AVKON_ICON_FILE;
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_drive_name_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control= AVKON_DATA_QUERY
+ {
+ layout = EDataLayoutAllowEmptyInput;
+ //label = qtn_memc_name_prompt;
+ label = qtn_fmgr_memory_name_prompt;
+ control = EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling|EEikEdwinOnlyASCIIChars;
+ avkon_flags = EAknEditorFlagLatinInputModesOnly;
+ maxlength = 11; // FAT limitation for volume name
+ };
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_drive_name_query_non_western
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control= AVKON_DATA_QUERY
+ {
+ layout = EDataLayoutAllowEmptyInput;
+ //label = qtn_memc_name_prompt;
+ label = qtn_fmgr_memory_name_prompt;
+ control = EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling;
+ // Unicode chars take 2 bytes, only 5 chars fit to the name
+ maxlength = 5;
+ };
+ };
+ }
+ };
+ }
+
+RESOURCE CBA r_filemanager_softkeys_options_exit__open
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyExit; txt = text_softkey_exit; },
+ CBA_BUTTON { id = EFileManagerSelectionKey; txt = qtn_msk_open; }
+ };
+ }
+
+RESOURCE CBA r_filemanager_softkeys_options_exit__open_embedded
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyExit; txt = text_softkey_back; },
+ CBA_BUTTON { id = EFileManagerSelectionKey; txt = qtn_msk_open; }
+ };
+ }
+
+RESOURCE CBA r_filemanager_softkeys_options_back__open
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EFileManagerSelectionKey; txt = qtn_msk_open; }
+ };
+ }
+
+RESOURCE CBA r_filemanager_softkeys_options_back__empty
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyEmpty; txt = text_softkey_empty; }
+ };
+ }
+
+RESOURCE CBA r_filemanager_softkeys_context_options_back__options
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option;},
+ CBA_BUTTON { id = EAknSoftkeyBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EAknSoftkeyContextOptions; txt = text_softkey_option; }
+ };
+ }
+
+RESOURCE CBA r_filemanager_softkeys_options_back__change
+ {
+ buttons =
+ {
+ CBA_BUTTON { id = EAknSoftkeyOptions; txt = text_softkey_option; },
+ CBA_BUTTON { id = EAknSoftkeyBack; txt = text_softkey_back; },
+ CBA_BUTTON { id = EFileManagerSelectionKey; txt = qtn_msk_change; }
+ };
+ }
+
+
+RESOURCE TBUF r_qtn_fmgr_search_not_found { buf = qtn_fmgr_search_not_found; }
+RESOURCE TBUF r_qtn_selec_empty_list { buf = qtn_selec_empty_list; }
+RESOURCE TBUF r_qtn_query_common_conf_delete { buf = qtn_query_common_conf_delete; }
+RESOURCE TBUF r_qtn_fldr_del_items_query { buf = qtn_fldr_del_items_query; }
+RESOURCE TBUF r_qtn_fldr_del_full_fldrs_query { buf = qtn_fldr_del_full_fldrs_query; }
+RESOURCE TBUF r_qtn_fmgr_error_unsupport { buf = qtn_fmgr_error_unsupport; }
+RESOURCE TBUF r_qtn_fmgr_error_cant_open { buf = qtn_fmgr_error_cant_open; }
+RESOURCE TBUF r_qtn_fmgr_error_del_def_fldr { buf = qtn_fmgr_error_del_def_fldr; }
+RESOURCE TBUF r_qtn_fmgr_error_delete_file_open { buf = qtn_fmgr_error_delete_file_open; }
+RESOURCE TBUF r_qtn_fmgr_find_dataq_prtx { buf = qtn_fmgr_find_dataq_prtx; }
+RESOURCE TBUF r_qtn_memc_mainpage_error1 { buf = qtn_memc_mainpage_error1; }
+RESOURCE TBUF r_qtn_memc_mainpage_error2 { buf = qtn_memc_mainpage_error2; }
+RESOURCE TBUF r_qtn_memc_mainpage_error3 { buf = qtn_memc_mainpage_error3; }
+RESOURCE TBUF r_qtn_memc_mainpage_error4 { buf = qtn_memc_mainpage_error4; }
+RESOURCE TBUF r_qtn_fldr_overwrite_query { buf = qtn_fldr_overwrite_query; }
+RESOURCE TBUF r_qtn_fldr_rename_query { buf = qtn_fldr_rename_query; }
+
+RESOURCE TBUF r_qtn_ir_connecting { buf = qtn_ir_connecting; }
+RESOURCE TBUF r_qtn_fmgr_note_receive_ir { buf = qtn_fmgr_note_receive_ir; }
+RESOURCE TBUF r_qtn_fmgr_mstate_heading { buf = qtn_fmgr_mstate_heading; }
+RESOURCE TBUF r_qtn_fmgr_error_del_fldr_open_1 { buf = qtn_fmgr_error_del_fldr_open_1; }
+RESOURCE TBUF r_qtn_fmgr_error_del_fldr_open_se { buf = qtn_fmgr_error_del_fldr_open_se; }
+RESOURCE TBUF r_qtn_fldr_cant_delete_fldr_open { buf = qtn_fldr_cant_delete_fldr_open; }
+RESOURCE TBUF r_qtn_options_send_via { buf = qtn_options_send_via; }
+RESOURCE TBUF r_qtn_fldr_item_cannot_be_moved { buf = qtn_fldr_item_cannot_be_moved; }
+RESOURCE TBUF r_qtn_fmgr_find_prtx { buf = qtn_fmgr_find_prtx; }
+RESOURCE TBUF r_text_softkey_back { buf = text_softkey_back; }
+RESOURCE TBUF r_qtn_fldr_cant_rename_item { buf = qtn_fldr_cant_rename_item; }
+RESOURCE TBUF r_qtn_fldr_item_cannot_be_copied { buf = qtn_fldr_item_cannot_be_copied; }
+RESOURCE TBUF r_qtn_fldr_cant_delete_item { buf = qtn_fldr_cant_delete_item; }
+RESOURCE TBUF r_qtn_drm_mos_deleted { buf = qtn_drm_mos_deleted; }
+RESOURCE TBUF r_qtn_drm_mo_deleted { buf = qtn_drm_mo_deleted; }
+RESOURCE TBUF r_qtn_memc_memorycard_read_only { buf = qtn_memc_memorycard_read_only; }
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+RESOURCE TBUF r_qtn_drm_info_move_one_forbid { buf = qtn_drm_info_move_one_forbid; }
+RESOURCE TBUF r_qtn_drm_info_move_many_forbid { buf = qtn_drm_info_move_many_forbid; }
+RESOURCE TBUF r_qtn_drm_info_copy_one_forbid { buf = qtn_drm_info_copy_one_forbid; }
+RESOURCE TBUF r_qtn_drm_info_copy_many_forbid { buf = qtn_drm_info_copy_many_forbid; }
+RESOURCE TBUF r_qtn_drm_info_move_folder_forbid { buf = qtn_drm_info_move_folder_forbid; }
+RESOURCE TBUF r_qtn_drm_info_copy_folder_forbid { buf = qtn_drm_info_copy_folder_forbid; }
+RESOURCE TBUF r_qtn_drm_query_copy_forbidden { buf = qtn_drm_query_copy_forbidden; }
+RESOURCE TBUF r_qtn_drm_query_move_forbidden { buf = qtn_drm_query_move_forbidden; }
+#endif
+
+// Eject texts
+RESOURCE TBUF r_qtn_conf_eject { buf = qtn_memc_conf_eject; }
+RESOURCE TBUF r_qtn_wait_eject { buf = qtn_memc_wait_eject; }
+RESOURCE TBUF r_qtn_info_eject { buf = qtn_memc_info_eject; }
+// Rename texts
+RESOURCE TBUF r_qtn_mmc_default_name { buf = qtn_memc_mmc_default_label; }
+RESOURCE TBUF r_qtn_invalid_drive_name { buf = qtn_memc_name_note1; }
+RESOURCE TBUF r_qtn_drive_name_changed { buf = qtn_memc_name_note2; }
+// Completed texts
+RESOURCE TBUF r_qtn_backup_completed { buf = qtn_memc_backup_completed; }
+RESOURCE TBUF r_qtn_restore_completed { buf = qtn_memc_restore_completed; }
+RESOURCE TBUF r_qtn_format_completed { buf = qtn_memc_format_completed; }
+// Confirm texts
+RESOURCE TBUF r_qtn_confirm_backup_text { buf = qtn_memc_backup_query1; }
+RESOURCE TBUF r_qtn_confirm_backup_text2 { buf = qtn_memc_backup_query2; }
+RESOURCE TBUF r_qtn_confirm_restore_text { buf = qtn_memc_restore_query1; }
+RESOURCE TBUF r_qtn_confirm_format_text { buf = qtn_memc_format_query1; }
+RESOURCE TBUF r_qtn_confirm_backup_level1 { buf = qtn_memc_backup_query3; }
+RESOURCE TBUF r_qtn_confirm_format_text2 { buf = qtn_memc_format_query2; }
+// Error texts
+RESOURCE TBUF r_qtn_files_not_backupped { buf = qtn_memc_backup_info1; }
+RESOURCE TBUF r_qtn_one_file_not_backupped { buf = qtn_memc_backup_info2; }
+RESOURCE TBUF r_qtn_files_not_restored { buf = qtn_memc_restore_info1; }
+RESOURCE TBUF r_qtn_one_file_not_restored { buf = qtn_memc_restore_info2; }
+RESOURCE TBUF r_qtn_backup_no_space { buf = qtn_memc_backup_enoughspace; }
+RESOURCE TBUF r_qtn_restore_no_space { buf = qtn_memc_restore_enoughspace; }
+RESOURCE TBUF r_qtn_corrupt { buf = qtn_memc_memorycard_error; }
+RESOURCE TBUF r_qtn_memorycard_readonly { buf = qtn_memc_memorycard_read_only; }
+RESOURCE TBUF r_qtn_critical_error { buf = qtn_memc_gen_error; }
+RESOURCE TBUF r_qtn_format_files_in_use { buf = qtn_memc_format_card_used; }
+// Password texts
+RESOURCE TBUF r_qtn_passwords_wrong_text { buf = qtn_memc_change_pwd_error1; }
+RESOURCE TBUF r_qtn_unlock_pwd_wrong_text { buf = qtn_memc_unlock_pwd_error; }
+RESOURCE TBUF r_qtn_password_set_text { buf = qtn_memc_set_password_info; }
+RESOURCE TBUF r_qtn_password_changed_text { buf = qtn_memc_change_pwd_info; }
+RESOURCE TBUF r_qtn_password_text { buf = qtn_memc_remove_pwd_prompt; }
+RESOURCE TBUF r_qtn_unlock_password_text { buf = qtn_memc_unlock_pwd_prompt; }
+RESOURCE TBUF r_qtn_password_old_text { buf = qtn_memc_change_pwd_prompt1; }
+RESOURCE TBUF r_qtn_password_remove_text { buf = qtn_memc_remove_pwd_query; }
+RESOURCE TBUF r_qtn_password_removed_text { buf = qtn_memc_remove_pwd_info; }
+// Progress texts
+RESOURCE TBUF r_qtn_format_inprogress { buf = qtn_memc_format_inprogress; }
+RESOURCE TBUF r_qtn_backup_inprogress { buf = qtn_memc_backup_inprogress; }
+RESOURCE TBUF r_qtn_restore_inprogress { buf = qtn_memc_restore_inprogress; }
+// Remote storage error texts
+RESOURCE TBUF r_qtn_rd_query_delete_drive { buf = qtn_rd_query_delete_drive; }
+RESOURCE TBUF r_qtn_fmgr_empty_remote_drive { buf = qtn_fmgr_empty_remote_drive; }
+RESOURCE TBUF r_qtn_fmgr_infonote_unable_open_remotely
+ { buf = qtn_fmgr_infonote_unable_open_remotely; }
+RESOURCE TBUF r_qtn_rd_error_max_drives { buf = qtn_rd_error_max_drives; }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+RESOURCE TBUF r_qtn_fmgr_backup_title { buf = qtn_fmgr_backup_title; }
+RESOURCE TBUF r_qtn_fmgr_backup_contents { buf = qtn_fmgr_backup_contents; }
+RESOURCE TBUF r_qtn_fmgr_backup_scheduling { buf = qtn_fmgr_backup_scheduling; }
+RESOURCE TBUF r_qtn_fmgr_backup_weekday { buf = qtn_fmgr_backup_weekday; }
+RESOURCE TBUF r_qtn_fmgr_backup_time { buf = qtn_fmgr_backup_time; }
+
+RESOURCE TBUF r_qtn_fmgr_backup_content_all { buf = qtn_fmgr_backup_content_all; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_selected { buf = qtn_fmgr_backup_content_selected; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_settings { buf = qtn_fmgr_backup_content_settings; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_messages { buf = qtn_fmgr_backup_content_messages; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_contacts { buf = qtn_fmgr_backup_content_contacts; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_calendar { buf = qtn_fmgr_backup_content_calendar; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_bookmarks { buf = qtn_fmgr_backup_content_bookmarks; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_userfiles { buf = qtn_fmgr_backup_content_userfiles; }
+
+RESOURCE TBUF r_qtn_fmgr_restore_title { buf = qtn_fmgr_restore_title; }
+RESOURCE TBUF r_qtn_fmgr_restore_settings { buf = qtn_fmgr_restore_settings; }
+RESOURCE TBUF r_qtn_fmgr_restore_messages { buf = qtn_fmgr_restore_messages; }
+RESOURCE TBUF r_qtn_fmgr_restore_contacts { buf = qtn_fmgr_restore_contacts; }
+RESOURCE TBUF r_qtn_fmgr_restore_calendar { buf = qtn_fmgr_restore_calendar; }
+RESOURCE TBUF r_qtn_fmgr_restore_bookmarks { buf = qtn_fmgr_restore_bookmarks; }
+RESOURCE TBUF r_qtn_fmgr_restore_userfiles { buf = qtn_fmgr_restore_userfiles; }
+
+RESOURCE TBUF r_qtn_fmgr_backup_no_scheduling { buf = qtn_fmgr_backup_no_scheduling; }
+RESOURCE TBUF r_qtn_fmgr_backup_daily { buf = qtn_fmgr_backup_daily; }
+RESOURCE TBUF r_qtn_fmgr_backup_weekly { buf = qtn_fmgr_backup_weekly; }
+
+RESOURCE TBUF r_qtn_fmgr_restore_no_backups { buf = qtn_fmgr_restore_no_backups; }
+RESOURCE TBUF r_qtn_fmgr_restore_space_error { buf = qtn_fmgr_restore_space_error; }
+
+RESOURCE TBUF r_qtn_fmgr_scheduled_backup_query { buf = qtn_fmgr_scheduled_backup_query; }
+RESOURCE TBUF r_qtn_fmgr_scheduled_backup_progress { buf = qtn_fmgr_scheduled_backup_progress; }
+RESOURCE TBUF r_qtn_fmgr_backup_tight_memory { buf = qtn_fmgr_backup_tight_memory; }
+RESOURCE TBUF r_qtn_fmgr_backup_destination_full { buf = qtn_fmgr_backup_destination_full; }
+RESOURCE TBUF r_qtn_fmgr_select_backup_destination { buf = qtn_fmgr_select_backup_destination; }
+RESOURCE TBUF r_qtn_fmgr_scheduled_backup_error { buf = qtn_fmgr_scheduled_backup_error; }
+RESOURCE TBUF r_qtn_fmgr_backup_query_exists { buf = qtn_fmgr_backup_query_exists; }
+RESOURCE TBUF r_qtn_fmgr_progress_preparing_backup { buf = qtn_fmgr_progress_preparing_backup; }
+RESOURCE TBUF r_qtn_fmgr_backup_query { buf = qtn_fmgr_backup_query; }
+RESOURCE TBUF r_qtn_fmgr_restore_query { buf = qtn_fmgr_restore_query; }
+
+RESOURCE TBUF r_qtn_fmgr_progress_preparing_restore { buf = qtn_fmgr_progress_preparing_restore; }
+RESOURCE TBUF r_qtn_fmgr_error_corrupted_backup_file
+ { buf = qtn_fmgr_error_corrupted_backup_file; }
+RESOURCE TBUF r_qtn_fmgr_error_backup_memorycard_not_available
+ { buf = qtn_fmgr_error_backup_memorycard_not_available; }
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+RESOURCE TBUF r_qtn_fldr_name_prmpt { buf = qtn_fldr_name_prmpt; }
+RESOURCE TBUF r_qtn_fldr_item_name_prmpt { buf = qtn_fldr_item_name_prmpt; }
+
+#ifdef RD_MULTIPLE_DRIVE
+RESOURCE TBUF r_qtn_memc_mass_storage_corrupted { buf = qtn_memc_mass_storage_corrupted; }
+RESOURCE TBUF r_qtn_memc_mass_storage_in_use { buf = qtn_memc_mass_storage_in_use; }
+RESOURCE TBUF r_qtn_memc_not_available { buf = qtn_memc_not_available; }
+
+RESOURCE TBUF r_qtn_memc_conf_eject_multiple { buf = qtn_memc_conf_eject_multiple; }
+RESOURCE TBUF r_qtn_memc_conf_eject_multiple_defaultname { buf = qtn_memc_conf_eject_multiple_defaultname; }
+
+RESOURCE TBUF r_qtn_memc_info_eject_multiple { buf = qtn_memc_info_eject_multiple; }
+RESOURCE TBUF r_qtn_memc_info_eject_multiple_defaultname { buf = qtn_memc_info_eject_multiple_defaultname; }
+
+RESOURCE TBUF r_qtn_memc_unlock_password_multiple { buf = qtn_memc_unlock_password_multiple; }
+RESOURCE TBUF r_qtn_memc_unlock_password_multiple_defaultname { buf = qtn_memc_unlock_password_multiple_defaultname; }
+
+RESOURCE TBUF r_qtn_memc_multiple_memc_read_only { buf = qtn_memc_multiple_memc_read_only; }
+RESOURCE TBUF r_qtn_memc_memory_card_corrupted_multiple { buf = qtn_memc_memory_card_corrupted_multiple; }
+
+RESOURCE TBUF r_qtn_fmgr_format_mass_query1 { buf = qtn_fmgr_format_mass_query1; }
+RESOURCE TBUF r_qtn_fmgr_mass_format_inprogress { buf = qtn_fmgr_mass_format_inprogress; }
+RESOURCE TBUF r_qtn_fmgr_mass_format_completed { buf = qtn_fmgr_mass_format_completed; }
+RESOURCE TBUF r_qtn_fmgr_format_mass_query2 { buf = qtn_fmgr_format_mass_query2; }
+#endif // RD_MULTIPLE_DRIVE
+
+RESOURCE TBUF r_qtn_fmgr_scheduled_backup_cancelled_ps { buf = qtn_fmgr_scheduled_backup_cancelled_ps; }
+
+RESOURCE TBUF r_qtn_fmgr_free_memory_var_units { buf = qtn_fmgr_free_memory_var_units; }
+RESOURCE TBUF r_qtn_fmgr_units_byte { buf = qtn_fmgr_units_byte; }
+RESOURCE TBUF r_qtn_fmgr_units_kilobyte { buf = qtn_fmgr_units_kilobyte; }
+RESOURCE TBUF r_qtn_fmgr_units_megabyte { buf = qtn_fmgr_units_megabyte; }
+RESOURCE TBUF r_qtn_fmgr_units_gigabyte { buf = qtn_fmgr_units_gigabyte; }
+
+RESOURCE TBUF r_qtn_memlo_not_enough_memory_card_name { buf = qtn_memlo_not_enough_memory_card_name; }
+RESOURCE TBUF r_qtn_memlo_not_enough_memory_card_defaultname { buf = qtn_memlo_not_enough_memory_card_defaultname; }
+RESOURCE TBUF r_qtn_memlo_not_enough_mass_memory { buf = qtn_memlo_not_enough_mass_memory; }
+RESOURCE TBUF r_qtn_memlo_not_enough_device_memory { buf = qtn_memlo_not_enough_device_memory; }
+
+RESOURCE TBUF r_qtn_fmgr_confirm_memory_name_changed { buf = qtn_fmgr_confirm_memory_name_changed; }
+RESOURCE TBUF r_qtn_fmgr_usb_memory_format_query { buf = qtn_fmgr_usb_memory_format_query; }
+RESOURCE TBUF r_qtn_fmgr_formatting_memory_progress { buf = qtn_fmgr_formatting_memory_progress; }
+RESOURCE TBUF r_qtn_fmgr_memory_in_use_format { buf = qtn_fmgr_memory_in_use_format; }
+RESOURCE TBUF r_qtn_fmgr_delete_backup_title { buf = qtn_fmgr_delete_backup_title; }
+RESOURCE TBUF r_qtn_fmgr_delete_backup_query { buf = qtn_fmgr_delete_backup_query; }
+RESOURCE TBUF r_qtn_fmgr_usb_memory_default_name { buf = qtn_fmgr_usb_memory_default_name; }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/data/FileManager_reg.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2004-2006 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: Resource definitions for project FileManager
+*
+*/
+
+
+#include <appinfo.rh>
+#include <data_caging_paths_strings.hrh>
+#include <FileManager.rsg>
+#include "FileManagerUID.h"
+
+UID2 KUidAppRegistrationResourceFile
+UID3 KFileManagerUID3
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "FileManager";
+ localisable_resource_file = APP_RESOURCE_DIR"\\FileManager";
+ localisable_resource_id = R_FILEMANAGER_LOCALISABLE_APP_INFO;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/data/filemanager_caption.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002-2006 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: Resource definitions for project FileManager
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+NAME FMGC // 4 letter ID
+
+// INCLUDES
+#include <apcaptionfile.rh>
+#include <FileManager.loc>
+
+
+// RESOURCE DEFINITIONS
+// ---------------------------------------------------------
+//
+// CAPTION_DATA
+// Long and short caption for File Mgr app.
+//
+// ---------------------------------------------------------
+//
+RESOURCE CAPTION_DATA
+ {
+ caption = qtn_apps_fmgr_list;
+ shortcaption = qtn_apps_fmgr_grid;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerAppUi.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,409 @@
+/*
+* Copyright (c) 2002-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: File Manager application UI class
+*
+*/
+
+
+
+#ifndef CFILEMANAGERAPPUI_H
+#define CFILEMANAGERAPPUI_H
+
+// INCLUDES
+#include <aknViewAppUi.h> // CAknViewAppUi
+#include <TFileManagerDriveInfo.h>
+#include "MFileManagerSchBackupObserver.h"
+
+// FORWARD DECLARATIONS
+class CAknNavigationControlContainer;
+class CAknTitlePane;
+class CAknNavigationDecorator;
+class CSendUi;
+class CAiwGenericParamList;
+class CFileManagerIRReceiver;
+class MFileManagerProcessObserver;
+class CFileManagerTaskScheduler;
+class CFileManagerSchBackupHandler;
+
+
+// CLASS DECLARATION
+/**
+ * FileManager application UI class.
+ * An object of this class is created by the Symbian OS framework by a call to
+ * CFileManagerDocument::CreateAppUiL(). The application UI object creates
+ * and owns the application's views and handles system commands selected
+ * from the menu.
+ */
+class CFileManagerAppUi : public CAknViewAppUi,
+ public MCoeForegroundObserver,
+ public MFileManagerSchBackupObserver
+ {
+ public: // Constants and types
+ static const TUid KFileManagerMainViewId;
+ static const TUid KFileManagerMemoryStoreViewId;
+ static const TUid KFileManagerFoldersViewId;
+ static const TUid KFileManagerSearchResultsViewId;
+ static const TUid KFileManagerBackupViewId;
+ static const TUid KFileManagerRestoreViewId;
+
+ public: // Constructors and destructor
+ /**
+ * Standard C++ constructor.
+ */
+ CFileManagerAppUi();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerAppUi();
+
+ /**
+ * Constructs the CFileManagerAppUi class.
+ */
+ void ConstructL();
+
+ public:
+ /**
+ * Activates folders view if it is not already
+ * activated.
+ * @since 2.0
+ * @return ETrue if activated
+ * EFalse if view already activated
+ */
+ TBool ActivateFoldersViewL();
+
+ /**
+ * Closes folders view and goes back to view in which the
+ * application was before folders view was activated.
+ * @since 2.0
+ */
+ void CloseFoldersViewL();
+
+ /**
+ * Activates search results view if it is not already
+ * activated.
+ * @since 2.0
+ */
+ void ActivateSearchResultsViewL();
+
+ /**
+ * Closes search results view and goes back to view in which
+ * the application was before search results view was
+ * activated
+ * @since 2.0
+ */
+ void CloseSearchResultsViewL();
+
+ /**
+ * Restores the default title of application to title pane.
+ * @since 2.0
+ */
+ void RestoreDefaultTitleL();
+ /**
+ * Returns the CSendUi2 of this application.
+ *
+ * @since 3.0
+ * @return The CSendUi2 of this application.
+ */
+ CSendUi& SendUiL();
+ /**
+ * This is called if resource is changed. Needed for skin feature
+ *
+ * @since 2.0
+ */
+ void HandleResourceChangeL(TInt aType);
+
+ /**
+ * Is application foreground
+ *
+ * @since 2.0
+ * @return ETrue if application is foreground
+ * EFalse if application is not foreground
+ */
+ TBool IsFmgrForeGround();
+
+ /**
+ * Activates main view
+ * activated.
+ * @since 3.1
+ */
+ void ActivateMainViewL();
+
+ /**
+ * Activates memory store view
+ * activated.
+ * @since 3.1
+ */
+ void ActivateMemoryStoreViewL();
+
+ /**
+ * Closes memory store view and goes back to main view
+ * @since 3.1
+ */
+ void CloseMemoryStoreViewL();
+
+ /**
+ * Gets reference to drive info
+ * @since 3.1
+ */
+ TFileManagerDriveInfo& DriveInfo();
+
+ /**
+ * Activates remote drive settings view
+ * @since 3.1
+ */
+ void ActivateRemoteDriveSettingsViewL(
+ const TDesC& aDriveName = KNullDesC );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ * Activates backup view if not already active
+ * @since 3.1
+ */
+ void ActivateBackupViewL();
+
+ /**
+ * Closes backup view and goes back to main view
+ * @since 3.1
+ */
+ void CloseBackupViewL();
+
+ /**
+ * Activates restore view if not already active
+ *
+ * @since 3.1
+ * @param aDeleteBackup Indicates if delete backup selection is used.
+ */
+ void ActivateRestoreViewL( TBool aDeleteBackup = EFalse );
+
+ /**
+ * Closes restore view and goes back to backup view
+ * @since 3.1
+ */
+ void CloseRestoreViewL();
+
+ /**
+ * Starts scheduled backup
+ */
+ void StartSchBackupL();
+
+ /**
+ * Gets task scheduler
+ */
+ CFileManagerTaskScheduler& TaskSchedulerL();
+
+ /**
+ * Gets scheduled backup handler
+ */
+ CFileManagerSchBackupHandler& SchBackupHandlerL();
+#endif // RD_FILE_MANAGER_BACKUP
+
+ /**
+ * Activates IR receive
+ * @since 3.1
+ */
+ void StartIRReceiveL( MFileManagerProcessObserver& aObserver );
+
+ /**
+ * Stops IR receive
+ * @since 3.1
+ */
+ void StopIRReceive();
+
+ /**
+ * Sets title
+ * @since 3.1
+ */
+ void SetTitleL( const TDesC& aTitle );
+
+ /**
+ * Sets title
+ * @since 3.1
+ */
+ void SetTitleL( const TInt aTitle );
+
+ /**
+ * Checks if view is file manager based view
+ * @since 3.1
+ */
+ TBool IsFileManagerView( const TUid aViewUid );
+
+ /**
+ * Informs active view to update its cba
+ * @since 3.2
+ */
+ void NotifyCbaUpdate();
+
+ /**
+ * Processes AIW input parameters
+ * @since 5.0
+ */
+ void ProcessAiwParamListL( const CAiwGenericParamList& aInParams );
+
+ /**
+ * Indicates are all required input params received
+ * @since 5.0
+ */
+ TBool WaitingForInputParams() const;
+
+ /**
+ * Exits the embedded open application if needed
+ * @since 5.0
+ */
+ void ExitEmbeddedAppIfNeededL();
+
+ /**
+ * Checks is search view open
+ * @since 5.0
+ */
+ TBool IsSearchViewOpen() const;
+
+ /**
+ * Save the time when backup/restore started.
+ * @since 5.0
+ */
+ void BackupOrRestoreStarted();
+
+ /**
+ * Save the time when backup/restore ended.
+ * @since 5.0
+ */
+ void BackupOrRestoreEnded();
+
+ /**
+ * Returns the time when backup/restore started.
+ * @since 5.0
+ */
+ TTime BackupOrRestoreStartTime() const;
+
+ /**
+ * Returns the time when backup/restore ended.
+ * @since 5.0
+ */
+ TTime BackupOrRestoreEndTime() const;
+
+ /**
+ * Resets the time when backup/restore start and end times.
+ * @since 5.0
+ */
+ void ResetBackupOrRestoreEndTime();
+
+ public: // MCoeForegroundObserver
+
+ /** Handles the application coming to the foreground. */
+ void HandleGainingForeground();
+ /** Handles the application going into the background. */
+ void HandleLosingForeground();
+
+ public: // From CAknViewAppUi
+ /**
+ * @see CAknViewAppUi
+ */
+ void HandleViewDeactivation( const TVwsViewId &aViewIdToBeDeactivated,
+ const TVwsViewId &aNewlyActivatedViewId );
+
+ /**
+ * @see CAknViewAppUi
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * From CAknViewAppUi, called when screen layout changes
+ */
+ void HandleScreenDeviceChangedL();
+
+ /**
+ * @see CAknViewAppUi
+ */
+ TErrorHandlerResponse HandleError( TInt aError,
+ const SExtendedError& aExtErr, TDes& aErrorText, TDes& aContextText );
+
+ /**
+ * @see CAknViewAppUi
+ */
+ TBool ProcessCommandParametersL(
+ TApaCommand aCommand,
+ TFileName& aDocumentName,
+ const TDesC8& aTail );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ * @see CAknViewAppUi
+ */
+ void ProcessMessageL( TUid aUid, const TDesC8& aParams );
+#endif // RD_FILE_MANAGER_BACKUP
+
+ public: // From MFileManagerSchBackupObserver
+ /**
+ * @see MFileManagerSchBackupObserver
+ */
+ void SchBackupFinishedL( TInt aError );
+
+ private:
+ /** Deletes IR receive after timeout. */
+ static TInt DeleteIRReceiveCB( TAny* aPtr );
+
+ /** Informs active view when screen device has changed. */
+ void NotifyViewScreenDeviceChanged();
+
+ void SetFolderToOpenAtStartup(
+ const TDesC& aFullPath, TInt aSortMode );
+
+ void OpenFolderViewAtStartupL();
+
+ void CreateAndActivateLocalViewL(
+ TUid aViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage );
+
+ void CreateAndActivateLocalViewL( TUid aViewId );
+
+ private: // Data
+ /// Ref: Title pane of the application
+ CAknTitlePane* iTitlePane;
+ // Own: CSendAppUi for send menu item and sending files
+ CSendUi* iSendUi;
+ /// Uid of currently active view
+ TUid iActiveView;
+ /// Flag to indicate if search view is open
+ TBool iSearchViewOpen;
+ // For some reason IsForeGround() does not return correct state of the application
+ // so own boolean is updated according MCoeForegroundObserver callbacks.
+ TBool iForeGround;
+ // Own: Infrared receiver for receive via IR functionality
+ CFileManagerIRReceiver* iIRReceiver;
+ // Own: Callback to delete CFileManagerIrReceiver
+ CAsyncCallBack* iIRDeleteCB;
+ // Own: Drive info
+ TFileManagerDriveInfo iDriveInfo;
+ // Task scheduler
+ CFileManagerTaskScheduler* iTaskScheduler;
+ // Handler for scheduled backup
+ CFileManagerSchBackupHandler* iSchBackupHandler;
+ // Flag to indicate if started for scheduled backup only
+ TBool iSchBackupStandalone;
+ // Indicates the folder to be opened at startup
+ TFileName iFolderToOpenAtStartup;
+ // Indicates the folder level at startup when the app is embedded
+ TInt iInitialFolderLevel;
+ // Indicates the parameter ready status
+ TBool iWaitingForParams;
+
+ // Own: Stores the start time
+ TTime iManualBackupOrRestoreStarted;
+ // Own: Stores the end time
+ TTime iManualBackupOrRestoreEnded;
+ };
+
+#endif // CFILEMANAGERAPPUI_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerApplication.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2002-2006 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: File Manager application class
+*
+*/
+
+
+#ifndef CFILEMANAGERAPP_H
+#define CFILEMANAGERAPP_H
+
+// INCLUDES
+#include <aknapp.h> // CAknApplication
+
+// CLASS DECLARATION
+
+/**
+ * FileManager application class.
+ * This class is created by the Symbian OS framework by a call to
+ * NewApplication() function when the application is started. The
+ * main purpose of the application class is to create the
+ * application-specific document object (CFileManagerDocument in
+ * this case) via a call to virtual CreateDocumentL().
+ */
+class CFileManagerApplication : public CAknApplication
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Standard C++ constructor.
+ */
+ CFileManagerApplication();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerApplication();
+
+ public: // From CAknApplication
+ /**
+ * Creates the FileManager document object (CFileManagerDocument).
+ * Called by the application framework.
+ *
+ * @return New FileManager document object (CFileManagerDocument).
+ */
+ CApaDocument* CreateDocumentL();
+
+ /**
+ * @return the UID of this application.
+ */
+ TUid AppDllUid() const;
+
+ };
+
+#endif // CFILEMANAGERAPP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerBackupView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2002-2006 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: View for backup settings
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERBACKUPVIEW_H
+#define C_FILEMANAGERBACKUPVIEW_H
+
+
+// INCLUDES
+#include <aknview.h>
+#include "CFileManagerViewBase.h"
+
+
+// CLASS DECLARATION
+/**
+ * This class is used for backup settings view
+ *
+ * @since S60 3.1
+ */
+class CFileManagerBackupView : public CFileManagerViewBase
+ {
+
+public: // Constructors and destructor
+ /**
+ * Two-phased constructor.Leaves created view
+ * to cleanup stack.
+ *
+ * @return Newly constructed view
+ */
+ static CFileManagerBackupView* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerBackupView();
+
+public: // From CFileManagerViewBase
+ /**
+ * @see CFileManagerViewBase
+ */
+ void DirectoryChangedL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ CFileManagerContainerBase* CreateContainerL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ void NotifyForegroundStatusChange( TBool aForeground );
+
+private: // From CAknView
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * @see CAknView
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+private: // New functions
+ /**
+ * Handles change command
+ */
+ void CmdChangeL();
+
+ /**
+ * Handles backup command
+ */
+ void CmdBackupL();
+
+ /**
+ * Handles restore command
+ */
+ void CmdRestoreL();
+
+ /**
+ * Changes backup contents
+ */
+ void ChangeContentsL();
+
+ /**
+ * Changes backup scheduling
+ */
+ void ChangeSchedulingL();
+
+ /**
+ * Changes backup weekday
+ */
+ void ChangeWeekdayL();
+
+ /**
+ * Changes backup time
+ */
+ void ChangeTimeL();
+
+ /**
+ * Changes backup target drive
+ */
+ void ChangeTargetDriveL();
+
+ /**
+ * Handles command back
+ */
+ void CmdBackL();
+
+ /**
+ * Updates schedule state
+ */
+ void UpdateScheduleL();
+
+ /**
+ * Refreshes all settings
+ */
+ void RefreshSettingsL();
+
+ /**
+ * Handles delete backup command
+ */
+ void CmdDeleteBackupL();
+
+ /**
+ * Filters backup menu items.
+ *
+ * @param aMenuPane Menu instance to be filtered.
+ */
+ void BackupMenuFilteringL( CEikMenuPane& aMenuPane );
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerBackupView();
+
+private: // Data
+
+ };
+
+#endif // C_FILEMANAGERBACKUPVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerContainerBase.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2006 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: Base class for all file manager containers
+*
+*/
+
+
+#ifndef CFILEMANAGERCONTAINERBASE_H
+#define CFILEMANAGERCONTAINERBASE_H
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <badesca.h>
+#include <eiklbo.h>
+#include <eikcmobs.h>
+
+
+// FORWARD DECLARATIONS
+class CEikTextListBox;
+
+
+// CLASS DECLARATION
+/**
+ * Base class for all containers in File Manager
+ */
+class CFileManagerContainerBase : public CCoeControl,
+ public MEikListBoxObserver,
+ public MCoeControlObserver,
+ public MEikCommandObserver,
+ public MListBoxSelectionObserver
+ {
+ public: // destructor
+ /**
+ * Destructor.
+ */
+ ~CFileManagerContainerBase();
+
+ protected: // MEikListBoxObserver
+ void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+ protected: // MCoeControlObserver
+ void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+ protected: // From CCoeControl
+ /**
+ * @see CCoeControl
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * @see CCoeControl
+ */
+ void SizeChanged();
+
+ /**
+ * @see CCoeControl
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * @see CCoeControl
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * @see CCoeControl
+ */
+ void FocusChanged( TDrawNow aDrawNow );
+
+ /**
+ * @see CCoeControl
+ */
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+ public: // From MEikCommandObserver
+ /**
+ * @see MEikCommandObserver
+ */
+ void ProcessCommandL( TInt aCommandId );
+
+ public: // New functions
+ /**
+ * Sets list empty and removes empty text until refreshed.
+ */
+ virtual void SetListEmptyL();
+
+ /**
+ * Stores the focus, so when control is reseted, focus can
+ * be set back to current position.
+ *
+ * @param aFocusedIndex index to be stored
+ */
+ void SetIndex( TInt aFocusedIndex );
+
+ /**
+ * Sets text array.
+ */
+ void SetTextArray( MDesCArray* aArray );
+
+ /**
+ * Sets help context.
+ */
+ void SetHelpContext( const TDesC& aHelpContext );
+
+ /**
+ * Sets empty text.
+ */
+ void SetEmptyTextL( TInt aTextId );
+
+ /**
+ * Refreshes the container.
+ * @param aFocusedIndex Index of the item that will be focused
+ * after refresh.
+ */
+ virtual void RefreshListL( TInt aFocusedIndex );
+
+ /**
+ * Gets selection mode status
+ */
+ TBool SelectionModeEnabled() const;
+
+ /**
+ * Updates cba
+ */
+ virtual void UpdateCba();
+
+ /**
+ * Gets index of current list item
+ * @return Index of current list item or KErrNotFound if list is empty.
+ */
+ virtual TInt ListBoxCurrentItemIndex();
+
+ /**
+ * Gets number of list items
+ * @return Number of list items.
+ */
+ virtual TInt ListBoxNumberOfItems();
+
+ /**
+ * Gets indexes of selection
+ * @return Array of selected indexes. Ownership is not transferred.
+ */
+ virtual const CArrayFix< TInt >* ListBoxSelectionIndexes();
+
+ /**
+ * Gets number of selected list items
+ * @return Number of selected list items.
+ */
+ virtual TInt ListBoxSelectionIndexesCount();
+
+ /**
+ * Toggles list item selection status
+ * @param aIndex Index of list item.
+ */
+ virtual void ListBoxToggleItemL( TInt aIndex );
+
+ /**
+ * Checks list item selection status
+ * @param aIndex Index of list item.
+ * @return ETrue if item is selected. Otherwise EFalse.
+ */
+ virtual TBool ListBoxIsItemSelected( TInt aIndex );
+
+ /**
+ * Selects all list items
+ */
+ virtual void ListBoxSelectAllL();
+
+ /**
+ * Clears list selection
+ */
+ virtual void ListBoxClearSelection();
+
+ /**
+ * Sets text showm in empty list view.
+ * @param aText Text to be shown
+ */
+ virtual void ListBoxSetTextL( const TDesC& aText );
+
+ /**
+ * Checks is search field visible
+ * @return ETrue if search field is visible. Otherwise EFalse.
+ */
+ virtual TBool IsSearchFieldVisible() const;
+
+ /**
+ * Enables and disables the search field.
+ * @param aEnable New status of search field.
+ * @param aSearchText Text to search
+ */
+ virtual void EnableSearchFieldL(
+ TBool aEnable, const TDesC& aSearchText = KNullDesC );
+
+ /**
+ * Sets current item index after search
+ * @param aIndex Current item index.
+ */
+ virtual void SetCurrentItemIndexAfterSearch( TInt aIndex );
+
+ /**
+ * Selects list item
+ * @param aIndex Index of list item.
+ */
+ virtual void ListBoxSelectItemL( TInt aIndex );
+
+ /**
+ * Deselects list item
+ * @param aIndex Index of list item.
+ */
+ virtual void ListBoxDeselectItem( TInt aIndex );
+
+ /**
+ *
+ *
+ */
+ virtual void ListBoxSetSelectionIndexesL(const CArrayFixFlat<TInt>*
+ aSelectionIndexes);
+
+ protected:
+ /**
+ * Standard C++ constructor.
+ */
+ CFileManagerContainerBase();
+
+ virtual void ConstructL(
+ const TRect& aRect,
+ const TInt aFocusedIndex );
+
+ virtual CEikTextListBox* CreateListBoxL() = 0;
+
+ TBool ListBoxExists() const;
+
+ CEikListBox& ListBox();
+
+ private: // From MListBoxSelectionObserver
+ void SelectionModeChanged(
+ CEikListBox* aListBox, TBool aSelectionModeEnabled );
+
+ private:
+ void SetEmptyArrayL();
+
+ private: // Data
+ // Own: Pointer to listbox
+ CEikTextListBox* iListBox;
+ // Own: Help context name
+ TCoeContextName iHelpContext;
+ // Own: Empty text
+ HBufC* iEmptyText;
+ // Ref: Pointer to text array
+ MDesCArray* iArray;
+ // Own: Stores selection mode status
+ TBool iSelectionModeEnabled;
+
+ };
+
+#endif // CFILEMANAGERCONTAINERBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerDocument.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2002-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: Document class of the file manager
+*
+*/
+
+
+
+#ifndef CFILEMANAGERDOCUMENT_H
+#define CFILEMANAGERDOCUMENT_H
+
+// INCLUDES
+#include <GenericParamConsumer.h>
+#include <ConeResLoader.h> // RConeResourceLoader
+#include <badesca.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerIconArray;
+class CFileManagerEngine;
+class CFileManagerStringCache;
+
+
+// CLASS DECLARATION
+/**
+ * FileManager application document class.
+ * An object of this class is created by the Symbian OS framework by a call to
+ * CFileManagerApplication::CreateDocumentL().
+ * The application framework creates the FileManager application UI object
+ * (CFileManagerAppUi) by a call to the virtual function CreateAppUiL().
+ */
+class CFileManagerDocument : public CAiwGenericParamConsumer
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerDocument* NewL( CEikApplication& aApp );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerDocument();
+
+ public: // From CAiwGenericParamConsumer
+ CEikAppUi* CreateAppUiL();
+
+ void UpdateTaskNameL( CApaWindowGroupName* aWgName );
+
+ CFileStore* OpenFileL( TBool aDoOpen, const TDesC& aFilename, RFs& aFs );
+
+ public: // New methods
+ /**
+ * Returns the icon array of this application.
+ *
+ * @return The icon array of this application.
+ */
+ CFileManagerIconArray* IconArray() const;
+
+ /**
+ * Returns reference to engine of this application
+ *
+ * @return Reference to engine of this application
+ */
+ CFileManagerEngine& Engine() const;
+
+ /**
+ * Returns the model for listbox
+ * @return Return MDesCArray to current filelist
+ */
+ MDesCArray* FileList() const;
+
+ /**
+ * Clears the string cache
+ */
+ void ClearStringCache();
+
+ /**
+ * Gets last error
+ */
+ TInt LastError() const;
+
+ /**
+ * Checks is app was launched for scheduled backup
+ */
+ TBool IsScheduledBackup();
+
+ /**
+ * Stores ECOM plugins to be deleted with document
+ */
+ void StorePluginL( const TUid& aUid );
+
+ private:
+
+ /**
+ * Standard C++ constructor.
+ *
+ * @param aApp Application which this document belongs to.
+ */
+ CFileManagerDocument( CEikApplication& aApp );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Deletes stored ECOM plugins
+ */
+ void DeletePlugins();
+
+ private: // Data
+ /// Own: Engine of the application
+ CFileManagerEngine* iEngine;
+ /// Own: Icon array that contains all the icons used in listboxes.
+ CFileManagerIconArray* iIconArray;
+ /// Resource loader for view resources
+ RConeResourceLoader iViewResourceLoader;
+ /// Resource loader for engine resources
+ RConeResourceLoader iEngineResourceLoader;
+ // Own: For caching listbox strings
+ CFileManagerStringCache* iStringCache;
+ // Own: Stores loaded ECom plugin ids
+ RArray< TUid > iPluginArray;
+
+ };
+
+#endif // CFILEMANAGERDOCUMENT_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerFileListContainer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2006-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: File list container in file manager
+*
+*/
+
+
+#ifndef CFILEMANAGERFILELISTCONTAINER_H
+#define CFILEMANAGERFILELISTCONTAINER_H
+
+// INCLUDES
+#include "CFileManagerContainerBase.h"
+
+// FORWARD DECLARATIONS
+class CFileManagerDocument;
+class CFileManagerAppUi;
+class CAknSearchField;
+
+
+// CLASS DECLARATION
+/**
+ * File list container in File Manager.
+ * Replaces old phone memory, memory card, folder and search specific
+ * containers.
+ */
+class CFileManagerFileListContainer : public CFileManagerContainerBase,
+ public MCoeFocusObserver
+ {
+ public:
+ enum TListType
+ {
+ EListMain = 0, // Main layout
+ EListMemoryStore, // Memory store (Phone memory etc) layout
+ EListFolder // Folder layout
+ };
+
+ static CFileManagerFileListContainer*
+ CFileManagerFileListContainer::NewL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ const TListType aType,
+ const TInt aEmptyText,
+ const TDesC& aHelpContext );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFileListContainer();
+
+ private: // MCoeControlObserver
+ void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
+
+ private: // From CCoeControl
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType );
+
+ void HandlePointerEventL( const TPointerEvent &aPointerEvent );
+
+ void SizeChanged();
+
+ TInt CountComponentControls() const;
+
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ public: // From CFileManagerContainerBase
+ void SetListEmptyL();
+
+ void RefreshListL( TInt aFocusedIndex );
+
+ CEikTextListBox* CreateListBoxL();
+
+ void UpdateCba();
+
+ TInt ListBoxCurrentItemIndex();
+
+ TInt ListBoxNumberOfItems();
+
+ const CArrayFix< TInt >* ListBoxSelectionIndexes();
+
+ TInt ListBoxSelectionIndexesCount();
+
+ void ListBoxToggleItemL( TInt aIndex );
+
+ TBool ListBoxIsItemSelected( TInt aIndex );
+
+ void ListBoxSetTextL( const TDesC& aText );
+
+ TBool IsSearchFieldVisible() const;
+
+ void EnableSearchFieldL(
+ TBool aEnable, const TDesC& aSearchText = KNullDesC );
+
+ void SetCurrentItemIndexAfterSearch( TInt aIndex );
+
+ void ListBoxSelectItemL( TInt aIndex );
+
+ void ListBoxDeselectItem( TInt aIndex );
+
+ private: // From MCoeFocusObserver
+ void HandleChangeInFocus();
+
+ void HandleDestructionOfFocusedItem();
+
+ private:
+ /**
+ * Standard C++ constructor.
+ */
+ CFileManagerFileListContainer(
+ const TListType aType );
+
+ void ConstructL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ const TInt aEmptyText,
+ const TDesC& aHelpContext );
+
+ TInt SearchFieldToListIndex( TInt aIndex );
+
+ TInt ListToSearchFieldIndex( TInt aIndex );
+
+ void PageScrollL( TBool aUp );
+
+ TKeyResponse OfferSearchKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ private:
+ /**
+ * Custom item drawer, to support the "no-folders-marked" feature.
+ */
+ class CItemDrawer : public CColumnListBoxItemDrawer
+ {
+ public:
+ CItemDrawer(
+ CTextListBoxModel* aTextListBoxModel,
+ const CFont* aFont,
+ CColumnListBoxData* aColumnData,
+ CFileManagerFileListContainer& aContainer );
+ public: // From CColumnListBoxItemDrawer
+ TListItemProperties Properties( TInt aItemIndex ) const;
+ private: // Data
+ CFileManagerFileListContainer& iContainer;
+ };
+
+ /**
+ * Custom listbox, to support the "no-folders-marked" feature.
+ */
+ class CListBox : public CAknSingleGraphicStyleListBox
+ {
+ public:
+ CListBox( CFileManagerFileListContainer& aContainer );
+
+ protected: // From CAknSingleGraphicStyleListBox
+ void CreateItemDrawerL();
+
+ private: // Data
+ CFileManagerFileListContainer& iContainer;
+ };
+
+ private: // Data
+ // Ref: Document of this application
+ CFileManagerDocument* iDocument;
+ // Ref: AppUi of this application
+ CFileManagerAppUi* iAppUi;
+ // List type bits
+ TUint iType;
+ // Indicates if the navigation is supported
+ TBool iRightLeftNaviSupported;
+ // Indicates if dragging is on
+ TBool iDragging;
+ // Stores dragging start point
+ TPoint iDragStartPoint;
+ // Own: Search field
+ CAknSearchField* iSearchField;
+ // Buffer for search text
+ TFileName iSearchText;
+ // Indicates if search field is enabled after refresh
+ TBool iSearchFieldAfterRefresh;
+ // Stores the list index to be restored after search ends
+ TInt iIndexAfterSearch;
+ // Stores search field enabled status
+ TBool iSearchFieldEnabled;
+ // Stores fast scroll disbaled status
+ TBool iOwnFastScrollDisabled;
+ };
+
+#endif // CFILEMANAGERFILELISTCONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerFileSelectionFilter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2002-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: Filters PlatSec dirs from file selection
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFILESELECTIONFILTER_H
+#define CFILEMANAGERFILESELECTIONFILTER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <MAknFileFilter.h>
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+// CLASS DECLARATION
+/**
+ *
+ */
+class CFileManagerFileSelectionFilter : public CBase,
+ public MAknFileFilter
+ {
+ public:
+ CFileManagerFileSelectionFilter( CFileManagerEngine& aEngine );
+
+ public: // From MAknFileFilter
+ TBool Accept( const TDesC& aDriveAndPath, const TEntry& aEntry ) const;
+
+ private: // Data
+ /// Ref: Reference to engine of the application.
+ CFileManagerEngine& iEngine;
+ };
+
+#endif // CFILEMANAGERFILESELECTIONFILTER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerFoldersView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2002-2006 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: View for folder
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFOLDERSVIEW_H
+#define CFILEMANAGERFOLDERSVIEW_H
+
+// INCLUDES
+#include "CFileManagerViewBase.h"
+#include <MFileManagerFolderNaviObserver.h>
+
+// FORWARD DECLARATIONS
+class CAknNavigationControlContainer;
+class CAknNavigationDecorator;
+class CFileManagerFolderNavigationPane;
+class CAknInfoPopupNoteController;
+
+// CLASS DECLARATION
+/**
+ * Folders view of the application.
+ */
+class CFileManagerFoldersView : public CFileManagerViewBase,
+ public MFileManagerFolderNaviObserver
+ {
+ public: // Custom Message IDs
+ /// custom message for opening from results view
+ static const TUid KOpenFromSearchResultsView;
+
+ // For custom message use
+ enum TMessage
+ {
+ EOpenFromSearchResultsView = 1
+ };
+
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor. Leaves created view
+ * to cleanup stack.
+ *
+ * @return Newly constructed view
+ */
+ static CFileManagerFoldersView* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFoldersView();
+
+ public: // New declarations
+
+ /**
+ * Forwards Resource change events to view
+ * @since 2.0
+ * @param aType type of change
+ */
+ void HandleResourceChangeL( TInt aType );
+
+ /**
+ * Forwards DirectoryChange information to active view
+ * @since 2.0
+ */
+ void DirectoryChangedL();
+
+ private: // From CAknView
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * @see CAknView
+ */
+ TKeyResponse OfferKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage);
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ private: // From CFileManagerViewBase
+ /**
+ * @see CFileManagerViewBase
+ */
+ CFileManagerContainerBase* CreateContainerL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ void UpdateCbaL();
+
+ private: // From MFileManagerFolderNaviObserver
+ /**
+ * @see MFileManagerFolderNaviObserver
+ */
+ void HandleFolderNaviEventL( TNaviEvent aEvent, TInt aValue );
+
+ private:
+ /**
+ * Refreshes title to contain name of the
+ * current folder.
+ */
+ void RefreshTitleL();
+
+ /**
+ * Standard C++ constructor.
+ */
+ CFileManagerFoldersView();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Handles backstepping from the current folder.
+ * @since 3.1
+ * @param aBacksteps Number of backsteps to do
+ */
+ void BackstepL( TInt aBacksteps = 1 );
+
+ /**
+ * Gets folder name from specified folder level
+ * @since 3.1
+ * @param aFolderLevel Folder level
+ * @return Folder name
+ */
+ TPtrC FolderName( const TInt aFolderLevel );
+
+ private: // Data
+ /// Ref: Navi pane of the view
+ CAknNavigationControlContainer* iNaviPane;
+ /// Own: Navigation decorator for navi pane
+ CAknNavigationDecorator* iNaviDecorator;
+ /*
+ * Ref: Navi control that draws folders in the navi pane.
+ * Ownership is given to navi pane after creation.
+ */
+ CFileManagerFolderNavigationPane* iNaviControl;
+
+ // Current depth, with this folder view knows when
+ // user has gone up or down in folder tree
+ TInt iFolderDepth;
+
+ // Own: Initial folder depth.
+ // View is closed after stepped back below this level.
+ TInt iInitialFolderDepth;
+
+ // Own: For showing info popups
+ CAknInfoPopupNoteController* iPopupController;
+ // Own: Indicate USB storage was removed
+ TBool usbWrongRemoved;
+
+ };
+
+#endif // CFILEMANAGERFOLDERSVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerMainView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2006-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: Main view
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERMAINVIEW_H
+#define C_FILEMANAGERMAINVIEW_H
+
+
+// INCLUDES
+#include <aknview.h>
+#include "CFileManagerViewBase.h"
+
+
+// CLASS DECLARATION
+/**
+ * This class implements main view of the application.
+ *
+ * @since S60 3.1
+ */
+class CFileManagerMainView : public CFileManagerViewBase
+ {
+
+public: // Constructors and destructor
+ /**
+ * Two-phased constructor.Leaves created view
+ * to cleanup stack.
+ *
+ * @return Newly constructed view
+ */
+ static CFileManagerMainView* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerMainView();
+
+public: // From CFileManagerViewBase
+ /**
+ * @see CFileManagerViewBase
+ */
+ void DirectoryChangedL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ CFileManagerContainerBase* CreateContainerL();
+
+private: // From CAknView
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ /**
+ * @see CAknView
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+private: // From MFileManagerProcessObserver
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ TInt NotifyL( TFileManagerNotify aType, TInt aData, const TDesC& aName );
+
+private: // New functions
+ /**
+ * Filters main menu in aMenuPane.
+ */
+ void MainMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Filters remote drives menu in aMenuPane.
+ */
+ void RemoteDrivesMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Handles memory store open command
+ */
+ void CmdOpenMemoryStoreL();
+
+ /**
+ * Handles eject command
+ */
+ void CmdEjectL();
+
+#ifndef RD_FILE_MANAGER_BACKUP
+ /**
+ * Handles legacy backup command
+ */
+ void CmdBackupL();
+
+ /**
+ * Handles legacy restore command
+ */
+ void CmdRestoreL();
+#endif // RD_FILE_MANAGER_BACKUP
+
+ /**
+ * Handles map remote drive command
+ */
+ void CmdMapRemoteDriveL();
+
+ /**
+ * Handles remote drive settings command
+ */
+ void CmdRemoteDriveSettingsL();
+
+ /**
+ * Handles remote drive delete command
+ */
+ void CmdRemoteDriveDeleteL();
+
+ /**
+ * Filters memory storage menu items.
+ *
+ * @param aMenuPane Menu instance to be filtered.
+ */
+ void MemoryStorageMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Handles memory storage details command.
+ */
+ void CmdMemoryStorageDetailsL();
+
+ /**
+ * Handles drive rename command.
+ */
+ void CmdRenameDriveL();
+
+ /**
+ * Handles drive password set command.
+ */
+ void CmdSetDrivePasswordL();
+
+ /**
+ * Handles drive password change command.
+ */
+ void CmdChangeDrivePasswordL();
+
+ /**
+ * Handles drive password remove command.
+ */
+ void CmdRemoveDrivePasswordL();
+
+ /**
+ * Gets drive at current position.
+ *
+ * @return Drive identifier or KErrNotFound.
+ */
+ TInt DriveAtCurrentPosL();
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerMainView();
+
+ void ConstructL();
+
+ };
+
+#endif // C_FILEMANAGERMAINVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerMemoryStoreView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2006 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: Memory store view
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERMEMORYSTOREVIEW_H
+#define C_FILEMANAGERMEMORYSTOREVIEW_H
+
+
+// INCLUDES
+#include <aknview.h>
+#include "CFileManagerViewBase.h"
+
+
+// CLASS DECLARATION
+/**
+ * This class implements memory store view.
+ *
+ * @since S60 3.1
+ */
+class CFileManagerMemoryStoreView : public CFileManagerViewBase
+ {
+
+public: // Constructors and destructor
+ /**
+ * Two-phased constructor.Leaves created view
+ * to cleanup stack.
+ *
+ * @return Newly constructed view
+ */
+ static CFileManagerMemoryStoreView* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerMemoryStoreView();
+
+public: // From CFileManagerViewBase
+ /**
+ * @see CFileManagerViewBase
+ */
+ void DirectoryChangedL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ CFileManagerContainerBase* CreateContainerL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ void UpdateCbaL();
+
+private: // From CAknView
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+private: // New functions
+ /**
+ * Checks memory store available
+ */
+ TBool DriveAvailableL( TBool aShowRemoteNotConnected );
+
+ /**
+ * Refreshes memory store title
+ */
+ void RefreshTitleL();
+
+ /**
+ * Handles open memory store command
+ */
+ void CmdOpenL();
+
+ /**
+ * Handles back command
+ */
+ void CmdBackL();
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerMemoryStoreView();
+
+private:
+
+ };
+
+#endif // C_FILEMANAGERMEMORYSTOREVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerRestoreView.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2006-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: View for restore settings
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERRESTOREVIEW_H
+#define C_FILEMANAGERRESTOREVIEW_H
+
+
+// INCLUDES
+#include <aknview.h>
+#include "CFileManagerViewBase.h"
+
+
+// CLASS DECLARATION
+/**
+ * This class is used for restore settings view
+ *
+ * @since S60 3.1
+ */
+class CFileManagerRestoreView : public CFileManagerViewBase
+ {
+
+public: // Custom Message IDs
+ // Custom message for deleting backups
+ static const TUid KDeleteBackups;
+
+ // For custom messages
+ enum TMessage
+ {
+ EDeleteBackups = 1
+ };
+
+public: // Constructors and destructor
+ /**
+ * Two-phased constructor.Leaves created view
+ * to cleanup stack.
+ *
+ * @return Newly constructed view
+ */
+ static CFileManagerRestoreView* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerRestoreView();
+
+public: // From CFileManagerViewBase
+ /**
+ * @see CFileManagerViewBase
+ */
+ void DirectoryChangedL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ CFileManagerContainerBase* CreateContainerL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ void NotifyForegroundStatusChange( TBool aForeground );
+
+ /**
+ * Updates cba
+ */
+ virtual void UpdateCbaL();
+
+private: // From CAknView
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+public: // From MFileManagerProcessObserver
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void ProcessFinishedL( TInt aError, const TDesC& aName = KNullDesC );
+
+private: // New functions
+ /**
+ * Handles ok command
+ */
+ void CmdOkL();
+
+ /**
+ * Handles cancel command
+ */
+ void CmdCancelL();
+
+ /**
+ * Handles select command
+ */
+ void CmdSelectL();
+
+ /**
+ * Handles check mark command
+ */
+ void CmdCheckMarkL();
+
+ /**
+ * Refreshes all settings
+ */
+ void RefreshSettingsL();
+
+ /**
+ * Restores list selection after refresh
+ */
+ void RestoreSelectionL();
+
+ /**
+ * Updates cba according to list selection
+ */
+ void UpdateCbaFromSelectionL();
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerRestoreView();
+
+private: // Data
+ // Indicates if view is started into delete backup mode
+ TBool iDeleteBackups;
+
+ /**
+ * For storing list selection during refresh
+ */
+ TUint64 iSelection;
+
+ };
+
+#endif // C_FILEMANAGERRESTOREVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerSchBackupHandler.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2006 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: Handler for scheduled backup
+*
+*/
+
+
+#ifndef C_FILEMANAGERSCHBACKUPHANDLER_H
+#define C_FILEMANAGERSCHBACKUPHANDLER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <MFileManagerGlobalDlgObserver.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+class CFileManagerGlobalDlg;
+class MFileManagerSchBackupObserver;
+class CRepository;
+
+
+// CLASS DECLARATION
+/**
+ * This class handles scheduled backup
+ *
+ * @since S60 3.1
+ */
+class CFileManagerSchBackupHandler :
+ public CBase,
+ public MFileManagerGlobalDlgObserver
+ {
+
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerSchBackupHandler* NewL(
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerSchBackupHandler();
+
+ /**
+ * Starts backup with confirm note.
+ */
+ void StartBackupWithConfirm();
+
+ /**
+ * Sets backup observer
+ * @param aObserver Pointer to observer or NULL.
+ * Ownership is not transferred.
+ */
+ void SetObserver(
+ MFileManagerSchBackupObserver* aObserver );
+
+ /**
+ * Informs process finished
+ * @param aError System wide error code
+ * @param aName Error related descriptor
+ */
+ void ProcessFinishedL( TInt aError, const TDesC& aName );
+
+ /**
+ * Informs process advance
+ * @param aValue Current progress value
+ */
+ void ProcessAdvanceL( TInt aValue );
+
+ /**
+ * Informs process started
+ * @param aFinalValue Final progress value
+ */
+ void ProcessStartedL( TInt aFinalValue );
+
+ /**
+ * Cancels scheduled backup launcher
+ */
+ void CancelBackupStarter();
+
+private: // From MFileManagerGlobalDialogObserver
+ /**
+ * @see MFileManagerGlobalDialogObserver
+ */
+ void HandleGlobalDlgResult(
+ TInt aDialogType,
+ TInt aDialogResult );
+
+private:
+ CFileManagerSchBackupHandler(
+ CFileManagerEngine& aEngine );
+
+ void ConstructL();
+
+ void StartBackupWithConfirmL();
+
+ void StartBackupL();
+
+ void StartBackup();
+
+ void InformObserver( const TInt aValue );
+
+ TBool IsPowerSavingModeOnL();
+
+ TBool IsTargetDriveAvailableL();
+
+private: // Data
+ /**
+ * Reference to file manager engine
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * For global dialog handling
+ * Own.
+ */
+ CFileManagerGlobalDlg* iGlobalDlg;
+
+ /**
+ * Pointer to scheduled backup observer
+ * Not own.
+ */
+ MFileManagerSchBackupObserver* iObserver;
+
+ /**
+ * To indicate is backup ongoing
+ */
+ TBool iBackupOngoing;
+
+ /**
+ * Pointer to CenRep
+ * Own.
+ */
+ CRepository* iCenRep;
+ };
+
+#endif // C_FILEMANAGERSCHBACKUPHANDLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerSettingListContainer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2006 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: Setting list container in file manager
+*
+*/
+
+
+
+#ifndef CFILEMANAGERSETTINGLISTCONTAINER_H
+#define CFILEMANAGERSETTINGLISTCONTAINER_H
+
+// INCLUDES
+#include "CFileManagerContainerBase.h"
+
+
+// CLASS DECLARATION
+/**
+ * Container for backup view.
+ */
+class CFileManagerSettingListContainer : public CFileManagerContainerBase
+ {
+ public: // Constructors and destructor
+ enum TListType
+ {
+ EListBackup = 0, // Backup settings layout
+ EListRestore // Restore selection layout
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerSettingListContainer* NewL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ const TListType aType,
+ MDesCArray* aArray,
+ const TDesC& aHelpContext = KNullDesC );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerSettingListContainer();
+
+ private: // From CFileManagerContainerBase
+ CEikTextListBox* CreateListBoxL();
+
+ TKeyResponse OfferKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ void HandleControlEventL(
+ CCoeControl* aControl, TCoeEvent aEventType );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerSettingListContainer( const TListType aType );
+
+ void ConstructL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ MDesCArray* aArray,
+ const TDesC& aHelpContext );
+
+ CEikTextListBox* CreateBackupListBoxL();
+
+ CEikTextListBox* CreateRestoreListBoxL();
+
+ private: // Data
+ // Setting list type
+ TListType iType;
+
+ };
+
+#endif // CFILEMANAGERSETTINGLISTCONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerStringCache.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2002-2006 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 caches strings
+*
+*/
+
+
+
+#ifndef CFILEMANAGERSTRINGCACHE_H
+#define CFILEMANAGERSTRINGCACHE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include <badesca.h>
+
+// CONSTANTS
+const TInt KNumStringCacheItems = 16;
+const TInt KFormatStringLen = KMaxFileName * 2;
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+class CFileManagerIconArray;
+
+
+// CLASS DECLARATION
+/**
+* This class caches strings
+*
+* @since 2.7
+*/
+class CFileManagerStringCache : public CBase, public MDesCArray
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerStringCache* NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerIconArray& aIconArray );
+
+ void Clear() const;
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerStringCache();
+
+ /**
+ * Gets last error
+ */
+ TInt LastError() const;
+
+ public: // From MDesCArray
+
+ TInt MdcaCount() const;
+ TPtrC MdcaPoint(TInt aIndex) const;
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerStringCache(
+ CFileManagerEngine& aEngine,
+ CFileManagerIconArray& aIconArray );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Sets last error
+ */
+ void SetError( TInt aError ) const;
+
+ private:
+
+ /**
+ * Searches index from cache and return cache index
+ * so it can be retrieve with FormattedString
+ */
+ TInt FormattedStringFound( TInt aIndex ) const;
+
+ /**
+ * Retrieve string from cache with FormattedStringFound()
+ * given index
+ */
+ TPtrC FormattedString( TInt aIndex ) const;
+
+ /**
+ * Stores string in iFormatted string with given
+ * listbox index. Checks the fartest position
+ * and stores there.
+ */
+ void StoreFormattedStringL( TInt aIndex ) const;
+
+ /**
+ * Clears cache item
+ * given index
+ */
+ void Clear( TInt aIndex ) const;
+
+ private: // Data
+ class TCacheItem
+ {
+ public:
+ HBufC* iString;
+ TInt iIndex;
+ };
+
+ // Ref: To get item details
+ CFileManagerEngine& iEngine;
+
+ // Ref: To resolve icons
+ CFileManagerIconArray& iIconArray;
+
+ // Own: array of formatted listbox items
+ TFixedArray< TCacheItem, KNumStringCacheItems > mutable
+ iFormattedItems;
+
+ // Own: String buffer for formatting string
+ TBuf< KFormatStringLen > mutable iFormatString;
+
+ // Own: Last error
+ TInt mutable iError;
+
+ };
+
+#endif // CFILEMANAGERSTRINGCACHE_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerTaskScheduler.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2006 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: Wraps task scheduler functionality
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERTASKSCHEDULER_H
+#define C_FILEMANAGERTASKSCHEDULER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <csch_cli.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+
+// CLASS DECLARATION
+/**
+ * This class wraps task scheduler functionality
+ *
+ * @since S60 3.1
+ */
+class CFileManagerTaskScheduler : public CBase
+ {
+
+public: // New functions
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerTaskScheduler* NewL(
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerTaskScheduler();
+
+ /**
+ * Enables and disables backup schedule
+ */
+ void EnableBackupScheduleL( const TBool aEnable );
+
+private:
+ CFileManagerTaskScheduler(
+ CFileManagerEngine& aEngine );
+
+ void ConstructL();
+
+ void CreateScheduleL();
+
+ void DeleteScheduleL();
+
+private: // Data
+ /**
+ * Reference to file manager engine
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * Handle to task scheduler
+ */
+ RScheduler iScheduler;
+
+ /**
+ * Handle to schedule
+ */
+ TInt iScheduleHandle;
+
+ };
+
+#endif // C_FILEMANAGERBACKUPSCHEDULER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/CFileManagerViewBase.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,705 @@
+/*
+* Copyright (c) 2002-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: Base class for all file manager views
+*
+*/
+
+
+
+#ifndef CFILEMANAGERVIEWBASE_H
+#define CFILEMANAGERVIEWBASE_H
+
+
+// INCLUDES
+#include <aknview.h>
+#include <AknServerApp.h>
+#include <AknWaitDialog.h>
+#include <apparc.h>
+#include <MFileManagerProcessObserver.h>
+#include <TFileManagerDriveInfo.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerContainerBase;
+class CFileManagerEngine;
+class CFileManagerActiveExecute;
+class CEikMenuBar;
+class CFileManagerActiveDelete;
+class CFileManagerItemProperties;
+class CAknQueryDialog;
+class CAknWaitNoteWrapper;
+class CFileManagerFeatureManager;
+class MAknServerAppExitObserver;
+
+
+// Defines maximum media password length in Unicode
+const TUint KFmgrMaxMediaPassword = KMaxMediaPassword / 2; // Because of Unicode
+// CLASS DECLARATION
+/**
+ * Base class for all views in File Manager applicaiton
+ */
+class CFileManagerViewBase : public CAknView,
+ public MProgressDialogCallback,
+ public MFileManagerProcessObserver,
+ public MAknServerAppExitObserver
+ {
+ protected:
+ /**
+ * Return value enumeration for CmdOpenL to indicate what
+ * kind of item was opened or if there was an error during
+ * opening.
+ */
+ enum TFileManagerOpenResult
+ {
+ EFolderOpened,
+ EFileOpened,
+ EOpenError
+ };
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerViewBase* NewLC();
+
+ /**
+ * Timer calls this in order to update the progress bar.
+ * @param aPtr pointer to object where is function to be call
+ * when timer expires.
+ * @return positive number if timer needs to be activated again
+ * 0 if timer is not needed any more.
+ */
+ static TInt UpdateProgressBar( TAny* aPtr );
+
+ /**
+ * Timer calls this in order to start refresh progress dialog.
+ * @param aPtr pointer to object where is function to be call
+ * when timer expires.
+ * @return positive number if timer needs to be activated again
+ * 0 if timer is not needed any more.
+ */
+ static TInt RefreshProgressDelayedStart( TAny* aPtr );
+
+ /**
+ * Stores current index
+ * @return ETrue if storing successfull
+ * EFalse if storing not succesfull
+ */
+ TBool StoreIndex();
+
+ /**
+ * Nulls everything which is related to progress bar
+ */
+ void ClearProgressBarL();
+
+ /**
+ * @return Current process in app
+ */
+ MFileManagerProcessObserver::TFileManagerProcess CurrentProcess();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFileManagerViewBase();
+
+ public: // From MProgressDialogCallback
+ void DialogDismissedL( TInt aButtonId );
+
+ public://MAknServerAppExitObserver
+ /**
+ * @see MAknServerAppExitObserver
+ */
+ void HandleServerAppExit( TInt aReason );
+
+ public: // From MFileManagerProcessObserver
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void ProcessFinishedL( TInt aError, const TDesC& aName );
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void ProcessAdvanceL( TInt aValue );
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void ProcessStartedL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess,
+ TInt aFinalValue );
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ TBool ProcessQueryOverWriteL(
+ const TDesC& aOldName,
+ TDes& aNewName,
+ TFileManagerProcess aProcess );
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ TBool ProcessQueryRenameL(
+ const TDesC& aOldName,
+ TDes& aNewName,
+ TFileManagerProcess aProcess );
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void RefreshStartedL();
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void RefreshStoppedL();
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void ShowWaitDialogL( MAknBackgroundProcess& aProcess);
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ void Error( TInt aError );
+
+ /**
+ * @see MFileManagerProcessObserver
+ */
+ TInt NotifyL( TFileManagerNotify aType, TInt aData, const TDesC& aName );
+
+ public:
+
+ /*
+ * When view needs refresh, this is called.
+ */
+ virtual void DirectoryChangedL() = 0;
+
+ /*
+ * Checks if refresh is in progress
+ */
+ TBool IsRefreshInProgress();
+
+ /**
+ * Handles errors caused by file or folder deletion outside
+ * file manager while file manager is in foreground.
+ * @param aError Error code.
+ * @return ETrue if error was handled. Otherwise EFalse.
+ */
+ TBool HandleFileNotFoundL( TInt aError );
+
+ /**
+ * Handles screen layout changes
+ */
+ virtual void ScreenDeviceChanged();
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ void StartSchBackupL();
+
+ void SchBackupFinishedL();
+#endif // RD_FILE_MANAGER_BACKUP
+
+ /**
+ * Updates cba
+ */
+ virtual void UpdateCbaL();
+
+ /**
+ * Notifies foreground status change
+ */
+ virtual void NotifyForegroundStatusChange( TBool aForeground );
+
+ protected: // From CAknView
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage);
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * @see CAknView
+ */
+ void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+
+ /**
+ * @see CAknView
+ */
+ void ProcessCommandL( TInt aCommand );
+
+ protected: // New methods
+
+ /**
+ * Returns a container class that is derived from
+ * CFileManagerContainerBase. This is provided for derived
+ * classes to create their own type of containers.
+ * @return Newly created container.
+ */
+ virtual CFileManagerContainerBase* CreateContainerL() = 0;
+
+ /**
+ * Executes open command. Opens currently selected item in
+ * list.
+ * @return Code that tells if opened item was folder or
+ * file. EOpenError is returned if there was an
+ * error during open.
+ */
+ TFileManagerOpenResult CmdOpenL();
+
+ /**
+ * Executes delete command to delete current item
+ * or if there are marked items, all of them are deleted.
+ */
+ void CmdDeleteL();
+
+ /**
+ * Marks all markable items in list.
+ */
+ void CmdMarkAllL();
+
+ /**
+ * Unmarks all marked items in list.
+ */
+ void CmdUnmarkAllL();
+
+ /**
+ * Changes mark status of currently focused item.
+ */
+ void CmdToggleMarkL();
+
+ /**
+ * Creates new folder to currently active directory.
+ */
+ void CmdNewFolderL();
+
+ /**
+ * Renames currently active item.
+ */
+ void CmdRenameL();
+
+ /**
+ * Moves current item to folder that is queried using
+ * Common File Dialogs. If there are marked items, all of
+ * them are moved.
+ */
+ void CmdMoveToFolderL();
+
+ /**
+ * Copies current item to folder that is queried using
+ * Common File Dialogs. If there are marked items, all of
+ * them are copied.
+ */
+ void CmdCopyToFolderL();
+
+ /**
+ * Shows info popup dialog that contains information
+ * about currently active item.
+ */
+ void CmdViewInfoL();
+
+ /**
+ * Shows memory status popup dialog that contains
+ * information about current memory status of the
+ * active memory.
+ */
+ void CmdMemoryStateL();
+
+ /**
+ * Executes find command.
+ */
+ void CmdFindL();
+
+ /**
+ * Receives file via infrared to currently active
+ * folder.
+ */
+ void CmdReceiveViaIRL();
+
+ /**
+ * Runs move or copy operation. Parameter aToFolder is the destination
+ * of operation.
+ * @param aOperation Operation to execute.
+ * @param aToFolder Destination folder of the operation.
+ */
+ void RunOperationL(
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ const TDesC& aToFolder );
+
+ /**
+ * Gets reference to drive info.
+ */
+ TFileManagerDriveInfo& DriveInfo() const;
+
+ /**
+ * Refreshes drive info.
+ */
+ void RefreshDriveInfoL();
+
+ void StartProcessL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess,
+ TInt aValue = KErrNotFound );
+
+ void CmdUnlockDriveL();
+
+ void CmdFormatDriveL();
+
+// void CmdRenameDriveL();
+//
+// void CmdSetDrivePasswordL();
+//
+// void CmdChangeDrivePasswordL();
+//
+// void CmdRemoveDrivePasswordL();
+//
+// void CmdMemoryCardDetailsL();
+
+ TInt UpdatePassword(
+ TInt aDrive, const TDesC& aOldPwd, const TDesC& aPwd );
+
+ TInt UnlockRemovePasswordL( TInt aDrive, TBool aRemove );
+
+ /**
+ * Sets remote drive connection state.
+ *
+ * @param aState ETrue to connect, EFalse to disconnect.
+ */
+ void SetRemoteDriveConnectionStateL( TBool aState );
+
+ /**
+ * Opens remote drive setting view.
+ *
+ * @param aDriveName Name of the remote drive.
+ */
+ void OpenRemoteDriveSettingsL(
+ const TDesC& aDriveName = KNullDesC );
+
+ /**
+ * Checks if item is on disconnected remote drive.
+ *
+ * @param aProp Item properties.
+ * @return ETrue if item is on disconnect drive. Otherwise EFalse.
+ */
+ TBool IsDisconnectedRemoteDrive(
+ CFileManagerItemProperties& aProp );
+
+ /**
+ * Performs remote drive menu filtering.
+ *
+ * @param aMenuPane Menu instance to be filtered.
+ */
+ void RemoteDriveCommonFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Renames current drive.
+ *
+ * @param aForceDefaultName ETrue to offer the default name by force.
+ */
+ void RenameDriveL( TBool aForceDefaultName );
+
+ /**
+ * Handles refresh directory command.
+ */
+ void CmdRefreshDirectoryL();
+
+ /**
+ * Shows eject query.
+ */
+ void ShowEjectQueryL();
+
+ /**
+ * Launches progress dialog with given final and initial values.
+ * aOperation parameter is used to determine what resource
+ * should be used when displaying dialog.
+ * @param aFinalValue Final value of the created progress dialog.
+ * @param aInitialValue Initial value of the created progress dialog.
+ * @param aOperation Operation that this progress dialog represents
+ * @param aImmediatelyVisible Dialog is immediately visible if ETrue
+ */
+ void LaunchProgressDialogL(
+ TInt64 aFinalValue,
+ TInt64 aInitialValue,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ TBool aImmediatelyVisible = EFalse );
+
+ TBool AskPathL( TDes& aPath, TInt aTextId );
+
+ void SetCbaMskTextL( const TInt aTextId );
+
+ void UpdateCommonCbaL();
+
+ TBool IsDriveAvailable( const TDesC& aPath ) const;
+
+ TBool IsDriveAvailable( const TInt aDrive ) const;
+
+ TBool DriveReadOnlyMmcL( const TInt aDrive ) const;
+
+ TBool DriveReadOnlyMmcL( const TDesC& aFullPath ) const;
+
+ TBool CheckPhoneState() const;
+
+ TBool StopProgressDialogAndStoreValues();
+
+ void CmdSortL( TInt aCommand );
+
+ CFileManagerFeatureManager& FeatureManager() const;
+
+ void ShowDiskSpaceErrorL( const TDesC& aFolder );
+
+ /**
+ * Sets given media password string to empty and zero fills it.
+ *
+ * @param aPwd Media password to clean up.
+ */
+ static void EmptyPwd( TDes& aPwd );
+
+ /**
+ * Converts chars to media password.
+ *
+ * @param aWord Password to convert in Unicode.
+ * @param aConverted Converted password.
+ */
+ static void ConvertCharsToPwd( const TDesC& aWord, TDes8& aConverted );
+
+ /**
+ * Gets drive information at current position.
+ *
+ * @param aInfo Stores drive information.
+ * @return Drive identifier or KErrNotFound.
+ */
+ TInt DriveInfoAtCurrentPosL( TFileManagerDriveInfo& aInfo );
+
+ protected:
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerViewBase();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ virtual void ConstructL( TInt aResId );
+
+ private: // New methods
+ /**
+ * Constructs an array that contains the indices
+ * of marked items.
+ * @return Array of marked items.
+ */
+ CArrayFixFlat<TInt>* MarkedArrayLC();
+
+ /**
+ * Gets paths of marked sendable files
+ * @param Reference to get size of the sendable files
+ * @return Array of sendable file items
+ */
+ CArrayFixFlat<TInt>* GetSendFilesLC( TInt& aSize );
+
+ /**
+ * Filters Edit menu in aMenuPane.
+ */
+ void MarkMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Creates a send ui query
+ */
+ void SendUiQueryL();
+
+ /**
+ * Timer calls this for updating the progress bar.
+ */
+ void DoUpdateProgressBar();
+
+ /**
+ * Returns true if all or any focused item or marked items are protected.
+ *
+ * The 'all' or 'any' mode of operation is controlled by the aMode parameter.
+ *
+ * @param aMode controls the 'all' or 'any' mode. ETrue = 'all'.
+ * @return ETrue all chosen items are protected
+ * EFalse at least one of the items are not protected
+ */
+ TBool AreChosenFilesProtectedL( TBool aMode );
+
+ /**
+ * Creates and displayes the Context sensitive menu
+ */
+ void ShowContextSensitiveMenuL();
+
+ /**
+ * Adds SendUi option to option menu
+ */
+ void AddSendOptionL(
+ CEikMenuPane& aMenuPane,
+ const TInt aCommandIdAfter );
+
+ /**
+ * Check is delete condition ok for given item
+ */
+ TBool DeleteStatusNotOkL(
+ CFileManagerItemProperties& aProp,
+ TInt aSelectionCount ) const;
+
+ /**
+ * Deletes focused or marked items from current listbox
+ */
+ void DeleteItemsL( TInt aIndex );
+
+ /**
+ * Checks if given index has InfoUrl.
+ * @param aIndex given index
+ * @return ETrue if given index has InfoUrl,
+ * EFalse otherwise.
+ */
+ TBool HasInfoUrlL( TInt aIndex );
+
+ /**
+ * Opens InfoUrl of given index in browser.
+ * @param aIndex given index
+ */
+ void OpenInfoUrlL( TInt aIndex );
+
+ /**
+ * Checks file rights and shows note if expired.
+ * @param aFullPath File to check
+ * @return ETrue if rights are valid
+ * EFalse if rights are expired
+ */
+ TBool CheckFileRightsAndInformIfExpiredL( const TDesC& aFullPath );
+
+ /**
+ * Filters memory store menu in aMenuPane.
+ */
+ void MemoryStoreMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Filters organise menu in aMenuPane.
+ */
+ void OrganiseMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Filters details menu in aMenuPane.
+ */
+ void DetailsMenuFilteringL( CEikMenuPane& aMenuPane );
+//
+// /**
+// * Filters memory card menu in aMenuPane.
+// */
+// void MemoryCardMenuFilteringL( CEikMenuPane& aMenuPane );
+//
+// /**
+// * Filters memory card password menu in aMenuPane.
+// */
+// void MemoryCardPasswordMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Filters context sensitive menu in aMenuPane.
+ */
+ void ContextSensitiveMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ /**
+ * Launches progress bar
+ */
+ void LaunchProgressBarL(
+ TInt aDialogId,
+ TInt aTextId,
+ TInt64 aFinalValue,
+ TInt64 aInitialValue,
+ TBool aPeriodic,
+ TBool aImmediatelyVisible );
+
+ /**
+ * Starts refresh progress dialog
+ */
+ void RefreshProgressDelayedStartL();
+
+ void CheckPostponedDirectoryRefresh();
+
+ void DenyDirectoryRefresh( TBool aDeny );
+
+ void SortMenuFilteringL( CEikMenuPane& aMenuPane );
+
+ void DoProcessFinishedL( TInt aError, const TDesC& aName );
+
+ void DoLaunchProgressDialogAsync();
+
+ static TInt LaunchProgressDialogAsync( TAny* aPtr );
+
+
+ protected: // Data
+ /// Own: Container that this view handles.
+ CFileManagerContainerBase* iContainer;
+ /// Ref: Reference to File Manager engine.
+ CFileManagerEngine& iEngine;
+ /// Own: Progress dialog for iActiveExec
+ CAknProgressDialog* iProgressDialog;
+ /// Own: Progress dialog for iActiveExec
+ CAknProgressDialog* iProgressDialogRefresh;
+ /// Ref: Progress info of iProgressDialog
+ CEikProgressInfo* iProgressInfo;
+ /// Own: Active object that executes copy and move operations
+ CFileManagerActiveExecute* iActiveExec;
+ /// Own: Array of marked items in listbox
+ CArrayFixFlat<TInt>* iMarkedArray;
+ /// Currently active process
+ MFileManagerProcessObserver::TFileManagerProcess iActiveProcess;
+ /// Own: Popup menu for showing context sensitive menu
+ CEikMenuBar* iPopupMenu;
+ /// Own: This is used to update the progress bar
+ CPeriodic* iPeriodic;
+ // This is for progress bar
+ TInt64 iTotalTransferredBytes;
+ // This is for progress bar(in order to support over 2Gb files)
+ // Own: for wait note wrapper, delete items
+ CFileManagerActiveDelete* iActiveDelete;
+ // current listbox index
+ TInt iIndex;
+ // Own: Timer object to start refresh progress dialog
+ CPeriodic* iRefreshProgressDelayedStart;
+ // Own: Indicates that scheduled backup is pending
+ TBool iSchBackupPending;
+ // Own: Eject query dialog
+ CAknQueryDialog* iEjectQueryDialog;
+ // Own: Indicates if eject has been done
+ TBool iEjectDone;
+ // Own: Stores current progress value
+ TInt64 iProgressCurrentValue;
+ // Own: Stores final progress value
+ TInt64 iProgressFinalValue;
+ // Own: Denies directory refresh during query until selected operation gets started
+ TBool iDirectoryRefreshDenied;
+ // Own: Indicates postponed directory refresh
+ TBool iDirectoryRefreshPostponed;
+ // Own: For wait note stepping
+ CAknWaitNoteWrapper* iWaitNoteWrapper;
+ // Own: Indicates if there's a SendUi popup query dialog
+ TBool iSendUiPopupOpened;
+
+ };
+
+#endif // CFILEMANAGERVIEWBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/Cfilemanagersearchresultsview.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002-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: View for search results
+*
+*/
+
+
+#ifndef CFILEMANAGERSEARCHRESULTSVIEW_H
+#define CFILEMANAGERSEARCHRESULTSVIEW_H
+
+// INCLUDES
+#include "CFileManagerViewBase.h"
+
+// CONSTANTS
+_LIT8( KFileManagerSearchViewRefreshMsg, "FmgrRefresh" );
+
+// FORWARD DECLARATIONS
+class CFileManagerSearchFileArray;
+class CAknNavigationControlContainer;
+class CAknNavigationDecorator;
+// CLASS DECLARATION
+/**
+ * Search results view of the application.
+ */
+class CFileManagerSearchResultsView : public CFileManagerViewBase
+ {
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor.Leaves created view
+ * to cleanup stack.
+ *
+ * @return Newly constructed view
+ */
+ static CFileManagerSearchResultsView* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerSearchResultsView();
+
+ public:
+
+ /**
+ * Forwards DirectoryChange information to active view
+ * @since 2.0
+ */
+ void DirectoryChangedL();
+
+ private: // From CAknView
+ /**
+ * @see CAknView
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * @see CAknView
+ */
+ void DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @see CAknView
+ */
+ void DoDeactivate();
+
+ /**
+ * @see CAknView
+ */
+ TUid Id() const;
+
+ private: // From CFileManagerViewBase
+ /**
+ * @see CFileManagerViewBase
+ */
+ CFileManagerContainerBase* CreateContainerL();
+
+ /**
+ * @see CFileManagerViewBase
+ */
+ void UpdateCbaL();
+
+ private:
+ /**
+ * Standard C++ constructor.
+ */
+ CFileManagerSearchResultsView();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ void CmdBackL();
+
+ void RefreshTitleL();
+
+ private: // Data
+ /// Ref: Navi pane of the view
+ CAknNavigationControlContainer* iNaviPane;
+
+ /// Ref: Pointer to empty navidecorator, needed for popping up correct decorator
+ CAknNavigationDecorator* iNaviDecorator;
+
+ };
+
+#endif // CFILEMANAGERSEARCHRESULTSVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/FileManager.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2002-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: Resource headers for project FileManager
+*
+*/
+
+
+#ifndef FILEMANAGER_HRH
+#define FILEMANAGER_HRH
+
+/**
+ * View IDs of File Manager
+ *
+ */
+enum TFileManagerViewIds
+ {
+ EFileManagerMainViewId = 1,
+ EFileManagerMemoryStoreViewId,
+ EFileManagerFoldersViewId,
+ EFileManagerSearchResultsViewId,
+ EFileManagerBackupViewId,
+ EFileManagerRestoreViewId
+ };
+
+/**
+ * Command IDs of FileManager
+ */
+enum TFileManagerCommands
+ {
+ EFileManagerOpen = 1,
+ EFileManagerSend,
+ EFileManagerDelete,
+ EFileManagerMoveToFolder,
+ EFileManagerCopyToFolder,
+ EFileManagerNewFolder,
+ EFileManagerMark,
+ EFileManagerRename,
+ EFileManagerFindFile,
+ EFileManagerReceiveViaIR,
+ EFileManagerViewInfo,
+ EFileManagerMemoryState,
+ EFileManagerFileDetails,
+ EFileManagerFolderDetails,
+ // Mark / Unmark subcommands
+ EFileManagerMarkOne,
+ EFileManagerUnmarkOne,
+ EFileManagerToggleMark,
+ EFileManagerMarkAll,
+ EFileManagerUnmarkAll,
+ EFileManagerCheckMark,
+ // Selection key
+ EFileManagerSelectionKey,
+ EFileManagerMoreInfoOnline,
+ EFileManagerBackup,
+ EFileManagerRestore,
+ EFileManagerEject,
+ EFileManagerDetails,
+ EFileManagerMemoryCardDetails,
+ EFileManagerOrganise,
+ EFileManagerConnectRemoveDrive,
+ EFileManagerDisconnectRemoveDrive,
+ EFileManagerRefreshRemoteDrive,
+ EFileManagerRemoveDrives, // Remove drives subcommands
+ EFileManagerRemoveDrivesSettings,
+ EFileManagerRemoveDrivesMapDrive,
+ EFileManagerRemoveDrivesDelete,
+ EFileManagerMemoryCard, // Memory card subcommands
+ EFileManagerMemoryCardName,
+ EFileManagerMemoryCardRename,
+ EFileManagerMemoryCardFormat,
+ EFileManagerMemoryCardPassword, // Memory card password subcommands
+ EFileManagerMemoryCardPasswordSet,
+ EFileManagerMemoryCardPasswordChange,
+ EFileManagerMemoryCardPasswordRemove,
+ EFileManagerUnlockMemoryCard,
+ EFileManagerFormatMassStorage,
+ EFileManagerSort,
+ EFileManagerSortByName,
+ EFileManagerSortByType,
+ EFileManagerSortMostRecentFirst,
+ EFileManagerSortLargestFirst,
+ EFileManagerSortByMatch,
+ EFileManagerSearchSort,
+ EFileManagerMemoryStorage, // Memory storage subcommands
+ EFileManagerMemoryStorageDetails,
+ EFileManagerMemoryStorageName,
+ EFileManagerMemoryStorageRename,
+ EFileManagerMemoryStorageSetPassword,
+ EFileManagerMemoryStorageChangePassword,
+ EFileManagerMemoryStorageRemovePassword,
+ EFileManagerMemoryStorageFormat,
+ EFileManagerMemoryStorageUnlock,
+ EFileManagerDeleteBackup
+ };
+
+#endif // FILEMANAGER_HRH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/inc/MFileManagerSchBackupObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2006 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: Scheduled backup result observer
+*
+*/
+
+
+
+#ifndef M_FILEMANAGERSCHBACKUPOBSERVER_H
+#define M_FILEMANAGERSCHBACKUPOBSERVER_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+/**
+ * This class observes global scheduled backup notifications
+ *
+ * @since S60 3.1
+ */
+class MFileManagerSchBackupObserver
+ {
+
+public:
+ /**
+ * Handles scheduled backup finished notification
+ *
+ * @since S60 3.1
+ * @param aError Finished backup status
+ */
+ virtual void SchBackupFinishedL( TInt aError ) = 0;
+
+ };
+
+#endif // M_FILEMANAGERSCHBACKUPOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerAppUi.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1301 @@
+/*
+* Copyright (c) 2002-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: File Manager application UI class.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <akntitle.h> // CAknTitlePane
+#include <aknnavi.h> // CAknNavigationControlContainer
+#include <aknnavide.h> // CAknNavigationDecorator
+#include <sendui.h> // CSendAppUi
+#include <sendnorm.rsg>
+#include <avkon.rsg>
+#include <barsread.h>
+#include <hlplch.h> // HlpLauncher
+#include <eikapp.h>
+#include <AknDef.h> // For layout change event definitions
+#include <utf.h>
+#include <StringLoader.h>
+#include <AknsUtils.h>
+#include <centralrepository.h>
+#include <AiwCommon.h>
+#include <bautils.h>
+#include <pathinfo.h>
+#include <driveinfo.h>
+#include <CFileManagerEngine.h>
+#include <CFileManagerIRReceiver.h>
+#include <FileManager.rsg>
+#include <FileManagerView.rsg>
+#include <FileManagerDebug.h>
+#include <FileManagerUID.h>
+#include <CFileManagerFeatureManager.h>
+#include <CFileManagerUtils.h>
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "CFileManagerMainView.h"
+#include "CFileManagerMemoryStoreView.h"
+#ifdef RD_FILE_MANAGER_BACKUP
+ #include <FileManagerSchDefinitions.h>
+ #include "CFileManagerBackupView.h"
+ #include "CFileManagerRestoreView.h"
+ #include "CFileManagerTaskScheduler.h"
+ #include "CFileManagerSchBackupHandler.h"
+#endif // RD_FILE_MANAGER_BACKUP
+#include "CFileManagerFoldersView.h"
+#include "Cfilemanagersearchresultsview.h"
+#include "CFileManagerIconArray.h"
+#include "FileManager.hrh"
+
+
+// CONSTANTS
+const TUid CFileManagerAppUi::KFileManagerMainViewId =
+ { EFileManagerMainViewId };
+const TUid CFileManagerAppUi::KFileManagerMemoryStoreViewId =
+ { EFileManagerMemoryStoreViewId };
+const TUid CFileManagerAppUi::KFileManagerFoldersViewId =
+ { EFileManagerFoldersViewId };
+const TUid CFileManagerAppUi::KFileManagerSearchResultsViewId =
+ { EFileManagerSearchResultsViewId };
+const TUid CFileManagerAppUi::KFileManagerBackupViewId =
+ { EFileManagerBackupViewId };
+const TUid CFileManagerAppUi::KFileManagerRestoreViewId =
+ { EFileManagerRestoreViewId };
+
+const TUid KUidFileManager = { KFileManagerUID3 };
+const TUid KUidGsRsfwPlugin = { 0x101F9778 };
+const TUid KUidGsRsFwSettingsViewId = { 11 };
+
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// ProcessExists
+// ---------------------------------------------------------------------------
+//
+static TBool 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;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::CFileManagerAppUi
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerAppUi::CFileManagerAppUi() :
+ iInitialFolderLevel( KErrNotFound )
+ {
+ FUNC_LOG
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::~CFileManagerAppUi
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerAppUi::~CFileManagerAppUi()
+ {
+ FUNC_LOG
+
+ iCoeEnv->RemoveForegroundObserver( *this );
+ delete iIRReceiver;
+ delete iIRDeleteCB;
+ delete iSendUi;
+#ifdef RD_FILE_MANAGER_BACKUP
+ delete iTaskScheduler;
+ delete iSchBackupHandler;
+#endif // RD_FILE_MANAGER_BACKUP
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ engine.SetObserver( NULL );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ConstructL()
+ {
+ FUNC_LOG
+
+ // Construct only must have stuff required for app start here.
+ // Other stuff is constructed later to decrease app start time.
+ INFO_LOG( "CFileManagerAppUi::ConstructL()-BaseConstructL" )
+ BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
+
+ INFO_LOG( "CFileManagerAppUi::ConstructL()-Setup panes" )
+ CEikStatusPane* sp = StatusPane();
+ iTitlePane = static_cast< CAknTitlePane* >
+ ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+ INFO_LOG( "CFileManagerAppUi::ConstructL()-Create main view" )
+ CAknView* view = CFileManagerMainView::NewLC();
+ AddViewL( view ); // Takes ownership
+ CleanupStack::Pop( view );
+ SetDefaultViewL( *view );
+ iActiveView = view->Id();
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ CFileManagerDocument* doc =
+ static_cast< CFileManagerDocument* >( Document() );
+ iSchBackupStandalone = doc->IsScheduledBackup();
+ if ( iSchBackupStandalone )
+ {
+ // Do standalone scheduled backup startup
+ INFO_LOG( "CFileManagerAppUi::ConstructL-Launch scheduled backup" )
+ iEikonEnv->WsSession().ComputeMode( RWsSession::EPriorityControlDisabled );
+ RThread().SetProcessPriority( EPriorityForeground );
+ sp->MakeVisible( EFalse );
+ sp->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_EMPTY );
+ StartSchBackupL();
+ }
+ else
+ {
+#endif // RD_FILE_MANAGER_BACKUP
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ iWaitingForParams = engine.FeatureManager().IsEmbedded();
+
+ // Do normal application startup
+ INFO_LOG( "CFileManagerAppUi::ConstructL()-Add foreground observer" )
+ iCoeEnv->AddForegroundObserverL( *this );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::HandleCommandL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EEikCmdExit: // FALLTHROUGH
+ case EAknSoftkeyExit:
+ {
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ engine.CancelRefresh();
+ Exit();
+ break;
+ }
+ case EAknCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+ AppHelpContextL());
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::HandleViewDeactivation
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::HandleViewDeactivation(
+ const TVwsViewId& aViewIdToBeDeactivated,
+ const TVwsViewId& aNewlyActivatedViewId )
+ {
+ if ( aNewlyActivatedViewId.iAppUid == Application()->AppDllUid() )
+ {
+ if ( IsFileManagerView( aNewlyActivatedViewId.iViewUid ) &&
+ View( aNewlyActivatedViewId.iViewUid ) )
+ {
+ iActiveView = aNewlyActivatedViewId.iViewUid;
+ }
+ }
+ CAknViewAppUi::HandleViewDeactivation(
+ aViewIdToBeDeactivated, aNewlyActivatedViewId );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::ActivateFoldersViewL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerAppUi::ActivateFoldersViewL()
+ {
+ if ( iActiveView != KFileManagerFoldersViewId )
+ {
+ if ( iSearchViewOpen )
+ {
+ CreateAndActivateLocalViewL( KFileManagerFoldersViewId,
+ CFileManagerFoldersView::KOpenFromSearchResultsView,
+ KNullDesC8 );
+ }
+ else
+ {
+ CreateAndActivateLocalViewL( KFileManagerFoldersViewId );
+ }
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::CloseFoldersViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CloseFoldersViewL()
+ {
+ if ( iSearchViewOpen )
+ {
+ CreateAndActivateLocalViewL( KFileManagerSearchResultsViewId );
+ iActiveView = KFileManagerSearchResultsViewId;
+ }
+ else
+ {
+ ExitEmbeddedAppIfNeededL();
+ ActivateMemoryStoreViewL();
+ iActiveView = KFileManagerMemoryStoreViewId;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::ActivateSearchResultsViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ActivateSearchResultsViewL()
+ {
+ if ( iActiveView != KFileManagerSearchResultsViewId )
+ {
+ // Activate with refresh
+ CreateAndActivateLocalViewL(
+ KFileManagerSearchResultsViewId,
+ KNullUid,
+ KFileManagerSearchViewRefreshMsg );
+ iSearchViewOpen = ETrue;
+ }
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ SetTitleL( engine.SearchString() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::CloseSearchResultsViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CloseSearchResultsViewL()
+ {
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ TInt level( engine.FolderLevel() );
+
+ // If embedded, then ensure that the return folder is not below given level
+ // or on different drive
+ if ( engine.FeatureManager().IsEmbedded() )
+ {
+ TPtrC dir( engine.CurrentDirectory().Left(
+ iFolderToOpenAtStartup.Length() ) );
+ if ( engine.FolderLevel() < iInitialFolderLevel ||
+ dir.CompareF( iFolderToOpenAtStartup ) )
+ {
+ engine.SetDirectoryWithBackstepsL( iFolderToOpenAtStartup );
+ level = iInitialFolderLevel;
+ }
+ }
+
+ if ( level > 0 )
+ {
+ CreateAndActivateLocalViewL( KFileManagerFoldersViewId );
+ iActiveView = KFileManagerFoldersViewId;
+ }
+ else if ( !level )
+ {
+ CreateAndActivateLocalViewL( KFileManagerMemoryStoreViewId );
+ iActiveView = KFileManagerMemoryStoreViewId;
+ }
+ else
+ {
+ CreateAndActivateLocalViewL( KFileManagerMainViewId );
+ iActiveView = KFileManagerMainViewId;
+ }
+ iSearchViewOpen = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::RestoreDefaultTitleL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::RestoreDefaultTitleL()
+ {
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, R_FILEMANAGER_TITLE_PANE );
+ iTitlePane->SetFromResourceL( reader ); // restore title pane
+ CleanupStack::PopAndDestroy(); // reader
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::SendUiL
+//
+// -----------------------------------------------------------------------------
+//
+CSendUi& CFileManagerAppUi::SendUiL()
+ {
+ if ( !iSendUi )
+ {
+ iSendUi = CSendUi::NewL();
+ }
+ return *iSendUi;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::HandleResourceChangeL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::HandleResourceChangeL( TInt aType )
+ {
+ if( aType == KAknsMessageSkinChange ||
+ aType == KEikDynamicLayoutVariantSwitch )
+ {
+ CEikStatusPane* sp = StatusPane();
+ sp->HandleResourceChange( aType );
+ CFileManagerDocument* doc =
+ static_cast< CFileManagerDocument* >( Document() );
+ doc->ClearStringCache();
+ doc->IconArray()->UpdateIconsL();
+
+ if ( iActiveView == KFileManagerFoldersViewId )
+ {
+ CFileManagerFoldersView* view =
+ static_cast< CFileManagerFoldersView* >(
+ View( KFileManagerFoldersViewId ) );
+ view->HandleResourceChangeL( KAknsMessageSkinChange );
+ }
+ NotifyViewScreenDeviceChanged();
+ }
+
+ CAknViewAppUi::HandleResourceChangeL( aType );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::HandleGainingForeground
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::HandleGainingForeground()
+ {
+ if ( !iForeGround )
+ {
+ iForeGround = ETrue;
+
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* >( View( iActiveView ) );
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+
+ engine.SetObserver( view );
+ view->NotifyForegroundStatusChange( iForeGround );
+
+ if ( view->CurrentProcess() ==
+ MFileManagerProcessObserver::ENoProcess )
+ {
+ engine.FileSystemEvent( EFalse );
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::HandleLosingForeground
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::HandleLosingForeground()
+ {
+ iForeGround = EFalse;
+
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* >( View( iActiveView ) );
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+
+ engine.SetObserver( view );
+ view->StoreIndex();
+ view->NotifyForegroundStatusChange( iForeGround );
+
+ if ( view->CurrentProcess() ==
+ MFileManagerProcessObserver::ENoProcess )
+ {
+ engine.FileSystemEvent( ETrue );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::IsFmgrForeGround
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerAppUi::IsFmgrForeGround()
+ {
+ return iForeGround;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::HandleScreenDeviceChangedL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::HandleScreenDeviceChangedL()
+ {
+ CAknViewAppUi::HandleScreenDeviceChangedL();
+ NotifyViewScreenDeviceChanged();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::HandleError()
+//
+// -----------------------------------------------------------------------------
+//
+TErrorHandlerResponse CFileManagerAppUi::HandleError( TInt aError,
+ const SExtendedError& aExtErr, TDes& aErrorText, TDes& aContextText )
+ {
+ ERROR_LOG1( "CFileManagerAppUi::HandleError()-aError=%d", aError )
+ switch ( aError )
+ {
+ case KErrCancel: // FALLTHROUGH
+ case KErrNotReady:
+ {
+ // Suppress notes for canceled operations.
+ // Suppress notes for not ready when caused by hotswap.
+ if ( View( iActiveView ) )
+ {
+ return ENoDisplay;
+ }
+ break;
+ }
+ case KErrNotFound: // Fall through
+ case KErrPathNotFound:
+ {
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* >( View( iActiveView ) );
+ TBool handled( EFalse );
+ TRAPD( err, handled = view->HandleFileNotFoundL( aError ) );
+ if ( err == KErrNone && handled )
+ {
+ // Suppress not found when handled by refresh.
+ return ENoDisplay;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return CAknViewAppUi::HandleError(
+ aError, aExtErr, aErrorText, aContextText );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:ActivateMainViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ActivateMainViewL()
+ {
+ if ( iActiveView != KFileManagerMainViewId )
+ {
+ CreateAndActivateLocalViewL( KFileManagerMainViewId );
+ iSearchViewOpen = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:ActivateMemoryStoreViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ActivateMemoryStoreViewL()
+ {
+ if ( iActiveView != KFileManagerMemoryStoreViewId )
+ {
+ CreateAndActivateLocalViewL( KFileManagerMemoryStoreViewId );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::CloseMemoryStoreViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CloseMemoryStoreViewL()
+ {
+ if ( iSearchViewOpen )
+ {
+ CreateAndActivateLocalViewL( KFileManagerSearchResultsViewId );
+ }
+ else
+ {
+ ExitEmbeddedAppIfNeededL();
+ CreateAndActivateLocalViewL( KFileManagerMainViewId );
+
+ //Fix for EDMO-7JMH7V
+ //File manager:The phone displays "no data" in File manager
+ //when cancel installing ".sis" file
+ iActiveView = KFileManagerMainViewId;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::DriveInfo
+//
+// -----------------------------------------------------------------------------
+//
+TFileManagerDriveInfo& CFileManagerAppUi::DriveInfo()
+ {
+ return iDriveInfo;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::ActivateRemoteDriveSettingsViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ActivateRemoteDriveSettingsViewL( const TDesC& aDriveName )
+ {
+ CFileManagerDocument* doc =
+ static_cast< CFileManagerDocument* >( Document() );
+ CFileManagerFeatureManager& featureManager( doc->Engine().FeatureManager() );
+
+ if ( !featureManager.IsRemoteStorageFwSupported() )
+ {
+ return;
+ }
+
+ if ( !View( KUidGsRsfwPlugin ) )
+ {
+ TUid plugin_ID_Key;
+ TAny* ptr = REComSession::CreateImplementationL(
+ KUidGsRsfwPlugin, plugin_ID_Key );
+ CAknView* view = reinterpret_cast< CAknView* >( ptr );
+
+ TRAPD( err,
+ {
+ doc->StorePluginL( plugin_ID_Key );
+ AddViewL( view ); // Takes ownership
+ } );
+ if ( err != KErrNone )
+ {
+ REComSession::DestroyedImplementation( plugin_ID_Key );
+ User::Leave( err );
+ }
+ }
+
+ if ( aDriveName.Length() )
+ {
+ // 16bit Unicode conversion to UTF8 takes max 3 bytes per char
+ const TInt KUtf8Factor = 3;
+ HBufC8* buffer8 = HBufC8::NewLC( aDriveName.Length() * KUtf8Factor );
+ TPtr8 ptr8( buffer8->Des() );
+
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( ptr8, aDriveName );
+ CreateActivateViewEventL(
+ TVwsViewId( KUidFileManager, KUidGsRsfwPlugin ),
+ KUidGsRsFwSettingsViewId,
+ *buffer8 );
+ CleanupStack::PopAndDestroy( buffer8 );
+ }
+ else
+ {
+ CreateActivateViewEventL(
+ TVwsViewId( KUidFileManager, KUidGsRsfwPlugin ),
+ KUidGsRsFwSettingsViewId,
+ KNullDesC8() );
+ }
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:ActivateBackupViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ActivateBackupViewL()
+ {
+ if ( iActiveView != KFileManagerBackupViewId )
+ {
+ CAknView* view = View( KFileManagerBackupViewId );
+ if ( !view )
+ {
+ view = CFileManagerBackupView::NewLC();
+ AddViewL( view ); // Takes ownership
+ CleanupStack::Pop( view );
+ }
+ CreateAndActivateLocalViewL( KFileManagerBackupViewId );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:CloseBackupViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CloseBackupViewL()
+ {
+ CreateAndActivateLocalViewL( KFileManagerMainViewId );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:ActivateRestoreViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ActivateRestoreViewL( TBool aDeleteBackup )
+ {
+ if ( iActiveView != KFileManagerRestoreViewId )
+ {
+ if ( aDeleteBackup )
+ {
+ CreateAndActivateLocalViewL(
+ KFileManagerRestoreViewId,
+ CFileManagerRestoreView::KDeleteBackups,
+ KNullDesC8 );
+ }
+ else
+ {
+ CreateAndActivateLocalViewL( KFileManagerRestoreViewId );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:CloseRestoreViewL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CloseRestoreViewL()
+ {
+ CreateAndActivateLocalViewL( KFileManagerBackupViewId );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::ProcessCommandParametersL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerAppUi::ProcessCommandParametersL(
+ TApaCommand aCommand,
+ TFileName& aDocumentName,
+ const TDesC8& aTail )
+ {
+ switch( aCommand )
+ {
+ case EApaCommandOpen:
+ {
+ TLex8 lex8( aTail );
+ TInt32 sortMode( 0 );
+ if ( lex8.Val( sortMode, EDecimal ) != KErrNone )
+ {
+ sortMode = 0; // Use the default on error
+ }
+ SetFolderToOpenAtStartup( aDocumentName, sortMode );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ aDocumentName.Zero();
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:ProcessMessageL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ProcessMessageL(
+ TUid /*aUid*/, const TDesC8& aParams )
+ {
+ if ( aParams.Length() )
+ {
+ // Allow the backup only if scheduled backup starter exists
+ const TSecureId KFileManagerSchBkupUid( KFileManagerSchBkupUID3 );
+ if( ProcessExists( KFileManagerSchBkupUid ) )
+ {
+ HBufC* cmd = HBufC::NewLC( aParams.Length() );
+ TPtr ptr( cmd->Des() );
+ ptr.Copy( aParams );
+ if ( !ptr.Compare( KSchBackupTaskName ) )
+ {
+ StartSchBackupL();
+ }
+ CleanupStack::PopAndDestroy( cmd );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi:StartSchBackupL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::StartSchBackupL()
+ {
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* >( View( iActiveView ) );
+ view->StartSchBackupL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::TaskSchedulerL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerTaskScheduler& CFileManagerAppUi::TaskSchedulerL()
+ {
+ if ( !iTaskScheduler )
+ {
+ CFileManagerDocument* doc =
+ static_cast< CFileManagerDocument* >( Document() );
+ iTaskScheduler = CFileManagerTaskScheduler::NewL(
+ doc->Engine() );
+ }
+ return *iTaskScheduler;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::SchBackupHandlerL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerSchBackupHandler& CFileManagerAppUi::SchBackupHandlerL()
+ {
+ if ( !iSchBackupHandler )
+ {
+ CFileManagerDocument* doc =
+ static_cast< CFileManagerDocument* >( Document() );
+ iSchBackupHandler = CFileManagerSchBackupHandler::NewL(
+ doc->Engine() );
+ iSchBackupHandler->SetObserver( this );
+ }
+ return *iSchBackupHandler;
+ }
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::StartIRReceiveL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::StartIRReceiveL(
+ MFileManagerProcessObserver& aObserver )
+ {
+ FUNC_LOG
+
+ delete iIRDeleteCB;
+ iIRDeleteCB = NULL;
+
+ delete iIRReceiver;
+ iIRReceiver = NULL;
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ iIRReceiver = CFileManagerIRReceiver::NewL(
+ aObserver,
+ engine.CurrentDirectory(),
+ engine );
+ iIRReceiver->ReceiveFileL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerAppUi::StopIRReceive()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerAppUi::StopIRReceive()
+ {
+ FUNC_LOG
+
+ if ( iIRReceiver )
+ {
+ iIRReceiver->StopReceiving();
+
+ delete iIRDeleteCB;
+ iIRDeleteCB = NULL;
+
+ iIRDeleteCB = new CAsyncCallBack(
+ TCallBack( DeleteIRReceiveCB, this ),
+ CActive::EPriorityStandard );
+ if ( iIRDeleteCB )
+ {
+ iIRDeleteCB->CallBack();
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::DeleteIRReceiveCB
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerAppUi::DeleteIRReceiveCB( TAny* aPtr )
+ {
+ FUNC_LOG
+
+ CFileManagerAppUi* self = static_cast< CFileManagerAppUi* >( aPtr );
+
+ delete self->iIRReceiver;
+ self->iIRReceiver = NULL;
+
+ delete self->iIRDeleteCB;
+ self->iIRDeleteCB = NULL;
+
+ return KErrNone;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::NotifyViewScreenDeviceChanged
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::NotifyViewScreenDeviceChanged()
+ {
+ CAknView* activeView = View( iActiveView );
+ if ( activeView )
+ {
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* > ( activeView );
+ view->ScreenDeviceChanged();
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::SetTitleL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::SetTitleL( const TDesC& aTitle )
+ {
+ iTitlePane->SetTextL( aTitle );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::SetTitleL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::SetTitleL( const TInt aTitle )
+ {
+ HBufC* title = StringLoader::LoadLC( aTitle );
+ iTitlePane->SetTextL( *title );
+ CleanupStack::PopAndDestroy( title );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::ScheduledBackupFinishedL
+//
+// ------------------------------------------------------------------------------
+//
+#ifdef RD_FILE_MANAGER_BACKUP
+void CFileManagerAppUi::SchBackupFinishedL( TInt /*aError*/ )
+ {
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* >( View( iActiveView ) );
+ if ( view->CurrentProcess() == MFileManagerProcessObserver::ESchBackupProcess )
+ {
+ view->SchBackupFinishedL();
+ }
+ if ( iSchBackupStandalone )
+ {
+ ProcessCommandL( EAknCmdExit );
+ }
+ }
+#else // RD_FILE_MANAGER_BACKUP
+void CFileManagerAppUi::SchBackupFinishedL( TInt /*aError*/ )
+ {
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::IsFileManagerView
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerAppUi::IsFileManagerView( const TUid aViewUid )
+ {
+ return ( aViewUid == KFileManagerFoldersViewId ||
+ aViewUid == KFileManagerSearchResultsViewId ||
+ aViewUid == KFileManagerMainViewId ||
+ aViewUid == KFileManagerMemoryStoreViewId ||
+ aViewUid == KFileManagerBackupViewId ||
+ aViewUid == KFileManagerRestoreViewId );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::NotifyCbaUpdate
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::NotifyCbaUpdate()
+ {
+ CAknView* activeView = View( iActiveView );
+ if ( activeView )
+ {
+ CFileManagerViewBase* view =
+ static_cast< CFileManagerViewBase* > ( activeView );
+ TRAP_IGNORE( view->UpdateCbaL() );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::SetFolderToOpenAtStartup
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::SetFolderToOpenAtStartup(
+ const TDesC& aFullPath, TInt aSortMode )
+ {
+ FUNC_LOG
+
+ INFO_LOG2(
+ "CFileManagerAppUi::SetFolderToOpenAtStartup-%S-%d",
+ &aFullPath, aSortMode )
+
+ // Validate given path
+ _LIT( KWild1, "*" );
+ _LIT( KWild2, "?" );
+ const TInt KWildLen = 1;
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ RFs& fs( iEikonEnv->FsSession() );
+ TInt err( KErrNone );
+ if ( !aFullPath.Length() ||
+ !aFullPath.Left( KWildLen ).CompareF( KWild1 ) ||
+ !aFullPath.Left( KWildLen ).CompareF( KWild2 ) )
+ {
+ err = KErrBadName; // Ignore bad drives
+ }
+ else
+ {
+ TParsePtrC parse( aFullPath );
+ if ( !parse.DrivePresent() || !parse.PathPresent() )
+ {
+ err = KErrBadName; // Ignore bad paths
+ }
+ TUint driveStatus( 0 );
+ if ( err == KErrNone )
+ {
+ TInt drive = TDriveUnit( aFullPath );
+ err = DriveInfo::GetDriveStatus( fs, drive, driveStatus );
+ if ( err != KErrNone ||
+ !( driveStatus & DriveInfo::EDriveUserVisible ) )
+ {
+ err = KErrAccessDenied; // Ignore hidden drives
+ }
+ else
+ {
+ TFileName rootPath;
+ err = PathInfo::GetRootPath( rootPath, drive );
+ if ( err == KErrNone &&
+ rootPath.CompareF( aFullPath.Left( rootPath.Length() ) ) )
+ {
+ err = KErrAccessDenied; // Ignore paths below root level
+ }
+ }
+ }
+ if ( err == KErrNone &&
+ !( driveStatus & DriveInfo::EDriveRemote ) )
+ {
+ if ( engine.IsSystemFolder( parse.DriveAndPath() ) )
+ {
+ err = KErrAccessDenied; // Ignore system folders
+ }
+ else if ( !( driveStatus & DriveInfo::EDriveReadOnly ) )
+ {
+ TRAP( err, BaflUtils::EnsurePathExistsL(
+ fs, parse.DriveAndPath() ) );
+ }
+ }
+ if ( err == KErrNone )
+ {
+ iFolderToOpenAtStartup.Copy( parse.DriveAndPath() );
+ engine.SetSortMethod(
+ static_cast< CFileManagerEngine::TSortMethod >( aSortMode ) );
+ engine.SetCurrentItemName(parse.NameAndExt());
+ TRAP( err, OpenFolderViewAtStartupL() );
+ }
+ }
+ if ( err != KErrNone )
+ {
+ ERROR_LOG1( "CFileManagerAppUi::SetFolderToOpenAtStartup-err=%d", err )
+ iWaitingForParams = EFalse;
+
+ // Refresh only if embedded app
+ if ( engine.FeatureManager().IsEmbedded() )
+ {
+ engine.RefreshDirectory();
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::ProcessAiwParamListL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ProcessAiwParamListL(
+ const CAiwGenericParamList& aInParams )
+ {
+ FUNC_LOG
+
+ iWaitingForParams = EFalse;
+
+ TPtrC folder( KNullDesC );
+ TInt folderSortMode( KErrNotFound );
+ TInt i( 0 );
+ // Get folder path
+ const TAiwGenericParam* param = aInParams.FindFirst(
+ i, EGenericParamDir, EVariantTypeDesC );
+ if ( i != KErrNotFound && param )
+ {
+ folder.Set( param->Value().AsDes() );
+ }
+ // Get folder sort mode
+ param = aInParams.FindFirst(
+ i, EGenericParamDir, EVariantTypeTInt32 );
+ if ( i != KErrNotFound && param )
+ {
+ folderSortMode = param->Value().AsTInt32();
+ }
+ SetFolderToOpenAtStartup( folder, folderSortMode );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::OpenFolderViewAtStartupL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::OpenFolderViewAtStartupL()
+ {
+ FUNC_LOG
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ engine.SetDirectoryWithBackstepsL( iFolderToOpenAtStartup );
+ if( engine.NavigationLevel() <= 0 )
+ {
+ ActivateMemoryStoreViewL();
+ // Ensure that view change gets updated when used during contruction
+ iActiveView = KFileManagerMemoryStoreViewId;
+ }
+ else
+ {
+ ActivateFoldersViewL();
+ // Ensure that view change gets updated when used during contruction
+ iActiveView = KFileManagerFoldersViewId;
+ }
+ // Store initial folder level when embedded
+ if ( engine.FeatureManager().IsEmbedded() )
+ {
+ iInitialFolderLevel = engine.FolderLevel();
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::ExitEmbeddedAppIfNeededL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ExitEmbeddedAppIfNeededL()
+ {
+ FUNC_LOG
+
+ CFileManagerEngine& engine =
+ static_cast< CFileManagerDocument* >( Document() )->Engine();
+ // Exit embedded app if the initial folder level is crossed
+ if ( engine.FeatureManager().IsEmbedded() &&
+ engine.FolderLevel() < iInitialFolderLevel )
+ {
+ ProcessCommandL( EAknCmdExit );
+ User::Leave( KErrCancel ); // To abort current operation
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::WaitingForInputParams
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerAppUi::WaitingForInputParams() const
+ {
+ return iWaitingForParams;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::CreateAndActivateLocalViewL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CreateAndActivateLocalViewL(
+ TUid aViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ CAknView* view = View( aViewId );
+ if ( !view )
+ {
+ if ( aViewId == KFileManagerMainViewId )
+ {
+ view = CFileManagerMainView::NewLC();
+ }
+ else if ( aViewId == KFileManagerMemoryStoreViewId )
+ {
+ view = CFileManagerMemoryStoreView::NewLC();
+ }
+ else if ( aViewId == KFileManagerFoldersViewId )
+ {
+ view = CFileManagerFoldersView::NewLC();
+ }
+ else if ( aViewId == KFileManagerSearchResultsViewId )
+ {
+ view = CFileManagerSearchResultsView::NewLC();
+ }
+ else if ( aViewId == KFileManagerBackupViewId )
+ {
+ view = CFileManagerBackupView::NewLC();
+ }
+ else if ( aViewId == KFileManagerRestoreViewId )
+ {
+ view = CFileManagerRestoreView::NewLC();
+ }
+ else
+ {
+ ERROR_LOG1(
+ "CFileManagerAppUi::CreateAndActivateLocalViewL-InvalidView=0x%x",
+ aViewId.iUid )
+ User::Leave( KErrNotFound );
+ }
+ AddViewL( view ); // Takes ownership
+ CleanupStack::Pop( view );
+ }
+ ActivateLocalViewL( aViewId, aCustomMessageId, aCustomMessage );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::CreateAndActivateLocalViewL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::CreateAndActivateLocalViewL( TUid aViewId )
+ {
+ FUNC_LOG
+
+ CreateAndActivateLocalViewL( aViewId, KNullUid, KNullDesC8 );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::IsSearchViewOpen
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerAppUi::IsSearchViewOpen() const
+ {
+ return iSearchViewOpen;
+ }
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::BackupOrRestoreStarted
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::BackupOrRestoreStarted()
+ {
+ iManualBackupOrRestoreStarted.HomeTime();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::BackupOrRestoreEnded
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::BackupOrRestoreEnded()
+ {
+ iManualBackupOrRestoreEnded.HomeTime();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::BackupOrRestoreStartTime
+//
+// ------------------------------------------------------------------------------
+//
+TTime CFileManagerAppUi::BackupOrRestoreStartTime() const
+ {
+ return iManualBackupOrRestoreStarted;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::BackupOrRestoreEndTime
+//
+// ------------------------------------------------------------------------------
+//
+TTime CFileManagerAppUi::BackupOrRestoreEndTime() const
+ {
+ return iManualBackupOrRestoreEnded;
+ }
+// ------------------------------------------------------------------------------
+// CFileManagerAppUi::ResetBackupOrRestoreEndTime
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerAppUi::ResetBackupOrRestoreEndTime()
+ {
+ iManualBackupOrRestoreStarted = 0;
+ iManualBackupOrRestoreEnded = 0;
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerApplication.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2002-2006 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: File Manager application class.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "CFileManagerApplication.h"
+#include "CFileManagerDocument.h"
+#include "FileManagerUID.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerApplication::CFileManagerApplication
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerApplication::CFileManagerApplication()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerApplication::~CFileManagerApplication
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerApplication::~CFileManagerApplication()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerApplication::CreateDocumentL
+//
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CFileManagerApplication::CreateDocumentL()
+ {
+ return CFileManagerDocument::NewL( *this );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerApplication::AppDllUid
+//
+// -----------------------------------------------------------------------------
+//
+TUid CFileManagerApplication::AppDllUid() const
+ {
+ return TUid::Uid( KFileManagerUID3 );
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// NewApplication
+// Creates a new FileManager application object (CFileManagerApplication).
+// Called by the application framework.
+// Returns the new application object (CFileManagerApplication).
+// NULL if out of memory.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CApaApplication* NewApplication()
+ {
+ return new CFileManagerApplication;
+ }
+
+// -----------------------------------------------------------------------------
+// E32Main
+// Standard entry point for the application exe (FileManager.exe).
+// Returns standard Symbian OS error code, KErrNone if succesful.
+// -----------------------------------------------------------------------------
+//
+GLDEF_C TInt E32Main()
+ {
+ return EikStart::RunApplication( NewApplication );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerBackupView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,559 @@
+/*
+* Copyright (c) 2002-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: View for backup settings
+*
+*/
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknlists.h>
+#include <akntitle.h>
+#include <csxhelp/fmgr.hlp.hrh>
+#include <CFileManagerEngine.h>
+#include <FileManager.rsg>
+#include <CFileManagerBackupSettings.h>
+#include <FileManagerPrivateCRKeys.h>
+#include <FileManagerDlgUtils.h>
+#include <CAknMemorySelectionDialog.h>
+#include <CAknMemorySelectionSettingPage.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <AknCommonDialogsDynMem.h>
+#include <CAknMemorySelectionDialogMultiDrive.h>
+#endif // RD_MULTIPLE_DRIVE
+#include <FileManagerDebug.h>
+#include "CFileManagerBackupView.h"
+#include "CFileManagerTaskScheduler.h"
+#include "CFileManagerSettingListContainer.h"
+#include "CFileManagerAppUi.h"
+#include "FileManager.hrh"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CFileManagerBackupView
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupView::CFileManagerBackupView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::NewLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupView* CFileManagerBackupView::NewLC()
+ {
+ CFileManagerBackupView* self = new( ELeave ) CFileManagerBackupView();
+ CleanupStack::PushL( self );
+ self->ConstructL( R_FILEMANAGER_BACKUP_VIEW );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::~CFileManagerBackupView
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupView::~CFileManagerBackupView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::DoActivateL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoActivateL(
+ aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ static_cast< CFileManagerAppUi* >( AppUi() )->SetTitleL(
+ R_QTN_FMGR_BACKUP_TITLE );
+
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ settings.RefreshL();
+
+ iContainer->RefreshListL( iIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerBackupView::DoDeactivate
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::DoDeactivate()
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoDeactivate();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::DirectoryChangedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::DirectoryChangedL()
+ {
+ FUNC_LOG
+
+ if ( iContainer )
+ {
+ iContainer->RefreshListL( iIndex );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::Id
+// ----------------------------------------------------------------------------
+//
+TUid CFileManagerBackupView::Id() const
+ {
+ return CFileManagerAppUi::KFileManagerBackupViewId;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CreateContainerL
+// ----------------------------------------------------------------------------
+//
+CFileManagerContainerBase* CFileManagerBackupView::CreateContainerL()
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+
+ return CFileManagerSettingListContainer::NewL(
+ ClientRect(),
+ iIndex,
+ CFileManagerSettingListContainer::EListBackup,
+ &settings,
+ KFMGR_HLP_BACKUP_VIEW );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::HandleCommandL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EFileManagerSelectionKey: // FALLTHROUGH
+ case EFileManagerOpen:
+ {
+ CmdChangeL();
+ break;
+ }
+ case EFileManagerBackup:
+ {
+ CmdBackupL();
+ break;
+ }
+ case EFileManagerRestore:
+ {
+ CmdRestoreL();
+ break;
+ }
+ case EFileManagerDeleteBackup:
+ {
+ CmdDeleteBackupL();
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ CmdBackL();
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CmdChangeL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::CmdChangeL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+
+ StoreIndex();
+
+ switch ( settings.SettingAt( index ) )
+ {
+ case CFileManagerBackupSettings::EContents:
+ {
+ ChangeContentsL();
+ break;
+ }
+ case CFileManagerBackupSettings::EScheduling:
+ {
+ ChangeSchedulingL();
+ break;
+ }
+ case CFileManagerBackupSettings::EWeekday:
+ {
+ ChangeWeekdayL();
+ break;
+ }
+ case CFileManagerBackupSettings::ETime:
+ {
+ ChangeTimeL();
+ break;
+ }
+ case CFileManagerBackupSettings::ETarget:
+ {
+ ChangeTargetDriveL();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CmdBackupL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::CmdBackupL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ StoreIndex();
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TInt drive( settings.TargetDrive() );
+ TInt MemoryCardDriveF( KFmgrMemoryCardDrive + 1 );
+ //KFmgrMemoryCardDrive has been changed as Mass memory,MemoryCard is changed to F
+
+ if( drive != MemoryCardDriveF && !IsDriveAvailable( drive ) )
+ {
+ drive = MemoryCardDriveF;
+ settings.SetTargetDrive( drive );
+ settings.SaveL();
+ }
+ TFileManagerDriveInfo drvInfo;
+ iEngine.GetDriveInfoL( drive, drvInfo );
+ RArray< CFileManagerRestoreSettings::TInfo > info;
+ CleanupClosePushL( info );
+ iEngine.GetRestoreInfoArrayL( info, drive );
+ TInt count( info.Count() );
+ CleanupStack::PopAndDestroy( &info );
+ TPtrC driveName( iEngine.DriveName( drive ) );
+ TBool isContinue( true );
+
+
+ const TInt64 KBackupLimitSize = 10000000;
+
+ //define a protected limit size to avoid not enough space during backup
+
+ if( count )
+ {
+ TInt textId( R_QTN_FMGR_BACKUP_QUERY_EXISTS );
+
+ if( !FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ textId, driveName ) )
+ {
+ isContinue = false;
+ }
+ }
+ if( isContinue )
+ {
+ if ( !DriveReadOnlyMmcL( drive ) )
+ {
+ if ( !IsDriveAvailable( drive ) )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_BACKUP_MEMORYCARD_NOT_AVAILABLE );
+ }
+ else if ( !CheckPhoneState() )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+ }
+ else if ( !iEngine.EnoughSpaceL(
+ TDriveUnit( drive ).Name(), KBackupLimitSize, EBackupProcess ) )
+ {
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EErrorIcons,
+ R_QTN_FMGR_BACKUP_DESTINATION_FULL,
+ driveName );
+ }
+ else
+ {
+ StartProcessL( EBackupProcess );
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CmdRestoreL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::CmdRestoreL()
+ {
+ StoreIndex();
+ static_cast< CFileManagerAppUi* >( AppUi() )->ActivateRestoreViewL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::ChangeContentsL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::ChangeContentsL()
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TUint32 selection( settings.Content() );
+
+ if ( FileManagerDlgUtils::ShowNOfMSettingQueryL(
+ R_QTN_FMGR_BACKUP_CONTENTS,
+ R_FILEMANAGER_BACKUP_CONTENTS_TEXTS,
+ selection,
+ 0 ) )
+ {
+ settings.SetContent( selection );
+ settings.SaveL();
+ iContainer->RefreshListL( iIndex );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::ChangeSchedulingL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::ChangeSchedulingL()
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TInt index( settings.Scheduling() );
+
+ if ( FileManagerDlgUtils::ShowOOfMSettingQueryL(
+ R_QTN_FMGR_BACKUP_SCHEDULING,
+ R_FILEMANAGER_BACKUP_SCHEDULING_TEXTS,
+ index ) )
+ {
+ settings.SetScheduling( index );
+ settings.SaveL();
+ iContainer->RefreshListL( iIndex );
+ UpdateScheduleL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::ChangeWeekdayL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::ChangeWeekdayL()
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TDay day( static_cast< TDay >( settings.Day() ) );
+
+ if ( FileManagerDlgUtils::ShowWeekdayQueryL(
+ R_QTN_FMGR_BACKUP_WEEKDAY,
+ day ) )
+ {
+ settings.SetDay( day );
+ settings.SaveL();
+ iContainer->RefreshListL( iIndex );
+ UpdateScheduleL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::ChangeTargetDriveL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::ChangeTargetDriveL()
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+
+ HBufC* title = StringLoader::LoadLC(
+ R_QTN_FMGR_SELECT_BACKUP_DESTINATION );
+
+ TUint32 drvMask( settings.AllowedDriveAttMatchMask() );
+ TInt memType( AknCommonDialogsDynMem::EMemoryTypeMMCExternal );
+ if ( drvMask & KDriveAttRemote )
+ {
+ memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+ }
+
+ CAknMemorySelectionDialogMultiDrive* dlg =
+ CAknMemorySelectionDialogMultiDrive::NewL(
+ ECFDDialogTypeNormal,
+ R_FILEMANAGER_FIND_MEMORY_SELECTIONDIALOG,
+ ETrue,
+ memType );
+ CleanupStack::PushL( dlg );
+ dlg->SetTitleL( *title );
+ TDriveNumber driveNumber( static_cast< TDriveNumber >(
+ settings.TargetDrive() ) );
+ TBool ret( dlg->ExecuteL( driveNumber ) );
+ CleanupStack::PopAndDestroy( dlg );
+ CleanupStack::PopAndDestroy( title );
+ if ( ret )
+ {
+ TInt drive( static_cast< TInt >( driveNumber ) );
+ if ( drive != settings.TargetDrive() )
+ {
+ settings.SetTargetDrive( drive );
+ settings.SaveL();
+ iContainer->RefreshListL( iIndex );
+ }
+ }
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::ChangeTimeL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::ChangeTimeL()
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TTime time( settings.Time() );
+
+ if ( FileManagerDlgUtils::ShowTimeSettingQueryL(
+ R_QTN_FMGR_BACKUP_TIME,
+ time ) )
+ {
+ settings.SetTime( time );
+ settings.SaveL();
+ iContainer->RefreshListL( iIndex );
+ UpdateScheduleL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CmdBackL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::CmdBackL()
+ {
+ iIndex = 0;
+ static_cast< CFileManagerAppUi* >( AppUi() )->CloseBackupViewL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::UpdateScheduleL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::UpdateScheduleL()
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ CFileManagerTaskScheduler& scheduler( appUi->TaskSchedulerL() );
+
+ if ( settings.Scheduling() == EFileManagerBackupScheduleNone )
+ {
+ scheduler.EnableBackupScheduleL( EFalse );
+ }
+ else
+ {
+ scheduler.EnableBackupScheduleL( ETrue );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::NotifyForegroundStatusChange
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::NotifyForegroundStatusChange(
+ TBool aForeground )
+ {
+ FUNC_LOG
+
+ if ( aForeground )
+ {
+ TRAP_IGNORE( RefreshSettingsL() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::RefreshSettingsL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::RefreshSettingsL()
+ {
+ FUNC_LOG
+
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ settings.RefreshL();
+ if ( iContainer )
+ {
+ iContainer->RefreshListL( iIndex );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::CmdDeleteBackupL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::CmdDeleteBackupL()
+ {
+ StoreIndex();
+ static_cast< CFileManagerAppUi* >( AppUi() )->ActivateRestoreViewL( ETrue );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::DynInitMenuPaneL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::DynInitMenuPaneL(
+ TInt aResourceId, CEikMenuPane* aMenuPane)
+ {
+ switch( aResourceId )
+ {
+ case R_FILEMANAGER_BACKUP_VIEW_MENU:
+ {
+ BackupMenuFilteringL( *aMenuPane );
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::DynInitMenuPaneL( aResourceId, aMenuPane );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupView::BackupMenuFilteringL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupView::BackupMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
+ TRAP_IGNORE( settings.RefreshL() );
+ if ( !settings.MdcaCount() )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerDeleteBackup, ETrue );
+ }
+ aMenuPane.SetItemDimmed( EFileManagerOpen, ETrue );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerContainerBase.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,582 @@
+/*
+* 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: Base class for all file manager containers
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+#include <eikclbd.h>
+#include <StringLoader.h>
+#include <FileManagerUID.h>
+#include "CFileManagerContainerBase.h"
+#include "FileManager.hrh"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::CFileManagerContainerBase
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerContainerBase::CFileManagerContainerBase()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ConstructL(
+ const TRect& aRect,
+ const TInt aFocusedIndex )
+ {
+ CreateWindowL();
+ iListBox = CreateListBoxL();
+ if ( !iListBox )
+ {
+ User::Leave( KErrGeneral );
+ }
+ SetListEmptyL();
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ iListBox->SetObserver( this );
+ iListBox->SetListBoxObserver( this );
+ SetIndex( aFocusedIndex );
+ iListBox->SetFocus( ETrue );
+ iListBox->AddSelectionObserverL( this );
+ SetRect( aRect );
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::~CFileManagerContainerBase
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerContainerBase::~CFileManagerContainerBase()
+ {
+ delete iListBox;
+ delete iEmptyText;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SizeChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SizeChanged()
+ {
+ if ( iListBox )
+ {
+ iListBox->SetRect( Rect() );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::CountComponentControls
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerContainerBase::CountComponentControls() const
+ {
+ return iListBox ? 1 : 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ComponentControl
+//
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CFileManagerContainerBase::ComponentControl(
+ TInt /* aIndex */ ) const
+ {
+ return iListBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::OfferKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerContainerBase::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ return iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBox
+//
+// -----------------------------------------------------------------------------
+//
+CEikListBox& CFileManagerContainerBase::ListBox()
+ {
+ return *iListBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::RefreshListL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::RefreshListL( TInt aFocusedIndex )
+ {
+ if ( !iListBox )
+ {
+ return;
+ }
+
+ TBool isEmpty( ETrue );
+ if ( iArray )
+ {
+ if ( iArray->MdcaCount() )
+ {
+ isEmpty = EFalse;
+ iListBox->Model()->SetItemTextArray( iArray );
+ // Remove ownership from listbox.
+ iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ }
+ }
+ if ( isEmpty )
+ {
+ SetEmptyArrayL();
+ }
+
+ iListBox->Reset();
+ SetIndex( aFocusedIndex );
+ iListBox->UpdateScrollBarsL();
+ iListBox->SetFocus( ETrue );
+
+ if ( iEmptyText )
+ {
+ iListBox->View()->SetListEmptyTextL( *iEmptyText );
+ }
+ else
+ {
+ iListBox->View()->SetListEmptyTextL( KNullDesC );
+ }
+ iListBox->DrawDeferred();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetListEmptyL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetListEmptyL()
+ {
+ if ( !iListBox )
+ {
+ return;
+ }
+ SetEmptyArrayL();
+ iListBox->View()->SetListEmptyTextL( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetIndex
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetIndex( TInt aFocusedIndex )
+ {
+ if ( !iListBox )
+ {
+ return;
+ }
+ // Check that given index is valid
+ if ( aFocusedIndex >= 0 &&
+ aFocusedIndex < iListBox->Model()->NumberOfItems() )
+ {
+ iListBox->SetCurrentItemIndex( aFocusedIndex );
+ }
+ else
+ {
+ // if list is empty or value is negative then set focus to 0
+ if ( !iListBox->Model()->NumberOfItems() || aFocusedIndex < 0 )
+ {
+ iListBox->SetCurrentItemIndex( 0 );
+ }
+ else
+ {
+ // Something has been deleted in the end of the list
+ // set focus to last one so the focus doesn't jump around
+ iListBox->SetCurrentItemIndex(
+ iListBox->Model()->NumberOfItems() - 1 );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetTextArray
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetTextArray( MDesCArray* aArray )
+ {
+ iArray = aArray;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetEmptyTextL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetEmptyTextL( TInt aTextId )
+ {
+ delete iEmptyText;
+ iEmptyText = NULL;
+
+ if ( aTextId )
+ {
+ iEmptyText = StringLoader::LoadL( aTextId );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetHelpContext
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetHelpContext(
+ const TDesC& aHelpContext )
+ {
+ iHelpContext = aHelpContext;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::HandleListBoxEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+ {
+ switch ( aEventType )
+ {
+ case EEventItemSingleClicked: // FALLTHROUGH
+ case EEventEnterKeyPressed:
+ {
+ static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
+ ProcessCommandL( EFileManagerSelectionKey );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::HandleControlEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::HandleControlEventL(
+ CCoeControl* /* aControl*/, TCoeEvent /*aEventType*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::FocusChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::FocusChanged( TDrawNow aDrawNow )
+ {
+ CCoeControl::FocusChanged( aDrawNow );
+
+ if ( iListBox )
+ {
+ iListBox->SetFocus( IsFocused(), aDrawNow );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::GetHelpContext
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::GetHelpContext(
+ TCoeHelpContext& aContext ) const
+ {
+ if ( iHelpContext.Length() )
+ {
+ aContext.iMajor = TUid::Uid( KFileManagerUID3 );
+ aContext.iContext = iHelpContext;
+ }
+ else
+ {
+ CCoeControl::GetHelpContext( aContext );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxExists
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerContainerBase::ListBoxExists() const
+ {
+ return iListBox ? ETrue : EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetEmptyArrayL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetEmptyArrayL()
+ {
+ CDesCArray* empty = new( ELeave ) CDesCArrayFlat( 1 );
+ iListBox->Model()->SetItemTextArray( empty );
+ // Transfer ownership to listbox.
+ iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ProcessCommandL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ProcessCommandL( TInt aCommandId )
+ {
+ switch ( aCommandId )
+ {
+ case EAknSoftkeyShiftMSK:
+ {
+ static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
+ ProcessCommandL( EFileManagerToggleMark );
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SelectionModeChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SelectionModeChanged(
+ CEikListBox* aListBox, TBool aSelectionModeEnabled )
+ {
+ if ( iListBox == aListBox &&
+ iSelectionModeEnabled != aSelectionModeEnabled )
+ {
+ iSelectionModeEnabled = aSelectionModeEnabled;
+ if ( !iSelectionModeEnabled )
+ {
+ // Update cba after selection mode gets done
+ UpdateCba();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SelectionModeEnabled
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerContainerBase::SelectionModeEnabled() const
+ {
+ return iSelectionModeEnabled;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::UpdateCba
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::UpdateCba()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxCurrentItemIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerContainerBase::ListBoxCurrentItemIndex()
+ {
+ return iListBox->CurrentItemIndex();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxNumberOfItems
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerContainerBase::ListBoxNumberOfItems()
+ {
+ return iListBox->Model()->NumberOfItems();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxSelectionIndexes
+//
+// -----------------------------------------------------------------------------
+//
+const CArrayFix< TInt >* CFileManagerContainerBase::ListBoxSelectionIndexes()
+ {
+ return iListBox->SelectionIndexes();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxSelectionIndexesCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerContainerBase::ListBoxSelectionIndexesCount()
+ {
+ return iListBox->SelectionIndexes()->Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxToggleItemL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxToggleItemL( TInt aIndex )
+ {
+ iListBox->View()->ToggleItemL( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxIsItemSelected
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerContainerBase::ListBoxIsItemSelected( TInt aIndex )
+ {
+ return iListBox->View()->ItemIsSelected( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxSelectAllL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxSelectAllL()
+ {
+ TInt count( ListBoxNumberOfItems() );
+ if ( count > 0 )
+ {
+ CArrayFixFlat<TInt>* array =
+ new( ELeave ) CArrayFixFlat< TInt >( count );
+ CleanupStack::PushL( array );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ array->AppendL( i );
+ }
+ iListBox->View()->SetSelectionIndexesL( array );
+ CleanupStack::PopAndDestroy( array );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxClearSelection
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxClearSelection()
+ {
+ iListBox->View()->ClearSelection();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxSetTextL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxSetTextL( const TDesC& aText )
+ {
+ iListBox->View()->SetListEmptyTextL( aText );
+ iListBox->DrawDeferred();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::IsSearchFieldVisible
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerContainerBase::IsSearchFieldVisible() const
+ {
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::EnableSearchFieldL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::EnableSearchFieldL(
+ TBool /*aEnable*/, const TDesC& /*aSearchText^*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::SetCurrentItemIndexAfterSearch
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::SetCurrentItemIndexAfterSearch(
+ TInt /*aIndex*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxSelectItemL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxSelectItemL( TInt aIndex )
+ {
+ iListBox->View()->SelectItemL( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxDeselectItem
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxDeselectItem( TInt aIndex )
+ {
+ iListBox->View()->DeselectItem( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerContainerBase::ListBoxSetSelectionIndexesL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerContainerBase::ListBoxSetSelectionIndexesL(const CArrayFixFlat<TInt>*
+ aSelectionIndexes)
+ {
+ iListBox->View()->SetSelectionIndexesL( aSelectionIndexes );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerDocument.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2002-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: Document class of the file manager
+*
+*/
+
+
+// INCLUDE FILES
+#include <gulicon.h> // to make iIconArray->ResetAndDestroy work
+#include <coemain.h>
+#include <apgwgnam.h>
+#include <data_caging_path_literals.hrh>
+#include <FileManagerUID.h>
+#include <CFileManagerIconArray.h>
+#include <CFileManagerEngine.h>
+#include <FileManagerDebug.h>
+#include <CFileManagerUtils.h>
+#include "CFileManagerDocument.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerStringCache.h"
+
+
+// CONSTANTS
+_LIT( KFileManagerEngineResource, "filemanagerengine.rsc" );
+_LIT( KFileManagerViewResource, "filemanagerview.rsc" );
+_LIT_SECURE_ID( KFileManagerSchBkupSID, KFileManagerSchBkupUID3 );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::CFileManagerDocument
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerDocument::CFileManagerDocument( CEikApplication& aApp ) :
+ CAiwGenericParamConsumer( aApp ),
+ iViewResourceLoader( *CCoeEnv::Static() ),
+ iEngineResourceLoader( *CCoeEnv::Static() )
+ {
+ FUNC_LOG
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocument::ConstructL()
+ {
+ FUNC_LOG
+
+ // Get resource drive from exe location
+ TFileName exeFileName( RProcess().FileName() );
+ TParsePtrC exeParse( exeFileName );
+ TPtrC exeDrive( exeParse.Drive() );
+
+ TFileName fileName;
+ fileName.Copy( exeDrive );
+ fileName.Append( KDC_RESOURCE_FILES_DIR );
+ CFileManagerUtils::EnsureFinalBackslash( fileName );
+ fileName.Append( KFileManagerViewResource );
+ iViewResourceLoader.OpenL( fileName );
+
+ fileName.Copy( exeDrive );
+ fileName.Append( KDC_RESOURCE_FILES_DIR );
+ CFileManagerUtils::EnsureFinalBackslash( fileName );
+ fileName.Append( KFileManagerEngineResource );
+ iEngineResourceLoader.OpenL( fileName );
+
+ INFO_LOG( "CFileManagerDocument::ConstructL()-Create engine" )
+ RFs& fs( CCoeEnv::Static()->FsSession() );
+ User::LeaveIfError( fs.ShareProtected() ); // Make shareable
+ iEngine = CFileManagerEngine::NewL( fs );
+
+ INFO_LOG( "CFileManagerDocument::ConstructL()-Create icon array" )
+ iIconArray = CFileManagerIconArray::NewL();
+
+ INFO_LOG( "CFileManagerDocument::ConstructL()-Create string cache" )
+ iStringCache = CFileManagerStringCache::NewL( *iEngine, *iIconArray );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerDocument* CFileManagerDocument::NewL( CEikApplication& aApp )
+ {
+ CFileManagerDocument* self = new( ELeave ) CFileManagerDocument( aApp );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::~CFileManagerDocument
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerDocument::~CFileManagerDocument()
+ {
+ FUNC_LOG
+
+ DeletePlugins();
+ iPluginArray.Close();
+ REComSession::FinalClose();
+ iViewResourceLoader.Close();
+ iEngineResourceLoader.Close();
+ if ( iIconArray )
+ {
+ iIconArray->ResetAndDestroy();
+ delete iIconArray;
+ }
+ delete iStringCache;
+ delete iEngine;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::CreateAppUiL
+//
+// -----------------------------------------------------------------------------
+//
+CEikAppUi* CFileManagerDocument::CreateAppUiL()
+ {
+ return new( ELeave ) CFileManagerAppUi;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::IconArray
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerIconArray* CFileManagerDocument::IconArray() const
+ {
+ return iIconArray;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::Engine
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerEngine& CFileManagerDocument::Engine() const
+ {
+ return *iEngine;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::ClearStringCache
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocument::ClearStringCache()
+ {
+ iStringCache->Clear();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::FileList
+//
+// -----------------------------------------------------------------------------
+//
+MDesCArray* CFileManagerDocument::FileList() const
+ {
+ return iStringCache;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::LastError
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerDocument::LastError() const
+ {
+ return iStringCache->LastError();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::UpdateTaskNameL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+ {
+ CAknDocument::UpdateTaskNameL( aWgName );
+#ifdef RD_FILE_MANAGER_BACKUP
+ if ( IsScheduledBackup() )
+ {
+ aWgName->SetHidden( ETrue );
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::IsScheduledBackup
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerDocument::IsScheduledBackup()
+ {
+ // Check is started by file manager schedule starter
+ return ( User::CreatorSecureId() == KFileManagerSchBkupSID );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::StorePluginL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocument::StorePluginL( const TUid& aUid )
+ {
+ iPluginArray.AppendL( aUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::DeletePlugins
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocument::DeletePlugins()
+ {
+ TInt count( iPluginArray.Count() );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ REComSession::DestroyedImplementation( iPluginArray[ i ] );
+ }
+ iPluginArray.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocument::OpenFileL()
+//
+// -----------------------------------------------------------------------------
+CFileStore* CFileManagerDocument::OpenFileL(
+ TBool /*aDoOpen*/, const TDesC& /*aFilename*/, RFs& /*aFs*/ )
+ {
+ const CAiwGenericParamList* inParams = GetInputParameters();
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( iAppUi );
+ if ( appUi && inParams )
+ {
+ appUi->ProcessAiwParamListL( *inParams );
+ }
+ return NULL;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerFileListContainer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,863 @@
+/*
+* Copyright (c) 2006-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: File list container in file manager
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <FileManager.rsg>
+#include <aknlists.h>
+#include <barsread.h>
+#include <eikclbd.h>
+#include <gulicon.h>
+#include <aknsfld.h>
+#include <CFileManagerEngine.h>
+#include <CFileManagerFeatureManager.h>
+#include <FileManagerPrivateCRKeys.h>
+#include "CFileManagerFileListContainer.h"
+#include "CFileManagerDocument.h"
+#include "CFileManagerAppUi.h"
+#include "FileManager.hrh"
+#include "CFileManagerIconArray.h"
+
+
+// CONSTANTS
+const TInt KTouchGestureThreshold = 30; // Threshold could be stored in CenRep
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CFileManagerFileListContainer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileListContainer::CFileManagerFileListContainer(
+ const TListType aType ) :
+ iType( aType )
+ {
+ iAppUi = static_cast< CFileManagerAppUi* >( ControlEnv()->AppUi() );
+ iDocument = static_cast< CFileManagerDocument* >( iAppUi->Document() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileListContainer* CFileManagerFileListContainer::NewL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ const TListType aType,
+ const TInt aEmptyText,
+ const TDesC& aHelpContext )
+ {
+ CFileManagerFileListContainer* self =
+ new ( ELeave ) CFileManagerFileListContainer( aType );
+ CleanupStack::PushL( self );
+ self->ConstructL(
+ aRect,
+ aFocusedIndex,
+ aEmptyText,
+ aHelpContext );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::ConstructL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ const TInt aEmptyText,
+ const TDesC& aHelpContext )
+ {
+ CFileManagerFeatureManager& featureManager(
+ iDocument->Engine().FeatureManager() );
+ iRightLeftNaviSupported = featureManager.IsFeatureSupported(
+ EFileManagerFeatureRightLeftNaviSupported );
+ iOwnFastScrollDisabled = featureManager.IsFeatureSupported(
+ EFileManagerFeatureOwnFastScrollDisabled );
+ CFileManagerContainerBase::ConstructL( aRect, aFocusedIndex );
+ SetEmptyTextL( aEmptyText );
+ SetHelpContext( aHelpContext );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CreateListBoxL
+//
+// -----------------------------------------------------------------------------
+//
+CEikTextListBox* CFileManagerFileListContainer::CreateListBoxL()
+ {
+ switch ( iType )
+ {
+ case EListMain:
+ {
+ CAknDoubleLargeStyleListBox* listBox =
+ new( ELeave ) CAknDoubleLargeStyleListBox();
+ CleanupStack::PushL( listBox );
+ listBox->SetContainerWindowL( *this );
+ listBox->ConstructL( this, EAknGenericListBoxFlags |
+ EAknListBoxMenuList | EAknListBoxLoopScrolling );
+ CFormattedCellListBoxData* column = listBox->ItemDrawer()->ColumnData();
+ column->SetIconArray( iDocument->IconArray() );
+ column->SetSkinEnabledL( ETrue );
+ column->EnableMarqueeL( ETrue );
+ CleanupStack::Pop( listBox );
+ return listBox;
+ }
+ case EListMemoryStore: // FALLTHROUGH
+ case EListFolder:
+ {
+ CAknColumnListBox* listBox = new( ELeave )
+ CFileManagerFileListContainer::CListBox( *this );
+ CleanupStack::PushL( listBox );
+ listBox->SetContainerWindowL( *this );
+ listBox->ConstructL( this, EAknGenericListBoxFlags |
+ EAknListBoxMenuList | EAknListBoxLoopScrolling |
+ EAknListBoxStylusMarkableList );
+ CColumnListBoxData* column = listBox->ItemDrawer()->ColumnData();
+ column->SetIconArray( iDocument->IconArray() );
+ column->SetSkinEnabledL( ETrue );
+ // Disable lists MSK observer because the container will be used
+ // as observer
+ listBox->EnableMSKObserver( EFalse );
+ column->EnableMarqueeL( ETrue );
+ // Create search field popup
+ iSearchField = CAknSearchField::NewL(
+ *this, CAknSearchField::EPopup, NULL, KMaxFileName );
+ iSearchField->MakeVisible( EFalse );
+ iSearchField->SetSkinEnabledL( ETrue );
+ CCoeEnv::Static()->AddFocusObserverL( *this );
+ CleanupStack::Pop( listBox );
+ return listBox;
+ }
+ default:
+ {
+ User::Leave( KErrGeneral );
+ break;
+ }
+ }
+
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::~CFileManagerFileListContainer
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileListContainer::~CFileManagerFileListContainer()
+ {
+ CCoeEnv::Static()->RemoveFocusObserver( *this );
+
+ if ( ListBoxExists() )
+ {
+ // before we destroy listbox in base class,
+ // we have to set icon array to NULL
+ // because we want to let document class own the icon array
+ if ( iType == EListMain )
+ {
+ CAknDoubleLargeStyleListBox& listBox =
+ static_cast< CAknDoubleLargeStyleListBox& >( ListBox() );
+ listBox.ItemDrawer()->ColumnData()->SetIconArray( NULL );
+ }
+ else
+ {
+ CAknColumnListBox& listBox =
+ static_cast< CAknColumnListBox& >( ListBox() );
+ listBox.ItemDrawer()->ColumnData()->SetIconArray( NULL );
+ }
+ }
+ delete iSearchField;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::OfferKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerFileListContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse response = OfferSearchKeyEventL( aKeyEvent, aType );
+
+ response = ListBox().OfferKeyEventL( aKeyEvent, aType );
+ /* if ( response == EKeyWasConsumed )
+ {
+ return response;
+ }*/
+ switch( aKeyEvent.iCode )
+ {
+ case EKeyEnter: // FALLTHROUH
+ case EKeyOK:
+ {
+ /* indexOfMSK++;
+ iAppUi->ProcessCommandL( EFileManagerSelectionKey );
+ response = EKeyWasConsumed;*/
+ break;
+ }
+ case EKeyDelete: // FALLTHROUGH
+ case EKeyBackspace:
+ {
+ iAppUi->ProcessCommandL( EFileManagerDelete );
+ response = EKeyWasConsumed;
+ break;
+ }
+ case EKeyLeftArrow: // FALLTHROUGH
+ case EKeyRightArrow:
+ {
+ if ( iRightLeftNaviSupported )
+ {
+ // Depth navigation using arrows
+ TInt commandId( EAknSoftkeyBack );
+ if ( aKeyEvent.iCode == EKeyRightArrow )
+ {
+ commandId = EFileManagerOpen;
+ }
+ iAppUi->ProcessCommandL( commandId );
+ response = EKeyWasConsumed;
+ }
+ break;
+ }
+ case EKeyYes:
+ {
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ // Touch uses just the default functionality
+ response = ListBox().OfferKeyEventL( aKeyEvent, aType );
+ }
+ else
+ {
+ iAppUi->ProcessCommandL( EFileManagerSend );
+ response = EKeyWasConsumed;
+ }
+ break;
+ }
+ default:
+ {
+ // response = ListBox().OfferKeyEventL( aKeyEvent, aType );
+ break;
+ }
+ }
+ return response;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::SetListEmptyL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::SetListEmptyL()
+ {
+ if ( IsSearchFieldVisible() )
+ {
+ iSearchField->GetSearchText( iSearchText );
+ iSearchFieldAfterRefresh = ETrue;
+ EnableSearchFieldL( EFalse );
+ }
+ CFileManagerContainerBase::SetListEmptyL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::RefreshListL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::RefreshListL( TInt aFocusedIndex )
+ {
+ iDocument->ClearStringCache();
+ SetTextArray( iDocument->FileList() );
+ CFileManagerContainerBase::RefreshListL( aFocusedIndex );
+ if ( iSearchFieldAfterRefresh )
+ {
+ iSearchFieldAfterRefresh = EFalse;
+ EnableSearchFieldL( ETrue, iSearchText );
+ }
+ // Inform user about OOM, suppress other errors
+ TInt err( iDocument->LastError() );
+ if ( err == KErrNoMemory )
+ {
+ ControlEnv()->HandleError( KErrNoMemory );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::HandleControlEventL
+// From MCoeControlObserver, called by current listbox
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::HandleControlEventL(
+ CCoeControl* /* aControl*/, TCoeEvent aEventType )
+ {
+ if ( aEventType == EEventStateChanged )
+ {
+ iAppUi->ProcessCommandL( EFileManagerCheckMark ); // Inform change
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CItemDrawer::CItemDrawer
+//-----------------------------------------------------------------------------
+//
+CFileManagerFileListContainer::CItemDrawer::CItemDrawer(
+ CTextListBoxModel* aTextListBoxModel,
+ const CFont* aFont,
+ CColumnListBoxData* aColumnData,
+ CFileManagerFileListContainer& aContainer ) :
+ CColumnListBoxItemDrawer(
+ aTextListBoxModel, aFont, aColumnData ),
+ iContainer( aContainer )
+ {
+ }
+
+//-----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CItemDrawer::Properties
+//-----------------------------------------------------------------------------
+//
+TListItemProperties CFileManagerFileListContainer::CItemDrawer::Properties(
+ TInt aItemIndex ) const
+ {
+ aItemIndex = iContainer.SearchFieldToListIndex( aItemIndex );
+ TListItemProperties prop(
+ CColumnListBoxItemDrawer::Properties( aItemIndex ) );
+ // Do not allow folder marking
+ if ( iContainer.iDocument->Engine().IsFolder( aItemIndex ) )
+ {
+ prop.SetHiddenSelection( ETrue );
+ }
+ return prop;
+ }
+
+//-----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CListBox::CListBox
+//-----------------------------------------------------------------------------
+//
+CFileManagerFileListContainer::CListBox::CListBox(
+ CFileManagerFileListContainer& aContainer ) :
+ CAknSingleGraphicStyleListBox(),
+ iContainer( aContainer )
+ {
+ }
+
+//-----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CListBox::CreateItemDrawerL
+//-----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::CListBox::CreateItemDrawerL()
+ {
+ CColumnListBoxData* data = CColumnListBoxData::NewL();
+ CleanupStack::PushL( data );
+ iItemDrawer = new ( ELeave ) CFileManagerFileListContainer::CItemDrawer(
+ Model(),
+ iEikonEnv->NormalFont(),
+ data,
+ iContainer );
+ CleanupStack::Pop( data );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::UpdateCba
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::UpdateCba()
+ {
+ iAppUi->NotifyCbaUpdate();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::HandlePointerEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::HandlePointerEventL(
+ const TPointerEvent &aPointerEvent )
+ {
+ if ( !iRightLeftNaviSupported )
+ {
+ CCoeControl::HandlePointerEventL( aPointerEvent );
+ return;
+ }
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ return;
+ }
+ TBool consumed( EFalse );
+ switch ( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ iDragStartPoint = aPointerEvent.iPosition;
+ iDragging = EFalse;
+ break;
+ }
+ case TPointerEvent::EDrag:
+ {
+ iDragging = ETrue;
+ break;
+ }
+ case TPointerEvent::EButton1Up:
+ {
+ if ( iDragging )
+ {
+ iDragging = EFalse;
+ // Solve drag direction and convert touch gesture to key event
+ TInt xDelta( iDragStartPoint.iX - aPointerEvent.iPosition.iX );
+ TInt keyCode( EKeyNull );
+ if ( xDelta < -KTouchGestureThreshold )
+ {
+ keyCode = EKeyRightArrow;
+ }
+ else if ( xDelta > KTouchGestureThreshold )
+ {
+ keyCode = EKeyLeftArrow;
+ }
+ if ( keyCode != EKeyNull )
+ {
+ TKeyEvent keyEvent;
+ keyEvent.iCode = keyCode;
+ keyEvent.iScanCode = EStdKeyNull;
+ keyEvent.iModifiers = 0;
+ keyEvent.iRepeats = 1;
+ OfferKeyEventL( keyEvent, EEventKey );
+ consumed = ETrue;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ iDragging = EFalse;
+ break;
+ }
+ }
+ if ( !consumed )
+ {
+ CCoeControl::HandlePointerEventL( aPointerEvent );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::SizeChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::SizeChanged()
+ {
+ if ( iSearchField )
+ {
+ AknFind::HandlePopupFindSizeChanged( this, &ListBox(), iSearchField );
+ }
+ else
+ {
+ CFileManagerContainerBase::SizeChanged();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::CountComponentControls
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileListContainer::CountComponentControls() const
+ {
+ TInt ret( CFileManagerContainerBase::CountComponentControls() );
+ if ( iSearchField )
+ {
+ ++ret;
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ComponentControl
+//
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CFileManagerFileListContainer::ComponentControl( TInt aIndex ) const
+ {
+ if ( aIndex < CFileManagerContainerBase::CountComponentControls() )
+ {
+ return CFileManagerContainerBase::ComponentControl( aIndex );
+ }
+ if ( aIndex < CountComponentControls() )
+ {
+ return iSearchField;
+ }
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxCurrentItemIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileListContainer::ListBoxCurrentItemIndex()
+ {
+ return SearchFieldToListIndex( ListBox().CurrentItemIndex() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxNumberOfItems
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileListContainer::ListBoxNumberOfItems()
+ {
+ if ( IsSearchFieldVisible() )
+ {
+ return static_cast< CAknFilteredTextListBoxModel* >(
+ ListBox().Model() )->Filter()->FilteredNumberOfItems();
+ }
+ return CFileManagerContainerBase::ListBoxNumberOfItems();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxSelectionIndexes
+//
+// -----------------------------------------------------------------------------
+//
+const CArrayFix< TInt >* CFileManagerFileListContainer::ListBoxSelectionIndexes()
+ {
+ if ( IsSearchFieldVisible() )
+ {
+ CAknListBoxFilterItems* filter =
+ static_cast< CAknFilteredTextListBoxModel* >(
+ ListBox().Model() )->Filter();
+
+ if ( filter )
+ {
+ TRAPD( err, filter->UpdateSelectionIndexesL() );
+ if ( err == KErrNone )
+ {
+ return filter->SelectionIndexes();
+ }
+ }
+ return NULL;
+ }
+ return CFileManagerContainerBase::ListBoxSelectionIndexes();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxSelectionIndexesCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileListContainer::ListBoxSelectionIndexesCount()
+ {
+ if ( IsSearchFieldVisible() )
+ {
+ CAknListBoxFilterItems* filter =
+ static_cast< CAknFilteredTextListBoxModel* >(
+ ListBox().Model() )->Filter();
+
+ if ( filter )
+ {
+ TRAPD( err, filter->UpdateSelectionIndexesL() );
+ if ( err == KErrNone )
+ {
+ return filter->SelectionIndexes()->Count();
+ }
+ }
+ return 0;
+ }
+ return CFileManagerContainerBase::ListBoxSelectionIndexesCount();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxToggleItemL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::ListBoxToggleItemL( TInt aIndex )
+ {
+ aIndex = ListToSearchFieldIndex( aIndex );
+ CFileManagerContainerBase::ListBoxToggleItemL( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxIsItemSelected
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFileListContainer::ListBoxIsItemSelected( TInt aIndex )
+ {
+ aIndex = ListToSearchFieldIndex( aIndex );
+ return CFileManagerContainerBase::ListBoxIsItemSelected( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::SearchFieldToListIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileListContainer::SearchFieldToListIndex( TInt aIndex )
+ {
+ if ( IsSearchFieldVisible() && aIndex >= 0 )
+ {
+ aIndex = static_cast< CAknFilteredTextListBoxModel* >(
+ ListBox().Model() )->Filter()->FilteredItemIndex( aIndex );
+ }
+ return aIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListToSearchFieldIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileListContainer::ListToSearchFieldIndex( TInt aIndex )
+ {
+ if ( IsSearchFieldVisible() && aIndex >= 0 )
+ {
+ aIndex = static_cast< CAknFilteredTextListBoxModel* >(
+ ListBox().Model() )->Filter()->VisibleItemIndex( aIndex );
+ }
+ return aIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxSetTextL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::ListBoxSetTextL( const TDesC& aText )
+ {
+ EnableSearchFieldL( EFalse );
+ CFileManagerContainerBase::ListBoxSetTextL( aText );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxSetTextL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::PageScrollL( TBool aUp )
+ {
+ CEikListBox& listBox( ListBox() );
+ TInt numItems( listBox.Model()->NumberOfItems() );
+
+ if ( numItems > 0 )
+ {
+ TInt lastIndex( numItems - 1 );
+ if ( !aUp && listBox.View()->BottomItemIndex() == lastIndex )
+ {
+ listBox.SetCurrentItemIndex( lastIndex );
+ }
+ else
+ {
+ CListBoxView::TCursorMovement move( aUp ?
+ CListBoxView::ECursorPrevScreen :
+ CListBoxView::ECursorNextScreen );
+ listBox.View()->MoveCursorL( move, CListBoxView::ENoSelection );
+ listBox.SetCurrentItemIndex( listBox.CurrentItemIndex() );
+ }
+ DrawDeferred();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::IsSearchFieldVisible
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFileListContainer::IsSearchFieldVisible() const
+ {
+ return ( iSearchField && iSearchField->IsVisible() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::EnableSearchFieldL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::EnableSearchFieldL(
+ TBool aEnable, const TDesC& aSearchText )
+ {
+ if ( !iSearchField )
+ {
+ return;
+ }
+
+ CEikListBox& listBox( ListBox() );
+ CAknFilteredTextListBoxModel* filteredModel =
+ static_cast< CAknFilteredTextListBoxModel* >( listBox.Model() );
+
+ if ( aEnable )
+ {
+ if ( !iSearchField->IsVisible() && listBox.Model()->NumberOfItems() )
+ {
+ iIndexAfterSearch = listBox.CurrentItemIndex();
+ iSearchField->SetSearchTextL( aSearchText );
+ if ( !filteredModel->Filter() )
+ {
+ filteredModel->CreateFilterL( &listBox, iSearchField );
+ }
+ filteredModel->Filter()->HandleItemArrayChangeL();
+ iSearchField->MakeVisible( ETrue );
+ iSearchField->SetFocus( ETrue );
+ iSearchFieldEnabled = ETrue;
+ }
+ }
+ else
+ {
+ iSearchFieldEnabled = EFalse;
+ iSearchField->SetFocus( EFalse );
+ iSearchField->MakeVisible( EFalse );
+ iSearchField->ResetL();
+ filteredModel->RemoveFilter();
+ SetIndex( iIndexAfterSearch );
+ }
+
+ SizeChanged();
+ UpdateCba();
+ DrawDeferred();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::SetCurrentItemIndexAfterSearch
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::SetCurrentItemIndexAfterSearch(
+ TInt aIndex )
+ {
+ iIndexAfterSearch = aIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::HandleChangeInFocus
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::HandleChangeInFocus()
+ {
+ // Update softkeys after search field has been canceled
+ if ( ListBoxExists() &&
+ IsFocused() &&
+ iSearchFieldEnabled &&
+ iSearchField &&
+ !iSearchField->IsVisible() )
+ {
+ CAknFilteredTextListBoxModel* filteredModel =
+ static_cast< CAknFilteredTextListBoxModel* >( ListBox().Model() );
+ iSearchFieldEnabled = EFalse;
+ TRAP_IGNORE( iSearchField->ResetL() );
+ filteredModel->RemoveFilter();
+ SetIndex( iIndexAfterSearch );
+ UpdateCba();
+ DrawDeferred();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::HandleDestructionOfFocusedItem
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::HandleDestructionOfFocusedItem()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::OfferSearchKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerFileListContainer::OfferSearchKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ if ( !iSearchField || aKeyEvent.iScanCode == EStdKeyYes )
+ {
+ return EKeyWasNotConsumed;
+ }
+ // Open search field on alpha digit
+ TBool isVisible( iSearchField->IsVisible() );
+ if ( !isVisible &&
+ aType == EEventKeyDown &&
+ aKeyEvent.iScanCode )
+ {
+ TChar ch( aKeyEvent.iScanCode );
+ if ( ch.IsAlphaDigit() )
+ {
+ EnableSearchFieldL( ETrue );
+ return EKeyWasConsumed;
+ }
+ }
+ // Close search field on clear-button if it's empty
+ else if ( isVisible && aKeyEvent.iCode == EKeyBackspace )
+ {
+ iSearchField->GetSearchText( iSearchText );
+ if ( !iSearchText.Length() )
+ {
+ EnableSearchFieldL( EFalse );
+ return EKeyWasConsumed;
+ }
+ }
+ if ( isVisible )
+ {
+ TKeyResponse response( iSearchField->OfferKeyEventL( aKeyEvent, aType ) );
+ UpdateCba();
+ if ( response == EKeyWasConsumed )
+ {
+ return response;
+ }
+ }
+ if ( !iOwnFastScrollDisabled )
+ {
+ if ( aKeyEvent.iCode == EKeyUpArrow && aKeyEvent.iRepeats > 0 )
+ {
+ PageScrollL( ETrue );
+ return EKeyWasConsumed;
+ }
+ if ( aKeyEvent.iCode == EKeyDownArrow && aKeyEvent.iRepeats > 0 )
+ {
+ PageScrollL( EFalse );
+ return EKeyWasConsumed;
+ }
+ }
+ return EKeyWasNotConsumed;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxSelectItemL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::ListBoxSelectItemL( TInt aIndex )
+ {
+ aIndex = ListToSearchFieldIndex( aIndex );
+ CFileManagerContainerBase::ListBoxSelectItemL( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileListContainer::ListBoxDeselectItem
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileListContainer::ListBoxDeselectItem( TInt aIndex )
+ {
+ aIndex = ListToSearchFieldIndex( aIndex );
+ CFileManagerContainerBase::ListBoxDeselectItem( aIndex );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerFileSelectionFilter.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2002-2006 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: Filters PlatSec dirs from file selection
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <f32file.h>
+#include "CFileManagerFileSelectionFilter.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerCommonDefinitions.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CFileManagerFileSelectionFilter::CFileManagerFileSelectionFilter
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileSelectionFilter::CFileManagerFileSelectionFilter(
+ CFileManagerEngine& aEngine )
+ : iEngine( aEngine )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSelectionFilter::Accept
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFileSelectionFilter::Accept( const TDesC& aDriveAndPath,
+ const TEntry& aEntry ) const
+ {
+ if ( aEntry.IsHidden() || aEntry.IsSystem() )
+ {
+ return EFalse;
+ }
+ if ( !aEntry.IsDir() )
+ {
+ return ETrue;
+ }
+ HBufC* fullPath = HBufC::New( KMaxPath );
+ if ( !fullPath )
+ {
+ return EFalse;
+ }
+ TPtr ptr( fullPath->Des() );
+ ptr.Copy( aDriveAndPath );
+ ptr.Append( aEntry.iName );
+ ptr.Append( KFmgrBackslash );
+ TBool isVisible( !iEngine.IsSystemFolder( ptr ) );
+ delete fullPath;
+ return isVisible;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerFoldersView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,485 @@
+/*
+* Copyright (c) 2002-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: View for folder
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <akntitle.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <barsread.h>
+#include <aknlists.h>
+#include <AknsConstants.h>
+#include <AknInfoPopupNoteController.h>
+#include <csxhelp/fmgr.hlp.hrh>
+#include <CFileManagerEngine.h>
+#include <FileManager.rsg>
+#include <FileManagerView.rsg>
+#include <TFileManagerDriveInfo.h>
+#include <CFileManagerCommonDefinitions.h>
+#include <FileManagerDebug.h>
+#include "CFileManagerFoldersView.h"
+#include "CFileManagerFileListContainer.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "Cfilemanagerfoldernavigationpane.h"
+#include "FileManager.hrh"
+#include "FileManagerUID.h"
+
+// CONSTANTS
+const TUid CFileManagerFoldersView::KOpenFromSearchResultsView =
+ { EOpenFromSearchResultsView };
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::CFileManagerFoldersView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFoldersView::CFileManagerFoldersView()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::ConstructL()
+ {
+ CFileManagerViewBase::ConstructL( R_FILEMANAGER_FOLDERS_VIEW );
+
+ CEikStatusPane* sp = StatusPane();
+
+ iNaviPane = static_cast< CAknNavigationControlContainer* >
+ ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+
+ iPopupController = CAknInfoPopupNoteController::NewL();
+ iPopupController->SetTimeDelayBeforeShow( 0 );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFoldersView* CFileManagerFoldersView::NewLC()
+ {
+ CFileManagerFoldersView* self = new( ELeave ) CFileManagerFoldersView;
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::~CFileManagerFoldersView
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerFoldersView::~CFileManagerFoldersView()
+ {
+ delete iPopupController;
+ delete iNaviDecorator;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::Id
+//
+// -----------------------------------------------------------------------------
+//
+TUid CFileManagerFoldersView::Id() const
+ {
+ return CFileManagerAppUi::KFileManagerFoldersViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::CreateContainerL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerContainerBase* CFileManagerFoldersView::CreateContainerL()
+ {
+ return CFileManagerFileListContainer::NewL(
+ ClientRect(),
+ iIndex,
+ CFileManagerFileListContainer::EListFolder,
+ R_QTN_SELEC_EMPTY_LIST,
+ KFMGR_HLP_MEM_STORE_VIEW );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::DoActivateL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ if ( aCustomMessageId == KOpenFromSearchResultsView )
+ {
+ iInitialFolderDepth = iEngine.FolderLevel();
+ }
+ else
+ {
+ // Check embedded app exit
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->ExitEmbeddedAppIfNeededL();
+
+ iInitialFolderDepth = 1; // First folder view level
+ }
+
+ CFileManagerViewBase::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ TResourceReader reader;
+ iCoeEnv->CreateResourceReaderLC( reader, R_FILEMANAGER_FOLDER_NAVIGATION_PANE );
+ iNaviControl = CFileManagerFolderNavigationPane::NewL( iEngine.Memory(), 0, reader );
+ CleanupStack::PopAndDestroy(); // reader
+
+ iNaviControl->SetObserver( this );
+
+ iNaviDecorator = CAknNavigationDecorator::NewL( iNaviPane, iNaviControl );
+ iNaviDecorator->SetContainerWindowL( *iNaviPane );
+ iNaviPane->PushL( *iNaviDecorator );
+
+ RefreshTitleL();
+ iEngine.SetState( CFileManagerEngine::ENavigation );
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::DoDeactivate
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::DoDeactivate()
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoDeactivate();
+
+ iNaviPane->Pop( iNaviDecorator );
+ delete iNaviDecorator;
+ iNaviDecorator = NULL;
+ iNaviControl = NULL; // Not owned and deleted by decorator
+
+ iPopupController->HideInfoPopupNote();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::RefreshTitleL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::RefreshTitleL()
+ {
+ static_cast< CFileManagerAppUi* >( AppUi() )->SetTitleL(
+ iEngine.LocalizedNameOfCurrentDirectory() );
+
+ if ( iNaviControl ) // May be deleted by view deactivation
+ {
+ iNaviControl->ChangeRootL( iEngine.Memory() );
+ iNaviControl->SetFolderDepth( iEngine.FolderLevel() );
+ }
+
+ iNaviPane->DrawDeferred();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::HandleCommandL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EAknSoftkeyBack:
+ {
+ BackstepL();
+ break;
+ }
+ case EFileManagerOpen:
+ {
+ iPopupController->HideInfoPopupNote();
+ CFileManagerViewBase::CmdOpenL();
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::DirectoryChangedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::DirectoryChangedL()
+ {
+ FUNC_LOG
+
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+
+ if ( iEngine.FolderLevel() < iInitialFolderDepth || !iContainer )
+ {
+ appUi->CloseFoldersViewL();
+ }
+ else
+ {
+ if ( !appUi->IsSearchViewOpen() )
+ {
+ appUi->ExitEmbeddedAppIfNeededL();
+ }
+ TInt usb_err(KErrNone);
+ TRAP( usb_err,RefreshDriveInfoL() );
+ if (usb_err != KErrNone)
+ {
+ usbWrongRemoved = ETrue;
+ HBufC* error = StringLoader::LoadLC(R_QTN_SELEC_EMPTY_LIST);
+
+ if (iContainer)
+ {
+ iContainer->ListBoxSetTextL(*error);
+ }
+ CleanupStack::PopAndDestroy(error);
+ }
+ else
+ {
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ //User::Leave(KErrPathNotFound);
+ HBufC* error = StringLoader::LoadLC(R_QTN_SELEC_EMPTY_LIST);
+
+ if (iContainer)
+ {
+ iContainer->ListBoxSetTextL(*error);
+ }
+ CleanupStack::PopAndDestroy(error);
+ }
+ else
+ {
+ usbWrongRemoved = EFalse;
+ TInt index( iEngine.CurrentIndex() );
+ if ( index != KErrNotFound )
+ {
+ iContainer->RefreshListL( index );
+ }
+ else
+ {
+ iContainer->RefreshListL( iIndex );
+ }
+
+ }
+ }
+ RefreshTitleL();
+ iFolderDepth = iEngine.FolderLevel();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFoldersView::HandleResourceChangeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::HandleResourceChangeL( TInt aType )
+ {
+ if ( iNaviControl ) // May be deleted by view deactivation
+ {
+ iNaviControl->HandleResourceChangeL( aType );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFoldersView::UpdateCbaL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::UpdateCbaL()
+ {
+ UpdateCommonCbaL();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFoldersView::BackstepL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::BackstepL(
+ TInt aBacksteps )
+ {
+
+
+
+ if ( usbWrongRemoved )
+ {
+ CFileManagerAppUi* appUi = static_cast<CFileManagerAppUi*> (AppUi());
+ usbWrongRemoved = EFalse;
+ iFolderDepth = 0;
+ iIndex = 0;
+ appUi->CloseFoldersViewL();
+ }
+ else
+ {
+ if (iActiveProcess != ENoProcess)
+ {
+ return; // Ignore to avoid container mess up
+ }
+
+ iPopupController->HideInfoPopupNote();
+ CFileManagerAppUi* appUi = static_cast<CFileManagerAppUi*> (AppUi());
+ TInt level(iEngine.FolderLevel());
+
+ while ( aBacksteps > 0 )
+ {
+ if ( level < iInitialFolderDepth )
+ {
+ break;
+ }
+ TRAP_IGNORE( iEngine.BackstepL() );
+ --level;
+ --aBacksteps;
+ }
+
+ if ( !appUi->IsSearchViewOpen() )
+ {
+ appUi->ExitEmbeddedAppIfNeededL();
+ }
+
+ if (level < iInitialFolderDepth)
+ {
+ iFolderDepth = 0;
+ iIndex = 0;
+ appUi->CloseFoldersViewL();
+ }
+ else
+ {
+ iEngine.SetObserver(this);
+ iEngine.RefreshDirectory();
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFoldersView::FolderName
+//
+// ------------------------------------------------------------------------------
+//
+TPtrC CFileManagerFoldersView::FolderName( const TInt aLevel )
+ {
+ if ( !aLevel )
+ {
+ // Get memory store name
+ return iEngine.CurrentDriveName();
+ }
+
+ // Get folder name
+ TPtrC dir( iEngine.CurrentDirectory() );
+ TInt drive = TDriveUnit( dir );
+ TPtrC root( iEngine.DriveRootDirectory( drive ) );
+ TInt count( dir.Length() );
+ TInt bsCount( 0 );
+
+ for ( TInt i( root.Length() ); i < count; )
+ {
+ TPtrC ptr( dir.Mid( i ) );
+ TInt j( ptr.Locate( KFmgrBackslash()[ 0 ] ) );
+ if ( j != KErrNotFound )
+ {
+ ++bsCount;
+ if ( bsCount == aLevel )
+ {
+ // Use localised folder name if it exists
+ TPtrC locName( iEngine.LocalizedName( dir.Left(
+ i + j + 1 ) ) );
+ if ( locName.Length() )
+ {
+ return locName;
+ }
+ return TPtrC( ptr.Left( j ) );
+ }
+ }
+ else
+ {
+ break;
+ }
+ i += j + 1;
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFoldersView::HandleFolderNaviEventL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerFoldersView::HandleFolderNaviEventL(
+ TNaviEvent aEvent, TInt aValue )
+ {
+ switch ( aEvent )
+ {
+ case ENaviTapDown:
+ {
+ iPopupController->HideInfoPopupNote();
+ break;
+ }
+ case ENaviTapUp:
+ {
+ if ( aValue != KErrNotFound )
+ {
+ TInt level( iEngine.FolderLevel() );
+ if ( level > aValue )
+ {
+ BackstepL( level - aValue );
+ }
+ }
+ break;
+ }
+ case ENaviLongTap:
+ {
+ if ( aValue != KErrNotFound )
+ {
+ TPtrC folder( FolderName( aValue ) );
+ if ( folder.Length() )
+ {
+ iPopupController->SetTextL( folder );
+ iPopupController->ShowInfoPopupNote();
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerMainView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,924 @@
+/*
+* Copyright (c) 2006-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: Main view
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+#include <CFileManagerEngine.h>
+#include <CFileManagerItemProperties.h>
+#include <FileManager.rsg>
+#include <csxhelp/fmgr.hlp.hrh>
+#include <FileManagerDlgUtils.h>
+#include <FileManagerDebug.h>
+#include <CFileManagerFeatureManager.h>
+#include <coreapplicationuisdomainpskeys.h>
+#include <StringLoader.h>
+#include <cmemstatepopup.h>
+#include "CFileManagerMainView.h"
+#include "CFileManagerFileListContainer.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "FileManager.hrh"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CFileManagerMainView
+// ----------------------------------------------------------------------------
+//
+CFileManagerMainView::CFileManagerMainView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::NewLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerMainView* CFileManagerMainView::NewLC()
+ {
+ CFileManagerMainView* self = new( ELeave ) CFileManagerMainView();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::ConstructL()
+ {
+ CFileManagerViewBase::ConstructL(
+ FeatureManager().IsEmbedded() ?
+ R_FILEMANAGER_MAIN_VIEW_EMBEDDED :
+ R_FILEMANAGER_MAIN_VIEW );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::~CFileManagerMainView
+// ----------------------------------------------------------------------------
+//
+CFileManagerMainView::~CFileManagerMainView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::DoActivateL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoActivateL(
+ aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ // Ensure that no directory is defined
+ if ( iEngine.CurrentDirectory().Length() )
+ {
+ TInt count( iEngine.NavigationLevel() );
+ ++count;
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ TRAP_IGNORE( iEngine.BackstepL() );
+ }
+ }
+
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->RestoreDefaultTitleL();
+ iEngine.SetState( CFileManagerEngine::ENavigation );
+ iEngine.SetObserver( this );
+ appUi->ExitEmbeddedAppIfNeededL();
+ if ( !appUi->WaitingForInputParams() )
+ {
+ iEngine.RefreshDirectory();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::DoDeactivate
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::DoDeactivate()
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoDeactivate();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::DirectoryChangedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::DirectoryChangedL()
+ {
+ FUNC_LOG
+
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+
+ if ( iContainer && !appUi->WaitingForInputParams() )
+ {
+ iContainer->RefreshListL( iIndex );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::Id
+// ----------------------------------------------------------------------------
+//
+TUid CFileManagerMainView::Id() const
+ {
+ return CFileManagerAppUi::KFileManagerMainViewId;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CreateContainerL
+// ----------------------------------------------------------------------------
+//
+CFileManagerContainerBase* CFileManagerMainView::CreateContainerL()
+ {
+ return CFileManagerFileListContainer::NewL(
+ ClientRect(),
+ iIndex,
+ CFileManagerFileListContainer::EListMain,
+ R_QTN_SELEC_EMPTY_LIST,
+ KFMGR_HLP_MAIN_VIEW );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::DynInitMenuPaneL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane)
+ {
+ switch( aResourceId )
+ {
+ // These menus are used only by main view
+ case R_FILEMANAGER_MAIN_VIEW_MENU:
+ {
+ MainMenuFilteringL( *aMenuPane );
+ break;
+ }
+ case R_FILEMANAGER_REMOTE_DRIVES_MENU:
+ {
+ RemoteDrivesMenuFilteringL( *aMenuPane );
+ break;
+ }
+ case R_FILEMANAGER_MEMORY_STORAGE_MENU:
+ {
+ MemoryStorageMenuFilteringL( *aMenuPane );
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::DynInitMenuPaneL( aResourceId, aMenuPane );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::MainMenuFilteringL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::MainMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ RemoteDriveCommonFilteringL( aMenuPane );
+
+ if ( !iContainer->ListBoxNumberOfItems() )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerEject, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerFindFile, ETrue );
+#ifndef RD_FILE_MANAGER_BACKUP
+ aMenuPane.SetItemDimmed( EFileManagerBackup, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRestore, ETrue );
+#endif // RD_FILE_MANAGER_BACKUP
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorage, ETrue );
+ return;
+ }
+
+ if ( !FeatureManager().IsRemoteStorageFwSupported() )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerRemoveDrives, ETrue );
+ }
+
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC(
+ iContainer->ListBoxCurrentItemIndex() );
+ TUint32 drvState( 0 );
+ if ( prop->IsDrive() )
+ {
+ iEngine.DriveState( drvState, prop->FullPath() );
+ }
+
+ TFileManagerDriveInfo drvInfo;
+ if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+ {
+ // No drive selected
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorage, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerEject, ETrue );
+ }
+ else
+ {
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveEjectable ) ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerEject, ETrue );
+ }
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable ) &&
+ !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorage, ETrue );
+ }
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorage, ETrue );
+ }
+ }
+
+#ifndef RD_FILE_MANAGER_BACKUP
+ TFileManagerDriveInfo mmcinfo( iEngine.GetMMCInfoL() );
+ if ( mmcinfo.iState & ( TFileManagerDriveInfo::EDriveLocked |
+ TFileManagerDriveInfo::EDriveCorrupted ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerBackup, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRestore, ETrue );
+ }
+ else if ( !( mmcinfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerBackup, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRestore, ETrue );
+ }
+ else if ( !( mmcinfo.iState & TFileManagerDriveInfo::EDriveBackupped ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerRestore, ETrue );
+ }
+ if ( FeatureManager().IsEmbedded() )
+ {
+ // Disable backup in embedded mode, because it messes up
+ // backup and restore operations since embedded apps are closed.
+ aMenuPane.SetItemDimmed( EFileManagerBackup, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRestore, ETrue );
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+ CleanupStack::PopAndDestroy( prop );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::RemoteDrivesMenuFilteringL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::RemoteDrivesMenuFilteringL(
+ CEikMenuPane& aMenuPane )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+ TUint32 drvState( 0 );
+ if ( iEngine.DriveState( drvState, prop->FullPath() ) == KErrNone )
+ {
+ if ( !( drvState & TFileManagerDriveInfo::EDriveRemote ) ||
+ ( drvState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ aMenuPane.SetItemDimmed(
+ EFileManagerRemoveDrivesSettings, ETrue );
+ aMenuPane.SetItemDimmed(
+ EFileManagerRemoveDrivesDelete, ETrue );
+ }
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerRemoveDrivesSettings, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRemoveDrivesDelete, ETrue );
+ }
+ CleanupStack::PopAndDestroy( prop );
+ TBool dimAll( EFalse );
+ if ( !FeatureManager().IsRemoteStorageFwSupported() )
+ {
+ dimAll = ETrue;
+ }
+ else
+ {
+ if ( drvState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ if ( drvState & TFileManagerDriveInfo::EDriveConnected )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive,ETrue );
+ }
+ }
+ else
+ {
+ dimAll = ETrue;
+ }
+ }
+
+ if ( dimAll )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::HandleCommandL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EFileManagerOpen:
+ {
+ CmdOpenMemoryStoreL();
+ break;
+ }
+ case EFileManagerEject:
+ {
+ CmdEjectL();
+ break;
+ }
+#ifndef RD_FILE_MANAGER_BACKUP
+ case EFileManagerBackup:
+ {
+ CmdBackupL();
+ break;
+ }
+ case EFileManagerRestore:
+ {
+ CmdRestoreL();
+ break;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ case EFileManagerRemoveDrivesMapDrive:
+ {
+ CmdMapRemoteDriveL();
+ break;
+ }
+ case EFileManagerRemoveDrivesSettings:
+ {
+ CmdRemoteDriveSettingsL();
+ break;
+ }
+ case EFileManagerDelete: // Fall through
+ case EFileManagerRemoveDrivesDelete:
+ {
+ CmdRemoteDriveDeleteL();
+ break;
+ }
+ case EFileManagerSend: // Suppress
+ {
+ break;
+ }
+ case EFileManagerMemoryStorageDetails:
+ {
+ CmdMemoryStorageDetailsL();
+ break;
+ }
+ case EFileManagerMemoryStorageName:
+ case EFileManagerMemoryStorageRename: // Fall through
+ {
+ CmdRenameDriveL();
+ break;
+ }
+ case EFileManagerMemoryStorageFormat:
+ {
+ CmdFormatDriveL();
+ break;
+ }
+ case EFileManagerMemoryStorageSetPassword:
+ {
+ CmdSetDrivePasswordL();
+ break;
+ }
+ case EFileManagerMemoryStorageChangePassword:
+ {
+ CmdChangeDrivePasswordL();
+ break;
+ }
+ case EFileManagerMemoryStorageRemovePassword:
+ {
+ CmdRemoveDrivePasswordL();
+ break;
+ }
+ case EFileManagerMemoryStorageUnlock:
+ {
+ CmdUnlockDriveL();
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CmdOpenMemoryStoreL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdOpenMemoryStoreL()
+ {
+ StoreIndex();
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( index >= 0 )
+ {
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+
+ TRAPD( err, iEngine.OpenL( index ) );
+ if ( err == KErrNone && prop->FullPath().Length() )
+ {
+ appUi->ActivateMemoryStoreViewL();
+ }
+ CleanupStack::PopAndDestroy( prop );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CmdEjectL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdEjectL()
+ {
+ StoreIndex();
+
+#ifdef RD_MULTIPLE_DRIVE
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+ TInt drive( prop->DriveId() );
+ const TInt KDriveShift = 16;
+
+ // Let SysAp handle eject
+ RProperty::Set(
+ KPSUidCoreApplicationUIs,
+ KCoreAppUIsMmcRemovedWithoutEject,
+ ECoreAppUIsEjectCommandUsedToDrive | ( drive << KDriveShift )
+ );
+
+ CleanupStack::PopAndDestroy( prop );
+#else // RD_MULTIPLE_DRIVE
+ if ( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( R_QTN_CONF_EJECT ) )
+ {
+ StartProcessL( EEjectProcess );
+ }
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+#ifndef RD_FILE_MANAGER_BACKUP
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CmdBackupL
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdBackupL()
+ {
+ StoreIndex();
+ TInt textId( R_QTN_CONFIRM_BACKUP_TEXT );
+ TFileManagerDriveInfo mmcinfo( iEngine.GetMMCInfoL() );
+
+ if( mmcinfo.iState & TFileManagerDriveInfo::EDriveBackupped )
+ {
+ textId = R_QTN_CONFIRM_BACKUP_TEXT2;
+ }
+ if( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( textId ) )
+ {
+ if ( !DriveReadOnlyMmcL( mmcinfo.iDrive ) )
+ {
+ if ( !IsDriveAvailable( mmcinfo.iDrive ) ||
+ !CheckPhoneState() )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+ }
+ else
+ {
+ StartProcessL( EBackupProcess );
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CmdRestoreL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdRestoreL()
+ {
+ StoreIndex();
+ if( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( R_QTN_CONFIRM_RESTORE_TEXT ) )
+ {
+ TFileManagerDriveInfo mmcinfo( iEngine.GetMMCInfoL() );
+
+ if ( !IsDriveAvailable( mmcinfo.iDrive ) ||
+ !CheckPhoneState() )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+ }
+ else
+ {
+ StartProcessL( ERestoreProcess );
+ }
+ }
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CmdMapRemoteDriveL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdMapRemoteDriveL()
+ {
+ StoreIndex();
+ const TInt KMaxRemoteDrives = 9;
+ RFs& fs( CCoeEnv::Static()->FsSession() );
+ TDriveList driveList;
+ User::LeaveIfError( fs.DriveList( driveList, KDriveAttRemote ) );
+ TInt numRemote( 0 );
+ TInt count( driveList.Length() );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ if ( driveList[ i ] & KDriveAttRemote )
+ {
+ ++numRemote;
+ }
+ }
+ if ( numRemote < KMaxRemoteDrives )
+ {
+ OpenRemoteDriveSettingsL();
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EErrorIcons,
+ R_QTN_RD_ERROR_MAX_DRIVES );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMainView::CmdRemoteDriveSettingsL
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdRemoteDriveSettingsL()
+ {
+ StoreIndex();
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+ OpenRemoteDriveSettingsL( prop->DriveName() );
+ CleanupStack::PopAndDestroy( prop );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::CmdRemoteDriveDeleteL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdRemoteDriveDeleteL()
+ {
+ StoreIndex();
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+ if ( IsDisconnectedRemoteDrive( *prop ) )
+ {
+ if ( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ R_QTN_RD_QUERY_DELETE_DRIVE, prop->Name() ) )
+ {
+ TInt drv = TDriveUnit( prop->FullPath() );
+ User::LeaveIfError( iEngine.DeleteRemoteDrive( drv ) );
+ }
+ }
+ CleanupStack::PopAndDestroy( prop );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::NotifyL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerMainView::NotifyL(
+ TFileManagerNotify aType, TInt aData, const TDesC& aName )
+ {
+ TInt ret( KErrNone );
+ switch ( aType )
+ {
+#ifdef RD_FILE_MANAGER_BACKUP
+ case ENotifyActionSelected:
+ {
+ if ( aData == EFileManagerBackupAction )
+ {
+ StoreIndex();
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->ActivateBackupViewL();
+ }
+ break;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ default:
+ {
+ ret = CFileManagerViewBase::NotifyL( aType, aData, aName );
+ break;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMainView::MemoryStorageMenuFilteringL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerMainView::MemoryStorageMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ TFileManagerDriveInfo drvInfo;
+ if( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+ {
+ // No drive selected
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageUnlock, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageDetails, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageName, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRename, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageSetPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageChangePassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRemovePassword, ETrue );
+ return;
+ }
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageDetails, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageName, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRename, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageSetPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageChangePassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRemovePassword, ETrue );
+ }
+ else if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable ) ||
+ ( drvInfo.iState & ( TFileManagerDriveInfo::EDriveLocked |
+ TFileManagerDriveInfo::EDriveMassStorage ) ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageName, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRename, ETrue );
+ }
+ else if ( drvInfo.iName.Length() > 0 )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageName, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRename, ETrue );
+ }
+ if (!( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent) )
+ {
+ aMenuPane.SetItemDimmed(EFileManagerMemoryStorageSetPassword, ETrue );
+ aMenuPane.SetItemDimmed(EFileManagerMemoryStorageName, ETrue );
+ aMenuPane.SetItemDimmed(EFileManagerMemoryStorageRename, ETrue );
+ aMenuPane.SetItemDimmed(EFileManagerMemoryStorageDetails, ETrue );
+
+ }
+
+ if ( FeatureManager().IsEmbedded() ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable ) ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+ }
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageDetails, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageSetPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageChangePassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRemovePassword, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageUnlock, ETrue );
+ }
+
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable ) ||
+ ( drvInfo.iState & ( TFileManagerDriveInfo::EDriveMassStorage |
+ TFileManagerDriveInfo::EDriveUsbMemory ) ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageSetPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageChangePassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRemovePassword, ETrue );
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDrivePasswordProtected )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageSetPassword, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageChangePassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageRemovePassword, ETrue );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::CmdMemoryStorageDetailsL
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdMemoryStorageDetailsL()
+ {
+ StoreIndex();
+ TFileManagerDriveInfo drvInfo;
+ TInt drive( DriveInfoAtCurrentPosL( drvInfo ) );
+ if ( drive < 0 )
+ {
+ return; // No drive selected
+ }
+ HBufC* title = StringLoader::LoadLC( R_QTN_FMGR_MSTATE_HEADING );
+ CMemStatePopup::RunLD(
+ static_cast< TDriveNumber >( drive ), *title );
+ CleanupStack::PopAndDestroy( title );
+// TFileManagerDriveInfo drvInfo;
+// iEngine.GetDriveInfoL( iEngine.CurrentDrive(), drvInfo );
+// FileManagerDlgUtils::ShowMemoryStoreInfoPopupL( drvInfo );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::CmdRenameDriveL
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdRenameDriveL()
+ {
+ StoreIndex();
+ TFileManagerDriveInfo drvInfo;
+ if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+ {
+ return; // No drive selected
+ }
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( R_QTN_MEMORYCARD_READONLY );
+ return;
+ }
+ RenameDriveL( EFalse );
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::CmdSetDrivePasswordL
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdSetDrivePasswordL()
+ {
+ StoreIndex();
+ TInt drive( DriveAtCurrentPosL() );
+ if ( drive < 0 )
+ {
+ return; // No drive selected
+ }
+
+ TBuf< KFmgrMaxMediaPassword > pwd;
+ if( FileManagerDlgUtils::ShowPasswordQueryL( pwd ) )
+ {
+ TBuf< KFmgrMaxMediaPassword > nullPwd;
+ EmptyPwd( nullPwd );
+ if( UpdatePassword( drive, nullPwd, pwd ) == KErrNone )
+ {
+ FileManagerDlgUtils::ShowConfirmNoteL( R_QTN_PASSWORD_SET_TEXT );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::CmdChangeDrivePasswordL
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdChangeDrivePasswordL()
+ {
+ StoreIndex();
+ TInt drive( DriveAtCurrentPosL() );
+ if ( drive < 0 )
+ {
+ return; // No drive selected
+ }
+
+ TBuf< KFmgrMaxMediaPassword > pwd;
+ TBuf< KFmgrMaxMediaPassword > oldPwd;
+ TBool isDone( EFalse );
+ TBool isCanceled( EFalse );
+ TInt err( KErrNone );
+
+ // Ask for the old password until the correct one is given
+ while( !isDone )
+ {
+ EmptyPwd( oldPwd );
+ if( FileManagerDlgUtils::ShowSimplePasswordQueryL(
+ R_QTN_PASSWORD_OLD_TEXT, oldPwd ) )
+ {
+ TInt index(iContainer->ListBoxCurrentItemIndex());
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC(index);
+ TUint32 drvState(0);
+ TInt error= iEngine.DriveState(drvState, prop->FullPath());
+ if ((error!=KErrNone)||(!(drvState & TFileManagerDriveInfo::EDrivePresent)))
+ {
+ isDone = ETrue;
+ isCanceled = ETrue;
+ FileManagerDlgUtils::ShowErrorNoteL(R_QTN_MEMC_NOT_AVAILABLE );
+ }
+ else
+ {
+ err = UpdatePassword( drive, oldPwd, oldPwd );
+ if( err == KErrNone )
+ {
+ isDone = ETrue;
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_PASSWORDS_WRONG_TEXT );
+ }
+ }
+ CleanupStack::PopAndDestroy( prop );
+ }
+ else
+ {
+ isDone = ETrue;
+ isCanceled = ETrue;
+ }
+ }
+
+ // Then query for the new password
+ if( !isCanceled )
+ {
+ if( FileManagerDlgUtils::ShowPasswordQueryL( pwd ) )
+ {
+ err = UpdatePassword( drive, oldPwd, pwd );
+ if( err == KErrNone )
+ {
+ FileManagerDlgUtils::ShowConfirmNoteL(
+ R_QTN_PASSWORD_CHANGED_TEXT );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_CRITICAL_ERROR );
+ }
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::CmdRemoveDrivePasswordL
+// ------------------------------------------------------------------------------
+//
+void CFileManagerMainView::CmdRemoveDrivePasswordL()
+ {
+ StoreIndex();
+ TInt drive( DriveAtCurrentPosL() );
+ if ( drive < 0 )
+ {
+ return; // No drive selected
+ }
+
+ if( !UnlockRemovePasswordL( drive, ETrue ) )
+ {
+ FileManagerDlgUtils::ShowConfirmNoteL( R_QTN_PASSWORD_REMOVED_TEXT );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerMainView::DriveAtCurrentPosL
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerMainView::DriveAtCurrentPosL()
+ {
+ TFileManagerDriveInfo dummy;
+ return DriveInfoAtCurrentPosL( dummy );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerMemoryStoreView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,351 @@
+/*
+* Copyright (c) 2006-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: Memory store view
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknlists.h>
+#include <akntitle.h>
+#include <CFileManagerEngine.h>
+#include <FileManager.rsg>
+#include <csxhelp/fmgr.hlp.hrh>
+#include <FileManagerDebug.h>
+#include "CFileManagerMemoryStoreView.h"
+#include "CFileManagerFileListContainer.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "FileManager.hrh"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::CFileManagerMemoryStoreView
+// ----------------------------------------------------------------------------
+//
+CFileManagerMemoryStoreView::CFileManagerMemoryStoreView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::NewLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerMemoryStoreView* CFileManagerMemoryStoreView::NewLC()
+ {
+ CFileManagerMemoryStoreView* self =
+ new( ELeave ) CFileManagerMemoryStoreView();
+
+ CleanupStack::PushL( self );
+ self->ConstructL( R_FILEMANAGER_FOLDERS_VIEW );
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::~CFileManagerMemoryStoreView
+// ----------------------------------------------------------------------------
+//
+CFileManagerMemoryStoreView::~CFileManagerMemoryStoreView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::DoActivateL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ // Check embedded app exit first
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->ExitEmbeddedAppIfNeededL();
+
+ CFileManagerViewBase::DoActivateL(
+ aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ TBool showRemoteNotConnected( EFalse );
+ // Ensure that root directory is defined
+ TInt count( iEngine.NavigationLevel() );
+ if ( count > 0 )
+ {
+ iIndex = 0;
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ TRAP_IGNORE( iEngine.BackstepL() );
+ }
+ showRemoteNotConnected = ETrue;
+ }
+
+ TRAP_IGNORE ( RefreshDriveInfoL() );
+ RefreshTitleL();
+ iEngine.SetState( CFileManagerEngine::ENavigation );
+ iEngine.SetObserver( this );
+ if ( DriveAvailableL( showRemoteNotConnected ) )
+ {
+ iEngine.RefreshDirectory();
+ }
+ else
+ {
+ UpdateCbaL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::DoDeactivate
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::DoDeactivate()
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoDeactivate();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::DirectoryChangedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::DirectoryChangedL()
+ {
+ FUNC_LOG
+
+ TBool drvAvailable( DriveAvailableL( ETrue ) );
+
+ if ( iContainer )
+ {
+ if ( drvAvailable )
+ {
+ TInt index = iEngine.CurrentIndex();
+ if ( index != KErrNotFound )
+ {
+ iIndex = index;
+ }
+ iContainer->RefreshListL( iIndex );
+ }
+ else
+ {
+ iIndex = 0;
+ }
+ RefreshTitleL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::Id
+// ----------------------------------------------------------------------------
+//
+TUid CFileManagerMemoryStoreView::Id() const
+ {
+ return CFileManagerAppUi::KFileManagerMemoryStoreViewId;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::CreateContainerL
+// ----------------------------------------------------------------------------
+//
+CFileManagerContainerBase* CFileManagerMemoryStoreView::CreateContainerL()
+ {
+ return CFileManagerFileListContainer::NewL(
+ ClientRect(),
+ iIndex,
+ CFileManagerFileListContainer::EListMemoryStore,
+ R_QTN_SELEC_EMPTY_LIST,
+ KFMGR_HLP_MEM_STORE_VIEW );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::HandleCommandL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EFileManagerOpen:
+ {
+ CmdOpenL();
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ CmdBackL();
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::DriveAvailableL
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerMemoryStoreView::DriveAvailableL(
+ TBool aShowRemoteNotConnected )
+ {
+ HBufC* error = NULL;
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ TInt usb_err( KErrNone );
+ if ( drvInfo.iState & (
+ TFileManagerDriveInfo::EDriveRemovable |
+ TFileManagerDriveInfo::EDriveRemote ) )
+ {
+ TRAP( usb_err , RefreshDriveInfoL() );
+ }
+ if( usb_err != KErrNone )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_MAINPAGE_ERROR1 );
+ }
+
+ INFO_LOG1( "CFileManagerMemoryStoreView::DriveAvailableL-drvState=%d",
+ drvInfo.iState )
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ iEngine.SetMemoryL( EFmRemoteDrive );
+ }
+#ifdef RD_MULTIPLE_DRIVE
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ iEngine.SetMemoryL( EFmMassStorage );
+ }
+#endif // RD_MULTIPLE_DRIVE
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable )
+ {
+ iEngine.SetMemoryL( EFmMemoryCard );
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+ {
+ iEngine.SetMemoryL( EFmUsbMemory );
+ }
+ else
+ {
+ iEngine.SetMemoryL( EFmPhoneMemory );
+ }
+
+#ifdef RD_MULTIPLE_DRIVE
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ // Handle mass storage states
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) ||
+ ( drvInfo.iState & TFileManagerDriveInfo::EDriveInUse ) )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_MASS_STORAGE_IN_USE );
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_MASS_STORAGE_CORRUPTED );
+ }
+ }
+ else
+ {
+ // Handle other drives
+#endif // RD_MULTIPLE_DRIVE
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveInUse )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_MAINPAGE_ERROR4 );
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_MAINPAGE_ERROR2 );
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_MAINPAGE_ERROR3 );
+ }
+ else if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ error = StringLoader::LoadLC( R_QTN_MEMC_NOT_AVAILABLE );
+ }
+ else if ( aShowRemoteNotConnected &&
+ ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ ! ( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ error = StringLoader::LoadLC( R_QTN_FMGR_EMPTY_REMOTE_DRIVE );
+ }
+#ifdef RD_MULTIPLE_DRIVE
+ }
+#endif // RD_MULTIPLE_DRIVE
+ if ( error )
+ {
+ if ( iContainer )
+ {
+ iContainer->ListBoxSetTextL( *error );
+ }
+ CleanupStack::PopAndDestroy( error );
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::RefreshTitleL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::RefreshTitleL()
+ {
+ static_cast< CFileManagerAppUi* >( AppUi() )->SetTitleL(
+ iEngine.CurrentDriveName() );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::CmdOpenL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::CmdOpenL()
+ {
+ StoreIndex();
+ CFileManagerViewBase::CmdOpenL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::CmdBackL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::CmdBackL()
+ {
+ if ( iActiveProcess != ENoProcess )
+ {
+ return; // Ignore to avoid container mess up
+ }
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ iEngine.BackstepL();
+ iIndex = 0;
+ appUi->CloseMemoryStoreViewL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerMemoryStoreView::UpdateCbaL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerMemoryStoreView::UpdateCbaL()
+ {
+ UpdateCommonCbaL();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerRestoreView.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) 2006-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: View for restore settings
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknlists.h>
+#include <akntitle.h>
+#include <CFileManagerEngine.h>
+#include <FileManager.rsg>
+#include <FileManagerDlgUtils.h>
+#include <CFileManagerRestoreSettings.h>
+#include <FileManagerDebug.h>
+#include "CFileManagerRestoreView.h"
+#include "CFileManagerSettingListContainer.h"
+#include "CFileManagerDocument.h"
+#include "CFileManagerAppUi.h"
+#include "FileManager.hrh"
+
+// CONSTANTS
+const TUid CFileManagerRestoreView::KDeleteBackups = { EDeleteBackups };
+const TInt KMaxSelection = 64;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::CFileManagerRestoreView
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreView::CFileManagerRestoreView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::NewLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreView* CFileManagerRestoreView::NewLC()
+ {
+ CFileManagerRestoreView* self = new( ELeave ) CFileManagerRestoreView();
+ CleanupStack::PushL( self );
+ self->ConstructL( R_FILEMANAGER_RESTORE_VIEW );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::~CFileManagerRestoreView
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreView::~CFileManagerRestoreView()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::DoActivateL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ iSelection = 0; // Reset stored list selection
+ iDeleteBackups = ( aCustomMessageId == KDeleteBackups );
+
+ CFileManagerViewBase::DoActivateL(
+ aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ static_cast< CFileManagerAppUi* >( AppUi() )->SetTitleL(
+ iDeleteBackups ?
+ R_QTN_FMGR_DELETE_BACKUP_TITLE : R_QTN_FMGR_RESTORE_TITLE );
+
+ CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
+ settings.RefreshL();
+
+ iContainer->RefreshListL( iIndex );
+
+ CEikButtonGroupContainer* cba = Cba();
+ cba->SetCommandSetL(R_AVKON_SOFTKEYS_OK_CANCEL__MARK );
+ cba->MakeCommandVisible( EAknSoftkeyOk, EFalse );
+ cba->MakeCommandVisible( EAknSoftkeyMark, ETrue );
+
+ if ( !iContainer->ListBoxNumberOfItems() )
+ {
+ cba->MakeCommandVisible( EAknSoftkeyMark, EFalse );
+ }
+ cba->DrawDeferred();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::DoDeactivate
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::DoDeactivate()
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoDeactivate();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::DirectoryChangedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::DirectoryChangedL()
+ {
+ FUNC_LOG
+
+ if ( iContainer )
+ {
+ CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
+ settings.RefreshL();
+ iContainer->RefreshListL( iIndex );
+ RestoreSelectionL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::Id
+// ----------------------------------------------------------------------------
+//
+TUid CFileManagerRestoreView::Id() const
+ {
+ return CFileManagerAppUi::KFileManagerRestoreViewId;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::CreateContainerL
+// ----------------------------------------------------------------------------
+//
+CFileManagerContainerBase* CFileManagerRestoreView::CreateContainerL()
+ {
+ CFileManagerRestoreSettings& settings( iEngine.RestoreSettingsL() );
+ CFileManagerContainerBase* container =
+ CFileManagerSettingListContainer::NewL(
+ ClientRect(),
+ iIndex,
+ CFileManagerSettingListContainer::EListRestore,
+ &settings );
+ container->SetEmptyTextL( R_QTN_FMGR_RESTORE_NO_BACKUPS );
+ return container;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::HandleCommandL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EAknSoftkeySelect: // FALLTHROUGH
+ case EAknSoftkeyMark: // FALLTHROUGH
+ case EAknSoftkeyUnmark: // FALLTHROUGH
+ case EFileManagerSelectionKey: // FALLTHROUGH
+ case EFileManagerToggleMark: // FALLTHROUGH
+ case EFileManagerOpen:
+ {
+ CmdSelectL();
+ break;
+ }
+ case EAknSoftkeyOk:
+ {
+ CmdOkL();
+ break;
+ }
+ case EAknSoftkeyCancel: // FALLTHROUGH
+ case EAknSoftkeyBack:
+ {
+ CmdCancelL();
+ break;
+ }
+ case EFileManagerCheckMark:
+ {
+ CmdCheckMarkL();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::CmdOkL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::CmdOkL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+
+ TInt count( items->Count() );
+
+ if ( count )
+ {
+ if( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ iDeleteBackups ?
+ R_QTN_FMGR_DELETE_BACKUP_QUERY : R_QTN_FMGR_RESTORE_QUERY ) )
+ {
+ if ( !CheckPhoneState() )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+ }
+ else
+ {
+ TUint64 selection( 0 );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ selection |= ( ( TUint64 ) 1 ) << ( ( *items )[ i ] );
+ }
+
+ CFileManagerRestoreSettings& settings(
+ iEngine.RestoreSettingsL() );
+ settings.SetSelection( selection );
+
+ if ( iDeleteBackups )
+ {
+ // Delete selected backups and close this view
+ iEngine.DeleteBackupsL();
+ iIndex = 0;
+ static_cast< CFileManagerAppUi* >(
+ AppUi() )->CloseRestoreViewL();
+ }
+ else
+ {
+ // Start restoring selected backups
+ TRAPD( err, StartProcessL( ERestoreProcess ) );
+ if ( err == KErrCorrupt )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_CORRUPTED_BACKUP_FILE );
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ CmdCancelL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::CmdCancelL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::CmdCancelL()
+ {
+ iIndex = 0;
+ static_cast< CFileManagerAppUi* >( AppUi() )->CloseRestoreViewL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::CmdSelectL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::CmdSelectL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ if ( !iContainer->ListBoxNumberOfItems() )
+ {
+ return;
+ }
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ iContainer->ListBoxToggleItemL( index );
+ iSelection ^= ( ( TUint64 ) 1 ) << index; // Toggle stored list selection
+ UpdateCbaFromSelectionL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::CmdCheckMarkL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::CmdCheckMarkL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ TInt mskTextId( R_QTN_MSK_MARK );
+ if ( iContainer->ListBoxIsItemSelected(
+ iContainer->ListBoxCurrentItemIndex() ) )
+ {
+ mskTextId = R_QTN_MSK_UNMARK;
+ }
+
+ SetCbaMskTextL( mskTextId );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::ProcessFinishedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::ProcessFinishedL(
+ TInt aError, const TDesC& aName )
+ {
+ TBool isRestore( iActiveProcess == ERestoreProcess );
+
+ CFileManagerViewBase::ProcessFinishedL( aError, aName );
+
+ // Exit when restore finished
+ if ( isRestore )
+ {
+ CmdCancelL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::NotifyForegroundStatusChange
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::NotifyForegroundStatusChange(
+ TBool aForeground )
+ {
+ FUNC_LOG
+
+ if ( aForeground )
+ {
+ TRAP_IGNORE( RefreshSettingsL() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::RefreshSettingsL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::RefreshSettingsL()
+ {
+ FUNC_LOG
+
+ DirectoryChangedL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::RestoreSelectionL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::RestoreSelectionL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+ for ( TInt i( 0 ); i < KMaxSelection; ++i )
+ {
+ if ( iSelection & ( ( ( TUint64 ) 1 ) << i ) )
+ {
+ iContainer->ListBoxSelectItemL( i );
+ }
+ else
+ {
+ iContainer->ListBoxDeselectItem( i );
+ }
+ }
+ UpdateCbaFromSelectionL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::UpdateCbaFromSelectionL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::UpdateCbaFromSelectionL()
+ {
+ if ( !iContainer )
+ {
+ return;
+ }
+ CmdCheckMarkL();
+ CEikButtonGroupContainer* cba = Cba();
+ TBool hasItem(iContainer->ListBoxNumberOfItems());
+ const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+ if ( hasItem && items->Count() )
+ {
+ cba->MakeCommandVisible( EAknSoftkeyOk, ETrue );
+ }
+ else
+ {
+ cba->MakeCommandVisible( EAknSoftkeyOk, EFalse );
+ }
+ cba->DrawDeferred();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreView::UpdateCbaL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreView::UpdateCbaL()
+ {
+ CEikButtonGroupContainer* cba = Cba();
+ TBool hasItem(iContainer->ListBoxNumberOfItems());
+ cba->MakeCommandVisible( EAknSoftkeyMark, hasItem );
+ TBool hasSelecttionItem( hasItem && ( iContainer->ListBoxSelectionIndexesCount() ) );
+ cba->MakeCommandVisible( EAknSoftkeyOk, hasSelecttionItem );
+ cba->DrawDeferred();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerSchBackupHandler.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,406 @@
+/*
+* Copyright (c) 2006 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: Handler for scheduled backup
+*
+*/
+
+
+// #define FILE_MANAGER_POWER_SAVING_MODE
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <centralrepository.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <FileManager.rsg>
+#include <FileManagerDebug.h>
+#include <FileManagerPrivateCRKeys.h>
+#include <CFileManagerEngine.h>
+#include <CFileManagerBackupSettings.h>
+#include <MFileManagerProcessObserver.h>
+#include <CFileManagerGlobalDlg.h>
+#ifdef FILE_MANAGER_POWER_SAVING_MODE
+ #include <psmsrvdomaincrkeys.h>
+#endif // FILE_MANAGER_POWER_SAVING_MODE
+#include "CFileManagerSchBackupHandler.h"
+#include "MFileManagerSchBackupObserver.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::CFileManagerSchBackupHandler
+// ----------------------------------------------------------------------------
+//
+CFileManagerSchBackupHandler::CFileManagerSchBackupHandler(
+ CFileManagerEngine& aEngine ) :
+ iEngine( aEngine )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerSchBackupHandler* CFileManagerSchBackupHandler::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerSchBackupHandler* self =
+ new( ELeave ) CFileManagerSchBackupHandler( aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::ConstructL()
+ {
+ FUNC_LOG
+
+ iGlobalDlg = CFileManagerGlobalDlg::NewL();
+ iGlobalDlg->SetObserver( this );
+
+ iCenRep = CRepository::NewL( KCRUidFileManagerSettings );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::~CFileManagerSchBackupHandler
+// ----------------------------------------------------------------------------
+//
+CFileManagerSchBackupHandler::~CFileManagerSchBackupHandler()
+ {
+ FUNC_LOG
+
+ delete iGlobalDlg;
+ delete iCenRep;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::HandleGlobalDlgResult
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::HandleGlobalDlgResult(
+ TInt aDlgType,
+ TInt aDlgResult )
+ {
+ INFO_LOG2(
+ "CFileManagerSchBackupHandler::HandleGlobalDlgResult-aDlgType=%d,aDlgResult=%d",
+ aDlgType, aDlgResult )
+ TInt err( KErrNone );
+ switch ( aDlgType )
+ {
+ case CFileManagerGlobalDlg::ECountdownQuery:
+ {
+ if ( aDlgResult == EAknSoftkeyYes )
+ {
+ // Backup was accepted
+ StartBackup();
+
+ err = iCenRep->Set(
+ KFileManagerLastSchBackupStatus,
+ EFileManagerSchBackupStatusInProgress );
+ }
+ else
+ {
+ // Backup was rejected
+ InformObserver( KErrCancel );
+ CancelBackupStarter();
+ }
+ break;
+ }
+ case CFileManagerGlobalDlg::EProgressDialog:
+ {
+ // Backup was canceled
+ iEngine.CancelProcess(
+ MFileManagerProcessObserver::ESchBackupProcess );
+ InformObserver( KErrCancel );
+ CancelBackupStarter();
+ break;
+ }
+ default:
+ {
+ InformObserver( aDlgResult );
+ break;
+ }
+ }
+
+ LOG_IF_ERROR1( err,
+ "CFileManagerSchBackupHandler::HandleGlobalDlgResult-err=%d", err )
+
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::StartBackupWithConfirmL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::StartBackupWithConfirmL()
+ {
+ TBool psmOn( EFalse );
+ TRAPD( err, psmOn = IsPowerSavingModeOnL() );
+ if ( psmOn && err == KErrNone )
+ {
+ iGlobalDlg->ShowDialogL(
+ CFileManagerGlobalDlg::EQueryWithInfoIcon,
+ R_QTN_FMGR_SCHEDULED_BACKUP_CANCELLED_PS,
+ R_AVKON_SOFTKEYS_OK_EMPTY );
+ CancelBackupStarter();
+ return;
+ }
+
+ // Show cancelable global confirm countdown before starting backup.
+ // Backup is started only if accepted or countdown has expired.
+ iGlobalDlg->ShowDialogL(
+ CFileManagerGlobalDlg::ECountdownQuery,
+ R_QTN_FMGR_SCHEDULED_BACKUP_QUERY );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::StartBackupL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::StartBackupL()
+ {
+ TBool drvAvailable( ETrue );
+ TRAPD( err, drvAvailable = IsTargetDriveAvailableL() );
+ if ( !drvAvailable && err == KErrNone )
+ {
+ iGlobalDlg->ShowDialogL(
+ CFileManagerGlobalDlg::EQueryWithWarningIcon,
+ R_QTN_FMGR_SCHEDULED_BACKUP_ERROR,
+ R_AVKON_SOFTKEYS_OK_EMPTY );
+ CancelBackupStarter();
+ return;
+ }
+
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ HBufC* text = StringLoader::LoadLC(
+ R_QTN_FMGR_SCHEDULED_BACKUP_PROGRESS,
+ iEngine.DriveName( settings.TargetDrive() ) );
+
+ iGlobalDlg->ShowDialogL(
+ CFileManagerGlobalDlg::EProgressDialog,
+ *text );
+
+ CleanupStack::PopAndDestroy( text );
+
+ iEngine.StartBackupProcessL(
+ MFileManagerProcessObserver::ESchBackupProcess );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::SetObserver
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::SetObserver(
+ MFileManagerSchBackupObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::StartBackupWithConfirm
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::StartBackupWithConfirm()
+ {
+ FUNC_LOG
+
+ if ( iBackupOngoing )
+ {
+ return;
+ }
+
+ iBackupOngoing = ETrue;
+
+ TRAPD( err, StartBackupWithConfirmL() );
+ if ( err != KErrNone )
+ {
+ InformObserver( err );
+ }
+ else
+ {
+ // Confirm scheduled backup start state
+ TInt err( iCenRep->Set(
+ KFileManagerLastSchBackupStatus,
+ EFileManagerSchBackupStatusInProgress ) );
+
+ LOG_IF_ERROR1( err,
+ "CFileManagerSchBackupHandler::StartBackupWithConfirm-err=%d", err )
+
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::StartBackup
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::StartBackup()
+ {
+ FUNC_LOG
+
+ TRAPD( err, StartBackupL() );
+ if ( err != KErrNone )
+ {
+ InformObserver( err );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::InformObserver
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::InformObserver( const TInt aValue )
+ {
+ INFO_LOG1( "CFileManagerSchBackupHandler::InformObserver-aValue=%d", aValue )
+
+ iBackupOngoing = EFalse;
+ if ( iObserver )
+ {
+ TRAP_IGNORE( iObserver->SchBackupFinishedL( aValue ) );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::ProcessFinishedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::ProcessFinishedL(
+ TInt aError, const TDesC& /*aName*/ )
+ {
+ INFO_LOG1( "CFileManagerSchBackupHandler::ProcessFinishedL-aError=%d",
+ aError )
+
+ iGlobalDlg->CancelDialog();
+ TInt err( KErrNone );
+ if ( aError == KErrCancel )
+ {
+ CancelBackupStarter();
+ }
+ else if ( aError != KErrNone )
+ {
+ iGlobalDlg->ShowDialogL(
+ CFileManagerGlobalDlg::EErrorNote,
+ R_QTN_CRITICAL_ERROR );
+
+ err = iCenRep->Set(
+ KFileManagerLastSchBackupStatus,
+ EFileManagerSchBackupStatusFailed );
+ }
+ else
+ {
+ iGlobalDlg->ShowDialogL(
+ CFileManagerGlobalDlg::EInfoNote,
+ R_QTN_BACKUP_COMPLETED );
+
+ err = iCenRep->Set(
+ KFileManagerLastSchBackupStatus,
+ EFileManagerSchBackupStatusOk );
+ }
+
+ LOG_IF_ERROR1( err,
+ "CFileManagerSchBackupHandler::ProcessFinishedL-err=%d", err )
+
+ InformObserver( aError );
+
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::ProcessAdvanceL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::ProcessAdvanceL( TInt aValue )
+ {
+ iGlobalDlg->UpdateProgressDialog( aValue );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::ProcessStartedL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::ProcessStartedL( TInt aFinalValue )
+ {
+ FUNC_LOG
+
+ iGlobalDlg->UpdateProgressDialog( 0, aFinalValue );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::CancelBackupStarter
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSchBackupHandler::CancelBackupStarter()
+ {
+ TInt err( iCenRep->Set(
+ KFileManagerLastSchBackupStatus,
+ EFileManagerSchBackupStatusCanceled ) );
+ LOG_IF_ERROR1( err,
+ "CFileManagerSchBackupHandler::CancelBackupStarter-err=%d", err )
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::IsPowerSavingModeOnL
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerSchBackupHandler::IsPowerSavingModeOnL()
+ {
+ TBool ret( EFalse );
+#ifdef FILE_MANAGER_POWER_SAVING_MODE
+ // Check power saving mode before start
+ CRepository* psmCenRep = CRepository::NewLC( KCRUidPowerSaveMode );
+ TInt psmMode( 0 );
+ User::LeaveIfError( psmCenRep->Get( KPsmCurrentMode, psmMode ) );
+ if ( psmMode )
+ {
+ ERROR_LOG1(
+ "CFileManagerSchBackupHandler::IsPowerSavingModeOnL-PsmMode=%d",
+ psmMode )
+ ret = ETrue;
+ }
+ CleanupStack::PopAndDestroy( psmCenRep );
+#endif // FILE_MANAGER_POWER_SAVING_MODE
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSchBackupHandler::IsTargetDriveAvailableL
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerSchBackupHandler::IsTargetDriveAvailableL()
+ {
+ // Start backup with cancelable global progress dialog
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+
+ // Check is target drive available
+ TBool ret( ETrue );
+ TFileManagerDriveInfo info;
+ iEngine.GetDriveInfoL( settings.TargetDrive(), info );
+ if ( !( info.iState & TFileManagerDriveInfo::EDrivePresent ) ||
+ ( info.iState &
+ ( TFileManagerDriveInfo::EDriveLocked |
+ TFileManagerDriveInfo::EDriveCorrupted |
+ TFileManagerDriveInfo::EDriveWriteProtected ) ) )
+ {
+ ERROR_LOG1(
+ "CFileManagerSchBackupHandler::IsTargetDriveAvailableL-DrvState=%d",
+ info.iState )
+ ret = EFalse;
+ }
+ return ret;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerSettingListContainer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,287 @@
+/*
+* Copyright (c) 2006-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: Setting list container in file manager
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <FileManager.rsg>
+#include <aknlists.h>
+#include <barsread.h>
+#include <eikclbd.h>
+#include <gulicon.h>
+#include <aknconsts.h>
+#include <AknIconArray.h>
+#include <avkon.mbg>
+#include <filemanager.mbg>
+#include <CFileManagerEngine.h>
+#include <FileManagerEngine.hrh>
+#include "FileManager.hrh"
+#include "CFileManagerDocument.h"
+#include "CFileManagerIconArray.h"
+#include "CFileManagerSettingListContainer.h"
+
+
+// needed because _LIT macro does not expand parameter, which is also macro
+#define _CREATE_LIT(a,b) _LIT(a,b)
+
+// CONSTANTS
+const TInt KRestoreIconListGranularity = 3;
+_CREATE_LIT( KFileManagerBitmapFile, filemanager_mbm_file_location );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CFileManagerSettingListContainer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerSettingListContainer::CFileManagerSettingListContainer(
+ const TListType aType ) :
+ iType( aType )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSettingListContainer::ConstructL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ MDesCArray* aArray,
+ const TDesC& aHelpContext )
+ {
+ CFileManagerContainerBase::ConstructL( aRect, aFocusedIndex );
+ SetTextArray( aArray );
+ SetHelpContext( aHelpContext );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CreateListBoxL
+//
+// -----------------------------------------------------------------------------
+//
+CEikTextListBox* CFileManagerSettingListContainer::CreateListBoxL()
+ {
+ CEikTextListBox* listBox = NULL;
+
+ switch ( iType )
+ {
+ case EListBackup:
+ {
+ listBox = CreateBackupListBoxL();
+ break;
+ }
+ case EListRestore:
+ {
+ listBox = CreateRestoreListBoxL();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ return listBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CreateBackupListBoxL
+//
+// -----------------------------------------------------------------------------
+//
+CEikTextListBox* CFileManagerSettingListContainer::CreateBackupListBoxL()
+ {
+ CAknSettingStyleListBox* listBox = new( ELeave ) CAknSettingStyleListBox;
+ CleanupStack::PushL( listBox );
+ listBox->SetContainerWindowL( *this );
+ listBox->ConstructL( this, EAknListBoxSelectionList );
+ listBox->ItemDrawer()->ColumnData()->SetSkinEnabledL( ETrue );
+ CleanupStack::Pop( listBox );
+ return listBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CreateRestoreListBoxL
+//
+// -----------------------------------------------------------------------------
+//
+CEikTextListBox* CFileManagerSettingListContainer::CreateRestoreListBoxL()
+ {
+ CAknAppUi* appUi = static_cast< CAknAppUi* >( ControlEnv()->AppUi() );
+ CFileManagerDocument* doc =
+ static_cast< CFileManagerDocument* >( appUi->Document() );
+ CAknDoubleGraphicStyleListBox* listBox =
+ new( ELeave ) CAknDoubleGraphicStyleListBox;
+ CleanupStack::PushL( listBox );
+ listBox->SetContainerWindowL( *this );
+ listBox->ConstructL( this, EAknListBoxMultiselectionList );
+ listBox->ItemDrawer()->ColumnData()->SetSkinEnabledL( ETrue );
+
+ // Create icon array and icons
+ CAknIconArray* iconArray = new( ELeave ) CAknIconArray(
+ KRestoreIconListGranularity );
+ listBox->ItemDrawer()->
+ ColumnData()->SetIconArray( iconArray ); // changes ownership
+
+ CGulIcon* icon = CFileManagerIconArray::LoadIconL(
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_indi_checkbox_on,
+ EMbmAvkonQgn_indi_checkbox_on_mask,
+ KAknsIIDQgnIndiCheckboxOn.iMajor,
+ KAknsIIDQgnIndiCheckboxOn.iMinor,
+ ETrue );
+ CleanupStack::PushL( icon );
+ iconArray->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ icon = CFileManagerIconArray::LoadIconL(
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_indi_checkbox_off,
+ EMbmAvkonQgn_indi_checkbox_off_mask,
+ KAknsIIDQgnIndiCheckboxOff.iMajor,
+ KAknsIIDQgnIndiCheckboxOff.iMinor,
+ ETrue );
+ CleanupStack::PushL( icon );
+ iconArray->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ icon = CFileManagerIconArray::LoadIconL(
+ KFileManagerBitmapFile,
+ EMbmFilemanagerQgn_indi_mmc_add,
+ EMbmFilemanagerQgn_indi_mmc_add_mask,
+ KAknsIIDQgnIndiMmcAdd.iMajor,
+ KAknsIIDQgnIndiMmcAdd.iMinor,
+ ETrue );
+ CleanupStack::PushL( icon );
+ iconArray->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ icon = CFileManagerIconArray::LoadIconL(
+ KFileManagerBitmapFile,
+ EMbmFilemanagerQgn_indi_mmc_add,
+ EMbmFilemanagerQgn_indi_mmc_add_mask,
+ KAknsIIDQgnIndiMmcAdd.iMajor,
+ KAknsIIDQgnIndiMmcAdd.iMinor,
+ ETrue );
+ CleanupStack::PushL( icon );
+ iconArray->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ // Disable lists MSK observer because the container will be used
+ // as observer
+ listBox->EnableMSKObserver( EFalse );
+ CleanupStack::Pop( listBox );
+ return listBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerSettingListContainer* CFileManagerSettingListContainer::NewL(
+ const TRect& aRect,
+ const TInt aFocusedIndex,
+ const TListType aType,
+ MDesCArray* aArray,
+ const TDesC& aHelpContext )
+ {
+ CFileManagerSettingListContainer* self =
+ new( ELeave ) CFileManagerSettingListContainer( aType );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect, aFocusedIndex, aArray, aHelpContext );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::~CFileManagerSettingListContainer
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerSettingListContainer::~CFileManagerSettingListContainer()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::OfferKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerSettingListContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse response = EKeyWasNotConsumed;
+
+ switch( aKeyEvent.iCode )
+ {
+ case EKeyEnter: // FALLTHROUGH
+ case EKeyOK:
+ {
+ // Notify restore list about selection change
+ if ( iType == EListRestore )
+ {
+ static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
+ ProcessCommandL( EFileManagerSelectionKey );
+ response = EKeyWasConsumed;
+ }
+ else
+ {
+ response = ListBox().OfferKeyEventL( aKeyEvent, aType );
+ }
+ break;
+ }
+ case EKeyApplicationF:
+ {
+ // Suppress this from listbox,
+ // otherwise empty multiselection list sometimes works badly on exit
+ break;
+ }
+ default:
+ {
+ response = CFileManagerContainerBase::OfferKeyEventL(
+ aKeyEvent, aType );
+ }
+ }
+ return response;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::HandleControlEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSettingListContainer::HandleControlEventL(
+ CCoeControl* aControl, TCoeEvent aEventType )
+ {
+ if ( iType == EListRestore &&
+ aEventType == EEventStateChanged )
+ {
+ static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
+ ProcessCommandL( EFileManagerCheckMark );
+ }
+
+ CFileManagerContainerBase::HandleControlEventL(
+ aControl, aEventType );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerStringCache.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,479 @@
+/*
+* Copyright (c) 2002-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: Cache for strings
+*
+*/
+
+
+// INCLUDES
+#include <AknUtils.h>
+#include <StringLoader.h>
+#include <FileManager.rsg>
+#include <CFileManagerEngine.h>
+#include <CFileManagerItemProperties.h>
+#include <CFileManagerCommonDefinitions.h>
+#include <CFileManagerFeatureManager.h>
+#include "CFileManagerStringCache.h"
+#include "CFileManagerIconArray.h"
+
+// CONSTANTS
+const TInt KFmgrMaximumSizeOfIconIdString = 3;
+_LIT( KIconStr, "%d" );
+const TInt KMaxSizeString = 16;
+const TInt64 KKileByte = 1024;
+const TInt64 KMegaByte = 1048576;
+const TInt64 KGigaByte = 1073741824;
+const TInt64 KKileByteLowLimit = 100; // 100 bytes
+const TInt64 KMegaByteLowLimit = 1048576; // 1MB
+const TInt64 KGigaByteLowLimit = 1073741824; // 1GB
+const TInt KSizeDecimals = 1;
+const TInt KSizeTextArrayLen = 2;
+
+_LIT( KDateFormat1, "%1" );
+_LIT( KDateFormat2, "%2" );
+_LIT( KDateFormat3, "%3" );
+const TUint KSecondSeparator = 1;
+const TUint KThirdSeparator = 2;
+const TInt KDateStrMax = 20;
+
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// -----------------------------------------------------------------------------
+// GetUnitAndFormatSize
+// -----------------------------------------------------------------------------
+//
+static TInt GetUnitAndFormatSize( TDes& aDes, const TInt64& aSize )
+ {
+ TRealFormat sizeFormat( aDes.MaxLength(), KSizeDecimals );
+ sizeFormat.iType |= KDoNotUseTriads;
+ TInt ret( R_QTN_FMGR_UNITS_BYTE );
+ if ( aSize >= KGigaByteLowLimit )
+ {
+ // Format in GBs with decimals
+ TReal size( I64REAL( aSize ) / I64REAL( KGigaByte ) );
+ aDes.AppendNum( size, sizeFormat );
+ ret = R_QTN_FMGR_UNITS_GIGABYTE;
+ }
+ else if ( aSize >= KMegaByteLowLimit )
+ {
+ // Format in MBs with decimals
+ TReal size( I64REAL( aSize ) / I64REAL( KMegaByte ) );
+ aDes.AppendNum( size, sizeFormat );
+ ret = R_QTN_FMGR_UNITS_MEGABYTE;
+ }
+ else if ( aSize >= KKileByteLowLimit )
+ {
+ // Format in kBs with decimals
+ TReal size( I64REAL( aSize ) / I64REAL( KKileByte ) );
+ aDes.AppendNum( size, sizeFormat );
+ ret = R_QTN_FMGR_UNITS_KILOBYTE;
+ }
+ else
+ {
+ // Format in bytes
+ aDes.AppendNum( aSize );
+ }
+ AknTextUtils::LanguageSpecificNumberConversion( aDes );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// GetFreeSpaceStringL
+// -----------------------------------------------------------------------------
+//
+static HBufC* GetFreeSpaceStringL( const TInt64& aSize )
+ {
+ CDesCArray* sizeTexts = new ( ELeave ) CDesCArrayFlat( KSizeTextArrayLen );
+ CleanupStack::PushL( sizeTexts );
+ TBuf< KMaxSizeString > size;
+ HBufC* unit = StringLoader::LoadLC( GetUnitAndFormatSize( size, aSize ) );
+ sizeTexts->AppendL( size );
+ sizeTexts->AppendL( *unit );
+ CleanupStack::PopAndDestroy( unit );
+ HBufC* ret = StringLoader::LoadL( R_QTN_FMGR_FREE_MEMORY_VAR_UNITS,
+ *sizeTexts );
+ CleanupStack::PopAndDestroy( sizeTexts );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// DateStringL
+// -----------------------------------------------------------------------------
+//
+static HBufC* DateStringL( const TTime& aTime )
+ {
+ TBuf< KDateStrMax > dateStr;
+ TBuf< KDateStrMax > dateStrFormat;
+ TLocale local;
+ dateStrFormat.Append( KDateFormat1 );
+ dateStrFormat.Append( local.DateSeparator( KSecondSeparator ) );
+ dateStrFormat.Append( KDateFormat2 );
+ dateStrFormat.Append( local.DateSeparator( KThirdSeparator ) );
+ dateStrFormat.Append( KDateFormat3 );
+ aTime.FormatL( dateStr, dateStrFormat );
+ return dateStr.AllocL();
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::CFileManagerStringCache
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerStringCache::CFileManagerStringCache(
+ CFileManagerEngine& aEngine,
+ CFileManagerIconArray& aIconArray ) :
+ iEngine( aEngine ),
+ iIconArray( aIconArray )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerStringCache* CFileManagerStringCache::NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerIconArray& aIconArray )
+ {
+ CFileManagerStringCache* self = new( ELeave )
+ CFileManagerStringCache( aEngine, aIconArray );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerStringCache::ConstructL()
+ {
+ Clear();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::~CFileManagerStringCache
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerStringCache::~CFileManagerStringCache()
+ {
+ Clear();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::MdcaCount
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerStringCache::MdcaCount() const
+ {
+ return iEngine.FileList()->MdcaCount();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::MdcaPoint
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CFileManagerStringCache::MdcaPoint( TInt aIndex ) const
+ {
+ TInt err( KErrNone );
+ TInt index( FormattedStringFound( aIndex ) );
+
+ if ( index >= 0 )
+ {
+ return FormattedString( index );
+ }
+
+ iFormatString.Zero();
+
+ // Get icon
+ TInt iconId( EFileManagerOtherFileIcon );
+ TRAP( err, iconId = iEngine.IconIdL( aIndex ) );
+ if ( err != KErrNone )
+ {
+ iconId = EFileManagerOtherFileIcon;
+ SetError( err );
+ }
+ // Get name
+ CFileManagerItemProperties* prop = NULL;
+ TRAP( err, prop = iEngine.GetItemInfoL( aIndex ) );
+ if ( err == KErrNone )
+ {
+ TPtrC ptr( prop->LocalizedName() );
+ if ( iconId != EFileManagerFolderIcon &&
+ iconId != EFileManagerFolderSubIcon &&
+ iconId != EFileManagerFolderEmptyIcon )
+ {
+ // Append file name with conversion
+ HBufC* buffer = NULL;
+ TRAP( err, buffer = AknTextUtils::ConvertFileNameL( ptr ) );
+ if ( err == KErrNone )
+ {
+ iFormatString.Append( *buffer );
+ }
+ else
+ {
+ // Put file name without any convertion, its better than nothing
+ iFormatString.Append( ptr );
+ SetError( err );
+ }
+ delete buffer;
+ }
+ else
+ {
+ // Append folder name
+ iFormatString.Append( ptr );
+ }
+ }
+ else
+ {
+ SetError( err );
+ }
+ // Remove all other possible tabs in string than the icon separator,
+ // so that listbox won't get broken
+ AknTextUtils::StripCharacters( iFormatString, KFmgrTab );
+
+ AknTextUtils::ReplaceCharacters( iFormatString, KFmgrLineFeed, KFmgrSpace()[0] );
+ AknTextUtils::ReplaceCharacters( iFormatString, KFmgrParagraphSeparator, KFmgrSpace()[0] );
+
+ TInt iconIndex( iIconArray.FindIcon( iconId ) );
+ if ( iconIndex >= 0 )
+ {
+ iFormatString.Insert( 0, KFmgrTab );
+ TBuf<KFmgrMaximumSizeOfIconIdString> numBuf;
+ numBuf.Copy( KIconStr );
+ numBuf.Format( KIconStr, iconIndex );
+ iFormatString.Insert( 0, numBuf );
+ }
+ else
+ {
+ SetError( iconIndex );
+ }
+
+ if ( err == KErrNone && prop && prop->IsDrive() )
+ {
+ TFileManagerDriveInfo drvInfo;
+ TRAP( err, iEngine.GetDriveInfoL( prop->DriveId(), drvInfo ) );
+ if ( err == KErrNone )
+ {
+ // Show free space for accessible local drives
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) &&
+ !( drvInfo.iState & ( TFileManagerDriveInfo::EDriveRemote |
+ TFileManagerDriveInfo::EDriveCorrupted |
+ TFileManagerDriveInfo::EDriveLocked |
+ TFileManagerDriveInfo::EDriveInUse ) ) )
+ {
+ HBufC* freeSpace = NULL;
+ TRAP( err, freeSpace = GetFreeSpaceStringL( drvInfo.iSpaceFree ) );
+ if ( err == KErrNone )
+ {
+ iFormatString.Append( KFmgrTab );
+ iFormatString.Append( *freeSpace );
+ }
+ else
+ {
+ SetError( err );
+ }
+ delete freeSpace;
+ }
+ // Show connection icon for connected remote drives
+ else if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ ( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ iconIndex = iIconArray.FindIcon(
+ EFileManagerRemoteDriveConnectedIcon );
+ if ( iconIndex >= 0 )
+ {
+ iFormatString.Append( KFmgrTab );
+ iFormatString.Append( KFmgrTab );
+ iFormatString.AppendNum( iconIndex );
+ }
+ else if ( iconIndex != KErrNotFound )
+ {
+ SetError( iconIndex );
+ }
+ }
+ }
+ }
+ else if ( err == KErrNone && prop && !prop->FullPath().Length() )
+ {
+ // Show the latest backup date
+ TTime time( 0 );
+ if( prop->ModifiedLocalDate( time ) == KErrNone )
+ {
+ HBufC* date = NULL;
+ if ( !(time.DateTime().Year()) )
+ {
+ iFormatString.Append( KFmgrTab );
+ iFormatString.Append( KNullDesC );
+ }
+ else
+ {
+
+ TRAPD( err2, date = DateStringL( time ) );
+ if ( err2 == KErrNone )
+ {
+ iFormatString.Append( KFmgrTab );
+ iFormatString.Append( *date );
+ delete date;
+ }
+ }
+ }
+ }
+
+ delete prop;
+
+ TRAP( err, StoreFormattedStringL( aIndex ) );
+ if( err != KErrNone )
+ {
+ Clear();
+ SetError( err );
+ }
+
+ return iFormatString;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::Clear
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerStringCache::Clear() const
+ {
+ for ( TInt i( 0 ); i < KNumStringCacheItems; i++ )
+ {
+ Clear( i );
+ }
+ iError = KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::FormattedStringFound
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerStringCache::FormattedStringFound( TInt aIndex ) const
+ {
+ for ( TInt i( 0 ); i < KNumStringCacheItems; i++ )
+ {
+ if ( iFormattedItems[ i ].iIndex == aIndex )
+ {
+ return i;
+ }
+ }
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::FormattedString
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CFileManagerStringCache::FormattedString( TInt aIndex ) const
+ {
+ TCacheItem& item = iFormattedItems[ aIndex ];
+ if ( item.iString )
+ {
+ return item.iString->Des();
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::StoreFormattedString
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerStringCache::StoreFormattedStringL( TInt aIndex ) const
+ {
+ TInt count( MdcaCount() );
+ TInt replace( 0 );
+ TInt maxDist( 0 );
+
+ // Find index to be replaced for cyclic list scroll
+ for ( TInt i( 0 ); i < KNumStringCacheItems; i++ )
+ {
+ TCacheItem& item = iFormattedItems[ i ];
+ if ( item.iIndex != KErrNotFound )
+ {
+ TInt dist( Min( Abs( item.iIndex - aIndex ),
+ ( count - aIndex ) + item.iIndex ) );
+ if ( dist > maxDist )
+ {
+ maxDist = dist;
+ replace = i;
+ }
+ }
+ else
+ {
+ replace = i;
+ break;
+ }
+ }
+ // Setup new cached item
+ Clear( replace );
+ TCacheItem& item = iFormattedItems[ replace ];
+ item.iString = iFormatString.AllocL();
+ item.iIndex = aIndex;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::Clear
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerStringCache::Clear( TInt aIndex ) const
+ {
+ TCacheItem& item = iFormattedItems[ aIndex ];
+ delete item.iString;
+ item.iString = NULL;
+ item.iIndex = KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::LastError
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerStringCache::LastError() const
+ {
+ return iError;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerStringCache::SetError
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerStringCache::SetError( TInt aError ) const
+ {
+ if ( aError == KErrNoMemory ||
+ ( aError != KErrNone && iError == KErrNone ) )
+ {
+ iError = aError;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerTaskScheduler.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2006 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: Wraps task scheduler functionality
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <apacmdln.h>
+#include <FileManagerSchDefinitions.h>
+#include <FileManagerDebug.h>
+#include <CFileManagerEngine.h>
+#include <CFileManagerBackupSettings.h>
+#include <FileManagerPrivateCRKeys.h>
+#include "CFileManagerTaskScheduler.h"
+
+
+// CONSTANTS
+const TInt KSchedulerPriority = 32;
+const TInt KSchedulerGranularity = 1;
+const TInt KSchedulerRepeat = -1; // Repeat until deleted
+const TInt KSchedulerTaskId = 0;
+const TInt KDayNumStringLen = 4;
+const TInt KTaskInterval = 1;
+const TInt KTaskValidity = 1;
+_LIT( KDayNumStr, "%d" );
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::CFileManagerTaskScheduler
+// ----------------------------------------------------------------------------
+//
+CFileManagerTaskScheduler::CFileManagerTaskScheduler(
+ CFileManagerEngine& aEngine ) :
+ iEngine( aEngine ),
+ iScheduleHandle( KErrNotFound )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerTaskScheduler* CFileManagerTaskScheduler::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerTaskScheduler* self =
+ new( ELeave ) CFileManagerTaskScheduler( aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerTaskScheduler::ConstructL()
+ {
+ FUNC_LOG
+
+ User::LeaveIfError( iScheduler.Connect() );
+ TFileName name( KSchBackupStarterExe );
+ User::LeaveIfError( iScheduler.Register( name, KSchedulerPriority ) );
+
+ // Try to get schedule handle of previously made schedule
+ CArrayFixFlat< TSchedulerItemRef >* array =
+ new( ELeave ) CArrayFixFlat< TSchedulerItemRef >(
+ KSchedulerGranularity );
+ CleanupStack::PushL( array );
+ if ( iScheduler.GetScheduleRefsL( *array, EAllSchedules ) == KErrNone )
+ {
+ if ( array->Count() )
+ {
+ iScheduleHandle = array->At( 0 ).iHandle;
+ }
+ }
+ CleanupStack::PopAndDestroy( array );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::~CFileManagerTaskScheduler
+// ----------------------------------------------------------------------------
+//
+CFileManagerTaskScheduler::~CFileManagerTaskScheduler()
+ {
+ FUNC_LOG
+
+ iScheduler.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::CreateScheduleL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerTaskScheduler::CreateScheduleL()
+ {
+ FUNC_LOG
+
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+
+ // Create schedule entry and store schedule handle for later use
+ CArrayFixFlat< TScheduleEntryInfo2 >* array =
+ new ( ELeave ) CArrayFixFlat<
+ TScheduleEntryInfo2 >( KSchedulerGranularity );
+ CleanupStack::PushL( array );
+
+ TTsTime tsTime( settings.Time(), EFalse );
+ TScheduleEntryInfo2 entry(
+ tsTime, EDaily, KTaskInterval, KTaskValidity );
+ array->AppendL( entry );
+
+ TSchedulerItemRef ref;
+ User::LeaveIfError( iScheduler.CreatePersistentSchedule( ref, *array ) );
+ CleanupStack::PopAndDestroy( array );
+ iScheduleHandle = ref.iHandle;
+
+ // Add weekday to task data if weekly backup
+ HBufC* data = HBufC::NewLC( KDayNumStringLen );
+ if ( settings.Scheduling() == EFileManagerBackupScheduleWeekly )
+ {
+ TPtr ptr( data->Des() );
+ ptr.Format( KDayNumStr, settings.Day() );
+ }
+
+ // Create scheduled task entry and enable it
+ TTaskInfo taskInfo;
+ taskInfo.iName = KSchBackupTaskName;
+ taskInfo.iPriority = KSchedulerPriority;
+ taskInfo.iTaskId = KSchedulerTaskId;
+ taskInfo.iRepeat = KSchedulerRepeat;
+ User::LeaveIfError( iScheduler.ScheduleTask(
+ taskInfo, *data, iScheduleHandle ) );
+ CleanupStack::PopAndDestroy( data );
+ User::LeaveIfError( iScheduler.EnableSchedule( iScheduleHandle ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::DeleteScheduleL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerTaskScheduler::DeleteScheduleL()
+ {
+ if ( iScheduleHandle != KErrNotFound )
+ {
+ INFO_LOG( "CFileManagerTaskScheduler::DeleteScheduleL-Delete" )
+ iScheduler.DisableSchedule( iScheduleHandle );
+ iScheduler.DeleteTask( KSchedulerTaskId );
+ iScheduler.DeleteSchedule( iScheduleHandle );
+ iScheduleHandle = KErrNotFound;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerTaskScheduler::EnableBackupScheduleL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerTaskScheduler::EnableBackupScheduleL( const TBool aEnable )
+ {
+ // Delete old schedule first
+ DeleteScheduleL();
+
+ if ( aEnable )
+ {
+ CreateScheduleL();
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerViewBase.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,5121 @@
+/*
+* Copyright (c) 2002-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: Base class for all file manager views
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+#include <eikmenup.h> // CEikMenuPane
+#include <eikmenub.h> // CEikMenuBar
+#include <StringLoader.h>
+#include <AknCommonDialogs.h> // Common File Dialogs
+#include <CAknMemorySelectionDialog.h>
+#include <CAknFileSelectionDialog.h>
+#include <sendui.h>
+#include <sendnorm.rsg>
+#include <SenduiMtmUids.h>
+#include <AknProgressDialog.h>
+#include <eikprogi.h>
+#include <AknWaitNoteWrapper.h>
+#include <aknnotewrappers.h>
+#include <AknWaitDialog.h>
+#include <cmemstatepopup.h>
+#include <f32file.h>
+#include <aknmessagequerydialog.h>
+#include <CMessageData.h>
+#include <DRMHelper.h>
+#include <bautils.h>
+#include <AknCommonDialogsDynMem.h>
+#include "CFileManagerViewBase.h"
+#include "CFileManagerContainerBase.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "CFileManagerFileSelectionFilter.h"
+#include "FileManager.hrh"
+#ifdef RD_FILE_MANAGER_BACKUP
+ #include "CFileManagerSchBackupHandler.h"
+ #include "CFileManagerBackupSettings.h"
+ #include "CFileManagerTaskScheduler.h"
+#endif // RD_FILE_MANAGER_BACKUP
+#include <CFileManagerEngine.h>
+#include <CFileManagerUtils.h>
+#include <CFileManagerCommonDefinitions.h>
+#include <CFileManagerItemProperties.h>
+#include <CFileManagerActiveExecute.h>
+#include <Cfilemanageractivedelete.h>
+#include <FileManager.rsg>
+#include <FileManagerView.rsg>
+#include <FileManagerDebug.h>
+#include <FileManagerDlgUtils.h>
+#include <CFileManagerFeatureManager.h>
+#include <FileManagerPrivateCRKeys.h>
+#include <DataSyncInternalPSKeys.h>
+#include <connect/sbdefs.h>
+#include <e32property.h>
+#include <caf/caf.h>
+#include <drmagents.h>
+
+using namespace conn;
+
+// CONSTANTS
+const TUint KMessageSize = 1024;
+const TUint KMaxPercentage = 100;
+const TUint KProgressBarUpdateInterval = 1000000; // microseconds
+const TUint KDriveLetterSize = 1;
+const TUint KRefreshProgressStartDelay = 1000000; // microseconds
+const TInt KFmgrMSK = 3;
+const TInt KEstimateUpperLimit = 90; // User selectable continuation
+const TInt KEstimateLowerLimit = 10; // Backup will be interrupted
+const TUint32 KDefaultFolderMask = CFileManagerItemProperties::EFolder |
+ CFileManagerItemProperties::EDefault;
+const TInt64 KMSecToMicroSecMultiplier = 1000000;
+const TInt64 KMinToMicroSecMultiplier = KMSecToMicroSecMultiplier * 60;
+const TInt64 KHourToMicroSecMultiplier = KMinToMicroSecMultiplier * 60;
+const TUint KProgressBarAsyncStartDelay = 1500000; // microseconds
+
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// -----------------------------------------------------------------------------
+// IsWmDrmFile
+//
+// -----------------------------------------------------------------------------
+//
+static TBool IsWmDrmFile( const TDesC& aFullPath )
+ {
+ TBool ret( EFalse );
+ ContentAccess::CContent* content = NULL;
+ TRAPD( err, content = ContentAccess::CContent::CContent::NewL(
+ aFullPath, EContentShareReadWrite ) );
+ if ( err != KErrNone )
+ {
+ TRAP( err, content = ContentAccess::CContent::CContent::NewL(
+ aFullPath, EContentShareReadOnly ) );
+ }
+ if ( err == KErrNone )
+ {
+ TInt isProtected( 0 );
+ err = content->GetAttribute( EIsProtected, isProtected );
+ if ( err == KErrNone && isProtected )
+ {
+ TInt fileType( 0 );
+ err = content->GetAttribute( DRM::EDrmFileType, fileType );
+ ret = ( err == KErrNone && fileType == DRM::EDrmWMFile );
+ }
+ delete content;
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// Int64ToInt
+//
+// -----------------------------------------------------------------------------
+//
+static TInt Int64ToInt( const TInt64& aInt64 )
+ {
+ if ( aInt64 > KMaxTInt )
+ {
+ return KMaxTInt;
+ }
+ return I64INT( aInt64 );
+ }
+
+// -----------------------------------------------------------------------------
+// EmptyPwd
+//
+// -----------------------------------------------------------------------------
+//
+//static void EmptyPwd( TDes& aPwd )
+// {
+// aPwd.FillZ( aPwd.MaxLength( ) );
+// aPwd.Zero();
+// }
+
+// -----------------------------------------------------------------------------
+// ConvertCharsToPwd
+//
+// -----------------------------------------------------------------------------
+//
+//static void ConvertCharsToPwd( const TDesC& aWord, TDes8& aConverted )
+// {
+// // Make sure the target password is empty ( can't use the function here )
+// aConverted.FillZ( aConverted.MaxLength() );
+// aConverted.Zero();
+// TInt size( aWord.Size() );
+// if ( size )
+// {
+// if ( size > aConverted.MaxLength() )
+// {
+// size = aConverted.MaxLength();
+// }
+// aConverted.Copy( (TUint8*)aWord.Ptr(), size );
+// }
+// }
+
+// -----------------------------------------------------------------------------
+// IsSystemProcess
+//
+// -----------------------------------------------------------------------------
+//
+static TBool IsSystemProcess(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess )
+ {
+ switch ( aProcess )
+ {
+ case MFileManagerProcessObserver::EFormatProcess:
+ case MFileManagerProcessObserver::EBackupProcess:
+ case MFileManagerProcessObserver::ERestoreProcess:
+ case MFileManagerProcessObserver::ESchBackupProcess:
+ {
+ return ETrue;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// GetDeleteQueryPromptLC
+// Chooses correct string for the delete note
+// -----------------------------------------------------------------------------
+//
+static HBufC* GetDeleteQueryPromptLC( CFileManagerItemProperties& aProp, TInt aCount )
+ {
+
+ HBufC* prompt = NULL;
+ if ( aCount == 0 && aProp.ContainsAnyFilesOrFolders() )
+ {
+ prompt = StringLoader::LoadLC( R_QTN_FLDR_DEL_FULL_FLDRS_QUERY );
+ }
+ else if ( aCount <= 1 )
+ {
+ prompt = StringLoader::LoadLC( R_QTN_QUERY_COMMON_CONF_DELETE, aProp.NameAndExt() );
+ }
+ else // aCount > 1
+ {
+ prompt = StringLoader::LoadLC( R_QTN_FLDR_DEL_ITEMS_QUERY, aCount );
+ }
+
+ return prompt;
+ }
+
+// -----------------------------------------------------------------------------
+// MinIndex
+//
+// -----------------------------------------------------------------------------
+//
+static TInt MinIndex( CArrayFixFlat<TInt>& aIndexArray )
+ {
+ TInt count( aIndexArray.Count() );
+ if ( !count )
+ {
+ return 0;
+ }
+ // Find min index
+ TInt index( 0 );
+ TInt i( 0 );
+ TInt ret( aIndexArray.At( i ) );
+ ++i;
+ for( ; i < count; ++i )
+ {
+ index = aIndexArray.At( i );
+ if ( index < ret )
+ {
+ ret = index;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// SetCurrentYearMonthAndDay
+//
+// -----------------------------------------------------------------------------
+//
+static TTime SetCurrentYearMonthAndDay( const TTime& aTime )
+ {
+ TTime timeNow;
+ timeNow.HomeTime();
+ TDateTime dateTimeNow( timeNow.DateTime() );
+ TInt64 ret( timeNow.Int64() );
+ // Replace hours, minutes and seconds using given ones.
+ ret -= static_cast< TInt64 >( dateTimeNow.Hour() ) * KHourToMicroSecMultiplier;
+ ret -= static_cast< TInt64 >( dateTimeNow.Minute() ) * KMinToMicroSecMultiplier;
+ ret -= static_cast< TInt64 >( dateTimeNow.Second() ) * KMSecToMicroSecMultiplier;
+ ret -= dateTimeNow.MicroSecond();
+ TDateTime dateTime( aTime.DateTime() );
+ ret += static_cast< TInt64 >( dateTime.Hour() ) * KHourToMicroSecMultiplier;
+ ret += static_cast< TInt64 >( dateTime.Minute() ) * KMinToMicroSecMultiplier;
+ ret += static_cast< TInt64 >( dateTime.Second() ) * KMSecToMicroSecMultiplier;
+ return ret;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CFileManagerViewBase
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerViewBase::CFileManagerViewBase() :
+ iEngine( static_cast< CFileManagerDocument* >( AppUi()->Document() )->Engine() )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::~CFileManagerViewBase
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerViewBase::~CFileManagerViewBase()
+ {
+ delete iWaitNoteWrapper;
+ delete iActiveDelete;
+ delete iPeriodic;
+ delete iMarkedArray;
+ delete iContainer;
+ delete iActiveExec;
+ delete iRefreshProgressDelayedStart;
+ delete iEjectQueryDialog;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::GetSendFilesLC
+//
+// -----------------------------------------------------------------------------
+//
+CArrayFixFlat<TInt>* CFileManagerViewBase::GetSendFilesLC( TInt& aSize )
+ {
+ // Get index array and remove folders and play lists
+ CArrayFixFlat< TInt >* ret = MarkedArrayLC();
+ TInt i( ret->Count() );
+ while ( i > 0 )
+ {
+ --i;
+ // IconIdL() is slow if the icon is not cached yet.
+ // However, it is faster than FileTypeL().
+ switch ( iEngine.IconIdL( ret->At( i ) ) )
+ {
+ case EFileManagerFolderIcon: // FALLTHROUGH
+ case EFileManagerFolderSubIcon: // FALLTHROUGH
+ case EFileManagerFolderEmptyIcon: // FALLTHROUGH
+ case EFileManagerPlaylistFileIcon:
+ {
+ ret->Delete( i );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ aSize = Int64ToInt( iEngine.GetFileSizesL( *ret ) );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ConstructL( TInt aResId )
+ {
+ BaseConstructL( aResId );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::HandleCommandL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::HandleCommandL( TInt aCommand )
+ {
+ if ( !iContainer ) return;
+
+ TBool updateCba( !iContainer->SelectionModeEnabled() );
+
+ switch( aCommand )
+ {
+ case EFileManagerOpen:
+ {
+ CmdOpenL();
+ break;
+ }
+ case EFileManagerDelete:
+ {
+ CmdDeleteL();
+ break;
+ }
+ case EFileManagerMoveToFolder:
+ {
+ CmdMoveToFolderL();
+ break;
+ }
+ case EFileManagerCopyToFolder:
+ {
+ CmdCopyToFolderL();
+ break;
+ }
+ case EFileManagerNewFolder:
+ {
+ CmdNewFolderL();
+ break;
+ }
+ case EFileManagerMarkOne: // FALLTHROUGH
+ case EFileManagerUnmarkOne: // FALLTHROUGH
+ case EFileManagerToggleMark:
+ {
+ CmdToggleMarkL();
+ break;
+ }
+ case EFileManagerMarkAll:
+ {
+ CmdMarkAllL();
+ break;
+ }
+ case EFileManagerUnmarkAll:
+ {
+ CmdUnmarkAllL();
+ break;
+ }
+ case EFileManagerRename:
+ {
+ CmdRenameL();
+ break;
+ }
+ case EFileManagerFindFile:
+ {
+ CmdFindL();
+ break;
+ }
+ case EFileManagerFileDetails: // FALLTHROUGH
+ case EFileManagerFolderDetails: // FALLTHROUGH
+ case EFileManagerViewInfo:
+ {
+ CmdViewInfoL();
+ break;
+ }
+// case EFileManagerMemoryState:
+// {
+// CmdMemoryStateL();
+// break;
+// }
+ case EFileManagerReceiveViaIR:
+ {
+ CmdReceiveViaIRL();
+ break;
+ }
+ case EFileManagerCheckMark: // Suppress
+ {
+ break;
+ }
+ case EAknSoftkeyContextOptions: // FALLTHROUGH
+ case EFileManagerSelectionKey:
+ {
+ TInt count( iContainer->ListBoxSelectionIndexesCount() );
+ if ( !count )
+ {
+ HandleCommandL( EFileManagerOpen );
+ }
+ else if ( count > 0 )
+ {
+ ShowContextSensitiveMenuL();
+ }
+ break;
+ }
+ case EFileManagerSend:
+ {
+ if ( !iSendUiPopupOpened )
+ {
+ SendUiQueryL();
+ }
+ break;
+ }
+ case EFileManagerMoreInfoOnline:
+ {
+ OpenInfoUrlL( iContainer->ListBoxCurrentItemIndex() );
+ break;
+ }
+ case EFileManagerUnlockMemoryCard:
+ {
+ CmdUnlockDriveL();
+ break;
+ }
+// case EFileManagerMemoryCardName:
+// case EFileManagerMemoryCardRename: // Fall through
+// {
+// CmdRenameDriveL();
+// break;
+// }
+ //case EFileManagerMemoryCardFormat:
+ case EFileManagerMemoryStorageFormat:
+ case EFileManagerFormatMassStorage: // Fall through
+ {
+ CmdFormatDriveL();
+ break;
+ }
+// case EFileManagerMemoryCardPasswordSet:
+// {
+// CmdSetDrivePasswordL();
+// break;
+// }
+// case EFileManagerMemoryCardPasswordChange:
+// {
+// CmdChangeDrivePasswordL();
+// break;
+// }
+// case EFileManagerMemoryCardPasswordRemove:
+// {
+// CmdRemoveDrivePasswordL();
+// break;
+// }
+// case EFileManagerMemoryCardDetails:
+// {
+// CmdMemoryCardDetailsL();
+// break;
+// }
+ case EFileManagerConnectRemoveDrive:
+ {
+ SetRemoteDriveConnectionStateL( ETrue );
+ break;
+ }
+ case EFileManagerDisconnectRemoveDrive:
+ {
+ SetRemoteDriveConnectionStateL( EFalse );
+ break;
+ }
+ case EFileManagerRefreshRemoteDrive:
+ {
+ CmdRefreshDirectoryL();
+ break;
+ }
+ case EFileManagerSortByName:
+ case EFileManagerSortByType: // Fall through
+ case EFileManagerSortMostRecentFirst: // Fall through
+ case EFileManagerSortLargestFirst: // Fall through
+ case EFileManagerSortByMatch: // Fall through
+ {
+ CmdSortL( aCommand );
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+ if ( updateCba )
+ {
+ UpdateCbaL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::SendUiQueryL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SendUiQueryL()
+ {
+ //iSendUiPopupOpened = ETrue;
+
+ CSendUi& sendUi( static_cast< CFileManagerAppUi* >( AppUi() )->SendUiL() );
+ CMessageData* msgData = CMessageData::NewL();
+ CleanupStack::PushL( msgData );
+ TInt msgSize( KMessageSize );
+ CArrayFixFlat< TInt >* files = GetSendFilesLC( msgSize );
+ TInt count( files->Count() );
+ if ( count )
+ {
+ // Set dimmed services specified for FileManager by Send UI spec
+ const TInt KDimmedServices = 4;
+ CArrayFixFlat< TUid >* servicesToDim =
+ new ( ELeave ) CArrayFixFlat< TUid >( KDimmedServices );
+ CleanupStack::PushL( servicesToDim );
+
+ servicesToDim->AppendL( KSenduiMtmAudioMessageUid );
+ servicesToDim->AppendL( KMmsDirectUpload );
+ servicesToDim->AppendL( KMmsIndirectUpload );
+ servicesToDim->AppendL( KSenduiMtmPostcardUid );
+
+ TSendingCapabilities caps(
+ 0, msgSize, TSendingCapabilities::ESupportsAttachments );
+ for( TInt i( 0 ); i < count ; i++ )
+ {
+ HBufC* fullPath = iEngine.IndexToFullPathLC( files->At( i ) );
+ msgData->AppendAttachmentL( *fullPath );
+ CleanupStack::PopAndDestroy( fullPath );
+ }
+ // Let SendUi handle protected files, queries and filtering
+ sendUi.ShowQueryAndSendL( msgData, caps, servicesToDim );
+ CleanupStack::PopAndDestroy( servicesToDim );
+ }
+ CleanupStack::PopAndDestroy( files );
+ CleanupStack::PopAndDestroy( msgData );
+
+ iSendUiPopupOpened = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::MarkMenuFilteringL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::MarkMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( iContainer->ListBoxIsItemSelected( index ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMarkOne, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerUnmarkOne, ETrue );
+ }
+
+ if ( iEngine.IsFolder( index ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMarkOne, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerUnmarkOne, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMarkAll, ETrue );
+ }
+
+ TInt files( iEngine.FilesInFolderL() );
+ TInt count( iContainer->ListBoxSelectionIndexesCount() );
+ if ( count == files )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMarkAll, ETrue );
+ }
+
+ if ( !count )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerUnmarkAll, ETrue );
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdOpenL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerViewBase::TFileManagerOpenResult CFileManagerViewBase::CmdOpenL()
+ {
+ if ( !iContainer || iActiveProcess != ENoProcess )
+ {
+ return EOpenError; // Ignore to avoid mess up
+ }
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ TInt err( KErrNone );
+
+ if ( index < 0 )
+ {
+ return EOpenError;
+ }
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ TBool isFolder( iEngine.IsFolder( index ) );
+ StoreIndex();
+ TRAP( err, iEngine.OpenL( index ) );
+ if ( err == KErrNone )
+ {
+ if ( isFolder )
+ {
+ if ( !appUi->ActivateFoldersViewL() )
+ {
+ // Folders view is already open
+ // Refresh if this view is folders view
+ if ( Id() == CFileManagerAppUi::KFileManagerFoldersViewId )
+ {
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ }
+ return EFolderOpened;
+ }
+ return EFileOpened;
+ }
+ if ( !HandleFileNotFoundL( err ) )
+ {
+ if ( !isFolder )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_CANT_OPEN );
+ }
+ }
+ return EOpenError;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdDeleteL
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdDeleteL()
+ {
+
+ if ( !iContainer->ListBoxNumberOfItems() )
+ {
+ // List box is empty, nothing to delete
+ return;
+ }
+
+ const TInt selectionCount(iContainer->ListBoxSelectionIndexesCount() );
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+
+ if ( selectionCount == 1 )
+ {
+ // One item marked
+ const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+ index = items->At( 0 );
+ }
+
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+ CleanupStack::PushL( prop );
+
+ if ( DeleteStatusNotOkL( *prop, selectionCount ) )
+ {
+ // It is not possible to continue delete operation
+ CleanupStack::PopAndDestroy( prop );
+ return;
+ }
+
+ HBufC* prompt = GetDeleteQueryPromptLC( *prop, selectionCount );
+
+ TBool ret( EFalse );
+ DenyDirectoryRefresh( ETrue );
+ TRAPD( err, ret = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( *prompt ) );
+ DenyDirectoryRefresh( EFalse );
+ User::LeaveIfError( err );
+ if ( ret )
+ {
+ DeleteItemsL( index );
+ }
+ else
+ {
+ CheckPostponedDirectoryRefresh();
+ }
+ CleanupStack::PopAndDestroy( prompt );
+ CleanupStack::PopAndDestroy( prop );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdMoveToFolderL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdMoveToFolderL()
+ {
+
+ if ( DriveReadOnlyMmcL( iEngine.CurrentDirectory() ) )
+ {
+ return;
+ }
+
+ // double KMaxFileName is needed if both source and target are KMaxFileName
+ HBufC* fileName = HBufC::NewLC( KFmgrDoubleMaxFileName );
+ TPtr ptrFileName = fileName->Des();
+ CFileManagerFileSelectionFilter* filter =
+ new( ELeave ) CFileManagerFileSelectionFilter( iEngine );
+ CleanupStack::PushL( filter );
+
+ TInt memType(
+ AknCommonDialogsDynMem::EMemoryTypePhone |
+ AknCommonDialogsDynMem::EMemoryTypeMMC );
+
+ if ( FeatureManager().IsRemoteStorageFwSupported() )
+ {
+ memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+ }
+
+ DenyDirectoryRefresh( ETrue );
+ TBool ret( AknCommonDialogsDynMem::RunMoveDlgLD(
+ memType,
+ ptrFileName,
+ R_FILEMANAGER_MOVE_MEMORY_SELECTIONDIALOG,
+ filter ) );
+ DenyDirectoryRefresh( EFalse );
+ CleanupStack::PopAndDestroy( filter );
+
+ if ( ret && ptrFileName.Length() )
+ {
+ if ( !DriveReadOnlyMmcL( ptrFileName ) )
+ {
+ RunOperationL(
+ MFileManagerProcessObserver::EMoveProcess, ptrFileName );
+ }
+ }
+ if (!ret )
+ {
+ CheckPostponedDirectoryRefresh();
+ }
+
+ CleanupStack::PopAndDestroy( fileName );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdCopyToFolderL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdCopyToFolderL()
+ {
+ // double KMaxFileName is needed if both source and target are KMaxFileName
+ HBufC* fileName = HBufC::NewLC( KFmgrDoubleMaxFileName );
+ TPtr ptrFileName = fileName->Des();
+ CFileManagerFileSelectionFilter* filter =
+ new( ELeave ) CFileManagerFileSelectionFilter( iEngine );
+ CleanupStack::PushL( filter );
+
+ TInt memType(
+ AknCommonDialogsDynMem::EMemoryTypePhone |
+ AknCommonDialogsDynMem::EMemoryTypeMMC );
+
+ if ( FeatureManager().IsRemoteStorageFwSupported() )
+ {
+ memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+ }
+
+ DenyDirectoryRefresh( ETrue );
+ TBool ret( AknCommonDialogsDynMem::RunCopyDlgLD(
+ memType,
+ ptrFileName,
+ R_FILEMANAGER_COPY_MEMORY_SELECTIONDIALOG,
+ filter ) );
+ DenyDirectoryRefresh( EFalse );
+ CleanupStack::PopAndDestroy( filter );
+
+ if ( ret && ptrFileName.Length() )
+ {
+ if ( !DriveReadOnlyMmcL( ptrFileName ) )
+ {
+ RunOperationL(
+ MFileManagerProcessObserver::ECopyProcess, ptrFileName );
+ }
+ }
+ if (!ret )
+ {
+ CheckPostponedDirectoryRefresh();
+ }
+ CleanupStack::PopAndDestroy( fileName );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdNewFolderL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdNewFolderL()
+ {
+
+ if ( DriveReadOnlyMmcL( iEngine.CurrentDirectory() ) )
+ {
+ return;
+ }
+
+ StoreIndex();
+
+ if ( !iEngine.EnoughSpaceL(
+ iEngine.CurrentDirectory(),
+ 0,
+ MFileManagerProcessObserver::ENoProcess ) )
+ {
+ User::Leave( KErrDiskFull );
+ }
+ HBufC* folderNameBuf = HBufC::NewLC( KMaxFileName );
+ TPtr folderName( folderNameBuf->Des() );
+
+ if ( FileManagerDlgUtils::ShowFolderNameQueryL(
+ R_QTN_FLDR_NAME_PRMPT, folderName, iEngine, ETrue ) )
+ {
+ TBuf<KMaxPath> fullFolderName( iEngine.CurrentDirectory() );
+ fullFolderName.Append( folderName );
+ CFileManagerUtils::EnsureFinalBackslash( fullFolderName );
+
+ if ( iEngine.IsSystemFolder( fullFolderName ) )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL( R_QTN_FLDR_NAME_ALREADY_USED, folderName );
+ }
+ else
+ {
+ iEngine.NewFolderL( folderName );
+ }
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ else
+ {
+ if ( iContainer && iContainer->IsSearchFieldVisible() )
+ {
+ iContainer->DrawDeferred();
+ }
+ }
+ CleanupStack::PopAndDestroy( folderNameBuf );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdToggleMarkL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdToggleMarkL()
+ {
+ const TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( iEngine.IsFolder( index ) )
+ {
+ iContainer->ListBoxDeselectItem( index );
+ }
+ else
+ {
+ iContainer->ListBoxToggleItemL( index );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdMarkAllL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdMarkAllL()
+ {
+ iContainer->ListBoxSelectAllL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdUnmarkAllL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdUnmarkAllL()
+ {
+ iContainer->ListBoxClearSelection();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdRenameL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdRenameL()
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( index >= 0 )
+ {
+ StoreIndex();
+ CFileManagerItemProperties* prop =
+ iEngine.GetItemInfoL( index );
+ CleanupStack::PushL( prop );
+
+ if ( DriveReadOnlyMmcL( prop->FullPath() ) )
+ {
+ CleanupStack::PopAndDestroy( prop );
+ return;
+ }
+
+ HBufC* itemNameBuf = HBufC::NewLC( KMaxFileName );
+ TPtr itemName( itemNameBuf->Des() );
+ itemName.Append( prop->NameAndExt() );
+
+ TInt err( KErrNone );
+ TBool ret( EFalse );
+ if ( prop->TypeL() & CFileManagerItemProperties::EFolder )
+ {
+ DenyDirectoryRefresh( ETrue );
+ TRAP( err, ret = FileManagerDlgUtils::ShowFolderNameQueryL(
+ R_QTN_FLDR_ITEM_NAME_PRMPT, itemName, iEngine ) );
+ DenyDirectoryRefresh( EFalse );
+ User::LeaveIfError( err );
+ if ( ret )
+ {
+ if ( itemName.Length() > 1 )
+ {
+ if ( itemName[0] == '.' )
+ {
+ TInt j = 1;
+ for ( j; j < itemName.Length(); j++ )
+ {
+ if ( !( (itemName[j] <= 'Z') && (itemName[j] >= 'A') ) )
+ {
+ break;
+ }
+ }
+ if ( j == itemName.Length() )
+ {
+ itemName.Delete(0, 1);
+ }
+ }
+ }
+ TRAP( err, iEngine.RenameL( index, itemName ) );
+ if ( err == KErrAccessDenied ||
+ err == KErrInUse ||
+ err == KErrBadName ||
+ err == KErrAlreadyExists ||
+ err == KErrNotReady )
+ {
+ err = KErrNone; // Set error as handled
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_CANT_RENAME_ITEM,
+ prop->NameAndExt() );
+ }
+ }
+ }
+ else
+ {
+ DenyDirectoryRefresh( ETrue );
+ TRAP( err, ret = FileManagerDlgUtils::ShowFileNameQueryL(
+ R_QTN_FLDR_ITEM_NAME_PRMPT, prop->FullPath(), itemName, iEngine ) );
+ DenyDirectoryRefresh( EFalse );
+ User::LeaveIfError( err );
+ if ( ret )
+ {
+ TRAP( err, iEngine.RenameL( index, itemName ) );
+ if ( err == KErrAccessDenied ||
+ err == KErrInUse ||
+ err == KErrBadName ||
+ err == KErrAlreadyExists ||
+ err == KErrNotReady )
+ {
+ err = KErrNone; // Set error as handled
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_CANT_RENAME_ITEM,
+ prop->NameAndExt() );
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( itemNameBuf );
+ CleanupStack::PopAndDestroy( prop );
+ User::LeaveIfError( err );
+ }
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdFindL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdFindL()
+ {
+ HBufC* path = HBufC::NewLC( KMaxFileName );
+ TPtr ptrPath( path->Des() );
+ if( AskPathL( ptrPath, R_QTN_FMGR_FIND_PRTX ) )
+ {
+ HBufC* searchStringBuf = HBufC::NewLC( KMaxFileName );
+ TPtr searchString( searchStringBuf->Des() );
+ HBufC* prompt = StringLoader::LoadLC( R_QTN_FMGR_FIND_DATAQ_PRTX );
+ CAknTextQueryDialog *textQuery =
+ new( ELeave ) CAknTextQueryDialog( searchString, *prompt );
+ if ( textQuery->ExecuteLD( R_FILEMANAGER_SEARCH_QUERY ) )
+ {
+ iEngine.SetSearchStringL( searchString );
+ iEngine.SetSearchFolderL( ptrPath );
+ if ( Id() == CFileManagerAppUi::KFileManagerSearchResultsViewId )
+ {
+ // Start new search in the existing view
+ iIndex = 0;
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ else
+ {
+ // Open search view and start new search
+ StoreIndex();
+ // Ensure that current directory is set correctly.
+ // If current view was opened from previous search results view,
+ // backstep stack to current directory may be incomplete.
+ iEngine.SetDirectoryWithBackstepsL( iEngine.CurrentDirectory() );
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->ActivateSearchResultsViewL();
+ }
+ }
+ CleanupStack::PopAndDestroy( prompt );
+ CleanupStack::PopAndDestroy( searchStringBuf );
+ }
+ CleanupStack::PopAndDestroy( path );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdViewInfoL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdViewInfoL()
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( index >= 0 )
+ {
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+ CleanupStack::PushL( prop );
+ FileManagerDlgUtils::ShowItemInfoPopupL( *prop, FeatureManager() );
+ CleanupStack::PopAndDestroy( prop );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdMemoryStateL
+//
+// -----------------------------------------------------------------------------
+//
+//void CFileManagerViewBase::CmdMemoryStateL()
+// {
+// TInt drv( iEngine.CurrentDrive() );
+// if ( drv != KErrNotFound )
+// {
+// HBufC* title = StringLoader::LoadLC( R_QTN_FMGR_MSTATE_HEADING );
+// CMemStatePopup::RunLD(
+// static_cast< TDriveNumber >( drv ), *title );
+// CleanupStack::PopAndDestroy( title );
+// }
+// }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdReceiveViaIR
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdReceiveViaIRL()
+ {
+
+ if ( DriveReadOnlyMmcL( iEngine.CurrentDirectory() ) )
+ {
+ return;
+ }
+
+ iEngine.SetObserver( this );
+
+ ClearProgressBarL();
+
+ iProgressDialog = new( ELeave ) CAknProgressDialog(
+ reinterpret_cast< CEikDialog** >( &iProgressDialog ), ETrue );
+ iProgressDialog->PrepareLC( R_FILE_RECEIVE_DIALOG );
+ iProgressInfo = iProgressDialog->GetProgressInfoL();
+ if ( iProgressInfo )
+ {
+ // final value is 100 percent
+ iProgressInfo->SetFinalValue( KMaxPercentage );
+ }
+ iProgressDialog->RunLD();
+ iProgressDialog->SetCallback( this );
+
+ HBufC* label = StringLoader::LoadLC( R_QTN_IR_CONNECTING );
+ iProgressDialog->SetTextL( *label );
+ CleanupStack::PopAndDestroy( label );
+
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ TRAPD( err, appUi->StartIRReceiveL( *this ) );
+
+ if ( err == KErrNone )
+ {
+ iActiveProcess = MFileManagerProcessObserver::EIRReceiveProcess;
+ }
+ else
+ {
+ ClearProgressBarL();
+ User::Leave( err );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DynInitMenuPaneL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane)
+ {
+ TBool isHandled( ETrue );
+
+ switch( aResourceId )
+ {
+ // These menus are used by memory store and folders views
+ case R_FILEMANAGER_MEMORY_STORE_VIEW_MENU:
+ {
+ MemoryStoreMenuFilteringL( *aMenuPane );
+ break;
+ }
+ case R_FILEMANAGER_MARK_UNMARK_MENU:
+ case R_FILEMANAGER_CONTEXT_SENSITIVE_MARK_UNMARK_MENU:
+ {
+ MarkMenuFilteringL( *aMenuPane );
+ break;
+ }
+ case R_FILEMANAGER_ORGANISE_MENU:
+ {
+ OrganiseMenuFilteringL( *aMenuPane );
+ break;
+ }
+ case R_FILEMANAGER_DETAILS_MENU:
+ {
+ DetailsMenuFilteringL( *aMenuPane );
+ break;
+ }
+// case R_FILEMANAGER_MEMORY_CARD_MENU:
+// {
+// MemoryCardMenuFilteringL( *aMenuPane );
+// break;
+// }
+// case R_FILEMANAGER_MEMORY_CARD_PASSWORD_MENU:
+// {
+// MemoryCardPasswordMenuFilteringL( *aMenuPane );
+// break;
+// }
+ case R_FILEMANAGER_CONTEXT_SENSITIVE_MENU:
+ {
+ ContextSensitiveMenuFilteringL( *aMenuPane );
+ break;
+ }
+ case R_FILEMANAGER_SORT_MENU:
+ case R_FILEMANAGER_SEARCH_SORT_MENU: // Fall through
+ {
+ SortMenuFilteringL( *aMenuPane );
+ break;
+ }
+ default:
+ {
+ isHandled = EFalse;
+ break;
+ }
+ }
+
+ TBool isContextMenu( aResourceId == R_FILEMANAGER_CONTEXT_SENSITIVE_MENU );
+ if ( isHandled || isContextMenu )
+ {
+ CEikMenuBar* menuBar = MenuBar();
+ if ( menuBar )
+ {
+ if ( isContextMenu )
+ {
+ menuBar->SetMenuType( CEikMenuBar::EMenuContext );
+ }
+ else
+ {
+ menuBar->SetMenuType( CEikMenuBar::EMenuOptions );
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoActivateL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ if ( !iContainer )
+ {
+ iContainer = CreateContainerL();
+ iContainer->SetMopParent( this );
+ AppUi()->AddToStackL( *this, iContainer );
+ iEngine.SetObserver( this );
+ iContainer->ActivateL();
+ }
+
+ if ( iContainer )
+ {
+ iContainer->SetListEmptyL();
+ }
+
+ // Set container to observe MSK commands
+ CEikButtonGroupContainer* bgc = Cba();
+ if ( bgc )
+ {
+ CEikCba* cba = static_cast< CEikCba* >( bgc->ButtonGroup() );
+ cba->SetMSKCommandObserver( iContainer );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoDeactivate
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DoDeactivate()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromStack( iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::MarkedArrayLC
+//
+// -----------------------------------------------------------------------------
+//
+CArrayFixFlat<TInt>* CFileManagerViewBase::MarkedArrayLC()
+ {
+ TInt count( iContainer->ListBoxSelectionIndexesCount() );
+ CArrayFixFlat<TInt>* ret =
+ new( ELeave ) CArrayFixFlat<TInt>( count ? count : 1 );
+
+ CleanupStack::PushL( ret );
+
+ if ( !count )
+ {
+ if ( iContainer->ListBoxNumberOfItems() > 0)
+ {
+ ret->AppendL( iContainer->ListBoxCurrentItemIndex() );
+ }
+ return ret;
+ }
+
+ const CArrayFix< TInt >* items = iContainer->ListBoxSelectionIndexes();
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ ret->AppendL( items->At( i ) );
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DialogDismissedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DialogDismissedL( TInt aButtonId )
+ {
+ FUNC_LOG
+
+ if ( aButtonId == EAknSoftkeyCancel )
+ {
+ TBool isHandled( ETrue );
+ switch( iActiveProcess )
+ {
+ case ENoProcess:
+ {
+ if ( IsRefreshInProgress() )
+ {
+ // Already freed, just set to NULL
+ iProgressDialogRefresh = NULL;
+ iEngine.CancelRefresh();
+ DirectoryChangedL(); // Ensure that view gets updated
+ }
+ break;
+ }
+ case EIRReceiveProcess:
+ {
+ // Already freed, just set to NULL
+ iProgressDialog = NULL;
+ iProgressInfo = NULL;
+
+ static_cast< CFileManagerAppUi* >( AppUi() )->StopIRReceive();
+ break;
+ }
+ case ECopyProcess: // FALLTHROUGH
+ case EMoveProcess:
+ {
+ // Already freed, just set to NULL
+ iProgressDialog = NULL;
+ iProgressInfo = NULL;
+
+ delete iPeriodic;
+ iPeriodic = NULL;
+ if ( iActiveExec )
+ {
+ iActiveExec->CancelExecution();
+ }
+ break;
+ }
+ case EFileOpenProcess: // FALLTHROUGH
+ case EBackupProcess: // FALLTHROUGH
+ case ERestoreProcess:
+ {
+ // Already freed, just set to NULL
+ iProgressDialog = NULL;
+ iProgressInfo = NULL;
+
+ iEngine.CancelProcess( iActiveProcess );
+ if ( iActiveProcess == EBackupProcess ||
+ iActiveProcess == ERestoreProcess )
+ {
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->BackupOrRestoreEnded();
+ }
+ break;
+ }
+ case EFormatProcess: // FALLTHROUGH
+ case EEjectProcess:
+ {
+ // Already freed, just set to NULL
+ iProgressDialog = NULL;
+ iProgressInfo = NULL;
+ break;
+ }
+ default:
+ {
+ isHandled = EFalse;
+ break;
+ }
+ }
+ if ( isHandled )
+ {
+ iEikonEnv->SetSystem( EFalse );
+ iActiveProcess = ENoProcess;
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ if ( iSchBackupPending )
+ {
+ StartSchBackupL();
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessFinishedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ProcessFinishedL( TInt aError, const TDesC& aName )
+ {
+ FUNC_LOG
+
+ TRAPD( err, DoProcessFinishedL( aError, aName ) );
+ if( err != KErrNone )
+ {
+ // Clean up the active process before forwarding leave
+ ERROR_LOG2(
+ "CFileManagerViewBase::ProcessFinishedL-iActiveProcess=%d,err=%d",
+ iActiveProcess, err )
+ iEikonEnv->SetSystem( EFalse );
+ iActiveProcess = ENoProcess;
+ User::Leave( err );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoProcessFinishedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DoProcessFinishedL( TInt aError, const TDesC& aName )
+ {
+ FUNC_LOG
+
+ TBool isHandled( ETrue );
+ TBool doRefresh( ETrue );
+
+ LOG_IF_ERROR2( aError, "CFileManagerViewBase::DoProcessFinishedL-iActiveProcess=%d,aError=%d",
+ iActiveProcess, aError )
+
+ if ( iPeriodic && iProgressInfo && iTotalTransferredBytes )
+ {
+ iProgressInfo->SetAndDraw( iTotalTransferredBytes );
+ }
+ if ( IsSystemProcess( iActiveProcess ) )
+ {
+ // Remove system status to allow app close from task switcher
+ iEikonEnv->SetSystem( EFalse );
+ }
+
+ ClearProgressBarL();
+
+ switch( iActiveProcess )
+ {
+ case EIRReceiveProcess: // FALLTHROUGH
+ {
+ static_cast< CFileManagerAppUi* >( AppUi() )->StopIRReceive();
+ if ( aError != KErrNone && aError != KErrCancel )
+ {
+ if ( aError == KErrDiskFull )
+ {
+ ShowDiskSpaceErrorL( iEngine.CurrentDirectory() );
+ }
+ else
+ {
+ // Show general error note
+ Error( aError );
+ }
+ }
+ break;
+ }
+ case ECopyProcess: // FALLTHROUGH
+ case EMoveProcess:
+ {
+ if ( aError != KErrNone && aError != KErrCancel && !aName.Length() )
+ {
+ // Show general error note if item name is unavailable
+ if ( iActiveExec && aError == KErrDiskFull )
+ {
+ ShowDiskSpaceErrorL( iActiveExec->ToFolder() );
+ }
+ else
+ {
+ Error( aError );
+ }
+ }
+ else if ( aError != KErrNone )
+ {
+ // If the copy process is cancelled, no error notes should be displayed
+ if( aError != KErrCancel )
+ {
+ // Show more informative note first
+ if ( iActiveExec && aError == KErrDiskFull )
+ {
+ ShowDiskSpaceErrorL( iActiveExec->ToFolder() );
+ }
+ else if ( aError == KErrNoMemory ||
+ aError == KErrDiskFull ||
+ aError == KErrDirFull )
+ {
+ Error( aError );
+ }
+ if ( iActiveProcess == EMoveProcess )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FLDR_ITEM_CANNOT_BE_MOVED, aName );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FLDR_ITEM_CANNOT_BE_COPIED, aName );
+ }
+ }
+ delete iActiveExec;
+ iActiveExec = NULL;
+ }
+ else if ( iActiveProcess == EMoveProcess && iMarkedArray )
+ {
+ // Set focus to the item after selection
+ TInt newIndex( MinIndex( *iMarkedArray ) );
+ if ( iContainer )
+ {
+ iContainer->SetIndex( newIndex );
+ }
+ StoreIndex();
+ }
+
+ break;
+ }
+ case EFileOpenProcess:
+ {
+ if ( aError != KErrNone && aError != KErrCancel )
+ {
+ if ( aError == KErrNoMemory || aError == KErrDiskFull )
+ {
+ Error( aError );
+ }
+ else if ( aError == KErrNotSupported )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_UNSUPPORT );
+ }
+ else if ( aError == KErrFmgrNotSupportedRemotely )
+ {
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EInfoIcons,
+ R_QTN_FMGR_INFONOTE_UNABLE_OPEN_REMOTELY );
+ }
+ else if ( !HandleFileNotFoundL( aError ) )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_CANT_OPEN );
+ }
+ }
+ else
+ {
+ // No refresh needed if open was successful or canceled
+ doRefresh = EFalse;
+ }
+ break;
+ }
+ case EFormatProcess:
+ {
+ RefreshDriveInfoL();
+ if ( aError == KErrNone )
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ if ( DriveInfo().iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FMGR_MASS_FORMAT_COMPLETED );
+ }
+ else
+ {
+#endif // RD_MULTIPLE_DRIVE
+ FileManagerDlgUtils::ShowInfoNoteL( R_QTN_FORMAT_COMPLETED );
+
+ // After formatting a name to the card can be given
+ RenameDriveL( ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+ }
+#endif // RD_MULTIPLE_DRIVE
+ }
+ else if ( aError == KErrInUse || aError > 0 )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FORMAT_FILES_IN_USE );
+ }
+ else if ( aError != KErrCancel )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_CRITICAL_ERROR );
+ }
+ break;
+ }
+ case EBackupProcess:
+ {
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->BackupOrRestoreEnded();
+ if ( aError == KErrNone )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_BACKUP_COMPLETED );
+ }
+ else if ( aError == KErrDiskFull )
+ {
+#ifdef RD_FILE_MANAGER_BACKUP
+
+ CFileManagerBackupSettings& settings(
+ iEngine.BackupSettingsL() );
+
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EErrorIcons,
+ R_QTN_FMGR_BACKUP_DESTINATION_FULL,
+ iEngine.DriveName( settings.TargetDrive() ) );
+
+#else // RD_FILE_MANAGER_BACKUP
+
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_BACKUP_NO_SPACE );
+
+#endif // RD_FILE_MANAGER_BACKUP
+ }
+ else if ( aError > 0 )
+ {
+ // No critical error, but some files not handled
+ if ( aError > 1 )
+ {
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EInfoIcons,
+ R_QTN_FILES_NOT_BACKUPPED,
+ aError );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EInfoIcons,
+ R_QTN_ONE_FILE_NOT_BACKUPPED );
+ }
+ }
+ else if ( aError != KErrCancel )
+ {
+ if ( aError == KErrNoMemory || aError == KErrDirFull )
+ {
+ // Show more informative note first
+ Error( aError );
+ }
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_CRITICAL_ERROR );
+ }
+ break;
+ }
+ case ERestoreProcess:
+ {
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->BackupOrRestoreEnded();
+ if ( aError == KErrNone )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_RESTORE_COMPLETED );
+ }
+ else if ( aError == KErrDiskFull )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+#ifdef RD_FILE_MANAGER_BACKUP
+ R_QTN_FMGR_RESTORE_SPACE_ERROR
+#else // RD_FILE_MANAGER_BACKUP
+ R_QTN_RESTORE_NO_SPACE
+#endif // RD_FILE_MANAGER_BACKUP
+ );
+ }
+#ifdef RD_FILE_MANAGER_BACKUP
+ else if ( aError == KErrCorrupt )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_CORRUPTED_BACKUP_FILE );
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ else if ( aError > 0 )
+ {
+ // No critical error, but some files not handled
+ if ( aError > 1 )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FILES_NOT_RESTORED, aError );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_ONE_FILE_NOT_RESTORED );
+ }
+ }
+ else
+ {
+ if ( aError == KErrNoMemory || aError == KErrDirFull )
+ {
+ // Show more informative note first
+ Error( aError );
+ }
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_CRITICAL_ERROR );
+ }
+ break;
+ }
+ case EEjectProcess:
+ {
+ TRAP_IGNORE( ShowEjectQueryL() );
+ break;
+ }
+#ifdef RD_FILE_MANAGER_BACKUP
+ case ESchBackupProcess:
+ {
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->SchBackupHandlerL().ProcessFinishedL( aError, aName );
+ // No refresh needed, done by view activation
+ doRefresh = EFalse;
+ break;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ default:
+ {
+ isHandled = EFalse;
+ break;
+ }
+ }
+
+ if ( isHandled )
+ {
+ iEikonEnv->SetSystem( EFalse );
+ iActiveProcess = ENoProcess;
+
+ if ( doRefresh )
+ {
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ if ( iSchBackupPending )
+ {
+ StartSchBackupL();
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessAdvanceL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ProcessAdvanceL( TInt aValue )
+ {
+ FUNC_LOG
+
+ switch( iActiveProcess )
+ {
+ case EIRReceiveProcess:
+ {
+ if ( iProgressDialog )
+ {
+ HBufC* label = StringLoader::LoadLC(
+ R_QTN_FMGR_NOTE_RECEIVE_IR, aValue );
+ iProgressDialog->SetTextL( *label );
+ CleanupStack::PopAndDestroy( label );
+ // Incrementing progress of the process:
+ if ( iProgressInfo )
+ {
+ iProgressInfo->SetAndDraw( aValue );
+ }
+ }
+ break;
+ }
+ case EBackupProcess: // FALLTHROUGH
+ case ERestoreProcess: // FALLTHROUGH
+ case EFormatProcess:
+ {
+#ifdef RD_FILE_MANAGER_BACKUP
+ if ( iActiveProcess == EBackupProcess && iProgressDialog )
+ {
+ HBufC* label = StringLoader::LoadLC(
+ R_QTN_BACKUP_INPROGRESS );
+ iProgressDialog->SetTextL( *label );
+ CleanupStack::PopAndDestroy( label );
+
+ iProgressDialog->ButtonGroupContainer().SetCommandSetL(R_AVKON_SOFTKEYS_CANCEL);
+ iProgressDialog->ButtonGroupContainer().DrawDeferred();
+ }
+ else if ( iActiveProcess == ERestoreProcess && iProgressDialog )
+ {
+ HBufC* label = StringLoader::LoadLC(
+ R_QTN_RESTORE_INPROGRESS );
+ iProgressDialog->SetTextL( *label );
+ CleanupStack::PopAndDestroy( label );
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ if ( iProgressInfo )
+ {
+ iProgressInfo->SetAndDraw( aValue );
+ }
+ break;
+ }
+#ifdef RD_FILE_MANAGER_BACKUP
+ case ESchBackupProcess:
+ {
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->SchBackupHandlerL().ProcessAdvanceL( aValue );
+ break;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ default:
+ {
+ break;
+ }
+ }
+ iTotalTransferredBytes = static_cast<TUint>(aValue); // to avoid over 2GB files looks likes minus value
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessStartedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ProcessStartedL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess,
+ TInt aFinalValue )
+ {
+ FUNC_LOG
+
+ // For preventing shutter to close app during system process
+ iEikonEnv->SetSystem( IsSystemProcess( aProcess ) );
+
+ switch( aProcess )
+ {
+ case EIRReceiveProcess:
+ {
+ if ( iProgressDialog )
+ {
+ HBufC* label = StringLoader::LoadLC(
+ R_QTN_FMGR_NOTE_RECEIVE_IR, 0 );
+ iProgressDialog->SetTextL( *label );
+ CleanupStack::PopAndDestroy( label );
+ }
+ break;
+ }
+ case EFileOpenProcess:
+ {
+ ClearProgressBarL();
+ LaunchProgressDialogL( 0, 0, aProcess );
+ iActiveProcess = aProcess;
+ break;
+ }
+ case ERestoreProcess:
+ {
+ CEikButtonGroupContainer* cba = Cba();
+ cba->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
+ cba->DrawDeferred();
+ // FALLTHROUGH
+ }
+ case EBackupProcess: // FALLTHROUGH
+ case EFormatProcess:
+ {
+ if ( iProgressDialog )
+ {
+ if ( !iProgressDialog->IsVisible() )
+ {
+ iProgressDialog->MakeVisible( ETrue );
+ }
+ }
+ if ( iProgressInfo )
+ {
+ iProgressInfo->SetFinalValue( aFinalValue );
+ }
+ break;
+ }
+#ifdef RD_FILE_MANAGER_BACKUP
+ case ESchBackupProcess:
+ {
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->SchBackupHandlerL().ProcessStartedL( aFinalValue );
+ break;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::RunOperationL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RunOperationL
+ ( MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ const TDesC& aToFolder )
+ {
+
+ StoreIndex();
+ delete iMarkedArray;
+ iMarkedArray = NULL;
+ iMarkedArray = MarkedArrayLC();
+ CleanupStack::Pop( iMarkedArray );
+
+ // Check if marked source and destination folder are available
+ if ( !iMarkedArray->Count() || !IsDriveAvailable( aToFolder ) )
+ {
+ return;
+ }
+
+ CFileManagerItemProperties* prop =
+ iEngine.GetItemInfoLC( iMarkedArray->At( 0 ) );
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ // When this flag is on all the selected items have to be gone through and checked
+ // whether they are protected and the user has to be notified when moving or
+ // copying file(s) is impossible. This only applies to processes from phone to MMC.
+ TBool process( ETrue );
+ if ( CFileManagerUtils::IsFromInternalToRemovableDrive(
+ iEikonEnv->FsSession(), iEngine.CurrentDirectory(), aToFolder ) )
+ {
+ TInt fileAmount (iMarkedArray->Count());
+
+ // Only one folder can be selected at a time
+ if (iEngine.IsFolder(iMarkedArray->At( 0 )))
+ {
+ if ( prop->FilesContainedL() == 0 && prop->FoldersContainedL() == 0)
+ {
+ process = ETrue;
+ }
+ else if (AreChosenFilesProtectedL( ETrue ))
+ {
+ if ( aOperation == EMoveProcess )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_DRM_INFO_MOVE_FOLDER_FORBID );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_DRM_INFO_COPY_FOLDER_FORBID );
+ }
+ process = EFalse;
+ }
+ else if (AreChosenFilesProtectedL( EFalse ))
+ {
+ TInt textId( 0 );
+ if ( aOperation == EMoveProcess )
+ {
+ textId = R_QTN_DRM_QUERY_MOVE_FORBIDDEN;
+ }
+ else
+ {
+ textId = R_QTN_DRM_QUERY_COPY_FORBIDDEN;
+ }
+ if ( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ textId ) )
+ {
+ // Engine will not touch protected objects anyway
+ process = ETrue;
+ }
+ else
+ {
+ process = EFalse;
+ }
+ }
+ }
+ else if ( fileAmount == 1 && AreChosenFilesProtectedL( ETrue ))
+ {
+ if ( aOperation == EMoveProcess )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_DRM_INFO_MOVE_ONE_FORBID );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_DRM_INFO_COPY_ONE_FORBID );
+ }
+ process= EFalse;
+ }
+ else if ( fileAmount > 1 && AreChosenFilesProtectedL( EFalse ))
+ {
+ if (AreChosenFilesProtectedL( ETrue ))
+ {
+ if ( aOperation == EMoveProcess )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_DRM_INFO_MOVE_MANY_FORBID );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_DRM_INFO_COPY_MANY_FORBID );
+ }
+ process= EFalse;
+ }
+ else
+ {
+ TInt textId( 0 );
+ if ( aOperation == EMoveProcess )
+ {
+ textId = R_QTN_DRM_QUERY_MOVE_FORBIDDEN;
+ }
+ else
+ {
+ textId = R_QTN_DRM_QUERY_COPY_FORBIDDEN;
+ }
+ if ( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ textId ) )
+ {
+ // Engine will not touch protected objects anyway
+ process = ETrue;
+ }
+ else
+ {
+ process = EFalse;
+ }
+ }
+ }
+ }
+ if ( process )
+ {
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+
+ TInt64 size( 0 );
+ // Skip remote folder size counting because it may last very long time.
+ // The content may also change during the operation what makes
+ // the counting needless.
+ if ( !( prop->IsRemoteDrive() &&
+ ( prop->TypeL() & CFileManagerItemProperties::EFolder ) ) )
+ {
+ size = iEngine.GetFileSizesL( *iMarkedArray ) ;
+ }
+ if ( size == KErrNotFound )
+ {
+ // User has cancelled size calculation, do nothing
+ }
+ else if ( iEngine.EnoughSpaceL( aToFolder, size, aOperation ))
+ {
+ iTotalTransferredBytes = 0;
+ iEngine.SetObserver( this );
+ if ( aOperation == EMoveProcess &&
+ aToFolder.Left( KDriveLetterSize ) ==
+ prop->FullPath().Left( KDriveLetterSize ) )
+ {
+ // If operation is move and it happens inside drive
+ // set size to file amount
+ // CFileMan is not calling notify if those conditions apply
+ if ( iMarkedArray->Count() > 0 )
+ {
+ size = iMarkedArray->Count();
+ }
+ else
+ {
+ // Folder move time we cannot predict, so setting size to
+ // 0 to show wait note, one file moves so fast that it
+ // won't show wait note anyway
+ size = 0;
+ }
+ }
+
+ if ( prop->IsRemoteDrive() ||
+ CFileManagerUtils::IsRemoteDrive(
+ iEikonEnv->FsSession(), aToFolder ) )
+ {
+ // Use wait note for remote drives
+ // because real progress information is unavailable
+ size = 0;
+ }
+
+ LaunchProgressDialogL( size, 0, aOperation );
+ delete iActiveExec;
+ iActiveExec = NULL;
+ iActiveExec = CFileManagerActiveExecute::NewL(
+ iEngine, aOperation, *this, *iMarkedArray, aToFolder );
+ iActiveProcess = aOperation;
+ TRAPD( err, iActiveExec->ExecuteL( CFileManagerActiveExecute::ENoOverWrite ) );
+ if ( err != KErrNone )
+ {
+ // Clean up the active process before forwarding leave
+ ERROR_LOG2(
+ "CFileManagerViewBase::RunOperationL-aOperation=%d,err=%d",
+ aOperation, err )
+ iActiveProcess = ENoProcess;
+ User::Leave( err );
+ }
+ }
+ else
+ {
+ ShowDiskSpaceErrorL( aToFolder );
+ }
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ }
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+
+ CleanupStack::PopAndDestroy( prop );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessQueryOverWriteL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::ProcessQueryOverWriteL
+ ( const TDesC& aOldName, TDes& aNewName, TFileManagerProcess aOperation )
+ {
+
+ TParsePtrC name( aOldName );
+
+ // Stop progress note before showing the query to be restarted later.
+ // Note that progress note may still exist after stop (to fill min time on screen)
+ // and it gets deleted later by AVKON. Asynchronous restart is needed to prevent
+ // mess up (if note still exists). Otherwise starting and stopping progress note too
+ // quickly multiple times leads to mess up in AVKON's note handling.
+ StopProgressDialogAndStoreValues();
+
+ TBool overWrite( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ R_QTN_FLDR_OVERWRITE_QUERY, name.NameAndExt() ) );
+ if ( !overWrite )
+ {
+ if ( !FileManagerDlgUtils::ShowFileNameQueryL(
+ R_QTN_FLDR_ITEM_NAME_PRMPT, aOldName, aNewName, iEngine ) )
+ {
+ aNewName.Zero();
+ }
+ }
+
+ if ( iActiveProcess == aOperation &&
+ ( aOperation == MFileManagerProcessObserver::ECopyProcess ||
+ aOperation == MFileManagerProcessObserver::EMoveProcess ) )
+ {
+ // Progress note needs asynchronous start because of AVKON's note handling.
+ delete iRefreshProgressDelayedStart;
+ iRefreshProgressDelayedStart = NULL;
+ iRefreshProgressDelayedStart = CPeriodic::NewL( CActive::EPriorityUserInput );
+ iRefreshProgressDelayedStart->Start(
+ KProgressBarAsyncStartDelay, KProgressBarAsyncStartDelay,
+ TCallBack( LaunchProgressDialogAsync, this ) );
+ }
+
+ return overWrite;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessQueryRenameL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::ProcessQueryRenameL
+ ( const TDesC& aOldName, TDes& aNewName, TFileManagerProcess aOperation )
+ {
+ TParsePtrC typeCheck( aOldName );
+ TParse oldName;
+ TBool folderRename( EFalse );
+
+ // Check is item file or folder
+ if ( !typeCheck.NameOrExtPresent() )
+ {
+ oldName.Set( aOldName.Left( aOldName.Length() - 1 ), NULL, NULL );
+ folderRename = ETrue;
+ }
+ else
+ {
+ oldName.Set( aOldName , NULL, NULL );
+ }
+
+ // Stop progress note before showing the query to be restarted later.
+ // Note that progress note may still exist after stop (to fill min time on screen)
+ // and it gets deleted later by AVKON. Asynchronous restart is needed to prevent
+ // mess up (if note still exists). Otherwise starting and stopping progress note too
+ // quickly multiple times leads to mess up in AVKON's note handling.
+ StopProgressDialogAndStoreValues();
+
+ TBool rename( FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL(
+ R_QTN_FLDR_RENAME_QUERY, oldName.NameAndExt() ) );
+ if ( rename )
+ {
+ TBool done( 0 );
+ if ( folderRename )
+ {
+ aNewName.Copy( aOldName );
+ done = FileManagerDlgUtils::ShowFolderNameQueryL(
+ R_QTN_FLDR_ITEM_NAME_PRMPT, aNewName, iEngine );
+ }
+ else
+ {
+ done = FileManagerDlgUtils::ShowFileNameQueryL(
+ R_QTN_FLDR_ITEM_NAME_PRMPT, aOldName, aNewName, iEngine );
+ }
+
+ if ( !done )
+ {
+ // User cancelled rename
+ aNewName.Zero();
+ }
+ }
+
+ if ( iActiveProcess == aOperation &&
+ ( aOperation == MFileManagerProcessObserver::ECopyProcess ||
+ aOperation == MFileManagerProcessObserver::EMoveProcess ) )
+ {
+ // Progress note needs asynchronous start because of AVKON's note handling.
+ delete iRefreshProgressDelayedStart;
+ iRefreshProgressDelayedStart = NULL;
+ iRefreshProgressDelayedStart = CPeriodic::NewL( CActive::EPriorityUserInput );
+ iRefreshProgressDelayedStart->Start(
+ KProgressBarAsyncStartDelay, KProgressBarAsyncStartDelay,
+ TCallBack( LaunchProgressDialogAsync, this ) );
+ }
+
+ return rename;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::LaunchProgressDialogL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::LaunchProgressDialogL(
+ TInt64 aFinalValue,
+ TInt64 aInitialValue,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ TBool aImmediatelyVisible )
+ {
+ TInt dialogId( 0 );
+ TInt textId( 0 );
+ TBool isPeriodic( EFalse );
+ TInt value;
+ value=Int64ToInt(aFinalValue);
+ switch ( aOperation )
+ {
+ case ECopyProcess:
+ {
+ isPeriodic = ( value > 1 );
+ if ( isPeriodic )
+ {
+ dialogId = R_FILEMANAGER_PROGRESS_NOTE_COPY;
+ }
+ else
+ {
+ dialogId = R_FILEMANAGER_WAIT_NOTE_COPY;
+ }
+ break;
+ }
+ case EMoveProcess:
+ {
+ isPeriodic = ( value > 1 );
+ if ( isPeriodic )
+ {
+ dialogId = R_FILEMANAGER_PROGRESS_NOTE_MOVE;
+ }
+ else
+ {
+ dialogId = R_FILEMANAGER_WAIT_NOTE_MOVE;
+ }
+ break;
+ }
+ case EFormatProcess:
+ {
+ dialogId = R_FILEMANAGER_PROGRESS_NOTE;
+ TFileManagerDriveInfo drvInfo;
+ DriveInfoAtCurrentPosL( drvInfo );
+#ifdef RD_MULTIPLE_DRIVE
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage
+ || drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+ {
+ textId = R_QTN_FMGR_MASS_FORMAT_INPROGRESS;
+ }
+ else
+ {
+#endif // RD_MULTIPLE_DRIVE
+ textId = R_QTN_FORMAT_INPROGRESS;
+#ifdef RD_MULTIPLE_DRIVE
+ }
+#endif // RD_MULTIPLE_DRIVE
+ break;
+ }
+ case EBackupProcess:
+ {
+ dialogId = R_FILEMANAGER_PROGRESS_NOTE_WITH_CANCEL;
+#ifdef RD_FILE_MANAGER_BACKUP
+ textId = R_QTN_FMGR_PROGRESS_PREPARING_BACKUP;
+#else // RD_FILE_MANAGER_BACKUP
+ textId = R_QTN_BACKUP_INPROGRESS;
+#endif // RD_FILE_MANAGER_BACKUP
+ aImmediatelyVisible = ETrue;
+ break;
+ }
+ case ERestoreProcess:
+ {
+ dialogId = R_FILEMANAGER_PROGRESS_NOTE;
+#ifdef RD_FILE_MANAGER_BACKUP
+ textId = R_QTN_FMGR_PROGRESS_PREPARING_RESTORE;
+#else // RD_FILE_MANAGER_BACKUP
+ textId = R_QTN_RESTORE_INPROGRESS;
+#endif // RD_FILE_MANAGER_BACKUP
+ break;
+ }
+ case EEjectProcess:
+ {
+ dialogId = R_FILEMANAGER_WAIT_NOTE;
+ textId = R_QTN_WAIT_EJECT;
+ break;
+ }
+ case EFileOpenProcess:
+ {
+ dialogId = R_FILEMANAGER_WAIT_NOTE_OPEN_WITH_CANCEL;
+ break;
+ }
+ default:
+ {
+ dialogId = R_FILEMANAGER_WAIT_NOTE_OPEN;
+ break;
+ }
+ }
+ LaunchProgressBarL(
+ dialogId, textId, aFinalValue, aInitialValue, isPeriodic, aImmediatelyVisible );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ if ( aOperation == EBackupProcess && iProgressDialog )
+ {
+ iProgressDialog->ButtonGroupContainer().SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY);
+ iProgressDialog->ButtonGroupContainer().DrawDeferred();
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ShowWaitDialogL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ShowWaitDialogL( MAknBackgroundProcess& aProcess)
+ {
+ CAknWaitNoteWrapper* waitNoteWrapper = CAknWaitNoteWrapper::NewL();
+ CleanupDeletePushL( waitNoteWrapper );
+ waitNoteWrapper->ExecuteL( R_FILEMANAGER_WAIT_NOTE_PROCESS, aProcess );
+ CleanupStack::PopAndDestroy( waitNoteWrapper );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DoUpdateProgressBar
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DoUpdateProgressBar()
+ {
+ // Update progress indicator
+ if ( iProgressDialog && iProgressInfo )
+ {
+ iProgressInfo->SetAndDraw( iTotalTransferredBytes/1024 );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdateProgressBar
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::UpdateProgressBar(TAny* aPtr )
+ {
+ static_cast< CFileManagerViewBase* >( aPtr )->DoUpdateProgressBar();
+ return KErrNone;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshStartedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshStartedL()
+ {
+ FUNC_LOG
+
+ DenyDirectoryRefresh( EFalse );
+
+ if ( static_cast< CFileManagerAppUi* >( AppUi() )->IsFmgrForeGround() )
+ {
+ if ( iContainer )
+ {
+ iContainer->SetListEmptyL();
+ }
+
+ ClearProgressBarL();
+ if ( Id() == CFileManagerAppUi::KFileManagerSearchResultsViewId )
+ {
+ // On remote drives local find progress note is sometimes
+ // totally blocked if the note is not started directly here.
+ iProgressDialogRefresh = new( ELeave ) CAknProgressDialog(
+ reinterpret_cast< CEikDialog** >(
+ &iProgressDialogRefresh ), EFalse );
+ iProgressDialogRefresh->SetCallback( this );
+ iProgressDialogRefresh->ExecuteLD( R_FILEMANAGER_FIND_WAIT_DIALOG );
+ }
+ else
+ {
+ // Start progress dialog using own timer, otherwise progress dialog
+ // burns sometimes quite a lot CPU time even if it is not
+ // visible at all.
+ iRefreshProgressDelayedStart = CPeriodic::NewL(
+ CActive::EPriorityUserInput );
+ iRefreshProgressDelayedStart->Start(
+ KRefreshProgressStartDelay,
+ KRefreshProgressStartDelay,
+ TCallBack( RefreshProgressDelayedStart, this ) );
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshStoppedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshStoppedL()
+ {
+ FUNC_LOG
+
+ ClearProgressBarL();
+
+ if( iContainer )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( index > 0 && index < iContainer->ListBoxNumberOfItems() )
+ {
+ iIndex = index;
+ }
+ DirectoryChangedL();
+ UpdateCbaL();
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::AreChosenFilesProtectedL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::AreChosenFilesProtectedL( TBool aMode )
+ {
+ TBool ret = aMode;
+ CArrayFixFlat<TInt>* indexArray = MarkedArrayLC();
+
+ TInt i( 0 );
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ TBool protectedFile( EFalse );
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+
+ while( ( ret == aMode ) && i < indexArray->Count() )
+ {
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoL( indexArray->At( i ));
+ CleanupStack::PushL( prop );
+
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ // Only one folder can be selected at a time
+ if (iEngine.IsFolder(indexArray->At( i )))
+ {
+
+ CDirScan *dirScan = CDirScan::NewLC( iEikonEnv->FsSession() );
+ CDir *currentDir = NULL;
+ // Go through the files only
+ dirScan->SetScanDataL( prop->FullPath(), KEntryAttNormal, ESortNone );
+
+ dirScan->NextL( currentDir );
+ while ( ( ret == aMode ) && currentDir )
+ {
+ CleanupStack::PushL( currentDir ); // currentDir won't be null
+ // due to while loop conditional
+ TInt j( 0 );
+ while ( ( ret == aMode ) && j < currentDir->Count() )
+ {
+ const TEntry ¤tFile( ( *currentDir )[ j ] );
+ TPtrC currentPath (dirScan->FullPath());
+ HBufC* currentFilePath = HBufC::NewLC( KMaxFileName );
+ TPtr completeFilePath = currentFilePath->Des();
+ completeFilePath.Append(currentPath);
+ completeFilePath.Append(currentFile.iName);
+
+
+ // the following could leave if file is opened in exclusive
+ // mode by another app- will cause 'in use' error dialog
+ //to be displayed
+ User::LeaveIfError( iEngine.IsDistributableFile( completeFilePath,
+ protectedFile ));
+ if( protectedFile == !aMode )
+ {
+ ret = !aMode;
+ }
+ ++j;
+ CleanupStack::PopAndDestroy( currentFilePath );
+ currentFilePath = NULL;
+ }
+ CleanupStack::PopAndDestroy( currentDir );
+ currentDir=NULL;
+ dirScan->NextL( currentDir );
+ }
+ CleanupStack::PopAndDestroy( dirScan );
+ dirScan = NULL;
+ }
+ else
+ {
+
+ // the following could leave if file is opened in exclusive
+ // mode by another app- will cause 'in use' error dialog
+ //to be displayed
+ User::LeaveIfError( iEngine.IsDistributableFile( prop->FullPath(),
+ protectedFile ));
+ if( protectedFile == !aMode )
+ {
+ ret = !aMode;
+ }
+ }
+
+#else // __KEEP_DRM_CONTENT_ON_PHONE
+ if ( ( (prop->TypeL() & CFileManagerItemProperties::EForwardLocked)
+ == CFileManagerItemProperties::EForwardLocked ) == !aMode )
+ {
+ ret = !aMode;
+ }
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+ CleanupStack::PopAndDestroy( prop );
+ ++i;
+ }
+ CleanupStack::PopAndDestroy( indexArray );
+ return ret;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ShowContextSensitiveMenuL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ShowContextSensitiveMenuL()
+ {
+ CEikMenuBar* menu = MenuBar();
+ // set context sensitive menu
+ menu->SetMenuTitleResourceId( R_FILEMANAGER_CONTEXT_SENSITIVE_MENUBAR );
+ // show context sensitive menu
+ TRAPD( err, menu->TryDisplayMenuBarL() );
+ menu->SetMenuTitleResourceId( R_FILEMANAGER_MEMORY_STORE_MENUBAR );
+ User::LeaveIfError( err );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ClearProgressBarL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ClearProgressBarL()
+ {
+ FUNC_LOG
+
+ iProgressInfo = NULL;
+
+ if ( iProgressDialog )
+ {
+ iProgressDialog->ProcessFinishedL();
+ iProgressDialog = NULL;
+ }
+ if ( iProgressDialogRefresh )
+ {
+ iProgressDialogRefresh->ProcessFinishedL();
+ iProgressDialogRefresh = NULL;
+ }
+ delete iPeriodic;
+ iPeriodic = NULL;
+
+ delete iRefreshProgressDelayedStart;
+ iRefreshProgressDelayedStart = NULL;
+
+ iTotalTransferredBytes = 0;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::StoreIndex
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::StoreIndex()
+ {
+ if ( iContainer )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ if ( index >= 0 &&
+ index < iContainer->ListBoxNumberOfItems() )
+ {
+ iIndex = index; // Store view's internal index
+
+ // Store navigation index
+ TUid viewId( Id() );
+ if ( viewId == CFileManagerAppUi::KFileManagerMemoryStoreViewId ||
+ viewId == CFileManagerAppUi::KFileManagerFoldersViewId )
+ {
+ iEngine.SetCurrentIndex( index );
+ }
+ }
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DriveReadOnlyMmcL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::DriveReadOnlyMmcL( const TInt aDrive ) const
+ {
+ TBool ret( EFalse );
+ TUint32 drvState( 0 );
+ TInt err( iEngine.DriveState( drvState, aDrive ) );
+ if ( err == KErrNone &&
+ ( drvState & TFileManagerDriveInfo::EDriveWriteProtected ) )
+ {
+ ret = ETrue;
+ }
+ if ( ret )
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ HBufC* text = iEngine.GetFormattedDriveNameLC(
+ aDrive,
+ R_QTN_MEMC_MULTIPLE_MEMC_READ_ONLY );
+ FileManagerDlgUtils::ShowErrorNoteL( *text );
+ CleanupStack::PopAndDestroy( text );
+#else // RD_MULTIPLE_DRIVE
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_MEMC_MEMORYCARD_READ_ONLY );
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+ return ret;
+ }
+
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DriveReadOnlyMmcL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::DriveReadOnlyMmcL( const TDesC& aFullPath ) const
+ {
+ TBool ret( EFalse );
+ if ( aFullPath.Length() )
+ {
+ TInt drive = TDriveUnit( aFullPath );
+ ret = DriveReadOnlyMmcL( drive );
+ }
+ return ret;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CurrentProcess
+//
+// ------------------------------------------------------------------------------
+//
+MFileManagerProcessObserver::TFileManagerProcess CFileManagerViewBase::CurrentProcess()
+ {
+ return iActiveProcess;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::Error
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::Error( TInt aError )
+ {
+ if ( aError != KErrNone )
+ {
+ ERROR_LOG1( "CFileManagerViewBase::Error()-aError=%d", aError )
+ iEikonEnv->HandleError( aError );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::AddSendOptionL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::AddSendOptionL(
+ CEikMenuPane& aMenuPane,
+ const TInt aCommandIdAfter )
+ {
+ CSendUi& sendUi( static_cast< CFileManagerAppUi* >( AppUi() )->SendUiL() );
+ TInt pos( 0 );
+ aMenuPane.ItemAndPos( aCommandIdAfter, pos );
+ CArrayFixFlat< TInt >* indexArray = MarkedArrayLC();
+ TInt msgSize( KMessageSize );
+ if ( indexArray->Count() == 1 &&
+ !iEngine.IsFolder( indexArray->At( 0 ) ) )
+ {
+ msgSize = Int64ToInt( iEngine.GetFileSizesL( *indexArray ) );
+ }
+ CleanupStack::PopAndDestroy( indexArray );
+ TSendingCapabilities caps(
+ 0, msgSize, TSendingCapabilities::ESupportsAttachments );
+ sendUi.AddSendMenuItemL( aMenuPane, pos, EFileManagerSend, caps );
+ aMenuPane.SetItemSpecific(EFileManagerSend, ETrue);
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DeleteStatusNotOk
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::DeleteStatusNotOkL(
+ CFileManagerItemProperties& aProp, TInt aSelectionCount ) const
+ {
+ if ( DriveReadOnlyMmcL( aProp.FullPath() ) )
+ {
+ // Can't delete from read-only MMC card
+ return ETrue;
+ }
+
+ TUint32 itemType( aProp.TypeL() );
+ if ( !aSelectionCount &&
+ ( itemType & KDefaultFolderMask ) == KDefaultFolderMask )
+ {
+ // Can't delete default folder
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_DEL_DEF_FLDR );
+ return ETrue;
+ }
+ if ( aSelectionCount <= 1 &&
+ ( itemType & CFileManagerItemProperties::EOpen ) )
+ {
+ // Can't delete open file
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_DELETE_FILE_OPEN );
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DeleteItemsL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DeleteItemsL( TInt aIndex )
+ {
+
+ CArrayFixFlat<TInt>* deleteArray = MarkedArrayLC();
+ TInt newIndex( MinIndex( *deleteArray ) );
+ delete iActiveDelete;
+ iActiveDelete = NULL;
+ iActiveDelete = iEngine.CreateActiveDeleteL( *deleteArray );
+ delete iWaitNoteWrapper;
+ iWaitNoteWrapper = NULL;
+ iWaitNoteWrapper = CAknWaitNoteWrapper::NewL();
+ iActiveProcess = EDeleteProcess;
+ TRAPD( err, iWaitNoteWrapper->ExecuteL(
+ R_FILEMANAGER_DELETE_WAIT_DIALOG, *iActiveDelete ) );
+ iActiveProcess = ENoProcess;
+ User::LeaveIfError( err );
+
+ HBufC* fileNameBuf = HBufC::NewLC( KMaxFileName );
+ TPtr fileName( fileNameBuf->Des() );
+
+ err = iActiveDelete->GetError( fileName );
+
+ switch ( err )
+ {
+ case KErrInUse:
+ case KErrFmgrSeveralFilesInUse:
+ {
+ ERROR_LOG1( "CFileManagerViewBase::DeleteItemsL()-err=%d", err )
+ if ( iEngine.IsFolder( aIndex ) )
+ {
+ if ( err == KErrFmgrSeveralFilesInUse )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_DEL_FLDR_OPEN_SE );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_DEL_FLDR_OPEN_1 );
+ }
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FMGR_ERROR_DELETE_FILE_OPEN );
+ }
+ break;
+ }
+ case KErrNone:
+ {
+ if ( iContainer )
+ {
+ //CEikListBox& listBox( iContainer->ListBox() );
+ //AknSelectionService::HandleItemRemovalAndPositionHighlightL(
+ // &listBox, listBox.CurrentItemIndex(), *deleteArray);
+
+#ifndef RD_DRM_RIGHTS_MANAGER_REMOVAL
+ if ( FeatureManager().IsDrmFullSupported() )
+ {
+ TInt deletedItems( 0 );
+ TInt deletedDrmItems( iActiveDelete->DeletedDrmItems( deletedItems ) );
+ if( deletedDrmItems )
+ {
+ if( deletedDrmItems > 1 )
+ {
+ FileManagerDlgUtils::ShowInfoQueryL(
+ R_QTN_DRM_MOS_DELETED, deletedDrmItems );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoQueryL(
+ R_QTN_DRM_MO_DELETED, fileName );
+ }
+ }
+ }
+#endif // RD_DRM_RIGHTS_MANAGER_REMOVAL
+
+ // Set focus to the item after selection
+ iContainer->SetIndex( newIndex );
+ }
+ break;
+ }
+ default:
+ {
+ ERROR_LOG1( "CFileManagerViewBase::DeleteItemsL()-err=%d", err )
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_FLDR_CANT_DELETE_ITEM, fileName );
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy( fileNameBuf );
+ CleanupStack::PopAndDestroy( deleteArray );
+ StoreIndex();
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::HasInfoUrlL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::HasInfoUrlL( TInt aIndex )
+ {
+ if ( iEngine.IsFolder( aIndex ) )
+ {
+ return EFalse;
+ }
+ TBool hasUrl( EFalse );
+ HBufC8* url = NULL;
+ HBufC* fullPath = iEngine.IndexToFullPathLC( aIndex );
+ CDRMHelper* drmHelper = CDRMHelper::NewLC( *iEikonEnv );
+
+ TRAPD( err, hasUrl = drmHelper->HasInfoUrlL( *fullPath, url ) );
+ if ( hasUrl && url && err == KErrNone )
+ {
+ hasUrl = url->Length() > 0;
+ }
+ else
+ {
+ hasUrl = EFalse;
+ }
+
+ ERROR_LOG2( "CFileManagerViewBase::HasInfoUrlL()-hasUrl=%d,err=%d", hasUrl, err )
+
+ delete url;
+ CleanupStack::PopAndDestroy( drmHelper );
+ CleanupStack::PopAndDestroy( fullPath );
+ return hasUrl;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::OpenInfoUrlL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::OpenInfoUrlL( TInt aIndex )
+ {
+ if ( iEngine.IsFolder( aIndex ) )
+ {
+ return;
+ }
+ HBufC* fullPath = iEngine.IndexToFullPathLC( aIndex );
+ CDRMHelper* drmHelper = CDRMHelper::NewLC( *iEikonEnv );
+
+ // Call returns after browser has been closed
+#ifdef FILE_MANAGER_ERROR_LOG_ENABLED
+ TRAPD( err, drmHelper->OpenInfoUrlL( *fullPath ) );
+ ERROR_LOG1( "CFileManagerViewBase::OpenInfoUrlL()-err=%d", err )
+#else // FILE_MANAGER_ERROR_LOG_ENABLED
+ TRAP_IGNORE( drmHelper->OpenInfoUrlL( *fullPath ) );
+#endif // FILE_MANAGER_ERROR_LOG_ENABLED
+
+ CleanupStack::PopAndDestroy( drmHelper );
+ CleanupStack::PopAndDestroy( fullPath );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL(
+ const TDesC& aFullPath )
+ {
+ if ( !FeatureManager().IsDrmFullSupported() )
+ {
+ return ETrue;
+ }
+ TBool expired( EFalse );
+ TBool wmDrm( IsWmDrmFile( aFullPath ) );
+ if ( !wmDrm ) // Ignore WM DRM files
+ {
+ TBool dummy( EFalse );
+ CDRMHelperRightsConstraints* dummy2 = NULL;
+ CDRMHelperRightsConstraints* dummy3 = NULL;
+ CDRMHelperRightsConstraints* dummy4 = NULL;
+ CDRMHelperRightsConstraints* dummy5 = NULL;
+ CDRMHelper* drmHelper = CDRMHelper::NewLC( *iEikonEnv );
+ TRAPD( err, drmHelper->GetRightsDetailsL(
+ aFullPath, 0, expired, dummy, dummy2, dummy3, dummy4, dummy5 ) );
+ delete dummy2;
+ delete dummy3;
+ delete dummy4;
+ delete dummy5;
+ if ( expired )
+ {
+ err = KErrCANoPermission;
+ }
+ if ( err == KErrCANoRights || err == KErrCANoPermission )
+ {
+ // Rights expired or missing, show note or try get silent rights
+ expired = ETrue;
+ ERROR_LOG1( "CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL-err=%d",
+ err )
+ HBufC8* previewUri = NULL;
+ if ( drmHelper->HandleErrorOrPreviewL( err, aFullPath, previewUri ) == KErrNone )
+ {
+ expired = EFalse;
+ }
+ delete previewUri; // Not needed
+ }
+ CleanupStack::PopAndDestroy( drmHelper );
+ }
+ ERROR_LOG2(
+ "CFileManagerViewBase::CheckFileRightsAndInformIfExpiredL-expired=%d,wmDrm=%d",
+ expired, wmDrm )
+ return !expired;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::HandleFileNotFoundL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::HandleFileNotFoundL( TInt aError )
+ {
+ if ( aError == KErrNotFound )
+ {
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ return ETrue;
+ }
+ if ( aError == KErrPathNotFound )
+ {
+ TInt count( iEngine.FolderLevel() );
+ TBool connectedRemoteDrive( EFalse );
+ RefreshDriveInfoL();
+
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ TBool remoteDrive( EFalse );
+ // Check if drive is remote drive and is it connected or not
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ remoteDrive = ETrue;
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected )
+ {
+ connectedRemoteDrive = ETrue;
+ }
+ }
+ // Check if drive has been disconnected and reconnect canceled
+ if ( remoteDrive && !connectedRemoteDrive )
+ {
+ // Do only root refresh if user is already got back in main view
+ if ( Id() == CFileManagerAppUi::KFileManagerMainViewId &&
+ iEngine.NavigationLevel() < 0 )
+ {
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ // Open memory store view to show not connected.
+ else if ( Id() != CFileManagerAppUi::KFileManagerMemoryStoreViewId )
+ {
+ iIndex = 0;
+ static_cast< CFileManagerAppUi* >( AppUi() )->ActivateMemoryStoreViewL();
+ }
+ else
+ {
+ iIndex = 0;
+ if ( iContainer )
+ {
+ iContainer->SetListEmptyL();
+ }
+ DirectoryChangedL();
+ }
+ }
+ // Check if fetch was canceled in connected memory store view
+ else if ( connectedRemoteDrive &&
+ Id() == CFileManagerAppUi::KFileManagerMemoryStoreViewId )
+ {
+ static_cast< CFileManagerAppUi* >( AppUi() )->ActivateMainViewL();
+ }
+ else if ( count > 0 &&
+ ( connectedRemoteDrive ||
+ !BaflUtils::PathExists(
+ iEikonEnv->FsSession(), iEngine.CurrentDirectory() ) ) )
+ {
+ // Go back to last valid folder
+ CFileManagerAppUi* appUi =
+ static_cast< CFileManagerAppUi* >( AppUi() );
+ TInt err( KErrNone );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ TRAP( err, iEngine.BackstepL() );
+ if ( err == KErrNone )
+ {
+ break;
+ }
+ }
+ if ( iEngine.FolderLevel() ||
+ iEngine.State() == CFileManagerEngine::ESearch )
+ {
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ else
+ {
+ appUi->CloseFoldersViewL();
+ }
+ }
+ else
+ {
+ // Refresh root folder
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ScreenDeviceChanged
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ScreenDeviceChanged()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( ClientRect() );
+ iContainer->DrawDeferred();
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::NotifyL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::NotifyL( TFileManagerNotify aType,
+ TInt aData, const TDesC& aName )
+ {
+ TInt ret( KErrNone );
+ switch ( aType )
+ {
+ case ENotifyDisksChanged:
+ {
+ if ( iDirectoryRefreshDenied )
+ {
+ iDirectoryRefreshPostponed = ETrue;
+ }
+ else if ( iActiveProcess == ENoProcess && !IsRefreshInProgress() )
+ {
+ StoreIndex();
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+#ifndef RD_MULTIPLE_DRIVE
+ else if ( iActiveProcess == EEjectProcess )
+ {
+ // Memory card was put back, complete query
+ if ( iEngine.AnyEjectableDrivePresent() )
+ {
+ delete iEjectQueryDialog;
+ iEjectQueryDialog = NULL;
+ }
+ }
+#endif // RD_MULTIPLE_DRIVE
+ break;
+ }
+ case ENotifyBackupMemoryLow:
+ {
+ if( aData < KEstimateLowerLimit )
+ {
+ ret = KErrDiskFull;
+ }
+ else if( aData < KEstimateUpperLimit )
+ {
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+#endif // RD_FILE_MANAGER_BACKUP
+
+ if ( !FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+#ifdef RD_FILE_MANAGER_BACKUP
+ R_QTN_FMGR_BACKUP_TIGHT_MEMORY,
+ iEngine.DriveName( settings.TargetDrive() )
+#else // RD_FILE_MANAGER_BACKUP
+ R_QTN_CONFIRM_BACKUP_LEVEL1
+#endif // RD_FILE_MANAGER_BACKUP
+ ) )
+ {
+ ret = KErrCancel;
+ }
+ }
+ break;
+ }
+ case ENotifyForcedFormat:
+ {
+ StopProgressDialogAndStoreValues();
+
+ TInt textId( R_QTN_CONFIRM_FORMAT_TEXT2 );
+#ifdef RD_MULTIPLE_DRIVE
+ if ( DriveInfo().iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ textId = R_QTN_FMGR_FORMAT_MASS_QUERY2;
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+ TBool query( FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( textId ) );
+ LaunchProgressDialogL(
+ iProgressFinalValue, iProgressCurrentValue, iActiveProcess );
+ return query;
+ }
+ case ENotifyFileOpenDenied:
+ {
+ TBool launchProgress( StopProgressDialogAndStoreValues() );
+
+ ret = !CheckFileRightsAndInformIfExpiredL( aName );
+ if ( launchProgress )
+ {
+ LaunchProgressDialogL(
+ iProgressFinalValue, iProgressCurrentValue, iActiveProcess );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return ret;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::MemoryStoreMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::MemoryStoreMenuFilteringL(
+ CEikMenuPane& aMenuPane )
+ {
+ TBool isSearchOn( iEngine.State() == CFileManagerEngine::ESearch );
+ TRAP_IGNORE ( RefreshDriveInfoL() );
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ TInt driveNumber = drvInfo.iDrive;
+ iEngine.GetDriveInfoL(driveNumber,drvInfo);
+
+ // Common remote drive filtering
+ RemoteDriveCommonFilteringL( aMenuPane );
+
+ CFileManagerFeatureManager& featureManager( FeatureManager() );
+
+#ifdef RD_MULTIPLE_DRIVE
+ // No format item for mass storage in embedded mode dimming
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+ // Memory store specific remote drive filtering
+ if ( !featureManager.IsRemoteStorageFwSupported() ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ // For disconnected or non remote drive
+ aMenuPane.SetItemDimmed( EFileManagerRefreshRemoteDrive, ETrue );
+ }
+
+ if ( !featureManager.IsHelpSupported() )
+ {
+ // No help item dimming
+ aMenuPane.SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ if ( !featureManager.IsIrdaSupported() )
+ {
+ // No infra red item dimming
+ aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+ }
+ if ( isSearchOn )
+ {
+ // Search view item dimming
+ aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+ //aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRefreshRemoteDrive, ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+ aMenuPane.SetItemDimmed( EFileManagerSort, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerSearchSort, ETrue );
+ }
+ //dim the item unconditionally
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+ {
+ // Write protected item dimming
+ aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDelete, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+#ifdef RD_MULTIPLE_DRIVE
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ // Mass storage item dimming
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+ }
+ }
+ else
+#endif // RD_MULTIPLE_DRIVE
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable )
+ {
+ // Memory card item dimming
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) ||
+ ( drvInfo.iState & ( TFileManagerDriveInfo::EDriveCorrupted |
+ TFileManagerDriveInfo::EDriveLocked ) ) )
+ {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ }
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted ) ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+ }
+// if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveLockable ) )
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+// }
+ if ( !featureManager.IsMmcPassWdSupported() )
+ {
+ //aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+ }
+#ifdef RD_MULTIPLE_DRIVE
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+ }
+ else
+ {
+ // No mass storage or memory card item dimming
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+#ifdef RD_MULTIPLE_DRIVE
+ aMenuPane.SetItemDimmed( EFileManagerFormatMassStorage, ETrue );
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+// CEikListBox& listBox = iContainer->ListBox();
+ TBool dimSend( EFalse );
+
+ if ( iContainer->ListBoxSelectionIndexesCount() )
+ {
+ // Selections in list
+ aMenuPane.SetItemDimmed( EFileManagerOpen, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+
+ if ( !featureManager.IsDrmFullSupported() &&
+ AreChosenFilesProtectedL( ETrue ) )
+ {
+ dimSend = ETrue;
+ }
+
+ /* Codes below will cause trouble for large amount file selection
+ if ( !dimSend )
+ {
+ // Check if there are files to send
+ TInt dummy( 0 );
+ CArrayFixFlat< TInt >* files = GetSendFilesLC( dummy );
+ if ( !files->Count() )
+ {
+ dimSend = ETrue;
+ }
+ CleanupStack::PopAndDestroy( files );
+ }
+ */
+
+ // Hide empty details if no item or memory specific details
+ // can be shown.
+ if ( isSearchOn ||
+ ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ }
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ // Handle disconnected remote drive
+ dimSend = ETrue;
+ }
+ }
+ else if ( iContainer->ListBoxNumberOfItems() )
+ {
+ // There is items in list, check selection type
+ TUint32 fileType( iEngine.FileTypeL(
+ iContainer->ListBoxCurrentItemIndex() ) );
+ if ( ( fileType & KDefaultFolderMask ) == KDefaultFolderMask )
+ {
+ dimSend = ETrue;
+ aMenuPane.SetItemDimmed( EFileManagerDelete, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+ }
+ else if ( fileType & CFileManagerItemProperties::EFolder )
+ {
+ dimSend = ETrue;
+ aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );
+ }
+
+ if ( fileType & CFileManagerItemProperties::EPlaylist )
+ {
+ dimSend = ETrue;
+ }
+
+ // When full OMA DRM is in use, it is ok to show send option
+ if( ( fileType & CFileManagerItemProperties::EForwardLocked ) &&
+ !featureManager.IsDrmFullSupported() )
+ {
+ dimSend = ETrue;
+ }
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ // Handle disconnected remote drive
+ dimSend = ETrue;
+ }
+ }
+ else
+ {
+ // List is empty
+ aMenuPane.SetItemDimmed( EFileManagerOpen, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDelete, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMark, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerRename, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerSort, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerSearchSort, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ dimSend = ETrue;
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+ {
+ // Handle write protected drive
+ aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+ }
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ // Handle empty remote folder
+ aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ }
+
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ // Handle disconnected remote drive
+ aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ }
+ else if ( !( drvInfo.iState & TFileManagerDriveInfo::EDrivePresent ) ||
+ ( drvInfo.iState & (
+ TFileManagerDriveInfo::EDriveCorrupted |
+ TFileManagerDriveInfo::EDriveLocked ) ) )
+ {
+ // Handle unavailable drive
+// aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable &&
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+ }
+ }
+ else if ( isSearchOn ||
+ !BaflUtils::PathExists(
+ iEikonEnv->FsSession(), iEngine.CurrentDirectory() ) )
+ {
+ // Handle empty search results and invalid path
+ if ( isSearchOn || !iEngine.CurrentDirectory().Length() )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerReceiveViaIR, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerOrganise, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPassword, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCard, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerDetails, ETrue );
+ }
+ else
+ {
+ // BaflUtils::PathExists does not work for remote drive root dirs.
+ if( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ _LIT( KRootFolder, "?:\\" );
+ if ( iEngine.CurrentDirectory().MatchF( KRootFolder ) )
+ {
+ User::Leave( KErrPathNotFound );
+ }
+ }
+ else
+ {
+ User::Leave( KErrPathNotFound );
+ }
+ }
+ }
+ }
+
+ if ( !dimSend )
+ {
+ AddSendOptionL( aMenuPane, EFileManagerDelete );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::OrganiseMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::OrganiseMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+// CEikListBox& listBox( iContainer->ListBox() );
+
+ if ( iContainer->ListBoxNumberOfItems() )
+ {
+ if ( !iContainer->ListBoxSelectionIndexesCount() )
+ {
+ TUint32 fileType( iEngine.FileTypeL(
+ iContainer->ListBoxCurrentItemIndex() ) );
+ if ( ( fileType & KDefaultFolderMask ) == KDefaultFolderMask )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMoveToFolder, ETrue );
+ }
+ }
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMoveToFolder, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerCopyToFolder, ETrue );
+ }
+
+ // Search view item dimming
+ if( iEngine.State() == CFileManagerEngine::ESearch )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerNewFolder, ETrue );
+ }
+
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+ {
+ // Write protected item dimming
+ aMenuPane.SetItemDimmed( EFileManagerNewFolder, ETrue );
+ }
+
+ TInt index(iContainer->ListBoxCurrentItemIndex());
+ TUint32 fileType(iEngine.FileTypeL(index));
+ if (!(fileType & CFileManagerItemProperties::EFolder))
+ {
+ aMenuPane.SetItemDimmed(EFileManagerMoveToFolder, ETrue);
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DetailsMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DetailsMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ TUint32 fileType( iEngine.FileTypeL( index ) );
+ if ( fileType & CFileManagerItemProperties::EFolder )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerFileDetails, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerFolderDetails, ETrue );
+ }
+ if ( !FeatureManager().IsDrmFullSupported() ||
+ !( fileType & CFileManagerItemProperties::EDrmProtected ) ||
+ !HasInfoUrlL( index ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMoreInfoOnline, ETrue );
+ }
+ }
+
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::MemoryCardMenuFilteringL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::MemoryCardMenuFilteringL( CEikMenuPane& aMenuPane )
+// {
+// TFileManagerDriveInfo& drvInfo( DriveInfo() );
+//
+// if ( drvInfo.iState & ( TFileManagerDriveInfo::EDriveCorrupted |
+// TFileManagerDriveInfo::EDriveLocked |
+// TFileManagerDriveInfo::EDriveMassStorage ) )
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardName, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardRename, ETrue );
+// }
+// else
+// {
+// if ( drvInfo.iName.Length() )
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardName, ETrue );
+// }
+// else
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardRename, ETrue );
+// }
+// }
+//
+// if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardFormat, ETrue );
+// }
+// }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::MemoryCardPasswordMenuFilteringL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::MemoryCardPasswordMenuFilteringL( CEikMenuPane& aMenuPane )
+// {
+// TFileManagerDriveInfo& drvInfo( DriveInfo() );
+//
+// if ( drvInfo.iState & TFileManagerDriveInfo::EDrivePasswordProtected )
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPasswordSet, ETrue );
+// }
+// else
+// {
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPasswordChange, ETrue );
+// aMenuPane.SetItemDimmed( EFileManagerMemoryCardPasswordRemove, ETrue );
+// }
+// }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ContextSensitiveMenuFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ContextSensitiveMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ TInt driveNumber = drvInfo.iDrive;
+ iEngine.GetDriveInfoL(driveNumber,drvInfo);
+
+ // Check if there are files to send
+ TInt dummy( 0 );
+ CArrayFixFlat< TInt >* files = GetSendFilesLC( dummy );
+
+ TBool dimSend( EFalse );
+ if ( ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ dimSend = ETrue;
+ }
+
+ if ( files->Count() && !dimSend )
+ {
+ AddSendOptionL( aMenuPane, EFileManagerOrganise );
+ }
+ CleanupStack::PopAndDestroy( files );
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+ {
+ // Write protected item dimming
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+ }
+
+ if ( iEngine.State() == CFileManagerEngine::ESearch ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable ) )
+ {
+ // No memory card item dimming
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+ }
+ else
+ {
+ // Memory card item dimming
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveLocked ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerUnlockMemoryCard, ETrue );
+ }
+ if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveCorrupted ) ||
+ !( drvInfo.iState & TFileManagerDriveInfo::EDriveFormattable ) )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerMemoryStorageFormat, ETrue );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DriveInfo
+//
+// -----------------------------------------------------------------------------
+//
+TFileManagerDriveInfo& CFileManagerViewBase::DriveInfo() const
+ {
+ return static_cast< CFileManagerAppUi* >( AppUi() )->DriveInfo();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshDriveInfoL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshDriveInfoL()
+ {
+ if ( !iEngine.CurrentDirectory().Length() )
+ {
+ return;
+ }
+ iEngine.GetDriveInfoL( DriveInfo() );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::StartProcessL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::StartProcessL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess,
+ TInt aValue )
+ {
+ if ( iActiveProcess != ENoProcess )
+ {
+ return;
+ }
+ LaunchProgressDialogL( KMaxTInt, 0, aProcess );
+ iEngine.SetObserver( this );
+ iActiveProcess = aProcess;
+ TInt err( KErrNone );
+ switch ( aProcess )
+ {
+ case EFormatProcess:
+ {
+ TRAP( err, iEngine.StartFormatProcessL( aValue ) );
+ break;
+ }
+ case EBackupProcess:
+ case ERestoreProcess: // FALLTHROUGH
+ {
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->BackupOrRestoreStarted();
+
+ TRAP( err, iEngine.StartBackupProcessL( aProcess ) );
+ break;
+ }
+ case EEjectProcess:
+ {
+ TRAP( err, iEngine.StartEjectProcessL( aValue ) );
+ break;
+ }
+ default:
+ {
+ TRAP( err, ClearProgressBarL() );
+ iActiveProcess = ENoProcess;
+ break;
+ }
+ }
+ if ( err != KErrNone )
+ {
+ // Clean up the active process before forwarding leave
+ ERROR_LOG2(
+ "CFileManagerViewBase::StartProcessL-aProcess=%d,err=%d",
+ aProcess, err )
+ iActiveProcess = ENoProcess;
+ User::Leave( err );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CmdUnlockDriveL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdUnlockDriveL()
+ {
+ TFileManagerDriveInfo drvInfo;
+ if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+ {
+ return; // No drive selected
+ }
+
+ if ( !UnlockRemovePasswordL( drvInfo.iDrive, EFalse ) ) // Unlock only
+ {
+ RefreshDriveInfoL();
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CmdFormatDriveL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdFormatDriveL()
+ {
+ StoreIndex();
+ TFileManagerDriveInfo drvInfo;
+ if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+ {
+ return; // No drive selected
+ }
+
+ if ( !( drvInfo.iState & ( TFileManagerDriveInfo::EDriveRemovable |
+ TFileManagerDriveInfo::EDriveFormattable ) ) ||
+ ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected ) )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_MEMORYCARD_READONLY );
+ return;
+ }
+
+ TBool query( EFalse );
+#ifdef RD_MULTIPLE_DRIVE
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+ {
+ HBufC* text = iEngine.GetFormattedDriveNameLC(
+ drvInfo.iDrive, R_QTN_FMGR_USB_MEMORY_FORMAT_QUERY );
+ query = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ HBufC* text = iEngine.GetFormattedDriveNameLC(
+ drvInfo.iDrive, R_QTN_FMGR_FORMAT_MASS_QUERY1 );
+ query = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+ else
+ {
+#endif // RD_MULTIPLE_DRIVE
+ query = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ R_QTN_CONFIRM_FORMAT_TEXT );
+#ifdef RD_MULTIPLE_DRIVE
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+ if ( query )
+ {
+ StartProcessL( EFormatProcess, drvInfo.iDrive );
+ }
+ }
+
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdRenameDriveL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdRenameDriveL()
+// {
+// TFileManagerDriveInfo& drvInfo( DriveInfo() );
+// if ( drvInfo.iState & TFileManagerDriveInfo::EDriveWriteProtected )
+// {
+// FileManagerDlgUtils::ShowErrorNoteL( R_QTN_MEMORYCARD_READONLY );
+// return;
+// }
+// StoreIndex();
+// RenameDriveL( EFalse );
+// iEngine.SetObserver( this );
+// iEngine.RefreshDirectory();
+// }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdSetDrivePasswordL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdSetDrivePasswordL()
+// {
+// TBuf< KFmgrMaxMediaPassword > nullPwd;
+// TBuf< KFmgrMaxMediaPassword > pwd;
+// TInt ret( KErrNone );
+// if( FileManagerDlgUtils::ShowPasswordQueryL( pwd ) )
+// {
+// EmptyPwd( nullPwd );
+// ret = UpdatePasswordL( nullPwd, pwd );
+// if( ret == KErrNone )
+// {
+// FileManagerDlgUtils::ShowConfirmNoteL( R_QTN_PASSWORD_SET_TEXT );
+// RefreshDriveInfoL();
+// }
+// else
+// {
+// FileManagerDlgUtils::ShowErrorNoteL( R_QTN_CRITICAL_ERROR );
+// }
+// }
+// }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdChangeDrivePasswordL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdChangeDrivePasswordL()
+// {
+// TBuf< KFmgrMaxMediaPassword > pwd;
+// TBuf< KFmgrMaxMediaPassword > oldPwd;
+// TBool isDone( EFalse );
+// TBool isCanceled( EFalse );
+// TInt err( KErrNone );
+//
+// // Ask for the old password until the correct one is given
+// while( !isDone )
+// {
+// EmptyPwd( oldPwd );
+// if( FileManagerDlgUtils::ShowSimplePasswordQueryL(
+// R_QTN_PASSWORD_OLD_TEXT, oldPwd ) )
+// {
+// err = UpdatePasswordL( oldPwd, oldPwd );
+// if( err == KErrNone )
+// {
+// isDone = ETrue;
+// }
+// else
+// {
+// FileManagerDlgUtils::ShowErrorNoteL(
+// R_QTN_PASSWORDS_WRONG_TEXT );
+// }
+// }
+// else
+// {
+// isDone = ETrue;
+// isCanceled = ETrue;
+// }
+// }
+//
+// // Then query for the new password
+// if( !isCanceled )
+// {
+// if( FileManagerDlgUtils::ShowPasswordQueryL( pwd ) )
+// {
+// err = UpdatePasswordL( oldPwd, pwd );
+// if( err == KErrNone )
+// {
+// FileManagerDlgUtils::ShowConfirmNoteL(
+// R_QTN_PASSWORD_CHANGED_TEXT );
+// }
+// else
+// {
+// FileManagerDlgUtils::ShowErrorNoteL(
+// R_QTN_CRITICAL_ERROR );
+// }
+// }
+// }
+// }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdRemoveDrivePasswordL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdRemoveDrivePasswordL()
+// {
+// if( !UnlockRemovePasswordL( ETrue ) )
+// {
+// FileManagerDlgUtils::ShowConfirmNoteL( R_QTN_PASSWORD_REMOVED_TEXT );
+// RefreshDriveInfoL();
+// }
+// }
+//
+//// ------------------------------------------------------------------------------
+//// CFileManagerViewBase::CmdMemoryCardDetailsL
+////
+//// ------------------------------------------------------------------------------
+////
+//void CFileManagerViewBase::CmdMemoryCardDetailsL()
+// {
+// TFileManagerDriveInfo drvInfo;
+// iEngine.GetDriveInfoL( iEngine.CurrentDrive(), drvInfo );
+// FileManagerDlgUtils::ShowMemoryStoreInfoPopupL( drvInfo );
+// }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdatePasswordL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::UpdatePassword(
+ TInt aDrive, const TDesC& aOldPwd, const TDesC& aPwd )
+ {
+ TMediaPassword mPwdNew;
+ TMediaPassword mPwdOld;
+
+ ConvertCharsToPwd( aOldPwd, mPwdOld );
+ ConvertCharsToPwd( aPwd, mPwdNew );
+
+ return iEngine.SetDrivePassword( aDrive, mPwdOld, mPwdNew );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UnlockRemovePasswordL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::UnlockRemovePasswordL(
+ TInt aDrive, TBool aRemove )
+ {
+ TBuf< KFmgrMaxMediaPassword > oldPwd;
+ TInt err( KErrNone );
+ TMediaPassword pwd;
+ TInt res( R_QTN_UNLOCK_PASSWORD_TEXT );
+ TInt resWrong( R_QTN_UNLOCK_PWD_WRONG_TEXT );
+ HBufC* text = NULL;
+
+ if( aRemove )
+ {
+ // Confirm the action
+ if( !FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ R_QTN_PASSWORD_REMOVE_TEXT ) )
+ {
+ return KErrCancel; // Skip the rest if not accepted
+ }
+ res = R_QTN_PASSWORD_OLD_TEXT;
+ resWrong = R_QTN_PASSWORDS_WRONG_TEXT;
+ }
+ else
+ {
+ // Just unlock
+#ifdef RD_MULTIPLE_DRIVE
+ text = iEngine.GetFormattedDriveNameLC(
+ aDrive,
+ R_QTN_MEMC_UNLOCK_PASSWORD_MULTIPLE_DEFAULTNAME,
+ R_QTN_MEMC_UNLOCK_PASSWORD_MULTIPLE );
+#else // RD_MULTIPLE_DRIVE
+ text = StringLoader::LoadLC( R_QTN_UNLOCK_PASSWORD_TEXT );
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+ // Show until correct pwd is given or canceled
+ TBool isDone( EFalse );
+ while( !isDone )
+ {
+ // Empty first
+ EmptyPwd( oldPwd );
+ TBool pwdGiven( EFalse );
+ if ( text )
+ {
+ pwdGiven = FileManagerDlgUtils::ShowSimplePasswordQueryL( *text, oldPwd );
+ }
+ else
+ {
+ pwdGiven = FileManagerDlgUtils::ShowSimplePasswordQueryL( res, oldPwd );
+ }
+ if( pwdGiven )
+ {
+ ConvertCharsToPwd( oldPwd, pwd );
+ if( aRemove )
+ {
+ err = iEngine.RemoveDrivePassword( aDrive, pwd );
+ }
+ else
+ {
+ err = iEngine.UnlockDrive( aDrive, pwd );
+ }
+
+ if ( err == KErrNone )
+ {
+ isDone = ETrue;
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL( resWrong );
+ }
+ }
+ else
+ {
+ err = KErrCancel;
+ isDone = ETrue;
+ }
+ }
+ if ( text )
+ {
+ CleanupStack::PopAndDestroy( text );
+ }
+ return err;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::SetRemoteDriveConnectionStateL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SetRemoteDriveConnectionStateL( TBool aState )
+ {
+ TInt drv( 0 );
+
+ StoreIndex();
+ if ( !iEngine.CurrentDirectory().Length() )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+ CleanupStack::PushL( prop );
+ drv = TDriveUnit( prop->FullPath() );
+ CleanupStack::PopAndDestroy( prop );
+ }
+ else
+ {
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+ drv = drvInfo.iDrive;
+ }
+ iEngine.SetRemoteDriveConnection( drv, aState );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::OpenRemoteDriveSettingsL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::OpenRemoteDriveSettingsL(
+ const TDesC& aDriveName )
+ {
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ appUi->ActivateRemoteDriveSettingsViewL( aDriveName );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsDisconnectedRemoteDrive
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsDisconnectedRemoteDrive(
+ CFileManagerItemProperties& aProp )
+ {
+ TUint32 drvState( 0 );
+ if ( iEngine.DriveState( drvState, aProp.FullPath() ) == KErrNone )
+ {
+ if ( ( drvState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( drvState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RemoteDriveCommonFilteringL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RemoteDriveCommonFilteringL( CEikMenuPane& aMenuPane )
+ {
+ TBool dimAll( EFalse );
+ if ( !FeatureManager().IsRemoteStorageFwSupported() )
+ {
+ dimAll = ETrue;
+ }
+ else
+ {
+// CEikListBox& listBox = iContainer->ListBox();
+ if ( iContainer->ListBoxNumberOfItems() )
+ {
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoL( index );
+
+ TUint32 drvState( 0 );
+ TInt err( iEngine.DriveState( drvState, prop->FullPath() ) );
+ if ( err == KErrNone &&
+ ( drvState & TFileManagerDriveInfo::EDriveRemote ) )
+ {
+ if ( drvState & TFileManagerDriveInfo::EDriveConnected )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+ }
+ }
+ else
+ {
+ dimAll = ETrue;
+ }
+ delete prop;
+ }
+ else
+ {
+ // List is empty
+ TFileManagerDriveInfo& drvInfo( DriveInfo() );
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote )
+ {
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveConnected )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+ }
+ else
+ {
+ aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+ }
+ }
+ else
+ {
+ dimAll = ETrue;
+ }
+ }
+ }
+
+ if ( dimAll )
+ {
+ aMenuPane.SetItemDimmed( EFileManagerConnectRemoveDrive, ETrue );
+ aMenuPane.SetItemDimmed( EFileManagerDisconnectRemoveDrive, ETrue );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::LaunchProgressBarL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::LaunchProgressBarL(
+ TInt aDialogId,
+ TInt aTextId,
+ TInt64 aFinalValue,
+ TInt64 aInitialValue,
+ TBool aPeriodic,
+ TBool aImmediatelyVisible )
+ {
+ ClearProgressBarL(); // Clear previous
+
+ if ( aFinalValue )
+ {
+ iProgressDialog = new (ELeave) CAknProgressDialog(
+ ( reinterpret_cast< CEikDialog** >( &iProgressDialog ) ), aImmediatelyVisible );
+ iProgressDialog->PrepareLC( aDialogId );
+
+ if ( aPeriodic )
+ {
+ iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
+ iPeriodic->Start(
+ KProgressBarUpdateInterval, KProgressBarUpdateInterval,
+ TCallBack( UpdateProgressBar, this ) );
+ }
+ }
+ else
+ {
+ iProgressDialog = new (ELeave) CAknWaitDialog(
+ ( reinterpret_cast< CEikDialog** >( &iProgressDialog ) ), aImmediatelyVisible );
+ iProgressDialog->PrepareLC( aDialogId );
+ }
+
+ if ( aTextId )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId );
+ iProgressDialog->SetTextL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ iProgressDialog->SetCallback(this);
+ iProgressInfo = iProgressDialog->GetProgressInfoL();
+ if ( iProgressInfo )
+ {
+ iProgressInfo->SetFinalValue( static_cast<TInt>( aFinalValue/1024 ) );
+ iProgressInfo->SetAndDraw( static_cast<TInt>( aInitialValue/1024 ) );
+ }
+ iProgressDialog->RunLD();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshProgressDelayedStart
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::RefreshProgressDelayedStart( TAny* aPtr )
+ {
+ CFileManagerViewBase* view = static_cast< CFileManagerViewBase* > ( aPtr );
+ TRAP_IGNORE( view->RefreshProgressDelayedStartL() );
+ return KErrNone;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RefreshProgressDelayedStartL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RefreshProgressDelayedStartL()
+ {
+ CFileManagerAppUi* app = static_cast< CFileManagerAppUi* >( AppUi() );
+
+ delete iRefreshProgressDelayedStart;
+ iRefreshProgressDelayedStart = NULL;
+
+ if( iProgressDialogRefresh )
+ {
+ iProgressDialogRefresh->ProcessFinishedL();
+ iProgressDialogRefresh = NULL;
+ }
+ iProgressDialogRefresh = new( ELeave ) CAknProgressDialog(
+ reinterpret_cast< CEikDialog** >( &iProgressDialogRefresh ),
+ ETrue );
+ iProgressDialogRefresh->SetCallback( this );
+
+ if ( Id() == CFileManagerAppUi::KFileManagerSearchResultsViewId )
+ {
+ iProgressDialogRefresh->ExecuteLD( R_FILEMANAGER_FIND_WAIT_DIALOG );
+ }
+ else
+ {
+ iProgressDialogRefresh->ExecuteLD( R_FILEMANAGER_WAIT_NOTE_OPEN );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsRefreshInProgress
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsRefreshInProgress()
+ {
+ if ( iRefreshProgressDelayedStart || iProgressDialogRefresh )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ProcessCommandL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ProcessCommandL( TInt aCommand )
+ {
+ // Suppress commands during refresh
+ if ( IsRefreshInProgress() )
+ {
+ switch ( aCommand )
+ {
+ case EAknSoftkeyOptions: // FALLTHROUGH
+ case EAknSoftkeyBack: // FALLTHROUGH
+ case EAknSoftkeyContextOptions: // FALLTHROUGH
+ case EAknSoftkeyMark: // FALLTHROUGH
+ case EAknSoftkeyUnmark: // FALLTHROUGH
+ case EAknSoftkeySelect:
+ {
+ return;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ // Handle commands directly
+ switch ( aCommand )
+ {
+ case EAknSoftkeyContextOptions: // FALLTHROUGH
+ case EAknSoftkeyMark:
+ {
+ HandleCommandL( aCommand );
+ break;
+ }
+ default:
+ {
+ CAknView::ProcessCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::AskPathL
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::AskPathL( TDes& aPath, TInt aTextId )
+ {
+ TBool ret( EFalse );
+ TInt memType(
+ AknCommonDialogsDynMem::EMemoryTypePhone |
+ AknCommonDialogsDynMem::EMemoryTypeMMC );
+
+ if ( FeatureManager().IsRemoteStorageFwSupported() )
+ {
+ memType |= AknCommonDialogsDynMem::EMemoryTypeRemote;
+ }
+
+ HBufC* title = StringLoader::LoadLC( aTextId );
+ CFileManagerFileSelectionFilter* filter =
+ new( ELeave ) CFileManagerFileSelectionFilter( iEngine );
+ CleanupStack::PushL( filter );
+
+ ret = AknCommonDialogsDynMem::RunFolderSelectDlgLD(
+ memType,
+ aPath,
+ KNullDesC,
+ R_FILEMANAGER_FIND_MEMORY_SELECTIONDIALOG,
+ R_FILEMANAGER_FIND_FOLDER_SELECTIONDIALOG,
+ *title,
+ filter );
+
+ CleanupStack::PopAndDestroy( filter );
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::StartSchBackupL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::StartSchBackupL()
+ {
+ FUNC_LOG
+
+ CFileManagerAppUi* appUi = static_cast< CFileManagerAppUi* >( AppUi() );
+ CFileManagerSchBackupHandler& handler( appUi->SchBackupHandlerL() );
+
+ if ( FeatureManager().IsFeatureSupported(
+ EFileManagerFeatureScheduledBackupDisabled ) )
+ {
+ // Scheduled backup is disabled, disable scheduler and cancel backup
+ INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup disabled" )
+
+ handler.CancelBackupStarter();
+ CFileManagerTaskScheduler& scheduler( appUi->TaskSchedulerL() );
+ scheduler.EnableBackupScheduleL( EFalse );
+ appUi->SchBackupFinishedL( KErrCancel );
+ return;
+ }
+
+ // Start scheduled backup if no process in progress
+ // Otherwise wait process to finish
+ if ( iActiveProcess == ENoProcess )
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TTime schTime( SetCurrentYearMonthAndDay( settings.Time() ) );
+
+ TTime manualBackupOrRestoreStarted = appUi->BackupOrRestoreStartTime();
+ TTime manualBackupOrRestoreEnded = appUi->BackupOrRestoreEndTime();
+
+ if ( manualBackupOrRestoreStarted.Int64() > 0 &&
+ schTime >= manualBackupOrRestoreStarted &&
+ schTime <= manualBackupOrRestoreEnded )
+ {
+ INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup canceled due to manual op" )
+
+ handler.CancelBackupStarter();
+
+ appUi->ResetBackupOrRestoreEndTime();// Cancel required only once
+ }
+ else
+ {
+ INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Start backup" )
+
+ iSchBackupPending = EFalse;
+ iActiveProcess = ESchBackupProcess;
+ iEngine.SetObserver( this );
+ handler.StartBackupWithConfirm();
+ }
+ }
+ // Ignore scheduled backup if backup or restore is in progress
+ else if ( iActiveProcess == ESchBackupProcess ||
+ iActiveProcess == EBackupProcess ||
+ iActiveProcess == ERestoreProcess )
+ {
+ INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup canceled" )
+
+ handler.CancelBackupStarter();
+ }
+ else
+ {
+ INFO_LOG( "CFileManagerViewBase::StartSchBackupL-Backup pending" )
+
+ iSchBackupPending = ETrue;
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::SchBackupFinishedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SchBackupFinishedL()
+ {
+ FUNC_LOG
+
+ if ( iActiveProcess == ESchBackupProcess )
+ {
+ iActiveProcess = ENoProcess;
+ iSchBackupPending = EFalse;
+ }
+ }
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::SetCbaMskTextL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SetCbaMskTextL( const TInt aTextId )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId );
+ CEikButtonGroupContainer* cba = Cba();
+ if ( cba->ButtonCount() == KFmgrMSK )
+ {
+ TInt cmdId( cba->ButtonGroup()->CommandId( KFmgrMSK ) );
+ cba->SetCommandL( KFmgrMSK, cmdId, *text );
+ cba->DrawDeferred();
+ }
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdateCbaL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::UpdateCbaL()
+ {
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::UpdateCommonCbaL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::UpdateCommonCbaL()
+ {
+ if ( !iContainer || IsRefreshInProgress() )
+ {
+ return;
+ }
+
+ CEikButtonGroupContainer* cba = Cba();
+
+ if ( !iContainer->ListBoxNumberOfItems() )
+ {
+ cba->SetCommandSetL(
+ R_FILEMANAGER_SOFTKEYS_OPTIONS_BACK__EMPTY );
+ }
+ else if ( iContainer->ListBoxSelectionIndexesCount() )
+ {
+ cba->SetCommandSetL(
+ R_FILEMANAGER_SOFTKEYS_CONTEXT_OPTIONS_BACK__OPTIONS );
+ }
+ else
+ {
+ cba->SetCommandSetL(
+ R_FILEMANAGER_SOFTKEYS_OPTIONS_BACK__OPEN );
+ }
+
+ // Restore right cancel softkey if it has been set by search field
+ TBool restoreCancel( ETrue );
+ if ( iContainer->IsSearchFieldVisible() &&
+ cba->ButtonCount() >= CEikButtonGroupContainer::ERightSoftkeyPosition )
+ {
+ restoreCancel = ( cba->ButtonGroup()->CommandId(
+ CEikButtonGroupContainer::ERightSoftkeyPosition ) == EAknSoftkeyCancel );
+ }
+ if ( !restoreCancel )
+ {
+ HBufC* cancelText = StringLoader::LoadLC( R_AVKON_SOFTKEY_CANCEL );
+ cba->SetCommandL(
+ CEikButtonGroupContainer::ERightSoftkeyPosition,
+ EAknSoftkeyCancel,
+ *cancelText );
+ CleanupStack::PopAndDestroy( cancelText );
+ }
+
+ cba->DrawDeferred();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::RenameDriveL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::RenameDriveL( TBool aForceDefaultName )
+ {
+ TFileManagerDriveInfo drvInfo;
+ if ( DriveInfoAtCurrentPosL( drvInfo ) < 0 )
+ {
+ return; // No drive selected
+ }
+
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ return; // Name not allowed
+ }
+
+ HBufC* drvName = HBufC::NewLC( KMaxVolumeName );
+ TPtr name( drvName->Des() );
+ // 16-bit chars are required for non western volume names
+ const TInt KMaxNonWesternVolumeName( KMaxVolumeName / 2 );
+
+ // Setup query according to variant type, western or non western
+ TInt resId( R_FILEMANAGER_DRIVE_NAME_QUERY );
+ TInt maxLen( KMaxVolumeName );
+ if ( !FeatureManager().IsWesternVariant() )
+ {
+ resId = R_FILEMANAGER_DRIVE_NAME_QUERY_NON_WESTERN;
+ maxLen = KMaxNonWesternVolumeName;
+ }
+
+ if ( aForceDefaultName || !drvInfo.iName.Length() )
+ {
+ HBufC* defaultName = NULL;
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveUsbMemory )
+ {
+ defaultName = StringLoader::LoadLC(
+ R_QTN_FMGR_USB_MEMORY_DEFAULT_NAME );
+ }
+ else
+ {
+ defaultName = StringLoader::LoadLC( R_QTN_MMC_DEFAULT_NAME );
+ }
+ if ( defaultName->Length() > maxLen )
+ {
+ name.Copy( defaultName->Des().Left( maxLen ) );
+ }
+ else
+ {
+ name.Copy( *defaultName );
+ }
+ CleanupStack::PopAndDestroy( defaultName );
+ }
+ else
+ {
+ if ( drvInfo.iName.Length() > maxLen )
+ {
+ name.Copy( drvInfo.iName.Left( maxLen ) );
+ }
+ else
+ {
+ name.Copy( drvInfo.iName );
+ }
+ }
+
+ // Loop until canceled, accepted or an error occurs
+ TBool isDone( EFalse );
+ while( !isDone )
+ {
+ CAknTextQueryDialog* renameDlg =
+ CAknTextQueryDialog::NewL( name, CAknQueryDialog::ENoTone );
+ renameDlg->SetMaxLength( maxLen );
+ TBool ret( EFalse );
+ if ( renameDlg->ExecuteLD( resId ) )
+ {
+ ret = ETrue;
+ }
+ if( ret && name.Compare( drvInfo.iName ) )
+ {
+ TInt err( iEngine.RenameDrive( drvInfo.iDrive, name ) );
+ if( err == KErrNone )
+ {
+ FileManagerDlgUtils::ShowConfirmNoteL(
+ R_QTN_FMGR_CONFIRM_MEMORY_NAME_CHANGED );
+ RefreshDriveInfoL();
+ isDone = ETrue;
+ }
+ else if( err == KErrBadName )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_INVALID_DRIVE_NAME );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_CRITICAL_ERROR );
+ isDone = ETrue;
+ }
+ }
+ else
+ {
+ // Canceled
+ isDone = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( drvName );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::CmdRefreshDirectoryL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdRefreshDirectoryL()
+ {
+ StoreIndex();
+ iEngine.SetObserver( this );
+ iEngine.ForcedRefreshDirectory();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::ShowEjectQueryL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ShowEjectQueryL()
+ {
+ delete iEjectQueryDialog;
+ iEjectQueryDialog = NULL;
+
+ iEjectDone = EFalse;
+ iEjectQueryDialog = CAknQueryDialog::NewL();
+ HBufC* text = NULL;
+ TInt index( iContainer->ListBoxCurrentItemIndex() );
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC( index );
+#ifdef RD_MULTIPLE_DRIVE
+ text = iEngine.GetFormattedDriveNameLC(
+ prop->DriveId(),
+ R_QTN_MEMC_INFO_EJECT_MULTIPLE_DEFAULTNAME,
+ R_QTN_MEMC_INFO_EJECT_MULTIPLE );
+#else // RD_MULTIPLE_DRIVE
+ text = StringLoader::LoadLC( R_QTN_INFO_EJECT );
+#endif // RD_MULTIPLE_DRIVE
+ TRAP_IGNORE( iEjectQueryDialog->ExecuteLD(
+ R_FILEMANAGER_EJECT_CONFIRM_QUERY, *text ) );
+ CleanupStack::PopAndDestroy( text );
+ CleanupStack::PopAndDestroy( prop );
+ iEjectQueryDialog = NULL;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsDriveAvailable
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsDriveAvailable( const TDesC& aPath ) const
+ {
+ TBool ret( EFalse );
+ if ( aPath.Length() )
+ {
+ TInt drive = TDriveUnit( aPath );
+ ret = IsDriveAvailable( drive );
+ }
+ return ret;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::IsDriveAvailable
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::IsDriveAvailable( const TInt aDrive ) const
+ {
+ TUint32 drvState( 0 );
+ if ( iEngine.DriveState( drvState, aDrive ) != KErrNone )
+ {
+ return EFalse;
+ }
+ if ( drvState & ( TFileManagerDriveInfo::EDriveLocked |
+ TFileManagerDriveInfo::EDriveCorrupted |
+ TFileManagerDriveInfo::EDriveInUse ) )
+ {
+ return EFalse; // Drive is unavailable
+ }
+ if ( !( drvState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( drvState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ return EFalse; // Drive is not present
+ }
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CheckPhoneState
+//
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::CheckPhoneState() const
+ {
+ // Check here all operations, which are supposed
+ // to prevent manual backup or restore.
+ TBool err( ETrue );
+ TInt syncErr( 0 );
+ TInt syncStat( 0 );
+ TInt burErr( 0 );
+ TInt burStat( 0 );
+
+ // Check synchronization state
+ syncErr = RProperty::Get(
+ KPSUidDataSynchronizationInternalKeys,
+ KDataSyncStatus, syncStat );
+
+ // Check backup/restore (e.g. PC Suite initiated) state
+ burErr = RProperty::Get(
+ KUidSystemCategory,
+ KUidBackupRestoreKey, burStat );
+ const TBURPartType partType = static_cast< TBURPartType >
+ ( burStat & KBURPartTypeMask );
+
+ if ( (syncErr == KErrNone && syncStat > 0)
+ || (burErr == KErrNone && partType != EBURUnset && partType != EBURNormal ) )
+ {
+ err = EFalse;
+ }
+
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::StopProgressDialogAndStoreValues
+//
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerViewBase::StopProgressDialogAndStoreValues()
+ {
+ TBool ret( EFalse );
+ if ( iProgressDialog && iProgressInfo )
+ {
+ CEikProgressInfo::SInfo info( iProgressInfo->Info() );
+ iProgressFinalValue = info.iFinalValue;
+ iProgressCurrentValue = iProgressInfo->CurrentValue();
+ if ( !iProgressCurrentValue && iTotalTransferredBytes <= iProgressFinalValue )
+ {
+ iProgressCurrentValue = iTotalTransferredBytes;
+ }
+ TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+ iProgressDialog = NULL;
+ iProgressInfo = NULL;
+ ret = ETrue;
+ }
+
+ delete iRefreshProgressDelayedStart;
+ iRefreshProgressDelayedStart = NULL;
+ delete iPeriodic;
+ iPeriodic = NULL;
+
+ return ret;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CheckPostponedDirectoryRefresh
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CheckPostponedDirectoryRefresh()
+ {
+ if ( iDirectoryRefreshPostponed )
+ {
+ // Delete was canceled but directory was changed during query
+ StoreIndex();
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+ iDirectoryRefreshPostponed = EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::DenyDirectoryRefresh
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DenyDirectoryRefresh( TBool aDeny )
+ {
+ iDirectoryRefreshDenied = aDeny;
+ if ( aDeny )
+ {
+ iDirectoryRefreshPostponed = EFalse; // Reset previous value
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::SortMenuFilteringL
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::SortMenuFilteringL( CEikMenuPane& aMenuPane )
+ {
+ TInt selected( EFileManagerSortByName );
+ switch ( iEngine.SortMethod() )
+ {
+ case CFileManagerEngine::EByMatch:
+ {
+ if ( iEngine.State() == CFileManagerEngine::ESearch )
+ {
+ selected = EFileManagerSortByMatch;
+ }
+ break;
+ }
+ case CFileManagerEngine::EByName:
+ {
+ selected = EFileManagerSortByName;
+ break;
+ }
+ case CFileManagerEngine::EByType:
+ {
+ selected = EFileManagerSortByType;
+ break;
+ }
+ case CFileManagerEngine::EMostRecentFirst:
+ {
+ selected = EFileManagerSortMostRecentFirst;
+ break;
+ }
+ case CFileManagerEngine::ELargestFirst:
+ {
+ selected = EFileManagerSortLargestFirst;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ TInt position = 0;
+ if ( aMenuPane.MenuItemExists( selected, position ) )
+ {
+ aMenuPane.SetItemButtonState( selected, EEikMenuItemSymbolOn );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerViewBase::CmdSortL
+//
+// ----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::CmdSortL( TInt aCommand )
+ {
+ CFileManagerEngine::TSortMethod sortMethod( CFileManagerEngine::EByName );
+ switch ( aCommand )
+ {
+ case EFileManagerSortByName:
+ {
+ sortMethod = CFileManagerEngine::EByName;
+ break;
+ }
+ case EFileManagerSortByType:
+ {
+ sortMethod = CFileManagerEngine::EByType;
+ break;
+ }
+ case EFileManagerSortMostRecentFirst:
+ {
+ sortMethod = CFileManagerEngine::EMostRecentFirst;
+ break;
+ }
+ case EFileManagerSortLargestFirst:
+ {
+ sortMethod = CFileManagerEngine::ELargestFirst;
+ break;
+ }
+ case EFileManagerSortByMatch:
+ {
+ sortMethod = CFileManagerEngine::EByMatch;
+ break;
+ }
+ default:
+ {
+ return;
+ }
+ }
+ if ( iEngine.SortMethod() != sortMethod )
+ {
+ iIndex = 0;
+ if ( iContainer )
+ {
+ iContainer->SetCurrentItemIndexAfterSearch( 0 );
+ }
+ iEngine.SetCurrentIndex( 0 );
+ iEngine.SetSortMethod( sortMethod );
+ iEngine.RefreshSort();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::FeatureManager
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFeatureManager& CFileManagerViewBase::FeatureManager() const
+ {
+ return iEngine.FeatureManager();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::NotifyForegroundStatusChange
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::NotifyForegroundStatusChange( TBool /*aForeground*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ShowDiskSpaceErrorL
+//
+// -----------------------------------------------------------------------------
+//
+#ifdef RD_MULTIPLE_DRIVE
+
+void CFileManagerViewBase::ShowDiskSpaceErrorL( const TDesC& aFolder )
+ {
+ TInt defaultNameResId( 0 );
+ TInt namedResId( 0 );
+ TInt drv( KErrNotFound );
+ if ( aFolder.Length() )
+ {
+ TFileManagerDriveInfo drvInfo;
+ drv = TDriveUnit( aFolder );
+ iEngine.GetDriveInfoL( drv, drvInfo );
+ if ( drvInfo.iState & TFileManagerDriveInfo::EDriveMassStorage )
+ {
+ defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_MASS_MEMORY;
+ }
+ else if ( drvInfo.iState & TFileManagerDriveInfo::EDriveRemovable )
+ {
+ defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_MEMORY_CARD_DEFAULTNAME;
+ namedResId = R_QTN_MEMLO_NOT_ENOUGH_MEMORY_CARD_NAME;
+ }
+ else if ( !( drvInfo.iState & TFileManagerDriveInfo::EDriveRemote ) )
+ {
+ defaultNameResId = R_QTN_MEMLO_NOT_ENOUGH_DEVICE_MEMORY;
+ }
+ }
+ if ( defaultNameResId )
+ {
+ HBufC* text = iEngine.GetFormattedDriveNameLC(
+ drv, defaultNameResId, namedResId );
+ FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ FileManagerDlgUtils::EErrorIcons, *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+ else
+ {
+ Error( KErrDiskFull ); // Show general error
+ }
+ }
+
+#else // RD_MULTIPLE_DRIVE
+
+void CFileManagerViewBase::ShowDiskSpaceErrorL( const TDesC& /*aFolder*/ )
+ {
+ Error( KErrDiskFull ); // Show general error
+ }
+
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::DoLaunchProgressDialogAsync
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::DoLaunchProgressDialogAsync()
+ {
+ // Store the bytes value to be restored after new launch
+ TInt64 prevBytes = iTotalTransferredBytes;
+
+ // Ensure that current progress value is up to date
+ if ( iTotalTransferredBytes > iProgressCurrentValue &&
+ iTotalTransferredBytes <= iProgressFinalValue )
+ {
+ iProgressCurrentValue = iTotalTransferredBytes;
+ }
+
+ TRAP_IGNORE( LaunchProgressDialogL(
+ iProgressFinalValue, iProgressCurrentValue, iActiveProcess, ETrue ) );
+
+ iTotalTransferredBytes = prevBytes;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::LaunchProgressDialogAsync
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::LaunchProgressDialogAsync( TAny* aPtr )
+ {
+ static_cast< CFileManagerViewBase* >( aPtr )->DoLaunchProgressDialogAsync();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::HandleServerAppExit
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::HandleServerAppExit( TInt /*aReason*/ )
+ {
+ iEngine.SetAppExitOb( NULL );
+ iEngine.SetObserver( this );
+ iEngine.RefreshDirectory();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::EmptyPwd
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::EmptyPwd( TDes& aPwd )
+ {
+ aPwd.FillZ( aPwd.MaxLength( ) );
+ aPwd.Zero();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerViewBase::ConvertCharsToPwd
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerViewBase::ConvertCharsToPwd(
+ const TDesC& aWord, TDes8& aConverted )
+ {
+ // Make sure the target password is empty ( can't use the function here )
+ aConverted.FillZ( aConverted.MaxLength() );
+ aConverted.Zero();
+ TInt size( aWord.Size() );
+ if ( size )
+ {
+ if ( size > aConverted.MaxLength() )
+ {
+ size = aConverted.MaxLength();
+ }
+ aConverted.Copy( (TUint8*)aWord.Ptr(), size );
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerViewBase::DriveInfoAtCurrentPosL
+//
+// ------------------------------------------------------------------------------
+//
+TInt CFileManagerViewBase::DriveInfoAtCurrentPosL(
+ TFileManagerDriveInfo& aInfo )
+ {
+ TUid viewId( Id() );
+ if ( viewId == CFileManagerAppUi::KFileManagerMemoryStoreViewId ||
+ viewId == CFileManagerAppUi::KFileManagerFoldersViewId )
+ {
+ INFO_LOG1("CFileManagerViewBase::DriveInfoAtCurrentPosL viewId=%D", viewId.iUid)
+ // Use cached info
+ aInfo = DriveInfo();
+ return aInfo.iDrive;
+ }
+
+ // Fetch info
+ if ( !iContainer )
+ {
+ return KErrNotFound;
+ }
+ if ( !iContainer->ListBoxNumberOfItems() )
+ {
+ return KErrNotFound;
+ }
+ CFileManagerItemProperties* prop = iEngine.GetItemInfoLC(
+ iContainer->ListBoxCurrentItemIndex() );
+ TInt ret( KErrNotFound );
+ TPtrC fullPath( prop->FullPath() );
+ if ( fullPath.Length() )
+ {
+ ret = TDriveUnit( fullPath );
+ iEngine.GetDriveInfoL( ret, aInfo );
+ }
+ CleanupStack::PopAndDestroy( prop );
+ return ret;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/Cfilemanagersearchresultsview.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,239 @@
+/*
+* 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: View for search results
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <CFileManagerEngine.h>
+#include <FileManager.rsg>
+#include <aknlists.h>
+#include <aknnavi.h>
+#include <akntitle.h>
+#include <csxhelp/fmgr.hlp.hrh>
+#include <FileManagerDebug.h>
+#include "Cfilemanagersearchresultsview.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerFileListContainer.h"
+#include "CFileManagerAppUi.h"
+#include "CFileManagerDocument.h"
+#include "FileManager.hrh"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::CFileManagerSearchResultsView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerSearchResultsView::CFileManagerSearchResultsView()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::ConstructL()
+ {
+ CFileManagerViewBase::ConstructL( R_FILEMANAGER_FOLDERS_VIEW );
+
+ CEikStatusPane* sp = StatusPane();
+ iNaviPane = static_cast< CAknNavigationControlContainer* >
+ ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerSearchResultsView* CFileManagerSearchResultsView::NewLC()
+ {
+ CFileManagerSearchResultsView* self =
+ new( ELeave ) CFileManagerSearchResultsView;
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::~CFileManagerSearchResultsView
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerSearchResultsView::~CFileManagerSearchResultsView()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::DirectoryChangedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::DirectoryChangedL()
+ {
+ FUNC_LOG
+
+ RefreshTitleL();
+
+ if ( iContainer )
+ {
+ iContainer->RefreshListL( iIndex );
+ UpdateCbaL();
+ }
+ }
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::Id
+//
+// -----------------------------------------------------------------------------
+//
+TUid CFileManagerSearchResultsView::Id() const
+ {
+ return CFileManagerAppUi::KFileManagerSearchResultsViewId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::CreateContainerL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerContainerBase* CFileManagerSearchResultsView::CreateContainerL()
+ {
+ return CFileManagerFileListContainer::NewL(
+ ClientRect(),
+ iIndex,
+ CFileManagerFileListContainer::EListFolder,
+ R_QTN_FMGR_SEARCH_NOT_FOUND,
+ KFMGR_HLP_SEARCH_RESULTS );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::DoActivateL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage );
+
+ iEngine.SetState( CFileManagerEngine::ESearch );
+ iNaviPane->PushDefaultL( ETrue );
+ iNaviDecorator = iNaviPane->Top();
+ iEngine.SetObserver( this );
+
+ if ( !aCustomMessage.Compare( KFileManagerSearchViewRefreshMsg ) )
+ {
+ // Start new search only if explicitly requested
+ iIndex = 0;
+ RefreshTitleL();
+ iEngine.RefreshDirectory();
+ }
+ else
+ {
+ // Update list without new search
+ DirectoryChangedL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::DoDeactivate
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::DoDeactivate()
+ {
+ FUNC_LOG
+
+ CFileManagerViewBase::DoDeactivate();
+
+ iNaviPane->Pop( iNaviDecorator );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::HandleCommandL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::HandleCommandL( TInt aCommand )
+ {
+ switch( aCommand )
+ {
+ case EFileManagerOpen:
+ {
+ StoreIndex();
+ CFileManagerViewBase::CmdOpenL();
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ CmdBackL();
+ break;
+ }
+ default:
+ {
+ CFileManagerViewBase::HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerSearchResultsView::UpdateCbaL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::UpdateCbaL()
+ {
+ UpdateCommonCbaL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::CmdBackL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::CmdBackL()
+ {
+ if ( iActiveProcess != ENoProcess )
+ {
+ return; // Ignore to avoid container mess up
+ }
+ iIndex = 0;
+ static_cast< CFileManagerAppUi* >( AppUi() )->CloseSearchResultsViewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSearchResultsView::RefreshTitleL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSearchResultsView::RefreshTitleL()
+ {
+ static_cast< CFileManagerAppUi* >( AppUi() )->SetTitleL(
+ iEngine.SearchString() );
+ iNaviPane->DrawDeferred();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/BWINS/FILEMANAGERENGINEU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,140 @@
+EXPORTS
+ ??0TFileManagerDriveInfo@@QAE@XZ @ 1 NONAME ; TFileManagerDriveInfo::TFileManagerDriveInfo(void)
+ ??1CFileManagerActiveDelete@@UAE@XZ @ 2 NONAME ; CFileManagerActiveDelete::~CFileManagerActiveDelete(void)
+ ??1CFileManagerActiveExecute@@UAE@XZ @ 3 NONAME ; CFileManagerActiveExecute::~CFileManagerActiveExecute(void)
+ ??1CFileManagerEngine@@UAE@XZ @ 4 NONAME ; CFileManagerEngine::~CFileManagerEngine(void)
+ ??1CFileManagerIRReceiver@@UAE@XZ @ 5 NONAME ; CFileManagerIRReceiver::~CFileManagerIRReceiver(void)
+ ??1CFileManagerItemProperties@@UAE@XZ @ 6 NONAME ; CFileManagerItemProperties::~CFileManagerItemProperties(void)
+ ?AllowedDriveAttMatchMask@CFileManagerBackupSettings@@QBEKXZ @ 7 NONAME ; unsigned long CFileManagerBackupSettings::AllowedDriveAttMatchMask(void) const
+ ?AnyEjectableDrivePresent@CFileManagerEngine@@QBEHXZ @ 8 NONAME ; int CFileManagerEngine::AnyEjectableDrivePresent(void) const
+ ?BackstepL@CFileManagerEngine@@QAEXXZ @ 9 NONAME ; void CFileManagerEngine::BackstepL(void)
+ ?BackupSettingsL@CFileManagerEngine@@QAEAAVCFileManagerBackupSettings@@XZ @ 10 NONAME ; class CFileManagerBackupSettings & CFileManagerEngine::BackupSettingsL(void)
+ ?CancelExecution@CFileManagerActiveExecute@@QAEXXZ @ 11 NONAME ; void CFileManagerActiveExecute::CancelExecution(void)
+ ?CancelProcess@CFileManagerEngine@@QAEXW4TFileManagerProcess@MFileManagerProcessObserver@@@Z @ 12 NONAME ; void CFileManagerEngine::CancelProcess(enum MFileManagerProcessObserver::TFileManagerProcess)
+ ?CancelRefresh@CFileManagerEngine@@QAEHXZ @ 13 NONAME ; int CFileManagerEngine::CancelRefresh(void)
+ ?ContainsAnyFilesOrFolders@CFileManagerItemProperties@@QAEHXZ @ 14 NONAME ; int CFileManagerItemProperties::ContainsAnyFilesOrFolders(void)
+ ?Content@CFileManagerBackupSettings@@QBEKXZ @ 15 NONAME ; unsigned long CFileManagerBackupSettings::Content(void) const
+ ?CreateActiveDeleteL@CFileManagerEngine@@QAEPAVCFileManagerActiveDelete@@AAV?$CArrayFixFlat@H@@@Z @ 16 NONAME ; class CFileManagerActiveDelete * CFileManagerEngine::CreateActiveDeleteL(class CArrayFixFlat<int> &)
+ ?CurrentDirectory@CFileManagerEngine@@QBE?AVTPtrC16@@XZ @ 17 NONAME ; class TPtrC16 CFileManagerEngine::CurrentDirectory(void) const
+ ?CurrentDrive@CFileManagerEngine@@QAEHXZ @ 18 NONAME ; int CFileManagerEngine::CurrentDrive(void)
+ ?CurrentDriveName@CFileManagerEngine@@QAE?AVTPtrC16@@XZ @ 19 NONAME ; class TPtrC16 CFileManagerEngine::CurrentDriveName(void)
+ ?CurrentIndex@CFileManagerEngine@@QAEHXZ @ 20 NONAME ; int CFileManagerEngine::CurrentIndex(void)
+ ?Day@CFileManagerBackupSettings@@QBEHXZ @ 21 NONAME ; int CFileManagerBackupSettings::Day(void) const
+ ?DeleteRemoteDrive@CFileManagerEngine@@QAEHH@Z @ 22 NONAME ; int CFileManagerEngine::DeleteRemoteDrive(int)
+ ?DeletedDrmItems@CFileManagerActiveDelete@@QAEHAAH@Z @ 23 NONAME ; int CFileManagerActiveDelete::DeletedDrmItems(int &)
+ ?DriveId@CFileManagerItemProperties@@QBEHXZ @ 24 NONAME ; int CFileManagerItemProperties::DriveId(void) const
+ ?DriveName@CFileManagerEngine@@QAE?AVTPtrC16@@H@Z @ 25 NONAME ; class TPtrC16 CFileManagerEngine::DriveName(int)
+ ?DriveName@CFileManagerItemProperties@@QBE?AVTPtrC16@@XZ @ 26 NONAME ; class TPtrC16 CFileManagerItemProperties::DriveName(void) const
+ ?DriveRootDirectory@CFileManagerEngine@@QBE?AVTPtrC16@@H@Z @ 27 NONAME ; class TPtrC16 CFileManagerEngine::DriveRootDirectory(int) const
+ ?DriveState@CFileManagerEngine@@QBEHAAKABVTDesC16@@@Z @ 28 NONAME ; int CFileManagerEngine::DriveState(unsigned long &, class TDesC16 const &) const
+ ?DriveState@CFileManagerEngine@@QBEHAAKH@Z @ 29 NONAME ; int CFileManagerEngine::DriveState(unsigned long &, int) const
+ ?EnoughSpaceL@CFileManagerEngine@@QBEHABVTDesC16@@_JW4TFileManagerProcess@MFileManagerProcessObserver@@@Z @ 30 NONAME ; int CFileManagerEngine::EnoughSpaceL(class TDesC16 const &, long long, enum MFileManagerProcessObserver::TFileManagerProcess) const
+ ?EnsureFinalBackslash@CFileManagerUtils@@SAXAAVTDes16@@@Z @ 31 NONAME ; void CFileManagerUtils::EnsureFinalBackslash(class TDes16 &)
+ ?ExecuteL@CFileManagerActiveExecute@@QAEXW4TFileManagerSwitch@1@@Z @ 32 NONAME ; void CFileManagerActiveExecute::ExecuteL(enum CFileManagerActiveExecute::TFileManagerSwitch)
+ ?Ext@CFileManagerItemProperties@@QBE?AVTPtrC16@@XZ @ 33 NONAME ; class TPtrC16 CFileManagerItemProperties::Ext(void) const
+ ?FeatureManager@CFileManagerEngine@@QBEAAVCFileManagerFeatureManager@@XZ @ 34 NONAME ; class CFileManagerFeatureManager & CFileManagerEngine::FeatureManager(void) const
+ ?FileList@CFileManagerEngine@@QBEPAVMDesC16Array@@XZ @ 35 NONAME ; class MDesC16Array * CFileManagerEngine::FileList(void) const
+ ?FileSystemEvent@CFileManagerEngine@@QAEXH@Z @ 36 NONAME ; void CFileManagerEngine::FileSystemEvent(int)
+ ?FileTypeL@CFileManagerEngine@@QBEKABVTDesC16@@@Z @ 37 NONAME ; unsigned long CFileManagerEngine::FileTypeL(class TDesC16 const &) const
+ ?FileTypeL@CFileManagerEngine@@QBEKH@Z @ 38 NONAME ; unsigned long CFileManagerEngine::FileTypeL(int) const
+ ?FilesContainedL@CFileManagerItemProperties@@QAEHXZ @ 39 NONAME ; int CFileManagerItemProperties::FilesContainedL(void)
+ ?FilesInFolderL@CFileManagerEngine@@QAEHXZ @ 40 NONAME ; int CFileManagerEngine::FilesInFolderL(void)
+ ?FolderLevel@CFileManagerEngine@@QAEHXZ @ 41 NONAME ; int CFileManagerEngine::FolderLevel(void)
+ ?FoldersContainedL@CFileManagerItemProperties@@QAEHXZ @ 42 NONAME ; int CFileManagerItemProperties::FoldersContainedL(void)
+ ?ForcedRefreshDirectory@CFileManagerEngine@@QAEXXZ @ 43 NONAME ; void CFileManagerEngine::ForcedRefreshDirectory(void)
+ ?FullPath@CFileManagerItemProperties@@QBE?AVTPtrC16@@XZ @ 44 NONAME ; class TPtrC16 CFileManagerItemProperties::FullPath(void) const
+ ?GetDriveInfoL@CFileManagerEngine@@QAEXAAVTFileManagerDriveInfo@@@Z @ 45 NONAME ; void CFileManagerEngine::GetDriveInfoL(class TFileManagerDriveInfo &)
+ ?GetDriveInfoL@CFileManagerEngine@@QBEXHAAVTFileManagerDriveInfo@@@Z @ 46 NONAME ; void CFileManagerEngine::GetDriveInfoL(int, class TFileManagerDriveInfo &) const
+ ?GetError@CFileManagerActiveDelete@@QAEHAAVTDes16@@@Z @ 47 NONAME ; int CFileManagerActiveDelete::GetError(class TDes16 &)
+ ?GetFileSizesL@CFileManagerEngine@@QAE_JABV?$CArrayFixFlat@H@@@Z @ 48 NONAME ; long long CFileManagerEngine::GetFileSizesL(class CArrayFixFlat<int> const &)
+ ?GetFormattedDriveNameLC@CFileManagerEngine@@QBEPAVHBufC16@@HHH@Z @ 49 NONAME ; class HBufC16 * CFileManagerEngine::GetFormattedDriveNameLC(int, int, int) const
+ ?GetItemInfoL@CFileManagerEngine@@QAEPAVCFileManagerItemProperties@@H@Z @ 50 NONAME ; class CFileManagerItemProperties * CFileManagerEngine::GetItemInfoL(int)
+ ?GetItemInfoLC@CFileManagerEngine@@QAEPAVCFileManagerItemProperties@@H@Z @ 51 NONAME ; class CFileManagerItemProperties * CFileManagerEngine::GetItemInfoLC(int)
+ ?GetMMCInfoL@CFileManagerEngine@@QBE?AVTFileManagerDriveInfo@@XZ @ 52 NONAME ; class TFileManagerDriveInfo CFileManagerEngine::GetMMCInfoL(void) const
+ ?GetRestoreInfoArrayL@CFileManagerEngine@@QBEXAAV?$RArray@VTInfo@CFileManagerRestoreSettings@@@@H@Z @ 53 NONAME ; void CFileManagerEngine::GetRestoreInfoArrayL(class RArray<class CFileManagerRestoreSettings::TInfo> &, int) const
+ ?HasFinalBackslash@CFileManagerUtils@@SAHABVTDesC16@@@Z @ 54 NONAME ; int CFileManagerUtils::HasFinalBackslash(class TDesC16 const &)
+ ?IconIdL@CFileManagerEngine@@QBEHH@Z @ 55 NONAME ; int CFileManagerEngine::IconIdL(int) const
+ ?IllegalChars@CFileManagerEngine@@QBEHABVTDesC16@@@Z @ 56 NONAME ; int CFileManagerEngine::IllegalChars(class TDesC16 const &) const
+ ?IndexToFullPathL@CFileManagerEngine@@QBEPAVHBufC16@@H@Z @ 57 NONAME ; class HBufC16 * CFileManagerEngine::IndexToFullPathL(int) const
+ ?IndexToFullPathLC@CFileManagerEngine@@QBEPAVHBufC16@@H@Z @ 58 NONAME ; class HBufC16 * CFileManagerEngine::IndexToFullPathLC(int) const
+ ?IsDistributableFile@CFileManagerEngine@@QBEHABVTDesC16@@AAH@Z @ 59 NONAME ; int CFileManagerEngine::IsDistributableFile(class TDesC16 const &, int &) const
+ ?IsDrive@CFileManagerItemProperties@@QBEHXZ @ 60 NONAME ; int CFileManagerItemProperties::IsDrive(void) const
+ ?IsDrmFullSupported@CFileManagerFeatureManager@@QBEHXZ @ 61 NONAME ; int CFileManagerFeatureManager::IsDrmFullSupported(void) const
+ ?IsFeatureSupported@CFileManagerFeatureManager@@QBEHH@Z @ 62 NONAME ; int CFileManagerFeatureManager::IsFeatureSupported(int) const
+ ?IsFolder@CFileManagerEngine@@QBEHH@Z @ 63 NONAME ; int CFileManagerEngine::IsFolder(int) const
+ ?IsFromInternalToRemovableDrive@CFileManagerUtils@@SAHAAVRFs@@ABVTDesC16@@1@Z @ 64 NONAME ; int CFileManagerUtils::IsFromInternalToRemovableDrive(class RFs &, class TDesC16 const &, class TDesC16 const &)
+ ?IsHelpSupported@CFileManagerFeatureManager@@QBEHXZ @ 65 NONAME ; int CFileManagerFeatureManager::IsHelpSupported(void) const
+ ?IsIrdaSupported@CFileManagerFeatureManager@@QBEHXZ @ 66 NONAME ; int CFileManagerFeatureManager::IsIrdaSupported(void) const
+ ?IsMmcPassWdSupported@CFileManagerFeatureManager@@QBEHXZ @ 67 NONAME ; int CFileManagerFeatureManager::IsMmcPassWdSupported(void) const
+ ?IsMmcSwEjectSupported@CFileManagerFeatureManager@@QBEHXZ @ 68 NONAME ; int CFileManagerFeatureManager::IsMmcSwEjectSupported(void) const
+ ?IsNameFoundL@CFileManagerEngine@@QAEHABVTDesC16@@@Z @ 69 NONAME ; int CFileManagerEngine::IsNameFoundL(class TDesC16 const &)
+ ?IsRemoteDrive@CFileManagerItemProperties@@QBEHXZ @ 70 NONAME ; int CFileManagerItemProperties::IsRemoteDrive(void) const
+ ?IsRemoteDrive@CFileManagerUtils@@SAHAAVRFs@@ABVTDesC16@@@Z @ 71 NONAME ; int CFileManagerUtils::IsRemoteDrive(class RFs &, class TDesC16 const &)
+ ?IsRemoteStorageFwSupported@CFileManagerFeatureManager@@QBEHXZ @ 72 NONAME ; int CFileManagerFeatureManager::IsRemoteStorageFwSupported(void) const
+ ?IsSystemFolder@CFileManagerEngine@@QBEHABVTDesC16@@@Z @ 73 NONAME ; int CFileManagerEngine::IsSystemFolder(class TDesC16 const &) const
+ ?IsValidName@CFileManagerEngine@@QBEHABVTDesC16@@0H@Z @ 74 NONAME ; int CFileManagerEngine::IsValidName(class TDesC16 const &, class TDesC16 const &, int) const
+ ?IsWesternVariant@CFileManagerFeatureManager@@QBEHXZ @ 75 NONAME ; int CFileManagerFeatureManager::IsWesternVariant(void) const
+ ?LocalizedName@CFileManagerEngine@@QBE?AVTPtrC16@@ABVTDesC16@@@Z @ 76 NONAME ; class TPtrC16 CFileManagerEngine::LocalizedName(class TDesC16 const &) const
+ ?LocalizedName@CFileManagerItemProperties@@QBE?AVTPtrC16@@XZ @ 77 NONAME ; class TPtrC16 CFileManagerItemProperties::LocalizedName(void) const
+ ?LocalizedNameOfCurrentDirectory@CFileManagerEngine@@QBE?AVTPtrC16@@XZ @ 78 NONAME ; class TPtrC16 CFileManagerEngine::LocalizedNameOfCurrentDirectory(void) const
+ ?Memory@CFileManagerEngine@@QBE?AW4TFileManagerMemory@@XZ @ 79 NONAME ; enum TFileManagerMemory CFileManagerEngine::Memory(void) const
+ ?MimeTypeL@CFileManagerItemProperties@@QAE?AVTPtrC16@@XZ @ 80 NONAME ; class TPtrC16 CFileManagerItemProperties::MimeTypeL(void)
+ ?ModifiedDate@CFileManagerItemProperties@@QBE?AVTTime@@XZ @ 81 NONAME ; class TTime CFileManagerItemProperties::ModifiedDate(void) const
+ ?ModifiedLocalDate@CFileManagerItemProperties@@QBEHAAVTTime@@@Z @ 82 NONAME ; int CFileManagerItemProperties::ModifiedLocalDate(class TTime &) const
+ ?Name@CFileManagerItemProperties@@QBE?AVTPtrC16@@XZ @ 83 NONAME ; class TPtrC16 CFileManagerItemProperties::Name(void) const
+ ?NameAndExt@CFileManagerItemProperties@@QBE?AVTPtrC16@@XZ @ 84 NONAME ; class TPtrC16 CFileManagerItemProperties::NameAndExt(void) const
+ ?NavigationLevel@CFileManagerEngine@@QBEHXZ @ 85 NONAME ; int CFileManagerEngine::NavigationLevel(void) const
+ ?NewFolderL@CFileManagerEngine@@QAEXABVTDesC16@@@Z @ 86 NONAME ; void CFileManagerEngine::NewFolderL(class TDesC16 const &)
+ ?NewL@CFileManagerActiveExecute@@SAPAV1@AAVCFileManagerEngine@@W4TFileManagerProcess@MFileManagerProcessObserver@@AAV4@AAV?$CArrayFixFlat@H@@ABVTDesC16@@@Z @ 87 NONAME ; class CFileManagerActiveExecute * CFileManagerActiveExecute::NewL(class CFileManagerEngine &, enum MFileManagerProcessObserver::TFileManagerProcess, class MFileManagerProcessObserver &, class CArrayFixFlat<int> &, class TDesC16 const &)
+ ?NewL@CFileManagerEngine@@SAPAV1@AAVRFs@@@Z @ 88 NONAME ; class CFileManagerEngine * CFileManagerEngine::NewL(class RFs &)
+ ?NewL@CFileManagerIRReceiver@@SAPAV1@AAVMFileManagerProcessObserver@@ABVTDesC16@@AAVCFileManagerEngine@@@Z @ 89 NONAME ; class CFileManagerIRReceiver * CFileManagerIRReceiver::NewL(class MFileManagerProcessObserver &, class TDesC16 const &, class CFileManagerEngine &)
+ ?OpenFilesL@CFileManagerItemProperties@@QAEHXZ @ 90 NONAME ; int CFileManagerItemProperties::OpenFilesL(void)
+ ?OpenL@CFileManagerEngine@@QAEXH@Z @ 91 NONAME ; void CFileManagerEngine::OpenL(int)
+ ?ReceiveFileL@CFileManagerIRReceiver@@QAEXXZ @ 92 NONAME ; void CFileManagerIRReceiver::ReceiveFileL(void)
+ ?RefreshDirectory@CFileManagerEngine@@QAEXXZ @ 93 NONAME ; void CFileManagerEngine::RefreshDirectory(void)
+ ?RefreshL@CFileManagerBackupSettings@@QAEXXZ @ 94 NONAME ; void CFileManagerBackupSettings::RefreshL(void)
+ ?RefreshL@CFileManagerRestoreSettings@@QAEXXZ @ 95 NONAME ; void CFileManagerRestoreSettings::RefreshL(void)
+ ?RefreshSort@CFileManagerEngine@@QAEXXZ @ 96 NONAME ; void CFileManagerEngine::RefreshSort(void)
+ ?RemoveDrivePassword@CFileManagerEngine@@QAEHHABV?$TBuf8@$0BA@@@@Z @ 97 NONAME ; int CFileManagerEngine::RemoveDrivePassword(int, class TBuf8<16> const &)
+ ?RenameDrive@CFileManagerEngine@@QAEHHABVTDesC16@@@Z @ 98 NONAME ; int CFileManagerEngine::RenameDrive(int, class TDesC16 const &)
+ ?RenameL@CFileManagerEngine@@QAEXHABVTDesC16@@@Z @ 99 NONAME ; void CFileManagerEngine::RenameL(int, class TDesC16 const &)
+ ?Reset@TFileManagerDriveInfo@@QAEXXZ @ 100 NONAME ; void TFileManagerDriveInfo::Reset(void)
+ ?RestoreSettingsL@CFileManagerEngine@@QAEAAVCFileManagerRestoreSettings@@XZ @ 101 NONAME ; class CFileManagerRestoreSettings & CFileManagerEngine::RestoreSettingsL(void)
+ ?SaveL@CFileManagerBackupSettings@@QAEXXZ @ 102 NONAME ; void CFileManagerBackupSettings::SaveL(void)
+ ?Scheduling@CFileManagerBackupSettings@@QBEHXZ @ 103 NONAME ; int CFileManagerBackupSettings::Scheduling(void) const
+ ?SearchString@CFileManagerEngine@@QBE?AVTPtrC16@@XZ @ 104 NONAME ; class TPtrC16 CFileManagerEngine::SearchString(void) const
+ ?SetContent@CFileManagerBackupSettings@@QAEXK@Z @ 105 NONAME ; void CFileManagerBackupSettings::SetContent(unsigned long)
+ ?SetCurrentIndex@CFileManagerEngine@@QAEXH@Z @ 106 NONAME ; void CFileManagerEngine::SetCurrentIndex(int)
+ ?SetDay@CFileManagerBackupSettings@@QAEXH@Z @ 107 NONAME ; void CFileManagerBackupSettings::SetDay(int)
+ ?SetDirectoryWithBackstepsL@CFileManagerEngine@@QAEXABVTDesC16@@@Z @ 108 NONAME ; void CFileManagerEngine::SetDirectoryWithBackstepsL(class TDesC16 const &)
+ ?SetDrivePassword@CFileManagerEngine@@QAEHHABV?$TBuf8@$0BA@@@0@Z @ 109 NONAME ; int CFileManagerEngine::SetDrivePassword(int, class TBuf8<16> const &, class TBuf8<16> const &)
+ ?SetMemoryL@CFileManagerEngine@@QAEHW4TFileManagerMemory@@@Z @ 110 NONAME ; int CFileManagerEngine::SetMemoryL(enum TFileManagerMemory)
+ ?SetObserver@CFileManagerEngine@@QAEXPAVMFileManagerProcessObserver@@@Z @ 111 NONAME ; void CFileManagerEngine::SetObserver(class MFileManagerProcessObserver *)
+ ?SetRemoteDriveConnection@CFileManagerEngine@@QAEHHH@Z @ 112 NONAME ; int CFileManagerEngine::SetRemoteDriveConnection(int, int)
+ ?SetScheduling@CFileManagerBackupSettings@@QAEXH@Z @ 113 NONAME ; void CFileManagerBackupSettings::SetScheduling(int)
+ ?SetSearchFolderL@CFileManagerEngine@@QAEXABVTDesC16@@@Z @ 114 NONAME ; void CFileManagerEngine::SetSearchFolderL(class TDesC16 const &)
+ ?SetSearchStringL@CFileManagerEngine@@QAEXABVTDesC16@@@Z @ 115 NONAME ; void CFileManagerEngine::SetSearchStringL(class TDesC16 const &)
+ ?SetSelection@CFileManagerRestoreSettings@@QAEXAB_K@Z @ 116 NONAME ; void CFileManagerRestoreSettings::SetSelection(unsigned long long const &)
+ ?SetSortMethod@CFileManagerEngine@@QAEXW4TSortMethod@1@@Z @ 117 NONAME ; void CFileManagerEngine::SetSortMethod(enum CFileManagerEngine::TSortMethod)
+ ?SetState@CFileManagerEngine@@QAEXW4TState@1@@Z @ 118 NONAME ; void CFileManagerEngine::SetState(enum CFileManagerEngine::TState)
+ ?SetTargetDrive@CFileManagerBackupSettings@@QAEXH@Z @ 119 NONAME ; void CFileManagerBackupSettings::SetTargetDrive(int)
+ ?SetTime@CFileManagerBackupSettings@@QAEXABVTTime@@@Z @ 120 NONAME ; void CFileManagerBackupSettings::SetTime(class TTime const &)
+ ?SettingAt@CFileManagerBackupSettings@@QAEHH@Z @ 121 NONAME ; int CFileManagerBackupSettings::SettingAt(int)
+ ?SizeL@CFileManagerItemProperties@@QAE_JXZ @ 122 NONAME ; long long CFileManagerItemProperties::SizeL(void)
+ ?SortMethod@CFileManagerEngine@@QBE?AW4TSortMethod@1@XZ @ 123 NONAME ; enum CFileManagerEngine::TSortMethod CFileManagerEngine::SortMethod(void) const
+ ?StartBackupProcessL@CFileManagerEngine@@QAEXW4TFileManagerProcess@MFileManagerProcessObserver@@@Z @ 124 NONAME ; void CFileManagerEngine::StartBackupProcessL(enum MFileManagerProcessObserver::TFileManagerProcess)
+ ?StartEjectProcessL@CFileManagerEngine@@QAEXH@Z @ 125 NONAME ; void CFileManagerEngine::StartEjectProcessL(int)
+ ?StartFormatProcessL@CFileManagerEngine@@QAEXH@Z @ 126 NONAME ; void CFileManagerEngine::StartFormatProcessL(int)
+ ?State@CFileManagerEngine@@QBE?AW4TState@1@XZ @ 127 NONAME ; enum CFileManagerEngine::TState CFileManagerEngine::State(void) const
+ ?StopReceiving@CFileManagerIRReceiver@@QAEXXZ @ 128 NONAME ; void CFileManagerIRReceiver::StopReceiving(void)
+ ?StripFinalBackslash@CFileManagerUtils@@SA?AVTPtrC16@@ABVTDesC16@@@Z @ 129 NONAME ; class TPtrC16 CFileManagerUtils::StripFinalBackslash(class TDesC16 const &)
+ ?TargetDrive@CFileManagerBackupSettings@@QBEHXZ @ 130 NONAME ; int CFileManagerBackupSettings::TargetDrive(void) const
+ ?Time@CFileManagerBackupSettings@@QBEABVTTime@@XZ @ 131 NONAME ; class TTime const & CFileManagerBackupSettings::Time(void) const
+ ?TypeL@CFileManagerItemProperties@@QAEKXZ @ 132 NONAME ; unsigned long CFileManagerItemProperties::TypeL(void)
+ ?UnlockDrive@CFileManagerEngine@@QAEHHABV?$TBuf8@$0BA@@@@Z @ 133 NONAME ; int CFileManagerEngine::UnlockDrive(int, class TBuf8<16> const &)
+ ?IsEmbedded@CFileManagerFeatureManager@@QBEHXZ @ 134 NONAME ; int CFileManagerFeatureManager::IsEmbedded(void) const
+ ?ToFolder@CFileManagerActiveExecute@@QAE?AVTPtrC16@@XZ @ 135 NONAME ; class TPtrC16 CFileManagerActiveExecute::ToFolder(void)
+ ?SetCurrentItemName@CFileManagerEngine@@QAEXABVTDesC16@@@Z @ 136 NONAME ; void CFileManagerEngine::SetCurrentItemName(class TDesC16 const &)
+ ?SetAppExitOb@CFileManagerEngine@@QAEXPAVMAknServerAppExitObserver@@@Z @ 137 NONAME ; void CFileManagerEngine::SetAppExitOb(class MAknServerAppExitObserver *)
+ ?DeleteBackupsL@CFileManagerEngine@@QAEXXZ @ 138 NONAME ; void CFileManagerEngine::DeleteBackupsL(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/BWINS/FILEMANAGERVIEWU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,51 @@
+EXPORTS
+ ??1CFileManagerFolderNavigationPane@@UAE@XZ @ 1 NONAME ; CFileManagerFolderNavigationPane::~CFileManagerFolderNavigationPane(void)
+ ??1CFileManagerGlobalDlg@@UAE@XZ @ 2 NONAME ; CFileManagerGlobalDlg::~CFileManagerGlobalDlg(void)
+ ??1CFileManagerIconArray@@UAE@XZ @ 3 NONAME ; CFileManagerIconArray::~CFileManagerIconArray(void)
+ ?CancelDialog@CFileManagerGlobalDlg@@QAEXXZ @ 4 NONAME ; void CFileManagerGlobalDlg::CancelDialog(void)
+ ?ChangeRootL@CFileManagerFolderNavigationPane@@QAEXH@Z @ 5 NONAME ; void CFileManagerFolderNavigationPane::ChangeRootL(int)
+ ?FindIcon@CFileManagerIconArray@@QAEHH@Z @ 6 NONAME ; int CFileManagerIconArray::FindIcon(int)
+ ?FolderDepth@CFileManagerFolderNavigationPane@@QBEHXZ @ 7 NONAME ; int CFileManagerFolderNavigationPane::FolderDepth(void) const
+ ?HandleResourceChangeL@CFileManagerFolderNavigationPane@@QAEXH@Z @ 8 NONAME ; void CFileManagerFolderNavigationPane::HandleResourceChangeL(int)
+ ?NewL@CFileManagerFolderNavigationPane@@SAPAV1@HHAAVTResourceReader@@@Z @ 9 NONAME ; class CFileManagerFolderNavigationPane * CFileManagerFolderNavigationPane::NewL(int, int, class TResourceReader &)
+ ?NewL@CFileManagerGlobalDlg@@SAPAV1@XZ @ 10 NONAME ; class CFileManagerGlobalDlg * CFileManagerGlobalDlg::NewL(void)
+ ?NewL@CFileManagerIconArray@@SAPAV1@XZ @ 11 NONAME ; class CFileManagerIconArray * CFileManagerIconArray::NewL(void)
+ ?ProcessFinished@CFileManagerGlobalDlg@@QAEXXZ @ 12 NONAME ; void CFileManagerGlobalDlg::ProcessFinished(void)
+ ?SetFolderDepth@CFileManagerFolderNavigationPane@@QAEXH@Z @ 13 NONAME ; void CFileManagerFolderNavigationPane::SetFolderDepth(int)
+ ?SetObserver@CFileManagerFolderNavigationPane@@QAEXPAVMFileManagerFolderNaviObserver@@@Z @ 14 NONAME ; void CFileManagerFolderNavigationPane::SetObserver(class MFileManagerFolderNaviObserver *)
+ ?SetObserver@CFileManagerGlobalDlg@@QAEXPAVMFileManagerGlobalDlgObserver@@@Z @ 15 NONAME ; void CFileManagerGlobalDlg::SetObserver(class MFileManagerGlobalDlgObserver *)
+ ?ShowConfirmNoteL@FileManagerDlgUtils@@SAXH@Z @ 16 NONAME ; void FileManagerDlgUtils::ShowConfirmNoteL(int)
+ ?ShowConfirmQueryWithOkCancelL@FileManagerDlgUtils@@SAHABVTDesC16@@@Z @ 17 NONAME ; int FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL(class TDesC16 const &)
+ ?ShowConfirmQueryWithOkCancelL@FileManagerDlgUtils@@SAHHABVTDesC16@@@Z @ 18 NONAME ; int FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL(int, class TDesC16 const &)
+ ?ShowConfirmQueryWithOkL@FileManagerDlgUtils@@SAXW4TIcons@1@ABVTDesC16@@@Z @ 19 NONAME ; void FileManagerDlgUtils::ShowConfirmQueryWithOkL(enum FileManagerDlgUtils::TIcons, class TDesC16 const &)
+ ?ShowConfirmQueryWithOkL@FileManagerDlgUtils@@SAXW4TIcons@1@HABVTDesC16@@@Z @ 20 NONAME ; void FileManagerDlgUtils::ShowConfirmQueryWithOkL(enum FileManagerDlgUtils::TIcons, int, class TDesC16 const &)
+ ?ShowConfirmQueryWithOkL@FileManagerDlgUtils@@SAXW4TIcons@1@HH@Z @ 21 NONAME ; void FileManagerDlgUtils::ShowConfirmQueryWithOkL(enum FileManagerDlgUtils::TIcons, int, int)
+ ?ShowConfirmQueryWithYesNoL@FileManagerDlgUtils@@SAHABVTDesC16@@@Z @ 22 NONAME ; int FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(class TDesC16 const &)
+ ?ShowConfirmQueryWithYesNoL@FileManagerDlgUtils@@SAHHABVTDesC16@@@Z @ 23 NONAME ; int FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(int, class TDesC16 const &)
+ ?ShowDialogL@CFileManagerGlobalDlg@@QAEXW4TType@1@ABVTDesC16@@H@Z @ 24 NONAME ; void CFileManagerGlobalDlg::ShowDialogL(enum CFileManagerGlobalDlg::TType, class TDesC16 const &, int)
+ ?ShowDialogL@CFileManagerGlobalDlg@@QAEXW4TType@1@HH@Z @ 25 NONAME ; void CFileManagerGlobalDlg::ShowDialogL(enum CFileManagerGlobalDlg::TType, int, int)
+ ?ShowErrorNoteL@FileManagerDlgUtils@@SAXABVTDesC16@@@Z @ 26 NONAME ; void FileManagerDlgUtils::ShowErrorNoteL(class TDesC16 const &)
+ ?ShowErrorNoteL@FileManagerDlgUtils@@SAXHABVTDesC16@@@Z @ 27 NONAME ; void FileManagerDlgUtils::ShowErrorNoteL(int, class TDesC16 const &)
+ ?ShowFileNameQueryL@FileManagerDlgUtils@@SAHHABVTDesC16@@AAVTDes16@@AAVCFileManagerEngine@@@Z @ 28 NONAME ; int FileManagerDlgUtils::ShowFileNameQueryL(int, class TDesC16 const &, class TDes16 &, class CFileManagerEngine &)
+ ?ShowFolderNameQueryL@FileManagerDlgUtils@@SAHHAAVTDes16@@AAVCFileManagerEngine@@H@Z @ 29 NONAME ; int FileManagerDlgUtils::ShowFolderNameQueryL(int, class TDes16 &, class CFileManagerEngine &, int)
+ ?ShowInfoNoteL@FileManagerDlgUtils@@SAXABVTDesC16@@@Z @ 30 NONAME ; void FileManagerDlgUtils::ShowInfoNoteL(class TDesC16 const &)
+ ?ShowInfoNoteL@FileManagerDlgUtils@@SAXHABVTDesC16@@@Z @ 31 NONAME ; void FileManagerDlgUtils::ShowInfoNoteL(int, class TDesC16 const &)
+ ?ShowInfoNoteL@FileManagerDlgUtils@@SAXHH@Z @ 32 NONAME ; void FileManagerDlgUtils::ShowInfoNoteL(int, int)
+ ?ShowInfoQueryL@FileManagerDlgUtils@@SAXABVTDesC16@@@Z @ 33 NONAME ; void FileManagerDlgUtils::ShowInfoQueryL(class TDesC16 const &)
+ ?ShowInfoQueryL@FileManagerDlgUtils@@SAXHABVTDesC16@@@Z @ 34 NONAME ; void FileManagerDlgUtils::ShowInfoQueryL(int, class TDesC16 const &)
+ ?ShowInfoQueryL@FileManagerDlgUtils@@SAXHH@Z @ 35 NONAME ; void FileManagerDlgUtils::ShowInfoQueryL(int, int)
+ ?ShowItemInfoPopupL@FileManagerDlgUtils@@SAXAAVCFileManagerItemProperties@@ABVCFileManagerFeatureManager@@@Z @ 36 NONAME ; void FileManagerDlgUtils::ShowItemInfoPopupL(class CFileManagerItemProperties &, class CFileManagerFeatureManager const &)
+ ?ShowMemoryStoreInfoPopupL@FileManagerDlgUtils@@SAXABVTFileManagerDriveInfo@@@Z @ 37 NONAME ; void FileManagerDlgUtils::ShowMemoryStoreInfoPopupL(class TFileManagerDriveInfo const &)
+ ?ShowNOfMSettingQueryL@FileManagerDlgUtils@@SAHHHAAKH@Z @ 38 NONAME ; int FileManagerDlgUtils::ShowNOfMSettingQueryL(int, int, unsigned long &, int)
+ ?ShowOOfMSettingQueryL@FileManagerDlgUtils@@SAHHHAAH@Z @ 39 NONAME ; int FileManagerDlgUtils::ShowOOfMSettingQueryL(int, int, int &)
+ ?ShowOOfMSettingQueryL@FileManagerDlgUtils@@SAHHPBVMDesC16Array@@AAH@Z @ 40 NONAME ; int FileManagerDlgUtils::ShowOOfMSettingQueryL(int, class MDesC16Array const *, int &)
+ ?ShowPasswordQueryL@FileManagerDlgUtils@@SAHAAVTDes16@@@Z @ 41 NONAME ; int FileManagerDlgUtils::ShowPasswordQueryL(class TDes16 &)
+ ?ShowSimplePasswordQueryL@FileManagerDlgUtils@@SAHABVTDesC16@@AAVTDes16@@@Z @ 42 NONAME ; int FileManagerDlgUtils::ShowSimplePasswordQueryL(class TDesC16 const &, class TDes16 &)
+ ?ShowSimplePasswordQueryL@FileManagerDlgUtils@@SAHHAAVTDes16@@@Z @ 43 NONAME ; int FileManagerDlgUtils::ShowSimplePasswordQueryL(int, class TDes16 &)
+ ?ShowTimeSettingQueryL@FileManagerDlgUtils@@SAHHAAVTTime@@@Z @ 44 NONAME ; int FileManagerDlgUtils::ShowTimeSettingQueryL(int, class TTime &)
+ ?ShowWarningNoteL@FileManagerDlgUtils@@SAXH@Z @ 45 NONAME ; void FileManagerDlgUtils::ShowWarningNoteL(int)
+ ?ShowWeekdayQueryL@FileManagerDlgUtils@@SAHHAAW4TDay@@@Z @ 46 NONAME ; int FileManagerDlgUtils::ShowWeekdayQueryL(int, enum TDay &)
+ ?UpdateIconsL@CFileManagerIconArray@@QAEXXZ @ 47 NONAME ; void CFileManagerIconArray::UpdateIconsL(void)
+ ?UpdateProgressDialog@CFileManagerGlobalDlg@@QAEXHH@Z @ 48 NONAME ; void CFileManagerGlobalDlg::UpdateProgressDialog(int, int)
+ ?LoadIconL@CFileManagerIconArray@@SAPAVCGulIcon@@ABVTDesC16@@HHHHH@Z @ 49 NONAME ; class CGulIcon * CFileManagerIconArray::LoadIconL(class TDesC16 const &, int, int, int, int, int)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/BWINS/GFLMU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+EXPORTS
+ ?BackstepL@CGflmNavigatorModel@@QAEXXZ @ 1 NONAME ; void CGflmNavigatorModel::BackstepL(void)
+ ?CancelRefresh@CGflmFileListModel@@QAEXXZ @ 2 NONAME ; void CGflmFileListModel::CancelRefresh(void)
+ ?ClearCache@CGflmFileListModel@@QAEXXZ @ 3 NONAME ; void CGflmFileListModel::ClearCache(void)
+ ?ClearDriveInfo@CGflmFileListModel@@QAEXXZ @ 4 NONAME ; void CGflmFileListModel::ClearDriveInfo(void)
+ ?CreateGroupL@CGflmFileListModel@@QAEPAVMGflmItemGroup@@H@Z @ 5 NONAME ; class MGflmItemGroup * CGflmFileListModel::CreateGroupL(int)
+ ?CreateGroupL@CGflmFileListModel@@QAEPAVMGflmItemGroup@@HI@Z @ 6 NONAME ; class MGflmItemGroup * CGflmFileListModel::CreateGroupL(int, unsigned int)
+ ?CurrentDirectory@CGflmNavigatorModel@@QBE?AVTPtrC16@@XZ @ 7 NONAME ; class TPtrC16 CGflmNavigatorModel::CurrentDirectory(void) const
+ ?CurrentDrive@CGflmNavigatorModel@@QBEPAVCGflmDriveItem@@XZ @ 8 NONAME ; class CGflmDriveItem * CGflmNavigatorModel::CurrentDrive(void) const
+ ?Drive@CGflmDriveItem@@QBEHXZ @ 9 NONAME ; int CGflmDriveItem::Drive(void) const
+ ?DriveFromId@CGflmFileListModel@@QBEPAVCGflmDriveItem@@H@Z @ 10 NONAME ; class CGflmDriveItem * CGflmFileListModel::DriveFromId(int) const
+ ?DriveFromPath@CGflmFileListModel@@QBEPAVCGflmDriveItem@@ABVTDesC16@@@Z @ 11 NONAME ; class CGflmDriveItem * CGflmFileListModel::DriveFromPath(class TDesC16 const &) const
+ ?DriveStatus@CGflmDriveItem@@QBEIXZ @ 12 NONAME ; unsigned int CGflmDriveItem::DriveStatus(void) const
+ ?EnableSearchMode@CGflmFileListModel@@QAEXH@Z @ 13 NONAME ; void CGflmFileListModel::EnableSearchMode(int)
+ ?EnsureFinalBackslash@GflmUtils@@SAXAAVTDes16@@@Z @ 14 NONAME ; void GflmUtils::EnsureFinalBackslash(class TDes16 &)
+ ?Entry@CGflmFileSystemItem@@QBEABVTEntry@@XZ @ 15 NONAME ; class TEntry const & CGflmFileSystemItem::Entry(void) const
+ ?FindGroupById@CGflmFileListModel@@QAEPAVMGflmItemGroup@@H@Z @ 16 NONAME ; class MGflmItemGroup * CGflmFileListModel::FindGroupById(int)
+ ?FullPathL@CGflmFileSystemItem@@QBEPAVHBufC16@@XZ @ 17 NONAME ; class HBufC16 * CGflmFileSystemItem::FullPathL(void) const
+ ?FullPathL@GflmUtils@@SAPAVHBufC16@@ABVTDesC16@@ABVTEntry@@@Z @ 18 NONAME ; class HBufC16 * GflmUtils::FullPathL(class TDesC16 const &, class TEntry const &)
+ ?FullPathLC@CGflmFileSystemItem@@QBEPAVHBufC16@@XZ @ 19 NONAME ; class HBufC16 * CGflmFileSystemItem::FullPathLC(void) const
+ ?FullPathLC@GflmUtils@@SAPAVHBufC16@@ABVTDesC16@@ABVTEntry@@@Z @ 20 NONAME ; class HBufC16 * GflmUtils::FullPathLC(class TDesC16 const &, class TEntry const &)
+ ?GetFullPath@CGflmFileSystemItem@@QBEXAAVTDes16@@@Z @ 21 NONAME ; void CGflmFileSystemItem::GetFullPath(class TDes16 &) const
+ ?GetFullPath@GflmUtils@@SAXABVTDesC16@@ABVTEntry@@AAVTDes16@@@Z @ 22 NONAME ; void GflmUtils::GetFullPath(class TDesC16 const &, class TEntry const &, class TDes16 &)
+ ?GetIconId@CGflmGroupItem@@QAEHAAH@Z @ 23 NONAME ; int CGflmGroupItem::GetIconId(int &)
+ ?GoToDirectoryL@CGflmNavigatorModel@@QAEXABVTDesC16@@0@Z @ 24 NONAME ; void CGflmNavigatorModel::GoToDirectoryL(class TDesC16 const &, class TDesC16 const &)
+ ?GoToDirectoryL@CGflmNavigatorModel@@QAEXABVTDesC16@@H@Z @ 25 NONAME ; void CGflmNavigatorModel::GoToDirectoryL(class TDesC16 const &, int)
+ ?HasFinalBackslash@GflmUtils@@SAHABVTDesC16@@@Z @ 26 NONAME ; int GflmUtils::HasFinalBackslash(class TDesC16 const &)
+ ?Id@CGflmGlobalActionItem@@QBEHXZ @ 27 NONAME ; int CGflmGlobalActionItem::Id(void) const
+ ?IsCorrupt@CGflmFileListModel@@QBEHXZ @ 28 NONAME ; int CGflmFileListModel::IsCorrupt(void) const
+ ?Item@CGflmFileListModel@@QBEPAVCGflmGroupItem@@H@Z @ 29 NONAME ; class CGflmGroupItem * CGflmFileListModel::Item(int) const
+ ?LocalizedName@CGflmFileListModel@@QBE?AVTPtrC16@@ABVTDesC16@@@Z @ 30 NONAME ; class TPtrC16 CGflmFileListModel::LocalizedName(class TDesC16 const &) const
+ ?LocalizedNameOfCurrentDirectory@CGflmNavigatorModel@@QBE?AVTPtrC16@@XZ @ 31 NONAME ; class TPtrC16 CGflmNavigatorModel::LocalizedNameOfCurrentDirectory(void) const
+ ?NavigationLevel@CGflmNavigatorModel@@QBEHXZ @ 32 NONAME ; int CGflmNavigatorModel::NavigationLevel(void) const
+ ?NewL@CGflmFileListModel@@SAPAV1@AAVRFs@@@Z @ 33 NONAME ; class CGflmFileListModel * CGflmFileListModel::NewL(class RFs &)
+ ?NewL@CGflmNavigatorModel@@SAPAV1@AAVRFs@@@Z @ 34 NONAME ; class CGflmNavigatorModel * CGflmNavigatorModel::NewL(class RFs &)
+ ?RefreshListL@CGflmFileListModel@@QAEXAAVTRequestStatus@@W4TGflmRefreshMode@@@Z @ 35 NONAME ; void CGflmFileListModel::RefreshListL(class TRequestStatus &, enum TGflmRefreshMode)
+ ?ResetModel@CGflmFileListModel@@QAEXXZ @ 36 NONAME ; void CGflmFileListModel::ResetModel(void)
+ ?ResolveMimeTypeL@CGflmFileListModel@@QAE?AVTPtrC16@@ABVTDesC16@@@Z @ 37 NONAME ; class TPtrC16 CGflmFileListModel::ResolveMimeTypeL(class TDesC16 const &)
+ ?RootDirectory@CGflmDriveItem@@QBE?AVTPtrC16@@XZ @ 38 NONAME ; class TPtrC16 CGflmDriveItem::RootDirectory(void) const
+ ?SetCustomFilter@CGflmFileListModel@@QAEXPAVMGflmItemFilter@@@Z @ 39 NONAME ; void CGflmFileListModel::SetCustomFilter(class MGflmItemFilter *)
+ ?SetIconId@CGflmGroupItem@@QAEXH@Z @ 40 NONAME ; void CGflmGroupItem::SetIconId(int)
+ ?SetLocalizedNameL@CGflmDriveItem@@QAEXABVTDesC16@@@Z @ 41 NONAME ; void CGflmDriveItem::SetLocalizedNameL(class TDesC16 const &)
+ ?SetLocalizedNameL@CGflmFileSystemItem@@QAEXABVTDesC16@@@Z @ 42 NONAME ; void CGflmFileSystemItem::SetLocalizedNameL(class TDesC16 const &)
+ ?SetRootDirectoryL@CGflmDriveItem@@QAEXABVTDesC16@@@Z @ 43 NONAME ; void CGflmDriveItem::SetRootDirectoryL(class TDesC16 const &)
+ ?SetSearchFolderL@CGflmFileListModel@@QAEXABVTDesC16@@@Z @ 44 NONAME ; void CGflmFileListModel::SetSearchFolderL(class TDesC16 const &)
+ ?SetSearchStringL@CGflmFileListModel@@QAEXABVTDesC16@@@Z @ 45 NONAME ; void CGflmFileListModel::SetSearchStringL(class TDesC16 const &)
+ ?SetSortMethod@CGflmFileListModel@@QAEXW4TGflmSortMethod@@@Z @ 46 NONAME ; void CGflmFileListModel::SetSortMethod(enum TGflmSortMethod)
+ ?SortMethod@CGflmFileListModel@@QBE?AW4TGflmSortMethod@@XZ @ 47 NONAME ; enum TGflmSortMethod CGflmFileListModel::SortMethod(void) const
+ ?StripFinalBackslash@GflmUtils@@SA?AVTPtrC16@@ABVTDesC16@@@Z @ 48 NONAME ; class TPtrC16 GflmUtils::StripFinalBackslash(class TDesC16 const &)
+ ?VolumeInfo@CGflmDriveItem@@QBEABVTVolumeInfo@@XZ @ 49 NONAME ; class TVolumeInfo const & CGflmDriveItem::VolumeInfo(void) const
+ ?VolumeStatus@CGflmDriveItem@@QBEHXZ @ 50 NONAME ; int CGflmDriveItem::VolumeStatus(void) const
+ ?FlushCache@CGflmFileListModel@@QAEXXZ @ 51 NONAME ; void CGflmFileListModel::FlushCache(void)
+ ?SearchMode@CGflmFileListModel@@QAEHXZ @ 52 NONAME ; int CGflmFileListModel::SearchMode(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/BWINS/filemanagerbkupengineU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,36 @@
+EXPORTS
+ ??1CMMCScBkupDriveAndOperationTypeManager@@UAE@XZ @ 1 NONAME ; CMMCScBkupDriveAndOperationTypeManager::~CMMCScBkupDriveAndOperationTypeManager(void)
+ ??1CMMCScBkupEngine@@UAE@XZ @ 2 NONAME ; CMMCScBkupEngine::~CMMCScBkupEngine(void)
+ ??1CMMCScBkupOpParamsBackupFull@@UAE@XZ @ 3 NONAME ; CMMCScBkupOpParamsBackupFull::~CMMCScBkupOpParamsBackupFull(void)
+ ??1CMMCScBkupOpParamsBase@@UAE@XZ @ 4 NONAME ; CMMCScBkupOpParamsBase::~CMMCScBkupOpParamsBase(void)
+ ??1CMMCScBkupOpParamsRestoreFull@@UAE@XZ @ 5 NONAME ; CMMCScBkupOpParamsRestoreFull::~CMMCScBkupOpParamsRestoreFull(void)
+ ?ActiveTransferType@CMMCScBkupOpParamsBackupFull@@UBE?AW4TTransferDataType@conn@@XZ @ 6 NONAME ; enum conn::TTransferDataType CMMCScBkupOpParamsBackupFull::ActiveTransferType(void) const
+ ?ActiveTransferType@CMMCScBkupOpParamsRestoreFull@@UBE?AW4TTransferDataType@conn@@XZ @ 7 NONAME ; enum conn::TTransferDataType CMMCScBkupOpParamsRestoreFull::ActiveTransferType(void) const
+ ?AssociatedOpType@CMMCScBkupOpParamsBackupFull@@UBE?AW4TMMCScBkupOperationType@@XZ @ 8 NONAME ; enum TMMCScBkupOperationType CMMCScBkupOpParamsBackupFull::AssociatedOpType(void) const
+ ?AssociatedOpType@CMMCScBkupOpParamsRestoreFull@@UBE?AW4TMMCScBkupOperationType@@XZ @ 9 NONAME ; enum TMMCScBkupOperationType CMMCScBkupOpParamsRestoreFull::AssociatedOpType(void) const
+ ?CancelOperation@CMMCScBkupEngine@@QAEXXZ @ 10 NONAME ; void CMMCScBkupEngine::CancelOperation(void)
+ ?Category@CMMCScBkupArchiveInfo@@QBE?AV?$TBitFlagsT@K@@XZ @ 11 NONAME ; class TBitFlagsT<unsigned long> CMMCScBkupArchiveInfo::Category(void) const
+ ?Close@RMMCScBkupArchiveBuf@@QAEXXZ @ 12 NONAME ; void RMMCScBkupArchiveBuf::Close(void)
+ ?DateTime@CMMCScBkupArchiveInfo@@QBEABVTTime@@XZ @ 13 NONAME ; class TTime const & CMMCScBkupArchiveInfo::DateTime(void) const
+ ?Drive@CMMCScBkupArchiveInfo@@QBE?AW4TDriveNumber@@XZ @ 14 NONAME ; enum TDriveNumber CMMCScBkupArchiveInfo::Drive(void) const
+ ?DriveAndOperations@CMMCScBkupOpParamsBase@@QBEABVCMMCScBkupDriveAndOperationTypeManager@@XZ @ 15 NONAME ; class CMMCScBkupDriveAndOperationTypeManager const & CMMCScBkupOpParamsBase::DriveAndOperations(void) const
+ ?FileName@CMMCScBkupArchiveInfo@@QBEABVTDesC16@@XZ @ 16 NONAME ; class TDesC16 const & CMMCScBkupArchiveInfo::FileName(void) const
+ ?IncrementType@CMMCScBkupOpParamsBackupFull@@UBE?AW4TBackupIncType@conn@@XZ @ 17 NONAME ; enum conn::TBackupIncType CMMCScBkupOpParamsBackupFull::IncrementType(void) const
+ ?IncrementType@CMMCScBkupOpParamsRestoreFull@@UBE?AW4TBackupIncType@conn@@XZ @ 18 NONAME ; enum conn::TBackupIncType CMMCScBkupOpParamsRestoreFull::IncrementType(void) const
+ ?ListArchivesL@CMMCScBkupEngine@@QBEXAAV?$RPointerArray@VCMMCScBkupArchiveInfo@@@@PAVCMMCScBkupOpParamsBase@@KH@Z @ 19 NONAME ; void CMMCScBkupEngine::ListArchivesL(class RPointerArray<class CMMCScBkupArchiveInfo> &, class CMMCScBkupOpParamsBase *, unsigned long, int) const
+ ?NewL@CMMCScBkupDriveAndOperationTypeManager@@SAPAV1@AAVTResourceReader@@@Z @ 20 NONAME ; class CMMCScBkupDriveAndOperationTypeManager * CMMCScBkupDriveAndOperationTypeManager::NewL(class TResourceReader &)
+ ?NewL@CMMCScBkupEngine@@SAPAV1@AAVRFs@@@Z @ 21 NONAME ; class CMMCScBkupEngine * CMMCScBkupEngine::NewL(class RFs &)
+ ?NewL@CMMCScBkupOpParamsBackupFull@@SAPAV1@AAVTResourceReader@@0W4TDriveNumber@@V?$TBitFlagsT@K@@@Z @ 22 NONAME ; class CMMCScBkupOpParamsBackupFull * CMMCScBkupOpParamsBackupFull::NewL(class TResourceReader &, class TResourceReader &, enum TDriveNumber, class TBitFlagsT<unsigned long>)
+ ?NewL@CMMCScBkupOpParamsRestoreFull@@SAPAV1@AAVTResourceReader@@V?$TBitFlagsT@K@@@Z @ 23 NONAME ; class CMMCScBkupOpParamsRestoreFull * CMMCScBkupOpParamsRestoreFull::NewL(class TResourceReader &, class TBitFlagsT<unsigned long>)
+ ?PackageTransferType@CMMCScBkupOpParamsBackupFull@@UBE?AW4TPackageDataType@conn@@XZ @ 24 NONAME ; enum conn::TPackageDataType CMMCScBkupOpParamsBackupFull::PackageTransferType(void) const
+ ?PackageTransferType@CMMCScBkupOpParamsRestoreFull@@UBE?AW4TPackageDataType@conn@@XZ @ 25 NONAME ; enum conn::TPackageDataType CMMCScBkupOpParamsRestoreFull::PackageTransferType(void) const
+ ?PartType@CMMCScBkupOpParamsBackupFull@@UBE?AW4TBURPartType@conn@@XZ @ 26 NONAME ; enum conn::TBURPartType CMMCScBkupOpParamsBackupFull::PartType(void) const
+ ?PartType@CMMCScBkupOpParamsRestoreFull@@UBE?AW4TBURPartType@conn@@XZ @ 27 NONAME ; enum conn::TBURPartType CMMCScBkupOpParamsRestoreFull::PartType(void) const
+ ?PassiveTransferType@CMMCScBkupOpParamsBackupFull@@UBE?AW4TTransferDataType@conn@@XZ @ 28 NONAME ; enum conn::TTransferDataType CMMCScBkupOpParamsBackupFull::PassiveTransferType(void) const
+ ?PassiveTransferType@CMMCScBkupOpParamsRestoreFull@@UBE?AW4TTransferDataType@conn@@XZ @ 29 NONAME ; enum conn::TTransferDataType CMMCScBkupOpParamsRestoreFull::PassiveTransferType(void) const
+ ?RebootRequired@CMMCScBkupEngine@@QBEHXZ @ 30 NONAME ; int CMMCScBkupEngine::RebootRequired(void) const
+ ?SetArchiveInfosL@CMMCScBkupOpParamsBase@@QAEXAAV?$RPointerArray@VCMMCScBkupArchiveInfo@@@@@Z @ 31 NONAME ; void CMMCScBkupOpParamsBase::SetArchiveInfosL(class RPointerArray<class CMMCScBkupArchiveInfo> &)
+ ?StartOperationL@CMMCScBkupEngine@@QAEXW4TMMCScBkupOperationType@@AAVMMMCScBkupEngineObserver@@PAVCMMCScBkupOpParamsBase@@@Z @ 32 NONAME ; void CMMCScBkupEngine::StartOperationL(enum TMMCScBkupOperationType, class MMMCScBkupEngineObserver &, class CMMCScBkupOpParamsBase *)
+ ?TotalOperationSizeL@CMMCScBkupEngine@@QBE_JXZ @ 33 NONAME ; long long CMMCScBkupEngine::TotalOperationSizeL(void) const
+ ?ValidArchiveForRestore@CMMCScBkupEngine@@QAEHABVTDesC16@@@Z @ 34 NONAME ; int CMMCScBkupEngine::ValidArchiveForRestore(class TDesC16 const &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/EABI/FileManagerEngineU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,148 @@
+EXPORTS
+ _ZN17CFileManagerUtils13IsRemoteDriveER3RFsRK7TDesC16 @ 1 NONAME
+ _ZN17CFileManagerUtils17HasFinalBackslashERK7TDesC16 @ 2 NONAME
+ _ZN17CFileManagerUtils19StripFinalBackslashERK7TDesC16 @ 3 NONAME
+ _ZN17CFileManagerUtils20EnsureFinalBackslashER6TDes16 @ 4 NONAME
+ _ZN17CFileManagerUtils30IsFromInternalToRemovableDriveER3RFsRK7TDesC16S4_ @ 5 NONAME
+ _ZN18CFileManagerEngine10NewFolderLERK7TDesC16 @ 6 NONAME
+ _ZN18CFileManagerEngine10SetMemoryLE18TFileManagerMemory @ 7 NONAME
+ _ZN18CFileManagerEngine11FolderLevelEv @ 8 NONAME
+ _ZN18CFileManagerEngine11RefreshSortEv @ 9 NONAME
+ _ZN18CFileManagerEngine11RenameDriveEiRK7TDesC16 @ 10 NONAME
+ _ZN18CFileManagerEngine11SetObserverEP27MFileManagerProcessObserver @ 11 NONAME
+ _ZN18CFileManagerEngine11UnlockDriveEiRK5TBuf8ILi16EE @ 12 NONAME
+ _ZN18CFileManagerEngine12CurrentDriveEv @ 13 NONAME
+ _ZN18CFileManagerEngine12CurrentIndexEv @ 14 NONAME
+ _ZN18CFileManagerEngine12GetItemInfoLEi @ 15 NONAME
+ _ZN18CFileManagerEngine12IsNameFoundLERK7TDesC16 @ 16 NONAME
+ _ZN18CFileManagerEngine13CancelProcessEN27MFileManagerProcessObserver19TFileManagerProcessE @ 17 NONAME
+ _ZN18CFileManagerEngine13CancelRefreshEv @ 18 NONAME
+ _ZN18CFileManagerEngine13GetDriveInfoLER21TFileManagerDriveInfo @ 19 NONAME
+ _ZN18CFileManagerEngine13GetFileSizesLERK13CArrayFixFlatIiE @ 20 NONAME
+ _ZN18CFileManagerEngine13GetItemInfoLCEi @ 21 NONAME
+ _ZN18CFileManagerEngine13SetSortMethodENS_11TSortMethodE @ 22 NONAME
+ _ZN18CFileManagerEngine14FilesInFolderLEv @ 23 NONAME
+ _ZN18CFileManagerEngine15BackupSettingsLEv @ 24 NONAME
+ _ZN18CFileManagerEngine15FileSystemEventEi @ 25 NONAME
+ _ZN18CFileManagerEngine15SetCurrentIndexEi @ 26 NONAME
+ _ZN18CFileManagerEngine16CurrentDriveNameEv @ 27 NONAME
+ _ZN18CFileManagerEngine16RefreshDirectoryEv @ 28 NONAME
+ _ZN18CFileManagerEngine16RestoreSettingsLEv @ 29 NONAME
+ _ZN18CFileManagerEngine16SetDrivePasswordEiRK5TBuf8ILi16EES3_ @ 30 NONAME
+ _ZN18CFileManagerEngine16SetSearchFolderLERK7TDesC16 @ 31 NONAME
+ _ZN18CFileManagerEngine16SetSearchStringLERK7TDesC16 @ 32 NONAME
+ _ZN18CFileManagerEngine17DeleteRemoteDriveEi @ 33 NONAME
+ _ZN18CFileManagerEngine18StartEjectProcessLEi @ 34 NONAME
+ _ZN18CFileManagerEngine19CreateActiveDeleteLER13CArrayFixFlatIiE @ 35 NONAME
+ _ZN18CFileManagerEngine19RemoveDrivePasswordEiRK5TBuf8ILi16EE @ 36 NONAME
+ _ZN18CFileManagerEngine19StartBackupProcessLEN27MFileManagerProcessObserver19TFileManagerProcessE @ 37 NONAME
+ _ZN18CFileManagerEngine19StartFormatProcessLEi @ 38 NONAME
+ _ZN18CFileManagerEngine22ForcedRefreshDirectoryEv @ 39 NONAME
+ _ZN18CFileManagerEngine24SetRemoteDriveConnectionEii @ 40 NONAME
+ _ZN18CFileManagerEngine26SetDirectoryWithBackstepsLERK7TDesC16 @ 41 NONAME
+ _ZN18CFileManagerEngine4NewLER3RFs @ 42 NONAME
+ _ZN18CFileManagerEngine5OpenLEi @ 43 NONAME
+ _ZN18CFileManagerEngine7RenameLEiRK7TDesC16 @ 44 NONAME
+ _ZN18CFileManagerEngine8SetStateENS_6TStateE @ 45 NONAME
+ _ZN18CFileManagerEngine9BackstepLEv @ 46 NONAME
+ _ZN18CFileManagerEngine9DriveNameEi @ 47 NONAME
+ _ZN18CFileManagerEngineD0Ev @ 48 NONAME
+ _ZN18CFileManagerEngineD1Ev @ 49 NONAME
+ _ZN18CFileManagerEngineD2Ev @ 50 NONAME
+ _ZN21TFileManagerDriveInfo5ResetEv @ 51 NONAME
+ _ZN21TFileManagerDriveInfoC1Ev @ 52 NONAME
+ _ZN21TFileManagerDriveInfoC2Ev @ 53 NONAME
+ _ZN22CFileManagerIRReceiver12ReceiveFileLEv @ 54 NONAME
+ _ZN22CFileManagerIRReceiver13StopReceivingEv @ 55 NONAME
+ _ZN22CFileManagerIRReceiver4NewLER27MFileManagerProcessObserverRK7TDesC16R18CFileManagerEngine @ 56 NONAME
+ _ZN22CFileManagerIRReceiverD0Ev @ 57 NONAME
+ _ZN22CFileManagerIRReceiverD1Ev @ 58 NONAME
+ _ZN22CFileManagerIRReceiverD2Ev @ 59 NONAME
+ _ZN24CFileManagerActiveDelete15DeletedDrmItemsERi @ 60 NONAME
+ _ZN24CFileManagerActiveDelete8GetErrorER6TDes16 @ 61 NONAME
+ _ZN24CFileManagerActiveDeleteD0Ev @ 62 NONAME
+ _ZN24CFileManagerActiveDeleteD1Ev @ 63 NONAME
+ _ZN24CFileManagerActiveDeleteD2Ev @ 64 NONAME
+ _ZN25CFileManagerActiveExecute15CancelExecutionEv @ 65 NONAME
+ _ZN25CFileManagerActiveExecute4NewLER18CFileManagerEngineN27MFileManagerProcessObserver19TFileManagerProcessERS2_R13CArrayFixFlatIiERK7TDesC16 @ 66 NONAME
+ _ZN25CFileManagerActiveExecute8ExecuteLENS_18TFileManagerSwitchE @ 67 NONAME
+ _ZN25CFileManagerActiveExecuteD0Ev @ 68 NONAME
+ _ZN25CFileManagerActiveExecuteD1Ev @ 69 NONAME
+ _ZN25CFileManagerActiveExecuteD2Ev @ 70 NONAME
+ _ZN26CFileManagerBackupSettings10SetContentEm @ 71 NONAME
+ _ZN26CFileManagerBackupSettings13SetSchedulingEi @ 72 NONAME
+ _ZN26CFileManagerBackupSettings14SetTargetDriveEi @ 73 NONAME
+ _ZN26CFileManagerBackupSettings5SaveLEv @ 74 NONAME
+ _ZN26CFileManagerBackupSettings6SetDayEi @ 75 NONAME
+ _ZN26CFileManagerBackupSettings7SetTimeERK5TTime @ 76 NONAME
+ _ZN26CFileManagerBackupSettings8RefreshLEv @ 77 NONAME
+ _ZN26CFileManagerBackupSettings9SettingAtEi @ 78 NONAME
+ _ZN26CFileManagerItemProperties10OpenFilesLEv @ 79 NONAME
+ _ZN26CFileManagerItemProperties15FilesContainedLEv @ 80 NONAME
+ _ZN26CFileManagerItemProperties17FoldersContainedLEv @ 81 NONAME
+ _ZN26CFileManagerItemProperties25ContainsAnyFilesOrFoldersEv @ 82 NONAME
+ _ZN26CFileManagerItemProperties5SizeLEv @ 83 NONAME
+ _ZN26CFileManagerItemProperties5TypeLEv @ 84 NONAME
+ _ZN26CFileManagerItemProperties9MimeTypeLEv @ 85 NONAME
+ _ZN27CFileManagerRestoreSettings12SetSelectionERKy @ 86 NONAME
+ _ZN27CFileManagerRestoreSettings8RefreshLEv @ 87 NONAME
+ _ZNK18CFileManagerEngine10DriveStateERmRK7TDesC16 @ 88 NONAME
+ _ZNK18CFileManagerEngine10DriveStateERmi @ 89 NONAME
+ _ZNK18CFileManagerEngine10SortMethodEv @ 90 NONAME
+ _ZNK18CFileManagerEngine11GetMMCInfoLEv @ 91 NONAME
+ _ZNK18CFileManagerEngine11IsValidNameERK7TDesC16S2_i @ 92 NONAME
+ _ZNK18CFileManagerEngine12EnoughSpaceLERK7TDesC16xN27MFileManagerProcessObserver19TFileManagerProcessE @ 93 NONAME
+ _ZNK18CFileManagerEngine12IllegalCharsERK7TDesC16 @ 94 NONAME
+ _ZNK18CFileManagerEngine12SearchStringEv @ 95 NONAME
+ _ZNK18CFileManagerEngine13GetDriveInfoLEiR21TFileManagerDriveInfo @ 96 NONAME
+ _ZNK18CFileManagerEngine13LocalizedNameERK7TDesC16 @ 97 NONAME
+ _ZNK18CFileManagerEngine14FeatureManagerEv @ 98 NONAME
+ _ZNK18CFileManagerEngine14IsSystemFolderERK7TDesC16 @ 99 NONAME
+ _ZNK18CFileManagerEngine15NavigationLevelEv @ 100 NONAME
+ _ZNK18CFileManagerEngine16CurrentDirectoryEv @ 101 NONAME
+ _ZNK18CFileManagerEngine16IndexToFullPathLEi @ 102 NONAME
+ _ZNK18CFileManagerEngine17IndexToFullPathLCEi @ 103 NONAME
+ _ZNK18CFileManagerEngine18DriveRootDirectoryEi @ 104 NONAME
+ _ZNK18CFileManagerEngine19IsDistributableFileERK7TDesC16Ri @ 105 NONAME
+ _ZNK18CFileManagerEngine20GetRestoreInfoArrayLER6RArrayIN27CFileManagerRestoreSettings5TInfoEEi @ 106 NONAME
+ _ZNK18CFileManagerEngine23GetFormattedDriveNameLCEiii @ 107 NONAME
+ _ZNK18CFileManagerEngine24AnyEjectableDrivePresentEv @ 108 NONAME
+ _ZNK18CFileManagerEngine31LocalizedNameOfCurrentDirectoryEv @ 109 NONAME
+ _ZNK18CFileManagerEngine5StateEv @ 110 NONAME
+ _ZNK18CFileManagerEngine6MemoryEv @ 111 NONAME
+ _ZNK18CFileManagerEngine7IconIdLEi @ 112 NONAME
+ _ZNK18CFileManagerEngine8FileListEv @ 113 NONAME
+ _ZNK18CFileManagerEngine8IsFolderEi @ 114 NONAME
+ _ZNK18CFileManagerEngine9FileTypeLERK7TDesC16 @ 115 NONAME
+ _ZNK18CFileManagerEngine9FileTypeLEi @ 116 NONAME
+ _ZNK26CFileManagerBackupSettings10SchedulingEv @ 117 NONAME
+ _ZNK26CFileManagerBackupSettings11TargetDriveEv @ 118 NONAME
+ _ZNK26CFileManagerBackupSettings24AllowedDriveAttMatchMaskEv @ 119 NONAME
+ _ZNK26CFileManagerBackupSettings3DayEv @ 120 NONAME
+ _ZNK26CFileManagerBackupSettings4TimeEv @ 121 NONAME
+ _ZNK26CFileManagerBackupSettings7ContentEv @ 122 NONAME
+ _ZNK26CFileManagerFeatureManager15IsHelpSupportedEv @ 123 NONAME
+ _ZNK26CFileManagerFeatureManager15IsIrdaSupportedEv @ 124 NONAME
+ _ZNK26CFileManagerFeatureManager16IsWesternVariantEv @ 125 NONAME
+ _ZNK26CFileManagerFeatureManager18IsDrmFullSupportedEv @ 126 NONAME
+ _ZNK26CFileManagerFeatureManager18IsFeatureSupportedEi @ 127 NONAME
+ _ZNK26CFileManagerFeatureManager20IsMmcPassWdSupportedEv @ 128 NONAME
+ _ZNK26CFileManagerFeatureManager21IsMmcSwEjectSupportedEv @ 129 NONAME
+ _ZNK26CFileManagerFeatureManager26IsRemoteStorageFwSupportedEv @ 130 NONAME
+ _ZNK26CFileManagerItemProperties10NameAndExtEv @ 131 NONAME
+ _ZNK26CFileManagerItemProperties12ModifiedDateEv @ 132 NONAME
+ _ZNK26CFileManagerItemProperties13IsRemoteDriveEv @ 133 NONAME
+ _ZNK26CFileManagerItemProperties13LocalizedNameEv @ 134 NONAME
+ _ZNK26CFileManagerItemProperties17ModifiedLocalDateER5TTime @ 135 NONAME
+ _ZNK26CFileManagerItemProperties3ExtEv @ 136 NONAME
+ _ZNK26CFileManagerItemProperties4NameEv @ 137 NONAME
+ _ZNK26CFileManagerItemProperties7DriveIdEv @ 138 NONAME
+ _ZNK26CFileManagerItemProperties7IsDriveEv @ 139 NONAME
+ _ZNK26CFileManagerItemProperties8FullPathEv @ 140 NONAME
+ _ZNK26CFileManagerItemProperties9DriveNameEv @ 141 NONAME
+ _ZNK26CFileManagerFeatureManager10IsEmbeddedEv @ 142 NONAME
+ _ZN25CFileManagerActiveExecute8ToFolderEv @ 143 NONAME
+ _ZN18CFileManagerEngine18SetCurrentItemNameERK7TDesC16 @ 144 NONAME
+ _ZN18CFileManagerEngine12SetAppExitObEP25MAknServerAppExitObserver @ 145 NONAME
+ _ZN18CFileManagerEngine14DeleteBackupsLEv @ 146 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/EABI/FileManagerViewU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,63 @@
+EXPORTS
+ _ZN19FileManagerDlgUtils13ShowInfoNoteLERK7TDesC16 @ 1 NONAME
+ _ZN19FileManagerDlgUtils13ShowInfoNoteLEiRK7TDesC16 @ 2 NONAME
+ _ZN19FileManagerDlgUtils13ShowInfoNoteLEii @ 3 NONAME
+ _ZN19FileManagerDlgUtils14ShowErrorNoteLERK7TDesC16 @ 4 NONAME
+ _ZN19FileManagerDlgUtils14ShowErrorNoteLEiRK7TDesC16 @ 5 NONAME
+ _ZN19FileManagerDlgUtils14ShowInfoQueryLERK7TDesC16 @ 6 NONAME
+ _ZN19FileManagerDlgUtils14ShowInfoQueryLEiRK7TDesC16 @ 7 NONAME
+ _ZN19FileManagerDlgUtils14ShowInfoQueryLEii @ 8 NONAME
+ _ZN19FileManagerDlgUtils16ShowConfirmNoteLEi @ 9 NONAME
+ _ZN19FileManagerDlgUtils16ShowWarningNoteLEi @ 10 NONAME
+ _ZN19FileManagerDlgUtils17ShowWeekdayQueryLEiR4TDay @ 11 NONAME
+ _ZN19FileManagerDlgUtils18ShowFileNameQueryLEiRK7TDesC16R6TDes16R18CFileManagerEngine @ 12 NONAME
+ _ZN19FileManagerDlgUtils18ShowItemInfoPopupLER26CFileManagerItemPropertiesRK26CFileManagerFeatureManager @ 13 NONAME
+ _ZN19FileManagerDlgUtils18ShowPasswordQueryLER6TDes16 @ 14 NONAME
+ _ZN19FileManagerDlgUtils20ShowFolderNameQueryLEiR6TDes16R18CFileManagerEnginei @ 15 NONAME
+ _ZN19FileManagerDlgUtils21ShowNOfMSettingQueryLEiiRmi @ 16 NONAME
+ _ZN19FileManagerDlgUtils21ShowOOfMSettingQueryLEiPK12MDesC16ArrayRi @ 17 NONAME
+ _ZN19FileManagerDlgUtils21ShowOOfMSettingQueryLEiiRi @ 18 NONAME
+ _ZN19FileManagerDlgUtils21ShowTimeSettingQueryLEiR5TTime @ 19 NONAME
+ _ZN19FileManagerDlgUtils23ShowConfirmQueryWithOkLENS_6TIconsERK7TDesC16 @ 20 NONAME
+ _ZN19FileManagerDlgUtils23ShowConfirmQueryWithOkLENS_6TIconsEiRK7TDesC16 @ 21 NONAME
+ _ZN19FileManagerDlgUtils23ShowConfirmQueryWithOkLENS_6TIconsEii @ 22 NONAME
+ _ZN19FileManagerDlgUtils24ShowSimplePasswordQueryLERK7TDesC16R6TDes16 @ 23 NONAME
+ _ZN19FileManagerDlgUtils24ShowSimplePasswordQueryLEiR6TDes16 @ 24 NONAME
+ _ZN19FileManagerDlgUtils25ShowMemoryStoreInfoPopupLERK21TFileManagerDriveInfo @ 25 NONAME
+ _ZN19FileManagerDlgUtils26ShowConfirmQueryWithYesNoLERK7TDesC16 @ 26 NONAME
+ _ZN19FileManagerDlgUtils26ShowConfirmQueryWithYesNoLEiRK7TDesC16 @ 27 NONAME
+ _ZN19FileManagerDlgUtils29ShowConfirmQueryWithOkCancelLERK7TDesC16 @ 28 NONAME
+ _ZN19FileManagerDlgUtils29ShowConfirmQueryWithOkCancelLEiRK7TDesC16 @ 29 NONAME
+ _ZN21CFileManagerGlobalDlg11SetObserverEP29MFileManagerGlobalDlgObserver @ 30 NONAME
+ _ZN21CFileManagerGlobalDlg11ShowDialogLENS_5TTypeERK7TDesC16i @ 31 NONAME
+ _ZN21CFileManagerGlobalDlg11ShowDialogLENS_5TTypeEii @ 32 NONAME
+ _ZN21CFileManagerGlobalDlg12CancelDialogEv @ 33 NONAME
+ _ZN21CFileManagerGlobalDlg15ProcessFinishedEv @ 34 NONAME
+ _ZN21CFileManagerGlobalDlg20UpdateProgressDialogEii @ 35 NONAME
+ _ZN21CFileManagerGlobalDlg4NewLEv @ 36 NONAME
+ _ZN21CFileManagerGlobalDlgD0Ev @ 37 NONAME
+ _ZN21CFileManagerGlobalDlgD1Ev @ 38 NONAME
+ _ZN21CFileManagerGlobalDlgD2Ev @ 39 NONAME
+ _ZN21CFileManagerIconArray12UpdateIconsLEv @ 40 NONAME
+ _ZN21CFileManagerIconArray4NewLEv @ 41 NONAME
+ _ZN21CFileManagerIconArray8FindIconEi @ 42 NONAME
+ _ZN21CFileManagerIconArrayD0Ev @ 43 NONAME
+ _ZN21CFileManagerIconArrayD1Ev @ 44 NONAME
+ _ZN21CFileManagerIconArrayD2Ev @ 45 NONAME
+ _ZN32CFileManagerFolderNavigationPane11ChangeRootLEi @ 46 NONAME
+ _ZN32CFileManagerFolderNavigationPane11SetObserverEP30MFileManagerFolderNaviObserver @ 47 NONAME
+ _ZN32CFileManagerFolderNavigationPane14SetFolderDepthEi @ 48 NONAME
+ _ZN32CFileManagerFolderNavigationPane21HandleResourceChangeLEi @ 49 NONAME
+ _ZN32CFileManagerFolderNavigationPane4NewLEiiR15TResourceReader @ 50 NONAME
+ _ZN32CFileManagerFolderNavigationPaneD0Ev @ 51 NONAME
+ _ZN32CFileManagerFolderNavigationPaneD1Ev @ 52 NONAME
+ _ZN32CFileManagerFolderNavigationPaneD2Ev @ 53 NONAME
+ _ZNK32CFileManagerFolderNavigationPane11FolderDepthEv @ 54 NONAME
+ _ZTI21CFileManagerGlobalDlg @ 55 NONAME ; #<TI>#
+ _ZTI21CFileManagerIconArray @ 56 NONAME ; #<TI>#
+ _ZTI32CFileManagerFolderNavigationPane @ 57 NONAME ; #<TI>#
+ _ZTV21CFileManagerGlobalDlg @ 58 NONAME ; #<VT>#
+ _ZTV21CFileManagerIconArray @ 59 NONAME ; #<VT>#
+ _ZTV32CFileManagerFolderNavigationPane @ 60 NONAME ; #<VT>#
+ _ZN21CFileManagerIconArray9LoadIconLERK7TDesC16iiiii @ 61 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/EABI/GFLMU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,68 @@
+EXPORTS
+ _ZN14CGflmDriveItem17SetLocalizedNameLERK7TDesC16 @ 1 NONAME
+ _ZN14CGflmDriveItem17SetRootDirectoryLERK7TDesC16 @ 2 NONAME
+ _ZN14CGflmGroupItem9GetIconIdERi @ 3 NONAME
+ _ZN14CGflmGroupItem9SetIconIdEi @ 4 NONAME
+ _ZN18CGflmFileListModel10ClearCacheEv @ 5 NONAME
+ _ZN18CGflmFileListModel10ResetModelEv @ 6 NONAME
+ _ZN18CGflmFileListModel12CreateGroupLEi @ 7 NONAME
+ _ZN18CGflmFileListModel12CreateGroupLEij @ 8 NONAME
+ _ZN18CGflmFileListModel12RefreshListLER14TRequestStatus16TGflmRefreshMode @ 9 NONAME
+ _ZN18CGflmFileListModel13CancelRefreshEv @ 10 NONAME
+ _ZN18CGflmFileListModel13FindGroupByIdEi @ 11 NONAME
+ _ZN18CGflmFileListModel13SetSortMethodE15TGflmSortMethod @ 12 NONAME
+ _ZN18CGflmFileListModel14ClearDriveInfoEv @ 13 NONAME
+ _ZN18CGflmFileListModel15SetCustomFilterEP15MGflmItemFilter @ 14 NONAME
+ _ZN18CGflmFileListModel16EnableSearchModeEi @ 15 NONAME
+ _ZN18CGflmFileListModel16ResolveMimeTypeLERK7TDesC16 @ 16 NONAME
+ _ZN18CGflmFileListModel16SetSearchFolderLERK7TDesC16 @ 17 NONAME
+ _ZN18CGflmFileListModel16SetSearchStringLERK7TDesC16 @ 18 NONAME
+ _ZN18CGflmFileListModel4NewLER3RFs @ 19 NONAME
+ _ZN19CGflmFileSystemItem17SetLocalizedNameLERK7TDesC16 @ 20 NONAME
+ _ZN19CGflmNavigatorModel14GoToDirectoryLERK7TDesC16S2_ @ 21 NONAME
+ _ZN19CGflmNavigatorModel14GoToDirectoryLERK7TDesC16i @ 22 NONAME
+ _ZN19CGflmNavigatorModel4NewLER3RFs @ 23 NONAME
+ _ZN19CGflmNavigatorModel9BackstepLEv @ 24 NONAME
+ _ZN9GflmUtils10FullPathLCERK7TDesC16RK6TEntry @ 25 NONAME
+ _ZN9GflmUtils11GetFullPathERK7TDesC16RK6TEntryR6TDes16 @ 26 NONAME
+ _ZN9GflmUtils17HasFinalBackslashERK7TDesC16 @ 27 NONAME
+ _ZN9GflmUtils19StripFinalBackslashERK7TDesC16 @ 28 NONAME
+ _ZN9GflmUtils20EnsureFinalBackslashER6TDes16 @ 29 NONAME
+ _ZN9GflmUtils9FullPathLERK7TDesC16RK6TEntry @ 30 NONAME
+ _ZNK14CGflmDriveItem10VolumeInfoEv @ 31 NONAME
+ _ZNK14CGflmDriveItem11DriveStatusEv @ 32 NONAME
+ _ZNK14CGflmDriveItem12VolumeStatusEv @ 33 NONAME
+ _ZNK14CGflmDriveItem13RootDirectoryEv @ 34 NONAME
+ _ZNK14CGflmDriveItem5DriveEv @ 35 NONAME
+ _ZNK18CGflmFileListModel10SortMethodEv @ 36 NONAME
+ _ZNK18CGflmFileListModel11DriveFromIdEi @ 37 NONAME
+ _ZNK18CGflmFileListModel13DriveFromPathERK7TDesC16 @ 38 NONAME
+ _ZNK18CGflmFileListModel13LocalizedNameERK7TDesC16 @ 39 NONAME
+ _ZNK18CGflmFileListModel4ItemEi @ 40 NONAME
+ _ZNK18CGflmFileListModel9IsCorruptEv @ 41 NONAME
+ _ZNK19CGflmFileSystemItem10FullPathLCEv @ 42 NONAME
+ _ZNK19CGflmFileSystemItem11GetFullPathER6TDes16 @ 43 NONAME
+ _ZNK19CGflmFileSystemItem5EntryEv @ 44 NONAME
+ _ZNK19CGflmFileSystemItem9FullPathLEv @ 45 NONAME
+ _ZNK19CGflmNavigatorModel12CurrentDriveEv @ 46 NONAME
+ _ZNK19CGflmNavigatorModel15NavigationLevelEv @ 47 NONAME
+ _ZNK19CGflmNavigatorModel16CurrentDirectoryEv @ 48 NONAME
+ _ZNK19CGflmNavigatorModel31LocalizedNameOfCurrentDirectoryEv @ 49 NONAME
+ _ZNK21CGflmGlobalActionItem2IdEv @ 50 NONAME
+ _ZTI14CGflmDriveItem @ 51 NONAME ; #<TI>#
+ _ZTI14CGflmGroupItem @ 52 NONAME ; #<TI>#
+ _ZTI18CGflmFileListModel @ 53 NONAME ; #<TI>#
+ _ZTI19CGflmFileFinderItem @ 54 NONAME ; #<TI>#
+ _ZTI19CGflmFileSystemItem @ 55 NONAME ; #<TI>#
+ _ZTI19CGflmNavigatorModel @ 56 NONAME ; #<TI>#
+ _ZTI21CGflmGlobalActionItem @ 57 NONAME ; #<TI>#
+ _ZTV14CGflmDriveItem @ 58 NONAME ; #<VT>#
+ _ZTV14CGflmGroupItem @ 59 NONAME ; #<VT>#
+ _ZTV18CGflmFileListModel @ 60 NONAME ; #<VT>#
+ _ZTV19CGflmFileFinderItem @ 61 NONAME ; #<VT>#
+ _ZTV19CGflmFileSystemItem @ 62 NONAME ; #<VT>#
+ _ZTV19CGflmNavigatorModel @ 63 NONAME ; #<VT>#
+ _ZTV21CGflmGlobalActionItem @ 64 NONAME ; #<VT>#
+ _ZN18CGflmFileListModel10FlushCacheEv @ 65 NONAME
+ _ZN18CGflmFileListModel10SearchModeEv @ 66 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/EABI/filemanagerbkupengineU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,52 @@
+EXPORTS
+ _ZN16CMMCScBkupEngine15CancelOperationEv @ 1 NONAME
+ _ZN16CMMCScBkupEngine15StartOperationLE23TMMCScBkupOperationTypeR24MMMCScBkupEngineObserverP22CMMCScBkupOpParamsBase @ 2 NONAME
+ _ZN16CMMCScBkupEngine22ValidArchiveForRestoreERK7TDesC16 @ 3 NONAME
+ _ZN16CMMCScBkupEngine4NewLER3RFs @ 4 NONAME
+ _ZN16CMMCScBkupEngineD0Ev @ 5 NONAME
+ _ZN16CMMCScBkupEngineD1Ev @ 6 NONAME
+ _ZN16CMMCScBkupEngineD2Ev @ 7 NONAME
+ _ZN20RMMCScBkupArchiveBuf5CloseEv @ 8 NONAME
+ _ZN22CMMCScBkupOpParamsBase16SetArchiveInfosLER13RPointerArrayI21CMMCScBkupArchiveInfoE @ 9 NONAME
+ _ZN22CMMCScBkupOpParamsBaseD0Ev @ 10 NONAME
+ _ZN22CMMCScBkupOpParamsBaseD1Ev @ 11 NONAME
+ _ZN22CMMCScBkupOpParamsBaseD2Ev @ 12 NONAME
+ _ZN28CMMCScBkupOpParamsBackupFull4NewLER15TResourceReaderS1_12TDriveNumber10TBitFlagsTImE @ 13 NONAME
+ _ZN28CMMCScBkupOpParamsBackupFullD0Ev @ 14 NONAME
+ _ZN28CMMCScBkupOpParamsBackupFullD1Ev @ 15 NONAME
+ _ZN28CMMCScBkupOpParamsBackupFullD2Ev @ 16 NONAME
+ _ZN29CMMCScBkupOpParamsRestoreFull4NewLER15TResourceReader10TBitFlagsTImE @ 17 NONAME
+ _ZN29CMMCScBkupOpParamsRestoreFullD0Ev @ 18 NONAME
+ _ZN29CMMCScBkupOpParamsRestoreFullD1Ev @ 19 NONAME
+ _ZN29CMMCScBkupOpParamsRestoreFullD2Ev @ 20 NONAME
+ _ZN38CMMCScBkupDriveAndOperationTypeManager4NewLER15TResourceReader @ 21 NONAME
+ _ZN38CMMCScBkupDriveAndOperationTypeManagerD0Ev @ 22 NONAME
+ _ZN38CMMCScBkupDriveAndOperationTypeManagerD1Ev @ 23 NONAME
+ _ZN38CMMCScBkupDriveAndOperationTypeManagerD2Ev @ 24 NONAME
+ _ZNK16CMMCScBkupEngine13ListArchivesLER13RPointerArrayI21CMMCScBkupArchiveInfoEP22CMMCScBkupOpParamsBasemi @ 25 NONAME
+ _ZNK16CMMCScBkupEngine14RebootRequiredEv @ 26 NONAME
+ _ZNK16CMMCScBkupEngine19TotalOperationSizeLEv @ 27 NONAME
+ _ZNK21CMMCScBkupArchiveInfo5DriveEv @ 28 NONAME
+ _ZNK21CMMCScBkupArchiveInfo8CategoryEv @ 29 NONAME
+ _ZNK21CMMCScBkupArchiveInfo8DateTimeEv @ 30 NONAME
+ _ZNK21CMMCScBkupArchiveInfo8FileNameEv @ 31 NONAME
+ _ZNK22CMMCScBkupOpParamsBase18DriveAndOperationsEv @ 32 NONAME
+ _ZNK28CMMCScBkupOpParamsBackupFull13IncrementTypeEv @ 33 NONAME
+ _ZNK28CMMCScBkupOpParamsBackupFull16AssociatedOpTypeEv @ 34 NONAME
+ _ZNK28CMMCScBkupOpParamsBackupFull18ActiveTransferTypeEv @ 35 NONAME
+ _ZNK28CMMCScBkupOpParamsBackupFull19PackageTransferTypeEv @ 36 NONAME
+ _ZNK28CMMCScBkupOpParamsBackupFull19PassiveTransferTypeEv @ 37 NONAME
+ _ZNK28CMMCScBkupOpParamsBackupFull8PartTypeEv @ 38 NONAME
+ _ZNK29CMMCScBkupOpParamsRestoreFull13IncrementTypeEv @ 39 NONAME
+ _ZNK29CMMCScBkupOpParamsRestoreFull16AssociatedOpTypeEv @ 40 NONAME
+ _ZNK29CMMCScBkupOpParamsRestoreFull18ActiveTransferTypeEv @ 41 NONAME
+ _ZNK29CMMCScBkupOpParamsRestoreFull19PackageTransferTypeEv @ 42 NONAME
+ _ZNK29CMMCScBkupOpParamsRestoreFull19PassiveTransferTypeEv @ 43 NONAME
+ _ZNK29CMMCScBkupOpParamsRestoreFull8PartTypeEv @ 44 NONAME
+ _ZTI22CMMCScBkupDataStrategy @ 45 NONAME ; #<TI>#
+ _ZTI37CMMCScBkupStateRequestSizeOfDataOwner @ 46 NONAME ; #<TI>#
+ _ZTI44CMMCScBkupStateRequestSpecificPublicFileInfo @ 47 NONAME ; #<TI>#
+ _ZTV22CMMCScBkupDataStrategy @ 48 NONAME ; #<VT>#
+ _ZTV37CMMCScBkupStateRequestSizeOfDataOwner @ 49 NONAME ; #<VT>#
+ _ZTV44CMMCScBkupStateRequestSpecificPublicFileInfo @ 50 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/data/FileManagerEngine.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,590 @@
+/*
+* Copyright (c) 2002-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: Resource definitions for project FileManagerEngine
+*
+*/
+
+
+// RESOURCE IDENTIFIER
+NAME FMGE // 4 letter ID
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <pathconfiguration.hrh>
+#include <filemanager.loc>
+#include "FileManagerEngine.rh"
+#include "FileManagerEngine.hrh"
+#include "BKupEngine.rh"
+#include "BkupEngine.hrh"
+#include "TMMCScBkupOwnerDataType.h"
+
+// RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE { }
+
+#ifndef RD_MULTIPLE_DRIVE
+
+RESOURCE ARRAY r_filemanager_default_folders
+ {
+ items =
+ {
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_games_path;
+ isMediaFolder = 0;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_images_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_gms_pictures_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_mms_background_images_path;
+ isMediaFolder = 1;
+ },
+#ifdef __DPB
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_presence_logos_path;
+ isMediaFolder = 1;
+ },
+#endif
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_installs_path;
+ isMediaFolder = 0;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_others_path;
+ isMediaFolder = 0;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_sounds_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_digital_sounds_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_simple_sounds_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_phone_memory_root_path;
+ folder = text_videos_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_memory_card_root_path;
+ folder = text_images_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_memory_card_root_path;
+ folder = text_others_path;
+ isMediaFolder = 0;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_memory_card_root_path;
+ folder = text_sounds_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_memory_card_root_path;
+ folder = text_digital_sounds_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_memory_card_root_path;
+ folder = text_simple_sounds_path;
+ isMediaFolder = 1;
+ },
+ FILEMANAGER_DEFAULT_FOLDER
+ {
+ root = text_memory_card_root_path;
+ folder = text_videos_path;
+ isMediaFolder = 1;
+ }
+ };
+ }
+
+#endif // RD_MULTIPLE_DRIVE
+
+RESOURCE ARRAY r_filemanager_mime_icon_mapper
+ {
+ items =
+ {
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "mpegurl";
+ iconId = EFileManagerPlaylistFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "ram";
+ iconId = EFileManagerLinkFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "ota";
+ iconId = EFileManagerPictureMsgFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "image";
+ iconId = EFileManagerImageFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "presence";
+ iconId = EFileManagerDycLogoFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "wml";
+ iconId = EFileManagerLinkFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "amr";
+ iconId = EFileManagerVoicerecFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "ringing-tone";
+ iconId = EFileManagerVoicerecFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "awb";
+ iconId = EFileManagerVoicerecFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "audio";
+ iconId = EFileManagerSoundFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "java-archive";
+ iconId = EFileManagerAppFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "x-zip";
+ iconId = EFileManagerAppFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "j2me.app";
+ iconId = EFileManagerAppFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "text";
+ iconId = EFileManagerNoteFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "sis";
+ iconId = EFileManagerAppFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "video";
+ iconId = EFileManagerVideoFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "realmedia";
+ iconId = EFileManagerVideoFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "game";
+ iconId = EFileManagerGameFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "other";
+ iconId = EFileManagerOtherFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "shockwave-flash";
+ iconId = EFileManagerFlashFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "application/pdf";
+ iconId = EFileManagerNoteFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "ms-powerpoint";
+ iconId = EFileManagerNoteFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "ms-excel";
+ iconId = EFileManagerNoteFileIcon;
+ },
+ FILEMANAGER_ICON_MAPPER
+ {
+ mimeType = "ms-word";
+ iconId = EFileManagerNoteFileIcon;
+ }
+ };
+ }
+
+#ifdef RD_MULTIPLE_DRIVE
+
+RESOURCE MMC_SECURE_BACKUP_DRIVES_AND_OPERATIONS r_filemanager_backup_restore_drives_and_operations
+ {
+ drivesAndOperations =
+ {
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EBkupDeviceMemories | EBkupInternalMassStorages;
+ type = EMMCScBkupOwnerDataTypeDataOwner;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EBkupDeviceMemories | EBkupInternalMassStorages;
+ type = EMMCScBkupOwnerDataTypeJavaData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EBkupDeviceMemories | EBkupInternalMassStorages;
+ type = EMMCScBkupOwnerDataTypePublicData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EBkupDeviceMemories | EBkupInternalMassStorages;
+ type = EMMCScBkupOwnerDataTypeSystemData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EBkupDeviceMemories | EBkupInternalMassStorages;
+ type = EMMCScBkupOwnerDataTypeActiveData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EBkupDeviceMemories | EBkupInternalMassStorages;
+ type = EMMCScBkupOwnerDataTypePassiveData;
+ }
+ };
+ }
+
+#else // RD_MULTIPLE_DRIVE
+
+RESOURCE MMC_SECURE_BACKUP_DRIVES_AND_OPERATIONS r_filemanager_backup_restore_drives_and_operations
+ {
+ /**
+ *
+ * By default we only backup & restore to/from the internal C: drive
+ * to MMC
+ *
+ */
+ drivesAndOperations =
+ {
+ ////////////////////////////////////////////////////////////
+ // DRIVE C => Back up & restore everything....
+ ////////////////////////////////////////////////////////////
+
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberC;
+ type = EMMCScBkupOwnerDataTypeDataOwner;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberC;
+ type = EMMCScBkupOwnerDataTypeJavaData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberC;
+ type = EMMCScBkupOwnerDataTypePublicData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberC;
+ type = EMMCScBkupOwnerDataTypeSystemData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberC;
+ type = EMMCScBkupOwnerDataTypeActiveData;
+ },
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberC;
+ type = EMMCScBkupOwnerDataTypePassiveData;
+ }
+
+ ////////////////////////////////////////////////////////////
+ // DRIVE E => Not backing up anything currently
+ ////////////////////////////////////////////////////////////
+/*
+ MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ drive = EMMCDriveNumberE;
+ type = EMMCScBkupOwnerDataTypeSystemData;
+ }
+*/
+ };
+ }
+
+#endif // RD_MULTIPLE_DRIVE
+
+RESOURCE BACKUPCATEGORYARRAY r_filemanager_backup_categories
+ {
+ backupcategory=
+ {
+ ////////////////////////////////////////////////////////////
+ // Note! EBUCatAllInOne is used for creating old style backup,
+ // where all contents is in one archive. See howto from
+ // CMMCScBkupOperationParameters.cpp and BkupEngine.hrh
+ ////////////////////////////////////////////////////////////
+ BACKUPCATEGORY
+ {
+ category=EBUCatAllInOne;
+ archive_name="Backup.arc";
+ special_flags=EBUCatSpecAll;
+ exclude_special_flags=EBUCatSpecNone;
+ uids=
+ {
+ };
+ exclude_uids=
+ {
+ };
+ },
+ ////////////////////////////////////////////////////////////
+ // Note! EBUCatSettings basicly contains everything else, but
+ // sis and java installations and components, which are not
+ // in the list of excluded UIDs'. It is supposed at least
+ // Messages, Contacts, Calendar and Bookmarks should not be
+ // included. Additionally call register information falls better
+ // into EBUCatUserFiles as well as MediaGallery and Notepad
+ ////////////////////////////////////////////////////////////
+ BACKUPCATEGORY
+ {
+ category=EBUCatSettings;
+ archive_name="Settings.arc";
+ special_flags=EBUCatSpecAll;
+ exclude_special_flags=EBUCatSpecSystem+EBUCatSpecJava;
+ uids=
+ {
+ };
+ exclude_uids=
+ {
+ 0x1000484b, // Message store (EBUCatMessages)
+ 0x100058db, // MMS-settings (EBUCatMessages)
+ 0x100058eb, // E-mail-settings (EBUCatMessages)
+ 0x10003a73, // Contacts model (EBUCatContacts)
+ 0x101f4cce, // Phonebook-app (EBUCatContacts)
+ 0x10003a5b, // Agenda model (EBUCatCalendar)
+ 0x10005901, // Calendar-app (EBUCatCalendar)
+ 0x10008d38, // Bookmarks (EBUCatBookmarks)
+ 0x101f401d, // Logs (EBUCatUserFiles)
+ 0x101f8599, // MediaGallery, i.e. basicly all user data (EBUCatUserFiles)
+ 0x101f84eb, // FileManager
+ 0x10005907, // Notepad (EBUCatUserFiles)
+ 0x1028246F, // Java Backup process
+ 0x10282475, // Java Registry process
+ 0x102033E6 // MIDP2 Runtime process
+ };
+ },
+ BACKUPCATEGORY
+ {
+ category=EBUCatMessages;
+ archive_name="Messages.arc";
+ special_flags=EBUCatSpecNone;
+ exclude_special_flags=EBUCatSpecNone;
+ uids=
+ {
+ 0x1000484b, // Message store
+ 0x100058db, // MMS-settings
+ 0x100058eb // E-mail-settings
+ };
+ exclude_uids=
+ {
+ };
+ },
+ BACKUPCATEGORY
+ {
+ category=EBUCatContacts;
+ archive_name="Contacts.arc";
+ special_flags=EBUCatSpecNone;
+ exclude_special_flags=EBUCatSpecNone;
+ uids=
+ {
+ 0x10003a73, // Contacts model
+ 0x101f4cce // Phonebook-app
+ };
+ exclude_uids=
+ {
+ };
+ },
+ BACKUPCATEGORY
+ {
+ category=EBUCatCalendar;
+ archive_name="Calendar.arc";
+ special_flags=EBUCatSpecNone;
+ exclude_special_flags=EBUCatSpecNone;
+ uids=
+ {
+ 0x10003a5b, // Agenda model
+ 0x10005901 // Calendar-app
+ };
+ exclude_uids=
+ {
+ };
+ },
+ BACKUPCATEGORY
+ {
+ category=EBUCatBookmarks;
+ archive_name="Bookmarks.arc";
+ special_flags=EBUCatSpecNone;
+ exclude_special_flags=EBUCatSpecNone;
+ uids=
+ {
+ 0x10008d38
+ };
+ exclude_uids=
+ {
+ };
+ },
+ ////////////////////////////////////////////////////////////
+ // Note! We have to explicitly define what belongs to EBUCatUserFiles:
+ // EBUCatSpecSystem => SIS-installations, EBUCatSpecJava => midlets
+ // We do not specify EBUCatSpecPublic, because several data owners might
+ // have "public" data in <drive>:\xxx folders. Instead MediaGallery defines
+ // user data area for backup (currently C:\Data) in its backup configuration
+ // (z:\private\101F8599\backup_registration.xml) file.
+ ////////////////////////////////////////////////////////////
+ BACKUPCATEGORY
+ {
+ category=EBUCatUserFiles;
+ archive_name="UserFiles.arc";
+ special_flags=EBUCatSpecSystem+EBUCatSpecJava;
+ exclude_special_flags=EBUCatSpecNone;
+ uids=
+ {
+ 0x101f401d, // Logs
+ //0x101f8599, // MediaGallery, i.e. basicly all user data
+ 0x101f84eb, // FileManager
+ 0x10005907, // Notepad
+ 0x1028246F, // Java Backup process
+ 0x10282475, // Java Registry process
+ 0x102033E6 // MIDP2 Runtime process
+ };
+ exclude_uids=
+ {
+ };
+ }
+ };
+ }
+
+RESOURCE TBUF r_text_mmc_backup_file { buf = "\\Backup\\Backup.arc"; }
+RESOURCE TBUF r_text_phone_memory { buf = qtn_fmgr_main_phone; }
+RESOURCE TBUF r_text_memory_card_default { buf = qtn_fmgr_main_card_default; }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+RESOURCE TBUF r_qtn_fmgr_backup_contents { buf = qtn_fmgr_backup_contents; }
+RESOURCE TBUF r_qtn_fmgr_backup_scheduling { buf = qtn_fmgr_backup_scheduling; }
+RESOURCE TBUF r_qtn_fmgr_backup_weekday { buf = qtn_fmgr_backup_weekday; }
+RESOURCE TBUF r_qtn_fmgr_backup_time { buf = qtn_fmgr_backup_time; }
+RESOURCE TBUF r_qtn_fmgr_backup_destination { buf = qtn_fmgr_backup_destination; }
+
+RESOURCE TBUF r_qtn_fmgr_backup_no_scheduling { buf = qtn_fmgr_backup_no_scheduling; }
+RESOURCE TBUF r_qtn_fmgr_backup_daily { buf = qtn_fmgr_backup_daily; }
+RESOURCE TBUF r_qtn_fmgr_backup_weekly { buf = qtn_fmgr_backup_weekly; }
+
+RESOURCE TBUF r_qtn_fmgr_backup_content_all { buf = qtn_fmgr_backup_content_all; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_selected { buf = qtn_fmgr_backup_content_selected; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_settings { buf = qtn_fmgr_backup_content_settings; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_messages { buf = qtn_fmgr_backup_content_messages; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_contacts { buf = qtn_fmgr_backup_content_contacts; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_calendar { buf = qtn_fmgr_backup_content_calendar; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_bookmarks { buf = qtn_fmgr_backup_content_bookmarks; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_userfiles { buf = qtn_fmgr_backup_content_userfiles; }
+
+RESOURCE TBUF r_qtn_fmgr_restore_settings { buf = qtn_fmgr_restore_settings; }
+RESOURCE TBUF r_qtn_fmgr_restore_messages { buf = qtn_fmgr_restore_messages; }
+RESOURCE TBUF r_qtn_fmgr_restore_contacts { buf = qtn_fmgr_restore_contacts; }
+RESOURCE TBUF r_qtn_fmgr_restore_calendar { buf = qtn_fmgr_restore_calendar; }
+RESOURCE TBUF r_qtn_fmgr_restore_bookmarks { buf = qtn_fmgr_restore_bookmarks; }
+RESOURCE TBUF r_qtn_fmgr_restore_userfiles { buf = qtn_fmgr_restore_userfiles; }
+RESOURCE TBUF r_qtn_fmgr_main_backup { buf = qtn_fmgr_main_backup; }
+#endif // RD_FILE_MANAGER_BACKUP
+
+RESOURCE TBUF r_qtn_fmgr_main_phone { buf = qtn_fmgr_main_phone; }
+RESOURCE TBUF r_qtn_fmgr_main_card_default { buf = qtn_fmgr_main_card_default; }
+RESOURCE TBUF r_qtn_fmgr_title_phone_mem { buf = qtn_fmgr_title_phone_mem; }
+RESOURCE TBUF r_qtn_fmgr_title_mem_card { buf = qtn_fmgr_title_mem_card; }
+
+#ifdef RD_MULTIPLE_DRIVE
+RESOURCE TBUF r_qtn_fmgr_main_device_memory { buf = qtn_fmgr_main_device_memory; }
+RESOURCE TBUF r_qtn_fmgr_main_mass_storage { buf = qtn_fmgr_main_mass_storage; }
+RESOURCE TBUF r_qtn_fmgr_main_memory_card_default { buf = qtn_fmgr_main_memory_card_default; }
+RESOURCE TBUF r_qtn_fmgr_main_named_memory_card { buf = qtn_fmgr_main_named_memory_card; }
+
+RESOURCE TBUF r_qtn_fmgr_title_device_memory { buf = qtn_fmgr_title_device_memory; }
+RESOURCE TBUF r_qtn_fmgr_title_mass_storage { buf = qtn_fmgr_title_mass_storage; }
+RESOURCE TBUF r_qtn_fmgr_title_named_memory_card { buf = qtn_fmgr_title_named_memory_card; }
+RESOURCE TBUF r_qtn_fmgr_title_memory_card_default { buf = qtn_fmgr_title_memory_card_default; }
+#endif // RD_MULTIPLE_DRIVE
+
+RESOURCE TBUF r_qtn_fmgr_main_usb_default { buf = qtn_fmgr_main_usb_default; }
+RESOURCE TBUF r_qtn_fmgr_title_usb_default { buf = qtn_fmgr_title_usb_default; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_device_memory { buf = qtn_fmgr_backup_content_device_memory; }
+RESOURCE TBUF r_qtn_fmgr_backup_content_mass_storage{ buf = qtn_fmgr_backup_content_mass_storage; }
+RESOURCE TBUF r_qtn_fmgr_restore_device_memory { buf = qtn_fmgr_restore_device_memory; }
+RESOURCE TBUF r_qtn_fmgr_restore_mass_storage { buf = qtn_fmgr_restore_mass_storage; }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerActiveBase.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 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: Wraps wait note and real work thread
+*
+*/
+
+
+
+#ifndef CFILEMANAGERACTIVEBASE_H
+#define CFILEMANAGERACTIVEBASE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <AknWaitNoteWrapper.h>
+#include "MFileManagerThreadFunction.h"
+
+// FORWARD DECLARATIONS
+class CFileManagerThreadWrapper;
+
+// CLASS DECLARATION
+/**
+* Class wraps wait note and real work thread to avoid long running steps
+* in the main thread that freezes the UI.
+*
+* @lib FileManagerEngine.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CFileManagerActiveBase) : public CBase,
+ public MAknBackgroundProcess,
+ public MFileManagerThreadFunction
+ {
+ public:
+ /**
+ * Constructor for subclasses.
+ */
+ void BaseConstructL();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerActiveBase();
+
+ TInt Result() const;
+
+ private: // From MAknBackgroundProcess
+ void StepL();
+
+ TBool IsProcessDone() const;
+
+ void DialogDismissedL( TInt aButtonId );
+
+ private: // From MFileManagerThreadFunction
+ void ThreadStepL();
+
+ TBool IsThreadDone();
+
+ void NotifyThreadClientL( TNotifyType aType, TInt aValue );
+
+ protected:
+ /**
+ * For subclasses to handle all processing in work thread
+ */
+ virtual void ThreadFunctionL( const TBool& aCanceled ) = 0;
+
+ /**
+ * For subclasses to request cancel in work thread
+ */
+ virtual void CancelThreadFunction();
+
+ protected:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerActiveBase();
+
+ private: // Data
+ // Wraps work thread control. Own.
+ CFileManagerThreadWrapper* iThreadWrapper;
+
+ // Indicates if background process is done or not
+ TBool iDone;
+
+ // Indicates if thread is canceled
+ TBool iCanceled;
+
+ // Indicates the result
+ TInt iResult;
+
+ };
+
+#endif // CFILEMANAGERACTIVEBASE_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerActiveExecute.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2002-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: Handles the copy/move operation
+*
+*/
+
+
+
+#ifndef CFILEMANAGERACTIVEEXECUTE_H
+#define CFILEMANAGERACTIVEEXECUTE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include <badesca.h>
+#include "FileManagerEngine.hrh"
+#include "MFileManagerProcessObserver.h"
+#include "MFileManagerThreadFunction.h"
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+class MFileManagerItemIterator;
+//class CMGXFileManager;
+class CFileManagerThreadWrapper;
+
+/**
+* CFileManagerActiveExecute
+*
+* Handles the copy and move operations.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerActiveExecute) : public CActive,
+ public MFileManagerThreadFunction
+
+ {
+
+ public:
+
+ /**
+ * Overwrite file switch
+ */
+ enum TFileManagerSwitch
+ {
+ ENoOverWrite = 1,
+ EOverWrite
+ };
+
+ /**
+ * Two-phased constructor.
+ * @since 2.0
+ * @param aEngine reference to CFileManagerEngine instance
+ * @param aOperation defines type of operation copy or move
+ * @param aObserver reference to MFileManagerProcess implemented
+ * instance
+ * @param aIndexList list of indexes from current view which needs operation
+ * @param aToFolder folder where items are moved or copied
+ * @return Newly constructed CFileManagerActiveExecute
+ */
+ IMPORT_C static CFileManagerActiveExecute* NewL(
+ CFileManagerEngine& aEngine,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ MFileManagerProcessObserver& aObserver,
+ CArrayFixFlat<TInt>& aIndexList,
+ const TDesC& aToFolder );
+
+ /**
+ * Destructor
+ */
+ IMPORT_C ~CFileManagerActiveExecute();
+
+ /**
+ * Executes one operation at time, one file copy/move or directory creation
+ * @since 2.0
+ * @param aOverWrite Over write the file or not
+ */
+ IMPORT_C void ExecuteL( TFileManagerSwitch aOverWrite );
+
+ /**
+ * Cancel the operation
+ * @since 2.0
+ */
+ IMPORT_C void CancelExecution();
+
+ /**
+ * Gets destination folder
+ * @since 3.2
+ */
+ IMPORT_C TPtrC ToFolder();
+
+ private:
+
+ // From CActive
+ void DoCancel();
+ void RunL();
+ TInt RunError(TInt aError);
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerActiveExecute( CFileManagerEngine& aEngine,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ MFileManagerProcessObserver& aObserver );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( CArrayFixFlat<TInt>& aIndexList,
+ const TDesC& aToFolder );
+
+ private:
+
+ /**
+ * Item operation was succesfully carried on, move to next item
+ */
+ void KErrNoneActionL();
+
+ /**
+ * Item operation was not succesful because there was target item already
+ * This function deals that situation
+ */
+ void KErrAlreadyExistsActionL();
+
+ /**
+ * Takes last folder name on other string and appends it to other
+ * @param aResult Stores the result as full path
+ * @param aSrc source full path which last folder name is taken
+ * @param aDst target path where source last path is appended
+ */
+ void AddLastFolder( TDes& aResult, const TDesC& aSrc, const TDesC& aDst );
+
+ /**
+ * Performs a copy or move operation
+ *
+ * @param aSwitch indicate destination file to be overwritten or not
+ * @return system wide error code
+ */
+ TInt DoOperation( TInt aSwitch );
+
+ /**
+ * Checks if directory is empty
+ *
+ * @param aDir Full path of the directory
+ * @return ETrue if directory is empty, otherwise EFalse
+ */
+ TBool IsEmptyDir( const TDesC& aDir );
+
+ /**
+ * Completes operation
+ *
+ * @param aError Operation result
+ */
+ void CompleteL( TInt aError );
+
+ /**
+ * Updates MG2 notifications
+ *
+ * @param aForceFlush Indicates if notications are flushed
+ * @param aError Indicates the result
+ */
+ void UpdateNotifications( TBool aFlush, TInt aError );
+
+ static void AppendArrayIfNotFound(
+ CDesCArray& aArray, const TDesC& aFullPath );
+
+ void FlushArray( CDesCArray& aArray );
+
+ void ThreadCopyOrMoveStepL();
+
+ void ThreadFinalizeMoveStepL();
+
+ private: // From MFileManagerThreadFunction
+
+ void ThreadStepL();
+
+ TBool IsThreadDone();
+
+ void NotifyThreadClientL( TNotifyType aType, TInt aValue );
+
+ private:
+
+ // index to current CDir array
+ TInt iCurrentIndex;
+
+ // Own: Source item with full path
+ HBufC* iFullPath;
+
+ // Own: Destination item with full path
+ HBufC* iDestination;
+
+ // Has user cancelled the operation
+ TBool iCancelled;
+
+ // Source directory is empty so special operations are needed
+ TBool iEmptyDir;
+
+ // Needed to get the item locations behind given index(es)
+ CFileManagerEngine& iEngine;
+
+ // Ref: Shareable file server session
+ RFs& iFs;
+
+ // Move or copy operation
+ MFileManagerProcessObserver::TFileManagerProcess iOperation;
+
+ // Own: Array of user selected items to be copied/moved
+ CArrayFixFlat< TInt >* iIndexList;
+
+ // Own: user given destination folder
+ HBufC* iToFolder;
+
+ // Own: This is either CFileManagerIndexIterator or CFileManagerFileSystemIterator
+ // depending of source item type, file or folder
+ MFileManagerItemIterator* iItemIterator;
+
+ // Ref: File operation phases are signaled through this interface
+ MFileManagerProcessObserver& iObserver;
+
+ // Ref: Current source item with full path
+ // Needed for file already exist situations.
+ HBufC* iSrc;
+
+ // Ref: Current destination item with full path
+ // Needed for file already exist situations.
+ HBufC* iDst;
+
+ // Total transferred bytes, used for progress note
+ // except in same drive move operation
+ TUint iBytesTransferredTotal;
+
+ // Total transferred files, used for progress note
+ // This is used if move operation is done inside drive
+ TInt iFilesTransferredTotal;
+
+ // Current error
+ TInt iError;
+
+ // Ref: MG2 update notification object
+ //CMGXFileManager* iMgxFileManager;
+
+ // Own: Thread wrapper for the operation
+ CFileManagerThreadWrapper* iThreadWrapper;
+
+ // Indicates the used operation switches
+ TInt iSwitch;
+
+ // Own: Buffer for storing changed items for MG2 notifications
+ CDesCArray* iChangedSrcItems;
+
+ // Own: Buffer for storing changed items for MG2 notifications
+ CDesCArray* iChangedDstItems;
+
+ // Indicates that the operation is done inside same drive
+ TBool iOperationOnSameDrive;
+
+ // Indicates that move operation is finalizing
+ TBool iFinalizeMove;
+
+ // Indicates that source of the operation is on remote drive
+ TBool iIsSrcRemoteDrive;
+
+ // Indicates that destination of the operation is on remote drive
+ TBool iIsDstRemoteDrive;
+
+ // Stores type of the current item
+ TFileManagerTypeOfItem iItemType;
+ };
+
+#endif // CFILEMANAGERACTIVEEXECUTE_H
+
+ // End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerActiveRename.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 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: Class wraps rename operation
+*
+*/
+
+
+
+#ifndef CFILEMANAGERACTIVERENAME_H
+#define CFILEMANAGERACTIVERENAME_H
+
+// INCLUDES
+#include <e32std.h>
+#include "CFileManagerActiveBase.h"
+
+// FORWARD DECLARATIONS
+class RFs;
+class CFileManagerEngine;
+class CFileManagerUtils;
+
+// CLASS DECLARATION
+/**
+* Class wraps rename operation.
+*
+* @lib FileManagerEngine.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS( CFileManagerActiveRename ) : public CFileManagerActiveBase
+ {
+ public:
+ /**
+ * Constructor.
+ */
+ static CFileManagerActiveRename* NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils,
+ const TDesC& aName,
+ const TDesC& aNewName );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerActiveRename();
+
+ private: // From CFileManagerActiveBase
+ void ThreadFunctionL( const TBool& aCanceled );
+
+ void CancelThreadFunction();
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerActiveRename(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ void ConstructL( const TDesC& aName, const TDesC& aNewName );
+
+ TInt ThreadGetMaxSubfolderPathL( const TBool& aCanceled );
+
+ private: // Data
+ // Ref: File Manager engine
+ CFileManagerEngine& iEngine;
+
+ // Ref: File Manager utils
+ CFileManagerUtils& iUtils;
+
+ // Ref: Shareable file server session
+ RFs& iFs;
+
+ // Own: Stores name.
+ HBufC* iName;
+
+ // Own: Stores new name.
+ HBufC* iNewName;
+
+ // Indicates if operation is done in remote drive
+ TBool iIsRemoteDrive;
+ };
+
+#endif // CFILEMANAGERACTIVERENAME_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerBackupSettings.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,320 @@
+/*
+* 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: Backup settings
+*
+*/
+
+
+#ifndef C_FILEMANAGERBACKUPSETTINGS_H
+#define C_FILEMANAGERBACKUPSETTINGS_H
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <badesca.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+class CRepository;
+
+
+// CLASS DECLARATION
+/**
+ * This class is used for storing backup settings
+ *
+ * @lib FileManagerEngine.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS(CFileManagerBackupSettings) : public CBase,
+ public MDesCArray
+ {
+
+public:
+ /** Backup setting type */
+ enum TSettingType
+ {
+ ENone = 0,
+ EContents,
+ EScheduling,
+ EWeekday,
+ ETime,
+ ETarget
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerBackupSettings* NewL(
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerBackupSettings();
+
+ /**
+ * Sets backup contents
+ *
+ * @since S60 3.1
+ * @param aContent Content bitmask
+ */
+ IMPORT_C void SetContent( const TUint32 aContent );
+
+ /**
+ * Sets backup scheduling
+ *
+ * @since S60 3.1
+ * @param aScheduling Scheduling type
+ */
+ IMPORT_C void SetScheduling( const TInt aScheduling );
+
+ /**
+ * Sets backup weekday
+ *
+ * @since S60 3.1
+ * @param aDay Backup weekday (See TDay)
+ */
+ IMPORT_C void SetDay( const TInt aDay );
+
+ /**
+ * Sets backup time
+ *
+ * @since S60 3.1
+ * @param aTime Time from 00:00
+ */
+ IMPORT_C void SetTime( const TTime& aTime );
+
+ /**
+ * Sets backup target drive
+ *
+ * @since S60 3.1
+ * @param aDrive Target drive (See TDriveNumber)
+ */
+ IMPORT_C void SetTargetDrive( const TInt aDrive );
+
+ /**
+ * Gets backup contents
+ *
+ * @since S60 3.1
+ * @return Content bitmask
+ */
+ IMPORT_C TUint32 Content() const;
+
+ /**
+ * Gets backup scheduling
+ *
+ * @since S60 3.1
+ * @return Scheduling type
+ */
+ IMPORT_C TInt Scheduling() const;
+
+ /**
+ * Gets backup weekday
+ *
+ * @since S60 3.1
+ * @return Backup weekday (See TDay)
+ */
+ IMPORT_C TInt Day() const;
+
+ /**
+ * Gets backup time
+ *
+ * @since S60 3.1
+ * @return Backup time
+ */
+ IMPORT_C const TTime& Time() const;
+
+ /**
+ * Gets backup target drive
+ *
+ * @since S60 3.1
+ * @return Backup time
+ */
+ IMPORT_C TInt TargetDrive() const;
+
+ /**
+ * Saves backup settings
+ *
+ * @since S60 3.1
+ */
+ IMPORT_C void SaveL();
+
+ /**
+ * Gets setting type at position
+ *
+ * @since S60 3.1
+ * @param aIndex Position
+ * @return Setting type
+ */
+ IMPORT_C TInt SettingAt( const TInt aIndex );
+
+ /**
+ * Refreshes backup settings
+ *
+ * @since S60 3.1
+ */
+ IMPORT_C void RefreshL();
+
+ /**
+ * Gets textid from content bit
+ *
+ * @since S60 3.1
+ * @param aContent content bit
+ * @return Textid
+ */
+ static TInt ContentToTextId( const TUint32 aContent );
+
+ /**
+ * Gets allowed drive attribute match mask
+ *
+ * @since S60 3.1
+ * @return drive attribute mask
+ */
+ IMPORT_C TUint32 AllowedDriveAttMatchMask() const;
+
+public: // From MDesCArray
+ TInt MdcaCount() const;
+
+ TPtrC MdcaPoint( TInt aIndex ) const;
+
+private:
+ /** Backup setting entry */
+ NONSHARABLE_CLASS(CEntry) : public CBase
+ {
+ public:
+ ~CEntry();
+
+ HBufC* iText;
+ TSettingType iType;
+ };
+
+private:
+ /**
+ * Constructors
+ */
+ CFileManagerBackupSettings( CFileManagerEngine& aEngine );
+
+ void ConstructL();
+
+ /**
+ * Gets the count of contents selected
+ */
+ TInt ContentsSelected() const;
+
+ /**
+ * Creates backup setting entry
+ */
+ CEntry* CreateEntryLC(
+ const TSettingType aType,
+ const TInt aTitleId,
+ const TInt aTextId,
+ const TInt aValue = 0 );
+
+ /**
+ * Creates backup setting entry
+ */
+ CEntry* CreateEntryLC(
+ const TSettingType aType,
+ const TInt aTitleId,
+ const TDesC& aText );
+
+ /**
+ * Creates backup setting content entry
+ */
+ CEntry* CreateContentsEntryLC();
+
+ /**
+ * Creates backup setting time entry
+ */
+ CEntry* CreateTimeEntryLC();
+
+ /**
+ * Loads saved backup settings
+ */
+ void LoadL();
+
+ /**
+ * Refreshes backup setting list entries
+ */
+ void RefreshListL();
+
+ /**
+ * Creates backup setting target drive entry
+ */
+ CEntry* CreateTargetDriveEntryLC();
+
+ /**
+ * Checks for multiple backup targets
+ */
+ TBool HasMultipleBackupTargets();
+
+private: // Data
+ /**
+ * Reference to file manager engine
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * Content bitmask
+ */
+ TUint32 iContent;
+
+ /**
+ * Scheduling type
+ */
+ TInt iScheduling;
+
+ /**
+ * Scheduled backup weekday
+ */
+ TInt iDay;
+
+ /**
+ * Scheduled backup time from 00:00
+ */
+ TTime iTime;
+
+ /**
+ * Backup target drive
+ */
+ TInt iTargetDrive;
+
+ /**
+ * Backup setting list items
+ */
+ RPointerArray< CEntry > iList;
+
+ /**
+ * Allowed drive match mask
+ */
+ TUint32 iAllowedDriveMatchMask;
+
+ /**
+ * Pointer to CenRep
+ * Own.
+ */
+ CRepository* iCenRep;
+
+ /**
+ * Feature configuration
+ */
+ TInt iFileManagerFeatures;
+
+ };
+
+#endif // C_FILEMANAGERBACKUPSETTINGS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerCommonDefinitions.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002-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: Common file manager definitions
+*
+*/
+
+
+#ifndef CFILEMANAGERCOMMONDEFINITIONS_H
+#define CFILEMANAGERCOMMONDEFINITIONS_H
+
+
+// CONSTANTS
+_LIT( KFmgrBackslash, "\\" );
+const TInt KFmgrBackslashSpace = 1;
+
+// Left to right and right to left markers
+_LIT( KFmgrDirectionalChars, "\x202A\x202B\x202C\x202D\x200E\x200F" );
+
+_LIT( KFmgrTab, "\t" );
+_LIT( KFmgrLineFeed, "\n" );
+_LIT( KFmgrParagraphSeparator, "\x2029" );
+_LIT( KFmgrSpace, " " );
+
+const TInt KFmgrDoubleMaxFileName = KMaxFileName * 2;
+
+_LIT( KFmgrFatFSName, "Fat" );
+
+#endif // CFILEMANAGERCOMMONDEFINITIONS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerDocHandler.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2004-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: Wraps document handler functions
+*
+*/
+
+
+
+#ifndef CFILEMANAGERDOCHANDLER_H
+#define CFILEMANAGERDOCHANDLER_H
+
+// INCLUDES
+#include <apparc.h>
+#include <AknServerApp.h>
+#include <apgcli.h>
+#include "MFileManagerThreadFunction.h"
+
+// FORWARD DECLARATIONS
+class CDocumentHandler;
+class CFileManagerEngine;
+class CFileManagerUtils;
+class CEikProcess;
+class CFileManagerThreadWrapper;
+class MFileManagerProcessObserver;
+
+
+// CLASS DECLARATION
+/**
+* This class wraps dochandler functions
+*
+* @lib FileManagerEngine.lib
+* @since 2.7
+*/
+NONSHARABLE_CLASS(CFileManagerDocHandler) : public CBase,
+ public MAknServerAppExitObserver,
+ public MFileManagerThreadFunction
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerDocHandler* NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerDocHandler();
+
+ private: // From MAknServerAppExitObserver
+ void HandleServerAppExit( TInt aReason );
+
+ private: // From MFileManagerThreadFunction
+
+ void ThreadStepL();
+
+ TBool IsThreadDone();
+
+ void NotifyThreadClientL( TNotifyType aType, TInt aValue );
+
+ public: // New functions
+ void OpenFileL(
+ const TDesC& aFullPath, MFileManagerProcessObserver* aObserver );
+
+ void CancelFileOpen();
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerDocHandler(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ void OpenShareableFileL( RFile64& aShareableFile, const TDesC8& aMime );
+
+ private:
+
+ // Ref: To notify engine of embedded application
+ CFileManagerEngine& iEngine;
+
+ // Ref: For using utilities
+ CFileManagerUtils& iUtils;
+
+ // Ref: Shareable file server session
+ RFs& iFs;
+
+ // Own: For launching files
+ CDocumentHandler* iDocHandler;
+
+ // Own: Shareable file
+ RFile64 iFile;
+
+ // Own: File ready indicator
+ TBool iFileReady;
+
+ // Own: File fullpath
+ HBufC* iFileFullPath;
+
+ // Own: File MIME type
+ HBufC8* iFileMime;
+
+ // Ref: Observer for document open status
+ MFileManagerProcessObserver* iObserver;
+
+ // Own: For async file open for downloading file to cache
+ CFileManagerThreadWrapper* iThreadWrapper;
+
+ // Own: For getting app uids
+ RApaLsSession iApaSession;
+
+ // Own: Indicates the file open status
+ TBool iEmbeddedAppOpen;
+
+ };
+
+#endif // CFILEMANAGERDOCHANDLER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerEngine.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,897 @@
+/*
+* Copyright (c) 2002-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: Main class of the File Manager Engine
+*
+*/
+
+
+
+#ifndef CFILEMANAGERENGINE_H
+#define CFILEMANAGERENGINE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+#include <AknServerApp.h>
+#include "MFileManagerProcessObserver.h"
+#include "FileManagerEngine.hrh"
+#include "TFileManagerDriveInfo.h"
+#include "CFileManagerRestoreSettings.h"
+
+// CONSTANTS
+// File Manager engine spcific error codes
+// defined numbers should be far away from system wide error code numbers
+const TInt KErrFmgrSeveralFilesInUse = -4500;
+const TInt KErrFmgrDefaultFolder = -4501;
+const TInt KErrFmgrNotSupportedRemotely = -4502;
+
+// FORWARD DECLARATIONS
+class CGflmNavigatorModel;
+class CFileManagerItemProperties;
+class CFileManagerActiveDelete;
+class CFileManagerActiveSize;
+class CFileManagerActiveExecute;
+class CFileManagerRefresher;
+class CFileManagerFileSystemEvent;
+class CFileManagerUtils;
+//class CMGXFileManager;
+class CFileManagerItemFilter;
+class CFileManagerRemovableDriveHandler;
+class CFileManagerRemoteDriveHandler;
+class CFileManagerDocHandler;
+class CFileManagerBackupSettings;
+class CFileManagerRestoreSettings;
+class CFileManagerActiveRename;
+class CFileManagerFeatureManager;
+class MAknServerAppExitObserver;
+
+
+// CLASS DECLARATION
+/**
+* This class implements the main functionalities of File Manager Engine
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerEngine) : public CBase
+ {
+
+ public:
+
+ // Engine state
+ enum TState
+ {
+ ENavigation = 0, // For using navigation list model
+ ESearch // For using search list model
+ };
+
+ // Sort method
+ enum TSortMethod
+ {
+ EByName = 0,
+ EByType,
+ EMostRecentFirst,
+ ELargestFirst,
+ EByMatch
+ };
+
+ public:
+ /**
+ * Two-phased constructor.
+ * @param aFs Shareable file server session, see RFs::ShareProtected()
+ * @return Pointer to a CFileManagerEngine instance
+ */
+ IMPORT_C static CFileManagerEngine* NewL( RFs& aFs );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CFileManagerEngine();
+
+ public: // Interface
+
+ /**
+ * Set currently viewed memory
+ * @since 2.0
+ * @param aMemory The memory type
+ * @return system wide error code
+ */
+ IMPORT_C TInt SetMemoryL( TFileManagerMemory aMemory );
+
+ /**
+ * Returns the currently viewed memory
+ * @since 2.0
+ * @return TFileManagerMemory, the memory type
+ */
+ IMPORT_C TFileManagerMemory Memory() const;
+
+ /**
+ * Returns selected views item in array, which ListBox can show
+ * @since 2.0
+ * @return Array of formatted strings of current view
+ */
+ IMPORT_C MDesCArray* FileList() const;
+
+ /**
+ * Engine signals events with this observer
+ * @since 2.0
+ * @param aObserver The process observer or NULL, ownership is not transferred
+ */
+ IMPORT_C void SetObserver( MFileManagerProcessObserver* aObserver );
+
+ /**
+ * Returns full path of the current directory
+ * @since 2.0
+ * @return Full path of current directory
+ */
+ IMPORT_C TPtrC CurrentDirectory() const;
+
+ /**
+ * Returns localized name of the current directory
+ * @since 2.0
+ * @return Full path of current directory
+ */
+ IMPORT_C TPtrC LocalizedNameOfCurrentDirectory() const;
+
+ /**
+ * This backsteps the navigator to previously visible folder
+ * @since 2.0
+ */
+ IMPORT_C void BackstepL();
+
+ /**
+ * Returns the type of given item index in CFileManagerItemProperties bitmask
+ * @since 2.0
+ * @param aIndex The index to current view index.
+ * @return CFileManagerItemProperties bitmask
+ */
+ IMPORT_C TUint32 FileTypeL( const TInt aIndex ) const;
+
+ /**
+ * Returns the type of given item index in CFileManagerItemProperties bitmask
+ * @since 2.0
+ * @param aFullPath Full path to item which type is needed..
+ * @return CFileManagerItemProperties bitmask
+ */
+ IMPORT_C TUint32 FileTypeL( const TDesC& aFullPath ) const;
+
+ /**
+ * Delete file(s) or folder, caller should delete the returned object.
+ * @since 2.0
+ * @param aIndexList List of indexes from current directory which is going to be deleted
+ * @return pointer to newly created CFileManagerActiveDelete object
+ */
+ IMPORT_C CFileManagerActiveDelete* CreateActiveDeleteL(
+ CArrayFixFlat< TInt >& aIndexList );
+
+ /**
+ * Creates a new folder
+ * @since 2.0
+ * @param aFolderName Name of the new folder which is created current directory
+ */
+ IMPORT_C void NewFolderL( const TDesC& aFolderName );
+
+ /**
+ * Set the current item name
+ * @since 5.0
+ * @param aFileName File name to be set
+ */
+ IMPORT_C void SetCurrentItemName( const TDesC& aFileName );
+
+ /**
+ * Rename the file or folder.
+ * @since 3.2
+ * @param aIndex index of the file or folder from current directory
+ * @param aNewFileName name where that file or folder name is changed
+ * @return System wide error code
+ */
+ IMPORT_C void RenameL( const TInt aIndex, const TDesC& aNewFileName );
+
+ /**
+ * Opens the file or folder
+ * @since 2.0
+ * @param aIndex from the current directory list
+ */
+ IMPORT_C void OpenL( const TInt aIndex );
+
+ /**
+ * Returns the depth of the current folder
+ * @since 2.0
+ * @return Current depth in folder tree, 0 is root, 1 one folder down
+ */
+ IMPORT_C TInt FolderLevel();
+
+ /**
+ * Checks from current directory, if the name is found
+ * @since 2.0
+ * @param aString Name which is matched with current directory files and folders
+ * @return ETrue if exists
+ * EFalse if not exists in current directory
+ */
+ IMPORT_C TBool IsNameFoundL(const TDesC& aString);
+
+ /**
+ * returns number of the current drive.
+ * @since 2.0
+ * @returns TDriveNumber type, or KErrNotFound if no current drive set
+ */
+ IMPORT_C TInt CurrentDrive();
+
+ /**
+ * returns info class of the item
+ * @since 2.0
+ * @param aIndex to current directory item
+ * @return class which contains all necessary data for info box, receiver must delete it
+ */
+ IMPORT_C CFileManagerItemProperties* GetItemInfoL( const TInt aIndex );
+
+ /**
+ * returns info about MMC status
+ * @since 2.0
+ * @return class which contains all necessary data for MMC status
+ */
+ IMPORT_C TFileManagerDriveInfo GetMMCInfoL() const;
+
+ /**
+ * Sets the state of the engine
+ * @since 2.0
+ * @param aState TState, the state type
+ */
+ IMPORT_C void SetState( TState aState );
+
+ /**
+ * Gets the state of the engine
+ * @since 2.0
+ * @return TState, the state type
+ */
+ IMPORT_C CFileManagerEngine::TState State() const;
+
+ /**
+ * Updates the current view
+ * @since 2.0
+ */
+ IMPORT_C void RefreshDirectory();
+
+ /**
+ * Returns string which was used for finding items
+ * @since 2.0
+ * @return Ref to string
+ */
+ IMPORT_C TPtrC SearchString() const;
+
+ /**
+ * Is given file name valid
+ * @since 2.0
+ * @param aDriveAndPath root path
+ * @param aName name of the file
+ * @param aIsFolder ETrue folder and EFalse file name
+ * @return ETrue if file name is valid
+ */
+ IMPORT_C TBool IsValidName(
+ const TDesC& aDriveAndPath,
+ const TDesC& aName,
+ TBool aIsFolder ) const;
+
+ /**
+ * Check that if given file name contains illegal characters
+ * @since 2.0
+ * @param aName name of the file
+ * @return ETrue if file name is valid
+ */
+ IMPORT_C TBool IllegalChars( const TDesC& aName ) const;
+
+ /**
+ * Check that there is enough memory to do specific operation
+ * @since 2.0
+ * @param aToFolder Target memory
+ * @param aSize Space needed bytes
+ * @param aOperation Move or Copy
+ * @return ETrue if there is enough space for operation
+ */
+ IMPORT_C TBool EnoughSpaceL(
+ const TDesC& aToFolder,
+ TInt64 aSize,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation ) const;
+
+ /**
+ * Sets the file system event on or off
+ * @since 2.0
+ * @param aSet ETrue sets file system event
+ * EFalse turns events off
+ */
+ IMPORT_C void FileSystemEvent( TBool aEventOn );
+
+ /**
+ * Returns the current focus index if rename, copy/move or new folder
+ * operation has happened
+ * @since 2.0
+ * @return index to current focused item,
+ * KErrNotFound if not found
+ */
+ IMPORT_C TInt CurrentIndex();
+
+ /**
+ * returns the file name with full path which is behind given index
+ * @since 2.0
+ * @param aIndex to current directory item
+ * @return HBufC buffer which caller must release after usage
+ */
+ IMPORT_C HBufC* IndexToFullPathL( const TInt aIndex) const;
+
+ /**
+ * returns the file name with full path which is behind given index
+ * @since 3.2
+ * @param aIndex to current directory item
+ * @return HBufC buffer which caller must release after usage
+ */
+ IMPORT_C HBufC* IndexToFullPathLC( const TInt aIndex ) const;
+
+ /**
+ * Checks given item that can it be deleted.
+ * @since 2.0
+ * @param aFullPath full path to item which is checked
+ * @returns ETrue if item can be deleted, EFalse if not
+ */
+ TBool CanDelete( const TDesC& aFullPath ) const;
+
+ /**
+ * returns localized name of the given item
+ * @since 2.0
+ * @param aFullPath full path to item which is checked
+ * @returns TDesC reference to localized name
+ */
+ IMPORT_C TPtrC LocalizedName( const TDesC& aFullPath ) const;
+
+ /**
+ * returns the count of files in folder
+ * @since 2.0
+ * @return count of files in folder
+ */
+ IMPORT_C TInt FilesInFolderL();
+
+ /**
+ * Cancels the refresh operation
+ * @since 2.0
+ * @return ETrue if refresh process is cancelled,
+ * EFalse if there wasn't any refresh process ongoing
+ */
+ IMPORT_C TBool CancelRefresh();
+
+ /**
+ * Checks given index is it folder, this call is very quick
+ * because it uses icon information to retrieve item type
+ * @since 2.0
+ * @param aIndex index to item
+ * @return ETrue item behind the index is folder
+ * EFalse item behind the index is not folder
+ */
+ IMPORT_C TBool IsFolder( const TInt aIndex ) const;
+
+ /**
+ * Notifies about drive added or changed
+ * @since 3.1
+ */
+ void DriveAddedOrChangedL();
+
+ /**
+ * Notifies about folder content changed
+ * @since 3.2
+ */
+ void FolderContentChangedL();
+
+ /**
+ * Resolves the icon id of the given item index
+ * @since 2.7
+ * @param aIndex index to item
+ * @return Icon id of the item behind the index
+ *
+ */
+ IMPORT_C TInt IconIdL( const TInt aIndex ) const;
+
+ /**
+ * Checks is given folder system folder
+ * @since 3.1
+ * @param aFull Full path to item
+ * @return ETrue if folder is system folder, EFalse if not
+ */
+ IMPORT_C TBool IsSystemFolder( const TDesC& aFullPath ) const;
+
+ /**
+ * Gets current drive name
+ * @since 3.2
+ * @return Drive name
+ */
+ IMPORT_C TPtrC CurrentDriveName();
+
+ /**
+ * Renames the current drive
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aName The new name
+ * @return System wide error code
+ */
+ IMPORT_C TInt RenameDrive(
+ const TInt aDrive, const TDesC& aName );
+
+ /**
+ * Retrieves current drive information
+ * @param aInfo A reference to a TFileManagerDriveInfo object
+ */
+ IMPORT_C void GetDriveInfoL( TFileManagerDriveInfo& aInfo );
+
+ /**
+ * Sets password on current drive
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aOld The old password
+ * @param aNew The new password
+ * @return System wide error code
+ */
+ IMPORT_C TInt SetDrivePassword(
+ const TInt aDrive,
+ const TMediaPassword& aOld,
+ const TMediaPassword& aNew );
+
+ /**
+ * Removes password from current drive
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aPwd The current password
+ * @return System wide error code
+ */
+ IMPORT_C TInt RemoveDrivePassword(
+ const TInt aDrive,
+ const TMediaPassword& aPwd );
+
+ /**
+ * Unlocks the current drive
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aPwd The current password
+ * @return System wide error code
+ */
+ IMPORT_C TInt UnlockDrive(
+ const TInt aDrive,
+ const TMediaPassword& aPwd );
+
+ /**
+ * Starts format process
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ */
+ IMPORT_C void StartFormatProcessL( const TInt aDrive );
+
+ /**
+ * Starts eject process
+ * @since 3.2
+ * @param aDrive Drive number EDriveA...EDriveZ
+ */
+ IMPORT_C void StartEjectProcessL( const TInt aDrive );
+
+ /**
+ * Initiates backup or restore process
+ * @since 3.1
+ * @param aProcess The process to start:
+ * EBackupProcess or ERestoreProcess
+ */
+ IMPORT_C void StartBackupProcessL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess );
+
+ /**
+ * Cancels ongoing process
+ * @since 3.1
+ * @param aProcess The process to cancel
+ */
+ IMPORT_C void CancelProcess(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess );
+
+ /**
+ * Get drive state
+ * @since 3.1
+ * @param aState For TFileManagerDriveInfo::TDriveState bits
+ * @param aPath Only drive letter is used
+ * @return System wide error code
+ */
+ IMPORT_C TInt DriveState( TUint32& aState, const TDesC& aPath ) const;
+
+ /**
+ * Get drive state
+ * @since 3.1
+ * @param aState For TFileManagerDriveInfo::TDriveState bits
+ * @param aDrive
+ * @return System wide error code
+ */
+ IMPORT_C TInt DriveState( TUint32& aState, const TInt aDrive ) const;
+
+ /**
+ * Determine if given file must be protected (kept on the device)
+ * @since 3.1
+ * @param aFullPath Full path to item
+ * @param aIsProtected The protection status
+ * @return System wide error code
+ */
+ IMPORT_C TInt IsDistributableFile( const TDesC& aFullPath,
+ TBool& aIsProtected ) const;
+
+ /**
+ * Connects or disconnects remote drive
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aConnect ETrue when connecting, EFalse when disconnecting
+ * @return System wide error code
+ */
+ IMPORT_C TInt SetRemoteDriveConnection(
+ const TInt aDrive, TBool aConnect );
+
+ /**
+ * Deletes the remote drive settings from remote storage framework
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @return System wide error code
+ */
+ IMPORT_C TInt DeleteRemoteDrive( const TInt aDrive );
+
+ /**
+ * Gets drive root directory
+ * @since 3.1
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @return Reference to root directory string
+ */
+ IMPORT_C TPtrC DriveRootDirectory( const TInt aDrive ) const;
+
+ /**
+ * Gets backup settings
+ * @since 3.1
+ * @return Reference to backup settings.
+ */
+ IMPORT_C CFileManagerBackupSettings& BackupSettingsL();
+
+ /**
+ * Gets restore settings
+ * @since 3.1
+ * @return Reference to restore settings.
+ */
+ IMPORT_C CFileManagerRestoreSettings& RestoreSettingsL();
+
+ /**
+ * Gets drive name
+ * @since 3.1
+ * @param aDrive Drive that name is required
+ * @return Reference to drive name.
+ */
+ IMPORT_C TPtrC DriveName( const TInt aDrive );
+
+ /**
+ * Gets drive info
+ * @since 3.1
+ * @param aDrive Drive that info is required
+ * @param aInfo For storing drive info
+ */
+ IMPORT_C void GetDriveInfoL(
+ const TInt aDrive, TFileManagerDriveInfo& aInfo ) const;
+
+ /**
+ * Gets restore info array
+ * @since 3.1
+ * @param aArray For storing restore info
+ * @param aDrive For getting info from specific drive
+ */
+ IMPORT_C void GetRestoreInfoArrayL(
+ RArray< CFileManagerRestoreSettings::TInfo >& aArray,
+ const TInt aDrive = KErrNotFound ) const;
+
+ /**
+ * Checks if any ejectable drive is present
+ * @since 3.1
+ * @return ETrue if present, otherwise EFalse
+ */
+ IMPORT_C TBool AnyEjectableDrivePresent() const;
+
+ /**
+ * Ensures that contents of a directory are up to date
+ * including remote drives when current view is updated
+ * @since 3.1
+ */
+ IMPORT_C void ForcedRefreshDirectory();
+
+ /**
+ * Calculates the total size of given items
+ * @since 3.2
+ * @param aIndexList List of indexes from current directory
+ * @return Total size
+ */
+ IMPORT_C TInt64 GetFileSizesL(
+ const CArrayFixFlat< TInt >& aIndexList );
+
+ /**
+ * Gets navigation level, the depth of backstep stack
+ * @since 3.2
+ * @return The navigation level
+ */
+ IMPORT_C TInt NavigationLevel() const;
+
+ /**
+ * Gets drive name and letter as combined formatted text.
+ * @since 5.0
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aTextIdForDefaultName TextId of default name format string
+ * @param aTextIdForName TextId of name format string
+ * @return Text containing drive letter and name
+ */
+ IMPORT_C HBufC* GetFormattedDriveNameLC(
+ const TInt aDrive,
+ const TInt aTextIdForDefaultName,
+ const TInt aTextIdForName = 0 ) const;
+
+ /**
+ * Returns info class of the item
+ * @since 5.0
+ * @param aIndex to current directory item
+ * @return class which contains all necessary data for info box, receiver must delete it
+ */
+ IMPORT_C CFileManagerItemProperties* GetItemInfoLC( const TInt aIndex );
+
+ /**
+ * Sets search string.
+ * @since 3.2
+ * @param aSearchString Search string
+ */
+ IMPORT_C void SetSearchStringL( const TDesC& aSearchString );
+
+ /**
+ * Sets search folder.
+ * @since 3.2
+ * @param aSearchString Search folder
+ */
+ IMPORT_C void SetSearchFolderL( const TDesC& aSearchFolder );
+
+ /**
+ * Sets the directory with backsteps.
+ * @since 3.2
+ * @param aDirectory New current directory
+ */
+ IMPORT_C void SetDirectoryWithBackstepsL( const TDesC& aDirectory );
+
+ /**
+ * Stores current navigation index.
+ * @since 3.2
+ * @param aIndex The index to current view index.
+ */
+ IMPORT_C void SetCurrentIndex( const TInt aIndex );
+
+ /**
+ * Sets the sort method of the engine
+ * @since 5.0
+ * @param aSortMethod TSortMethod, the sort method type
+ */
+ IMPORT_C void SetSortMethod( TSortMethod aSortMethod );
+
+ /**
+ * Gets the sort method of the engine
+ * @since 5.0
+ * @return TSortMethod, the sort method type
+ */
+ IMPORT_C CFileManagerEngine::TSortMethod SortMethod() const;
+
+ /**
+ * Re-sorts the current view
+ * @since 5.0
+ */
+ IMPORT_C void RefreshSort();
+
+ /**
+ * Gets the feature manager
+ * @since 3.2
+ */
+ IMPORT_C CFileManagerFeatureManager& FeatureManager() const;
+
+ /**
+ * Set server application exit observer
+ * @Param aObserver The ServerAppExit observer or NULL, ownership is not transferred
+ */
+ IMPORT_C void SetAppExitOb( MAknServerAppExitObserver* aObserver );
+
+ /**
+ * Deletes the backup archives selected using
+ * CFileManagerRestoreSettings::SetSelection() method.
+ * @since 5.0
+ */
+ IMPORT_C void DeleteBackupsL();
+
+ public:
+
+ /**
+ * Set whether the file is a sis file
+ * @Param aSisFile file is or not a sis file
+ */
+ void SetSisFile( TBool aSisFile );
+
+ /*
+ * Notice the ServerAppExit event
+ * @Param aReason the reason of the server application exit
+ */
+ void NoticeServerAppExit( TInt aReason );
+
+ /**
+ * Sets embedded app status
+ * @param aStatus ETrue if embedded app on, EFalse if not
+ */
+ void EmbeddedAppStatus( TBool aStatus );
+
+ /* MFileManagerWaitNote */
+ void ShowWaitDialogL( MAknBackgroundProcess& aProcess );
+
+ //CMGXFileManager& MGXFileManagerL();
+
+ RFs& Fs() const;
+
+ TBool HasAppRemoteDriveSupport( TUid aUid );
+
+ TBool IsRemoteDriveConnected( const TInt aDrive ) const;
+
+ TBool BackupFileExistsL( const TInt aDrive ) const;
+
+ // Ensures that drive info is refreshed on next update
+ void ClearDriveInfo();
+
+ // Cancels ongoing transfer
+ void CancelTransfer( const TDesC& aFullPath );
+
+ /**
+ * Gets the latest backup time
+ * @since 5.0
+ * @param aBackupTime Stores the latest backup time
+ * @return System wide error code
+ */
+ TInt LatestBackupTime( TTime& aBackupTime );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerEngine( RFs& aFs );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ // Adds current dir fullpath to given name, returns HBufC buffer which must be released
+ HBufC* AddFullPathLC( const TDesC& aName, const TBool aIsFolder );
+
+ // Sets file system event watcher for given path
+ void SetFileSystemEventL( const TDesC& aFullPath = KNullDesC );
+
+ // For checking mount state
+ TInt CheckDriveMountL( TInt aDrive ) const;
+
+ // For getting drive info
+ void GetDriveInfoL(
+ const TDesC& aPath, TFileManagerDriveInfo& aInfo ) const;
+
+ // Opens file
+ void OpenFileL( const TDesC& aFullPath );
+
+ // Opens directory
+ void OpenDirectoryL( const TDesC& aFullPath );
+
+ // Checks is current drive available
+ TBool CurrentDriveAvailable();
+
+ private:
+
+ // Own: General File List Model is used via this object.
+ CGflmNavigatorModel* iNavigator;
+
+ // Ref: For file operations
+ RFs& iFs;
+
+ // Normal or search state
+ TState iState;
+
+ // Own: String which was used in latest search
+ HBufC* iSearchString;
+
+ // Own: String which is used for search process
+ HBufC* iSearchProcessString;
+
+ // Own: AO for async GFLM refresh operation
+ CFileManagerRefresher* iRefresher;
+
+ // Ref: Handle to current observer
+ MFileManagerProcessObserver* iProcessObserver;
+
+ // Own: Handles file system events
+ CFileManagerFileSystemEvent* iFileSystemEvent;
+
+ // item name of current index, used to search current index
+ TFileName iCurrentItemName;
+
+ // Own: Folder size calculation
+ CFileManagerActiveSize* iActiveSize;
+
+ // Own: Checks drive notifications
+ CFileManagerFileSystemEvent* iDiskEvent;
+
+ // Own: Indicates if embedded application is on
+ TBool iEmbeddedApplicationOn;
+
+ // Own: MG2 update notification object
+ //CMGXFileManager* iMgxFileManager;
+
+ // Own: Compines services of couple classes
+ CFileManagerUtils* iUtils;
+
+ // Own: Used for item filtering
+ CFileManagerItemFilter* iItemFilter;
+
+ // Own: Used for handling memory card etc functinalities
+ CFileManagerRemovableDriveHandler* iRemovableDrvHandler;
+
+ // Own: Used for handling remote drive functinalities
+ CFileManagerRemoteDriveHandler* iRemoteDrvHandler;
+
+ // Own: Used for opening files
+ CFileManagerDocHandler* iDocHandler;
+
+ // Own: Used for backup settings
+ CFileManagerBackupSettings* iBackupSettings;
+
+ // Own: Used for restore settings
+ CFileManagerRestoreSettings* iRestoreSettings;
+
+ // Own: Indicates last drive available status
+ TBool iLastDriveAvailable;
+
+ // Own: Stores current drive info
+ TFileManagerDriveInfo iCurrentDriveInfo;
+
+ // Own: Indicates if current drive info is refreshed
+ TBool iCurrentDriveInfoRefreshed;
+
+ // Own: Indicates if wait dialog is on
+ TBool iWaitDialogOn;
+
+ // Own: Stores drive name
+ HBufC* iDriveName;
+
+ // Own: Navigation indices
+ RArray< TInt > iNavigationIndices;
+
+ // Own: Used for rename
+ CFileManagerActiveRename* iActiveRename;
+
+ // Own: Used for storing search folder
+ HBufC* iSearchFolder;
+
+ // Own: Indicates file system event status
+ TBool iFileSystemEventEnabled;
+
+ // Own: Indicates if drive added or changed update is postponed
+ TBool iDriveAddedOrChangedPostponed;
+
+ // Own: Manages runtime variated features
+ CFileManagerFeatureManager* iFeatureManager;
+
+ // Ref: Handle to current ServerAppExit observer
+ MAknServerAppExitObserver* iObserver;
+
+ //Own: Whether the file was a sis type
+ TBool iSisFile;
+ };
+
+#endif // CFILEMANAGERENGINE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerFeatureManager.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2007-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 manages the runtime variated features
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERFEATUREMANAGER_H
+#define C_FILEMANAGERFEATUREMANAGER_H
+
+#include <e32std.h>
+
+/**
+* This class manages the runtime variated features
+*
+* @lib FileManagerEngine.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CFileManagerFeatureManager) : public CBase
+ {
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerFeatureManager* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFileManagerFeatureManager();
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsDrmFullSupported() const;
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsHelpSupported() const;
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsIrdaSupported() const;
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsRemoteStorageFwSupported() const;
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsMmcPassWdSupported() const;
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsWesternVariant() const;
+
+ /**
+ * Checks if feature is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsMmcSwEjectSupported() const;
+
+ /**
+ * Checks if feature specified by TFileManagerFeatures is supported
+ * @since 3.2
+ */
+ IMPORT_C TBool IsFeatureSupported( TInt aFileManagerFeature ) const;
+
+ /**
+ * Checks if the application is in embedded mode
+ * @since 3.2
+ */
+ IMPORT_C TBool IsEmbedded() const;
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFeatureManager();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+private: // Data
+ TBool iDrmFullSupported;
+ TBool iHelpSupported;
+ TBool iIrdaSupported;
+ TBool iRemoteStorageFwSupported;
+ TBool iMmcPassWdSupported;
+ TBool iWesternVariant;
+ TBool iMmcSwEjectSupported;
+ TBool iEmbedded;
+ TInt iFileManagerFeatures;
+ };
+
+#endif // C_FILEMANAGERFEATUREMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerFileSystemIterator.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2002-2006 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: Goes through folder tree one item at time
+*
+*/
+
+
+#ifndef CFILEMANAGERFILESYSTEMITERATOR_H
+#define CFILEMANAGERFILESYSTEMITERATOR_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include "Mfilemanageritemiterator.h"
+
+
+class CFileManagerEngine;
+
+/**
+* Goes through all the folder items of given folder. Implements the
+* MFileManagerItemIterator.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerFileSystemIterator) :
+ public CBase,
+ public MFileManagerItemIterator
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerFileSystemIterator* NewL(
+ RFs& aFs,
+ const TDesC& aSrcDir,
+ const TDesC& aDstDir,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFileSystemIterator();
+
+ public: // From MFileManagerItemIterator
+ void CurrentL(
+ HBufC** aSrc, HBufC** aDst, TFileManagerTypeOfItem& aItemType );
+
+ TBool NextL();
+
+ public:
+
+ /**
+ * returns localized path
+ * @since 2.0
+ * @return reference to localized path string
+ */
+ TPtrC LocalizedAbbreviatedPath();
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFileSystemIterator(
+ const TDesC& aDstDir, CFileManagerEngine& aEngine );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( RFs& aFs, const TDesC& aSrcDir );
+
+ private:
+ // Own: With this folders are scan through
+ CDirScan* iDirScan;
+
+ // Own: CDirScan returns this, contains one folder content at time
+ CDir* iDir;
+
+ // Index to current CDir array item which is processed
+ TInt iCount;
+
+ // Own: Current item source fullpath
+ // reserved here so that caller can then use this via reference
+ HBufC* iSrc;
+
+ // Own: Current item destination fullpath
+ // reserved here so that caller can then use this via reference
+ HBufC* iDst;
+
+ // Ref: Destination directory
+ const TDesC& iDstDir;
+
+ // Set when all folders are gone through
+ TBool iFolderScanDone;
+
+ // Own: Source directory
+ HBufC* iSrcDir;
+
+ // Ref: File Manager engine
+ CFileManagerEngine& iEngine;
+
+ // Own: Localized Abbreviated Path
+ TFileName iLocalizedAbbreviatedPath;
+
+ };
+
+#endif // CFILEMANAGERFILESYSTEMITERATOR_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerFolderEntry.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2002-2006 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: Holds one default folder entry
+*
+*/
+
+
+#ifndef CFILEMANAGERFOLDERENTRY_H
+#define CFILEMANAGERFOLDERENTRY_H
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class TResourceReader;
+
+/**
+* One default folder entry.
+* Contains fullpath of the default folder and information
+* is it media folder or nor.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerFolderEntry) : public CBase
+ {
+ public:
+ /**
+ * Two-phased constructors.
+ */
+ static CFileManagerFolderEntry* NewLC( TResourceReader& aReader );
+
+ static CFileManagerFolderEntry* NewL( TResourceReader& aReader );
+
+ static CFileManagerFolderEntry* NewLC(
+ const TInt aDrive, const TDesC& aPath );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFolderEntry();
+ public: // New functions
+
+ /**
+ * Is the default folder media folder or not
+ * @since 2.0
+ * @return ETrue if default folder is media folder, EFalse if not
+ */
+ TBool IsMediaFolder() const;
+
+ /**
+ * Returns reference to full path information of default folder
+ * @since 2.0
+ * @return Reference to default folder full path descriptor.
+ */
+ TPtrC Name() const;
+
+ /**
+ * Used for sorting folder entries
+ * @since 3.2
+ * @param aFirst Reference to the first folder entry
+ * @param aSecond Reference to the second folder entry
+ * @return Comparison result.
+ */
+ static TInt CompareSort(
+ const CFileManagerFolderEntry& aFirst,
+ const CFileManagerFolderEntry& aSecond );
+
+ /**
+ * Used for finding folder from sorted entries
+ * @since 3.2
+ * @param aPath Path to find
+ * @param aItem Reference to the folder entry
+ * @return Comparison result.
+ */
+ static TInt CompareFind(
+ const TDesC* aPath,
+ const CFileManagerFolderEntry& aItem );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFolderEntry();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructFromResourceL( TResourceReader& aReader);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TInt aDrive, const TDesC& aPath );
+
+ private: // Date
+ // Own: Full path information of default folder
+ HBufC* iName;
+
+ // Is the default folder media folder
+ TBool iIsMediaFolder;
+
+ };
+
+
+#endif // CFILEMANAGERFOLDERENTRY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerIRReceiver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2002-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: Receives obex object via InfraRed, used to receive files
+*
+*/
+
+
+
+#ifndef CFILEMANAGERIRRECEIVER_H
+#define CFILEMANAGERIRRECEIVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <obex.h>
+
+// FORWARD DECLARATIONS
+class CObexServer;
+class CObexBufObject;
+class MFileManagerProcessObserver;
+class CFileManagerEngine;
+
+// CLASS DECLARATION
+/**
+* Handles the file receiving via infrared
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerIRReceiver) : public CBase,
+ public MObexServerNotify
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ IMPORT_C static CFileManagerIRReceiver* NewL(
+ MFileManagerProcessObserver& aObserver,
+ const TDesC& aPath,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CFileManagerIRReceiver();
+
+ /**
+ * Receives file through IR and stores it to
+ * iPath location. Filename is get from
+ * sent file and not included in iPath.
+ */
+ IMPORT_C void ReceiveFileL();
+
+ /**
+ * Stops receive process and discards all received data.
+ */
+ IMPORT_C void StopReceiving();
+
+ public: // From MObexServerNotify
+ /**
+ * @see MObexServerNotify
+ */
+ void ErrorIndication (TInt aError);
+ /**
+ * @see MObexServerNotify
+ */
+ void TransportUpIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ void TransportDownIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ TBool TargetHeaderReceived(TDesC8& aTargetHeader);
+ /**
+ * @see MObexServerNotify
+ */
+ TInt ObexConnectIndication(
+ const TObexConnectInfo& aRemoteInfo, const TDesC8& aInfo );
+ /**
+ * @see MObexServerNotify
+ */
+ void ObexDisconnectIndication (const TDesC8& aInfo);
+ /**
+ * @see MObexServerNotify
+ */
+ CObexBufObject* PutRequestIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ TInt PutPacketIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ TInt PutCompleteIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ CObexBufObject* GetRequestIndication(
+ CObexBaseObject* aRequiredObject );
+ /**
+ * @see MObexServerNotify
+ */
+ TInt GetPacketIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ TInt GetCompleteIndication ();
+ /**
+ * @see MObexServerNotify
+ */
+ TInt SetPathIndication(
+ const CObex::TSetPathInfo& aPathInfo, const TDesC8& aInfo );
+ /**
+ * @see MObexServerNotify
+ */
+ void AbortIndication ();
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerIRReceiver(
+ MFileManagerProcessObserver& aObserver,
+ CFileManagerEngine& aEngine,
+ RFs& aFs );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TDesC& aPath );
+
+ /**
+ * Resets inactivity timer.
+ */
+ void ResetInactivityTimer();
+
+ /**
+ * Stops inactivity timer.
+ */
+ void StopInactivityTimer();
+
+ /**
+ * Handles inactivity timeout.
+ */
+ static TInt InactivityTimeout( TAny* aPtr );
+
+ /**
+ * Closes connection on timeout.
+ */
+ void CloseConnection();
+
+ private:
+ // Caller is informed about starting and stopping of the process. Also
+ // the processed percentage is updated with this observer.
+ MFileManagerProcessObserver& iObserver;
+
+ // Own: Handles the obex object transfer
+ CObexServer* iObexServer;
+
+ // Own: Obex object of the received file
+ CObexBufObject* iObexBufObject;
+
+ // Own: Destination directory where the received file will be stored
+ HBufC* iTempFile;
+
+ // Ref. For checking file exists situation
+ CFileManagerEngine& iEngine;
+
+ // Error code
+ TInt iError;
+
+ // Is disk space already checked
+ TBool iDiskSpaceChecked;
+
+ // is there enought space
+ TBool iEnoughSpace;
+
+ // Ref: File server session
+ RFs& iFs;
+
+ // Own: temp buffer
+ CBufFlat* iBuffer;
+
+ // Own: Inactivity timer
+ CPeriodic* iInactivityTimer;
+
+ };
+
+#endif // CFILEMANAGERIRRECEIVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerItemFilter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,107 @@
+/*
+* 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: Filter GFLM items
+*
+*/
+
+
+#ifndef C_FILEMANAGERITEMFILTER_H
+#define C_FILEMANAGERITEMFILTER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include "MGflmItemFilter.h"
+
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+
+// CLASS DECLARATION
+/**
+* This class handles GFLM item filtering
+*
+* @lib FileManagerEngine.lib
+* @since 3.1
+*/
+NONSHARABLE_CLASS(CFileManagerItemFilter) : public CBase,
+ public MGflmItemFilter
+ {
+
+public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerItemFilter* NewL( CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFileManagerItemFilter();
+
+public: // From MGflmItemFilter
+ /**
+ * @see MGflmItemFilter
+ */
+ TBool FilterItemL(
+ CGflmGroupItem* aItem, TInt aGroupId, CGflmDriveItem* aDrive );
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerItemFilter( CFileManagerEngine& aEngine );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+private: // Data
+ /**
+ * Reference to file manager engine
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * For file name handling
+ */
+ TFileName iFileNameBuffer;
+
+ /**
+ * Contains phone memory root path
+ * Own.
+ */
+ HBufC* iPhoneMemoryRootPath;
+
+ /**
+ * Contains phone memory default name
+ * Own.
+ */
+ HBufC* iInternalDefaultName;
+
+ /**
+ * Contains memory card default name
+ * Own.
+ */
+ HBufC* iRemovableDefaultName;
+
+ };
+
+#endif // C_FILEMANAGERITEMFILTER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerItemProperties.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2002-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: Holds item information
+*
+*/
+
+
+
+#ifndef CFILEMANAGERITEMPROPERTIES_H_
+#define CFILEMANAGERITEMPROPERTIES_H_
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+
+// FORWARD DECLARATIONS
+class CFileManagerActiveSize;
+class CFileManagerUtils;
+class CFileManagerActiveCount;
+class CGflmGroupItem;
+class CFileManagerEngine;
+
+/**
+* Engine gathers the item information to this object.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerItemProperties) : public CBase
+ {
+ public:
+ /* Bitmask bits of the item types */
+ enum TFileManagerFileType
+ {
+ ENotDefined = 0x00,
+ EFolder = 0x01,
+ EDefault = 0x02,
+ EMedia = 0x04,
+ EFile = 0x08,
+ EForwardLocked = 0x10,
+ EPlaylist = 0x20,
+ ELink = 0x40,
+ EOpen = 0x80,
+ EReadOnly = 0x100,
+ EDrmProtected = 0x200,
+ EDrmLocalDataFile = 0x400
+ };
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerItemProperties* NewL(
+ const TDesC& aFullPath,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerItemProperties* NewL(
+ const CGflmGroupItem& aItem,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CFileManagerItemProperties();
+
+ public:
+
+ /**
+ * Gets the name of the item
+ * @since 2.7
+ * @return Name of the item, file name without extension
+ * or directory name
+ */
+ IMPORT_C TPtrC Name() const;
+
+ /**
+ * Gets the item modification time (universal time)
+ * @since 2.7
+ * @return TTime when item was last modified
+ */
+ IMPORT_C TTime ModifiedDate() const;
+
+ /**
+ * Size of the item, size of the file or size of the dir
+ * @since 2.7
+ * @return Item size in bytes
+ */
+ IMPORT_C TInt64 SizeL();
+
+ /**
+ * Count of files in directory, subdirectories not included
+ * @since 2.7
+ * @return File count in dir, -1 if item is file
+ */
+ IMPORT_C TInt FilesContainedL();
+
+ /**
+ * Count of folders in directory,
+ * directories in subdirectories are not included
+ * @since 2.7
+ * @return Folder count in dir, -1 if item is file
+ */
+ IMPORT_C TInt FoldersContainedL();
+
+ /**
+ * Count of open files in directory
+ * @since 2.7
+ * @return count of open files in directory, -1 if item is file
+ */
+ IMPORT_C TInt OpenFilesL();
+
+ /**
+ * Returns item type information
+ * @since 2.7
+ * @return TFileManagerFileType information of item
+ */
+ IMPORT_C TUint32 TypeL();
+
+ /**
+ * Item extension
+ * @since 2.7
+ * @return File extension, empty if item is dir
+ */
+ IMPORT_C TPtrC Ext() const;
+
+ /**
+ * Fullpath of item, includes drive, path and name with extension
+ * @since 2.7
+ * @return fullpath
+ */
+ IMPORT_C TPtrC FullPath() const;
+
+ /**
+ * Gets the name of the item with extension
+ * @since 2.7
+ * @return Name of the item
+ */
+ IMPORT_C TPtrC NameAndExt() const;
+
+ /**
+ * Localized name of item if found, if not Name() is returned
+ * @since 2.7
+ * @return Localized name
+ */
+ IMPORT_C TPtrC LocalizedName() const;
+
+ /**
+ * Gets the item modification time (local time)
+ * @since 3.1
+ * @param aTime For local time
+ * @return Error code
+ */
+ IMPORT_C TInt ModifiedLocalDate( TTime& aTime ) const;
+
+ /**
+ * Checks if item contains any files or folders
+ * @since 3.1
+ * @return ETrue if contains any items, EFalse if not
+ */
+ IMPORT_C TBool ContainsAnyFilesOrFolders();
+
+ /**
+ * Gets MIME type of file
+ * @since 3.1
+ * @return MIME type
+ */
+ IMPORT_C TPtrC MimeTypeL();
+
+ /**
+ * Checks if item is a drive item
+ * @since 3.1
+ * @return ETrue if drive item, otherwise EFalse
+ */
+ IMPORT_C TBool IsDrive() const;
+
+ /**
+ * Gets drive name
+ * @since 3.1
+ * @return drive name
+ */
+ IMPORT_C TPtrC DriveName() const;
+
+ /**
+ * Checks if item is on remote drive
+ * @since 3.2
+ * @return ETrue if item on remote drive, otherwise EFalse
+ */
+ IMPORT_C TBool IsRemoteDrive() const;
+
+ /**
+ * Gets drive id
+ * @since 5.0
+ * @return Drive id
+ */
+ IMPORT_C TInt DriveId() const;
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerItemProperties(
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TDesC& aFullPath );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TDesC& aFullPath, const TEntry& aEntry );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const CGflmGroupItem& aItem );
+
+ // Counts file sizes in given folder
+ TInt64 FolderSizeL( const TDesC& aFullPath );
+
+ // Counts items in directory, given parameter defines the type of count
+ TInt CountItemsL(
+ const TFileManagerFileType& aType );
+
+ void EnsureEntryDataFetched() const;
+
+ void SetEntryData( const TEntry& aEntry ) const;
+
+ private:
+
+ // Own: Location in file system
+ HBufC* iFullPath;
+
+ // Size of the file in bytes. In case of folder, this is a sum of all items
+ // under the folder including the subfolders.
+ mutable TInt64 iSize;
+
+ // How many files are inside the folder, subfolders not counted
+ // In case of file this is undefined
+ TInt iFilesContained;
+
+ // How many folders are inside the folder, subfolders are not counted
+ // In case of file this is undefined
+ TInt iFoldersContained;
+
+ // How many open files are inside the folder
+ // In case of file this is undefined
+ TInt iOpenFiles;
+
+ // type of item, TFileManagerFileType bitmask
+ TUint32 iType;
+
+ // Own: Folder size calculation
+ CFileManagerActiveSize* iActiveSize;
+
+ // Own: Folder properties
+ CFileManagerActiveCount* iActiveCount;
+
+ // Item modification day, copied from items TEntry
+ mutable TTime iModified;
+
+ // Ref: Contains some useful common services, localizer, RFs...
+ CFileManagerUtils& iUtils;
+
+ // Ref: Contains some useful common services
+ CFileManagerEngine& iEngine;
+
+ enum TItemState // Internal state bit definitions
+ {
+ EItemDirectory = 0x1,
+ EItemDrive = 0x2,
+ EItemAction = 0x4,
+ EItemFile = 0x8,
+ EItemHasFilesOrFolders = 0x10,
+ EItemHasNoFilesOrFolders = 0x20,
+ EItemRemoteDrive = 0x40,
+ EItemEntryDataFetched = 0x80,
+ EItemNotFileOrDir = EItemDrive | EItemAction
+ };
+ // Internal item state bits, see above
+ mutable TUint32 iState;
+
+ // Own: Item name
+ HBufC* iName;
+
+ };
+
+
+
+#endif // CFILEMANAGERITEMPROPERTIES_H_
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerPropertySubscriber.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2006 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: Subscriber (Publish & Subscribe)
+*
+*/
+
+
+
+#ifndef CFILEMANAGERPROPERTYSUBSCRIBER_H
+#define CFILEMANAGERPROPERTYSUBSCRIBER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+#include "MFileManagerPropertyObserver.h"
+
+// CLASS DECLARATION
+/**
+* This class provides P&S event subscriber
+*
+* @lib FileManagerEngine.lib
+* @since 3.1
+*/
+NONSHARABLE_CLASS(CFileManagerPropertySubscriber) : public CActive
+{
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerPropertySubscriber* NewL(
+ MFileManagerPropertyObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerPropertySubscriber();
+
+ private:
+ CFileManagerPropertySubscriber(
+ MFileManagerPropertyObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey );
+
+ void ConstructL();
+
+ void Subscribe();
+
+ private: // from CActive
+ void RunL();
+
+ TInt RunError( TInt aError );
+
+ void DoCancel();
+
+ private:
+ // Ref: Reference to observer interface
+ MFileManagerPropertyObserver& iObserver;
+ // Own: PS handle
+ RProperty iProperty;
+ // Own: PS category Uid
+ TUid iCategory;
+ // Own: PS key id
+ TUint iKey;
+};
+
+#endif // CFILEMANAGERPROPERTYSUBSCRIBER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerRefresher.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2002-2006 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: Asynchronous refresher for CGflmNavigatorModel
+*
+*/
+
+
+#ifndef CFILEMANAGERREFRESHER_H
+#define CFILEMANAGERREFRESHER_H
+
+// INCLUDES
+#include <e32base.h>
+#include "GFLM.hrh"
+
+// FORWARD DECLARATIONS
+class CGflmNavigatorModel;
+class MFileManagerProcessObserver;
+
+// CLASS DECLARATION
+
+/**
+* This class start asynchronous refreshing of given CGflmNavigatorModel.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerRefresher) : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerRefresher* NewL( CGflmNavigatorModel& aModel );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFileManagerRefresher();
+
+ public: // New functions
+
+ /**
+ * Refreshes the model.
+ * @since 2.0
+ * @param aRefreshMode Given refresh mode.
+ */
+ void Refresh( TGflmRefreshMode aRefreshMode = ERefreshItems );
+
+ /**
+ * Sets observer
+ * @since 2.0
+ * @param aObserver Observer for the operation or NULL,
+ * ownership is not transferred.
+ */
+ void SetObserver( MFileManagerProcessObserver* aObserver );
+
+ /**
+ * Cancels refresh.
+ * @since 2.0
+ */
+ TBool CancelRefresh();
+
+ protected: // From CActive
+
+ void RunL();
+
+ TInt RunError( TInt aError );
+
+ void DoCancel();
+
+ private:
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerRefresher( CGflmNavigatorModel& aModel );
+
+ private: // Data
+
+ // Ref: Reference to the model instance that will be refreshed
+ CGflmNavigatorModel& iModel;
+
+ // Ref: Pointer to the observer that will be notified
+ MFileManagerProcessObserver* iObserver;
+
+ };
+
+#endif // CFILEMANAGERREFRESHER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerRemoteDriveHandler.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,150 @@
+/*
+* 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: Wraps remote drive functionality
+*
+*/
+
+
+#ifndef C_FILEMANAGERREMOTEDRIVEHANDLER_H
+#define C_FILEMANAGERREMOTEDRIVEHANDLER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "MFileManagerPropertyObserver.h"
+
+
+// FORWARD DECLARATIONS
+class CRsfwMountMan;
+class CFileManagerEngine;
+class CFileManagerPropertySubscriber;
+class CFileManagerUtils;
+
+
+// CLASS DECLARATION
+/**
+ * This class wraps remote drive functionality
+ *
+ * @lib FileManagerEngine.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS(CFileManagerRemoteDriveHandler) :
+ public CBase,
+ MFileManagerPropertyObserver
+ {
+
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerRemoteDriveHandler* NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerRemoteDriveHandler();
+
+public: // New functions
+ /**
+ * Gets remote drive connection state
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @return ETrue if connected. Otherwise EFalse.
+ */
+ TBool IsConnected( const TInt aDrive );
+
+ /**
+ * Connects or disconnects remote drive
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @return System wide error code.
+ */
+ TInt SetConnection( TInt aDrive, TBool aConnect );
+
+ /**
+ * Deletes remote drive settings
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @return System wide error code.
+ */
+ TInt DeleteSettings( const TInt aDrive );
+
+ /**
+ * Ensures that contents of a remote directory are up to date
+ * when directory is refreshed
+ * @param aFullPath Full path to remote directory
+ * @return error code.
+ */
+ TInt RefreshDirectory( const TDesC& aFullPath );
+
+ /**
+ * Checks does application have support for remote drives
+ * @param aUid Application uid
+ * @return ETrue if the app has support. Otherwise EFalse.
+ */
+ TBool HasAppRemoteDriveSupport( TUid aUid );
+
+ /**
+ * Cancels incoming or outgoing remote drive transfer
+ * @param aFullPath Full path to remote file or directory
+ */
+ void CancelTransfer( const TDesC& aFullPath );
+
+public: // From MFileManagerPropertyObserver
+ void PropertyChangedL( const TUid& aCategory, const TUint aKey );
+
+private:
+ /**
+ * Constructors
+ */
+ CFileManagerRemoteDriveHandler(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ void ConstructL();
+
+private: // Data
+ /**
+ * For remote drive mounting and state handling
+ * Own.
+ */
+ CRsfwMountMan* iMountMan;
+
+ /**
+ * Reference to file manager engine
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * Reference to utils
+ * Not own.
+ */
+ CFileManagerUtils& iUtils;
+
+ /**
+ * For PS subscribing
+ * Own.
+ */
+ CFileManagerPropertySubscriber* iSubscriber;
+
+ /**
+ * Indicates if remote drives are supported or not
+ */
+ TBool iRemoteStorageFwSupported;
+
+ };
+
+#endif // C_FILEMANAGERREMOTEDRIVEHANDLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerRemovableDriveHandler.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2006-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: Wraps removable drive functionality
+*
+*/
+
+
+#ifndef C_FILEMANAGERREMOVABLEDRIVEHANDLER_H
+#define C_FILEMANAGERREMOVABLEDRIVEHANDLER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include "MFileManagerProcessObserver.h"
+#include "MMMCScBkupEngineObserver.h"
+#include "CMMCScBkupArchiveInfo.h"
+#include "CFileManagerRestoreSettings.h"
+
+
+// FORWARD DECLARATIONS
+class CMMCScBkupEngine;
+class CFileManagerUtils;
+class CFileManagerEngine;
+class CBaBackupSessionWrapper;
+class CFileManagerBackupSettings;
+
+
+// CLASS DECLARATION
+/**
+* This class wraps removable drive functionality
+*
+* @lib FileManagerEngine.lib
+* @since S60 3.1
+*/
+NONSHARABLE_CLASS(CFileManagerRemovableDriveHandler) :
+ public CActive,
+ public MMMCScBkupEngineObserver
+ {
+
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerRemovableDriveHandler* NewL(
+ RFs& aFs,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor
+ */
+ virtual ~CFileManagerRemovableDriveHandler();
+
+public: // New methods
+ /**
+ * Sets process observer for memory card operations
+ * @param aObserver Pointer to observer or NULL,
+ * ownership is not transferred
+ */
+ void SetObserver( MFileManagerProcessObserver* aObserver );
+
+ /**
+ * Starts eject process
+ */
+ void StartEjectL();
+
+ /**
+ * Starts format process
+ * @param aDrive Drive number EDriveA...EDriveZ
+ */
+ void StartFormatL( const TInt aDrive );
+
+ /**
+ * Cancels ongoing process
+ */
+ void CancelProcess();
+
+ /**
+ * Checks does backup file exists
+ * @return ETrue if exists. Otherwise EFalse.
+ */
+ TBool BackupFileExistsL( const TInt aDrive );
+
+ /**
+ * Starts backup process
+ * @param aProcess Backup process to start
+ */
+ void StartBackupL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess );
+
+ /**
+ * Starts restore process
+ */
+ void StartRestoreL();
+
+ /**
+ * Gets restore info array
+ * @param aArray For storing restore info
+ * @param aDrive For getting info from specific drive
+ */
+ void GetRestoreInfoArrayL(
+ RArray< CFileManagerRestoreSettings::TInfo >& aArray,
+ const TInt aDrive );
+
+ /**
+ * Checks is process ongoing
+ */
+ TBool IsProcessOngoing() const;
+
+ /**
+ * Gets create time of the latest backup archive
+ * @param aBackupTime Stores the time
+ */
+ void LatestBackupTimeL( TTime& aBackupTime );
+
+ /**
+ * Deletes selected backups
+ */
+ void DeleteBackupsL();
+
+private: // From CActive
+ /**
+ * @see CActive
+ */
+ void DoCancel();
+
+ /**
+ * @see CActive
+ */
+ void RunL();
+
+ /**
+ * @see CActive
+ */
+ TInt RunError( TInt aError );
+
+private:
+ /**
+ * Constructors
+ */
+ CFileManagerRemovableDriveHandler(
+ RFs& aFs,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine );
+
+ void ConstructL();
+
+ /**
+ * For periodic eject scan
+ */
+ static TInt EjectScanAndShutdownApps( TAny* ptr );
+
+ /**
+ * For periodic eject scan
+ */
+ void DoEjectScanAndShutdownL();
+
+ /**
+ * For periodic eject scan
+ */
+ void EjectComplete( TInt aErr );
+
+ /**
+ * Gets backup file name
+ */
+ HBufC* BackupFileNameLC( TBool aFullPath ) const;
+
+ /**
+ * Starts eject scan
+ */
+ void StartEjectScanL();
+
+ void InformStartL( TInt aTotalCount );
+
+ void InformUpdateL( TInt aCount );
+
+ void InformFinishL( );
+
+ void InformError( TInt aErr );
+
+ void StartFormatProcessL();
+
+ void EndFormatProcessL( TInt aErr );
+
+ void CloseAppsL();
+
+ void RestartAppsL();
+
+ static void ResetAndDestroyArchives( TAny* aPtr );
+
+ static TUint32 BkupToFmgrMask( const TUint32 aBkupMask );
+
+ static TUint32 FmgrToBkupMask( const TUint32 aFmrgMask );
+
+ void PublishBurStatus( TInt aType );
+
+ TBool IsInternalMassStorage( TInt aDrive );
+
+ void StoreVolumeNameL( TInt aDrive );
+
+ void RestoreVolumeNameL( TInt aDrive );
+
+ void ListArchivesL(
+ RPointerArray< CMMCScBkupArchiveInfo >& aArchives,
+ const CFileManagerBackupSettings& aBackupSettings );
+
+private: // From MMMCScBkupEngineObserver
+ TInt HandleBkupEngineEventL(
+ MMMCScBkupEngineObserver::TEvent aEvent, TInt aAssociatedData );
+
+private: // Data
+ /**
+ * Backup engine
+ * Own.
+ */
+ CMMCScBkupEngine* iBkupEngine;
+
+ /**
+ * Pointer to observer
+ * Not own.
+ */
+ MFileManagerProcessObserver* iObserver;
+
+ /**
+ * Observed process
+ */
+ MFileManagerProcessObserver::TFileManagerProcess iProcess;
+
+ /**
+ * For file operations
+ * Not own.
+ */
+ RFs& iFs;
+
+ /**
+ * For utility access
+ * Not own.
+ */
+ CFileManagerUtils& iUtils;
+
+ /**
+ * For file manager engine access
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * Last process error
+ */
+ TInt iLastError;
+
+ /**
+ * Final progress value
+ */
+ TInt iFinalValue;
+
+ /**
+ * For timed eject scanning steps
+ * Own.
+ */
+ CPeriodic* iEjectScanPeriodic;
+
+ /**
+ * For eject scan round counting
+ */
+ TInt iEjectScanRounds;
+
+ /**
+ * Indicates if backup or restore is in progress
+ */
+ TBool iBackupRestoreInprogress;
+
+ /**
+ * For formatting drives
+ */
+ RFormat iFormatter;
+
+ /**
+ * For keeping track of formatting process progress
+ */
+ TPckgBuf< TInt > iFormatCountBuf;
+
+ /**
+ * For closing and restarting open files while formatting
+ */
+ CBaBackupSessionWrapper* iBSWrapper;
+
+ /**
+ * Target drive of the process
+ */
+ TInt iDrive;
+
+ };
+
+#endif // C_FILEMANAGERREMOVABLEDRIVEHANDLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerRestoreSettings.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,146 @@
+/*
+* 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: Restore settings
+*
+*/
+
+
+#ifndef C_FILEMANAGERBACKUPARRAY_H
+#define C_FILEMANAGERBACKUPARRAY_H
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <badesca.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+
+// CLASS DECLARATION
+/**
+ * This class is used for storing restore settings
+ *
+ * @lib FileManagerEngine.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS(CFileManagerRestoreSettings) : public CBase,
+ public MDesCArray
+ {
+
+public:
+ /** Restore icon type */
+ enum TIconId
+ {
+ EIconCheckBoxOn = 0,
+ EIconCheckBoxOff,
+ EIconMemoryCard,
+ EIconUsbMemory
+ };
+
+ /** Restore info */
+ NONSHARABLE_CLASS(TInfo)
+ {
+ public:
+ TUint32 iContent;
+ TTime iTime;
+ TInt iDrive;
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerRestoreSettings* NewL(
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerRestoreSettings();
+
+ /**
+ * Sets restore selection
+ *
+ * @since S60 3.1
+ */
+ IMPORT_C void SetSelection( const TUint64& aSelection );
+
+ /**
+ * Refreshes restore settings
+ *
+ * @since S60 3.1
+ */
+ IMPORT_C void RefreshL();
+
+ /**
+ * Gets restore selection
+ *
+ * @since S60 3.1
+ */
+ void GetSelectionL( RArray< TInfo >& aInfoArray ) const;
+
+public: // From MDesCArray
+ TInt MdcaCount() const;
+
+ TPtrC MdcaPoint( TInt aIndex ) const;
+
+private:
+ /** Restore setting entry */
+ NONSHARABLE_CLASS(CEntry) : public CBase
+ {
+ public:
+ ~CEntry();
+
+ HBufC* iText;
+ TInfo iInfo;
+ };
+
+private:
+ /**
+ * Constructors
+ */
+ CFileManagerRestoreSettings( CFileManagerEngine& aEngine );
+
+ void ConstructL();
+
+ /**
+ * Creates a new restore setting entry
+ */
+ CEntry* CreateEntryLC( const TInfo& aInfo );
+
+ static HBufC* DateTimeStringLC( const TTime& aTime );
+
+private: // Data
+ /**
+ * Restore setting entries
+ */
+ RPointerArray< CEntry > iList;
+
+ /**
+ * Reference to file manager engine
+ * Not own.
+ */
+ CFileManagerEngine& iEngine;
+
+ /**
+ * Restore selection
+ */
+ TUint64 iSelection;
+
+ };
+
+#endif // C_FILEMANAGERBACKUPARRAY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerThreadWrapper.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* 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: Background thread functionality wrapper
+*
+*/
+
+
+
+#ifndef CFILEMANAGERTHREADWRAPPER_H
+#define CFILEMANAGERTHREADWRAPPER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "MFileManagerThreadFunction.h"
+
+
+// CLASS DECLARATION
+/**
+* The class implements a background thread functionality wrapper
+*
+* @lib FileManagerEngine.lib
+* @since 3.1
+*/
+NONSHARABLE_CLASS(CFileManagerThreadWrapper) : public CActive
+ {
+ public:
+ static CFileManagerThreadWrapper* NewL();
+
+ ~CFileManagerThreadWrapper();
+
+ public: // New functions
+ /**
+ * Starts background thread. Can be used only by client thread.
+ * @since 3.1
+ * @param aFunction Reference to background thread abstraction.
+ * @param aPriority background thread priority
+ * @param aNotify client notify flags
+ * see MFileManagerThreadFunction::TNotifyType
+ * @return System wide error code
+ */
+ TInt StartThread(
+ MFileManagerThreadFunction& aFunction,
+ TUint aNotify,
+ TThreadPriority aPriority );
+
+ /**
+ * Cancels background thread.
+ * Background thread is exited when ongoing ThreadStepL is finished.
+ * Can be used only by client thread.
+ * @since 3.1
+ */
+ void CancelThread();
+
+ /**
+ * Checks if background thread has been canceled.
+ * Can be used by both client and background threads.
+ * E.g. checks can be done inside long running ThreadStepL.
+ * @since 3.1
+ * @return ETrue if canceled, otherwise EFalse
+ */
+ TBool IsThreadCanceled() const;
+
+ /**
+ * Resumes thread when called after error or step finished
+ * notification. Can only be used by client thread.
+ * @since 3.2
+ */
+ void ResumeThread();
+
+ /**
+ * Checks if thread has been started
+ * notification. Can only be used by client thread.
+ * @since 3.2
+ * @return ETrue if started, otherwise EFalse
+ */
+ TBool IsThreadStarted() const;
+
+ private: // From CActive
+ void RunL();
+
+ TInt RunError( TInt aErr );
+
+ void DoCancel();
+
+ private:
+ CFileManagerThreadWrapper();
+
+ void ConstructL();
+
+ static TInt ThreadFunction( TAny* ptr );
+
+ void ThreadFunctionL();
+
+ TInt NotifyClientAndWaitConfirm( TInt aErr );
+
+ void DoNotifyL( TInt aErr );
+
+ NONSHARABLE_CLASS(CNotifyObserver) : public CActive
+ {
+ public:
+ static CNotifyObserver* NewL(
+ CFileManagerThreadWrapper& aWrapper );
+
+ ~CNotifyObserver();
+
+ void Activate();
+
+ void Complete( RThread& aThread, TInt aResult );
+
+ private: // From CActive
+ void RunL();
+
+ TInt RunError( TInt aErr );
+
+ void DoCancel();
+
+ private:
+ CNotifyObserver( CFileManagerThreadWrapper& aWrapper );
+
+ private:
+ CFileManagerThreadWrapper& iWrapper;
+ };
+
+ private: // Data
+ // Own: For synchronising client and background thread
+ RSemaphore iSemaphore;
+ // Own: Client thread id
+ TThreadId iClientId;
+ // Ref: Pointer to thread function
+ MFileManagerThreadFunction* iFunction;
+ // Own: Client notify type flags, Client writes and thread only reads
+ TUint iNotify;
+ // Own: Thread cancel indicator, Client writes and thread only reads
+ TBool iCancel;
+ // Own: Observer wrapper to notify client about thread events
+ CNotifyObserver* iNotifyObserver;
+ // Own: Thread resume pending indicator, Client reads and writes
+ TBool iResumePending;
+ };
+
+#endif // CFILEMANAGERTHREADWRAPPER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFileManagerUtils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,409 @@
+/*
+* Copyright (c) 2002-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: Util methods for File Manager
+*
+*/
+
+
+
+#ifndef CFILEMANAGERUTILS_H
+#define CFILEMANAGERUTILS_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <f32file.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerMimeIconArray;
+class CFileManagerFolderArray;
+class CCommonContentPolicy;
+class CGflmNavigatorModel;
+class CGflmGroupItem;
+#if defined( __KEEP_DRM_CONTENT_ON_PHONE ) && defined ( FILE_MANAGER_USE_DISTRIBUTABLECHECKER )
+ class CDistributableChecker;
+#endif // __KEEP_DRM_CONTENT_ON_PHONE && FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+class CFileManagerFeatureManager;
+
+
+/**
+*
+* Collection of utility functions for file manager
+*
+* @lib FileManagerEngine.lib
+* @since 2.7
+*/
+NONSHARABLE_CLASS(CFileManagerUtils) : public CBase
+ {
+ public:
+ /**
+ * Two-phased constructors.
+ */
+ static CFileManagerUtils* NewL(
+ RFs& aFs,
+ CGflmNavigatorModel& aNavigator,
+ CFileManagerFeatureManager& aFeatureManager );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerUtils();
+ public: // New functions
+
+ /**
+ * Gets the reference to open file server session
+ * @since 2.7
+ * @return reference to open file server session
+ */
+ RFs& Fs() const;
+
+ /**
+ * Checks is given file forward locked
+ * @since 2.7
+ * @param aFullPath file name with full path
+ * @return ETrue if file is forward locked, EFalse if not.
+ */
+ TBool IsForwardLockedFile( const TDesC& aFullPath );
+
+ /**
+ * Checks is given file drm protected
+ * @since 2.7
+ * @param aFullPath file name with full path
+ * @return ETrue if file is drm protected, EFalse if not.
+ */
+ TBool IsDrmProtectedFile( const TDesC& aFullPath) const;
+
+ /**
+ * Gets the icon id of the item
+ * @since 2.7
+ * @param aFullPath Item with full path information
+ * @return Icon id of the item. If not found other icon id is used.
+ */
+ TInt ResolveIconL( const TDesC& aFullPath ) const;
+
+ /**
+ * Checks is given folder a default folder
+ * @since 2.7
+ * @param aFullPath Item with full path information
+ * @return ETrue if folder is default folder, EFalse if not.
+ */
+ TBool DefaultFolder( const TDesC& aFullPath ) const;
+
+ /**
+ * Checks is given file drm local data file (LDF)
+ * @since 3.1
+ * @param aFullPath file name with full path
+ * @return ETrue if file is local data file, EFalse if not.
+ */
+ TBool IsDrmLocalDataFile( const TDesC& aFullPath ) const;
+
+ /**
+ * Checks given item that can it be deleted.
+ * @since 3.1
+ * @param aFullPath full path to item which is checked
+ * @returns ETrue if item can be deleted, EFalse if not
+ */
+ TBool CanDelete( const TDesC& aFullPath ) const;
+
+ /**
+ * Returns the type of given item in CFileManagerItemProperties bitmask
+ * @since 3.1
+ * @param aFullPath full path to item
+ * @return CFileManagerItemProperties bitmask
+ */
+ TUint32 FileTypeL( const TDesC& aFullPath );
+
+ /**
+ * Gets the icon id of the item
+ * @since 3.1
+ * @param aItem GFLM struct of the item
+ * @return Icon id of the item. If not found other icon id is returned.
+ */
+ TInt ResolveIconL( CGflmGroupItem& aItem ) const;
+
+ /**
+ * Checks does given folder have any items with specified attributes
+ * @since 3.1
+ * @param aFs open file server session
+ * @param aFullPath folder name with full path
+ * @param aAttMask attribute mask
+ * @return ETrue if folder has any specified items, EFalse if not.
+ */
+ static TBool HasAny(
+ RFs& aFs, const TDesC& aFullPath, TUint aAttMask );
+
+ /**
+ * Checks does given folder has any subfolder
+ * @since 3.1
+ * @param aFullPath folder name with full path
+ * @return ETrue if folder has any subfolders, EFalse if not.
+ */
+ TBool HasSubFolders( const TDesC& aFullPath ) const;
+
+ /**
+ * Checks does given folder has any files
+ * @since 3.1
+ * @param aFullPath folder name with full path
+ * @return ETrue if folder has any files, EFalse if not.
+ */
+ TBool HasFiles( const TDesC& aFullPath ) const;
+
+ /**
+ * Create default folders
+ * @since 3.2
+ * @param aDrive Drive which default folders are created
+ * @param aForced Selects forced or normal creation
+ */
+ void CreateDefaultFolders(
+ const TInt aDrive, const TBool aForced = ETrue ) const;
+
+ /**
+ * Checks is path located in remote drive
+ * @since 3.1
+ * @param aPath path to check
+ * @return ETrue if remote drive. Otherwise EFalse.
+ */
+ TBool IsRemoteDrive( const TDesC& aPath ) const;
+
+ /**
+ * Determine if given file must be protected (kept on the device)
+ * @since 3.1
+ * @param aFullPath file to check
+ * @param aIsProtected for storing result
+ * @return System wide error code
+ */
+ TInt IsDistributableFile( const TDesC& aFullPath,
+ TBool& aIsProtected );
+
+ /**
+ * Gets MIME type of file
+ * @since 3.1
+ * @return MIME type
+ */
+ TPtrC MimeTypeL( const TDesC& aFullPath ) const;
+
+ /**
+ * Gets drive id array with specified attribute mask
+ * @since 3.2
+ * @param aDrives array for ids
+ * @param aAttMask drive attribute match mask
+ */
+ void DriveList(
+ RArray< TInt >& aDrives, const TInt aAttMask ) const;
+
+ /**
+ * Checks is drive removable
+ * @since 3.2
+ * @param aPath path to check
+ * @return ETrue if removable drive. Otherwise EFalse
+ */
+ TBool IsRemovableDrive( const TDesC& aPath ) const;
+
+ /**
+ * Gets item full path
+ * @since 3.2
+ * @param aDir Parent directory path
+ * @param aEntry File system entry
+ * @param aFullPath Full path to item
+ */
+ static void GetFullPath(
+ const TDesC& aDir, const TEntry& aEntry, TDes& aFullPath );
+
+ /**
+ * Removes final backslash if exists
+ * @since 3.2
+ * @param aPath Directory path
+ * @return Pointer without backslash
+ */
+ IMPORT_C static TPtrC StripFinalBackslash( const TDesC& aPath );
+
+ /**
+ * Ensures final backslash exists
+ * @since 3.2
+ * @param aPath Directory path
+ */
+ IMPORT_C static void EnsureFinalBackslash( TDes& aPath );
+
+ /**
+ * Removes all directional chars if exist
+ * @since 3.2
+ * @param aText The text
+ * @return Pointer to cleaned up text, ownership is transferred
+ */
+ static HBufC* StripDirectionalCharsLC( const TDesC& aText );
+
+ /**
+ * Checks if final backslash exist
+ * @since 3.2
+ * @param aPath Directory path
+ */
+ IMPORT_C static TBool HasFinalBackslash( const TDesC& aPath );
+
+ /**
+ * Checks if file is copied/moved from internal to removable drive
+ * @since 3.2
+ * @param aFs Open file server session
+ * @param aSrcPath Source directory path
+ * @param aDstPath Destination directory path
+ * @return ETrue if from internal to removable, otherwise EFalse
+ */
+ IMPORT_C static TBool IsFromInternalToRemovableDrive(
+ RFs& aFs, const TDesC& aSrcPath, const TDesC& aDstPath );
+
+ /**
+ * Removes read only attribute if it is set for given item
+ * @since 3.2
+ * @param aFs Open file server session
+ * @param aFullPath Full path of the item
+ * @param aEntry Entry data of the item
+ * @return System wide error code
+ */
+ static TInt RemoveReadOnlyAttribute(
+ RFs& aFs, const TDesC& aFullPath, const TEntry& aEntry );
+
+ /**
+ * Removes read only attribute if it is set for given item
+ * @since 3.2
+ * @param aFs Open file server session
+ * @param aFullPath Full path of the item
+ * @return System wide error code
+ */
+ static TInt RemoveReadOnlyAttribute(
+ RFs& aFs, const TDesC& aFullPath );
+
+ /* Drive name layouts for selecting the most suitable text */
+ enum TDriveNameLayout
+ {
+ EMainLayout = 0,
+ ETitleLayout,
+ ELayoutCount // Must be the last
+ };
+
+ /**
+ * Gets drive name and letter as combined single text.
+ * @since 5.0
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aLayout Text layout. See TDriveNameLayout.
+ * @return Text containing drive letter and name
+ */
+ HBufC* GetDriveNameL(
+ const TInt aDrive,
+ const TDriveNameLayout aLayout ) const;
+
+ /**
+ * Gets drive name and letter as combined formatted text.
+ * @since 5.0
+ * @param aDrive Drive number EDriveA...EDriveZ
+ * @param aTextIdForDefaultName TextId of default name format string
+ * @param aTextIdForName TextId of name format string
+ * @return Text containing drive letter and name
+ */
+ HBufC* GetFormattedDriveNameLC(
+ const TInt aDrive,
+ const TInt aTextIdForDefaultName,
+ const TInt aTextIdForName ) const;
+
+ /**
+ * Checks is path located in remote drive
+ * @since 3.2
+ * @param aFs Open file server session
+ * @param aPath path to check
+ * @return ETrue if remote drive, otherwise EFalse
+ */
+ IMPORT_C static TBool IsRemoteDrive( RFs& aFs, const TDesC& aPath );
+
+ /**
+ * Returns localized name of the given item
+ * @since 3.2
+ * @param aFullPath full path to item which is checked
+ * @returns TPtrC reference to localized name,
+ * KNullDesC if no localization is used
+ */
+ TPtrC LocalizedName( const TDesC& aFullPath ) const;
+
+ /**
+ * Checks is name found, the comparison includes localized folder names
+ * @since 3.2
+ * @param aFullPath full path to item which is checked
+ * @returns ETrue if name is found, otherwise EFalse.
+ */
+ TBool IsNameFoundL( const TDesC& aFullPath ) const;
+
+ /**
+ * Flush Cache
+ */
+ void FlushCache() const;
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerUtils(
+ RFs& aFs,
+ CGflmNavigatorModel& aNavigator,
+ CFileManagerFeatureManager& aFeatureManager );
+
+ void ConstructL();
+
+ static void IsFlkOrLdfFileL(
+ const TDesC& aFullPath, TBool& aIsFlk, TBool& aIsLdf );
+
+ static TBool IsInternalDrive( RFs& aFs, const TInt aDrive );
+
+ CDesCArray* GetDriveNameArrayLC(
+ const TInt aDrive,
+ TUint& aDriveStatus ) const;
+
+ static TBool IsDrive(
+ RFs& aFs, const TDesC& aPath, const TUint aAttMask );
+
+ static TBool IsDrive(
+ RFs& aFs, const TInt aDrive, const TUint aAttMask );
+
+ private:
+
+ // Ref: reference to open file server session
+ RFs& iFs;
+
+ //Own: List of default folders
+ CFileManagerFolderArray* iDefaultFolders;
+
+ // Own: Handle to common content policy service to find
+ // out is file in a Closed Content List or forward locked
+ CCommonContentPolicy* iCommonContentPolicy;
+
+ // Own: Mime icon mapper
+ CFileManagerMimeIconArray* iMimeIconMapper;
+
+ // Ref: GFLM navigator instance
+ CGflmNavigatorModel& iNavigator;
+
+#if defined( __KEEP_DRM_CONTENT_ON_PHONE ) && defined ( FILE_MANAGER_USE_DISTRIBUTABLECHECKER )
+ // Own: content protection checking
+ CDistributableChecker* iDistributableChecker;
+#endif // __KEEP_DRM_CONTENT_ON_PHONE && FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+
+ // Flag to indicate if feature is supported
+ TBool iDrmFullSupported;
+
+ // Ref: reference to feature manager
+ CFileManagerFeatureManager& iFeatureManager;
+
+ };
+
+#endif // CFILEMANAGERUTILS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFilemanagerActiveCount.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002-2006 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: Calculates directory size
+*
+*/
+
+
+#ifndef CFILEMANAGERACTIVECOUNT_H
+#define CFILEMANAGERACTIVECOUNT_H
+
+// INCLUDES
+#include <e32base.h>
+#include <AknWaitNoteWrapper.h>
+#include "CFileManagerItemProperties.h"
+
+// FORWARD DECLARATIONS
+class CDirScan;
+
+// CLASS DECLARATION
+/**
+*
+* Calculates folder size, one folder at time.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerActiveCount) : public CBase,
+ public MAknBackgroundProcess
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerActiveCount* NewL(
+ RFs& aFs,
+ const TDesC& aRootFolder,
+ const CFileManagerItemProperties::TFileManagerFileType aType );
+ /**
+ * Destructor.
+ */
+ ~CFileManagerActiveCount();
+
+ public: // From MAknBackgroundProcess
+ /**
+ * Completes one cycle of the process.
+ */
+ void StepL();
+
+ /**
+ * Return true when the process is done.
+ */
+ TBool IsProcessDone() const;
+
+ public:
+
+ /**
+ * Get the result,
+ * @since 2.0
+ * @return count of
+ */
+ TInt FolderCount() const;
+
+ /**
+ * Get the result,
+ * @since 2.0
+ * @return count of
+ */
+ TInt FileCount() const;
+
+ /**
+ * Get the result,
+ * @since 2.0
+ * @return count of
+ */
+ TInt OpenFiles() const;
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerActiveCount(
+ RFs& aFs );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(
+ const TDesC& aRootFolder,
+ const CFileManagerItemProperties::TFileManagerFileType aType );
+
+ private: // Data
+
+ /// Own: Used to go through all the folders in given directory
+ CDirScan* iDirScan;
+
+ /// Own: CDirScan returns this
+ CDir* iDir;
+
+ /// File Server session
+ RFs& iFs;
+
+ /// When all folders are through, this is set
+ TBool iProcessDone;
+
+ /// Index to currently checked CDir item
+ TInt iFileCounter;
+
+ // Folder count
+ TInt iFolders;
+
+ // Folder count
+ TInt iFiles;
+
+ // Folder count
+ TInt iOpenFiles;
+
+ // Processed entry fullpath
+ TFileName iFileName;
+
+ };
+
+#endif // CFILEMANAGERACTIVECOUNT_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/CFilemanagerMimeIconArray.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2002-2006 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: Maps the mime or file extension to icon
+*
+*/
+
+
+#ifndef CFILEMANAGERMIMEICONARRAY_H
+#define CFILEMANAGERMIMEICONARRAY_H
+
+// INCLUDES
+#include <e32base.h>
+#include "FileManagerEngine.hrh"
+
+// FORWARD DECLARATIONS
+class CGflmNavigatorModel;
+
+// CLASS DECLARATION
+
+/**
+* Contains the array of the icons. Formats the given string with given item.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerMimeIconArray) : public CBase
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ * @param aResId resource id of mime icon array
+ * @param aNavigator ref to GFLM navigator
+ * @return pointer to CFileManagerMimeIconArray object
+ */
+ static CFileManagerMimeIconArray* NewL(
+ TInt aResId, CGflmNavigatorModel& aNavigator );
+
+ /**
+ * Gets the icon id of the item
+ * @since 2.0
+ * @param aFullPath Item with full path information
+ * @return TFileManagerIconId, icon id of the item.
+ * If not found other icon id is used.
+ */
+ TInt ResolveIconL( const TDesC& aFullPath );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerMimeIconArray();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerMimeIconArray( CGflmNavigatorModel& aNavigator );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructFromResourceL( TInt aResId );
+
+ NONSHARABLE_CLASS(CMimeIconEntry) : public CBase
+ {
+ public: // Constructor and destructor
+ static CMimeIconEntry* NewLC(
+ const TDesC& aMime, const TInt aIconId );
+
+ CMimeIconEntry( const TInt aIconId );
+
+ void ConstructL( const TDesC& aMime );
+
+ ~CMimeIconEntry();
+ public: // Data
+ // Own: MIME type string
+ HBufC* iMime;
+ // ID of the icon this entry represents.
+ TInt iIconId;
+
+ };
+
+ private: // Data
+ // Own: Array of icons
+ RPointerArray< CMimeIconEntry > iArray;
+
+ // Ref: To get the current directory and MIME type of the item
+ CGflmNavigatorModel& iNavigator;
+
+ };
+
+#endif // CFILEMANAGERMIMEICONARRAY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/Cfilemanageractivedelete.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2002-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: Deletes items
+*
+*/
+
+
+#ifndef CFILEMANAGERACTIVEDELETE_H
+#define CFILEMANAGERACTIVEDELETE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <AknWaitNoteWrapper.h>
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+class CDirScan;
+//class CMGXFileManager;
+class CFileManagerUtils;
+
+
+// CLASS DECLARATION
+/**
+* Deletes items
+* Delete operation is done one item at time, so that it can be cancelled
+* during operation.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerActiveDelete) : public CBase,
+ public MAknBackgroundProcess
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerActiveDelete* NewL(
+ CArrayFixFlat< TInt >& aIndexList,
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CFileManagerActiveDelete();
+
+ public: // From MAknBackgroundProcess
+
+ void StepL();
+
+ TBool IsProcessDone() const;
+
+ void DialogDismissedL( TInt aButtonId );
+
+ public:
+
+ /**
+ * Returns last known error code
+ * @since 2.0
+ * @param aFileName a refence to reserved buffer
+ where file name related to error can be copied
+ * @return common error code
+ */
+ IMPORT_C TInt GetError(TDes& aFileName);
+
+ /**
+ * Returns count of deleted DRM items
+ * @since 2.0
+ * @param aTotalCount (out) returns total count of deleted items
+ * @return count of deleted DRM items
+ */
+ IMPORT_C TInt DeletedDrmItems( TInt& aTotalCount );
+
+
+ private:
+ /**
+ * Constructor
+ */
+ CFileManagerActiveDelete(
+ RFs& aFs,
+ CArrayFixFlat< TInt >& aIndexList,
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private:
+
+ /**
+ * This function handles the directory item deletion.
+ * Deletes one item per call
+ */
+ TBool DeleteItemsInDirectoryL();
+
+ /**
+ * This function handles the file deletion.
+ */
+ void DeleteFileL(
+ const TDesC& aFullPath, const TBool aReadOnlyChecked = EFalse );
+
+ /**
+ * This function checks is item file or directory.
+ */
+ TBool IsDir( const TDesC& aFullPath );
+
+ /**
+ * This function sets the name returned to user.
+ */
+ void SetName( const TDesC& aFullPath, TBool aOverWrite = EFalse );
+
+ /**
+ * This function checks is error ignored by delete.
+ */
+ TBool IsError( TInt aErr );
+
+ /**
+ * This function sets the error returned to user.
+ */
+ void SetError( TInt aErr, const TDesC& aFullPath );
+
+ /**
+ * This function flushes the notification array.
+ */
+ void FlushNotifications();
+
+ private: // Data
+ /// Ref: reference to engine created file server session
+ RFs& iFs;
+
+ /// Ref: array of items to be deleted from current view
+ CArrayFixFlat< TInt >& iIndexList;
+
+ /// Current index in given array
+ TInt iCurrentIndex;
+
+ /// When all folders are through, this is set
+ TBool iProcessDone;
+
+ /// Latest error
+ TInt iError;
+
+ /// Own: latest deleted file name or file name which delete has failed
+ TFileName iFileName;
+
+ /// current file index in CDirScan
+ TInt iFileIndex;
+
+ /// Own: Used to scan directories
+ CDirScan* iDirScan;
+
+ /// Own: Scan result is stored here
+ CDir* iDir;
+
+ /// Count of not deleted items
+ TInt iNotDeletedItems;
+
+ /// Count of open items
+ TInt iOpenFiles;
+
+ /// Own: buffer for storing the current item name to be deleted
+ HBufC* iStringBuffer;
+
+ /// Ref: reference to engine instance
+ CFileManagerEngine& iEngine;
+
+ /// Own: full path of the item to be deleted
+ HBufC* iFullPath;
+
+ /// Count of deleted drm files
+ TInt iDeletedDrmItems;
+
+ /// Count of deleted items
+ TInt iDeletedItems;
+
+ // Ref: MG2 update notification object
+ //CMGXFileManager* iMgxFileManager;
+
+ // Ref: reference to utils instance
+ CFileManagerUtils& iUtils;
+
+ // Own: Set if current drive is remote drive
+ TBool iIsRemoteDrive;
+
+ // Own: Buffer for storing delete items for MG2 notifications
+ CDesCArray* iRemovedItems;
+
+ };
+
+#endif // CFileManagerActiveFind_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/Cfilemanageractivesize.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2002-2006 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: Calculates directory size
+*
+*/
+
+
+
+#ifndef CFILEMANAGERACTIVESIZE_H
+#define CFILEMANAGERACTIVESIZE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <AknWaitNoteWrapper.h>
+
+// FORWARD DECLARATIONS
+class CDirScan;
+
+// CLASS DECLARATION
+/**
+*
+* Calculates folder size, one folder at time.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerActiveSize) : public CBase,
+ public MAknBackgroundProcess
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerActiveSize* NewL(
+ RFs& aFs, const TDesC& aRootFolder );
+ /**
+ * Destructor.
+ */
+ ~CFileManagerActiveSize();
+
+ public: // From MAknBackgroundProcess
+ /**
+ * Completes one cycle of the process.
+ */
+ void StepL();
+
+ /**
+ * Return true when the process is done.
+ */
+ TBool IsProcessDone() const;
+
+ public:
+
+ /**
+ * Get the result, size of the folder
+ * @since 2.0
+ * @return Size of the folder in bytes
+ */
+ TInt64 GetFolderSize() const;
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerActiveSize( RFs& aFs );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TDesC& aRootFolder );
+
+ private: // Data
+
+ /// Own: Used to go through all the folders in given directory
+ CDirScan* iDirScan;
+
+ /// Own: CDirScan returns this
+ CDir* iDir;
+
+ /// File Server session
+ RFs& iFs;
+
+ /// When all folders are through, this is set
+ TBool iProcessDone;
+
+ /// Index to currently checked CDir item
+ TInt iFileCounter;
+
+ // Folder Size
+ TInt64 iSize;
+ };
+
+#endif // CFILEMANAGERACTIVESIZE_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/Cfilemanagerfilesystemevent.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2002-2006 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 AO is signaled when directory entry is added or removed
+* from file system
+*
+*/
+
+
+#ifndef CFILEMANAGERFILESYSTEMEVENT_H
+#define CFILEMANAGERFILESYSTEMEVENT_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+
+// CLASS DECLARATION
+
+/**
+* This class listens file system events
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerFileSystemEvent) : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerFileSystemEvent* NewL( RFs& aFs,
+ CFileManagerEngine& aEngine,
+ TNotifyType aNotifyType,
+ const TDesC& aFullPath = KNullDesC );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CFileManagerFileSystemEvent();
+
+ public:
+
+ /**
+ * Sets file system event
+ * @since 2.0
+ */
+ void Setup();
+
+ /**
+ * This calls refresh if file system event has happened
+ * @since 2.0
+ */
+ void CheckFileSystemEvent();
+
+
+ protected: // Functions from base classes
+
+ /**
+ * From CActive Called when asynchronous request has completed
+ * @since 2.0
+ */
+ void RunL();
+
+ /**
+ * From CActive Called when asynchronous request has failed
+ * @since 2.0
+ */
+ TInt RunError( TInt aError );
+
+ /**
+ * From CActive Called when asynchronous request was cancelled
+ * @since 2.0
+ */
+ void DoCancel();
+
+ private:
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TDesC& aFullPath );
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFileSystemEvent(
+ RFs& aFs,
+ CFileManagerEngine& aEngine,
+ TNotifyType aNotifyType );
+
+ private: // Data
+ // Ref: Reference to opened File System session
+ RFs& iFs;
+
+ // Ref: This object is called when RunL occurs
+ CFileManagerEngine& iEngine;
+
+ // Type of the notify, entry or disk.
+ TNotifyType iNotifyType;
+
+ // Full path of folder from where notification is needed
+ HBufC* iFullPath;
+
+ // Indicates if the event has been received
+ TBool iIsReceived;
+
+ };
+
+#endif // CFILEMANAGERFILESYSTEMEVENT_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/Cfilemanagerfolderarray.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002-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: Holds the array of CFileManagerFolderEntry
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFOLDERARRAY_H
+#define CFILEMANAGERFOLDERARRAY_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// FORWARD DECLARATIONS
+#ifndef RD_MULTIPLE_DRIVE
+class CFileManagerFolderEntry;
+#endif // RD_MULTIPLE_DRIVE
+class CFileManagerUtils;
+
+
+// CLASS DECLARATION
+
+
+/**
+* Array of CFileManagerFolderEntry's
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerFolderArray) : public CBase
+ {
+ public:
+ /**
+ * Two-phased constructors.
+ */
+#ifdef RD_MULTIPLE_DRIVE
+ static CFileManagerFolderArray* NewL( CFileManagerUtils& aUtils );
+#else // RD_MULTIPLE_DRIVE
+ static CFileManagerFolderArray* NewL(
+ TInt aResId, CFileManagerUtils& aUtils );
+#endif // RD_MULTIPLE_DRIVE
+
+ /**
+ * Is the given folder in the default folder list
+ * @since 2.0
+ * @param aFolderName folder which is compared to default folder list
+ * @return ETrue if the given folder is in list, EFalse if not
+ */
+ TBool Contains( const TDesC& aFolderName );
+
+ /**
+ * Create folders from array
+ * @since 3.2
+ * @param aDrive Drive which default folders are created
+ * @param aForced Selects forced or normal creation
+ */
+ void CreateFolders(
+ const TInt aDrive = KErrNotFound,
+ const TBool aForced = ETrue );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFolderArray();
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFolderArray( CFileManagerUtils& aUtils );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( TInt aResId );
+
+#ifndef RD_MULTIPLE_DRIVE
+ /**
+ * Goes through the array of CFileManagerEntry's and tries to
+ * lookup if the given folder is in the array.
+ * @since 2.0
+ * @return CFileManagerFolderEntry if found, otherwise NULL.
+ */
+ CFileManagerFolderEntry* FindFolder( const TDesC& aFolderName );
+#endif // RD_MULTIPLE_DRIVE
+
+ void DoCreateFoldersL( const TInt aDrive );
+
+ private: // Data
+ // Ref: Reference to utils
+ CFileManagerUtils& iUtils;
+
+ // Own: For checking if folder creation has been done or not
+ TUint iCreateCheckMask;
+
+#ifndef RD_MULTIPLE_DRIVE
+ // Own: Array of CFileManagerFolderEntry's
+ RPointerArray< CFileManagerFolderEntry > iFolderArray;
+
+ // Own: Indicates if folder array has been sorted
+ TBool iSorted;
+#endif // RD_MULTIPLE_DRIVE
+
+ };
+
+#endif // CFILEMANAGERFOLDERARRAY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/Cfilemanagerindexiterator.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2002-2006 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: Goes through the list of given files
+*
+*/
+
+
+#ifndef CFILEMANAGERINDEXITERATOR_H
+#define CFILEMANAGERINDEXITERATOR_H
+
+// INCLUDES
+#include <e32base.h>
+#include "Mfilemanageritemiterator.h"
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+/**
+* Goes through the given file list. Implements the
+* MFileManagerItemIterator.
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CFileManagerIndexIterator) :
+ public CBase,
+ public MFileManagerItemIterator
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerIndexIterator* NewL(
+ CFileManagerEngine& aEngine,
+ CArrayFixFlat< TInt >& aIndexList,
+ const TDesC& aDstDir );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerIndexIterator();
+
+ public: // From MFileManagerItemIterator
+
+ void CurrentL(
+ HBufC** aSrc, HBufC** aDst, TFileManagerTypeOfItem& aItemType);
+
+ TBool NextL();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerIndexIterator(
+ CFileManagerEngine& aEngine,
+ CArrayFixFlat< TInt >& aIndexList,
+ const TDesC& aDstDir );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private:
+ // Index to currently processed item in given array
+ TInt iCurrentIndex;
+
+ // To get the full path information
+ CFileManagerEngine& iEngine;
+
+ // User chosen list of files
+ CArrayFixFlat< TInt >& iIndexList;
+
+ // Destination directory
+ const TDesC& iDstDir;
+
+ // Own: Source of the currently processed item with full path
+ HBufC* iSrc;
+
+ // Own: Destination of the currently processes item with full path
+ HBufC* iDst;
+
+ };
+
+#endif // CFILEMANAGERINDEXITERATOR_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/FileManagerDebug.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,179 @@
+/*
+* 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: Common debug definitions
+*
+*/
+
+
+#ifndef FILEMANAGERDEBUG_H
+#define FILEMANAGERDEBUG_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <e32debug.h>
+
+
+//#define FILE_MANAGER_INFO_LOG_ENABLED
+
+#ifdef _DEBUG
+ #define FILE_MANAGER_ERROR_LOG_ENABLED
+#endif // _DEBUG
+
+
+// Info logging
+#ifdef FILE_MANAGER_INFO_LOG_ENABLED
+
+ #define INFO_LOG( aMsg ) { _LIT( KMsg, aMsg ); RDebug::Print( KMsg ); }
+
+ #define INFO_LOG1( aMsg, aArg1 )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1 ); }
+
+ #define INFO_LOG2( aMsg, aArg1, aArg2 )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1, aArg2 ); }
+
+ #define INFO_LOG3( aMsg, aArg1, aArg2, aArg3 )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1, aArg2, aArg3 ); }
+
+// Function log object
+_LIT8( KFuncNameTerminator, "(" );
+_LIT8( KFuncLeavePattern, "L" );
+
+class TFuncLog
+ {
+public:
+ static void Cleanup( TAny* aPtr )
+ {
+ TFuncLog* self = static_cast< TFuncLog* >( aPtr );
+ self->iLeft = ETrue;
+ RDebug::Printf( "%S-LEAVE", &self->iFunc ); // Leave detected
+ }
+
+ inline TFuncLog( const char* aFunc ) :
+ iFunc( aFunc ? _S8( aFunc ) : _S8("") ),
+ iLeft( EFalse ),
+ iCanLeave( EFalse )
+ {
+ TInt pos( iFunc.Find( KFuncNameTerminator ) );
+ if( pos != KErrNotFound )
+ {
+ iFunc.Set( iFunc.Left( pos ) );
+ TInt patLen( KFuncLeavePattern().Length() );
+ iCanLeave = iFunc.Length() > patLen &&
+ !iFunc.Right( patLen ).Compare( KFuncLeavePattern );
+ }
+ RDebug::Printf( "%S-START", &iFunc );
+ }
+
+ inline ~TFuncLog()
+ {
+ if ( !iLeft )
+ {
+ if ( iCanLeave )
+ {
+ CleanupStack::Pop( this ); // Pop the cleanup item
+ }
+ RDebug::Printf( "%S-END", &iFunc ); // Normally finished
+ }
+ }
+
+ TPtrC8 iFunc;
+ TBool iLeft;
+ TBool iCanLeave;
+ };
+
+ #define FUNC_LOG\
+ TFuncLog _fl( __PRETTY_FUNCTION__ );\
+ TCleanupItem _flCi( TFuncLog::Cleanup, &_fl );\
+ if ( _fl.iCanLeave ) { CleanupStack::PushL( _flCi ); }
+
+ #define TIMESTAMP( aCaption )\
+ {\
+ TTime t;\
+ t.HomeTime();\
+ RDebug::Printf( "%s %d us", aCaption, I64INT( t.Int64() ) );\
+ }
+
+#else // FILE_MANAGER_INFO_LOG_ENABLED
+
+ #define INFO_LOG( aMsg )
+
+ #define INFO_LOG1( aMsg, aArg1 )
+
+ #define INFO_LOG2( aMsg, aArg1, aArg2 )
+
+ #define INFO_LOG3( aMsg, aArg1, aArg2, aArg3 )
+
+ #define FUNC_LOG
+
+ #define TIMESTAMP( aCaption )
+
+#endif // FILE_MANAGER_INFO_LOG_ENABLED
+
+
+// Error logging
+#ifdef FILE_MANAGER_ERROR_LOG_ENABLED
+
+ #define ERROR_LOG( aMsg ) { _LIT( KMsg, aMsg ); RDebug::Print( KMsg ); }
+
+ #define ERROR_LOG1( aMsg, aArg1 )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1 ); }
+
+ #define ERROR_LOG2( aMsg, aArg1, aArg2 )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1, aArg2 ); }
+
+ #define ERROR_LOG3( aMsg, aArg1, aArg2, aArg3 )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1, aArg2, aArg3 ); }
+
+ #define LOG_IF_ERROR( aErr, aMsg )\
+ if ( ( aErr ) != KErrNone )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg ); }
+
+ #define LOG_IF_ERROR1( aErr, aMsg, aArg1 )\
+ if ( ( aErr ) != KErrNone )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1 ); }
+
+ #define LOG_IF_ERROR2( aErr, aMsg, aArg1, aArg2 )\
+ if ( ( aErr ) != KErrNone )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1, aArg2 ); }
+
+ #define LOG_IF_ERROR3( aErr, aMsg, aArg1, aArg2, aArg3 )\
+ if ( ( aErr ) != KErrNone )\
+ { _LIT( KMsg, aMsg ); RDebug::Print( KMsg, aArg1, aArg2, aArg3 ); }
+
+#else // FILE_MANAGER_ERROR_LOG_ENABLED
+
+ #define ERROR_LOG( aMsg )
+
+ #define ERROR_LOG1( aMsg, aArg1 )
+
+ #define ERROR_LOG2( aMsg, aArg1, aArg2 )
+
+ #define ERROR_LOG3( aMsg, aArg1, aArg2, aArg3 )
+
+ // Remove compiler warning
+ #define LOG_IF_ERROR( aErr, aMsg ) ( aErr ) = ( aErr );
+
+ #define LOG_IF_ERROR1( aErr, aMsg, aArg1 ) ( aErr ) = ( aErr );
+
+ #define LOG_IF_ERROR2( aErr, aMsg, aArg1, aArg2 ) ( aErr ) = ( aErr );
+
+ #define LOG_IF_ERROR3( aErr, aMsg, aArg1, aArg2, aArg3 ) ( aErr ) = ( aErr );
+
+#endif // FILE_MANAGER_ERROR_LOG_ENABLED
+
+
+#endif // FILEMANAGERDEBUG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/FileManagerEngine.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2002-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: Resource headers for project FileManagerEngine
+*
+*/
+
+
+#ifndef FILEMANAGERENGINE_HRH
+#define FILEMANAGERENGINE_HRH
+
+#include <AvkonIcons.hrh>
+
+#define commondialogs_mbm_file_location "z:\\resource\\apps\\CommonDialogs.mbm"
+#define filemanager_mbm_file_location "z:\\resource\\apps\\FileManager.mbm"
+#define avkon_mbm_file_location AVKON_ICON_FILE
+
+// Icons for the listview display
+enum TFileManagerIconId
+ {
+ // Mark icon
+ EFileManagerMarkIcon,
+ // Folder icons
+ EFileManagerFolderIcon,
+ EFileManagerFolderSubIcon,
+ EFileManagerFolderEmptyIcon,
+ // Memory icons
+ EFileManagerMemoryCardIcon,
+ EFileManagerPhoneMemoryIcon,
+ // File icons
+ EFileManagerImageFileIcon,
+ EFileManagerPictureMsgFileIcon,
+ EFileManagerDycLogoFileIcon,
+ EFileManagerLinkFileIcon,
+ EFileManagerVoicerecFileIcon,
+ EFileManagerSoundFileIcon,
+ EFileManagerPlaylistFileIcon,
+ EFileManagerCompoFileIcon,
+ EFileManagerNoteFileIcon,
+ EFileManagerAppFileIcon,
+ EFileManagerVideoFileIcon,
+ EFileManagerGameFileIcon,
+ EFileManagerOtherFileIcon,
+ EFileManagerFlashFileIcon,
+ // Main view icons
+ EFileManagerPhoneMemoryMainIcon,
+ EFileManagerMemoryCardPresentMainIcon,
+ EFileManagerMemoryCardNotPresentMainIcon,
+ EFileManagerBackupMainIcon,
+ EFileManagerRemoteDriveConnectedIcon,
+ EFileManagerRemoteDriveMainIcon,
+ EFileManagerMassStorageMainIcon,
+ EFileManagerUsbMemoryMainIcon
+ };
+
+// Type of the item
+// Needed for App to create correct softmenu for the item
+enum TFileManagerTypeOfItem
+ {
+ EFileManagerFolder = 1,
+ EFileManagerDefaultFolder,
+ EFileManagerForwardLockedFile,
+ EFileManagerFile,
+ EFileManagerNoType
+ };
+
+enum TFileManagerMemory
+ {
+ EFmPhoneMemory = 0,
+ EFmMemoryCard,
+ EFmRemoteDrive,
+ EFmMassStorage,
+ EFmUsbMemory,
+ EFmMemoryCount // must remain last one
+ };
+
+enum TFileManagerActionId
+ {
+ EFileManagerBackupAction = 0
+ };
+
+enum TFileManagerGroupId
+ {
+ EFileManagerDrivesGroup = 0,
+ EFileManagerFilesGroup
+ };
+
+#endif // FILEMANAGERENGINE_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/FileManagerEngine.rh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2002-2006 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: Resource headers for project FileManagerEngine
+*
+*/
+
+
+#ifndef FILEMANAGERENGINE_RH
+#define FILEMANAGERENGINE_RH
+
+// STRUCTURE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+// FILEMANAGER_DEFAULT_FOLDER
+// This struct is used for mapping default folders
+// -----------------------------------------------------------------------------
+//
+
+STRUCT FILEMANAGER_DEFAULT_FOLDER
+ {
+ LTEXT root; // root under which the folder is
+ LTEXT folder; // name of the folder
+ BYTE isMediaFolder = 0; // 1 if this is media folder, 0 otherwise
+ }
+
+// -----------------------------------------------------------------------------
+// FILEMANAGER_ICON_MAPPER
+// This struct is used for mapping MIME type to icon id
+// -----------------------------------------------------------------------------
+//
+
+STRUCT FILEMANAGER_ICON_MAPPER
+ {
+ LTEXT mimeType; // MIME type of item
+ WORD iconId; // icon ID corresponding to MIME type
+ }
+
+#endif // FILEMANAGERENGINE_RH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/FileManagerPrivateCRKeys.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2006-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: Private Central Repository definitions of the
+* File Manager subsystem
+*
+*/
+
+
+
+#ifndef FILEMANAGERPRIVATECRKEYS_H
+#define FILEMANAGERPRIVATECRKEYS_H
+
+
+/** File manager repository uid */
+const TUid KCRUidFileManagerSettings = { 0x1020506B };
+
+/** Defines the backup content */
+const TUint32 KFileManagerBackupContent = 0x1;
+
+/** Contains the possible bitmask values of KFileManagerBackupContent key. */
+enum TFileManagerBackupContentMask
+ {
+ EFileManagerBackupContentAll = 0x1,
+ EFileManagerBackupContentSettings = 0x2,
+ EFileManagerBackupContentMessages = 0x4,
+ EFileManagerBackupContentContacts = 0x8,
+ EFileManagerBackupContentCalendar = 0x10,
+ EFileManagerBackupContentBookmarks = 0x20,
+ EFileManagerBackupContentUserFiles = 0x40,
+ EFileManagerBackupContentFirst = 0x2,
+ EFileManagerBackupContentLast = 0x40
+ };
+
+/** Defines the backup scheduling mode */
+const TUint32 KFileManagerBackupScheduling = 0x2;
+
+/** Contains the possible values of KFileManagerBackupScheduling key. */
+enum TFileManagerBackupSchedule
+ {
+ EFileManagerBackupScheduleNone = 0,
+ EFileManagerBackupScheduleDaily,
+ EFileManagerBackupScheduleWeekly
+ };
+
+/** Defines the scheduled backup weekday. See day definitions from TDay.
+ * Negative value means the first day of the week.
+ */
+const TUint32 KFileManagerBackupDay = 0x3;
+
+/** Defines the scheduled backup time in minutes starting from 00:00 midnight */
+const TUint32 KFileManagerBackupTime = 0x4;
+
+/** Defines the backup target path as string */
+const TUint32 KFileManagerBackupTargetPath = 0x5;
+
+/** Defines the status of the last scheduled backup */
+const TUint32 KFileManagerLastSchBackupStatus = 0x6;
+
+/** Contains the possible values of KFileManagerLastSchBackupStatus key. */
+enum TFileManagerSchBackupStatus
+ {
+ EFileManagerSchBackupStatusOk = 0,
+ EFileManagerSchBackupStatusFailed,
+ EFileManagerSchBackupStatusStarting,
+ EFileManagerSchBackupStatusInProgress,
+ EFileManagerSchBackupStatusCanceled
+ };
+
+/** Defines file manager local variation configuration */
+const TUint32 KFileManagerFeatures = 0x7;
+
+/** Contains the possible bitmask values of KFileManagerFeatures key. */
+enum TFileManagerFeatures
+ {
+ EFileManagerFeatureBackupAllowAllDrives = 0x1,
+ EFileManagerFeatureNotUsedAnymore = 0x2,
+ EFileManagerFeatureRightLeftNaviSupported = 0x4,
+ EFileManagerFeatureScheduledBackupDisabled = 0x8,
+ EFileManagerFeatureOwnFastScrollDisabled = 0x10
+ };
+
+/** Defines the file manager application to be launched for the AIW service.
+The value of this key is an application UID or zero. */
+const TUint32 KFileManagerAppUidForAiwService = 0x8;
+
+/** Defines default volume name for non user nameable mass storage.
+The default name will be used after format only if the stored volume name is undefined
+for the drive. The name is visible only in Windows Explorer during USB mass storage mode and
+in 3rd party File Manager(s). */
+const TUint32 KFileManagerDefaultInternalMassStorageVolumeName = 0x9;
+
+/** Defines a store for keeping existing non user nameable mass storage volume name over
+format operation. The data is stored in binary as TFileManagerVolumeNameStore. */
+const TUint32 KFileManagerStoredInternalMassStorageVolumeName = 0xA;
+
+#endif // FILEMANAGERPRIVATECRKEYS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/FileManagerSchDefinitions.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006 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: Common scheduled task definitions
+*
+*/
+
+
+#ifndef FILEMANAGERSCHDEFINITIONS_H
+#define FILEMANAGERSCHDEFINITIONS_H
+
+
+// For scheduled backup task
+_LIT( KSchBackupStarterExe, "filemanagerschbkup.exe" );
+_LIT( KSchBackupTaskName, "StartBackup" );
+
+
+#endif // FILEMANAGERBACKUPDEFINITIONS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/MFileManagerProcessObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002-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: Defines an interface for handling engine events
+*
+*/
+
+
+
+#ifndef MFILEMANAGERPROCESSOBSERVER_H
+#define MFILEMANAGERPROCESSOBSERVER_H
+
+class MAknBackgroundProcess;
+
+
+// CLASS DECLARATION
+/**
+* Defines an interface for handling engine events.
+*
+* @since 2.0
+*/
+class MFileManagerProcessObserver
+ {
+ public:
+ /* Process which is observed*/
+ enum TFileManagerProcess
+ {
+ ENoProcess = 0,
+ ECopyProcess,
+ EMoveProcess,
+ EIRReceiveProcess,
+ EDeleteProcess,
+ EFormatProcess,
+ EBackupProcess,
+ ERestoreProcess,
+ EEjectProcess,
+ ESchBackupProcess,
+ EFileOpenProcess
+ };
+
+ /** Event which is notified */
+ enum TFileManagerNotify
+ {
+ ENotifyActionSelected = 0, // Action item is selected
+ ENotifyDisksChanged, // Disk state changes (disk added, removed etc)
+ ENotifyBackupMemoryLow, // Low memory for storing backup data
+ ENotifyForcedFormat, // Forced format
+ ENotifyFileOpenDenied // File open denied (DRM checks before open etc)
+ };
+
+ /**
+ * Start the refresh process
+ * @since 2.0
+ */
+ virtual void RefreshStartedL() = 0;
+
+ /**
+ * Stops the refresh process
+ * @since 2.0
+ */
+ virtual void RefreshStoppedL() = 0;
+
+ /**
+ * Process has been started
+ * @since 2.0
+ * @param aProcess Started process
+ * @param aFinalValue Executed progress final value
+ */
+ virtual void ProcessStartedL(
+ TFileManagerProcess aProcess,
+ TInt aFinalValue = 0 ) = 0;
+
+ /**
+ * Process finished
+ * @since 2.0
+ * @param aError Finish status
+ * @param aName Finish status related text
+ */
+ virtual void ProcessFinishedL(
+ TInt aError, const TDesC& aName = KNullDesC ) = 0;
+
+ /**
+ * During execution of process bytes (file copy) or
+ * percentage (Infrared file receiving)
+ * is updated via this method
+ * @since 2.0
+ * @param aValue Execution progress related value
+ */
+ virtual void ProcessAdvanceL( TInt aValue ) = 0;
+
+ /**
+ * Query file overwrite from user
+ * @since 2.0
+ * @param aOldFileName old name of the item
+ * @param aNewFileName new name of the item
+ * @param aProcess Move or Copy in progress
+ * @return ETrue if user want's to overwrite the name, EFalse if not
+ */
+ virtual TBool ProcessQueryOverWriteL(
+ const TDesC& aOldFileName,
+ TDes& aNewFileName,
+ TFileManagerProcess aProcess ) = 0;
+
+ /**
+ * Query rename item from user
+ * @param aOldFileName old name of the item
+ * @param aNewFileName new name of the item
+ * @param aProcess Move or Copy in progress
+ * @since 2.0
+ * @return ETrue if user want's to change the name, EFalse if not
+ */
+ virtual TBool ProcessQueryRenameL(
+ const TDesC& aOldFileName,
+ TDes& aNewFileName,
+ TFileManagerProcess aProcess ) = 0;
+
+ /**
+ * Creates and displays wait note
+ * @since 2.0
+ * @param aProcess reference to object which implements
+ * the Wait Note Wrapper API
+ */
+ virtual void ShowWaitDialogL( MAknBackgroundProcess& aProcess ) = 0;
+
+ /**
+ * Engine reports that there is an error
+ * @param aError error code
+ * @since 2.0
+ */
+ virtual void Error( TInt aError ) = 0;
+
+ /**
+ * Handles engine notification
+ * @since 3.1
+ * @param aType Notification type
+ * @param aData Notification related data
+ * @param aName Notification related text
+ * @return A notification related value
+ */
+ virtual TInt NotifyL(
+ TFileManagerNotify aType,
+ TInt aData = 0,
+ const TDesC& aName = KNullDesC ) = 0;
+
+ };
+
+#endif // MFILEMANAGERPROCESSOBSERVER_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/MFileManagerPropertyObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2006 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: Interface to handle async P&S property notifications
+*
+*/
+
+
+
+#ifndef CFILEMANAGERPROPERTYOBSERVER_H
+#define CFILEMANAGERPROPERTYOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+/**
+* Defines an interface for handling async P&S property changes.
+*
+* @since 3.1
+*/
+class MFileManagerPropertyObserver
+ {
+ public:
+ /**
+ * Informs about property changes
+ * @since 3.1
+ * @param aCategory Property category Uid
+ * @param aKey Property key id
+ */
+ virtual void PropertyChangedL(
+ const TUid& aCategory, const TUint aKey ) = 0;
+ };
+
+#endif // CFILEMANAGERPROPERTYOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/MFileManagerThreadFunction.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,89 @@
+/*
+* 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: Background thread abstraction
+*
+*/
+
+
+#ifndef MFILEMANAGERTHREADFUNCTION_H
+#define MFILEMANAGERTHREADFUNCTION_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+/**
+* Defines an interface for background thread abstraction.
+*
+* @since 3.1
+*/
+class MFileManagerThreadFunction
+ {
+ public: // Background thread space executed callbacks
+
+ /**
+ * Inits background thread owned handles and data.
+ * Executed always on background thread start.
+ * @since 3.1
+ */
+ virtual void InitThreadL() {}
+
+ /**
+ * Releases background thread owned handles and data.
+ * Executed always on background thread exit.
+ * @since 3.1
+ */
+ virtual void ReleaseThread() {}
+
+ /**
+ * Runs background thread.
+ * @since 3.1
+ */
+ virtual void ThreadStepL() = 0;
+
+ /**
+ * Checks is background thread done.
+ * @since 3.1
+ * @return ETrue if thread is done and should be finished,
+ * EFalse if ThreadStepL should be executed.
+ */
+ virtual TBool IsThreadDone() = 0;
+
+
+ public: // Client thread space executed callbacks
+ enum TNotifyType // Notify type flags
+ {
+ ENotifyNone = 0x0,
+ ENotifyError = 0x1,
+ ENotifyFinished = 0x2, // Notifies thread's death
+ ENotifyStepFinished = 0x4 // Notifies step completion
+ };
+ /**
+ * Notifies client about background thread events.
+ * Background thread is stopped during notification and
+ * it is safe to modify shared data to handle errors etc.
+ * @since 3.1
+ * @param aType notification type
+ * @param aValue notification value
+ */
+ virtual void NotifyThreadClientL(
+ TNotifyType aType, TInt aValue ) = 0;
+
+ };
+
+#endif // MFILEMANAGERTHREADFUNCTION_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/Mfilemanageritemiterator.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2002-2006 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: Interface to go through file(s) and folder(s) in copy and move
+*
+*/
+
+
+
+#ifndef MFILEMANAGERITEMITERATOR_H
+#define MFILEMANAGERITEMITERATOR_H
+
+// INCLUDES
+#include "FileManagerEngine.hrh"
+
+// CLASS DECLARATION
+/**
+* Defines an interface for iterating file(s) and folder(s).
+*
+* @since 2.0
+*/
+class MFileManagerItemIterator
+ {
+ public:
+
+ /**
+ * Gets the current processed item source and destination with full path
+ * @since 2.0
+ * @param aSrc Returns pointer to item source with full path
+ * if this parameter is null and aDst contains destination folder
+ * it means that destination is folder which should be created
+ * @param aDst Returns pointer to item destination with full path
+ */
+ virtual void CurrentL(
+ HBufC** aSrc,
+ HBufC** aDst,
+ TFileManagerTypeOfItem& aItemType ) = 0;
+
+ /**
+ * Goes to next item
+ * @since 2.0
+ * @return ETrue if next item found, EFalse if end reached
+ */
+ virtual TBool NextL() = 0;
+
+ /**
+ * Virtual desctructor
+ * This is required because the ownership transfer does not work without
+ */
+ virtual ~MFileManagerItemIterator() {}
+ };
+
+#endif // MFILEMANAGERITEMITERATOR_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/TFileManagerDriveInfo.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2002-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: Drive info storage
+*
+*/
+
+
+#ifndef TFILEMANAGERDRIVEINFO_H
+#define TFILEMANAGERDRIVEINFO_H
+
+
+// INCLUDES
+#include <f32file.h>
+
+
+// CONSTANTS
+const TInt KMaxVolumeName = 11; // Limited by FAT
+// Remove these when there is API available for checking
+const TInt KFmgrSystemDrive = EDriveC;
+const TInt KFmgrMemoryCardDrive = EDriveE;
+const TInt KFmgrRomDrive = EDriveZ;
+const TInt KFmgrRamDrive = EDriveD;
+
+
+// FORWARD DECLARATIONS
+class RFs;
+class CFileManagerEngine;
+
+
+// CLASS DECLARATION
+/**
+* TFileManagerDriveInfo is used for storing drive info
+*
+* @lib FileManagerEngine.lib
+* @since 2.0
+*/
+class TFileManagerDriveInfo
+ {
+ public:
+ /**
+ * C++ default constructor.
+ */
+ IMPORT_C TFileManagerDriveInfo();
+
+ /**
+ * Resets contents
+ */
+ IMPORT_C void Reset();
+
+ TBuf< KMaxVolumeName > iName;
+ TInt64 iCapacity;
+ TInt64 iSpaceFree;
+ TUint iUid;
+ TInt iDrive; // EDriveA...EDriveZ
+ // Drive state bits
+ enum TDriveState
+ {
+ EDrivePresent = 0x1,
+ EDriveLocked = 0x2,
+ EDriveCorrupted = 0x4,
+ EDriveWriteProtected = 0x8,
+ EDriveRemovable = 0x10,
+ EDriveRemote = 0x20,
+ EDriveFormattable = 0x40,
+ EDriveFormatted = 0x80,
+ EDriveLockable = 0x100,
+ EDrivePasswordProtected = 0x200,
+ EDriveBackupped = 0x400,
+ EDriveConnected = 0x800,
+ EDriveEjectable = 0x1000,
+ EDriveInUse = 0x2000,
+ EDriveMassStorage = 0x4000,
+ EDriveUsbMemory = 0x8000
+ };
+ TUint32 iState;
+
+ public:
+ /**
+ * Gets drive info
+ * @since 3.1
+ * @param aEngine Reference to engine
+ * @param aDrive Drive that info is required
+ */
+ void GetInfoL( const CFileManagerEngine& aEngine, const TInt aDrive );
+
+ private:
+ void CheckMountL( RFs& aFs, const TInt aDrive ) const;
+
+ TInt FillStateFromDriveInfo(
+ RFs& aFs, const TInt aDrive, const TDriveInfo& aDrvInfo );
+
+ TInt FillStateFromVolumeInfo( RFs& aFs, const TInt aDrive );
+
+ };
+
+#endif // TFILEMANAGERDRIVEINFO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/inc/filemanagerprivatepskeys.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 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: Declaration of private ps-keys
+*
+*/
+
+
+#ifndef FILEMANAGEPRIVATEPSKEYS_H
+#define FILEMANAGEPRIVATEPSKEYS_H
+
+// INCLUDES
+#include <e32std.h>
+
+// =============================================================================
+// FileManager Status PubSub API
+// =============================================================================
+const TUid KPSUidFileManagerStatus = { 0x101F84EB }; // File Manager SID
+
+/**
+* Backup status.
+* The value is controlled by FileManager and status observed by backup checker
+*/
+const TUint32 KFileManagerBkupStatus = 0x00000001;
+
+enum TFileManagerBkupStatusType
+ {
+ EFileManagerBkupStatusUnset = 0x00000000,
+ EFileManagerBkupStatusBackup = 0x00000001,
+ EFileManagerBkupStatusRestore = 0x00000002
+ };
+
+#endif // FILEMANAGERPRIVATEPSKEYS_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerActiveBase.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 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: Wraps wait note and real work thread
+*
+*/
+
+
+// INCLUDES
+#include <e32std.h>
+#include <AknWaitNoteWrapper.h>
+#include "CFileManagerActiveBase.h"
+#include "CFileManagerThreadWrapper.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::CFileManagerActiveBase
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveBase::CFileManagerActiveBase() :
+ iResult( KErrCancel )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::~CFileManagerActiveBase
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveBase::~CFileManagerActiveBase()
+ {
+ iCanceled = ETrue;
+ delete iThreadWrapper;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::BaseConstructL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveBase::BaseConstructL()
+ {
+ iThreadWrapper = CFileManagerThreadWrapper::NewL();
+ User::LeaveIfError( iThreadWrapper->StartThread(
+ *this,
+ MFileManagerThreadFunction::ENotifyFinished,
+ EPriorityNormal ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::StepL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveBase::StepL()
+ {
+ // Just do nothing. All processing is done by ThreadFunctionL().
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::IsProcessDone
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveBase::IsProcessDone() const
+ {
+ return iDone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::DialogDismissedL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveBase::DialogDismissedL( TInt aButtonId )
+ {
+ if ( aButtonId == EAknSoftkeyCancel )
+ {
+ CancelThreadFunction();
+ iCanceled = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::ThreadStepL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveBase::ThreadStepL()
+ {
+ ThreadFunctionL( iCanceled );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::IsThreadDone
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveBase::IsThreadDone()
+ {
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::NotifyThreadClientL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveBase::NotifyThreadClientL(
+ TNotifyType /*aType*/, TInt aValue)
+ {
+ iResult = aValue;
+ iDone = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::Result
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveBase::Result() const
+ {
+ return iResult;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveBase::CancelThreadFunction
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveBase::CancelThreadFunction()
+ {
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerActiveExecute.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1178 @@
+/*
+* Copyright (c) 2002-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: Handles the copy/move operation
+*
+*/
+
+
+// INCLUDE FILES
+#include <bautils.h>
+//#include <cmgxfilemanager.h>
+//#include <mgxfilemanagerfactory.h>
+#include "CFileManagerActiveExecute.h"
+#include "MFileManagerProcessObserver.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerFileSystemIterator.h"
+#include "Cfilemanagerindexiterator.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "CFileManagerUtils.h"
+#include "FileManagerDebug.h"
+#include "CFileManagerThreadWrapper.h"
+
+// CONSTANTS
+const TInt KFileManagerNotificationArrayGranularity = 64;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::NewL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerActiveExecute* CFileManagerActiveExecute::NewL(
+ CFileManagerEngine& aEngine,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ MFileManagerProcessObserver& aObserver,
+ CArrayFixFlat<TInt>& aIndexList,
+ const TDesC& aToFolder )
+ {
+ CFileManagerActiveExecute* self =
+ new( ELeave ) CFileManagerActiveExecute(
+ aEngine,
+ aOperation,
+ aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL( aIndexList, aToFolder );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::~CFileManagerActiveExecute
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerActiveExecute::~CFileManagerActiveExecute()
+ {
+ Cancel();
+ delete iThreadWrapper;
+ delete iItemIterator;
+ delete iFullPath;
+ delete iDestination;
+ delete iToFolder;
+ delete iIndexList;
+ delete iChangedSrcItems;
+ delete iChangedDstItems;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::ExecuteL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerActiveExecute::ExecuteL( TFileManagerSwitch aOverWrite )
+ {
+ TInt error( KErrNone );
+
+ if ( iCancelled )
+ {
+ TFileName newName;
+ TParsePtrC parse( *iFullPath );
+ if ( parse.NameOrExtPresent() )
+ {
+ newName.Copy( parse.NameAndExt() );
+ }
+ else
+ {
+ TPtrC name( iEngine.LocalizedName( *iFullPath ) );
+ if ( name.Length() > 0 )
+ {
+ newName.Copy( name );
+ }
+ else
+ {
+ newName = BaflUtils::FolderNameFromFullName( *iFullPath );
+ }
+ }
+ iObserver.ProcessFinishedL( iError, newName );
+ return;
+ }
+
+ if ( aOverWrite == ENoOverWrite )
+ {
+ iItemIterator->CurrentL( &iSrc, &iDst, iItemType );
+ }
+
+ if ( iDst && iDst->Length() > KMaxFileName )
+ {
+ error = KErrBadName;
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, error );
+ }
+ else if ( iItemType == EFileManagerFile )
+ {
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ if ( iSrc && iDst &&
+ CFileManagerUtils::IsFromInternalToRemovableDrive( iFs, *iSrc, *iDst ) )
+ {
+ TBool protectedFile( EFalse );
+
+ // silently ignore this file if it is protected, or if there
+ // was an error in checking.
+ // Did consider leaving, but what about eg KErrNotFound - eg another
+ // process moving/deleting the file...
+ TInt ret( iEngine.IsDistributableFile( *iSrc, protectedFile ) );
+ if( protectedFile || ret != KErrNone )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ SetActive();
+ return;
+ }
+ }
+#endif
+ DoOperation( aOverWrite );
+ return;
+ }
+ else if ( iItemType == EFileManagerFolder )
+ {
+ if ( !iIsDstRemoteDrive && iEngine.IsNameFoundL( *iDst ) )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrAlreadyExists );
+ SetActive();
+ return;
+ }
+ DoOperation( aOverWrite );
+ return;
+ }
+ else
+ {
+ // We must complete this
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, error );
+ }
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::CancelExecution
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerActiveExecute::CancelExecution()
+ {
+ FUNC_LOG
+
+ iCancelled = ETrue;
+
+ if ( iSrc )
+ {
+ iEngine.CancelTransfer( *iSrc );
+ }
+ if ( iDst )
+ {
+ iEngine.CancelTransfer( *iDst );
+ }
+ delete iThreadWrapper; // Cancel thread
+ iThreadWrapper = NULL;
+ Cancel();
+ TRAP_IGNORE( CompleteL( KErrCancel ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::DoCancel
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::DoCancel()
+ {
+ iCancelled = ETrue;
+
+ if ( iSrc )
+ {
+ iEngine.CancelTransfer( *iSrc );
+ }
+ if ( iDst )
+ {
+ iEngine.CancelTransfer( *iDst );
+ }
+ delete iThreadWrapper; // Cancel thread
+ iThreadWrapper = NULL;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerActiveExecute::KErrNoneAction
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::KErrNoneActionL()
+ {
+ UpdateNotifications( EFalse, KErrNone );
+ if ( iItemIterator->NextL() )
+ {
+ ExecuteL( ENoOverWrite );
+ }
+ else
+ {
+ if ( iOperation == MFileManagerProcessObserver::EMoveProcess &&
+ iEngine.IsFolder( iIndexList->At( 0 ) ) )
+ {
+ if ( !iFinalizeMove )
+ {
+ // Finalize move in the thread, the finalizing way take time
+ iFinalizeMove = ETrue;
+ DoOperation( ENoOverWrite );
+ return;
+ }
+ }
+ UpdateNotifications( ETrue, KErrNone );
+ iObserver.ProcessFinishedL( KErrNone );
+ }
+
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerActiveExecute::KErrAlreadyExistsAction
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::KErrAlreadyExistsActionL()
+ {
+ TParsePtrC dstParse( *iDst );
+ HBufC* name = HBufC::NewLC( KMaxFileName );
+ TPtr ptrName( name->Des() );
+ TBool doContinue( EFalse );
+
+ // Depending on target file can it be delete, we ask overwrite or rename.
+ // If source and target is same, then rename is only possible choice.
+ if ( iItemType == EFileManagerFile && iEngine.CanDelete( *iDst ) && iSrc->FindF( *iDst ) )
+ {
+ if ( iObserver.ProcessQueryOverWriteL( *iDst, ptrName, iOperation ) )
+ {
+ ExecuteL( EOverWrite );
+ }
+ else
+ {
+ // user does not want to overwrite item and ptrName should now contain
+ // user given new name
+ if ( ptrName.Length() > 0 )
+ {
+ ptrName.Insert( 0, dstParse.DriveAndPath() );
+ if ( !iDst->CompareF( ptrName ) )
+ {
+ DoOperation( ENoOverWrite );
+ }
+ else
+ {
+ iDst->Des().Copy( ptrName );
+ // Overwrite, because user already queried by overwrite
+ DoOperation( EOverWrite );
+ }
+ }
+ else
+ {
+ // User is not willing to rename item, continue current operation
+ doContinue = ETrue;
+ }
+ }
+ }
+ else
+ {
+ // item can't be overwrite
+ if ( iObserver.ProcessQueryRenameL( *iDst, ptrName, iOperation ) )
+ {
+ if ( ptrName.Length() > 0 )
+ {
+ if ( iItemType == EFileManagerFile )
+ {
+ ptrName.Insert( 0, dstParse.DriveAndPath() );
+ iDst->Des().Copy( ptrName );
+ }
+ else if ( iItemType == EFileManagerFolder )
+ {
+ TPtr ptr( iDst->Des() );
+ AddLastFolder( ptr, ptrName, *iToFolder );
+ iDestination->Des().Copy( ptr );
+ }
+ // Overwrite, because user already queried by rename
+ ExecuteL( EOverWrite );
+ }
+ else if ( iItemType == EFileManagerFolder )
+ {
+ iCancelled = ETrue;
+ iError = KErrCancel;
+ ExecuteL( ENoOverWrite );
+ }
+ else
+ {
+ // User is not willing to rename item, continue current operation
+ doContinue = ETrue;
+ }
+ }
+ else if ( iItemType == EFileManagerFolder )
+ {
+ iCancelled = ETrue;
+ iError = KErrCancel;
+ ExecuteL( ENoOverWrite );
+ }
+ else
+ {
+ // User is not willing to rename item, continue current operation
+ doContinue = ETrue;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( name );
+
+ if ( doContinue )
+ {
+ if ( iItemIterator->NextL() )
+ {
+ ExecuteL( ENoOverWrite );
+ }
+ else
+ {
+ UpdateNotifications( ETrue, KErrNone );
+ iObserver.ProcessFinishedL( KErrNone );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::RunL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::RunL()
+ {
+ CompleteL( iStatus.Int() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::CompleteL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::CompleteL( TInt aError )
+ {
+ if ( iCancelled || !iItemIterator )
+ {
+ UpdateNotifications( ETrue, iError );
+ TParsePtrC parse( CFileManagerUtils::StripFinalBackslash(
+ *iDestination ) );
+ if ( parse.NameOrExtPresent() )
+ {
+ iObserver.ProcessFinishedL( iError, parse.NameAndExt() );
+ }
+ else if ( parse.DrivePresent() )
+ {
+ iObserver.ProcessFinishedL( iError, parse.Drive() );
+ }
+ else
+ {
+ iObserver.ProcessFinishedL( iError );
+ }
+ return;
+ }
+
+ // Symbian returns KErrNone if source and destination
+ // in moving is same. Here we have to treat it as error.
+ if( iSrc && iDst )
+ {
+ if ( !iSrc->CompareF( *iDst ) && aError == KErrNone )
+ {
+ aError = KErrInUse;
+ }
+ }
+
+ ERROR_LOG1( "CFileManagerActiveExecute::CompleteL()-aError=%d", aError )
+
+ switch ( aError )
+ {
+ case KErrNone:
+ {
+ KErrNoneActionL();
+ break;
+ }
+ case KErrAlreadyExists:
+ {
+ KErrAlreadyExistsActionL();
+ break;
+ }
+ case KErrCancel: // Suppressed errors
+ {
+ UpdateNotifications( ETrue, KErrNone );
+ iObserver.ProcessFinishedL( KErrNone );
+ break;
+ }
+ default:
+ {
+ if ( iSrc )
+ {
+ // Try rename when moving and the target file exists and is in use
+ if ( iOperation == MFileManagerProcessObserver::EMoveProcess &&
+ aError == KErrInUse &&
+ iDst &&
+ iEngine.CanDelete( *iSrc ) &&
+ iEngine.IsNameFoundL( *iDst ) )
+ {
+ KErrAlreadyExistsActionL();
+ }
+ else
+ {
+ UpdateNotifications( ETrue, aError );
+ TParsePtrC parse( *iSrc );
+ iObserver.ProcessFinishedL( aError, parse.NameAndExt() );
+ }
+ }
+ else
+ {
+ UpdateNotifications( ETrue, aError );
+ iObserver.ProcessFinishedL( aError );
+ }
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::RunError
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveExecute::RunError(TInt aError)
+ {
+ return aError;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::CFileManagerActiveExecute
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveExecute::CFileManagerActiveExecute(
+ CFileManagerEngine& aEngine,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation,
+ MFileManagerProcessObserver& aObserver ) :
+ CActive( CActive::EPriorityLow ), // Use low to avoid progress note mess up
+ iEngine( aEngine ),
+ iFs( aEngine.Fs() ),
+ iOperation( aOperation ),
+ iObserver( aObserver )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::ConstructL( CArrayFixFlat<TInt>& aIndexList,
+ const TDesC& aToFolder )
+ {
+ iChangedSrcItems = new( ELeave ) CDesCArrayFlat(
+ KFileManagerNotificationArrayGranularity );
+ iChangedDstItems = new( ELeave ) CDesCArrayFlat(
+ KFileManagerNotificationArrayGranularity );
+
+ iToFolder = aToFolder.AllocL();
+ TInt count( aIndexList.Count() );
+ iIndexList = new( ELeave ) CArrayFixFlat< TInt >( count );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ // make own copy of index list because caller may
+ // destroy the original one.
+ iIndexList->AppendL( aIndexList.At( i ) );
+ }
+
+ TInt index( iIndexList->At( iCurrentIndex ) );
+
+ iFullPath = iEngine.IndexToFullPathL( index );
+
+ TBool isDirectory( iEngine.IsFolder( index ) );
+
+ iDestination = HBufC::NewL( KFmgrDoubleMaxFileName );
+
+ if ( isDirectory )
+ {
+ TPtr ptr( iDestination->Des() );
+ AddLastFolder( ptr, *iFullPath, *iToFolder );
+ }
+ else
+ {
+ iDestination->Des().Copy( aToFolder );
+ }
+
+ // Check that we are not copying/moving folder to inside it ( recursive copy )
+ if ( isDirectory && !iDestination->FindF( *iFullPath ) &&
+ iDestination->Length() > iFullPath->Length() )
+ {
+ iCancelled = ETrue;
+ iError = KErrAccessDenied;
+ }
+ // Is destination path too long for file system
+ else if ( iDestination->Length() > KMaxFileName )
+ {
+ iCancelled = ETrue;
+ iError = KErrBadName;
+ }
+ else if ( isDirectory )
+ {
+ iItemIterator = CFileManagerFileSystemIterator::NewL(
+ iFs, *iFullPath, *iDestination, iEngine );
+ }
+ else
+ {
+ iItemIterator = CFileManagerIndexIterator::NewL(
+ iEngine, aIndexList, *iDestination );
+ }
+
+ // MG2 notification object
+ //iMgxFileManager = &iEngine.MGXFileManagerL();
+
+ // Check are operation source and target on the same drive
+ TParsePtrC srcParse( *iFullPath );
+ TParsePtrC dstParse( *iDestination );
+ TPtrC srcDrv( srcParse.Drive() );
+ TPtrC dstDrv( dstParse.Drive() );
+ iOperationOnSameDrive = !( srcDrv.CompareF( dstDrv ) );
+ iIsSrcRemoteDrive = CFileManagerUtils::IsRemoteDrive( iFs, srcDrv );
+ iIsDstRemoteDrive = CFileManagerUtils::IsRemoteDrive( iFs, dstDrv );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::AddLastFolder
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::AddLastFolder( TDes& aResult,
+ const TDesC& aSrc,
+ const TDesC& aDst )
+ {
+ TInt lastBackslash = aSrc.LocateReverse( KFmgrBackslash()[0] );
+ if ( lastBackslash != KErrNotFound )
+ {
+ // source is full path
+ aResult.Copy( aSrc.Left( lastBackslash - 1 ) );
+ // Last backslash is now temporary removed check next last backslash
+ TInt secondLastBackslash( aResult.LocateReverse( KFmgrBackslash()[0] ) );
+ // Now we know the coordinates of the last path
+ aResult.Copy( iEngine.LocalizedName( aSrc ) );
+ if ( aResult.Length() > 0 )
+ {
+ aResult.Insert( 0, aDst );
+ aResult.Append( KFmgrBackslash );
+ }
+ else
+ {
+ aResult.Append( aDst );
+ // Skip '\\'
+ TInt startingPoint( secondLastBackslash + 1 );
+ aResult.Append( aSrc.Mid( startingPoint,
+ lastBackslash - secondLastBackslash ) );
+ }
+ }
+ else
+ {
+ // source is only one folder name
+ aResult.Copy( aDst );
+ aResult.Append( aSrc );
+ aResult.Append( KFmgrBackslash );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::DoOperation
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveExecute::DoOperation( TInt aSwitch )
+ {
+ // Source and destination must be different
+ if ( iSrc && iDst && !iDst->CompareF( *iSrc ) )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrAlreadyExists );
+ SetActive();
+ return KErrAlreadyExists;
+ }
+ TInt err( KErrNone );
+
+ iSwitch = aSwitch;
+
+ if ( !iThreadWrapper )
+ {
+ TRAP( err, iThreadWrapper = CFileManagerThreadWrapper::NewL() );
+ if ( err != KErrNone )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, err );
+ SetActive();
+ return err;
+ }
+ }
+ if ( iThreadWrapper->IsThreadStarted() )
+ {
+ iThreadWrapper->ResumeThread();
+ }
+ else
+ {
+ err = iThreadWrapper->StartThread(
+ *this, ENotifyStepFinished, EPriorityLess );
+ if ( err != KErrNone )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, err );
+ SetActive();
+ return err;
+ }
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::IsEmptyDir
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveExecute::IsEmptyDir( const TDesC& aDir )
+ {
+ return !CFileManagerUtils::HasAny(
+ iFs, aDir, KEntryAttMatchMask | KEntryAttNormal );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::ThreadCopyOrMoveStepL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::ThreadCopyOrMoveStepL()
+ {
+ FUNC_LOG
+
+ INFO_LOG2( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-%S=>%S",
+ iSrc, iDst )
+
+ TInt err( KErrNone );
+
+ if ( iItemType == EFileManagerFolder )
+ {
+ // Handle folders
+ err = iFs.MkDir( *iDst ); // Try faster way first
+ LOG_IF_ERROR1(
+ err,
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-MkDir,err=%d",
+ err )
+ if ( err != KErrNone && err != KErrCancel )
+ {
+ err = iFs.MkDirAll( *iDst );
+ LOG_IF_ERROR1(
+ err,
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-MkDirAll,err=%d",
+ err )
+ }
+ if ( err == KErrNone )
+ {
+ TEntry entry;
+ err = iFs.Entry( *iSrc, entry );
+ if ( err == KErrNone )
+ {
+ iFs.SetEntry( *iDst, entry.iModified, entry.iAtt, 0 ); // Ignore error
+ }
+ }
+ User::LeaveIfError( err );
+ return;
+ }
+
+ // Handle files
+ if ( iOperationOnSameDrive &&
+ iOperation == MFileManagerProcessObserver::EMoveProcess )
+ {
+ INFO_LOG(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-MoveInsideDrive" )
+
+ if ( iSwitch == EOverWrite )
+ {
+ INFO_LOG( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-Overwrite" )
+
+ err = iFs.Replace( *iSrc, *iDst );
+ }
+ else
+ {
+ INFO_LOG( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-NoOverwrite" )
+
+ err = iFs.Rename( *iSrc, *iDst );
+ }
+
+ LOG_IF_ERROR1(
+ err,
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-OnSameDrive,err=%d",
+ err )
+
+ if ( err == KErrNone || err == KErrCancel )
+ {
+ // Optimized move was successful or cancelled
+ User::LeaveIfError( err );
+ // If move the files in the same drive, the application
+ // just calculate the amount of the files, so it should
+ // notify the observer that how many files have been moved.
+ iBytesTransferredTotal++;
+ TRAP_IGNORE( iObserver.ProcessAdvanceL(
+ iBytesTransferredTotal ) );
+ return;
+ }
+ }
+
+ TInt64 fileSize( 0 );
+ RFile64 srcFile;
+
+ // Open source file
+ if ( iOperation == MFileManagerProcessObserver::EMoveProcess )
+ {
+ INFO_LOG( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-Move" )
+
+ User::LeaveIfError( srcFile.Open(
+ iFs, *iSrc, EFileRead | EFileShareExclusive ) );
+ }
+ else
+ {
+ INFO_LOG( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-Copy" )
+
+ User::LeaveIfError( srcFile.Open(
+ iFs, *iSrc, EFileRead | EFileShareReadersOnly ) );
+ }
+ CleanupClosePushL( srcFile );
+ User::LeaveIfError( srcFile.Size( fileSize ) );
+
+ // Open destination file
+ RFile64 dstFile;
+ if ( iSwitch == EOverWrite )
+ {
+ INFO_LOG( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-Overwrite" )
+
+ User::LeaveIfError( dstFile.Replace(
+ iFs, *iDst, EFileWrite | EFileShareExclusive ) );
+ }
+ else
+ {
+ INFO_LOG( "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-NoOverwrite" )
+
+ User::LeaveIfError( dstFile.Create(
+ iFs, *iDst, EFileWrite | EFileShareExclusive ) );
+ }
+ CleanupClosePushL( dstFile );
+
+ dstFile.SetSize( fileSize ); // Setting the size first speeds up operation
+
+ INFO_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-FileSize=%d",
+ fileSize )
+
+ // Create buffer and copy file data using it.
+ // Note that buffer size should not be too big to make it is possible
+ // to cancel the operation in reasonable time from the main thread.
+
+ // Move these to CenRep to make configuration and fine tuning easier.
+ const TInt64 KBigBufSize = 0x40000; // 256KB
+ const TInt64 KMediumBufSize = 0x10000; // 64KB
+ const TInt64 KSmallBufSize = 0x2000; // 8KB
+
+ HBufC8* buf = HBufC8::New(
+ Max( KSmallBufSize, Min( fileSize, KBigBufSize ) ) );
+ if ( !buf )
+ {
+ buf = HBufC8::New( KMediumBufSize );
+ }
+ if ( !buf )
+ {
+ buf = HBufC8::New( KSmallBufSize );
+ }
+ if ( !buf )
+ {
+ User::Leave( KErrNoMemory );
+ }
+ CleanupStack::PushL( buf );
+
+ TPtr8 block( buf->Des() );
+
+ INFO_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-BlockSize=%d",
+ block.MaxSize() )
+
+ while ( err == KErrNone && fileSize > 0 )
+ {
+ if ( iThreadWrapper->IsThreadCanceled() )
+ {
+ err = KErrCancel;
+ break;
+ }
+ TInt blockSize( Min( fileSize, static_cast<TInt64>(block.MaxSize() ) ) );
+ err = srcFile.Read( block, blockSize );
+ if ( err == KErrNone )
+ {
+ if ( block.Length() == blockSize )
+ {
+ err = dstFile.Write( block, blockSize );
+ if ( err == KErrNone )
+ {
+ fileSize -= blockSize;
+
+ // Do not update the latest file transfer progress here.
+ // Flushing file below may take a long time and
+ // progress indicator should not get full before it.
+ TRAP_IGNORE( iObserver.ProcessAdvanceL(
+ iBytesTransferredTotal ) );
+ iBytesTransferredTotal += blockSize;
+ }
+ }
+ else
+ {
+ err = KErrCorrupt;
+ }
+ }
+ }
+
+ INFO_LOG2(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-BytesNotWritten=%d,err=%d",
+ fileSize, err )
+
+ CleanupStack::PopAndDestroy( buf );
+
+ // Copy attributes
+ TTime mod;
+ if ( err == KErrNone )
+ {
+ err = srcFile.Modified( mod );
+
+ INFO_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-ModifiedRead,err=%d",
+ err )
+
+ }
+ if ( err == KErrNone )
+ {
+ err = dstFile.SetModified( mod );
+
+ INFO_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-ModifiedWritten,err=%d",
+ err )
+ }
+ TUint att( 0 );
+ if ( err == KErrNone )
+ {
+ err = srcFile.Att( att );
+
+ INFO_LOG2(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-AttributesRead,err=%d,att=%d",
+ err, att )
+ }
+ if ( err == KErrNone )
+ {
+ // Ignore fail, because some drives like remote drives
+ // do not support attributes at all
+ dstFile.SetAtt( att, ( ~att ) & KEntryAttMaskSupported );
+
+ INFO_LOG(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-AttributesWritten" )
+ }
+ // Flush file and finalize transfer progress of this file.
+ // Don't flush if copying failed because it causes save dialog to appear
+ // when remote drives are involved.
+ if ( err == KErrNone )
+ {
+ err = dstFile.Flush();
+
+ INFO_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-Flushed,err=%d",
+ err )
+ }
+ TRAP_IGNORE( iObserver.ProcessAdvanceL( iBytesTransferredTotal ) );
+
+ CleanupStack::PopAndDestroy( &dstFile );
+ CleanupStack::PopAndDestroy( &srcFile );
+
+ // Delete source if move was succesful so far
+ if ( err == KErrNone &&
+ iOperation == MFileManagerProcessObserver::EMoveProcess )
+ {
+ // Ensure that read-only is removed before delete
+ if ( att & KEntryAttReadOnly )
+ {
+ CFileManagerUtils::RemoveReadOnlyAttribute( iFs, *iSrc );
+ }
+ err = iFs.Delete( *iSrc );
+
+ INFO_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-MoveSourceDeleted,err=%d",
+ err )
+ }
+
+ // Delete incomplete destination if error
+ if ( err != KErrNone )
+ {
+ // Ensure that read-only is removed before delete
+ if ( att & KEntryAttReadOnly )
+ {
+ CFileManagerUtils::RemoveReadOnlyAttribute( iFs, *iDst );
+ }
+ iFs.Delete( *iDst );
+
+ ERROR_LOG1(
+ "CFileManagerActiveExecute::ThreadCopyOrMoveStepL-FailedDstDeleted,fail=%d",
+ err )
+ }
+
+ User::LeaveIfError( err );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::IsThreadDone()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveExecute::IsThreadDone()
+ {
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::NotifyThreadClientL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::NotifyThreadClientL(
+ TNotifyType aType, TInt aValue )
+ {
+ switch ( aType )
+ {
+ case ENotifyStepFinished:
+ {
+ CompleteL( aValue );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::AppendArrayIfNotFound()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::AppendArrayIfNotFound(
+ CDesCArray& aArray, const TDesC& aFullPath )
+ {
+ // Append if not already appended to the last item
+ TBool append( ETrue );
+ TInt count( aArray.MdcaCount() );
+ if ( count > 0 )
+ {
+ TPtrC ptr( aArray.MdcaPoint( count - 1 ) );
+ if ( !ptr.Compare( aFullPath ) )
+ {
+ append = EFalse;
+ }
+ }
+ if ( append )
+ {
+ TRAPD( err, aArray.AppendL( aFullPath ) );
+ if ( err != KErrNone )
+ {
+ ERROR_LOG1(
+ "CFileManagerActiveExecute::AppendArrayIfNotFound-err=%d",
+ err )
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::FlushArray()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::FlushArray( CDesCArray& aArray )
+ {
+ if ( aArray.MdcaCount() > 0 )
+ {
+// TRAP_IGNORE( iMgxFileManager->UpdateL( aArray ) );
+ aArray.Reset();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::UpdateNotifications()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::UpdateNotifications(
+ TBool aFlush, TInt aError )
+ {
+ // Append notification item if operation was successful and
+ // item does not already exist
+ if ( aError == KErrNone && iSrc && iDst && iItemType == EFileManagerFile )
+ {
+ // Notifications are relevant only for local drives
+ if ( iOperation == MFileManagerProcessObserver::EMoveProcess &&
+ !iIsSrcRemoteDrive )
+ {
+ AppendArrayIfNotFound( *iChangedSrcItems, *iSrc );
+ }
+ if ( !iIsDstRemoteDrive )
+ {
+ AppendArrayIfNotFound( *iChangedDstItems, *iDst );
+ }
+ }
+ if ( aFlush )
+ {
+ FlushArray( *iChangedSrcItems );
+ FlushArray( *iChangedDstItems );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::ThreadFinalizeMoveStepL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::ThreadFinalizeMoveStepL()
+ {
+ FUNC_LOG
+
+ HBufC* folderToDelete = HBufC::NewLC( KMaxFileName );
+ TPtr ptrFolderToDelete( folderToDelete->Des() );
+ CDirScan* dirScan = CDirScan::NewLC( iFs );
+ dirScan->SetScanDataL(
+ *iFullPath,
+ KEntryAttNormal|KEntryAttHidden|KEntryAttSystem|
+ KEntryAttDir|KEntryAttMatchExclusive,
+ ESortNone,
+ CDirScan::EScanUpTree );
+ CDir* dir = NULL;
+ dirScan->NextL( dir );
+ while( dir )
+ {
+ CFileManagerUtils::RemoveReadOnlyAttribute(
+ iFs, dirScan->FullPath() );
+ CleanupStack::PushL( dir );
+ TInt count( dir->Count() );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ if ( iThreadWrapper->IsThreadCanceled() )
+ {
+ User::Leave( KErrCancel );
+ }
+ TPtrC abbrPath( dirScan->AbbreviatedPath() );
+ const TEntry& entry( ( *dir )[ i ] );
+ ptrFolderToDelete.Copy( *iFullPath );
+ ptrFolderToDelete.Append(
+ abbrPath.Right( abbrPath.Length() - 1 ) );
+ ptrFolderToDelete.Append( entry.iName );
+ ptrFolderToDelete.Append( KFmgrBackslash );
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ if ( iSrc && iDst &&
+ CFileManagerUtils::IsFromInternalToRemovableDrive( iFs, *iSrc, *iDst ) )
+ {
+ HBufC* targetFolderToDelete = HBufC::NewLC( KMaxFileName );
+ TPtr ptrTargetFolderToDelete( targetFolderToDelete->Des() );
+ ptrTargetFolderToDelete.Append( *iDestination );
+ ptrTargetFolderToDelete.Append(
+ abbrPath.Right( abbrPath.Length() - 1 ) );
+ ptrTargetFolderToDelete.Append( entry.iName );
+ ptrTargetFolderToDelete.Append( KFmgrBackslash );
+
+ if ( IsEmptyDir( ptrFolderToDelete ) )
+ {
+ User::LeaveIfError( iFs.RmDir( ptrFolderToDelete ) );
+ }
+ else if ( IsEmptyDir( ptrTargetFolderToDelete ))
+ {
+ User::LeaveIfError( iFs.RmDir( ptrTargetFolderToDelete ) );
+ }
+ CleanupStack::PopAndDestroy( targetFolderToDelete );
+ }
+ else
+ {
+ User::LeaveIfError( iFs.RmDir( ptrFolderToDelete ) );
+ }
+#else
+ User::LeaveIfError( iFs.RmDir( ptrFolderToDelete ) );
+#endif
+ }
+ if ( iThreadWrapper->IsThreadCanceled() )
+ {
+ User::Leave( KErrCancel );
+ }
+ CleanupStack::PopAndDestroy( dir );
+ dir = NULL;
+ dirScan->NextL( dir );
+ }
+ CleanupStack::PopAndDestroy( dirScan );
+ CleanupStack::PopAndDestroy( folderToDelete );
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+ if ( iSrc && iDst &&
+ CFileManagerUtils::IsFromInternalToRemovableDrive( iFs, *iSrc, *iDst ) )
+ {
+ if ( IsEmptyDir( *iFullPath ) )
+ {
+ User::LeaveIfError( iFs.RmDir( *iFullPath ) );
+ }
+ }
+ else
+ {
+ User::LeaveIfError( iFs.RmDir( *iFullPath ) );
+ }
+#else
+ User::LeaveIfError( iFs.RmDir( *iFullPath ) );
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::ThreadStepL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveExecute::ThreadStepL()
+ {
+ FUNC_LOG
+
+ if ( !iFinalizeMove )
+ {
+ ThreadCopyOrMoveStepL();
+ }
+ else
+ {
+ ThreadFinalizeMoveStepL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveExecute::ToFolder()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerActiveExecute::ToFolder()
+ {
+ if ( iToFolder )
+ {
+ return iToFolder->Des();
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerActiveRename.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 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: Class wraps rename operation
+*
+*/
+
+
+// INCLUDES
+#include <e32std.h>
+#include "CFileManagerActiveRename.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerUtils.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "FileManagerDebug.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::CFileManagerActiveRename
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveRename::CFileManagerActiveRename(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils ) :
+ iEngine( aEngine ),
+ iUtils( aUtils ),
+ iFs( aEngine.Fs() )
+ {
+ FUNC_LOG
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::~CFileManagerActiveRename
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveRename::~CFileManagerActiveRename()
+ {
+ FUNC_LOG
+
+ delete iName;
+ delete iNewName;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::NewL
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveRename* CFileManagerActiveRename::NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils,
+ const TDesC& aName,
+ const TDesC& aNewName )
+ {
+ FUNC_LOG
+
+ CFileManagerActiveRename* self = new ( ELeave ) CFileManagerActiveRename(
+ aEngine, aUtils );
+ CleanupStack::PushL( self );
+ self->ConstructL( aName, aNewName );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveRename::ConstructL(
+ const TDesC& aName, const TDesC& aNewName )
+ {
+ FUNC_LOG
+
+ iName = aName.AllocL();
+ iNewName = aNewName.AllocL();
+ // Remove white spaces from end, file server also ignores those
+ iNewName->Des().TrimRight();
+ iName->Des().TrimRight();
+
+ iIsRemoteDrive = iUtils.IsRemoteDrive( aName );
+ BaseConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::ThreadFunctionL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveRename::ThreadFunctionL( const TBool& aCanceled )
+ {
+ FUNC_LOG
+
+ TInt maxSubPath( 0 );
+ TBool isFolder( CFileManagerUtils::HasFinalBackslash( *iName ) );
+ if ( isFolder && !iIsRemoteDrive )
+ {
+ // On local drives, solve maximum subfolder path to avoid too long paths
+ maxSubPath = ThreadGetMaxSubfolderPathL( aCanceled );
+ }
+ if ( iNewName->Length() + maxSubPath > KMaxFileName )
+ {
+ User::Leave( KErrBadName );
+ }
+ if ( isFolder )
+ {
+ User::LeaveIfError( iFs.Rename( *iName, *iNewName ) );
+ }
+ else
+ {
+ // Replace the target item if exist
+ // if we have came here, it is already asked that
+ // user want's to overwrite other item
+ User::LeaveIfError( iFs.Replace( *iName, *iNewName ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::ThreadGetMaxSubfolderPathL
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveRename::ThreadGetMaxSubfolderPathL(
+ const TBool& aCanceled )
+ {
+ FUNC_LOG
+
+ CDirScan* dirScan = CDirScan::NewLC( iFs );
+
+ // Set scanning from current directory,
+ // take files and folder including the hidden and system files
+ // No sorting needed
+ dirScan->SetScanDataL(
+ *iName,
+ KEntryAttNormal | KEntryAttDir | KEntryAttHidden | KEntryAttSystem,
+ ESortNone );
+
+ TInt ret( 0 );
+ CDir* dir = NULL;
+ dirScan->NextL( dir );
+ while( dir )
+ {
+ CleanupStack::PushL( dir );
+ if ( aCanceled )
+ {
+ User::Leave( KErrCancel );
+ }
+ TInt count( dir->Count() );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ if ( aCanceled )
+ {
+ User::Leave( KErrCancel );
+ }
+ const TEntry& entry( ( *dir )[ i ] );
+ TPtrC abbrPath( dirScan->AbbreviatedPath() );
+ TInt abbrPathLen( abbrPath.Length() );
+ if ( abbrPathLen && abbrPath[ 0 ] == KFmgrBackslash()[ 0 ] )
+ {
+ --abbrPathLen; // Initial backslash is already included
+ }
+ TInt pathLen( abbrPathLen + entry.iName.Length() );
+ if( entry.IsDir() ) // Add space for trailing backslash
+ {
+ ++pathLen;
+ }
+ if( pathLen > ret )
+ {
+ ret = pathLen;
+ }
+ if ( pathLen > KMaxFileName )
+ {
+ User::Leave( KErrBadName );
+ }
+ }
+ CleanupStack::PopAndDestroy( dir );
+ dirScan->NextL( dir );
+ }
+ CleanupStack::PopAndDestroy( dirScan );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveRename::CancelThreadFunction
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveRename::CancelThreadFunction()
+ {
+ FUNC_LOG
+
+ if ( iName )
+ {
+ iEngine.CancelTransfer( *iName );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerBackupSettings.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2006 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: Empty backup settings to maintain library BC.
+* Remove this file when cleaning up RnD flags
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "cfilemanagerbackupsettings.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CFileManagerBackupSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CFileManagerBackupSettings(
+ CFileManagerEngine& aEngine ) :
+ iEngine( aEngine )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::~CFileManagerBackupSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::~CFileManagerBackupSettings()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings* CFileManagerBackupSettings::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerBackupSettings* self =
+ new ( ELeave ) CFileManagerBackupSettings(
+ aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupSettings::ConstructL()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetContent
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetContent(
+ const TUint32 /*aContent*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetScheduling
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetScheduling(
+ const TInt /*aScheduling*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetDay
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetDay( const TInt /*aDay*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetTime
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetTime( const TTime& /*aTime*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetTargetDrive
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetTargetDrive(
+ const TInt /*aDrive*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Content
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerBackupSettings::Content() const
+ {
+ return iContent;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Scheduling
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::Scheduling() const
+ {
+ return 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Day
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::Day() const
+ {
+ return 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Time
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TTime& CFileManagerBackupSettings::Time() const
+ {
+ return iTime;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::TargetDrive
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::TargetDrive() const
+ {
+ return 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SaveL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SaveL()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::MdcaCount
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::SettingAt( const TInt /*aIndex*/ )
+ {
+ return 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::MdcaCount
+// ----------------------------------------------------------------------------
+//
+TInt CFileManagerBackupSettings::MdcaCount() const
+ {
+ return 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::MdcaPoint
+// ----------------------------------------------------------------------------
+//
+TPtrC CFileManagerBackupSettings::MdcaPoint( TInt /*aIndex*/ ) const
+ {
+ return TPtrC( KNullDesC );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CEntry::~CEntry
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry::~CEntry()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::RefreshL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::RefreshL()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::AllowedDriveAttMatchMask
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerBackupSettings::AllowedDriveAttMatchMask() const
+ {
+ return KDriveAttRemovable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerBackupSettingsFull.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,679 @@
+/*
+* Copyright (c) 2006-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: Backup settings
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <avkon.rsg>
+#include <FileManagerEngine.rsg>
+#include <StringLoader.h>
+#include <centralrepository.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+#include <AknUtils.h>
+#include "FileManagerDebug.h"
+#include "CFileManagerEngine.h"
+#include "FileManagerPrivateCRKeys.h"
+#include "CFileManagerBackupSettings.h"
+#include "CFileManagerCommonDefinitions.h"
+
+// CONSTANTS
+_LIT( KSeparator, "\t" );
+const TInt KSeparatorSpace = 3;
+_LIT( KTimeFormatBefore, " %-B %J:%T" );
+_LIT( KTimeFormatAfter, " %J:%T %+B" );
+const TInt KTimeStrMax = 20;
+
+const TInt KSchedulingTextLookup[] = {
+ R_QTN_FMGR_BACKUP_NO_SCHEDULING, // CFileManagerBackupSettings::ENoScheduling
+ R_QTN_FMGR_BACKUP_DAILY, // CFileManagerBackupSettings::EDaily
+ R_QTN_FMGR_BACKUP_WEEKLY // CFileManagerBackupSettings::EWeekly
+};
+
+const TInt KMinToMicroSecMultiplier = 60000000;
+const TInt KTargetDriveStrMax = 4;
+_LIT( KTimeSeparatorPlaceHolder, ":" );
+const TInt KHourMinSeparator = 1;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CFileManagerBackupSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CFileManagerBackupSettings(
+ CFileManagerEngine& aEngine ) :
+ iEngine( aEngine )
+ {
+ FUNC_LOG
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::~CFileManagerBackupSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::~CFileManagerBackupSettings()
+ {
+ FUNC_LOG
+ delete iCenRep;
+ iList.ResetAndDestroy();
+ iList.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings* CFileManagerBackupSettings::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerBackupSettings* self =
+ new ( ELeave ) CFileManagerBackupSettings(
+ aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupSettings::ConstructL()
+ {
+ FUNC_LOG
+
+ iCenRep = CRepository::NewL( KCRUidFileManagerSettings );
+
+ RefreshL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetContent
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetContent(
+ const TUint32 aContent )
+ {
+ iContent = aContent;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetScheduling
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetScheduling(
+ const TInt aScheduling )
+ {
+ iScheduling = aScheduling;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetDay
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetDay( const TInt aDay )
+ {
+ iDay = aDay;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetTime
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetTime( const TTime& aTime )
+ {
+ iTime = aTime;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SetTargetDrive
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SetTargetDrive( const TInt aDrive )
+ {
+ iTargetDrive = aDrive;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Content
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerBackupSettings::Content() const
+ {
+ return iContent;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Scheduling
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::Scheduling() const
+ {
+ return iScheduling;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Day
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::Day() const
+ {
+ return iDay;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::Time
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TTime& CFileManagerBackupSettings::Time() const
+ {
+ return iTime;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::TargetDrive
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::TargetDrive() const
+ {
+ return iTargetDrive;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::ContentCount
+// ----------------------------------------------------------------------------
+//
+TInt CFileManagerBackupSettings::ContentsSelected() const
+ {
+ TInt ret( 0 );
+ // Count selected only
+ TUint32 mask( iContent );
+ while ( mask )
+ {
+ if ( mask & 1 )
+ {
+ ++ret;
+ }
+ mask >>= 1;
+ }
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SaveL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::SaveL()
+ {
+ FUNC_LOG
+
+ TInt err( KErrNone );
+
+ err = iCenRep->Set(
+ KFileManagerBackupContent, static_cast< TInt >( iContent ) );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::SaveL-Content-err%d",
+ err )
+
+ err = iCenRep->Set(
+ KFileManagerBackupScheduling, static_cast< TInt >( iScheduling ) );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::SaveL-Scheduling-err%d",
+ err )
+
+ err = iCenRep->Set(
+ KFileManagerBackupDay, static_cast< TInt >( iDay ) );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::SaveL-Day-err%d",
+ err )
+
+ // Convert micro secs to minutes
+ TInt minutes( iTime.Int64() / KMinToMicroSecMultiplier );
+ err = iCenRep->Set( KFileManagerBackupTime, minutes );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::SaveL-Time-err%d",
+ err )
+
+ TChar ch;
+ User::LeaveIfError( RFs::DriveToChar( iTargetDrive, ch ) );
+ TBuf< KTargetDriveStrMax > drive;
+ drive.Append( ch );
+ err = iCenRep->Set( KFileManagerBackupTargetPath, drive );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::SaveL-Target-err%d",
+ err )
+
+ RefreshListL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::LoadL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupSettings::LoadL()
+ {
+ FUNC_LOG
+
+ TInt buffer( 0 );
+ TInt err( KErrNone );
+ err = iCenRep->Get( KFileManagerBackupContent, buffer );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::LoadL-Content-err%d",
+ err )
+
+ iContent = buffer;
+ if ( !iContent )
+ {
+ iContent |= EFileManagerBackupContentAll;
+ }
+
+ buffer = 0;
+ err = iCenRep->Get( KFileManagerBackupScheduling, buffer );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::LoadL-Scheduling-err%d",
+ err )
+
+ iScheduling = buffer;
+
+ buffer = 0;
+ err = iCenRep->Get( KFileManagerBackupDay, buffer );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::LoadL-Day-err%d",
+ err )
+
+ iDay = buffer;
+ if ( iDay == KErrNotFound )
+ {
+ TLocale locale;
+ iDay = locale.StartOfWeek();
+ }
+ // Convert minutes to micro secs
+ buffer = 0;
+ err = iCenRep->Get( KFileManagerBackupTime, buffer );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::LoadL-Time-err%d",
+ err )
+
+ TInt64 microSecs( buffer );
+ microSecs *= KMinToMicroSecMultiplier;
+ iTime = microSecs;
+
+ HBufC* path = HBufC::NewLC( KMaxPath );
+ TPtr ptr( path->Des() );
+ err = iCenRep->Get( KFileManagerBackupTargetPath, ptr );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::LoadL-Target-err%d",
+ err )
+
+ if ( !ptr.Length() )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ _LIT( KDefault, "?" );
+ if ( ptr[ 0 ] == KDefault()[ 0 ] )
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ err = DriveInfo::GetDefaultDrive(
+ DriveInfo::EDefaultRemovableMassStorage, iTargetDrive );
+ LOG_IF_ERROR1( err, "CFileManagerBackupSettings::LoadL-GetDefaultDrive-err%d",
+ err )
+ User::LeaveIfError( err );
+#else // RD_MULTIPLE_DRIVE
+ iTargetDrive = KFmgrMemoryCardDrive;
+#endif // RD_MULTIPLE_DRIVE
+ }
+ else
+ {
+ User::LeaveIfError( RFs::CharToDrive( ptr[ 0 ], iTargetDrive ) );
+ }
+ CleanupStack::PopAndDestroy( path );
+
+ // Get allowed drive mask
+ err = iCenRep->Get( KFileManagerFeatures, iFileManagerFeatures );
+ if ( err != KErrNone )
+ {
+ ERROR_LOG1( "CFileManagerBackupSettings::LoadL-Features-err%d",
+ err )
+ iFileManagerFeatures = 0;
+ }
+ INFO_LOG1(
+ "CFileManagerBackupSettings::LoadL-iFileManagerFeatures=0x%x",
+ iFileManagerFeatures )
+ if ( iFileManagerFeatures & EFileManagerFeatureBackupAllowAllDrives )
+ {
+ iAllowedDriveMatchMask = KDriveAttRemovable | KDriveAttRemote;
+ }
+ else
+ {
+ iAllowedDriveMatchMask = KDriveAttRemovable;
+ }
+
+ RefreshListL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::SettingAt
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerBackupSettings::SettingAt( const TInt aIndex )
+ {
+ TInt type( ENone );
+ if ( aIndex >= 0 && aIndex < iList.Count() )
+ {
+ type = iList[ aIndex ]->iType;
+ }
+ return type;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::MdcaCount
+// ----------------------------------------------------------------------------
+//
+TInt CFileManagerBackupSettings::MdcaCount() const
+ {
+ return iList.Count();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::MdcaPoint
+// ----------------------------------------------------------------------------
+//
+TPtrC CFileManagerBackupSettings::MdcaPoint( TInt aIndex ) const
+ {
+ return TPtrC( *( iList[ aIndex ]->iText ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CEntry::~CEntry
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry::~CEntry()
+ {
+ delete iText;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CreateEntryLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry* CFileManagerBackupSettings::CreateEntryLC(
+ const TSettingType aType,
+ const TInt aTitleId,
+ const TInt aTextId,
+ const TInt aValue )
+ {
+ HBufC* value = NULL;
+ if ( aValue )
+ {
+ value = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ value = StringLoader::LoadLC( aTextId );
+ }
+
+ CEntry* entry = CreateEntryLC( aType, aTitleId, *value );
+ CleanupStack::Pop( entry );
+ CleanupStack::PopAndDestroy( value );
+ CleanupStack::PushL( entry );
+ return entry;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CreateEntryLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry* CFileManagerBackupSettings::CreateEntryLC(
+ const TSettingType aType,
+ const TInt aTitleId,
+ const TDesC& aText )
+ {
+ CEntry* entry = new ( ELeave ) CEntry;
+ CleanupStack::PushL( entry );
+
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ entry->iText = HBufC::NewL(
+ title->Length() + aText.Length() + KSeparatorSpace );
+
+ // "\tFirstLabel\t\tValueText"
+ TPtr ptr( entry->iText->Des() );
+ ptr.Append( KSeparator );
+ ptr.Append( *title );
+ ptr.Append( KSeparator );
+ ptr.Append( KSeparator );
+ ptr.Append( aText );
+
+ entry->iType = aType;
+
+ CleanupStack::PopAndDestroy( title );
+ return entry;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CreateContentsEntryLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry*
+ CFileManagerBackupSettings::CreateContentsEntryLC()
+ {
+ TInt selected( ContentsSelected() );
+ if ( !( iContent & EFileManagerBackupContentAll ) && selected > 1 )
+ {
+ return CreateEntryLC(
+ EContents,
+ R_QTN_FMGR_BACKUP_CONTENTS,
+ R_QTN_FMGR_BACKUP_CONTENT_SELECTED,
+ selected );
+ }
+ TInt textId( ContentToTextId( iContent ) );
+ return CreateEntryLC( EContents, R_QTN_FMGR_BACKUP_CONTENTS, textId );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CreateTimeEntryLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry*
+ CFileManagerBackupSettings::CreateTimeEntryLC()
+ {
+ TBuf< KTimeStrMax > timeFormatStr;
+ TLocale local;
+ if ( local.AmPmSymbolPosition() == ELocaleBefore )
+ {
+ timeFormatStr.Copy( KTimeFormatBefore );
+ }
+ else
+ {
+ timeFormatStr.Copy( KTimeFormatAfter );
+ }
+ TChar timeSeparator( local.TimeSeparator( KHourMinSeparator ) );
+ AknTextUtils::ReplaceCharacters(
+ timeFormatStr, KTimeSeparatorPlaceHolder, timeSeparator );
+ TBuf< KTimeStrMax > timeStr;
+ iTime.FormatL( timeStr, timeFormatStr );
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( timeStr );
+ return CreateEntryLC( ETime, R_QTN_FMGR_BACKUP_TIME, timeStr );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::RefreshListL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerBackupSettings::RefreshListL()
+ {
+ iList.ResetAndDestroy();
+
+ // Contents
+ CEntry* entry = CreateContentsEntryLC();
+ iList.AppendL( entry );
+ CleanupStack::Pop( entry );
+
+ if ( !( iFileManagerFeatures & EFileManagerFeatureScheduledBackupDisabled ) )
+ {
+ // Scheduling
+ entry = CreateEntryLC(
+ EScheduling,
+ R_QTN_FMGR_BACKUP_SCHEDULING,
+ KSchedulingTextLookup[ iScheduling ] );
+ iList.AppendL( entry );
+ CleanupStack::Pop( entry );
+
+ // Weekday
+ if ( iScheduling == EFileManagerBackupScheduleWeekly )
+ {
+ TDayName dayName( static_cast< TDay >( iDay ) );
+ entry = CreateEntryLC(
+ EWeekday,
+ R_QTN_FMGR_BACKUP_WEEKDAY,
+ dayName );
+ iList.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+
+ // Time
+ if ( iScheduling == EFileManagerBackupScheduleWeekly ||
+ iScheduling == EFileManagerBackupScheduleDaily )
+ {
+ entry = CreateTimeEntryLC();
+ iList.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+ }
+
+ // Target drive
+ if ( HasMultipleBackupTargets() )
+ {
+ entry = CreateTargetDriveEntryLC();
+ iList.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::ContentToTextId
+// ----------------------------------------------------------------------------
+//
+TInt CFileManagerBackupSettings::ContentToTextId( const TUint32 aContent )
+ {
+ TInt ret( R_QTN_FMGR_BACKUP_CONTENT_ALL );
+
+ if ( aContent & EFileManagerBackupContentAll )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_ALL;
+ }
+ else if ( aContent & EFileManagerBackupContentSettings )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_SETTINGS;
+ }
+ else if ( aContent & EFileManagerBackupContentMessages )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_MESSAGES;
+ }
+ else if ( aContent & EFileManagerBackupContentContacts )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_CONTACTS;
+ }
+ else if ( aContent & EFileManagerBackupContentCalendar )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_CALENDAR;
+ }
+ else if ( aContent & EFileManagerBackupContentBookmarks )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_BOOKMARKS;
+ }
+ else if ( aContent & EFileManagerBackupContentUserFiles )
+ {
+ ret = R_QTN_FMGR_BACKUP_CONTENT_USERFILES;
+ }
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::RefreshL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerBackupSettings::RefreshL()
+ {
+ LoadL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::CreateTargetDriveEntryLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerBackupSettings::CEntry*
+ CFileManagerBackupSettings::CreateTargetDriveEntryLC()
+ {
+ TPtrC driveName( iEngine.DriveName( iTargetDrive ) );
+
+ if ( driveName.Length() )
+ {
+ return CreateEntryLC(
+ ETarget, R_QTN_FMGR_BACKUP_DESTINATION, driveName );
+ }
+
+ TChar ch;
+ User::LeaveIfError( RFs::DriveToChar( iTargetDrive, ch ) );
+ TBuf< KTargetDriveStrMax > drive;
+ drive.Append( ch );
+ return CreateEntryLC( ETarget, R_QTN_FMGR_BACKUP_DESTINATION, drive );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::AllowedDriveAttMatchMask
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerBackupSettings::AllowedDriveAttMatchMask() const
+ {
+ return iAllowedDriveMatchMask;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBackupSettings::HasMultipleBackupTargets
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerBackupSettings::HasMultipleBackupTargets()
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ TBool count( 0 );
+ TUint32 driveAttMask( AllowedDriveAttMatchMask() );
+ RFs& fs( iEngine.Fs() );
+
+ for ( TInt i( 0 ); i < KMaxDrives; ++i )
+ {
+ TDriveInfo driveInfo;
+ if ( fs.Drive( driveInfo, i ) == KErrNone )
+ {
+ // Do not allow backup for internal drives
+ TUint driveStatus( 0 );
+ DriveInfo::GetDriveStatus( fs, i, driveStatus );
+ if ( driveStatus & DriveInfo::EDriveInternal )
+ {
+ continue;
+ }
+ if ( driveInfo.iDriveAtt & driveAttMask )
+ {
+ ++count;
+ }
+ }
+ if ( count > 1 )
+ {
+ break;
+ }
+ }
+ return count > 1;
+#else // RD_MULTIPLE_DRIVE
+ return EFalse;
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerDocHandler.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,360 @@
+/*
+* Copyright (c) 2004-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: Wraps document handler functions
+*
+*/
+
+
+
+// INCLUDES
+#include <DocumentHandler.h>
+#include <apmstd.h>
+#include <bautils.h>
+#include "CFileManagerDocHandler.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerUtils.h"
+#include "CFileManagerThreadWrapper.h"
+#include "MFileManagerProcessObserver.h"
+#include "FileManagerDebug.h"
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::CFileManagerDocHandler()
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerDocHandler::CFileManagerDocHandler(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils ) :
+ iEngine( aEngine ),
+ iUtils( aUtils ),
+ iFs( aEngine.Fs() )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::NewL()
+//
+// ------------------------------------------------------------------------------
+//
+CFileManagerDocHandler* CFileManagerDocHandler::NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils )
+ {
+ CFileManagerDocHandler* self = new (ELeave) CFileManagerDocHandler(
+ aEngine, aUtils );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::~CFileManagerDocHandler()
+//
+// ------------------------------------------------------------------------------
+//
+CFileManagerDocHandler::~CFileManagerDocHandler()
+ {
+ iApaSession.Close();
+ delete iThreadWrapper;
+ delete iFileMime;
+ delete iFileFullPath;
+ delete iDocHandler;
+ iFile.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::HandleServerAppExit()
+//
+// -----------------------------------------------------------------------------
+void CFileManagerDocHandler::HandleServerAppExit( TInt aReason )
+ {
+ if ( iEmbeddedAppOpen )
+ {
+ iEngine.NoticeServerAppExit( aReason );
+ iEngine.EmbeddedAppStatus( EFalse );
+ iEmbeddedAppOpen = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::ConstructL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocHandler::ConstructL()
+ {
+ iDocHandler = CDocumentHandler::NewL();
+ iDocHandler->SetExitObserver( this );
+ User::LeaveIfError( iApaSession.Connect() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::OpenFileL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocHandler::OpenFileL(
+ const TDesC& aFullPath, MFileManagerProcessObserver* aObserver )
+ {
+ if ( iEmbeddedAppOpen )
+ {
+ ERROR_LOG( "CFileManagerDocHandler::OpenFileL-OpenAlreadyOngoing" )
+ return; // Ignore too fast open events to prevent mess up
+ }
+
+ delete iThreadWrapper;
+ iThreadWrapper = NULL;
+
+ delete iFileFullPath;
+ iFileFullPath = NULL;
+
+ delete iFileMime;
+ iFileMime = NULL;
+
+ iFileReady = EFalse;
+ iFile.Close();
+
+ iObserver = aObserver;
+
+ //Judge the file extention, if a sis file, notify Engine to flush the cache
+ if ( EFileManagerAppFileIcon == iUtils.ResolveIconL( aFullPath ) )
+ {
+ iEngine.SetSisFile( ETrue );
+ }
+
+ // Get fullpath and MIME type
+ TPtrC mime16( iUtils.MimeTypeL( aFullPath ) );
+ iFileMime = HBufC8::NewL( mime16.Length() );
+ iFileMime->Des().Copy( mime16 );
+ iFileFullPath = aFullPath.AllocL();
+
+ if ( iUtils.IsRemoteDrive( *iFileFullPath ) )
+ {
+ iThreadWrapper = CFileManagerThreadWrapper::NewL();
+ User::LeaveIfError( iThreadWrapper->StartThread(
+ *this,
+ MFileManagerThreadFunction::ENotifyFinished, EPriorityNormal ) );
+
+ // Async file open
+ if ( iObserver )
+ {
+ TRAP_IGNORE( iObserver->ProcessStartedL(
+ MFileManagerProcessObserver::EFileOpenProcess, KErrNone ) );
+ }
+ }
+ else
+ {
+ // Sync file open
+ if ( iObserver )
+ {
+ TRAP_IGNORE( iObserver->ProcessStartedL(
+ MFileManagerProcessObserver::EFileOpenProcess, KErrNone ) );
+ }
+
+ RFile64 sharableFile;
+ TRAPD( err, iDocHandler->OpenTempFileL( *iFileFullPath, sharableFile ) );
+ if ( err == KErrNone )
+ {
+ TRAP( err, OpenShareableFileL( sharableFile, *iFileMime ) );
+ }
+ sharableFile.Close();
+
+ if ( iObserver )
+ {
+ TRAP_IGNORE( iObserver->ProcessFinishedL( err ) );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::OpenShareableFileL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocHandler::OpenShareableFileL(
+ RFile64& aShareableFile, const TDesC8& aMime )
+ {
+ // Check if file open is denied
+ if ( iObserver && iFileFullPath )
+ {
+ if ( iObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyFileOpenDenied,
+ 0,
+ *iFileFullPath ) )
+ {
+ return;
+ }
+ }
+
+ TDataType dataType( aMime );
+ CAiwGenericParamList& paramList( iDocHandler->InParamListL() );
+
+ // If remote drive, make sure that file can be opened remotely
+ if ( iUtils.IsRemoteDrive( *iFileFullPath ) )
+ {
+ TUid appUid;
+ TDataType fileType;
+ User::LeaveIfError( iApaSession.AppForDocument(
+ aShareableFile, appUid, fileType ) );
+ if ( !iEngine.HasAppRemoteDriveSupport( appUid ) )
+ {
+ User::Leave( KErrFmgrNotSupportedRemotely );
+ }
+ dataType = fileType;
+ }
+ // Otherwise just make sure that file exists before opening it
+ else if ( !BaflUtils::FileExists( iEngine.Fs(), *iFileFullPath ) )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ TInt err( KErrNone );
+ TInt err2( KErrNone );
+
+ TRAP( err, err2 = iDocHandler->OpenFileEmbeddedL(
+ aShareableFile, dataType, paramList ) );
+
+ LOG_IF_ERROR1( err,
+ "CFileManagerDocHandler::OpenShareableFileL-err=%d", err )
+ LOG_IF_ERROR1( err2,
+ "CFileManagerDocHandler::OpenShareableFileL-err2=%d", err2 )
+
+ // Make sure that not supported functionality is handled properly
+ if ( err2 == KErrNotSupported || err2 == KMimeNotSupported ||
+ err == KErrNotSupported || err == KMimeNotSupported )
+ {
+ User::Leave( KErrNotSupported );
+ }
+ else if ( err == KErrNotFound || err2 == KErrNotFound )
+ {
+ User::Leave( KErrGeneral );
+ }
+ User::LeaveIfError( err );
+ User::LeaveIfError( err2 );
+
+ iEngine.EmbeddedAppStatus( ETrue );
+ iEmbeddedAppOpen = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::ThreadStepL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocHandler::ThreadStepL()
+ {
+ // Open shareable file and make sure that it is loaded to file cache
+ // before opening the file with app
+ TInt err( iFile.Open( iFs, *iFileFullPath, EFileShareReadersOnly ) );
+ if ( err == KErrInUse )
+ {
+ User::LeaveIfError( iFile.Open(
+ iFs, *iFileFullPath, EFileShareReadersOrWriters ) );
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+
+ TInt64 pos( 0 );
+ TInt64 size( 0 );
+ TInt readSize( 0 );
+ const TInt KReadBufferSize = 16384; // 16KB
+ HBufC8* buffer = HBufC8::NewLC( KReadBufferSize );
+ TPtr8 ptr( buffer->Des() );
+
+ User::LeaveIfError( iFile.Size( size ) );
+ while ( size > 0 )
+ {
+ if ( iThreadWrapper->IsThreadCanceled() )
+ {
+ User::Leave( KErrCancel );
+ }
+
+ readSize = Min( size, ptr.MaxSize() );
+ User::LeaveIfError( iFile.Read( pos, ptr, readSize ) );
+ size -= readSize;
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ iFileReady = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::IsThreadDone()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerDocHandler::IsThreadDone()
+ {
+ return iFileReady;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::NotifyThreadClientL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocHandler::NotifyThreadClientL(
+ TNotifyType aType, TInt aValue )
+ {
+ switch ( aType )
+ {
+ case ENotifyFinished:
+ {
+ // Open shareable file with app and inform observer
+ if ( aValue == KErrNone && iFileReady )
+ {
+ TRAP( aValue, OpenShareableFileL( iFile, *iFileMime ) );
+ }
+ iFile.Close();
+
+ if ( iObserver )
+ {
+ TRAP_IGNORE( iObserver->ProcessFinishedL( aValue ) );
+ }
+ if ( aValue != KErrNone )
+ {
+ // Ensure that the status gets updated on error
+ HandleServerAppExit( 0 );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerDocHandler::CancelFileOpen()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerDocHandler::CancelFileOpen()
+ {
+ if ( iFileFullPath )
+ {
+ iEngine.CancelTransfer( *iFileFullPath );
+ }
+ if ( iThreadWrapper )
+ {
+ iThreadWrapper->CancelThread();
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerEngine.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,2221 @@
+/*
+* Copyright (c) 2002-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: Main class of the filemanagerengine
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <barsread.h>
+#include <sysutil.h>
+#include <bautils.h>
+//#include <cmgxfilemanager.h>
+//#include <mgxfilemanagerfactory.h>
+//#include <cmgalbummanager.h>
+#include <pathinfo.h>
+#include <AknServerApp.h>
+#include <FileManagerEngine.rsg>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+#include "CFileManagerEngine.h"
+#include "CGflmNavigatorModel.h"
+#include "CGflmGroupItem.h"
+#include "CGflmFileSystemItem.h"
+#include "CGflmDriveItem.h"
+#include "CGflmGlobalActionItem.h"
+#include "MGflmItemGroup.h"
+#include "Cfilemanagerfolderarray.h"
+#include "CFilemanagerMimeIconArray.h"
+#include "CFileManagerActiveExecute.h"
+#include "CFileManagerRefresher.h"
+#include "Cfilemanagerfilesystemevent.h"
+#include "Cfilemanageractivesize.h"
+#include "Cfilemanageractivedelete.h"
+#include "FileManagerEngine.hrh"
+#include "CFileManagerCommonDefinitions.h"
+#include "CFileManagerUtils.h"
+#include "CFileManagerItemFilter.h"
+#include "CFileManagerDocHandler.h"
+#include "FileManagerDebug.h"
+#include "CFileManagerItemProperties.h"
+#include "CFileManagerRemovableDriveHandler.h"
+#include "CFileManagerRemoteDriveHandler.h"
+#include "CFileManagerBackupSettings.h"
+#include "CFileManagerRestoreSettings.h"
+#include "CFileManagerActiveRename.h"
+#include "CFileManagerFeatureManager.h"
+
+// CONSTANTS
+const TUint16 KIllegalChars[] = {
+ '<', '>', '"', '/', '\\', '|', ':', '*', '?',
+ 0xFF02, // Full width quote
+ 0xFF0A, // Full width asterisk
+ 0xFF0F, // Full width slash
+ 0xFF1A, // Full width colon
+ 0xFF1C, // Full width left arrow
+ 0xFF1E, // Full width right arrow
+ 0xFF1F, // Full width question mark
+ 0xFF3C, // Full width back slash
+ 0xFF5C, // Full width pipe
+ 0x201C, // Left quote
+ 0x201D, // Right quote
+ 0x201F, // Reversed quote
+ 0x21B2, // Downwards arrow with tip leftwards
+ 0, // Array terminator
+};
+
+//const TInt KMGFileArrayGranularity = 32;
+
+
+// ============================ LOCAL FUNCTIONS ================================
+// -----------------------------------------------------------------------------
+// SearchMGAlbumIdL
+// -----------------------------------------------------------------------------
+//
+/*static TInt SearchMGAlbumIdL(
+ CMGAlbumManager& aAlbumManager, const TDesC& aFilename )
+ {
+ CDesCArray* fileArray =
+ new ( ELeave ) CDesCArraySeg( KMGFileArrayGranularity );
+ CleanupStack::PushL( fileArray );
+ TInt albumCount( aAlbumManager.AlbumCount() );
+ TInt ret( KErrNotFound );
+ for( TInt i( 0 ); i < albumCount; ++i )
+ {
+ CMGAlbumInfo* albumInfo = aAlbumManager.AlbumInfoLC( i );
+ TInt albumId( albumInfo->Id() );
+ CleanupStack::PopAndDestroy( albumInfo );
+ fileArray->Reset();
+ aAlbumManager.GetAlbumFileArrayL( albumId, *fileArray );
+ TInt pos( 0 );
+ if( !fileArray->Find( aFilename, pos ) )
+ {
+ ret = albumId;
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy( fileArray );
+ return ret;
+ }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CFileManagerEngine
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerEngine::CFileManagerEngine( RFs& aFs ) :
+ iFs( aFs ), iObserver( NULL ), iSisFile( EFalse )
+ {
+ FUNC_LOG
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerEngine* CFileManagerEngine::NewL( RFs& aFs )
+ {
+ CFileManagerEngine* self = new ( ELeave ) CFileManagerEngine( aFs );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::ConstructL()
+ {
+ FUNC_LOG
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create Feature Manager" )
+ iFeatureManager = CFileManagerFeatureManager::NewL();
+
+ iState = ENavigation;
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create navigator" )
+ iNavigator = CGflmNavigatorModel::NewL( iFs );
+
+ // Create drives group
+ MGflmItemGroup* newGroup = iNavigator->CreateGroupL(
+ EFileManagerDrivesGroup, EDrives );
+#ifdef RD_FILE_MANAGER_BACKUP
+ // Set backup action
+ HBufC* actionCaption = StringLoader::LoadLC( R_QTN_FMGR_MAIN_BACKUP );
+ newGroup->AddActionItemL( EFileManagerBackupAction, *actionCaption );
+ CleanupStack::PopAndDestroy( actionCaption );
+#endif // RD_FILE_MANAGER_BACKUP
+
+ // Create files and folders groups
+ iNavigator->CreateGroupL( EFileManagerFilesGroup, EDirectories | EFiles );
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create refresher" )
+ iRefresher = CFileManagerRefresher::NewL( *iNavigator );
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create utils" )
+ iUtils = CFileManagerUtils::NewL( iFs, *iNavigator, *iFeatureManager );
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create disk event" )
+ iDiskEvent = CFileManagerFileSystemEvent::NewL( iFs, *this, ENotifyDisk );
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create removable drive handler" )
+ iRemovableDrvHandler = CFileManagerRemovableDriveHandler::NewL(
+ iFs, *iUtils, *this );
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create remote drive handler" )
+ iRemoteDrvHandler = CFileManagerRemoteDriveHandler::NewL(
+ *this, *iUtils );
+
+ INFO_LOG( "CFileManagerEngine::ConstructL()-Create item filter" )
+ iItemFilter = CFileManagerItemFilter::NewL( *this );
+ iNavigator->SetCustomFilter( iItemFilter );
+
+ // Store new starting index
+ iNavigationIndices.AppendL( KErrNotFound );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::~CFileManagerEngine
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerEngine::~CFileManagerEngine()
+ {
+ delete iActiveRename;
+ iNavigationIndices.Reset();
+ delete iRemoteDrvHandler;
+ delete iBackupSettings;
+ delete iRestoreSettings;
+ delete iRemovableDrvHandler;
+ delete iDocHandler;
+ //delete iMgxFileManager;
+ delete iFileSystemEvent;
+ delete iRefresher;
+ delete iNavigator;
+ delete iItemFilter;
+ delete iSearchString;
+ delete iSearchFolder;
+ delete iActiveSize;
+ delete iDiskEvent;
+ delete iUtils;
+ delete iDriveName;
+ delete iFeatureManager;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetFileSystemEventL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::SetFileSystemEventL( const TDesC& aFullPath )
+ {
+ delete iFileSystemEvent;
+ iFileSystemEvent = NULL;
+ if ( aFullPath != KNullDesC )
+ {
+ iFileSystemEvent = CFileManagerFileSystemEvent::NewL(
+ iFs, *this, ENotifyEntry, aFullPath );
+ }
+ else
+ {
+ iFileSystemEvent = CFileManagerFileSystemEvent::NewL(
+ iFs, *this, ENotifyEntry );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IndexToFullPathL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CFileManagerEngine::IndexToFullPathL(
+ const TInt aIndex ) const
+ {
+ if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
+ {
+ User::Leave( KErrNotFound );
+ }
+ CGflmGroupItem* item = iNavigator->Item( aIndex );
+ HBufC* fullPath = NULL;
+ switch ( item->Type() )
+ {
+ case CGflmGroupItem::EFile: // Fall through
+ case CGflmGroupItem::EDirectory:
+ {
+ CGflmFileSystemItem* fsItem =
+ static_cast< CGflmFileSystemItem* >( item );
+ fullPath = fsItem->FullPathL();
+ break;
+ }
+ case CGflmGroupItem::EDrive:
+ {
+ CGflmDriveItem* drvItem =
+ static_cast< CGflmDriveItem* >( item );
+ fullPath = drvItem->RootDirectory().AllocL();
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrNotFound );
+ break;
+ }
+ }
+ return fullPath;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IndexToFullPathLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CFileManagerEngine::IndexToFullPathLC(
+ const TInt aIndex ) const
+ {
+ HBufC* fullPath = IndexToFullPathL( aIndex );
+ CleanupStack::PushL( fullPath );
+ return fullPath;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::AddFullPathLC
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerEngine::AddFullPathLC(
+ const TDesC& aName, const TBool aIsFolder )
+ {
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ TInt len( dir.Length() + aName.Length() );
+ if ( aIsFolder )
+ {
+ ++len; // Ensure space for backslash
+ }
+ HBufC* fullPath = HBufC::NewLC( len );
+ TPtr ptr( fullPath->Des() );
+ ptr.Append( dir );
+ ptr.Append( aName );
+ if ( aIsFolder )
+ {
+ CFileManagerUtils::EnsureFinalBackslash( ptr );
+ }
+ return fullPath;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetMemoryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::SetMemoryL( TFileManagerMemory /*aMemory*/ )
+ {
+ // Just check current drive avaibility, no matter what memory is set
+ iLastDriveAvailable = CurrentDriveAvailable();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::Memory
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TFileManagerMemory CFileManagerEngine::Memory() const
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
+ if ( drvItem )
+ {
+ TUint driveStatus( drvItem->DriveStatus() );
+ if ( driveStatus & DriveInfo::EDriveInternal )
+ {
+ if ( driveStatus & DriveInfo::EDriveExternallyMountable )
+ {
+ return EFmMassStorage;
+ }
+ return EFmPhoneMemory;
+ }
+ else if ( driveStatus & DriveInfo::EDriveUsbMemory )
+ {
+ return EFmUsbMemory;
+ }
+ else if ( driveStatus & DriveInfo::EDriveRemovable )
+ {
+ return EFmMemoryCard;
+ }
+ else if ( driveStatus & DriveInfo::EDriveRemote )
+ {
+ return EFmRemoteDrive;
+ }
+ }
+ return EFmPhoneMemory;
+#else // RD_MULTIPLE_DRIVE
+ CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
+ if ( drvItem )
+ {
+ const TVolumeInfo vol( drvItem->VolumeInfo() );
+ if ( vol.iDrive.iDriveAtt & KDriveAttInternal )
+ {
+ return EFmPhoneMemory;
+ }
+ else if ( vol.iDrive.iDriveAtt & KDriveAttRemovable )
+ {
+ return EFmMemoryCard;
+ }
+ else if ( vol.iDrive.iDriveAtt & KDriveAttRemote )
+ {
+ return EFmRemoteDrive;
+ }
+ }
+ return EFmPhoneMemory;
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::FileList
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MDesCArray* CFileManagerEngine::FileList() const
+ {
+ return iNavigator;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::OpenL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::OpenL( const TInt aIndex )
+ {
+ // Store drive letter for current drive changed checking
+ TChar prevDrive( 0 );
+ TPtrC prevDir( iNavigator->CurrentDirectory() );
+ if ( prevDir.Length() )
+ {
+ prevDrive = prevDir[ 0 ];
+ }
+
+ if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
+ {
+ User::Leave( KErrNotFound );
+ }
+ CGflmGroupItem* item = iNavigator->Item( aIndex );
+ switch ( item->Type() )
+ {
+ case CGflmGroupItem::EFile: // Fall through
+ case CGflmGroupItem::EDirectory: // Fall through
+ case CGflmGroupItem::EDrive:
+ {
+
+#ifdef RD_MULTIPLE_DRIVE
+ // Ensure that default folders exist
+ if ( item->Type() == CGflmGroupItem::EDrive )
+ {
+ CGflmDriveItem* drvItem =
+ static_cast< CGflmDriveItem* >( item );
+ iUtils->CreateDefaultFolders(
+ drvItem->Drive(), EFalse );
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+ // Store navigation position
+ SetCurrentIndex( aIndex );
+
+ HBufC* fullPath = IndexToFullPathLC( aIndex );
+ if ( item->Type() == CGflmGroupItem::EFile )
+ {
+ OpenFileL( *fullPath );
+ }
+ else
+ {
+ OpenDirectoryL( *fullPath );
+
+ // Setup new navigation position
+ iNavigationIndices.AppendL( 0 );
+ }
+ CleanupStack::PopAndDestroy( fullPath );
+ break;
+ }
+ case CGflmGroupItem::EGlobalActionItem:
+ {
+ CGflmGlobalActionItem* actItem =
+ static_cast< CGflmGlobalActionItem* >( item );
+ if ( iProcessObserver )
+ {
+ iProcessObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyActionSelected,
+ actItem->Id() );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ // Ensure that cached current drive info gets updated if drive was changed
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ if ( dir.Length() )
+ {
+ if ( dir[ 0 ] != prevDrive )
+ {
+ iCurrentDriveInfoRefreshed = EFalse;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetObserver
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetObserver(
+ MFileManagerProcessObserver* aObserver )
+ {
+ iProcessObserver = aObserver;
+ iRefresher->SetObserver( aObserver );
+ iRemovableDrvHandler->SetObserver( aObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CurrentDirectory
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::CurrentDirectory() const
+ {
+ return iNavigator->CurrentDirectory();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CurrentDirectory
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::LocalizedNameOfCurrentDirectory() const
+ {
+ return iNavigator->LocalizedNameOfCurrentDirectory();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::BackstepL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::BackstepL()
+ {
+ // Store drive letter for current drive changed checking
+ TChar prevDrive( 0 );
+ // Note that prevDir gets invalid after BackstepL
+ TPtrC prevDir( iNavigator->CurrentDirectory() );
+ if ( prevDir.Length() )
+ {
+ prevDrive = prevDir[ 0 ];
+ }
+
+ // Setup backstep navigation index
+ if ( !iNavigator->NavigationLevel() )
+ {
+ // Always first for initial root level
+ iCurrentItemName.Zero();
+ }
+ else if( !iCurrentItemName.Length() )
+ {
+ // Otherwise previously opened folder
+ iCurrentItemName.Copy(
+ iNavigator->LocalizedNameOfCurrentDirectory() );
+ }
+ TInt pos( iNavigationIndices.Count() - 1 );
+ if ( pos >= 0 )
+ {
+ iNavigationIndices.Remove( pos );
+ }
+
+ iNavigator->BackstepL();
+
+ // Ensure that cached current drive info gets updated if drive was changed
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ if ( dir.Length() )
+ {
+ if ( dir[ 0 ] != prevDrive )
+ {
+ iCurrentDriveInfoRefreshed = EFalse;
+ }
+ }
+ else
+ {
+ // Make sure that drive info is refreshed
+ ClearDriveInfo();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::FileTypeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerEngine::FileTypeL( const TInt aIndex ) const
+ {
+ TUint32 fileType( CFileManagerItemProperties::ENotDefined );
+ if ( aIndex >= 0 )
+ {
+ HBufC* fullPath = IndexToFullPathLC( aIndex );
+ fileType = FileTypeL( *fullPath );
+ CleanupStack::PopAndDestroy( fullPath );
+ }
+ return fileType;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::FileTypeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerEngine::FileTypeL( const TDesC& aFullPath ) const
+ {
+ return iUtils->FileTypeL( aFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DeleteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerActiveDelete* CFileManagerEngine::CreateActiveDeleteL(
+ CArrayFixFlat< TInt >& aIndexList )
+ {
+
+ CFileManagerActiveDelete* activeDelete =
+ CFileManagerActiveDelete::NewL( aIndexList, *this, *iUtils );
+ return activeDelete;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::NewFolder
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::NewFolderL( const TDesC& aFolderName )
+ {
+ // Add backslash to end so that MkDir realizes that it is directory
+ HBufC* fullPath = AddFullPathLC( aFolderName, ETrue );
+ TPtr ptr( fullPath->Des() );
+
+ if ( ptr.Length() <= KMaxFileName )
+ {
+ iCurrentItemName.Copy( aFolderName );
+
+ // Remove white spaces from end, file server also ignores those
+ iCurrentItemName.TrimRight();
+
+ User::LeaveIfError( iFs.MkDir( ptr ) );
+ }
+ else
+ {
+ User::Leave( KErrBadName );
+ }
+
+ CleanupStack::PopAndDestroy( fullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetCurrentItemName
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetCurrentItemName( const TDesC& aFileName )
+ {
+
+ iCurrentItemName.Copy( aFileName );
+
+ // Remove white spaces from end, file server also ignores those
+ iCurrentItemName.TrimRight();
+
+ }
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RenameL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::RenameL(
+ const TInt aIndex,
+ const TDesC& aNewFileName )
+ {
+ FUNC_LOG
+
+ // Make those given names as full paths
+ TBool isFolder( IsFolder( aIndex ) );
+ HBufC* fullPathOld = IndexToFullPathLC( aIndex );
+ HBufC* fullPathNew = AddFullPathLC( aNewFileName, isFolder );
+
+ if ( !fullPathOld->Compare( *fullPathNew ) )
+ {
+ // The name has not changed, rename is not required
+ CleanupStack::PopAndDestroy( fullPathNew );
+ CleanupStack::PopAndDestroy( fullPathOld );
+ return;
+ }
+
+ // Gallery notification is relevant only for local drives
+ TBool isRemoteDrive( iUtils->IsRemoteDrive( *fullPathOld ) );
+
+ // Media Gallery albums get easily messed up when files are renamed.
+ // Direct album editing seems a trick but it is seems to only way
+ // to update Gallery properly.
+ /*CMGAlbumManager* albumManager = MGAlbumManagerFactory::NewAlbumManagerL();
+ CleanupStack:: PushL( albumManager );
+ TInt albumId( KErrNotFound );
+ if ( !isFolder && !isRemoteDrive )
+ {
+ // Do album search for files only
+ TRAPD( err, albumId = SearchMGAlbumIdL( *albumManager, *fullPathOld ) );
+ if( err != KErrNone )
+ {
+ albumId = KErrNotFound;
+ }
+ }
+*/
+ // Handle rename
+ delete iActiveRename;
+ iActiveRename = NULL;
+ iActiveRename = CFileManagerActiveRename::NewL(
+ *this, *iUtils, *fullPathOld, *fullPathNew );
+ ShowWaitDialogL( *iActiveRename );
+ User::LeaveIfError( iActiveRename->Result() );
+
+ // Update Media Gallery album if file exist in album
+ /*if( albumId != KErrNotFound )
+ {
+ TRAP_IGNORE( { albumManager->RemoveFromAlbumL( *fullPathOld, albumId );
+ albumManager->AddToAlbumL( *fullPathNew, albumId ); } );
+ }
+ CleanupStack::PopAndDestroy( albumManager );*/
+
+ iCurrentItemName.Copy( aNewFileName );
+
+ /*if ( !isRemoteDrive )
+ {
+ // Notify Media Gallery again
+ TRAP_IGNORE( MGXFileManagerL().UpdateL( *fullPathOld, *fullPathNew ) );
+ }*/
+
+ CleanupStack::PopAndDestroy( fullPathNew );
+ CleanupStack::PopAndDestroy( fullPathOld );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::FolderLevel
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::FolderLevel()
+ {
+ CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
+ if ( !drvItem )
+ {
+ return KErrNotFound; // Main level
+ }
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ TInt count( dir.Length() );
+ if ( !count )
+ {
+ return KErrNotFound; // Main level
+ }
+ // Count how many backslashes is in string to figure out the deepness
+ TInt min( drvItem->RootDirectory().Length() );
+ TInt bsCount( 0 );
+ while( count > min )
+ {
+ --count;
+ if ( dir[ count ] == KFmgrBackslash()[ 0 ] )
+ {
+ ++bsCount;
+ }
+ }
+ return bsCount;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IsNameFoundL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::IsNameFoundL( const TDesC& aName )
+ {
+ return iUtils->IsNameFoundL( aName );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CurrentDrive
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::CurrentDrive()
+ {
+ TInt ret( KErrNotFound );
+ TPtrC ptr( iNavigator->CurrentDirectory() );
+ if ( ptr.Length() )
+ {
+ if( RFs::CharToDrive( ptr[ 0 ], ret ) != KErrNone )
+ {
+ ret = KErrNotFound;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetItemInfoL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerItemProperties* CFileManagerEngine::GetItemInfoL(
+ const TInt aIndex )
+ {
+ if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
+ {
+ User::Leave( KErrNotFound );
+ }
+ CGflmGroupItem* item = iNavigator->Item( aIndex );
+ return CFileManagerItemProperties::NewL( *item, *iUtils, *this );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetState
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetState( TState aState )
+ {
+ iState = aState;
+ iNavigator->EnableSearchMode( iState == ESearch );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetState
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerEngine::TState CFileManagerEngine::State() const
+ {
+ return iState;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RefreshDirectory
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::RefreshDirectory()
+ {
+ FUNC_LOG
+
+#ifdef FILE_MANAGER_INFO_LOG_ENABLED
+ if ( iState == ENavigation )
+ {
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ INFO_LOG1( "CFileManagerEngine::RefreshDirectory-dir=%S", &dir );
+ }
+#endif // FILE_MANAGER_INFO_LOG_ENABLED
+
+ iRefresher->Refresh();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetMMCInfoL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TFileManagerDriveInfo CFileManagerEngine::GetMMCInfoL() const
+ {
+ TFileManagerDriveInfo drvInfo;
+ GetDriveInfoL(
+ PathInfo::MemoryCardRootPath(), drvInfo );
+ return drvInfo;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SearchString
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::SearchString() const
+ {
+ if ( iSearchString )
+ {
+ return iSearchString->Des();
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IsValidName
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::IsValidName(
+ const TDesC& aDriveAndPath, const TDesC& aName, TBool aIsFolder ) const
+ {
+ // Check name for bad chars
+ const TUint16 KMinAllowedChar = 0x0020;
+ const TUint16 KParagraphSeparator = 0x2029;
+ const TUint16 KDot = '.';
+ TInt nameLen( aName.Length() );
+ if ( !nameLen )
+ {
+ return EFalse;
+ }
+ for ( TInt i( 0 ); i < nameLen; i++ )
+ {
+ TUint16 ch( aName[ i ] );
+ if ( ch < KMinAllowedChar || ch == KParagraphSeparator )
+ {
+ return EFalse;
+ }
+ }
+ // File system ignores totally dot in the end of name, so
+ // we set here as not valid name, so that user gets correctly informed
+ if ( aName[ nameLen - 1 ] == KDot || IllegalChars( aName ) )
+ {
+ return EFalse;
+ }
+ // Get full path length
+ TPtrC pathPtr( aDriveAndPath.Length() ?
+ TPtrC( aDriveAndPath ) : TPtrC( iNavigator->CurrentDirectory() ) );
+ TInt pathLen( pathPtr.Length() );
+ if ( !pathLen )
+ {
+ return EFalse;
+ }
+ TInt fullPathLen( pathLen );
+ if ( !CFileManagerUtils::HasFinalBackslash( pathPtr ) )
+ {
+ ++fullPathLen; // Add backslash before name
+ }
+ fullPathLen += nameLen;
+ if ( aIsFolder )
+ {
+ ++fullPathLen; // Add folder final backslash
+ }
+
+ TBool ret( EFalse );
+ if ( fullPathLen <= KMaxFileName )
+ {
+ // Check full path
+ HBufC* fullPath = HBufC::New( KMaxFileName );
+ if ( fullPath )
+ {
+ TPtr ptr( fullPath->Des() );
+ ptr.Copy( pathPtr );
+ CFileManagerUtils::EnsureFinalBackslash( ptr ); // Add backslash before name
+ ptr.Append( aName );
+ ret = iFs.IsValidName( ptr );
+ delete fullPath;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IllegalChars
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::IllegalChars( const TDesC& aName ) const
+ {
+ for ( TInt i( 0 ); KIllegalChars[ i ]; i++ )
+ {
+ if ( aName.Locate( KIllegalChars[ i ] ) != KErrNotFound )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::EnoughSpaceL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::EnoughSpaceL(
+ const TDesC& aToFolder,
+ TInt64 aSize,
+ MFileManagerProcessObserver::TFileManagerProcess aOperation ) const
+ {
+ TPtrC src( iNavigator->CurrentDirectory() );
+ TInt srcDrv( KErrNotFound );
+ if ( src.Length() )
+ {
+ User::LeaveIfError( RFs::CharToDrive( src[ 0 ], srcDrv ) );
+ }
+ TInt dstDrv( KErrNotFound );
+ if ( aToFolder.Length() )
+ {
+ User::LeaveIfError( RFs::CharToDrive( aToFolder[ 0 ], dstDrv ) );
+ }
+ else
+ {
+ return ETrue; // Invalid destination
+ }
+
+ TBool ret( EFalse );
+
+ // if operation is move and drive is same so there is always enough memory
+ if ( srcDrv == dstDrv &&
+ aOperation == MFileManagerProcessObserver::EMoveProcess )
+ {
+ ret = ETrue;
+ }
+ else
+ {
+ ret = !SysUtil::DiskSpaceBelowCriticalLevelL(
+ &iFs, aSize , dstDrv );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::FileSystemEvent
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::FileSystemEvent( TBool aEventOn )
+ {
+ INFO_LOG2(
+ "CFileManagerEngine::FileSystemEvent-aEventOn=%d,iFileSystemEventEnabled=%d",
+ aEventOn, iFileSystemEventEnabled )
+
+ INFO_LOG2(
+ "CFileManagerEngine::FileSystemEvent-iDriveAddedOrChangedPostponed=%d,iEmbeddedApplicationOn=%d ",
+ iDriveAddedOrChangedPostponed, iEmbeddedApplicationOn )
+
+ if ( !iFileSystemEventEnabled && aEventOn )
+ {
+ iDriveAddedOrChangedPostponed = EFalse;
+ iFileSystemEventEnabled = ETrue;
+ }
+ else if ( iFileSystemEventEnabled && !aEventOn )
+ {
+ iFileSystemEventEnabled = EFalse;
+ if ( iDriveAddedOrChangedPostponed )
+ {
+ iDriveAddedOrChangedPostponed = EFalse;
+ TRAP_IGNORE( DriveAddedOrChangedL() );
+ }
+ }
+
+ if ( iUtils->IsRemoteDrive( iNavigator->CurrentDirectory() ) )
+ {
+ // At the moment no use to have event for remote drives
+ delete iFileSystemEvent;
+ iFileSystemEvent = NULL;
+ return;
+ }
+
+ // Set event on when there is no embedded app with event
+ if ( aEventOn &&
+ !( iEmbeddedApplicationOn && iFileSystemEvent ) )
+ {
+ TInt err( KErrNone );
+ switch ( iState )
+ {
+ case ENavigation:
+ {
+ TRAP( err, SetFileSystemEventL( iNavigator->CurrentDirectory() ) );
+ break;
+ }
+ case ESearch:
+ {
+ TRAP( err, SetFileSystemEventL() );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ if ( err != KErrNone && iProcessObserver )
+ {
+ iProcessObserver->Error( err );
+ }
+ }
+ // Check event and set it off when there is no embedded app
+ else if( !iEmbeddedApplicationOn && iFileSystemEvent )
+ {
+ iFileSystemEvent->CheckFileSystemEvent();
+ delete iFileSystemEvent;
+ iFileSystemEvent = NULL;
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::CurrentIndex
+//
+// ------------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::CurrentIndex()
+ {
+ if ( iCurrentItemName.Length() )
+ {
+ TInt count( iNavigator->MdcaCount() );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ CGflmGroupItem* item = iNavigator->Item( i );
+ if ( !item->Name().CompareF( iCurrentItemName ) )
+ {
+ iCurrentItemName.Zero();
+ return i;
+ }
+ }
+ iCurrentItemName.Zero();
+ }
+
+ // Top navigation index
+ TInt pos( iNavigationIndices.Count() - 1 );
+ if ( pos >= 0 )
+ {
+ return iNavigationIndices[ pos ];
+ }
+ return KErrNotFound;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::CanDelete
+//
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerEngine::CanDelete( const TDesC& aFileName ) const
+ {
+ return iUtils->CanDelete( aFileName );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::LocalizedName
+//
+// ------------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::LocalizedName(
+ const TDesC& aFullPath ) const
+ {
+ return iUtils->LocalizedName( aFullPath );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::FilesInFolderL
+//
+// ------------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::FilesInFolderL()
+ {
+ TInt ret( 0 );
+ switch ( iState )
+ {
+ case ENavigation: // Fall through
+ case ESearch:
+ {
+ TInt count( iNavigator->MdcaCount() );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ CGflmGroupItem* item = iNavigator->Item( i );
+ if ( item->Type() == CGflmGroupItem::EFile )
+ {
+ ++ret;
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return ret;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::CancelRefresh
+//
+// ------------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::CancelRefresh()
+ {
+ switch ( iState )
+ {
+ case ENavigation:
+ {
+ CancelTransfer( iNavigator->CurrentDirectory() );
+ break;
+ }
+ case ESearch:
+ {
+ if ( iSearchFolder )
+ {
+ CancelTransfer( *iSearchFolder );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return iRefresher->CancelRefresh();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::DriveAddedOrChangedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerEngine::DriveAddedOrChangedL()
+ {
+ FUNC_LOG
+
+ if( iDiskEvent )
+ {
+ iDiskEvent->Setup();
+ }
+
+ TBool processOngoing( iRemovableDrvHandler->IsProcessOngoing() );
+
+ INFO_LOG3( "CFileManagerEngine::DriveAddedOrChangedL-event=%d,process=%d,postponed=%d ",
+ iFileSystemEventEnabled, processOngoing, iDriveAddedOrChangedPostponed )
+
+ if ( iFileSystemEventEnabled || processOngoing )
+ {
+ iDriveAddedOrChangedPostponed = ETrue;
+ }
+ else
+ {
+ iDriveAddedOrChangedPostponed = EFalse;
+ ClearDriveInfo();
+ if ( iProcessObserver &&
+ !iEmbeddedApplicationOn &&
+ !iWaitDialogOn &&
+ !iRefresher->IsActive() )
+ {
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ if ( dir.Length() )
+ {
+ TBool isAvailable( CurrentDriveAvailable() );
+
+ if ( iUtils->IsRemoteDrive( dir ) )
+ {
+ // Notify whether remote drive has become available
+ // So when receiving remote drive connection event,
+ // View will be refreshed
+ //if ( !iLastDriveAvailable && isAvailable )
+ // {
+ iProcessObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
+ // }
+ }
+ else
+ {
+ // Notify if drive has become unavailable or
+ // avaibility has changed
+ if ( !isAvailable ||
+ isAvailable != iLastDriveAvailable )
+ {
+ iProcessObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
+ }
+ }
+ }
+ else
+ {
+ // Notify always when no folder is opened
+ iProcessObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
+ }
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::FolderContentChangedL
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerEngine::FolderContentChangedL()
+ {
+ if( iProcessObserver )
+ {
+ iProcessObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
+ }
+ else
+ {
+ RefreshDirectory();
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::IsFolder
+//
+// ------------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::IsFolder( const TInt aIndex ) const
+ {
+ if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
+ {
+ return EFalse;
+ }
+ CGflmGroupItem* item = iNavigator->Item( aIndex );
+ TBool ret( EFalse );
+ switch ( item->Type() )
+ {
+ case CGflmGroupItem::EDirectory: // Fallthrough
+ case CGflmGroupItem::EDrive: // Fallthrough
+ case CGflmGroupItem::EGlobalActionItem:
+ {
+ ret = ETrue;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return ret;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerEngine::IconIdL
+//
+// ------------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::IconIdL( const TInt aIndex ) const
+ {
+ if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
+ {
+ User::Leave( KErrNotFound );
+ }
+ CGflmGroupItem* item = iNavigator->Item( aIndex );
+ return iUtils->ResolveIconL( *item );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::ShowWaitDialogL( MAknBackgroundProcess& aProcess )
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::ShowWaitDialogL( MAknBackgroundProcess& aProcess )
+ {
+ iWaitDialogOn = ETrue;
+ TRAPD( err, iProcessObserver->ShowWaitDialogL( aProcess ) );
+ iWaitDialogOn = EFalse;
+ User::LeaveIfError( err );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::EmbeddedAppStatus( TBool aStatus )
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::EmbeddedAppStatus( TBool aStatus )
+ {
+ iEmbeddedApplicationOn = aStatus;
+ FileSystemEvent( aStatus );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IsSystemFolder
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::IsSystemFolder( const TDesC& aFullPath ) const
+ {
+ _LIT( KSystemFolder, "?:\\system\\*" );
+ _LIT( KSysFolder, "?:\\sys\\*" );
+ _LIT( KPrivateFolder, "?:\\private\\*" );
+ _LIT( KResourceFolder, "?:\\resource\\*" );
+
+ if ( aFullPath.MatchF( KSystemFolder ) != KErrNotFound ||
+ aFullPath.MatchF( KSysFolder ) != KErrNotFound ||
+ aFullPath.MatchF( KResourceFolder ) != KErrNotFound ||
+ aFullPath.MatchF( KPrivateFolder ) != KErrNotFound )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CurrentDriveName()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::CurrentDriveName()
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ TPtrC dir( iNavigator->CurrentDirectory() );
+ if ( dir.Length() )
+ {
+ TInt drive = TDriveUnit( dir );
+ return DriveName( drive );
+ }
+#else // RD_MULTIPLE_DRIVE
+ CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
+ if ( drvItem )
+ {
+ return drvItem->Name();
+ }
+#endif // RD_MULTIPLE_DRIVE
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetDriveInfoL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::GetDriveInfoL(
+ TFileManagerDriveInfo& aInfo )
+ {
+ if ( iCurrentDriveInfoRefreshed )
+ {
+ // Use cached info
+ aInfo = iCurrentDriveInfo;
+ return;
+ }
+
+ CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
+ if ( drvItem )
+ {
+ GetDriveInfoL( drvItem->Drive(), aInfo );
+
+ // Store info for later use
+ iCurrentDriveInfo = aInfo;
+ iCurrentDriveInfoRefreshed = ETrue;
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IsDistributableFile()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::IsDistributableFile(
+ const TDesC& aFullPath, TBool& aIsProtected ) const
+ {
+ return iUtils->IsDistributableFile( aFullPath, aIsProtected );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RenameDrive()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::RenameDrive(
+ const TInt aDrive,
+ const TDesC& aName )
+ {
+ TInt len( aName.Length( ) );
+ for( TInt i( 0 ); i < len; i++ )
+ {
+ TChar ch( aName[ i ] );
+ // If not alphadigit or space, return error
+ if( !ch.IsAlphaDigit() && !ch.IsSpace() )
+ {
+ return KErrBadName;
+ }
+ }
+ TInt err( iFs.SetVolumeLabel( aName, aDrive ) );
+ if ( err == KErrNone )
+ {
+ // Refresh drive info after rename
+ ClearDriveInfo();
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetDrivePassword()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::SetDrivePassword(
+ const TInt aDrive,
+ const TMediaPassword& aOld,
+ const TMediaPassword& aNew )
+ {
+ ClearDriveInfo();
+ TInt err( iFs.LockDrive( aDrive, aOld, aNew, ETrue ) );
+ INFO_LOG1( "CFileManagerEngine::SetDrivePassword err %d", err );
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RemoveDrivePassword()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::RemoveDrivePassword(
+ const TInt aDrive,
+ const TMediaPassword& aPwd )
+ {
+ ClearDriveInfo();
+ TInt err( iFs.ClearPassword( aDrive, aPwd ) );
+ INFO_LOG1( "CFileManagerEngine::RemoveDrivePassword err %d", err );
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::UnlockDrive()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::UnlockDrive(
+ const TInt aDrive,
+ const TMediaPassword& aPwd )
+ {
+ ClearDriveInfo();
+ TInt err( iFs.UnlockDrive( aDrive, aPwd, ETrue ) );
+ INFO_LOG1( "CFileManagerEngine::UnlockDrive err %d", err );
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::StartFormatProcessL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::StartFormatProcessL(
+ const TInt aDrive )
+ {
+ ClearDriveInfo();
+ iRemovableDrvHandler->StartFormatL( aDrive );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::StartEjectProcessL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::StartEjectProcessL( const TInt /*aDrive*/ )
+ {
+ ClearDriveInfo();
+ iRemovableDrvHandler->StartEjectL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::StartBackupProcessL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::StartBackupProcessL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess )
+ {
+ switch( aProcess )
+ {
+ case MFileManagerProcessObserver::EBackupProcess: // FALLTHROUGH
+ case MFileManagerProcessObserver::ESchBackupProcess:
+ {
+ // Make sure that there is no embedded apps open
+ delete iDocHandler;
+ iDocHandler = NULL;
+
+ ClearDriveInfo();
+ iRemovableDrvHandler->StartBackupL( aProcess );
+ break;
+ }
+ case MFileManagerProcessObserver::ERestoreProcess:
+ {
+ ClearDriveInfo();
+ iRemovableDrvHandler->StartRestoreL();
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CancelProcess()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::CancelProcess(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess )
+ {
+ switch( aProcess )
+ {
+ case MFileManagerProcessObserver::EFormatProcess:
+ case MFileManagerProcessObserver::EBackupProcess: // FALLTHROUGH
+ case MFileManagerProcessObserver::ERestoreProcess: // FALLTHROUGH
+ case MFileManagerProcessObserver::ESchBackupProcess: // FALLTHROUGH
+ {
+ iRemovableDrvHandler->CancelProcess();
+ break;
+ }
+ case MFileManagerProcessObserver::EFileOpenProcess:
+ {
+ if ( iDocHandler )
+ {
+ iDocHandler->CancelFileOpen();
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetDriveInfoL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::GetDriveInfoL(
+ const TDesC& aPath,
+ TFileManagerDriveInfo& aInfo ) const
+ {
+ if ( !aPath.Length() )
+ {
+ User::Leave( KErrNotFound );
+ }
+ TInt drv( 0 );
+ User::LeaveIfError( RFs::CharToDrive( aPath[ 0 ], drv ) );
+ GetDriveInfoL( drv, aInfo );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DriveState()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::DriveState(
+ TUint32& aState, const TDesC& aPath ) const
+ {
+ TFileManagerDriveInfo info;
+ TRAPD( err, GetDriveInfoL( aPath, info ) );
+ if ( err == KErrNone )
+ {
+ aState = info.iState;
+ }
+ else
+ {
+ aState = 0;
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DriveState()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::DriveState(
+ TUint32& aState, const TInt aDrive ) const
+ {
+ TFileManagerDriveInfo info;
+ TRAPD( err, GetDriveInfoL( aDrive, info ) );
+ if ( err == KErrNone )
+ {
+ aState = info.iState;
+ }
+ else
+ {
+ aState = 0;
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::MGXFileManagerL()
+//
+// -----------------------------------------------------------------------------
+//
+/*CMGXFileManager& CFileManagerEngine::MGXFileManagerL()
+ {
+ // MG2 notification object
+ if ( !iMgxFileManager )
+ {
+ INFO_LOG( "CFileManagerEngine::MGXFileManagerL()-Create" )
+ iMgxFileManager = MGXFileManagerFactory::NewFileManagerL( iFs );
+ }
+ return *iMgxFileManager;
+ }*/
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::Fs()
+//
+// -----------------------------------------------------------------------------
+//
+RFs& CFileManagerEngine::Fs() const
+ {
+ return iFs;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IsRemoteDriveConnected()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerEngine::IsRemoteDriveConnected( const TInt aDrive ) const
+ {
+ return iRemoteDrvHandler->IsConnected( aDrive );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetRemoteDriveConnection()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::SetRemoteDriveConnection(
+ const TInt aDrive, TBool aConnect )
+ {
+ return iRemoteDrvHandler->SetConnection( aDrive, aConnect );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DeleteRemoteDrive()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::DeleteRemoteDrive( const TInt aDrive )
+ {
+ return iRemoteDrvHandler->DeleteSettings( aDrive );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::BackupFileExistsL()
+//
+// -----------------------------------------------------------------------------
+//
+#ifndef RD_FILE_MANAGER_BACKUP
+
+TBool CFileManagerEngine::BackupFileExistsL( const TInt aDrive ) const
+ {
+ return iRemovableDrvHandler->BackupFileExistsL( aDrive );
+ }
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::OpenFileL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::OpenFileL( const TDesC& aFullPath )
+ {
+ if ( !iDocHandler )
+ {
+ iDocHandler = CFileManagerDocHandler::NewL( *this, *iUtils );
+ }
+ iDocHandler->OpenFileL( aFullPath, iProcessObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::OpenDirectoryL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::OpenDirectoryL( const TDesC& aFullPath )
+ {
+ iNavigator->GoToDirectoryL( aFullPath, ETrue );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DriveRootDirectory()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::DriveRootDirectory( TInt aDrive ) const
+ {
+ CGflmDriveItem* drvItem = iNavigator->DriveFromId( aDrive );
+ if ( drvItem )
+ {
+ return drvItem->RootDirectory();
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::BackupSettingsL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerBackupSettings& CFileManagerEngine::BackupSettingsL()
+ {
+ if ( !iBackupSettings )
+ {
+ INFO_LOG( "CFileManagerEngine::BackupSettingsL()-Create" )
+ iBackupSettings = CFileManagerBackupSettings::NewL( *this );
+ }
+ return *iBackupSettings;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RestoreSettingsL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerRestoreSettings& CFileManagerEngine::RestoreSettingsL()
+ {
+ if ( !iRestoreSettings )
+ {
+ INFO_LOG( "CFileManagerEngine::RestoreSettingsL()-Create" )
+ iRestoreSettings = CFileManagerRestoreSettings::NewL( *this );
+ }
+ return *iRestoreSettings;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetRestoreInfoArrayL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::GetRestoreInfoArrayL(
+ RArray< CFileManagerRestoreSettings::TInfo >& aArray,
+ const TInt aDrive ) const
+ {
+ return iRemovableDrvHandler->GetRestoreInfoArrayL( aArray, aDrive );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DriveName()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerEngine::DriveName( const TInt aDrive )
+ {
+ CGflmDriveItem* drvItem = iNavigator->DriveFromId( aDrive );
+ if ( drvItem )
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ delete iDriveName;
+ iDriveName = NULL;
+
+ TRAPD( err, iDriveName = iUtils->GetDriveNameL(
+ drvItem->Drive(), CFileManagerUtils::ETitleLayout ) );
+ if ( err == KErrNone )
+ {
+ return iDriveName->Des();
+ }
+#else // RD_MULTIPLE_DRIVE
+ return drvItem->Name();
+#endif // RD_MULTIPLE_DRIVE
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetDriveInfoL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::GetDriveInfoL(
+ const TInt aDrive, TFileManagerDriveInfo& aInfo ) const
+ {
+ aInfo.GetInfoL( *this, aDrive );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CurrentDriveAvailable()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerEngine::CurrentDriveAvailable()
+ {
+ TFileManagerDriveInfo info;
+ TRAPD( err, GetDriveInfoL( info ) );
+ if ( err != KErrNone )
+ {
+ return EFalse;
+ }
+
+ TInt ret( ETrue );
+ if ( info.iState & (
+ TFileManagerDriveInfo::EDriveCorrupted |
+ TFileManagerDriveInfo::EDriveLocked ) )
+ {
+ ret = EFalse;
+ }
+ else if ( !( info.iState & TFileManagerDriveInfo::EDrivePresent ) )
+ {
+ ret = EFalse;
+ }
+
+ if ( ( info.iState & TFileManagerDriveInfo::EDriveRemote ) &&
+ !( info.iState & TFileManagerDriveInfo::EDriveConnected ) )
+ {
+ ret = EFalse;
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::ClearDriveInfo()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::ClearDriveInfo()
+ {
+ iCurrentDriveInfoRefreshed = EFalse;
+ iNavigator->ClearDriveInfo();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::AnyEjectableDrivePresent()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerEngine::AnyEjectableDrivePresent() const
+ {
+ RArray< TInt > drives;
+ iUtils->DriveList( drives, KDriveAttRemovable );
+ TInt ret( EFalse );
+ TInt count( drives.Count() );
+ const TInt KPresentBits(
+ TFileManagerDriveInfo::EDriveEjectable |
+ TFileManagerDriveInfo::EDrivePresent );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ TUint32 state( 0 );
+ if ( DriveState( state, drives[ i ] ) == KErrNone )
+ {
+ if ( ( state & KPresentBits ) == KPresentBits )
+ {
+ ret = ETrue;
+ break;
+ }
+ }
+ }
+ drives.Close();
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::ForcedRefreshDirectory()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::ForcedRefreshDirectory()
+ {
+ TPtrC ptr( iNavigator->CurrentDirectory() );
+ if ( ptr.Length() && iUtils->IsRemoteDrive( ptr ) )
+ {
+ // Ensure that remote directory is reloaded
+ iRemoteDrvHandler->RefreshDirectory( ptr );
+ }
+ RefreshDirectory();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::HasAppRemoteDriveSupport()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerEngine::HasAppRemoteDriveSupport( TUid aUid )
+ {
+ return iRemoteDrvHandler->HasAppRemoteDriveSupport( aUid );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetFileSizesL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt64 CFileManagerEngine::GetFileSizesL(
+ const CArrayFixFlat<TInt>& aIndexList )
+ {
+ FUNC_LOG
+
+ TBool isCanceled( EFalse );
+ TInt64 size( 0 );
+ TInt count( aIndexList.Count() );
+
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ CGflmGroupItem* item = iNavigator->Item( aIndexList.At( i ) );
+ switch ( item->Type() )
+ {
+ case CGflmGroupItem::EFile:
+ {
+ CGflmFileSystemItem* fsItem =
+ static_cast< CGflmFileSystemItem* >( item );
+ size += static_cast<TUint>(fsItem->Entry().iSize);
+ break;
+ }
+ case CGflmGroupItem::EDirectory:
+ {
+ CGflmFileSystemItem* fsItem =
+ static_cast< CGflmFileSystemItem* >( item );
+ HBufC* fullPath = fsItem->FullPathLC();
+
+ delete iActiveSize;
+ iActiveSize = NULL;
+
+ iActiveSize = CFileManagerActiveSize::NewL(
+ iFs, *fullPath );
+
+ ShowWaitDialogL( *iActiveSize );
+
+ TInt64 folderSize( iActiveSize->GetFolderSize() );
+ if ( folderSize == KErrNotFound )
+ {
+ // Calculation was canceled by the user
+ isCanceled = ETrue;
+ }
+ else
+ {
+ size += folderSize;
+ }
+
+ CleanupStack::PopAndDestroy( fullPath );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ if ( isCanceled )
+ {
+ break;
+ }
+ }
+
+ if ( isCanceled )
+ {
+ return KErrNotFound;
+ }
+ return size;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CancelTransfer()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::CancelTransfer( const TDesC& aFullPath )
+ {
+ if ( iUtils->IsRemoteDrive( aFullPath ) )
+ {
+ iRemoteDrvHandler->CancelTransfer( aFullPath );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::NavigationLevel
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerEngine::NavigationLevel() const
+ {
+ return iNavigator->NavigationLevel();
+ }
+
+#ifdef RD_MULTIPLE_DRIVE
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetFormattedDriveNameLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CFileManagerEngine::GetFormattedDriveNameLC(
+ const TInt aDrive,
+ const TInt aTextIdForDefaultName,
+ const TInt aTextIdForName ) const
+ {
+ return iUtils->GetFormattedDriveNameLC(
+ aDrive, aTextIdForDefaultName, aTextIdForName );
+ }
+#else // RD_MULTIPLE_DRIVE
+EXPORT_C HBufC* CFileManagerEngine::GetFormattedDriveNameLC(
+ const TInt /*aDrive*/,
+ const TInt /*aTextIdForDefaultName*/,
+ const TInt /*aTextIdForName*/ ) const
+ {
+ User::Leave( KErrNotSupported );
+ return NULL;
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::GetItemInfoLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerItemProperties* CFileManagerEngine::GetItemInfoLC(
+ const TInt aIndex )
+ {
+ CFileManagerItemProperties* ret = GetItemInfoL( aIndex );
+ CleanupStack::PushL( ret );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetSearchStringL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetSearchStringL( const TDesC& aSearchString )
+ {
+ delete iSearchString;
+ iSearchString = NULL;
+ iSearchString = aSearchString.AllocL();
+ iNavigator->SetSearchStringL( aSearchString );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetSearchFolderL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetSearchFolderL( const TDesC& aSearchFolder )
+ {
+ delete iSearchFolder;
+ iSearchFolder = NULL;
+ iSearchFolder = aSearchFolder.AllocL();
+ iNavigator->SetSearchFolderL( aSearchFolder );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetDirectoryWithBackstepsL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetDirectoryWithBackstepsL(
+ const TDesC& aDirectory )
+ {
+ CGflmDriveItem* drvItem = iNavigator->DriveFromPath( aDirectory );
+ if ( !drvItem )
+ {
+ return;
+ }
+ // Build backsteps
+ iNavigator->GoToDirectoryL( drvItem->RootDirectory(), aDirectory );
+
+ // Build navigation indices
+ iNavigationIndices.Reset();
+ iNavigationIndices.AppendL( KErrNotFound ); // Set initial
+ TInt count( iNavigator->NavigationLevel() ); // Set backsteps
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ iNavigationIndices.AppendL( KErrNotFound );
+ }
+ iNavigationIndices.AppendL( KErrNotFound ); // Set current
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetCurrentIndex
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetCurrentIndex( const TInt aIndex )
+ {
+ TInt pos( iNavigationIndices.Count() - 1 );
+ if ( pos >= 0 )
+ {
+ iNavigationIndices[ pos ] = aIndex;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetSortMethod
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetSortMethod( TSortMethod aSortMethod )
+ {
+ switch ( aSortMethod )
+ {
+ case EByName: // Fallthrough
+ case EByType: // Fallthrough
+ case EMostRecentFirst: // Fallthrough
+ case ELargestFirst: // Fallthrough
+ case EByMatch:
+ {
+ // Make sure that the enums do match
+ iNavigator->SetSortMethod(
+ static_cast< TGflmSortMethod >( aSortMethod ) );
+ break;
+ }
+ default:
+ {
+ ERROR_LOG1(
+ "CFileManagerEngine::SetSortMethod-InvalidMethod=%d",
+ aSortMethod )
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SortMethod
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerEngine::TSortMethod CFileManagerEngine::SortMethod() const
+ {
+ // Make sure that the enums do match
+ return static_cast< TSortMethod >( iNavigator->SortMethod() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RefreshSort
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::RefreshSort()
+ {
+ iRefresher->Refresh( ERefreshSort );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::FeatureManager
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerFeatureManager& CFileManagerEngine::FeatureManager() const
+ {
+ return *iFeatureManager;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetAppExitOb
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::SetAppExitOb( MAknServerAppExitObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::NoticeServerAppExit
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::NoticeServerAppExit( TInt aReason )
+ {
+ if ( iObserver && iSisFile )
+ {
+ iUtils->FlushCache();
+ iObserver->HandleServerAppExit( aReason );
+ iSisFile = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::SetSisFile
+// -----------------------------------------------------------------------------
+//
+void CFileManagerEngine::SetSisFile( TBool aSisFile )
+ {
+ iSisFile = aSisFile;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerEngine::LatestBackupTimeL()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerEngine::LatestBackupTime( TTime& aBackupTime )
+ {
+ TRAPD( err, iRemovableDrvHandler->LatestBackupTimeL( aBackupTime ) );
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerEngine::DeleteBackupsL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerEngine::DeleteBackupsL()
+ {
+ iRemovableDrvHandler->DeleteBackupsL();
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerFeatureManager.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2007-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 manages the runtime variated features
+*
+*/
+
+
+#include <e32std.h>
+#include <centralrepository.h>
+#include <featmgr.h>
+#include <eikenv.h>
+#include "CFileManagerFeatureManager.h"
+#include "FileManagerDebug.h"
+#include "FileManagerPrivateCRKeys.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::CFileManagerFeatureManager
+// ----------------------------------------------------------------------------
+//
+CFileManagerFeatureManager::CFileManagerFeatureManager()
+ {
+ FUNC_LOG;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerFeatureManager::ConstructL()
+ {
+ FUNC_LOG;
+
+ // Get the feature manager variations
+ FeatureManager::InitializeLibL();
+ iDrmFullSupported = FeatureManager::FeatureSupported( KFeatureIdDrmFull );
+ iHelpSupported = FeatureManager::FeatureSupported( KFeatureIdHelp );
+ iIrdaSupported = FeatureManager::FeatureSupported( KFeatureIdIrda );
+ iRemoteStorageFwSupported =
+ FeatureManager::FeatureSupported( KFeatureIdRemoteStorageFw );
+ iMmcPassWdSupported = FeatureManager::FeatureSupported( KFeatureIdMmcLock );
+ iWesternVariant = !( FeatureManager::FeatureSupported( KFeatureIdChinese ) );
+ iMmcSwEjectSupported =
+ ( FeatureManager::FeatureSupported( KFeatureIdMmcHotswap ) &&
+ FeatureManager::FeatureSupported( KFeatureIdMmcEject ) );
+ FeatureManager::UnInitializeLib();
+
+ iEmbedded = CEikonEnv::Static()->StartedAsServerApp();
+
+ // Get the local variations
+ CRepository* cenRep = CRepository::NewLC( KCRUidFileManagerSettings );
+ TInt err( cenRep->Get( KFileManagerFeatures, iFileManagerFeatures ) );
+ if ( err != KErrNone )
+ {
+ ERROR_LOG1(
+ "CFileManagerFeatureManager::ConstructL()-LocalVariationError=%d",
+ err );
+ iFileManagerFeatures = 0;
+ }
+ INFO_LOG1(
+ "CFileManagerFeatureManager::ConstructL()-iFileManagerFeatures=0x%x",
+ iFileManagerFeatures );
+ CleanupStack::PopAndDestroy( cenRep );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerFeatureManager* CFileManagerFeatureManager::NewL()
+ {
+ FUNC_LOG;
+
+ CFileManagerFeatureManager* self =
+ new ( ELeave ) CFileManagerFeatureManager();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::~CFileManagerFeatureManager
+// ----------------------------------------------------------------------------
+//
+CFileManagerFeatureManager::~CFileManagerFeatureManager()
+ {
+ FUNC_LOG;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsDrmFullSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsDrmFullSupported() const
+ {
+ return iDrmFullSupported;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsHelpSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsHelpSupported() const
+ {
+ return iHelpSupported;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsIrdaSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsIrdaSupported() const
+ {
+ return iIrdaSupported;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsRemoteStorageFwSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsRemoteStorageFwSupported() const
+ {
+ return iRemoteStorageFwSupported;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsMmcPassWdSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsMmcPassWdSupported() const
+ {
+ return iMmcPassWdSupported;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsWesternVariant
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsWesternVariant() const
+ {
+ return iWesternVariant;
+ }
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsMmcSwEjectSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsMmcSwEjectSupported() const
+ {
+ return iMmcSwEjectSupported;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsFeatureSupported
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsFeatureSupported(
+ TInt aFileManagerFeature ) const
+ {
+ return ( iFileManagerFeatures & aFileManagerFeature );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerFeatureManager::IsEmbedded
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerFeatureManager::IsEmbedded() const
+ {
+ return iEmbedded;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerFileSystemIterator.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2002-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: Goes through folder tree one item at time
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CFileManagerFileSystemIterator.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerCommonDefinitions.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileSystemIterator* CFileManagerFileSystemIterator::NewL(
+ RFs& aFs,
+ const TDesC& aSrcDir,
+ const TDesC& aDstDir,
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerFileSystemIterator* self =
+ new (ELeave) CFileManagerFileSystemIterator( aDstDir, aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL( aFs, aSrcDir );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::CFileManagerFileSystemIterator
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileSystemIterator::CFileManagerFileSystemIterator(
+ const TDesC& aDstDir, CFileManagerEngine& aEngine ) :
+ iCount( KErrNotFound ),
+ iDstDir( aDstDir ),
+ iEngine( aEngine )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::~CFileManagerFileSystemIterator
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileSystemIterator::~CFileManagerFileSystemIterator()
+ {
+ delete iSrcDir;
+ delete iSrc;
+ delete iDst;
+ delete iDir;
+ delete iDirScan;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileSystemIterator::ConstructL(
+ RFs& aFs, const TDesC& aSrcDir )
+ {
+ iDirScan = CDirScan::NewL( aFs );
+ // Go through the folders first
+ iDirScan->SetScanDataL(
+ aSrcDir,
+ KEntryAttNormal | KEntryAttHidden | KEntryAttSystem |
+ KEntryAttDir | KEntryAttMatchExclusive,
+ ESortNone );
+ iSrc = HBufC::NewL( KMaxFileName );
+ // We need double destination size
+ // because source and target folder can be
+ // KMaxFileName sized and those are append
+ // to same buffer.
+ iDst = HBufC::NewL( KFmgrDoubleMaxFileName );
+ iDst->Des().Copy( iDstDir );
+ iDirScan->NextL( iDir );
+ iSrcDir = aSrcDir.AllocL();
+ iSrc->Des().Copy( aSrcDir );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::CurrentL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileSystemIterator::CurrentL(
+ HBufC** aSrc, HBufC** aDst, TFileManagerTypeOfItem& aItemType )
+ {
+ *aSrc = NULL;
+ *aDst = NULL;
+
+ if( iCount == KErrNotFound )
+ {
+ // Handle destination root folder first
+ aItemType = EFileManagerFolder;
+ *aSrc = iSrc; // contains iSrcDir
+ *aDst = iDst; // contains iDstDir
+ }
+ else if( iDir && iCount < iDir->Count() )
+ {
+ // Handle folder contents
+ if( !iFolderScanDone )
+ {
+ const TEntry& entry( ( *iDir )[ iCount ] );
+
+ TPtr ptrSrc( iSrc->Des() );
+ ptrSrc.Copy( iDirScan->FullPath() );
+ ptrSrc.Append( entry.iName );
+ ptrSrc.Append( KFmgrBackslash );
+
+ TPtr ptrDst( iDst->Des() );
+ ptrDst.Copy( iDstDir );
+ ptrDst.Append( LocalizedAbbreviatedPath() );
+
+ TPtrC ptr( iEngine.LocalizedName( *iSrc ) );
+ if( ptr.Length() )
+ {
+ ptrDst.Append( ptr );
+ }
+ else
+ {
+ ptrDst.Append( entry.iName );
+ }
+ ptrDst.Append( KFmgrBackslash );
+
+ aItemType = EFileManagerFolder;
+ }
+ else
+ {
+ const TEntry& entry( ( *iDir )[ iCount ] );
+
+ TPtr ptrSrc( iSrc->Des() );
+ ptrSrc.Copy( iDirScan->FullPath() );
+ ptrSrc.Append( entry.iName );
+
+ TPtr ptrDst( iDst->Des() );
+ ptrDst.Copy( iDstDir );
+ ptrDst.Append( LocalizedAbbreviatedPath() );
+ ptrDst.Append( entry.iName );
+
+ aItemType = EFileManagerFile;
+ }
+ *aSrc = iSrc;
+ *aDst = iDst;
+ }
+ else
+ {
+ aItemType = EFileManagerNoType;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::NextL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFileSystemIterator::NextL()
+ {
+ if ( !iDir )
+ {
+ return EFalse;
+ }
+
+ ++iCount;
+
+ // Get next dir
+ if( iCount >= iDir->Count() )
+ {
+ delete iDir;
+ iDir = NULL;
+ iCount = 0;
+ iDirScan->NextL( iDir );
+ iLocalizedAbbreviatedPath.Zero();
+ }
+
+ // Are we done
+ if( iDir )
+ {
+ return ETrue;
+ }
+
+ // Folders have been scanned through, now same scanning with files
+ if( !iFolderScanDone )
+ {
+ iDirScan->SetScanDataL( *iSrcDir,
+ KEntryAttNormal | KEntryAttHidden | KEntryAttSystem,
+ ESortNone );
+ iDirScan->NextL( iDir );
+ iLocalizedAbbreviatedPath.Zero();
+ iCount = 0;
+ iFolderScanDone = ETrue;
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFileSystemIterator::LocalizedAbbreviatedPath
+//
+// ------------------------------------------------------------------------------
+//
+TPtrC CFileManagerFileSystemIterator::LocalizedAbbreviatedPath()
+ {
+ TPtrC abbrPath( iDirScan->AbbreviatedPath() );
+
+ if( !iLocalizedAbbreviatedPath.Length() && abbrPath.Length() > 1 )
+ {
+ iLocalizedAbbreviatedPath.Append(
+ iEngine.LocalizedName( iDirScan->FullPath() ) );
+
+ if( !iLocalizedAbbreviatedPath.Length() )
+ {
+ iLocalizedAbbreviatedPath.Append(
+ abbrPath.Right( abbrPath.Length() - 1 ) );
+ }
+ else
+ {
+ iLocalizedAbbreviatedPath.Append( KFmgrBackslash );
+ }
+ }
+ return iLocalizedAbbreviatedPath;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerFolderEntry.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2002-2006 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: Holds one default folder entry
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CFileManagerFolderEntry.h"
+#include <barsread.h> // TResourceReader
+#include <bautils.h> // BaflUtils::EnsurePathExists
+#include <coemain.h> // CCoeEnv
+#include "CFileManagerUtils.h"
+#include "CFileManagerCommonDefinitions.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::NewLC
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderEntry* CFileManagerFolderEntry::NewLC(
+ TResourceReader& aReader )
+ {
+ CFileManagerFolderEntry* self = new( ELeave ) CFileManagerFolderEntry;
+ CleanupStack::PushL( self );
+ self->ConstructFromResourceL( aReader );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderEntry* CFileManagerFolderEntry::NewL(
+ TResourceReader& aReader )
+ {
+ CFileManagerFolderEntry* self = CFileManagerFolderEntry::NewLC( aReader );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::NewLC
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderEntry* CFileManagerFolderEntry::NewLC(
+ const TInt aDrive, const TDesC& aPath )
+ {
+ CFileManagerFolderEntry* self = new( ELeave ) CFileManagerFolderEntry;
+ CleanupStack::PushL( self );
+ self->ConstructL( aDrive, aPath );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::CFileManagerFolderEntry
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderEntry::CFileManagerFolderEntry()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::~CFileManagerFolderEntry
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderEntry::~CFileManagerFolderEntry()
+ {
+ delete iName;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::ConstructFromResourceL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderEntry::ConstructFromResourceL( TResourceReader& aReader )
+ {
+ const TPtrC root( aReader.ReadTPtrC() );
+ const TPtrC path( aReader.ReadTPtrC() );
+
+ iIsMediaFolder = aReader.ReadInt8();
+ iName = HBufC::NewL(
+ root.Length() +
+ path.Length() +
+ KFmgrBackslashSpace +
+ KFmgrBackslashSpace );
+
+ TPtr ptr( iName->Des() );
+ ptr.Copy( root );
+ CFileManagerUtils::EnsureFinalBackslash( ptr );
+ ptr.Append( path );
+ CFileManagerUtils::EnsureFinalBackslash( ptr );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderEntry::ConstructL(
+ const TInt aDrive, const TDesC& aPath )
+ {
+ TChar driveLetter;
+
+ User::LeaveIfError( RFs::DriveToChar( aDrive, driveLetter ) );
+ iName = aPath.AllocL();
+ iName->Des()[ 0 ] = driveLetter;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::IsMediaFolder
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFolderEntry::IsMediaFolder() const
+ {
+ return iIsMediaFolder;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::Name
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CFileManagerFolderEntry::Name() const
+ {
+ return iName->Des();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::CompareSort
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFolderEntry::CompareSort(
+ const CFileManagerFolderEntry& aFirst,
+ const CFileManagerFolderEntry& aSecond )
+ {
+ return aFirst.iName->Des().CompareF( *( aSecond.iName ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderEntry::CompareFind
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFolderEntry::CompareFind(
+ const TDesC* aPath,
+ const CFileManagerFolderEntry& aItem )
+ {
+ return aPath->CompareF( *( aItem.iName ) );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerIRReceiver.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,604 @@
+/*
+* Copyright (c) 2002-2006 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: Receives obex object via InfraRed, used to receive files
+*
+*/
+
+
+// INCLUDE FILES
+#include <obex.h>
+#include "CFileManagerIRReceiver.h"
+#include "MFileManagerProcessObserver.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerUtils.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "FileManagerDebug.h"
+
+
+// CONSTANTS
+const TUint KDefaultObexPort = 65;
+const TUint KBufferGranularity = 2048;
+const TInt KFullPercentage = 100;
+const TInt KInactiveTimeout = 60000000;
+
+// Required for IR
+_LIT( KTransportTinyTp, "IrTinyTP" );
+_LIT8( KClassNameObex, "OBEX" );
+_LIT8( KAttName, "IrDA:TinyTP:LsapSel" );
+_LIT( KTemporaryFile, "__FileManagerIrdaReceive.tmp" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::CFileManagerEngine
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerIRReceiver::CFileManagerIRReceiver(
+ MFileManagerProcessObserver& aObserver,
+ CFileManagerEngine& aEngine,
+ RFs& aFs ) :
+ iObserver( aObserver ),
+ iEngine( aEngine ),
+ iFs( aFs )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerIRReceiver* CFileManagerIRReceiver::NewL(
+ MFileManagerProcessObserver& aObserver,
+ const TDesC& aPath,
+ CFileManagerEngine& aEngine )
+ {
+ FUNC_LOG
+
+ CFileManagerIRReceiver* self = new( ELeave ) CFileManagerIRReceiver(
+ aObserver,
+ aEngine,
+ aEngine.Fs() );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aPath );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::ConstructL( const TDesC& aPath )
+ {
+ TPtrC ptrPath( CFileManagerUtils::StripFinalBackslash( aPath ) );
+ TInt len( ptrPath.Length() +
+ KFmgrBackslashSpace + KTemporaryFile().Length() );
+ if ( len > KMaxFileName )
+ {
+ User::Leave( KErrBadName );
+ }
+ iTempFile = HBufC::NewL( len );
+ TPtr ptr( iTempFile->Des() );
+ ptr.Append( ptrPath );
+ CFileManagerUtils::EnsureFinalBackslash( ptr );
+ ptr.Append( KTemporaryFile );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::ReceiveFileL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerIRReceiver::ReceiveFileL()
+ {
+ FUNC_LOG
+
+ ResetInactivityTimer();
+
+ TObexIrProtocolInfo obexIrInfo;
+ obexIrInfo.iAddr.SetPort( KDefaultObexPort );
+ obexIrInfo.iTransport = KTransportTinyTp;
+ obexIrInfo.iClassName = KClassNameObex;
+ obexIrInfo.iAttributeName = KAttName;
+
+ iObexServer = CObexServer::NewL( obexIrInfo );
+
+ User::LeaveIfError( iObexServer->Start( this ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::~CFileManagerIRReceiver
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerIRReceiver::~CFileManagerIRReceiver()
+ {
+ FUNC_LOG
+
+ if ( iObexServer )
+ {
+ if ( iObexServer->IsStarted() )
+ {
+ iObexServer->Stop();
+ }
+ delete iObexServer;
+ }
+ delete iObexBufObject;
+
+ if ( iTempFile )
+ {
+ iFs.Delete( *iTempFile );
+ delete iTempFile;
+ }
+ delete iBuffer;
+ delete iInactivityTimer;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::StopReceiving
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerIRReceiver::StopReceiving()
+ {
+ FUNC_LOG
+
+ iError = KErrCancel;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::ErrorIndication
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::ErrorIndication(TInt aError )
+ {
+ ERROR_LOG1( "CFileManagerIRReceiver::ErrorIndication-aError=%d", aError )
+
+ if ( iError == KErrNone )
+ {
+ iError = aError;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::TransportUpIndication
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::TransportUpIndication()
+ {
+ FUNC_LOG
+
+ StopInactivityTimer();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::TransportDownIndication
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::TransportDownIndication()
+ {
+ FUNC_LOG
+
+ TInt err( KErrNone );
+ if ( iObexBufObject )
+ {
+ // transfer has been cancelled, set temp buffer so obexobject won't
+ // create temp file again
+ delete iBuffer;
+ iBuffer = NULL;
+ TRAP( err, iBuffer = CBufFlat::NewL( KBufferGranularity ) );
+ if ( err == KErrNone )
+ {
+ TRAP( err, iObexBufObject->SetDataBufL( iBuffer ) );
+ }
+ }
+
+ if ( iTempFile )
+ {
+ iFs.Delete( *iTempFile );
+ }
+
+ TRAP( err, iObserver.ProcessFinishedL( iError ) );
+ if ( err != KErrNone )
+ {
+ iObserver.Error( err );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::TargetHeaderReceived
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerIRReceiver::TargetHeaderReceived(TDesC8& /* aTargetHeader */ )
+ {
+ FUNC_LOG
+
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::ObexConnectIndication
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::ObexConnectIndication
+ ( const TObexConnectInfo& /* aRemoteInfo */,
+ const TDesC8& /* aInfo */ )
+ {
+ FUNC_LOG
+
+ if ( iError == KErrCancel )
+ {
+ return KErrCancel;
+ }
+
+ TRAPD( err, iObserver.ProcessStartedL(
+ MFileManagerProcessObserver::EIRReceiveProcess ) );
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::ObexDisconnectIndication
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::ObexDisconnectIndication(const TDesC8& /* aInfo */ )
+ {
+ FUNC_LOG
+ // from MObexServerNotify
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::PutRequestIndication
+//
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CFileManagerIRReceiver::PutRequestIndication()
+ {
+ FUNC_LOG
+
+ // delete old buffer if it exists
+ delete iObexBufObject;
+ iObexBufObject = NULL;
+ iFs.Delete( *iTempFile );
+
+ TRAPD( err, iObexBufObject = CObexBufObject::NewL( NULL ) );
+ if ( err == KErrNone )
+ {
+ TRAP( err, iObexBufObject->SetDataBufL( *iTempFile ) );
+ }
+
+ if ( err != KErrNone )
+ {
+ return NULL;
+ }
+
+ return iObexBufObject;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::PutPacketIndication
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::PutPacketIndication()
+ {
+ FUNC_LOG
+
+ if ( iError == KErrCancel )
+ {
+ return KErrCancel;
+ }
+
+ const TInt size( iObexBufObject->Length() );
+
+ if ( !iDiskSpaceChecked )
+ {
+ TParsePtrC parse( *iTempFile );
+ TRAP( iError, iEnoughSpace = iEngine.EnoughSpaceL(
+ parse.DriveAndPath(), size,
+ MFileManagerProcessObserver::EIRReceiveProcess ) );
+ iDiskSpaceChecked = ETrue;
+ }
+
+ if ( iError == KErrNone && iEnoughSpace )
+ {
+ const TInt received( iObexBufObject->BytesReceived());
+ TInt percent( 0 );
+ if ( size != 0)
+ {
+ percent = KFullPercentage * received / size;
+ }
+ TRAPD( error, iObserver.ProcessAdvanceL( percent ) );
+ if ( iError == KErrNone )
+ {
+ iError = error;
+ }
+ }
+ else if ( !iEnoughSpace )
+ {
+ if ( iError == KErrNone )
+ {
+ iError = KErrDiskFull;
+ }
+ }
+
+ return iError;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::PutCompleteIndication
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::PutCompleteIndication()
+ {
+ FUNC_LOG
+
+ if ( iError == KErrCancel )
+ {
+ iFs.Delete( *iTempFile );
+ iDiskSpaceChecked = EFalse;
+ return KErrNone;
+ }
+
+ TInt error( KErrNone );
+ TFileName fileName;
+ TParsePtrC parse( *iTempFile );
+ fileName.Append( parse.DriveAndPath() );
+ TPtrC objName( iObexBufObject->Name() );
+
+ if ( fileName.Length() + objName.Length() > KMaxFileName )
+ {
+ iFs.Delete( *iTempFile );
+ iDiskSpaceChecked = EFalse;
+ iObserver.Error( KErrBadName );
+ return KErrBadName;
+ }
+
+ fileName.Append( objName );
+ delete iObexBufObject;
+ iObexBufObject = NULL;
+ TBool nameFound( EFalse );
+ TRAP( error, nameFound = iEngine.IsNameFoundL( fileName ) );
+ if ( error == KErrNone && nameFound )
+ {
+ TFileName name;
+ TBool overWrite( ETrue );
+ TRAP( error, overWrite = iObserver.ProcessQueryOverWriteL(
+ fileName, name,
+ MFileManagerProcessObserver::EIRReceiveProcess ) );
+
+ if ( error == KErrNone )
+ {
+ if ( overWrite )
+ {
+ error = iFs.Delete( fileName );
+ if ( error == KErrNone )
+ {
+ iFs.Rename( *iTempFile, fileName );
+ }
+ if ( error != KErrNone )
+ {
+ iObserver.Error( error );
+ }
+ }
+ else
+ {
+ TBool askAgain( ETrue );
+ TRAP( error, nameFound = iEngine.IsNameFoundL( name ) );
+ while( error == KErrNone && nameFound && askAgain )
+ {
+ TFileName newName;
+ TRAP( error, overWrite =
+ iObserver.ProcessQueryOverWriteL(
+ name,
+ newName,
+ MFileManagerProcessObserver::EIRReceiveProcess
+ ) );
+ if ( error != KErrNone )
+ {
+ iError = error;
+ askAgain = EFalse;
+ name.Zero();
+ }
+ else if ( !overWrite )
+ {
+ name.Zero();
+ name.Append( newName );
+ }
+ else
+ {
+ askAgain = EFalse;
+ }
+ }
+ if ( name.Length() > 0 )
+ {
+ TParsePtrC parse( *iTempFile );
+ name.Insert( 0, parse.DriveAndPath() );
+ iFs.Rename( *iTempFile, name );
+ }
+ }
+ }
+ else
+ {
+ iError = error;
+ }
+ }
+ else
+ {
+
+ iFs.Rename( *iTempFile, fileName );
+ }
+ iFs.Delete( *iTempFile );
+ iDiskSpaceChecked = EFalse;
+
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::GetRequestIndication
+// Empty because needed only for send functionality
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CFileManagerIRReceiver::GetRequestIndication
+ (CObexBaseObject* /* aRequiredObject */)
+ {
+ FUNC_LOG
+
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::GetPacketIndication
+// Empty because needed only for send functionality
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::GetPacketIndication()
+ {
+ FUNC_LOG
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::GetCompleteIndication
+// Empty because needed only for send functionality
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::GetCompleteIndication()
+ {
+ FUNC_LOG
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::SetPathIndication
+// Empty because setpath not supported
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::SetPathIndication(
+ const CObex::TSetPathInfo& /* aPathInfo*/ , const TDesC8& /* aInfo */)
+ {
+ FUNC_LOG
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::AbortIndication
+// Empty because needed only for send functionality
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::AbortIndication()
+ {
+ FUNC_LOG
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::ResetInactivityTimer
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::ResetInactivityTimer()
+ {
+ FUNC_LOG
+
+ StopInactivityTimer();
+
+ TRAPD( err, iInactivityTimer =
+ CPeriodic::NewL( CActive::EPriorityStandard ) );
+ if ( err == KErrNone )
+ {
+ iInactivityTimer->Start(
+ KInactiveTimeout,
+ KInactiveTimeout,
+ TCallBack( InactivityTimeout, this ) );
+
+ INFO_LOG( "CFileManagerIRReceiver::ResetInactivityTimer-Timer started" )
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::InactivityTimeout
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerIRReceiver::InactivityTimeout( TAny* aPtr )
+ {
+ FUNC_LOG
+
+ CFileManagerIRReceiver* self =
+ static_cast< CFileManagerIRReceiver* >( aPtr );
+
+ self->StopInactivityTimer();
+ self->CloseConnection();
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::StopInactivityTimer
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::StopInactivityTimer()
+ {
+ FUNC_LOG
+
+ delete iInactivityTimer;
+ iInactivityTimer = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIRReceiver::CloseConnection
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIRReceiver::CloseConnection()
+ {
+ FUNC_LOG
+
+ StopReceiving();
+
+ if ( iObexServer )
+ {
+ if ( iObexServer->IsStarted() )
+ {
+ INFO_LOG( "CFileManagerIRReceiver::CloseConnection-Stop server" )
+
+ iObexServer->Stop();
+ }
+ }
+
+ TRAPD( err, iObserver.ProcessFinishedL( KErrCancel ) );
+ if ( err != KErrNone )
+ {
+ iObserver.Error( err );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerItemFilter.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,297 @@
+/*
+* Copyright (c) 2005-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: Filter GFLM items
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CFileManagerItemFilter.h"
+#include "CFileManagerEngine.h"
+#include "CGflmGroupItem.h"
+#include "CGflmFileSystemItem.h"
+#include "CGflmDriveItem.h"
+#include "CGflmGlobalActionItem.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "FileManagerDebug.h"
+#include "TFileManagerDriveInfo.h"
+#include "CFileManagerFeatureManager.h"
+#include <FileManagerEngine.rsg>
+#include <StringLoader.h>
+#include <pathinfo.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerItemFilter::CFileManagerItemFilter
+// ----------------------------------------------------------------------------
+//
+CFileManagerItemFilter::CFileManagerItemFilter( CFileManagerEngine& aEngine )
+ : iEngine( aEngine )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerItemFilter::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerItemFilter::ConstructL()
+ {
+ // Phone memory root path
+ iPhoneMemoryRootPath = PathInfo::PhoneMemoryRootPath().AllocL();
+ iInternalDefaultName =
+ StringLoader::LoadL( R_TEXT_PHONE_MEMORY );
+ iRemovableDefaultName =
+ StringLoader::LoadL( R_TEXT_MEMORY_CARD_DEFAULT );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerItemFilter::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerItemFilter* CFileManagerItemFilter::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerItemFilter* self = new( ELeave ) CFileManagerItemFilter(
+ aEngine );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerItemFilter::~CFileManagerItemFilter
+// ----------------------------------------------------------------------------
+//
+CFileManagerItemFilter::~CFileManagerItemFilter()
+ {
+ delete iPhoneMemoryRootPath;
+ delete iInternalDefaultName;
+ delete iRemovableDefaultName;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerItemFilter::FilterItemL
+// ----------------------------------------------------------------------------
+//
+TBool CFileManagerItemFilter::FilterItemL(
+ CGflmGroupItem* aItem,
+ TInt /*aGroupId*/,
+ CGflmDriveItem* /*aDrive*/ )
+ {
+ switch( aItem->Type() )
+ {
+ case CGflmGroupItem::EGlobalActionItem:
+ {
+ CGflmGlobalActionItem* actItem =
+ static_cast< CGflmGlobalActionItem* >( aItem );
+ switch( actItem->Id() )
+ {
+ case EFileManagerBackupAction:
+ {
+ // Disable backup in embedded mode, because it messes up
+ // backup and restore operations since embedded apps are closed.
+ if ( iEngine.FeatureManager().IsEmbedded() )
+ {
+ return EFalse;
+ }
+ actItem->SetIconId( EFileManagerBackupMainIcon );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ break;
+ }
+ case CGflmGroupItem::EDirectory:
+ {
+ CGflmFileSystemItem* fsItem =
+ static_cast< CGflmFileSystemItem* >( aItem );
+ fsItem->GetFullPath( iFileNameBuffer );
+ return !iEngine.IsSystemFolder( iFileNameBuffer );
+ }
+ case CGflmGroupItem::EDrive:
+ {
+ CGflmDriveItem* drvItem = static_cast< CGflmDriveItem* >( aItem );
+
+#ifndef RD_MULTIPLE_DRIVE
+ const TVolumeInfo& vol( drvItem->VolumeInfo() );
+ TInt drive( drvItem->Drive() );
+#endif // RD_MULTIPLE_DRIVE
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-drive=%d",
+ drvItem->Drive() )
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-driveAtt=%d",
+ drvItem->VolumeInfo().iDrive.iDriveAtt )
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-mediaAtt=%d",
+ drvItem->VolumeInfo().iDrive.iMediaAtt )
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-driveUniqueId=%u",
+ drvItem->VolumeInfo().iUniqueID )
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-driveSize=%lu",
+ drvItem->VolumeInfo().iSize )
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-VolumeStatus=%d",
+ drvItem->VolumeStatus() )
+
+ INFO_LOG1( "CFileManagerItemFilter::FilterItemL()-DriveStatus=%d",
+ drvItem->DriveStatus() )
+
+#ifdef RD_MULTIPLE_DRIVE
+ // Setup drive icon
+ TUint driveStatus( drvItem->DriveStatus() );
+ if ( !( driveStatus & DriveInfo::EDriveUserVisible ) )
+ {
+ ERROR_LOG( "CFileManagerItemFilter::FilterItemL()-Hidden-1" )
+ return EFalse;
+ }
+ TInt icon( 0 );
+ if ( driveStatus & DriveInfo::EDriveInternal )
+ {
+ icon = EFileManagerPhoneMemoryMainIcon;
+ if ( driveStatus & DriveInfo::EDriveExternallyMountable )
+ {
+ icon = EFileManagerMassStorageMainIcon;
+ }
+ }
+ else if ( driveStatus & DriveInfo::EDriveUsbMemory )
+ {
+ if ( !( driveStatus & DriveInfo::EDrivePresent ) )
+ {
+ ERROR_LOG( "CFileManagerItemFilter::FilterItemL()-NotPresentUsbMemory" )
+ return EFalse; // Not present USB drive is not shown
+ }
+ icon = EFileManagerUsbMemoryMainIcon;
+ }
+ else if ( driveStatus & DriveInfo::EDriveRemovable )
+ {
+ icon = EFileManagerMemoryCardNotPresentMainIcon;
+ if ( driveStatus & DriveInfo::EDrivePresent )
+ {
+ icon = EFileManagerMemoryCardPresentMainIcon;
+ }
+ }
+ else if ( driveStatus & DriveInfo::EDriveRemote )
+ {
+ icon = EFileManagerRemoteDriveMainIcon;
+ }
+ else
+ {
+ ERROR_LOG( "CFileManagerItemFilter::FilterItemL()-Hidden-2" )
+ return EFalse;
+ }
+ drvItem->SetIconId( icon );
+ // Setup root directory
+ if ( PathInfo::GetRootPath( iFileNameBuffer, drvItem->Drive() ) != KErrNone )
+ {
+ ERROR_LOG( "CFileManagerItemFilter::FilterItemL()-Hidden-3" )
+ return EFalse;
+ }
+ drvItem->SetRootDirectoryL( iFileNameBuffer );
+ INFO_LOG( "CFileManagerItemFilter::FilterItemL()-Visible" )
+
+#else // RD_MULTIPLE_DRIVE
+
+ TBool isPhoneMem( EFalse );
+ TPtrC root( drvItem->RootDirectory() );
+ TPtrC phoneMemRoot( *iPhoneMemoryRootPath );
+ TInt len( Min( root.Length(), phoneMemRoot.Length() ) );
+ if ( !root.CompareF( phoneMemRoot.Left( len ) ) )
+ {
+ // Drive is defined to phone memory
+ isPhoneMem = ETrue;
+ drvItem->SetRootDirectoryL( *iPhoneMemoryRootPath );
+ }
+ else if ( vol.iDrive.iDriveAtt & KDriveAttInternal )
+ {
+ if ( drive == KFmgrRamDrive || drive == KFmgrRomDrive )
+ {
+ // Drive is not allowed internal drive
+ return EFalse;
+ }
+ }
+ if ( vol.iDrive.iDriveAtt & KDriveAttSubsted )
+ {
+ // Substed drives are not allowed
+ return EFalse;
+ }
+ // Setup drive name
+ if ( !drvItem->Name().Length() )
+ {
+ if ( isPhoneMem )
+ {
+ drvItem->SetLocalizedNameL( *iInternalDefaultName );
+ }
+ else if ( ( vol.iDrive.iDriveAtt & KDriveAttRemovable ) ||
+ drive == KFmgrMemoryCardDrive )
+ {
+ drvItem->SetLocalizedNameL( *iRemovableDefaultName );
+ }
+ else
+ {
+ drvItem->SetLocalizedNameL( drvItem->RootDirectory() );
+ }
+ }
+ // Setup drive icon
+ if ( isPhoneMem )
+ {
+ drvItem->SetIconId( EFileManagerPhoneMemoryMainIcon );
+ }
+ else if ( ( vol.iDrive.iDriveAtt & KDriveAttRemovable ) ||
+ drive == KFmgrMemoryCardDrive )
+ {
+ if ( vol.iDrive.iType == EMediaNotPresent )
+ {
+ drvItem->SetIconId( EFileManagerMemoryCardNotPresentMainIcon );
+ }
+ else
+ {
+ drvItem->SetIconId( EFileManagerMemoryCardPresentMainIcon );
+ }
+ }
+ else if ( vol.iDrive.iDriveAtt & KDriveAttRemote )
+ {
+ drvItem->SetIconId( EFileManagerRemoteDriveMainIcon );
+ }
+ else
+ {
+ return EFalse;
+ }
+ INFO_LOG( "CFileManagerItemFilter::FilterItemL()-driveAllowed" )
+
+#endif // RD_MULTIPLE_DRIVE
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return ETrue;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerItemProperties.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,602 @@
+/*
+* Copyright (c) 2002-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: Holds item information
+*
+*/
+
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include <tz.h>
+#include "CFileManagerItemProperties.h"
+#include "CFileManagerUtils.h"
+#include "CFilemanagerMimeIconArray.h"
+#include "Cfilemanagerfolderarray.h"
+#include "Cfilemanageractivesize.h"
+#include "CFilemanagerActiveCount.h"
+#include "CFileManagerEngine.h"
+#include "CGflmGroupItem.h"
+#include "CGflmFileSystemItem.h"
+#include "CGflmDriveItem.h"
+#include "CGflmGlobalActionItem.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::CFileManagerItemProperties
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerItemProperties::CFileManagerItemProperties(
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine ) :
+ iSize( KErrNotFound ),
+ iFilesContained( KErrNotFound ),
+ iFoldersContained( KErrNotFound ),
+ iOpenFiles( KErrNotFound ),
+ iUtils( aUtils ),
+ iEngine( aEngine )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerItemProperties* CFileManagerItemProperties::NewL(
+ const TDesC& aFullPath,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerItemProperties* self =
+ new (ELeave) CFileManagerItemProperties( aUtils, aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL( aFullPath );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerItemProperties* CFileManagerItemProperties::NewL(
+ const CGflmGroupItem& aItem,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerItemProperties* self =
+ new (ELeave) CFileManagerItemProperties( aUtils, aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL( aItem );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerItemProperties::ConstructL( const TDesC& aFullPath )
+ {
+ iFullPath = aFullPath.AllocL();
+
+ // Setup the rest of entry data when needed first time
+ if ( CFileManagerUtils::HasFinalBackslash( aFullPath ) )
+ {
+ iState |= EItemDirectory;
+ }
+ else
+ {
+ iState |= EItemFile;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerItemProperties::ConstructL(
+ const TDesC& aFullPath, const TEntry& aEntry )
+ {
+ iFullPath = aFullPath.AllocL();
+
+ // Setup all entry data now
+ SetEntryData( aEntry );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerItemProperties::ConstructL( const CGflmGroupItem& aItem )
+ {
+ switch ( aItem.Type() )
+ {
+ case CGflmGroupItem::EFile:
+ case CGflmGroupItem::EDirectory:
+ {
+ const CGflmFileSystemItem& fsItem =
+ static_cast< const CGflmFileSystemItem& >( aItem );
+ HBufC* fullPath = fsItem.FullPathLC();
+ ConstructL( *fullPath, fsItem.Entry() );
+ if ( iUtils.IsRemoteDrive( *fullPath ) )
+ {
+ iState |= EItemRemoteDrive;
+ }
+ CleanupStack::PopAndDestroy( fullPath );
+ break;
+ }
+ case CGflmGroupItem::EDrive:
+ {
+ const CGflmDriveItem& drvItem =
+ static_cast< const CGflmDriveItem& >( aItem );
+ iFullPath = drvItem.RootDirectory().AllocL();
+#ifdef RD_MULTIPLE_DRIVE
+ iName = iUtils.GetDriveNameL(
+ drvItem.Drive(),
+ CFileManagerUtils::EMainLayout );
+#else // RD_MULTIPLE_DRIVE
+ iName = drvItem.Name().AllocL();
+#endif // RD_MULTIPLE_DRIVE
+ iState |= EItemDrive;
+ if ( iUtils.IsRemoteDrive( *iFullPath ) )
+ {
+ iState |= EItemRemoteDrive;
+ }
+ break;
+ }
+ case CGflmGroupItem::EGlobalActionItem:
+ {
+ const CGflmGlobalActionItem& actItem =
+ static_cast< const CGflmGlobalActionItem& >( aItem );
+ if ( actItem.Id() == EFileManagerBackupAction )
+ {
+ // Ignore error
+ iEngine.LatestBackupTime( iModified );
+ }
+ iName = aItem.Name().AllocL();
+ // Action items do not have entry data, so mark it as fetched
+ iState |= EItemAction | EItemEntryDataFetched;
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrNotFound );
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::~CFileManagerItemProperties
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerItemProperties::~CFileManagerItemProperties()
+ {
+ delete iFullPath;
+ delete iActiveSize;
+ delete iActiveCount;
+ delete iName;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::Name() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::Name() const
+ {
+ if ( iState & EItemNotFileOrDir )
+ {
+ return iName->Des();
+ }
+ TParsePtrC parse( CFileManagerUtils::StripFinalBackslash( *iFullPath ) );
+ return parse.Name();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::ModifiedDate() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TTime CFileManagerItemProperties::ModifiedDate() const
+ {
+ EnsureEntryDataFetched();
+ return iModified;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::SizeL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt64 CFileManagerItemProperties::SizeL()
+ {
+ if ( iState & EItemNotFileOrDir )
+ {
+ return 0;
+ }
+ if( iSize == KErrNotFound )
+ {
+ if ( iState & EItemFile )
+ {
+ EnsureEntryDataFetched();
+ }
+ else
+ {
+ iSize = FolderSizeL( *iFullPath );
+ }
+ }
+ return iSize;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::FilesContainedL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerItemProperties::FilesContainedL()
+ {
+ if( iFilesContained == KErrNotFound )
+ {
+ CountItemsL( CFileManagerItemProperties::EFile );
+ }
+ return iFilesContained;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::FoldersContainedL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerItemProperties::FoldersContainedL()
+ {
+ if( iFoldersContained == KErrNotFound )
+ {
+ CountItemsL( CFileManagerItemProperties::EFolder );
+ }
+ return iFoldersContained;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::OpenFilesL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerItemProperties::OpenFilesL()
+ {
+ if( iOpenFiles == KErrNotFound )
+ {
+ CountItemsL( CFileManagerItemProperties::EOpen );
+ }
+ return iOpenFiles;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::TypeL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CFileManagerItemProperties::TypeL()
+ {
+ if( iType == CFileManagerItemProperties::ENotDefined )
+ {
+ iType = iUtils.FileTypeL( *iFullPath );
+ }
+ return iType;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::Ext() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::Ext() const
+ {
+ if ( iState & EItemNotFileOrDir )
+ {
+ return TPtrC( KNullDesC );
+ }
+ TParsePtrC parse( *iFullPath );
+ TPtrC ext( parse.Ext() );
+ return ext;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::CountItemsL
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerItemProperties::CountItemsL(
+ const TFileManagerFileType& aType )
+ {
+ if ( !( iState & ( EItemDirectory | EItemDrive ) ) )
+ {
+ // It's not a folder
+ return KErrNotFound;
+ }
+
+ delete iActiveCount;
+ iActiveCount = NULL;
+
+ iActiveCount = CFileManagerActiveCount::NewL(
+ iEngine.Fs(), *iFullPath, aType );
+
+ if ( !iActiveCount->IsProcessDone() )
+ {
+ iEngine.ShowWaitDialogL( *iActiveCount );
+ }
+
+ if ( iFilesContained == KErrNotFound )
+ {
+ iFilesContained = iActiveCount->FileCount();
+ }
+
+ if ( iFoldersContained == KErrNotFound )
+ {
+ iFoldersContained = iActiveCount->FolderCount();
+ }
+
+ if ( iOpenFiles == KErrNotFound )
+ {
+ iOpenFiles = iActiveCount->OpenFiles();
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::FolderSizeL
+// -----------------------------------------------------------------------------
+//
+TInt64 CFileManagerItemProperties::FolderSizeL( const TDesC& aFullPath )
+ {
+ if ( !( iState & EItemDirectory ) )
+ {
+ // It's not a folder
+ return KErrNotFound;
+ }
+
+ delete iActiveSize;
+ iActiveSize = NULL;
+ iActiveSize = CFileManagerActiveSize::NewL( iEngine.Fs(), aFullPath );
+ iEngine.ShowWaitDialogL( *iActiveSize );
+ return iActiveSize->GetFolderSize();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::FullPath() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::FullPath() const
+ {
+ if ( iFullPath )
+ {
+ return iFullPath->Des();
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::NameAndExt() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::NameAndExt() const
+ {
+ if ( iState & EItemNotFileOrDir )
+ {
+ return iName->Des();
+ }
+ TParsePtrC parse( CFileManagerUtils::StripFinalBackslash( *iFullPath ) );
+ return parse.NameAndExt();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::LocalizedName() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::LocalizedName() const
+ {
+ if (iState & EItemDirectory )
+ {
+ TPtrC ptr( iUtils.LocalizedName( *iFullPath ) );
+ if ( ptr.Length() )
+ {
+ return ptr;
+ }
+ }
+ return NameAndExt();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::ModifiedLocalDate() const
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerItemProperties::ModifiedLocalDate(
+ TTime& aTime ) const
+ {
+ aTime = ModifiedDate(); // convert from universal time
+ RTz tz;
+ TInt err( tz.Connect() );
+ if ( err == KErrNone )
+ {
+ err = tz.ConvertToLocalTime( aTime );
+ if ( err != KErrNone )
+ {
+ aTime = ModifiedDate(); // use universal time
+ }
+ tz.Close();
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::ContainsAnyFilesOrFolders()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerItemProperties::ContainsAnyFilesOrFolders()
+ {
+ if ( !( iState & EItemDirectory ) ||
+ ( iState & EItemHasNoFilesOrFolders ) )
+ {
+ return EFalse;
+ }
+ if ( iState & EItemHasFilesOrFolders )
+ {
+ return ETrue;
+ }
+ TBool ret( CFileManagerUtils::HasAny(
+ iEngine.Fs(),
+ *iFullPath,
+ KEntryAttNormal | KEntryAttDir | KEntryAttHidden | KEntryAttSystem ) );
+ if ( ret )
+ {
+ iState |= EItemHasFilesOrFolders;
+ }
+ else
+ {
+ iState |= EItemHasNoFilesOrFolders;
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::MimeTypeL()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::MimeTypeL()
+ {
+ if ( iState & EItemNotFileOrDir )
+ {
+ return TPtrC( KNullDesC );
+ }
+ return iUtils.MimeTypeL( *iFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::IsDrive()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerItemProperties::IsDrive() const
+ {
+ if ( iState & EItemDrive )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::DriveName()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerItemProperties::DriveName() const
+ {
+ if ( iState & EItemDrive )
+ {
+ return Name();
+ }
+ return iEngine.CurrentDriveName();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::IsRemoteDrive()
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerItemProperties::IsRemoteDrive() const
+ {
+ if ( iState & EItemRemoteDrive )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::EnsureEntryDataFetched
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerItemProperties::EnsureEntryDataFetched() const
+ {
+ if ( iState & EItemEntryDataFetched )
+ {
+ return;
+ }
+
+ iState |= EItemEntryDataFetched; // Do not try fetch more than once
+
+ TEntry entry;
+ if ( iEngine.Fs().Entry( *iFullPath, entry ) != KErrNone )
+ {
+ return;
+ }
+
+ SetEntryData( entry );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::SetEntryData
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerItemProperties::SetEntryData( const TEntry& aEntry ) const
+ {
+ iState |= EItemEntryDataFetched;
+
+ iModified = aEntry.iModified;
+
+ if ( aEntry.IsDir() )
+ {
+ iState |= EItemDirectory;
+ }
+ else
+ {
+ iState |= EItemFile;
+ iSize = (TUint) aEntry.iSize;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerItemProperties::DriveId
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerItemProperties::DriveId() const
+ {
+ TInt ret( KErrNotFound );
+ if ( iFullPath )
+ {
+ ret = TDriveUnit( *iFullPath );
+ }
+ return ret;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerPropertySubscriber.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006 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: Subscriber (Publish & Subscribe)
+*
+*/
+
+
+// INCLUDES
+#include "CFileManagerPropertySubscriber.h"
+#include "FileManagerDebug.h"
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::NewL()
+//
+// ----------------------------------------------------------------------------
+CFileManagerPropertySubscriber* CFileManagerPropertySubscriber::NewL(
+ MFileManagerPropertyObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey )
+ {
+ CFileManagerPropertySubscriber* self = new (ELeave)
+ CFileManagerPropertySubscriber(
+ aObserver, aCategory, aKey );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::ConstructL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerPropertySubscriber::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+ Subscribe();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::Subscribe()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerPropertySubscriber::Subscribe()
+ {
+ iProperty.Subscribe( iStatus );
+ SetActive();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::CFileManagerPropertySubscriber()
+//
+// ----------------------------------------------------------------------------
+CFileManagerPropertySubscriber::CFileManagerPropertySubscriber(
+ MFileManagerPropertyObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey ) :
+ CActive( EPriorityStandard ),
+ iObserver( aObserver ),
+ iCategory( aCategory),
+ iKey( aKey )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::RunL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerPropertySubscriber::RunL()
+ {
+ Subscribe();
+ iObserver.PropertyChangedL( iCategory, iKey );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::DoCancel()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerPropertySubscriber::DoCancel()
+ {
+ iProperty.Cancel();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::RunError()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerPropertySubscriber::RunError( TInt aError )
+ {
+ ERROR_LOG1( "CFileManagerPropertySubscriber::RunError()-error=%d", aError )
+ return aError;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerPropertySubscriber::~CFileManagerPropertySubscriber()
+//
+// ----------------------------------------------------------------------------
+CFileManagerPropertySubscriber::~CFileManagerPropertySubscriber()
+ {
+ Cancel();
+ iProperty.Close();
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerRefresher.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2002-2006 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: Asynchronous refresher for refreshing the CGflmNavigatorModel
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CFileManagerRefresher.h"
+#include "MFileManagerProcessObserver.h"
+#include "CGflmNavigatorModel.h"
+#include "FileManagerDebug.h"
+#include <e32std.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::CFileManagerRefresher
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerRefresher::CFileManagerRefresher( CGflmNavigatorModel& aModel ) :
+ CActive( CActive::EPriorityStandard ),
+ iModel( aModel )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRefresher::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerRefresher* CFileManagerRefresher::NewL( CGflmNavigatorModel& aModel )
+ {
+ CFileManagerRefresher* self =
+ new( ELeave ) CFileManagerRefresher( aModel );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::~CFileManagerRefresher()
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerRefresher::~CFileManagerRefresher()
+ {
+ Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::RunL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRefresher::RunL()
+ {
+ FUNC_LOG
+
+ TInt err( iStatus.Int() );
+
+ LOG_IF_ERROR1( err, "CFileManagerRefresher::RunL()-err=%d", err )
+
+ if( iObserver )
+ {
+ iObserver->RefreshStoppedL();
+ if ( err == KErrCancel )
+ {
+ // For going back to parent folder
+ iObserver->Error( KErrPathNotFound );
+ }
+ }
+
+ // Forward OOM, suppress other errors
+ if ( err == KErrNoMemory )
+ {
+ User::Leave( err );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerRefresher::RunError( TInt aError )
+ {
+ ERROR_LOG1( "CFileManagerRefresher::RunError()-err=%d", aError )
+ return aError;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRefresher::DoCancel()
+ {
+ FUNC_LOG
+
+ iModel.CancelRefresh();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerRefresher::Refresh
+// Initiates the model refreshing
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRefresher::Refresh( TGflmRefreshMode aRefreshMode )
+ {
+ FUNC_LOG
+
+ // If already active, return
+ if( IsActive() )
+ {
+ ERROR_LOG( "CFileManagerRefresher::Refresh()-Already active" )
+ return;
+ }
+
+ TInt err( KErrNone );
+ if ( iObserver )
+ {
+ TRAP( err, iObserver->RefreshStartedL() );
+ }
+
+ if ( err )
+ {
+ ERROR_LOG1( "CFileManagerRefresher::Refresh()-Before err=%d", err )
+ return;
+ }
+
+ // Try to start the refresh operation
+ TRAP( err, iModel.RefreshListL( iStatus, aRefreshMode ) );
+
+ // If refreshing couldn't be started, notify observer and return
+ if ( err )
+ {
+ ERROR_LOG1( "CFileManagerRefresher::Refresh()-After err=%d", err )
+ if( iObserver )
+ {
+ TRAP_IGNORE( iObserver->RefreshStoppedL() );
+ }
+ return;
+ }
+
+ // Refreshing was started, set active and wait for asynchronous
+ // request to complete
+ SetActive();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerRefresher::SetObserver
+// ------------------------------------------------------------------------------
+//
+void CFileManagerRefresher::SetObserver( MFileManagerProcessObserver* aObserver )
+ {
+ // Set the observer if not active
+ if( !IsActive() )
+ {
+ iObserver = aObserver;
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerRefresher::CancelRefresh
+// ------------------------------------------------------------------------------
+//
+TBool CFileManagerRefresher::CancelRefresh()
+ {
+ FUNC_LOG
+
+ TBool ret( IsActive() );
+ Cancel();
+ return ret;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerRemoteDriveHandler.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,252 @@
+/*
+* 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: Wraps remote drive functionality
+*
+*/
+
+
+
+// INCLUDES
+#include <rsfwmountman.h>
+#include "CFileManagerRemoteDriveHandler.h"
+#include "CGflmNavigatorModel.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerPropertySubscriber.h"
+#include "CFileManagerUtils.h"
+#include "FileManagerDebug.h"
+#include "CFileManagerFeatureManager.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::CFileManagerRemoteDriveHandler()
+// ---------------------------------------------------------------------------
+//
+CFileManagerRemoteDriveHandler::CFileManagerRemoteDriveHandler(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils ) :
+ iEngine( aEngine ),
+ iUtils( aUtils )
+ {
+ FUNC_LOG
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::NewL( const CFileManagerEngine& aEngine )
+// ---------------------------------------------------------------------------
+//
+CFileManagerRemoteDriveHandler* CFileManagerRemoteDriveHandler::NewL(
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils )
+ {
+ FUNC_LOG
+
+ CFileManagerRemoteDriveHandler* self =
+ new (ELeave) CFileManagerRemoteDriveHandler(
+ aEngine, aUtils );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::~CFileManagerRemoteDriveHandler()
+// ---------------------------------------------------------------------------
+//
+CFileManagerRemoteDriveHandler::~CFileManagerRemoteDriveHandler()
+ {
+ FUNC_LOG
+
+ delete iMountMan;
+ delete iSubscriber;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemoteDriveHandler::ConstructL()
+ {
+ FUNC_LOG
+
+ // Check and set value to indicate if the feature is supported
+ iRemoteStorageFwSupported =
+ iEngine.FeatureManager().IsRemoteStorageFwSupported();
+ if ( !iRemoteStorageFwSupported )
+ {
+ return;
+ }
+ iMountMan = CRsfwMountMan::NewL( 0, NULL );
+#ifdef FILE_MANAGER_MOUNT_REMOTE_DRIVES_ON_STARTUP
+ // Make sure that remote drives are mounted
+ _LIT( KMounterExe, "rsfwbootmounter.exe" );
+ RProcess mounter;
+ if ( mounter.Create( KMounterExe, KNullDesC ) == KErrNone )
+ {
+ mounter.Resume();
+ mounter.Close();
+ }
+#endif // FILE_MANAGER_MOUNT_REMOTE_DRIVES_ON_STARTUP
+ iSubscriber = CFileManagerPropertySubscriber::NewL(
+ *this, KRfeServerSecureUid, ERsfwPSKeyConnect );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::IsConnected()
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerRemoteDriveHandler::IsConnected( const TInt aDrive )
+ {
+ FUNC_LOG
+
+ if ( !iRemoteStorageFwSupported )
+ {
+ return EFalse;
+ }
+ TBool ret( EFalse );
+ TChar drv( 0 );
+ if ( RFs::DriveToChar( aDrive, drv ) == KErrNone )
+ {
+ TRsfwMountInfo info;
+ if ( iMountMan->GetMountInfo( drv, info ) == KErrNone )
+ {
+ ret = ( info.iMountStatus.iConnectionState ==
+ KMountStronglyConnected );
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::SetConnection()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerRemoteDriveHandler::SetConnection(
+ TInt aDrive, TBool aConnect )
+ {
+ FUNC_LOG
+
+ if ( !iRemoteStorageFwSupported )
+ {
+ return KErrNone;
+ }
+ TChar drv( 0 );
+ TInt err( RFs::DriveToChar( aDrive, drv ) );
+ if ( err != KErrNone )
+ {
+ return err;
+ }
+ err = iMountMan->SetMountConnectionStateBlind(
+ drv,
+ aConnect ? KMountStronglyConnected : KMountNotConnected );
+ if ( err == KErrCancel )
+ {
+ err = KErrPathNotFound;
+ }
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::DeleteSettings()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerRemoteDriveHandler::DeleteSettings(
+ const TInt aDrive )
+ {
+ FUNC_LOG
+
+ if ( !iRemoteStorageFwSupported )
+ {
+ return KErrNone;
+ }
+ TChar drv( 0 );
+ TInt err( RFs::DriveToChar( aDrive, drv ) );
+ if ( err != KErrNone )
+ {
+ return err;
+ }
+ TRAP( err, iMountMan->DeleteMountEntryL( drv ) );
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::PropertyChangedL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemoteDriveHandler::PropertyChangedL(
+ const TUid& /*aCategory*/, const TUint /*aKey*/ )
+ {
+ FUNC_LOG
+
+ iEngine.DriveAddedOrChangedL();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::RefreshDirectory()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerRemoteDriveHandler::RefreshDirectory(
+ const TDesC& aFullPath )
+ {
+ FUNC_LOG
+
+ if ( !iRemoteStorageFwSupported )
+ {
+ return KErrNone;
+ }
+ return iMountMan->RefreshDirectory( aFullPath );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::HasAppRemoteDriveSupport()
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerRemoteDriveHandler::HasAppRemoteDriveSupport(
+ TUid aUid )
+ {
+ FUNC_LOG
+
+ if ( !iRemoteStorageFwSupported )
+ {
+ return EFalse;
+ }
+ if ( aUid == KNullUid )
+ {
+ return ETrue;
+ }
+ return !iMountMan->IsAppOnBlackList( aUid );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemoteDriveHandler::CancelTransfer()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemoteDriveHandler::CancelTransfer(
+ const TDesC& aFullPath )
+ {
+ FUNC_LOG
+
+ if ( !iRemoteStorageFwSupported )
+ {
+ return;
+ }
+ INFO_LOG1(
+ "CFileManagerRemoteDriveHandler::CancelTransfer=%S",
+ &aFullPath )
+ iMountMan->CancelRemoteTransfer( aFullPath );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerRemovableDriveHandler.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1371 @@
+/*
+* Copyright (c) 2006-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: Wraps removable drive functionality
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <FileManagerEngine.rsg>
+#include "CFileManagerRemovableDriveHandler.h"
+#include "MFileManagerProcessObserver.h"
+#include "CFileManagerUtils.h"
+#include "CFileManagerEngine.h"
+#include <coreapplicationuisdomainpskeys.h>
+#include <coemain.h>
+#include <apgwgnam.h>
+#include <apgtask.h>
+#include <bautils.h>
+#include <tz.h>
+#include <babackup.h>
+#include <pathinfo.h>
+#include <sysutil.h>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+#include <e32property.h>
+#include <centralrepository.h>
+#include "CMMCScBkupEngine.h"
+#include "MMCScBkupOperations.h"
+#include "CMMCScBkupOperationParameters.h"
+#include "CFileManagerItemProperties.h"
+#include "CFileManagerBackupSettings.h"
+#include "FileManagerPrivateCRKeys.h"
+#include "BkupEngine.hrh"
+#include "FileManagerDebug.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "FileManagerUID.h"
+#include "filemanagerprivatepskeys.h"
+
+
+// CONSTANTS
+const TInt KEjectScanInterval = 1000000; // 1 second
+const TInt KEjectScanRoundsMax = 7;
+NONSHARABLE_CLASS(TMaskLookup)
+ {
+ public:
+ TUint32 iBkupMask;
+ TUint32 iFmgrMask;
+ };
+
+const TMaskLookup KMaskLookup[] = {
+ { EBUCatSettings, EFileManagerBackupContentSettings },
+ { EBUCatMessages, EFileManagerBackupContentMessages },
+ { EBUCatContacts, EFileManagerBackupContentContacts },
+ { EBUCatCalendar, EFileManagerBackupContentCalendar },
+ { EBUCatBookmarks, EFileManagerBackupContentBookmarks },
+ { EBUCatUserFiles, EFileManagerBackupContentUserFiles }
+};
+const TUint32 KMaskLookupLen =
+ sizeof( KMaskLookup ) / sizeof( KMaskLookup[ 0 ] );
+
+const TInt KForcedFormatTimeout = 1000000;
+const TInt KAppCloseTimeout = 1000000;
+const TInt KFileManagerAppUid = 0x101F84EB;
+
+NONSHARABLE_CLASS(TFileManagerVolumeNameStore)
+ {
+public:
+ inline TFileManagerVolumeNameStore() : iDrive( KErrNotFound ), iName( KNullDesC ) {};
+
+ TInt iDrive; // The drive using the store
+ TFileName iName; // Use the same length than TVolumeInfo
+ };
+
+typedef TPckg< TFileManagerVolumeNameStore > TFileManagerVolumeNameStorePckg;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::CFileManagerRemovableDriveHandler
+// ---------------------------------------------------------------------------
+//
+CFileManagerRemovableDriveHandler::CFileManagerRemovableDriveHandler(
+ RFs& aFs,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine ) :
+ CActive( CActive::EPriorityStandard ),
+ iFs( aFs ),
+ iUtils( aUtils ),
+ iEngine( aEngine )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ iBkupEngine = CMMCScBkupEngine::NewL( iFs );
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CFileManagerRemovableDriveHandler* CFileManagerRemovableDriveHandler::NewL(
+ RFs& aFs,
+ CFileManagerUtils& aUtils,
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerRemovableDriveHandler* self =
+ new( ELeave ) CFileManagerRemovableDriveHandler(
+ aFs, aUtils, aEngine );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::~CFileManagerRemovableDriveHandler
+// ---------------------------------------------------------------------------
+//
+CFileManagerRemovableDriveHandler::~CFileManagerRemovableDriveHandler()
+ {
+ Cancel();
+ delete iBSWrapper;
+ delete iEjectScanPeriodic;
+ delete iBkupEngine;
+ iFormatter.Close();
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::EjectScanAndShutdownApps
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerRemovableDriveHandler::EjectScanAndShutdownApps( TAny* ptr )
+ {
+ CFileManagerRemovableDriveHandler* self =
+ static_cast< CFileManagerRemovableDriveHandler* >( ptr );
+ TRAPD( err, self->DoEjectScanAndShutdownL() );
+ if ( err != KErrNone )
+ {
+ self->EjectComplete( err );
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::DoEjectScanAndShutdownL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::DoEjectScanAndShutdownL()
+ {
+ RWsSession wsSession;
+ User::LeaveIfError( wsSession.Connect() );
+ CleanupClosePushL( wsSession );
+
+ const TInt KDefaultWgIdArraySize = 4;
+ CArrayFixFlat<TInt>* wgIds = new( ELeave ) CArrayFixFlat< TInt >(
+ KDefaultWgIdArraySize );
+ CleanupStack::PushL( wgIds );
+ User::LeaveIfError( wsSession.WindowGroupList( 0, wgIds ) );
+ TInt last( wgIds->Count() - 1 );
+ TInt appsToShutDown( 0 );
+
+ for ( TInt i( last ); i >= 0; i-- )
+ {
+ CApaWindowGroupName* doomedApp =
+ CApaWindowGroupName::NewLC( wsSession, wgIds->At( i ) );
+ TBool systemApp( doomedApp->IsSystem() );
+ TBool hiddenApp( doomedApp->Hidden() );
+
+ if ( !systemApp && !hiddenApp && doomedApp->AppUid().iUid != KFileManagerAppUid )
+ {
+ appsToShutDown++;
+ TApaTask* task = new (ELeave) TApaTask( wsSession );
+ CleanupDeletePushL( task );
+ task->SetWgId( wgIds->At( i ) );
+
+ if ( !iEjectScanRounds )
+ {
+ // applications are kindly requested to close themselves
+ // on the first round
+ task->EndTask();
+ }
+ else if ( iEjectScanRounds >= KEjectScanRoundsMax )
+ {
+ task->KillTask();
+ }
+ CleanupStack::PopAndDestroy( task );
+ }
+ CleanupStack::PopAndDestroy( doomedApp );
+ }
+ CleanupStack::PopAndDestroy( wgIds );
+
+ if ( !appsToShutDown || iEjectScanRounds >= KEjectScanRoundsMax )
+ {
+ EjectComplete( KErrNone );
+ }
+ iEjectScanRounds++;
+
+ CleanupStack::PopAndDestroy( &wsSession );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::EjectComplete
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::EjectComplete( TInt aErr )
+ {
+ delete iEjectScanPeriodic;
+ iEjectScanPeriodic = NULL;
+ iLastError = aErr;
+
+ TRAP_IGNORE( InformFinishL() );
+
+ RProperty::Set(
+ KPSUidCoreApplicationUIs,
+ KCoreAppUIsMmcRemovedWithoutEject,
+ ECoreAppUIsEjectCommandNotUsed );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::InformStartL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::InformStartL( TInt aTotalCount )
+ {
+ iLastError = KErrNone;
+ if ( iObserver )
+ {
+ iObserver->ProcessStartedL( iProcess, aTotalCount );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::InformUpdateL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::InformUpdateL( TInt aCount )
+ {
+ if ( iObserver )
+ {
+ iObserver->ProcessAdvanceL( aCount );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::InformFinishL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::InformFinishL()
+ {
+ iEngine.ClearDriveInfo();
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ iProcess = MFileManagerProcessObserver::ENoProcess;
+ if ( iObserver )
+ {
+ iObserver->ProcessFinishedL( iLastError, KNullDesC );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::InformError
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::InformError( TInt aErr )
+ {
+ iLastError = aErr;
+ if ( iObserver )
+ {
+ iObserver->Error( aErr );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::HandleBkupEngineEventL
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerRemovableDriveHandler::HandleBkupEngineEventL(
+ MMMCScBkupEngineObserver::TEvent aEvent, TInt aAssociatedData )
+ {
+ TInt ret( KErrNone );
+ switch( aEvent )
+ {
+ case MMMCScBkupEngineObserver::ECommonOperationStarting:
+ {
+ iFinalValue = KMaxTInt;
+ InformStartL( KMaxTInt );
+ break;
+ }
+ case MMMCScBkupEngineObserver::ECommonSizeOfTaskUnderstood:
+ {
+ iFinalValue = aAssociatedData;
+ InformStartL( aAssociatedData );
+ break;
+ }
+ case MMMCScBkupEngineObserver::ECommonOperationPrepareEnded:
+ {
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ // In order to show finished dialog prior SysAp's note,
+ // inform observer already at prepare-ended state.
+ if( iProcess == MFileManagerProcessObserver::ERestoreProcess )
+ {
+ if ( iFinalValue )
+ {
+ InformUpdateL( iFinalValue );
+ }
+ InformFinishL();
+ }
+ break;
+ }
+ case MMMCScBkupEngineObserver::ECommonOperationEnded:
+ {
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ if( iProcess != MFileManagerProcessObserver::ERestoreProcess )
+ {
+ if ( iFinalValue )
+ {
+ InformUpdateL( iFinalValue );
+ }
+ InformFinishL();
+ }
+ break;
+ }
+ case MMMCScBkupEngineObserver::ECommonOperationError:
+ {
+ iLastError = aAssociatedData;
+ break;
+ }
+ case MMMCScBkupEngineObserver::ECommonProgress:
+ {
+ InformUpdateL( aAssociatedData );
+ break;
+ }
+ case MMMCScBkupEngineObserver::EBackupAnalysingData:
+ {
+ if ( iObserver &&
+ iProcess == MFileManagerProcessObserver::EBackupProcess )
+ {
+ ret = iObserver->NotifyL(
+ MFileManagerProcessObserver::ENotifyBackupMemoryLow,
+ aAssociatedData );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::SetObserver
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::SetObserver(
+ MFileManagerProcessObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::BackupFileNameLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CFileManagerRemovableDriveHandler::BackupFileNameLC(
+ TBool aFullPath ) const
+ {
+ HBufC* file = CCoeEnv::Static()->AllocReadResourceLC(
+ R_TEXT_MMC_BACKUP_FILE );
+ if ( !aFullPath )
+ {
+ return file; // Get just name
+ }
+ // Get full path
+#ifdef RD_MULTIPLE_DRIVE
+ TInt drive( 0 );
+ User::LeaveIfError( DriveInfo::GetDefaultDrive(
+ DriveInfo::EDefaultRemovableMassStorage, drive ) );
+ TDriveUnit driveUnit( drive );
+#else // RD_MULTIPLE_DRIVE
+ TDriveUnit driveUnit( PathInfo::MemoryCardRootPath() );
+#endif // RD_MULTIPLE_DRIVE
+ HBufC* fileAndPath = HBufC::NewLC( KMaxFileName );
+ TPtr ptr( fileAndPath->Des() );
+ TPtr filePtr( file->Des() );
+ ptr.Copy( driveUnit.Name() );
+ ptr.Append( filePtr );
+ CleanupStack::Pop( fileAndPath );
+ CleanupStack::PopAndDestroy( file );
+ CleanupStack::PushL( fileAndPath );
+ return fileAndPath;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::StartFormatL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StartFormatL(
+ const TInt aDrive )
+ {
+ TInt err( KErrNone );
+
+ iDrive = aDrive;
+ iProcess = MFileManagerProcessObserver::EFormatProcess;
+ iFinalValue = 0;
+
+ TRAP( err, InformStartL( 0 ) );
+ if ( err == KErrNone )
+ {
+ // Close apps and then start format
+ TRAP( err, CloseAppsL() );
+ }
+ if ( err != KErrNone )
+ {
+ EndFormatProcessL( err );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::StartEjectL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StartEjectL()
+ {
+ TRAPD( err, StartEjectScanL() );
+ if ( err != KErrNone )
+ {
+ iProcess = MFileManagerProcessObserver::ENoProcess;
+ User::Leave( err );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::StartEjectScanL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StartEjectScanL()
+ {
+ iProcess = MFileManagerProcessObserver::EEjectProcess;
+ InformStartL( 0 );
+
+ RProperty::Set(
+ KPSUidCoreApplicationUIs,
+ KCoreAppUIsMmcRemovedWithoutEject,
+ ECoreAppUIsEjectCommandUsed );
+
+ iEjectScanRounds = 0;
+ iEjectScanPeriodic = CPeriodic::NewL( CActive::EPriorityLow );
+ iEjectScanPeriodic->Start(
+ KEjectScanInterval,
+ KEjectScanInterval,
+ TCallBack( EjectScanAndShutdownApps, this ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::CancelProcess()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::CancelProcess()
+ {
+ switch( iProcess )
+ {
+ case MFileManagerProcessObserver::EFormatProcess:
+ {
+ Cancel();
+ break;
+ }
+ case MFileManagerProcessObserver::EBackupProcess: // FALLTHROUGH
+ case MFileManagerProcessObserver::ERestoreProcess:
+ case MFileManagerProcessObserver::ESchBackupProcess:
+ {
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ iBkupEngine->CancelOperation();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::BackupFileExistsL()
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerRemovableDriveHandler::BackupFileExistsL(
+ const TInt /*aDrive*/ )
+ {
+ HBufC* backupFile = BackupFileNameLC( ETrue );
+ TBool ret( iBkupEngine->ValidArchiveForRestore( *backupFile ) );
+ CleanupStack::PopAndDestroy( backupFile );
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::StartBackupL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StartBackupL(
+ MFileManagerProcessObserver::TFileManagerProcess aProcess )
+ {
+ if ( aProcess != MFileManagerProcessObserver::EBackupProcess &&
+ aProcess != MFileManagerProcessObserver::ESchBackupProcess )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ CCoeEnv* coeEnv = CCoeEnv::Static();
+
+ // Create backup params - ownership is transferred to
+ // secure backup engine
+ TResourceReader driveReader;
+ coeEnv->CreateResourceReaderLC(
+ driveReader,
+ R_FILEMANAGER_BACKUP_RESTORE_DRIVES_AND_OPERATIONS );
+ TResourceReader categoryReader;
+ coeEnv->CreateResourceReaderLC(
+ categoryReader,
+ R_FILEMANAGER_BACKUP_CATEGORIES );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+ TUint32 bkupContent( FmgrToBkupMask( settings.Content() ) );
+ TInt drive( settings.TargetDrive() );
+
+ CMMCScBkupOpParamsBackupFull* params =
+ CMMCScBkupOpParamsBackupFull::NewL(
+ driveReader,
+ categoryReader,
+ TDriveNumber( drive ),
+ bkupContent );
+
+#else // RD_FILE_MANAGER_BACKUP
+
+ HBufC* backupFile = BackupFileNameLC( ETrue );
+ TInt drive = TDriveUnit( *backupFile );
+ CleanupStack::PopAndDestroy( backupFile );
+
+ CMMCScBkupOpParamsBackupFull* params =
+ CMMCScBkupOpParamsBackupFull::NewL( driveReader,
+ categoryReader,
+ TDriveNumber( drive ),
+ EBUCatAllInOne );
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+ CleanupStack::PopAndDestroy(); // categoryReader
+ CleanupStack::PopAndDestroy(); // driveReader
+
+ CleanupStack::PushL( params );
+ TBool diskFull( SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, 0, drive ) );
+ CleanupStack::Pop( params );
+
+ if ( diskFull )
+ {
+ iProcess = aProcess;
+ TRAP_IGNORE( InformStartL( KMaxTInt ) );
+ iLastError = KErrDiskFull;
+ TRAP_IGNORE( InformFinishL() );
+ iProcess = MFileManagerProcessObserver::ENoProcess;
+ delete params;
+ }
+ else
+ {
+ // Start the process - engine owns the parameters immediately
+ iProcess = aProcess;
+
+ PublishBurStatus( EFileManagerBkupStatusBackup );
+ TRAPD( err, iBkupEngine->StartOperationL(
+ EMMCScBkupOperationTypeFullBackup, *this, params ) );
+ if ( err != KErrNone )
+ {
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ iProcess = MFileManagerProcessObserver::ENoProcess;
+ User::Leave( err );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::StartRestoreL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StartRestoreL()
+ {
+ TBool diskFull( SysUtil::DiskSpaceBelowCriticalLevelL(
+ &iFs, 0, KFmgrSystemDrive ) );
+ if ( diskFull )
+ {
+ iProcess = MFileManagerProcessObserver::ERestoreProcess;
+ TRAP_IGNORE( InformStartL( KMaxTInt ) );
+ iLastError = KErrDiskFull;
+ TRAP_IGNORE( InformFinishL() );
+ iProcess = MFileManagerProcessObserver::ENoProcess;
+ return;
+ }
+
+ CFileManagerBackupSettings& bkupSettings( iEngine.BackupSettingsL() );
+
+ // Create restore params - ownership is transferred to
+ // secure backup engine
+ TResourceReader driveReader;
+ CCoeEnv::Static()->CreateResourceReaderLC(
+ driveReader,
+ R_FILEMANAGER_BACKUP_RESTORE_DRIVES_AND_OPERATIONS );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+
+ CMMCScBkupOpParamsRestoreFull* params =
+ CMMCScBkupOpParamsRestoreFull::NewL(
+ driveReader,
+ EBUCatAllSeparately );
+ CleanupStack::PopAndDestroy(); // driveReader
+ CleanupStack::PushL( params );
+
+ // Get list of all archives
+ RPointerArray< CMMCScBkupArchiveInfo > archives;
+ TCleanupItem cleanupItem( ResetAndDestroyArchives, &archives );
+ CleanupStack::PushL( cleanupItem );
+ iBkupEngine->ListArchivesL(
+ archives,
+ params,
+ bkupSettings.AllowedDriveAttMatchMask() );
+
+ // Get user set restore selection
+ RArray< CFileManagerRestoreSettings::TInfo > selection;
+ CleanupClosePushL( selection );
+ CFileManagerRestoreSettings& rstSettings( iEngine.RestoreSettingsL() );
+ rstSettings.GetSelectionL( selection );
+
+ // Remove non user selected archives
+ TInt i( 0 );
+ while ( i < archives.Count() )
+ {
+ TBool remove( ETrue );
+
+ // Compare archives category and drive
+ CMMCScBkupArchiveInfo* archiveInfo = archives[ i ];
+ TUint32 fmgrContent(
+ BkupToFmgrMask( archiveInfo->Category().iFlags ) );
+ TInt drive( archiveInfo->Drive() );
+
+ TInt count( selection.Count() );
+ for( TInt j( 0 ); j < count; ++j )
+ {
+ const CFileManagerRestoreSettings::TInfo& info( selection[ j ] );
+ if ( ( drive == info.iDrive ) && ( fmgrContent & info.iContent ) )
+ {
+ // Found user selected archive
+ // Do not check this archive again
+ selection.Remove( j );
+ remove = EFalse;
+ break;
+ }
+ }
+ if ( remove )
+ {
+ // Remove non selected archive
+ archives.Remove( i );
+ delete archiveInfo;
+ }
+ else
+ {
+ // Move to next archive
+ ++i;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( &selection );
+ params->SetArchiveInfosL( archives );
+ CleanupStack::Pop( &archives );
+ archives.Close();
+ CleanupStack::Pop( params );
+
+#else // RD_FILE_MANAGER_BACKUP
+
+ CMMCScBkupOpParamsRestoreFull* params =
+ CMMCScBkupOpParamsRestoreFull::NewL( driveReader, EBUCatAllInOne );
+ CleanupStack::PopAndDestroy(); // driveReader
+
+ // Get list of all archives
+ RPointerArray< CMMCScBkupArchiveInfo > archives;
+ TCleanupItem cleanupItem( ResetAndDestroyArchives, &archives );
+ CleanupStack::PushL( cleanupItem );
+ iBkupEngine->ListArchivesL(
+ archives,
+ params,
+ bkupSettings.AllowedDriveAttMatchMask() );
+ params->SetArchiveInfosL( archives );
+ CleanupStack::Pop( &archives );
+
+#endif // RD_FILE_MANAGER_BACKUP
+
+ // Start the process - engine owns the parameters immediately
+ iProcess = MFileManagerProcessObserver::ERestoreProcess;
+ PublishBurStatus( EFileManagerBkupStatusRestore );
+ TRAPD( err, iBkupEngine->StartOperationL(
+ EMMCScBkupOperationTypeFullRestore, *this, params ) );
+ if ( err != KErrNone )
+ {
+ PublishBurStatus( EFileManagerBkupStatusUnset );
+ iProcess = MFileManagerProcessObserver::ENoProcess;
+ User::Leave( err );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::GetRestoreInfoArrayL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::GetRestoreInfoArrayL(
+ RArray< CFileManagerRestoreSettings::TInfo >& aArray,
+ const TInt aDrive )
+ {
+ CFileManagerBackupSettings& settings( iEngine.BackupSettingsL() );
+
+ aArray.Reset();
+
+ TResourceReader driveReader;
+ CCoeEnv::Static()->CreateResourceReaderLC(
+ driveReader,
+ R_FILEMANAGER_BACKUP_RESTORE_DRIVES_AND_OPERATIONS );
+
+ CMMCScBkupOpParamsRestoreFull* params =
+ CMMCScBkupOpParamsRestoreFull::NewL(
+ driveReader, EBUCatAllSeparately );
+ CleanupStack::PopAndDestroy(); // driveReader
+ CleanupStack::PushL( params );
+
+ // Get list of all archives
+ RPointerArray< CMMCScBkupArchiveInfo > archives;
+ TCleanupItem cleanupItem( ResetAndDestroyArchives, &archives );
+ CleanupStack::PushL( cleanupItem );
+ iBkupEngine->ListArchivesL(
+ archives,
+ params,
+ settings.AllowedDriveAttMatchMask(),
+ aDrive );
+
+ // Prepare time zone conversion
+ RTz tz;
+ User::LeaveIfError( tz.Connect() );
+ CleanupClosePushL( tz );
+
+ // Fill restore info
+ CFileManagerRestoreSettings::TInfo info;
+ TInt count( archives.Count() );
+ aArray.ReserveL( count );
+
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ // Content
+ CMMCScBkupArchiveInfo& archiveInfo( *archives[ i ] );
+ info.iContent = BkupToFmgrMask( archiveInfo.Category().iFlags );
+
+ // Local time
+ info.iTime = archiveInfo.DateTime();
+ User::LeaveIfError( tz.ConvertToLocalTime( info.iTime ) );
+
+ // Drive
+ info.iDrive = archiveInfo.Drive();
+
+ aArray.AppendL( info );
+ }
+
+ CleanupStack::PopAndDestroy( &tz );
+ CleanupStack::PopAndDestroy( &archives );
+ CleanupStack::PopAndDestroy( params );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::DoCancel()
+ {
+ switch( iProcess )
+ {
+ case MFileManagerProcessObserver::EFormatProcess:
+ {
+ TRAP_IGNORE( EndFormatProcessL( KErrCancel ) );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::RunL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::RunL()
+ {
+ TInt err( iStatus.Int() );
+ switch( iProcess )
+ {
+ case MFileManagerProcessObserver::EFormatProcess:
+ {
+ if( err != KErrNone )
+ {
+ if ( !iFinalValue && err == KErrInUse )
+ {
+ // Some app remained open, try still to start format
+ StartFormatProcessL();
+ }
+ else
+ {
+ // Format failed
+ EndFormatProcessL( err );
+ }
+ }
+ else if( !iFinalValue )
+ {
+ // Apps have been closed. Start format.
+ StartFormatProcessL();
+ }
+ else if( iFormatCountBuf() > 0 )
+ {
+ // Update observer and format next track
+ InformUpdateL( iFinalValue - iFormatCountBuf() );
+ iFormatter.Next( iFormatCountBuf, iStatus );
+ SetActive( );
+ }
+ else
+ {
+ // Format complete
+ EndFormatProcessL( KErrNone );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerRemovableDriveHandler::RunError( TInt aError )
+ {
+ switch( iProcess )
+ {
+ case MFileManagerProcessObserver::EFormatProcess:
+ {
+ TRAP_IGNORE( EndFormatProcessL( aError ) );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::EndFormatProcessL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::EndFormatProcessL( TInt aErr )
+ {
+ iFormatter.Close();
+ iLastError = aErr;
+ if( aErr == KErrNone )
+ {
+ // Restore the volume name stored before format operation.
+ TRAPD( err, RestoreVolumeNameL( iDrive ) );
+ LOG_IF_ERROR1( err,
+ "FileManagerRemovableDriveHandler::EndFormatProcessL-RestoreVolumeName %d",
+ err );
+ iUtils.CreateDefaultFolders( iDrive );
+ }
+ else if ( aErr != KErrCancel )
+ {
+ InformError( aErr );
+ }
+ TRAPD( err, RestartAppsL() );
+ LOG_IF_ERROR1( err,
+ "FileManagerRemovableDriveHandler::EndFormatProcessL-Restart apps %d",
+ err );
+ InformFinishL();
+
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::StartFormatProcessL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StartFormatProcessL()
+ {
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() 1 ");
+ // Store the current volume name over format operation.
+ TRAPD( err, StoreVolumeNameL( iDrive ) );
+ LOG_IF_ERROR1(
+ err,
+ "FileManagerRemovableDriveHandler::StartFormatProcessL-StoreVolumeName %d",
+ err );
+
+ TDriveName driveName( TDriveUnit( iDrive ).Name() );
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() 2");
+ // Resolve drive character and open formatter
+ iFormatter.Close();
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() 2.1");
+ err = iFormatter.Open(
+ iFs, driveName, EFullFormat, iFinalValue );
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() 2.2 RFormat::Open full err=%d", err);
+
+ // Forced format for locked card
+ if ( err == KErrLocked )
+ {
+ // Erase password and try again
+ err = iFs.ErasePassword( iDrive );
+ INFO_LOG1( "FileManagerRemovableDriveHandler::StartFormatProcessL-ErasePassword result=%d", err);
+
+ if (err == KErrNone)
+ {
+ err = iFormatter.Open(iFs, driveName, EFullFormat , iFinalValue );
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() RFormat::Open again err=%d", err);
+ }
+ }
+
+ if (err == KErrInUse)
+ {
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL KErrInUse try force format err=%d", err);
+
+ // There are still files open on the drive being formatted, prompt the user to
+ // ask if they want to format anyway.
+ //
+ // formatting.
+ //TBool reallyFormat = FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(_L("There are files open on this drive, continue with format?"));
+ TBool reallyFormat = ETrue; // TEMP! - should ask the user to confirm Yes / No
+
+ if (reallyFormat)
+ {
+ // Open the RFormat sub-session with force format flags
+ RDebug::Printf( "FileManagerRemovableDriveHandler::StartFormatProcessL-******force format*****");
+ err = iFormatter.Open(
+ iFs, driveName, EFullFormat | EForceFormat, iFinalValue );
+ RDebug::Printf( "FileManagerRemovableDriveHandler::StartFormatProcessL-******force format***** err = %d", err);
+ }
+ }
+
+ // By the time we get here, one of three things could have happened:
+ // 1. RFormat has been opened with standard full format flag with no error
+ // 2. Some other app still has files opened so full format cannot be used.
+ // A second attempt has been made to open the format sub-session with
+ // full format flags and this has succeeded.
+ // 3. As 2 but for some other reason (corrupt card perhaps?), force format
+ // does not work in which case abort format.
+
+
+ TFullName fsName;
+ if (err == KErrNone)
+ {
+ err = iFs.FileSystemName( fsName, iDrive );
+
+ RDebug::Printf( "FileManagerRemovableDriveHandler::StartFormatProcessL-fsName=%S, result=%d",
+ &fsName, err );
+
+ if ( err == KErrNone && fsName.Length() > 0 )
+ {
+ // Prevent SysAp shutting down applications
+ RProperty::Set(
+ KPSUidCoreApplicationUIs,
+ KCoreAppUIsMmcRemovedWithoutEject,
+ ECoreAppUIsEjectCommandUsed );
+ }
+ else
+ {
+ // Don't continue with format if there is no file system name
+ // or file system name could not be obtained.
+ err = KErrCancel;
+ }
+ }
+
+ // On successful open of RFormat::Open(), iFinalValue contains the number of
+ // tracks to be formatted
+
+ if ( iFinalValue && err == KErrNone )
+ {
+ TRAP( err, InformStartL( iFinalValue ) );
+ if ( err == KErrNone )
+ {
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() RFormat::Next err = %d, tracks left=%d", err, iFinalValue);
+ iFormatCountBuf = iFinalValue;
+ iFormatter.Next( iFormatCountBuf, iStatus );
+ SetActive();
+ }
+ }
+ if ( !iFinalValue || err != KErrNone )
+ {
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() 6 err = %d", err);
+ EndFormatProcessL( err );
+ RDebug::Printf(">> CFileManagerRemovableDriveHandler::StartFormatProcessL() 7 err = %d", err);
+ }
+ RDebug::Printf("<< CFileManagerRemovableDriveHandler::StartFormatProcessL() 8 err=%d", err);
+ }
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::CloseAppsL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::CloseAppsL()
+ {
+ delete iBSWrapper;
+ iBSWrapper = NULL;
+
+ iBSWrapper = CBaBackupSessionWrapper::NewL();
+
+ TBackupOperationAttributes atts(
+ MBackupObserver::EReleaseLockNoAccess,
+ MBackupOperationObserver::EStart );
+ iBSWrapper->NotifyBackupOperationL( atts );
+ iBSWrapper->CloseAll( MBackupObserver::EReleaseLockNoAccess, iStatus );
+ SetActive();
+
+ // Memory card formatting cannot be executed if there are open files on it.
+ // It has been detected, that in some cases memory card using applications
+ // have no time to close file handles before formatting is tried to be executed.
+ // To address this issue, we need to add a delay here after client-notification
+ // about pending format and real formatting procedure.
+ User::After( KAppCloseTimeout );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::RestartAppsL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::RestartAppsL()
+ {
+ if ( !iBSWrapper )
+ {
+ return;
+ }
+
+ TBackupOperationAttributes atts(
+ MBackupObserver::ETakeLock, MBackupOperationObserver::EEnd );
+ iBSWrapper->NotifyBackupOperationL( atts );
+ iBSWrapper->RestartAll();
+
+ // Get rid of the wrapper instance
+ delete iBSWrapper;
+ iBSWrapper = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::ResetAndDestroyArchives
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::ResetAndDestroyArchives( TAny* aPtr )
+ {
+ RPointerArray< CMMCScBkupArchiveInfo >* archive =
+ static_cast< RPointerArray< CMMCScBkupArchiveInfo >* >( aPtr );
+ archive->ResetAndDestroy();
+ archive->Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::BkupToFmgrMask
+// ---------------------------------------------------------------------------
+//
+TUint32 CFileManagerRemovableDriveHandler::BkupToFmgrMask(
+ const TUint32 aBkupMask )
+ {
+ TUint32 ret( 0 );
+
+ for( TInt i( 0 ); i < KMaskLookupLen; ++i )
+ {
+ if ( aBkupMask & KMaskLookup[ i ].iBkupMask )
+ {
+ ret |= KMaskLookup[ i ].iFmgrMask;
+ }
+ }
+ return ret;
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::FmgrToBkupMask
+// ---------------------------------------------------------------------------
+//
+TUint32 CFileManagerRemovableDriveHandler::FmgrToBkupMask(
+ const TUint32 aFmrgMask )
+ {
+ TUint32 ret( 0 );
+
+ for( TInt i( 0 ); i < KMaskLookupLen; ++i )
+ {
+ if ( ( aFmrgMask & EFileManagerBackupContentAll ) ||
+ ( aFmrgMask & KMaskLookup[ i ].iFmgrMask ) )
+ {
+ ret |= KMaskLookup[ i ].iBkupMask;
+ }
+ }
+ return ret;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::IsProcessOngoing
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerRemovableDriveHandler::IsProcessOngoing() const
+ {
+ return iProcess != MFileManagerProcessObserver::ENoProcess;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::PublishBurStatus()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::PublishBurStatus( TInt aType )
+ {
+ _LIT_SECURITY_POLICY_S0( KFileManagerBkupWritePolicy, KFileManagerUID3 );
+ _LIT_SECURITY_POLICY_PASS( KFileManagerBkupReadPolicy );
+
+ TInt err( RProperty::Set(
+ KPSUidFileManagerStatus, KFileManagerBkupStatus, aType ) );
+ if ( err != KErrNone )
+ {
+ err = RProperty::Define(
+ KPSUidFileManagerStatus, KFileManagerBkupStatus,
+ RProperty::EInt, KFileManagerBkupReadPolicy,
+ KFileManagerBkupWritePolicy );
+ if ( err == KErrNone || err == KErrAlreadyExists )
+ {
+ err = RProperty::Set(
+ KPSUidFileManagerStatus, KFileManagerBkupStatus, aType );
+ }
+ }
+ LOG_IF_ERROR1(
+ err, "FileManagerRemovableDriveHandler::PublishBurStatus-err=%d", err )
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::IsMassStorageDrive()
+//
+// -----------------------------------------------------------------------------
+//
+#ifdef RD_MULTIPLE_DRIVE
+
+TBool CFileManagerRemovableDriveHandler::IsInternalMassStorage( TInt aDrive )
+ {
+ FUNC_LOG;
+
+ TBool ret( EFalse );
+ TUint driveStatus( 0 );
+ DriveInfo::GetDriveStatus( iFs, aDrive, driveStatus );
+ if ( ( driveStatus & DriveInfo::EDriveInternal ) &&
+ ( driveStatus & DriveInfo::EDriveExternallyMountable ) )
+ {
+ ret = ETrue;
+ }
+ INFO_LOG2(
+ "FileManagerRemovableDriveHandler::IsInternalMassStorage-drive=%d,ret=%d",
+ aDrive, ret );
+ return ret;
+ }
+
+#else // RD_MULTIPLE_DRIVE
+
+TBool CFileManagerRemovableDriveHandler::IsInternalMassStorage( TInt /*aDrive*/ )
+ {
+ FUNC_LOG;
+
+ TInt ret( EFalse );
+ return ret;
+ }
+
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::StoreVolumeNameL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::StoreVolumeNameL( TInt aDrive )
+ {
+ FUNC_LOG;
+
+ if ( IsInternalMassStorage( aDrive ) )
+ {
+ TVolumeInfo volumeInfo;
+ User::LeaveIfError( iFs.Volume( volumeInfo, aDrive ) );
+ CRepository* cenRep = CRepository::NewLC( KCRUidFileManagerSettings );
+ TFileManagerVolumeNameStore volumeStore;
+ TFileManagerVolumeNameStorePckg volumeStorePckg( volumeStore );
+ volumeStore.iDrive = aDrive;
+ volumeStore.iName.Copy( volumeInfo.iName );
+ User::LeaveIfError( cenRep->Set(
+ KFileManagerStoredInternalMassStorageVolumeName, volumeStorePckg ) );
+ CleanupStack::PopAndDestroy( cenRep );
+ INFO_LOG2(
+ "FileManagerRemovableDriveHandler::StoreVolumeNameL-drive=%d,name=%S",
+ aDrive, &volumeStore.iName );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::RestoreVolumeNameL()
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::RestoreVolumeNameL( TInt aDrive )
+ {
+ FUNC_LOG;
+
+ if ( IsInternalMassStorage( aDrive ) )
+ {
+ TFileName volumeName;
+ CRepository* cenRep = CRepository::NewLC( KCRUidFileManagerSettings );
+ TFileManagerVolumeNameStore volumeStore;
+ TFileManagerVolumeNameStorePckg volumeStorePckg( volumeStore );
+ TInt err( cenRep->Get(
+ KFileManagerStoredInternalMassStorageVolumeName, volumeStorePckg ) );
+ if ( err == KErrNone && volumeStore.iDrive == aDrive )
+ {
+ volumeName.Copy( volumeStore.iName );
+ }
+ if ( !volumeName.Length() )
+ {
+ User::LeaveIfError( cenRep->Get(
+ KFileManagerDefaultInternalMassStorageVolumeName, volumeName ) );
+ }
+ if ( volumeName.Length() > 0 )
+ {
+ User::LeaveIfError( iFs.SetVolumeLabel( volumeName, aDrive ) );
+ }
+ CleanupStack::PopAndDestroy( cenRep );
+ INFO_LOG2(
+ "FileManagerRemovableDriveHandler::RestoreVolumeNameL-drive=%d,name=%S",
+ aDrive, &volumeName );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::ListArchivesL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::ListArchivesL(
+ RPointerArray< CMMCScBkupArchiveInfo >& aArchives,
+ const CFileManagerBackupSettings& aBackupSettings )
+ {
+ aArchives.ResetAndDestroy();
+ TResourceReader driveReader;
+ CCoeEnv::Static()->CreateResourceReaderLC(
+ driveReader,
+ R_FILEMANAGER_BACKUP_RESTORE_DRIVES_AND_OPERATIONS );
+ CMMCScBkupOpParamsRestoreFull* params =
+ CMMCScBkupOpParamsRestoreFull::NewL(
+ driveReader, EBUCatAllSeparately );
+ CleanupStack::PopAndDestroy(); // driveReader
+ CleanupStack::PushL( params );
+ iBkupEngine->ListArchivesL(
+ aArchives, params, aBackupSettings.AllowedDriveAttMatchMask() );
+ CleanupStack::PopAndDestroy( params );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::LatestBackupTimeL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::LatestBackupTimeL(
+ TTime& aBackupTime )
+ {
+ aBackupTime = 0;
+ CFileManagerBackupSettings& bkupSettings( iEngine.BackupSettingsL() );
+ RPointerArray< CMMCScBkupArchiveInfo > archives;
+ TCleanupItem cleanupItem( ResetAndDestroyArchives, &archives );
+ CleanupStack::PushL( cleanupItem );
+ ListArchivesL( archives, bkupSettings );
+
+ // Find the latest archive
+ TBool found( EFalse );
+ TInt count( archives.Count() );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ TTime time( archives[ i ]->DateTime() );
+ if ( time > aBackupTime )
+ {
+ aBackupTime = time;
+ found = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( &archives );
+ if ( !found )
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerRemovableDriveHandler::DeleteBackupsL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerRemovableDriveHandler::DeleteBackupsL()
+ {
+ CFileManagerBackupSettings& bkupSettings( iEngine.BackupSettingsL() );
+ RPointerArray< CMMCScBkupArchiveInfo > archives;
+ TCleanupItem cleanupItem( ResetAndDestroyArchives, &archives );
+ CleanupStack::PushL( cleanupItem );
+ ListArchivesL( archives, bkupSettings );
+
+ // Get the user set selection
+ RArray< CFileManagerRestoreSettings::TInfo > selection;
+ CleanupClosePushL( selection );
+ CFileManagerRestoreSettings& rstSettings( iEngine.RestoreSettingsL() );
+ rstSettings.GetSelectionL( selection );
+
+ // Delete selected archives
+ TInt archivesCount( archives.Count() );
+ for ( TInt i( 0 ); i < archivesCount; ++i )
+ {
+ CMMCScBkupArchiveInfo* archiveInfo = archives[ i ];
+ TUint32 fmgrContent(
+ BkupToFmgrMask( archiveInfo->Category().iFlags ) );
+ TInt drive( archiveInfo->Drive() );
+ TInt selectionCount( selection.Count() );
+ for( TInt j( 0 ); j < selectionCount; ++j )
+ {
+ const CFileManagerRestoreSettings::TInfo& info( selection[ j ] );
+ if ( ( drive == info.iDrive ) && ( fmgrContent & info.iContent ) )
+ {
+ TPtrC fullPath( archiveInfo->FileName() );
+ User::LeaveIfError(
+ CFileManagerUtils::RemoveReadOnlyAttribute(
+ iFs, fullPath ) );
+ User::LeaveIfError( iFs.Delete( fullPath ) );
+ selection.Remove( j ); // Do not check again
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( &selection );
+ CleanupStack::PopAndDestroy( &archives );
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerRestoreSettings.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2006 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: Empty restore settings to maintain library BC.
+* Remove this file when cleaning up RnD flags
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CFileManagerRestoreSettings.h"
+#include "CFilemanagerBackupSettings.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CFileManagerRestoreSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::CFileManagerRestoreSettings(
+ CFileManagerEngine& aEngine ) :
+ iEngine( aEngine )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::~CFileManagerRestoreSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::~CFileManagerRestoreSettings()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings* CFileManagerRestoreSettings::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerRestoreSettings* self =
+ new ( ELeave ) CFileManagerRestoreSettings(
+ aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreSettings::ConstructL()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::SetSelection
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerRestoreSettings::SetSelection(
+ const TUint64& /*aSelection*/ )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::RefreshL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerRestoreSettings::RefreshL()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::MdcaCount
+// ----------------------------------------------------------------------------
+//
+TInt CFileManagerRestoreSettings::MdcaCount() const
+ {
+ return 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::MdcaPoint
+// ----------------------------------------------------------------------------
+//
+TPtrC CFileManagerRestoreSettings::MdcaPoint( TInt /*aIndex*/ ) const
+ {
+ return TPtrC( KNullDesC );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::~CEntry
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::CEntry::~CEntry()
+ {
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerRestoreSettingsFull.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2006 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: Restore settings
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <FileManagerEngine.rsg>
+#include <AknUtils.h>
+#include "FileManagerEngine.hrh"
+#include "CFileManagerEngine.h"
+#include "CFileManagerRestoreSettings.h"
+#include "CFileManagerBackupSettings.h"
+#include "TFileManagerDriveInfo.h"
+#include "FileManagerPrivateCRKeys.h"
+#include "FileManagerDebug.h"
+
+
+// CONSTANTS
+_LIT( KDateFormat1, "%1" );
+_LIT( KDateFormat2, "%2" );
+_LIT( KDateFormat3, "%3" );
+_LIT( KTimeFormatBefore, " %-B %J:%T" );
+_LIT( KTimeFormatAfter, " %J:%T %+B" );
+_LIT( KEmptyChar, " " );
+const TUint KSecondSeparator = 1;
+const TUint KThirdSeparator = 2;
+const TInt KTimeStrMax = 20;
+_LIT( KSeparator, "\t" );
+const TInt KSeparatorSpace = 9;
+_LIT( KIconFormat, "%d" );
+const TInt KIconIdStrMax = 3;
+_LIT( KTimeSeparatorPlaceHolder, ":" );
+const TInt KHourMinSeparator = 1;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CFileManagerRestoreSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::CFileManagerRestoreSettings(
+ CFileManagerEngine& aEngine ) :
+ iEngine( aEngine )
+ {
+ FUNC_LOG
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::~CFileManagerRestoreSettings
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::~CFileManagerRestoreSettings()
+ {
+ FUNC_LOG
+
+ iList.ResetAndDestroy();
+ iList.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings* CFileManagerRestoreSettings::NewL(
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerRestoreSettings* self =
+ new ( ELeave ) CFileManagerRestoreSettings(
+ aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreSettings::ConstructL()
+ {
+ FUNC_LOG
+
+ RefreshL();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::SetSelection
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerRestoreSettings::SetSelection(
+ const TUint64& aSelection )
+ {
+ iSelection = aSelection;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::RefreshL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerRestoreSettings::RefreshL()
+ {
+ FUNC_LOG
+
+ iList.ResetAndDestroy();
+
+ RArray< TInfo > infoArray;
+ iEngine.GetRestoreInfoArrayL( infoArray );
+ CleanupClosePushL( infoArray );
+
+ TInt count( infoArray.Count() );
+ TUint32 mask( EFileManagerBackupContentFirst);
+ while ( mask <= EFileManagerBackupContentLast )
+ {
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ TInfo& info( infoArray[ i ] );
+ if ( info.iContent & mask )
+ {
+ CEntry* entry = CreateEntryLC( info );
+ iList.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+ }
+ mask <<= 1;
+ }
+ CleanupStack::PopAndDestroy( &infoArray );
+
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::MdcaCount
+// ----------------------------------------------------------------------------
+//
+TInt CFileManagerRestoreSettings::MdcaCount() const
+ {
+ return iList.Count();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::MdcaPoint
+// ----------------------------------------------------------------------------
+//
+TPtrC CFileManagerRestoreSettings::MdcaPoint( TInt aIndex ) const
+ {
+ return TPtrC( *( iList[ aIndex ]->iText ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::CreateEntryLC
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::CEntry*
+ CFileManagerRestoreSettings::CreateEntryLC(
+ const TInfo& aInfo )
+ {
+ TBuf< KIconIdStrMax > iconStr;
+ CEntry* entry = new ( ELeave ) CEntry;
+ CleanupStack::PushL( entry );
+
+ TInt titleId( CFileManagerBackupSettings::ContentToTextId( aInfo.iContent ) );
+ HBufC* title = StringLoader::LoadLC( titleId );
+ HBufC* timeAndDate = DateTimeStringLC( aInfo.iTime );
+ entry->iText = HBufC::NewL(
+ title->Length() + timeAndDate->Length() + KSeparatorSpace );
+
+ // "0\tFirstLabel\tSecondLabel\t0"
+ TPtr ptr( entry->iText->Des() );
+ iconStr.Copy( KIconFormat );
+ iconStr.Format( KIconFormat, EIconCheckBoxOff );
+ ptr.Append( iconStr );
+ ptr.Append( KSeparator );
+ ptr.Append( *title );
+ ptr.Append( KSeparator );
+ ptr.Append( *timeAndDate );
+ ptr.Append( KSeparator );
+
+ TUint32 drvState( 0 );
+ if ( iEngine.DriveState( drvState, aInfo.iDrive ) == KErrNone )
+ {
+ TInt icon( KErrNotFound );
+ if ( drvState & TFileManagerDriveInfo::EDriveUsbMemory )
+ {
+ icon = EIconUsbMemory;
+ }
+ else if ( drvState & TFileManagerDriveInfo::EDriveRemovable )
+ {
+ icon = EIconMemoryCard;
+ }
+ if ( icon >= 0 )
+ {
+ iconStr.Copy( KIconFormat );
+ iconStr.Format( KIconFormat, icon );
+ ptr.Append( iconStr );
+ }
+ }
+ entry->iInfo = aInfo;
+
+ CleanupStack::PopAndDestroy( timeAndDate );
+ CleanupStack::PopAndDestroy( title );
+ return entry;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::CEntry::~CEntry
+// ----------------------------------------------------------------------------
+//
+CFileManagerRestoreSettings::CEntry::~CEntry()
+ {
+ delete iText;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::GetSelectionL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerRestoreSettings::GetSelectionL(
+ RArray< TInfo >& aInfoArray ) const
+ {
+ aInfoArray.Reset();
+
+ TInt count( iList.Count() );
+
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ if ( ( ( ( TUint64 ) 1 ) << i ) & iSelection )
+ {
+ aInfoArray.AppendL( iList[ i ]->iInfo );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerRestoreSettings::DateTimeStringLC
+// ----------------------------------------------------------------------------
+//
+HBufC* CFileManagerRestoreSettings::DateTimeStringLC( const TTime& aTime )
+ {
+ TBuf< KTimeStrMax > dateStr;
+ TBuf< KTimeStrMax > dateStrFormat;
+
+ // Localized date separator form
+ TLocale local;
+ dateStrFormat.Append( KDateFormat1 );
+ dateStrFormat.Append( local.DateSeparator( KSecondSeparator ) );
+ dateStrFormat.Append( KDateFormat2 );
+ dateStrFormat.Append( local.DateSeparator( KThirdSeparator ) );
+ dateStrFormat.Append( KDateFormat3 );
+ aTime.FormatL( dateStr, dateStrFormat );
+
+ TBuf< KTimeStrMax > timeFormatStr;
+ if ( local.AmPmSymbolPosition() == ELocaleBefore )
+ {
+ timeFormatStr.Copy( KTimeFormatBefore );
+ }
+ else
+ {
+ timeFormatStr.Copy( KTimeFormatAfter );
+ }
+
+ TChar timeSeparator( local.TimeSeparator( KHourMinSeparator ) );
+ AknTextUtils::ReplaceCharacters(
+ timeFormatStr, KTimeSeparatorPlaceHolder, timeSeparator );
+ TBuf< KTimeStrMax > timeStr;
+ aTime.FormatL( timeStr, timeFormatStr );
+
+ HBufC* buf = HBufC::NewLC( dateStr.Length() +
+ KEmptyChar().Length() +
+ timeStr.Length() );
+ TPtr ptrBuffer( buf->Des() );
+ ptrBuffer.Append( timeStr );
+ ptrBuffer.Append( KEmptyChar );
+ ptrBuffer.Append( dateStr );
+
+ return buf;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerThreadWrapper.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,408 @@
+/*
+* 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: Background thread functionality wrapper
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CFileManagerThreadWrapper.h"
+#include "FileManagerDebug.h"
+
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CFileManagerThreadWrapper()
+//
+// ----------------------------------------------------------------------------
+CFileManagerThreadWrapper::CFileManagerThreadWrapper() :
+ CActive( CActive::EPriorityStandard )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::~CFileManagerThreadWrapper()
+//
+// ----------------------------------------------------------------------------
+CFileManagerThreadWrapper::~CFileManagerThreadWrapper()
+ {
+ Cancel();
+ delete iNotifyObserver;
+ iSemaphore.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::NewL()
+//
+// ----------------------------------------------------------------------------
+CFileManagerThreadWrapper* CFileManagerThreadWrapper::NewL()
+ {
+ CFileManagerThreadWrapper* self =
+ new (ELeave) CFileManagerThreadWrapper();
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::ConstructL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ User::LeaveIfError( iSemaphore.CreateLocal( 0 ) );
+ iNotifyObserver = CNotifyObserver::NewL( *this );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::RunL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::RunL()
+ {
+ iNotifyObserver->Cancel();
+
+ TInt err( iStatus.Int() );
+ LOG_IF_ERROR1( err, "CFileManagerThreadWrapper::RunL()-err=%d", err )
+
+ if ( iNotify & MFileManagerThreadFunction::ENotifyFinished )
+ {
+ TRAP_IGNORE( iFunction->NotifyThreadClientL(
+ MFileManagerThreadFunction::ENotifyFinished, err ) );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::DoNotifyL()
+//
+// ----------------------------------------------------------------------------
+
+void CFileManagerThreadWrapper::DoNotifyL( TInt aErr )
+ {
+ LOG_IF_ERROR1( aErr, "CFileManagerThreadWrapper::DoNotifyL()-aErr=%d", aErr )
+
+ iResumePending = ETrue;
+
+ if ( aErr != KErrNone &&
+ ( iNotify & MFileManagerThreadFunction::ENotifyError ) )
+ {
+ iFunction->NotifyThreadClientL(
+ MFileManagerThreadFunction::ENotifyError, aErr );
+ }
+ else if ( iNotify & MFileManagerThreadFunction::ENotifyStepFinished )
+ {
+ iFunction->NotifyThreadClientL(
+ MFileManagerThreadFunction::ENotifyStepFinished, aErr );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::RunError()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerThreadWrapper::RunError( TInt aErr )
+ {
+ if ( aErr != KErrNone )
+ {
+ ERROR_LOG1( "CFileManagerThreadWrapper::RunError()-err=%d", aErr )
+ iCancel = ETrue;
+ ResumeThread();
+ }
+ return aErr;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::DoCancel()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::DoCancel()
+ {
+ FUNC_LOG
+
+ CancelThread();
+ iSemaphore.Signal(); // To avoid deadlock
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::StartThread()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerThreadWrapper::StartThread(
+ MFileManagerThreadFunction& aFunction,
+ TUint aNotify,
+ TThreadPriority aPriority )
+ {
+ FUNC_LOG
+
+ TInt err( KErrAlreadyExists );
+
+ if ( !IsActive() )
+ {
+ RThread thread;
+ err = thread.Create(
+ KNullDesC, ThreadFunction, KDefaultStackSize, NULL, this );
+ if ( err == KErrNone )
+ {
+ thread.SetPriority( aPriority );
+ thread.Logon( iStatus );
+
+ iClientId = RThread().Id();
+ iFunction = &aFunction;
+ iNotify = aNotify;
+ iCancel = EFalse;
+
+ iNotifyObserver->Activate();
+ SetActive();
+
+ thread.Resume();
+ thread.Close();
+ }
+ }
+
+ LOG_IF_ERROR1( err, "CFileManagerThreadWrapper::StartThread()-err=%d",
+ err )
+
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::ThreadFunction()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerThreadWrapper::ThreadFunction( TAny* ptr )
+ {
+ FUNC_LOG
+
+ CFileManagerThreadWrapper* self =
+ static_cast< CFileManagerThreadWrapper* >( ptr );
+
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+ if ( !cleanupStack )
+ {
+ return KErrNoMemory;
+ }
+
+ TRAPD( err, self->ThreadFunctionL() );
+
+ self->iFunction->ReleaseThread();
+
+ delete cleanupStack;
+
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::ThreadFunctionL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::ThreadFunctionL()
+ {
+ FUNC_LOG
+
+ iFunction->InitThreadL();
+
+ while ( !iCancel )
+ {
+ TRAPD( err, iFunction->ThreadStepL() );
+
+ if ( !iCancel )
+ {
+ if ( err != KErrNone &&
+ ( iNotify & MFileManagerThreadFunction::ENotifyError ) )
+ {
+ User::LeaveIfError( NotifyClientAndWaitConfirm( err ) );
+ }
+ else if ( iNotify &
+ MFileManagerThreadFunction::ENotifyStepFinished )
+ {
+ User::LeaveIfError( NotifyClientAndWaitConfirm( err ) );
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+ }
+ if ( iFunction->IsThreadDone() )
+ {
+ break;
+ }
+ }
+
+ if ( iCancel )
+ {
+ User::LeaveIfError( KErrCancel );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CancelThread()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::CancelThread()
+ {
+ FUNC_LOG
+
+ iCancel = ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::IsThreadCanceled()
+//
+// ----------------------------------------------------------------------------
+TBool CFileManagerThreadWrapper::IsThreadCanceled() const
+ {
+ return iCancel;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::NotifyClientAndWaitConfirm()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerThreadWrapper::NotifyClientAndWaitConfirm( TInt aErr )
+ {
+ FUNC_LOG
+
+ RThread client;
+ TInt err( client.Open( iClientId ) );
+
+ if ( err == KErrNone )
+ {
+ iNotifyObserver->Complete( client, aErr );
+ client.Close();
+ iSemaphore.Wait(); // Wait resume from client
+ }
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::ResumeThread()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::ResumeThread()
+ {
+ FUNC_LOG
+
+ if ( !iNotifyObserver->IsActive() && iResumePending )
+ {
+ iResumePending = EFalse;
+ iNotifyObserver->Activate();
+ iSemaphore.Signal(); // Resume thread stepping
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::IsThreadStarted()
+//
+// ----------------------------------------------------------------------------
+TBool CFileManagerThreadWrapper::IsThreadStarted() const
+ {
+ return IsActive();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::CNotifyObserver()
+//
+// ----------------------------------------------------------------------------
+CFileManagerThreadWrapper::CNotifyObserver::CNotifyObserver(
+ CFileManagerThreadWrapper& aWrapper ) :
+ CActive( CActive::EPriorityStandard ),
+ iWrapper( aWrapper )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::NewL()
+//
+// ----------------------------------------------------------------------------
+CFileManagerThreadWrapper::CNotifyObserver*
+ CFileManagerThreadWrapper::CNotifyObserver::NewL(
+ CFileManagerThreadWrapper& aWrapper )
+ {
+ CNotifyObserver* self = new (ELeave) CNotifyObserver( aWrapper );
+ CActiveScheduler::Add( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::~CNotifyObserver()
+//
+// ----------------------------------------------------------------------------
+CFileManagerThreadWrapper::CNotifyObserver::~CNotifyObserver()
+ {
+ Cancel();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::RunL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::CNotifyObserver::RunL()
+ {
+ iWrapper.DoNotifyL( iStatus.Int() );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::RunError()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerThreadWrapper::CNotifyObserver::RunError( TInt aErr )
+ {
+ return iWrapper.RunError( aErr );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::DoCancel()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::CNotifyObserver::DoCancel()
+ {
+ // Just complete status immediately since
+ // background thread does not complete status anymore
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrCancel );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::Activate()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::CNotifyObserver::Activate()
+ {
+ if ( !IsActive() )
+ {
+ iStatus = KRequestPending;
+ SetActive();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerThreadWrapper::CNotifyObserver::Complete()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerThreadWrapper::CNotifyObserver::Complete(
+ RThread& aThread, TInt aResult )
+ {
+ if ( IsActive() )
+ {
+ TRequestStatus* status = &iStatus;
+ aThread.RequestComplete( status, aResult );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFileManagerUtils.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1121 @@
+/*
+* Copyright (c) 2002-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: Util methods for File Manager
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <AknUtils.h>
+#include <StringLoader.h>
+#include <CDirectoryLocalizer.h>
+#include <CommonContentPolicy.h>
+#include <bautils.h>
+#include <caf/caf.h>
+#include <DcfCommon.h>
+#include <FileManagerEngine.rsg>
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+#if defined( __KEEP_DRM_CONTENT_ON_PHONE ) && defined ( FILE_MANAGER_USE_DISTRIBUTABLECHECKER )
+ #include <distributablechecker.h>
+#endif // __KEEP_DRM_CONTENT_ON_PHONE && FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+#include "GflmUtils.h"
+#include <drmutility.h>
+#include "CFileManagerUtils.h"
+#include "CFilemanagerMimeIconArray.h"
+#include "Cfilemanagerfolderarray.h"
+#include "CGflmNavigatorModel.h"
+#include "CFileManagerItemProperties.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "CGflmGroupItem.h"
+#include "CGflmFileSystemItem.h"
+#include "CGflmDriveItem.h"
+#include "CFileManagerFeatureManager.h"
+
+// CONSTANTS
+_LIT( KFlk, "flk:" );
+_LIT( KLdf, "ldf:" );
+
+#ifdef RD_MULTIPLE_DRIVE
+const TInt KDriveNameArrayLen = 2;
+const TInt KDriveLetterIndex = 0;
+const TInt KDriveNameIndex = 1;
+enum TFmgrDriveNameType
+ {
+ EFmgrDeviceMemory = 0,
+ EFmgrMassStorage,
+ EFmgrNamedMemoryCard,
+ EFmgrDefaultMemoryCard,
+ EFmgrDefaultUsbMemory,
+ EFmgrDriveNameTypeCount // Must be the last
+ };
+
+typedef TInt TFmgrDriveNameLayoutText[ EFmgrDriveNameTypeCount ];
+const TFmgrDriveNameLayoutText KFmgrDriveNames[] =
+{
+ { // CFileManagerUtils::EMainLayout
+ R_QTN_FMGR_MAIN_DEVICE_MEMORY, // EFmgrDeviceMemory
+ R_QTN_FMGR_MAIN_MASS_STORAGE, // EFmgrMassStorage
+ R_QTN_FMGR_MAIN_NAMED_MEMORY_CARD, // EFmgrNamedMemoryCard
+ R_QTN_FMGR_MAIN_MEMORY_CARD_DEFAULT, // EFmgrDefaultMemoryCard
+ R_QTN_FMGR_MAIN_USB_DEFAULT // EFmgrDefaultUsbMemory
+ },
+ { // CFileManagerUtils::ETitleLayout
+ R_QTN_FMGR_TITLE_DEVICE_MEMORY, // EFmgrDeviceMemory
+ R_QTN_FMGR_TITLE_MASS_STORAGE, // EFmgrMassStorage
+ R_QTN_FMGR_TITLE_NAMED_MEMORY_CARD, // EFmgrNamedMemoryCard
+ R_QTN_FMGR_TITLE_MEMORY_CARD_DEFAULT, // EFmgrDefaultMemoryCard
+ R_QTN_FMGR_TITLE_USB_DEFAULT, // EFmgrDefaultUsbMemory
+ }
+};
+#endif // RD_MULTIPLE_DRIVE
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::CFileManagerUtils
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerUtils::CFileManagerUtils(
+ RFs& aFs,
+ CGflmNavigatorModel& aNavigator,
+ CFileManagerFeatureManager& aFeatureManager ) :
+ iFs( aFs ),
+ iNavigator( aNavigator ),
+ iFeatureManager( aFeatureManager )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerUtils::ConstructL()
+ {
+ // Check and set value to indicate if the feature is supported
+ iDrmFullSupported = iFeatureManager.IsDrmFullSupported();
+
+ iMimeIconMapper = CFileManagerMimeIconArray::NewL(
+ R_FILEMANAGER_MIME_ICON_MAPPER, iNavigator );
+
+#ifdef RD_MULTIPLE_DRIVE
+ iDefaultFolders = CFileManagerFolderArray::NewL( *this );
+#else // RD_MULTIPLE_DRIVE
+ iDefaultFolders = CFileManagerFolderArray::NewL(
+ R_FILEMANAGER_DEFAULT_FOLDERS, *this );
+ iDefaultFolders->CreateFolders();
+#endif // RD_MULTIPLE_DRIVE
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerUtils* CFileManagerUtils::NewL(
+ RFs& aFs,
+ CGflmNavigatorModel& aNavigator,
+ CFileManagerFeatureManager& aFeatureManager )
+ {
+ CFileManagerUtils* self =
+ new( ELeave ) CFileManagerUtils( aFs, aNavigator, aFeatureManager );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::~CFileManagerUtils
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerUtils::~CFileManagerUtils()
+ {
+#if defined( __KEEP_DRM_CONTENT_ON_PHONE ) && defined ( FILE_MANAGER_USE_DISTRIBUTABLECHECKER )
+ delete iDistributableChecker;
+#endif // __KEEP_DRM_CONTENT_ON_PHONE && FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+ delete iMimeIconMapper;
+ delete iDefaultFolders;
+ delete iCommonContentPolicy;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::Fs() const
+//
+// -----------------------------------------------------------------------------
+//
+RFs& CFileManagerUtils::Fs() const
+ {
+ return iFs;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsForwardLockedFile
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsForwardLockedFile( const TDesC& aFullPath )
+ {
+ if ( iDrmFullSupported )
+ {
+ return EFalse; // Full DRM is used
+ }
+ TBool ret( EFalse );
+
+ if ( !iCommonContentPolicy )
+ {
+ TRAPD( err, iCommonContentPolicy = CCommonContentPolicy::NewL() );
+ if ( err != KErrNone )
+ {
+ _LIT( KReason, "No Common Content Policy" );
+ User::Panic( KReason, err );
+ }
+ }
+
+ if( iCommonContentPolicy )
+ {
+ TRAPD( err, ret = iCommonContentPolicy->IsClosedFileL( aFullPath ) );
+ if ( err != KErrNone )
+ {
+ ret = EFalse;
+ }
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsDrmProtectedFile
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsDrmProtectedFile( const TDesC& aFullPath ) const
+ {
+ if ( !iDrmFullSupported )
+ {
+ return EFalse; // Partial DRM is used
+ }
+#if 0
+ // Check from file extension, this is the fastest possible check
+ _LIT( KOdfExt, ".odf" );
+ _LIT( KDcfExt, ".dcf" );
+ TParsePtrC parse( aFullPath );
+ TPtrC ext( parse.Ext() );
+ return ( !ext.CompareF( KOdfExt ) || !ext.CompareF( KDcfExt ) );
+#else
+ // Do similar quick check than in old DRMCommon
+
+ RFile64 drmFile;
+
+ User::LeaveIfError( drmFile.Open(
+ iFs, aFullPath, EFileRead | EFileShareReadersOrWriters ) );
+ CleanupClosePushL( drmFile );
+ DRM::CDrmUtility *drmCheck = DRM::CDrmUtility::NewLC();
+
+ TBool isProtected( EFalse );
+ if ( drmCheck->IsProtectedL(drmFile) )
+ {
+ isProtected = ETrue;
+ }
+ CleanupStack::PopAndDestroy(drmCheck);
+ CleanupStack::PopAndDestroy( &drmFile );
+ return isProtected;
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::ResolveIconL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerUtils::ResolveIconL( const TDesC& aFullPath ) const
+ {
+ TInt iconId( EFileManagerOtherFileIcon );
+ if ( HasFinalBackslash( aFullPath ) )
+ {
+ // Do not check for subfolders for remote drives
+ iconId = EFileManagerFolderIcon;
+ if ( !IsRemoteDrive( aFullPath ) )
+ {
+ if ( HasSubFolders( aFullPath ) )
+ {
+ iconId = EFileManagerFolderSubIcon;
+ }
+ else if ( !HasFiles( aFullPath ) )
+ {
+ iconId = EFileManagerFolderEmptyIcon;
+ }
+ }
+ }
+ else
+ {
+ iconId = iMimeIconMapper->ResolveIconL( aFullPath );
+ }
+ return iconId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::DefaultFolder
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::DefaultFolder( const TDesC& aFullPath ) const
+ {
+ return iDefaultFolders->Contains( aFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsDrmLocalDataFile
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsDrmLocalDataFile( const TDesC& aFullPath ) const
+ {
+ if ( !iDrmFullSupported )
+ {
+ return EFalse; // Partial DRM is used
+ }
+
+ TBool isFlk( EFalse );
+ TBool isLdf( EFalse );
+ TRAP_IGNORE( IsFlkOrLdfFileL( aFullPath, isFlk, isLdf ) );
+ return isLdf;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::CanDelete
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::CanDelete( const TDesC& aFileName ) const
+ {
+ TEntry entry;
+ TBool ret( EFalse );
+ TBool fileOpen( EFalse );
+ if ( KErrNone == iFs.Entry( aFileName, entry ) &&
+ KErrNone == iFs.IsFileOpen( aFileName, fileOpen ) )
+ {
+ if ( !entry.IsReadOnly() && !entry.IsSystem() && !fileOpen )
+ {
+ ret = ETrue;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::FileTypeL
+//
+// -----------------------------------------------------------------------------
+//
+TUint32 CFileManagerUtils::FileTypeL( const TDesC& aFullPath )
+ {
+ TUint32 fileType( CFileManagerItemProperties::ENotDefined );
+
+ _LIT( KRootFolder, "?:\\" );
+ if ( !aFullPath.MatchF( KRootFolder ) )
+ {
+ // RFs::Entry cannot be used for root folders
+ fileType |= CFileManagerItemProperties::EFolder;
+ }
+ else if ( !IsRemoteDrive( aFullPath ) )
+ {
+ // Full check for local and removable drives
+ TEntry entry;
+ User::LeaveIfError( iFs.Entry( aFullPath, entry ) );
+
+ if ( HasFinalBackslash( aFullPath ) || entry.IsDir() )
+ {
+ fileType |= CFileManagerItemProperties::EFolder;
+
+ if ( DefaultFolder( aFullPath ) )
+ {
+ fileType |= CFileManagerItemProperties::EDefault;
+ }
+ }
+ else
+ {
+ fileType |= CFileManagerItemProperties::EFile;
+
+ if ( IsDrmProtectedFile( aFullPath) )
+ {
+ fileType |= CFileManagerItemProperties::EDrmProtected;
+ if ( IsDrmLocalDataFile( aFullPath ) )
+ {
+ fileType |= CFileManagerItemProperties::EDrmLocalDataFile;
+ }
+ }
+ if ( IsForwardLockedFile( aFullPath ) )
+ {
+ fileType |= CFileManagerItemProperties::EForwardLocked;
+ }
+ // MimeIcon mapper knowledge is used to determine file type
+ TInt id( iMimeIconMapper->ResolveIconL( aFullPath ) );
+ if ( id == EFileManagerLinkFileIcon )
+ {
+ fileType |= CFileManagerItemProperties::ELink;
+ }
+ if ( id == EFileManagerPlaylistFileIcon )
+ {
+ fileType |= CFileManagerItemProperties::EPlaylist;
+ }
+
+ TBool fileOpen( EFalse );
+ if ( iFs.IsFileOpen( aFullPath, fileOpen ) == KErrNone )
+ {
+ if ( fileOpen )
+ {
+ fileType |= CFileManagerItemProperties::EOpen;
+ }
+ }
+ if ( fileOpen || entry.IsReadOnly() || entry.IsSystem() )
+ {
+ fileType |= CFileManagerItemProperties::EReadOnly;
+ }
+ }
+ }
+ else
+ {
+ // Simple check for remote drives
+ if ( HasFinalBackslash( aFullPath ) )
+ {
+ fileType |= CFileManagerItemProperties::EFolder;
+ }
+ else
+ {
+ fileType |= CFileManagerItemProperties::EFile;
+ if ( IsDrmProtectedFile( aFullPath) )
+ {
+ fileType |= CFileManagerItemProperties::EDrmProtected;
+ }
+ }
+ }
+
+ return fileType;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::ResolveIconL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerUtils::ResolveIconL( CGflmGroupItem& aItem ) const
+ {
+ TInt iconId( EFileManagerOtherFileIcon );
+ if ( aItem.GetIconId( iconId ) == KErrNone )
+ {
+ // Use already mapped icon
+ return iconId;
+ }
+
+ // Map icon
+ switch ( aItem.Type() )
+ {
+ case CGflmGroupItem::EFile:
+ {
+ CGflmFileSystemItem& fsItem =
+ static_cast< CGflmFileSystemItem& >( aItem );
+ HBufC* fullPath = fsItem.FullPathLC();
+ iconId = iMimeIconMapper->ResolveIconL( *fullPath );
+ fsItem.SetIconId( iconId );
+ CleanupStack::PopAndDestroy( fullPath );
+ break;
+ }
+ case CGflmGroupItem::EDirectory:
+ {
+ CGflmFileSystemItem& fsItem =
+ static_cast< CGflmFileSystemItem& >( aItem );
+ HBufC* fullPath = fsItem.FullPathLC();
+
+ // Do not check for subfolders for remote drives
+ iconId = EFileManagerFolderIcon;
+ if ( !IsRemoteDrive( *fullPath ) )
+ {
+ if ( HasSubFolders( *fullPath ) )
+ {
+ iconId = EFileManagerFolderSubIcon;
+ }
+ else if ( !HasFiles( *fullPath ) )
+ {
+ iconId = EFileManagerFolderEmptyIcon;
+ }
+ }
+ fsItem.SetIconId( iconId );
+ CleanupStack::PopAndDestroy( fullPath );
+ break;
+ }
+ case CGflmGroupItem::EDrive: // Fall through
+ case CGflmGroupItem::EGlobalActionItem:
+ {
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrNotFound );
+ break;
+ }
+ }
+
+ return iconId;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::HasAny
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::HasAny(
+ RFs& aFs, const TDesC& aFullPath, TUint aAttMask )
+ {
+ RDir dir;
+ TBool ret( EFalse );
+ if ( dir.Open( aFs, aFullPath, aAttMask ) != KErrNone )
+ {
+ return EFalse;
+ }
+ TEntry entry;
+ if ( dir.Read( entry ) == KErrNone )
+ {
+ ret = ETrue;
+ }
+ dir.Close();
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::HasSubFolders
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::HasSubFolders( const TDesC& aFullPath ) const
+ {
+ return HasAny( iFs, aFullPath, KEntryAttDir | KEntryAttMatchExclusive );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::HasFiles
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::HasFiles( const TDesC& aFullPath ) const
+ {
+ return HasAny( iFs, aFullPath, KEntryAttNormal );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsRemoteDrive
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsRemoteDrive( const TDesC& aPath ) const
+ {
+ TBool ret( EFalse );
+
+ if ( aPath.Length() )
+ {
+ CGflmDriveItem* drvItem = iNavigator.DriveFromPath( aPath );
+ if ( drvItem )
+ {
+ const TVolumeInfo& vol( drvItem->VolumeInfo() );
+ if ( vol.iDrive.iDriveAtt & KDriveAttRemote )
+ {
+ ret = ETrue;
+ }
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::CreateDefaultFolders
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerUtils::CreateDefaultFolders(
+ const TInt aDrive, const TBool aForced ) const
+ {
+ iDefaultFolders->CreateFolders( aDrive, aForced );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsDistributableFile
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerUtils::IsDistributableFile(
+ const TDesC& aFullPath, TBool& aIsProtected )
+ {
+#if defined( __KEEP_DRM_CONTENT_ON_PHONE ) && defined ( FILE_MANAGER_USE_DISTRIBUTABLECHECKER )
+ if ( !iDistributableChecker )
+ {
+ TRAPD( err, iDistributableChecker = CDistributableChecker::NewL() );
+ if ( err != KErrNone )
+ {
+ _LIT( KReason, "No Distributablechecker" );
+ User::Panic( KReason, err );
+ }
+ }
+ return iDistributableChecker->Check( aFullPath, aIsProtected );
+#else // __KEEP_DRM_CONTENT_ON_PHONE && FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+ aIsProtected = EFalse;
+ TBool isFlk( EFalse );
+ TBool isLdf( EFalse );
+ TRAPD( err, IsFlkOrLdfFileL( aFullPath, isFlk, isLdf ) );
+ // Do similar check than in old DRMCommon
+ aIsProtected = ( isFlk || isLdf );
+ return err;
+#endif // __KEEP_DRM_CONTENT_ON_PHONE && FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::MimeTypeL
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CFileManagerUtils::MimeTypeL( const TDesC& aFullPath ) const
+ {
+ return iNavigator.ResolveMimeTypeL( aFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::DriveList
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerUtils::DriveList(
+ RArray< TInt >& aDrives, const TInt aAttMask ) const
+ {
+ aDrives.Reset();
+ TDriveList drivesList;
+ if ( iFs.DriveList( drivesList ) != KErrNone )
+ {
+ return;
+ }
+ for ( TInt i( 0 ); i < KMaxDrives; i++ )
+ {
+ if ( drivesList[ i ] )
+ {
+ TBool append( EFalse );
+ TDriveInfo drvInfo;
+ if ( iFs.Drive( drvInfo, i ) == KErrNone )
+ {
+ if ( drvInfo.iDriveAtt & aAttMask )
+ {
+ append = ETrue;
+ }
+ }
+ if ( append )
+ {
+ aDrives.Append( i );
+ }
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsRemovableDrive
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsRemovableDrive( const TDesC& aPath ) const
+ {
+ return IsDrive( iFs, aPath, KDriveAttRemovable );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::GetFullPath
+// -----------------------------------------------------------------------------
+//
+void CFileManagerUtils::GetFullPath(
+ const TDesC& aDir, const TEntry& aEntry, TDes& aFullPath )
+ {
+ GflmUtils::GetFullPath( aDir, aEntry, aFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::StripFinalBackslash
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CFileManagerUtils::StripFinalBackslash( const TDesC& aPath )
+ {
+ return GflmUtils::StripFinalBackslash( aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::EnsureFinalBackslash
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerUtils::EnsureFinalBackslash( TDes& aPath )
+ {
+ GflmUtils::EnsureFinalBackslash( aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::StripDirectionalCharsLC
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerUtils::StripDirectionalCharsLC( const TDesC& aText )
+ {
+ HBufC* text = aText.AllocLC();
+ TPtr ptr( text->Des() );
+ AknTextUtils::StripCharacters( ptr, KFmgrDirectionalChars );
+ return text;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsFlkOrLdfFileL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerUtils::IsFlkOrLdfFileL(
+ const TDesC& aFullPath, TBool& aIsFlk, TBool& aIsLdf )
+ {
+ aIsFlk = EFalse;
+ aIsLdf = EFalse;
+ ContentAccess::CContent* content =
+ ContentAccess::CContent::CContent::NewLC(
+ aFullPath, EContentShareReadOnly );
+ HBufC* contentId = HBufC::NewLC( KMaxFileName );
+ TPtr ptrContentId( contentId->Des() );
+ TInt err( content->GetStringAttribute(
+ ContentAccess::EContentID, ptrContentId ) );
+ if ( err != KErrNone && err != KErrCANotSupported )
+ {
+ User::Leave( err );
+ }
+ if ( !ptrContentId.Left( KFlk().Length() ).Compare( KFlk ) )
+ {
+ aIsFlk = ETrue;
+ }
+ else if ( !ptrContentId.Left( KLdf().Length() ).Compare( KLdf ) )
+ {
+ aIsLdf = ETrue;
+ }
+ CleanupStack::PopAndDestroy( contentId );
+ CleanupStack::PopAndDestroy( content );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::HasFinalBackslash
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerUtils::HasFinalBackslash( const TDesC& aPath )
+ {
+ return GflmUtils::HasFinalBackslash( aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsInternalDrive
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsInternalDrive( RFs& aFs, const TInt aDrive )
+ {
+ return IsDrive( aFs, aDrive, KDriveAttInternal );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsFromInternalToRemovableDrive
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CFileManagerUtils::IsFromInternalToRemovableDrive(
+ RFs& aFs, const TDesC& aSrcPath, const TDesC& aDstPath )
+ {
+ TInt srcDrv = TDriveUnit( aSrcPath );
+ TInt dstDrv = TDriveUnit( aDstPath );
+ if ( srcDrv == dstDrv )
+ {
+ return EFalse;
+ }
+ return ( IsInternalDrive( aFs, srcDrv ) &&
+ !IsInternalDrive( aFs, dstDrv ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::RemoveReadOnlyAttribute
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerUtils::RemoveReadOnlyAttribute(
+ RFs& aFs, const TDesC& aFullPath, const TEntry& aEntry )
+ {
+ TInt ret( KErrNone );
+ if( aEntry.IsReadOnly() )
+ {
+ ret = aFs.SetEntry(
+ aFullPath, aEntry.iModified, 0, KEntryAttReadOnly );
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::RemoveReadOnlyAttribute
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerUtils::RemoveReadOnlyAttribute(
+ RFs& aFs, const TDesC& aFullPath )
+ {
+ TEntry entry;
+ TInt ret( aFs.Entry( aFullPath, entry ) );
+ if ( ret == KErrNone )
+ {
+ ret = RemoveReadOnlyAttribute( aFs, aFullPath, entry );
+ }
+ return ret;
+ }
+
+#ifdef RD_MULTIPLE_DRIVE
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::GetDriveNameArrayLC
+// -----------------------------------------------------------------------------
+//
+CDesCArray* CFileManagerUtils::GetDriveNameArrayLC(
+ const TInt aDrive, TUint& aDriveStatus ) const
+ {
+ CGflmDriveItem* drvItem = iNavigator.DriveFromId( aDrive );
+ if ( !drvItem )
+ {
+ User::Leave( KErrNotFound );
+ }
+ aDriveStatus = drvItem->DriveStatus();
+ CDesCArray* ret = new( ELeave ) CDesCArrayFlat( KDriveNameArrayLen );
+ CleanupStack::PushL( ret );
+ ret->AppendL( TDriveUnit( aDrive ).Name() );
+
+ if ( aDriveStatus & DriveInfo::EDriveInternal )
+ {
+ // Device memory and mass storage drives
+ return ret;
+ }
+ // Other drives
+ TPtrC drvName( drvItem->Name() );
+ if ( drvName.Length() )
+ {
+ ret->AppendL( drvName );
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::GetDriveNameL
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerUtils::GetDriveNameL(
+ const TInt aDrive, const TDriveNameLayout aLayout ) const
+ {
+ if ( aLayout < 0 || aLayout >= ELayoutCount )
+ {
+ User::Leave( KErrArgument );
+ }
+ TUint driveStatus( 0 );
+ CDesCArray* array = GetDriveNameArrayLC( aDrive, driveStatus );
+ HBufC* ret = NULL;
+ if ( driveStatus & DriveInfo::EDriveInternal )
+ {
+ // Device memory and mass storage drives
+ if ( driveStatus & DriveInfo::EDriveExternallyMountable )
+ {
+ ret = StringLoader::LoadL(
+ KFmgrDriveNames[ aLayout ][ EFmgrMassStorage ],
+ array->MdcaPoint( KDriveLetterIndex ) );
+ }
+ else
+ {
+ ret = StringLoader::LoadL(
+ KFmgrDriveNames[ aLayout ][ EFmgrDeviceMemory ],
+ array->MdcaPoint( KDriveLetterIndex ) );
+ }
+ }
+ else if ( driveStatus & DriveInfo::EDriveRemovable )
+ {
+ // Physically removable drives
+ if ( array->MdcaCount() > 1 )
+ {
+ ret = StringLoader::LoadL(
+ KFmgrDriveNames[ aLayout ][ EFmgrNamedMemoryCard ],
+ *array );
+ }
+ else
+ {
+ TInt driveType( EFmgrDefaultMemoryCard );
+ if ( driveStatus & DriveInfo::EDriveUsbMemory )
+ {
+ driveType = EFmgrDefaultUsbMemory;
+ }
+ ret = StringLoader::LoadL(
+ KFmgrDriveNames[ aLayout ][ driveType ],
+ array->MdcaPoint( KDriveLetterIndex ) );
+ }
+ }
+ else if ( array->MdcaCount() > 1 )
+ {
+ // Other drives
+ ret = array->MdcaPoint( KDriveNameIndex ).AllocL();
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ CleanupStack::PopAndDestroy( array );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::GetFormattedDriveNameLC
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerUtils::GetFormattedDriveNameLC(
+ const TInt aDrive,
+ const TInt aTextIdForDefaultName,
+ const TInt aTextIdForName ) const
+ {
+ TUint driveStatus( 0 );
+ HBufC* ret = NULL;
+ CDesCArray* array = GetDriveNameArrayLC( aDrive, driveStatus );
+ if ( aTextIdForName && array->MdcaCount() > 1 )
+ {
+ ret = StringLoader::LoadL(
+ aTextIdForName,
+ *array );
+ }
+ else if ( aTextIdForDefaultName )
+ {
+ if( driveStatus & DriveInfo::EDriveUsbMemory )
+ {
+ CDesCArray* usbLetterName = new ( ELeave ) CDesCArrayFlat( KDriveNameArrayLen );
+ CleanupStack::PushL( usbLetterName );
+
+ TPtrC16 driveletter=array->MdcaPoint( KDriveLetterIndex );
+ usbLetterName->AppendL( driveletter );
+
+ if(array->MdcaCount() > 1 )
+ {
+ TPtrC16 drivename=array->MdcaPoint( KDriveNameIndex );
+ usbLetterName->AppendL( drivename );
+ }
+ else
+ {
+ TPtrC16 drivename=_L("");
+ usbLetterName->AppendL( drivename );
+ }
+
+
+ ret = StringLoader::LoadL(
+ aTextIdForDefaultName,*usbLetterName );
+
+ CleanupStack::PopAndDestroy( usbLetterName );
+ }
+ else
+ {
+ ret = StringLoader::LoadL(aTextIdForDefaultName, array->MdcaPoint(
+ KDriveLetterIndex));
+ }
+ }
+ else if ( array->MdcaCount() > 1 )
+ {
+ ret = array->MdcaPoint( KDriveNameIndex ).AllocL();
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ CleanupStack::PopAndDestroy( array );
+ CleanupStack::PushL( ret );
+ return ret;
+ }
+
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsRemoteDrive
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CFileManagerUtils::IsRemoteDrive(
+ RFs& aFs, const TDesC& aPath )
+ {
+ return IsDrive( aFs, aPath, KDriveAttRemote );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsDrive
+// -----------------------------------------------------------------------------
+TBool CFileManagerUtils::IsDrive(
+ RFs& aFs, const TDesC& aPath, const TUint aAttMask )
+ {
+ TInt drv( 0 );
+ if ( aPath.Length() &&
+ RFs::CharToDrive( aPath[ 0 ], drv ) == KErrNone )
+ {
+ return IsDrive( aFs, drv, aAttMask );
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsDrive
+// -----------------------------------------------------------------------------
+TBool CFileManagerUtils::IsDrive(
+ RFs& aFs, const TInt aDrive, const TUint aAttMask )
+ {
+ TDriveInfo drvInfo;
+ if ( aFs.Drive( drvInfo, aDrive ) == KErrNone )
+ {
+ if ( drvInfo.iDriveAtt & aAttMask )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerUtils::LocalizedName
+//
+// ------------------------------------------------------------------------------
+//
+TPtrC CFileManagerUtils::LocalizedName( const TDesC& aFullPath ) const
+ {
+ return iNavigator.LocalizedName( aFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::IsNameFoundL
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerUtils::IsNameFoundL( const TDesC& aFullPath ) const
+ {
+ TParsePtrC parse( CFileManagerUtils::StripFinalBackslash( aFullPath ) );
+ TPtrC baseDir( parse.DriveAndPath() );
+ TPtrC currentDir( iNavigator.CurrentDirectory() );
+ TBool ret( EFalse );
+ HBufC* name1 = CFileManagerUtils::StripDirectionalCharsLC( parse.NameAndExt() );
+ // Remove white spaces from end, file server also ignores those
+ name1->Des().TrimRight();
+ if ( !parse.PathPresent() ||
+ ( currentDir.Length() && !currentDir.CompareF( baseDir ) ) )
+ {
+ TBool searchmode = iNavigator.SearchMode();
+ iNavigator.EnableSearchMode( EFalse );
+ // Do check from current directory, all items are cached
+ TInt count( iNavigator.MdcaCount() );
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ CGflmGroupItem* item = iNavigator.Item( i );
+ TInt itemType( item->Type() );
+ switch (itemType )
+ {
+ case CGflmGroupItem::EFile: // FALLTHROUGH
+ case CGflmGroupItem::EDirectory:
+ {
+ // Compare with file system name
+ CGflmFileSystemItem* fsItem =
+ static_cast< CGflmFileSystemItem* >( item );
+ HBufC* name2 = CFileManagerUtils::StripDirectionalCharsLC(
+ fsItem->Entry().iName );
+ ret = !( name1->CompareF( *name2 ) );
+ CleanupStack::PopAndDestroy( name2 );
+ if ( !ret && itemType == CGflmGroupItem::EDirectory )
+ {
+ // Compare with localized name
+ name2 = CFileManagerUtils::StripDirectionalCharsLC(
+ fsItem->Name() );
+ if ( name2->Length() )
+ {
+ ret = !( name1->CompareF( *name2 ) );
+ }
+ CleanupStack::PopAndDestroy( name2 );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ if ( ret )
+ {
+ break;
+ }
+ }
+ iNavigator.EnableSearchMode( searchmode );
+ }
+ else
+ {
+ // Do check from any directory
+ HBufC* buffer = HBufC::NewLC(
+ Max( KMaxFileName, aFullPath.Length() + KFmgrBackslashSpace ) );
+ TPtr ptr( buffer->Des() );
+ ptr.Copy( aFullPath );
+ CFileManagerUtils::EnsureFinalBackslash( ptr );
+ ret = ( BaflUtils::FolderExists( iFs, ptr ) ||
+ BaflUtils::FileExists( iFs,
+ CFileManagerUtils::StripFinalBackslash( aFullPath ) ) );
+ if ( !ret &&
+ !IsRemoteDrive( aFullPath ) &&
+ BaflUtils::PathExists( iFs, baseDir ) )
+ {
+ // Check directory for localized items on local drives
+ CDir* dir = NULL;
+ User::LeaveIfError( iFs.GetDir(
+ baseDir, KEntryAttMatchMask | KEntryAttNormal, ESortNone, dir ) );
+ CleanupStack::PushL( dir );
+ ptr.Zero();
+ TInt count( dir->Count() );
+ for ( TInt i ( 0 ); i < count; ++i )
+ {
+ HBufC* name2 = NULL;
+ const TEntry& entry( ( *dir )[ i ] );
+ if( entry.IsDir() )
+ {
+ // Compare with localized name
+ CFileManagerUtils::GetFullPath( baseDir, entry, ptr );
+ TPtrC ptr2( iNavigator.LocalizedName( ptr ) );
+ if ( ptr2.Length() )
+ {
+ name2 = CFileManagerUtils::StripDirectionalCharsLC( ptr2 );
+ }
+ }
+ if ( !name2 )
+ {
+ // Compare with file system name
+ name2 = CFileManagerUtils::StripDirectionalCharsLC( entry.iName );
+ }
+ ret = !( name1->CompareF( *name2 ) );
+ CleanupStack::PopAndDestroy( name2 );
+ if ( ret )
+ {
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy( dir );
+ }
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ CleanupStack::PopAndDestroy( name1 );
+ return ret;
+ }
+// -----------------------------------------------------------------------------
+// CFileManagerUtils::FlushCache
+// -----------------------------------------------------------------------------
+//
+void CFileManagerUtils::FlushCache() const
+ {
+ iNavigator.FlushCache();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CFilemanagerMimeIconArray.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2002-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: Maps the mime or file extension to icon
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <barsread.h>
+#include <AknUtils.h>
+#include <coemain.h>
+#include "CFilemanagerMimeIconArray.h"
+#include "CGflmNavigatorModel.h"
+#include "CDirectoryLocalizer.h"
+#include "CFileManagerCommonDefinitions.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerMimeIconArray* CFileManagerMimeIconArray::NewL(
+ TInt aResId, CGflmNavigatorModel& aNavigator )
+ {
+ CFileManagerMimeIconArray* self = new( ELeave )
+ CFileManagerMimeIconArray( aNavigator );
+
+ CleanupStack::PushL( self );
+ self->ConstructFromResourceL( aResId );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::CFileManagerMimeIconArray
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerMimeIconArray::CFileManagerMimeIconArray(
+ CGflmNavigatorModel& aNavigator )
+ : iNavigator( aNavigator )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::ConstructFromResourceL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerMimeIconArray::ConstructFromResourceL( TInt aResId )
+ {
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+
+ TInt count( reader.ReadInt16() );
+
+ iArray.ReserveL( count );
+
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ const TPtrC mime( reader.ReadTPtrC() );
+ const TInt iconId( reader.ReadInt16() );
+ CMimeIconEntry* entry = CMimeIconEntry::NewLC( mime, iconId );
+ iArray.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::~CFileManagerMimeIconArray
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerMimeIconArray::~CFileManagerMimeIconArray()
+ {
+ iArray.ResetAndDestroy();
+ iArray.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::ResolveIconL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerMimeIconArray::ResolveIconL( const TDesC& aFullPath )
+ {
+ TPtrC fileType( iNavigator.ResolveMimeTypeL( aFullPath ) );
+ TParsePtrC parse( aFullPath );
+ TPtrC fileExt( parse.Ext() );
+ TInt count( iArray.Count() );
+
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ CMimeIconEntry* entry = iArray[ i ];
+ TPtrC mime( entry->iMime->Des() );
+ if ( fileType.FindF( mime ) != KErrNotFound ||
+ fileExt.FindF( mime ) != KErrNotFound )
+ {
+ return entry->iIconId;
+ }
+ }
+ if ( fileType.Length() )
+ {
+ // File is recognized, but there is no own icon defined for this type.
+ // Use note icon to indicate the user that file is not unsupported.
+ return EFileManagerNoteFileIcon;
+ }
+ return EFileManagerOtherFileIcon;
+ }
+
+//-------------------------------------------------------------------------------
+// CFileManagerMimeIconArray::CMimeIconEntry::CMimeIconEntry
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerMimeIconArray::CMimeIconEntry::CMimeIconEntry(
+ const TInt aIconId ) :
+ iIconId( aIconId )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::CMimeIconEntry::~CMimeIconEntry
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerMimeIconArray::CMimeIconEntry::~CMimeIconEntry()
+ {
+ delete iMime;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::CMimeIconEntry::NewLC
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerMimeIconArray::CMimeIconEntry*
+ CFileManagerMimeIconArray::CMimeIconEntry::NewLC(
+ const TDesC& aMime, const TInt aIconId )
+ {
+ CMimeIconEntry* self = new( ELeave ) CMimeIconEntry( aIconId );
+ CleanupStack::PushL( self );
+ self->ConstructL( aMime );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerMimeIconArray::CMimeIconEntry::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerMimeIconArray::CMimeIconEntry::ConstructL(
+ const TDesC& aMime )
+ {
+ iMime = aMime.AllocL();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CfilemanagerActiveCount.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2002-2006 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: Calculates given folder size
+*
+*/
+
+
+// INCLUDE FILES
+#include "CFilemanagerActiveCount.h"
+
+// CONSTANTS
+const TInt KFileManagerProcessFilesPerCycle = 20;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::CFileManagerActiveCount
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveCount::CFileManagerActiveCount( RFs& aFs ) :
+ iFs( aFs ),
+ iFolders( KErrNotFound ),
+ iFiles( KErrNotFound),
+ iOpenFiles( KErrNotFound )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveCount* CFileManagerActiveCount::NewL(
+ RFs& aFs,
+ const TDesC& aRootFolder,
+ const CFileManagerItemProperties::TFileManagerFileType aType
+ )
+ {
+ CFileManagerActiveCount* self = new( ELeave ) CFileManagerActiveCount(
+ aFs );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRootFolder, aType );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveCount::ConstructL(
+ const TDesC& aRootFolder,
+ const CFileManagerItemProperties::TFileManagerFileType aType )
+ {
+
+ iDirScan = CDirScan::NewL( iFs );
+
+ if ( aType == CFileManagerItemProperties::EFolder )
+ {
+ // Set scanning from current directory, take only folders
+ // No sorting needed
+ iDirScan->SetScanDataL(
+ aRootFolder,
+ KEntryAttDir | KEntryAttMatchExclusive,
+ ESortNone );
+ }
+ else if ( aType == CFileManagerItemProperties::EFile ||
+ aType == CFileManagerItemProperties::EOpen ||
+ aType == CFileManagerItemProperties::EReadOnly )
+ {
+ // Set scanning from current directory, take only file
+ // No sorting needed
+ iDirScan->SetScanDataL(
+ aRootFolder,
+ KEntryAttNormal | KEntryAttHidden | KEntryAttSystem,
+ ESortNone );
+ }
+ else
+ {
+ // Set scanning from current directory,
+ // take file and folders except hidden and system files
+ // No sorting needed
+ iDirScan->SetScanDataL( aRootFolder, KEntryAttDir, ESortNone );
+ }
+
+ TRAPD( err, iDirScan->NextL( iDir ) );
+
+ if ( err == KErrNone && iDir )
+ {
+ if ( aType == CFileManagerItemProperties::EOpen ||
+ aType == CFileManagerItemProperties::EReadOnly )
+ {
+ iFiles = iDir->Count();
+ iOpenFiles = 0;
+ }
+ else if ( aType == CFileManagerItemProperties::EFolder )
+ {
+ iFolders = iDir->Count();
+ delete iDir;
+ iDir = NULL;
+ iProcessDone = ETrue;
+ }
+ else if ( aType == CFileManagerItemProperties::EFile )
+ {
+ iFiles = iDir->Count();
+ delete iDir;
+ iDir = NULL;
+ iProcessDone = ETrue;
+ }
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::~CFileManagerActiveCount
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveCount::~CFileManagerActiveCount()
+ {
+ delete iDirScan;
+ delete iDir;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::IsProcessDone
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveCount::IsProcessDone() const
+ {
+ return iProcessDone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::StepL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveCount::StepL()
+ {
+ if( !iDir )
+ {
+ iProcessDone = ETrue;
+ return;
+ }
+
+ TInt processCount( KFileManagerProcessFilesPerCycle );
+ while( iFileCounter < iDir->Count() && processCount )
+ {
+ const TEntry& entry( ( *iDir )[ iFileCounter ] );
+ iFileName.Copy( iDirScan->FullPath() );
+ iFileName.Append( entry.iName );
+ TBool fileIsOpen( EFalse );
+ if ( KErrNone == iFs.IsFileOpen( iFileName, fileIsOpen ) )
+ {
+ if ( fileIsOpen )
+ {
+ ++iOpenFiles;
+ }
+ }
+ ++iFileCounter;
+ --processCount;
+ }
+
+ if ( iFileCounter >= iDir->Count() )
+ {
+ delete iDir;
+ iDir = NULL;
+ iDirScan->NextL( iDir );
+ if ( !iDir )
+ {
+ iProcessDone = ETrue;
+ }
+ iFileCounter = 0;
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::FolderCount()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveCount::FolderCount() const
+ {
+ if ( iProcessDone )
+ {
+ return iFolders;
+ }
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::FileCount()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveCount::FileCount() const
+ {
+ if ( iProcessDone )
+ {
+ return iFiles;
+ }
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveCount::OpenFiles()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerActiveCount::OpenFiles() const
+ {
+ if ( iProcessDone )
+ {
+ return iOpenFiles;
+ }
+ return KErrNotFound;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/CfilemanageractiveDelete.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,467 @@
+/*
+* Copyright (c) 2002-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: Deletes files
+*
+*/
+
+
+// INCLUDE FILES
+#include "Cfilemanageractivedelete.h"
+#include "MFileManagerProcessObserver.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "CFileManagerUtils.h"
+#include "FileManagerDebug.h"
+//#include <cmgxfilemanager.h>
+
+// CONSTANTS
+const TInt KFileManagerDeletionPerStep = 20;
+const TInt64 KFileManagerMaxStepTime = 1000000; // 1s
+const TInt KFileManagerNotificationArrayGranularity = 64;
+
+
+// ============================ LOCAL FUNCTIONS ================================
+// -----------------------------------------------------------------------------
+// GetTimeStamp
+// -----------------------------------------------------------------------------
+//
+static TInt64 GetTimeStamp()
+ {
+ TTime time;
+ time.UniversalTime();
+ return time.Int64();
+ }
+
+// -----------------------------------------------------------------------------
+// IsTimedOut
+// -----------------------------------------------------------------------------
+//
+static TBool IsTimedOut( const TInt64& aStartTime )
+ {
+ TInt64 time( GetTimeStamp() );
+ TBool ret( time - aStartTime > KFileManagerMaxStepTime );
+ if ( ret )
+ {
+ INFO_LOG("CFileManagerActiveDelete-TimedOut");
+ }
+ return ret;
+ }
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::CFileManagerActiveDelete
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveDelete::CFileManagerActiveDelete(
+ RFs& aFs,
+ CArrayFixFlat< TInt >& aIndexList,
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils ) :
+ iFs( aFs ),
+ iIndexList( aIndexList ),
+ iError( KErrNone ),
+ iEngine( aEngine ),
+ iUtils( aUtils )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveDelete* CFileManagerActiveDelete::NewL(
+ CArrayFixFlat< TInt >& aIndexList,
+ CFileManagerEngine& aEngine,
+ CFileManagerUtils& aUtils )
+ {
+ CFileManagerActiveDelete* self = new( ELeave ) CFileManagerActiveDelete(
+ aEngine.Fs(), aIndexList, aEngine, aUtils );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::ConstructL()
+ {
+ iStringBuffer = HBufC::NewL( KMaxFileName );
+ //MG2 notification object
+ //iMgxFileManager = &iEngine.MGXFileManagerL();
+ iRemovedItems = new( ELeave ) CDesCArrayFlat(
+ KFileManagerNotificationArrayGranularity );
+ iIsRemoteDrive = iUtils.IsRemoteDrive( iEngine.CurrentDirectory() );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::~CFileManagerActiveDelete
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerActiveDelete::~CFileManagerActiveDelete()
+ {
+ delete iStringBuffer;
+ delete iFullPath;
+ delete iDirScan;
+ delete iDir;
+ delete iRemovedItems;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::IsProcessDone
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveDelete::IsProcessDone() const
+ {
+ return iProcessDone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerEngine::DeleteItemsInDirectoryL
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveDelete::DeleteItemsInDirectoryL()
+ {
+ if ( !iDirScan )
+ {
+ iDirScan = CDirScan::NewL( iFs );
+ // Set scanning from current directory, take all files
+ // No sorting needed
+ iDirScan->SetScanDataL( *iFullPath,
+ KEntryAttNormal | KEntryAttHidden | KEntryAttSystem,
+ ESortNone );
+ }
+
+ if ( iDir && iFileIndex < iDir->Count() )
+ {
+ // Delete file item
+ const TEntry& item = ( *iDir )[ iFileIndex ];
+ TPtr ptr( iStringBuffer->Des() );
+ CFileManagerUtils::GetFullPath(
+ iDirScan->FullPath(), item, ptr );
+ CFileManagerUtils::RemoveReadOnlyAttribute( iFs, ptr, item );
+ DeleteFileL( ptr, ETrue );
+ ++iFileIndex;
+ }
+ else
+ {
+ // Fetch next directory
+ delete iDir;
+ iDir = NULL;
+ iDirScan->NextL( iDir );
+ iFileIndex = 0;
+
+ if ( iDir )
+ {
+ CFileManagerUtils::RemoveReadOnlyAttribute(
+ iFs, iDirScan->FullPath() );
+ }
+ }
+
+ if ( !iDir )
+ {
+ // Items are deleted now, report done
+ if ( !iNotDeletedItems )
+ {
+ // Delete all directories
+ CFileMan* fileMan = CFileMan::NewL( iFs );
+ SetError( fileMan->RmDir( *iFullPath ), *iFullPath );
+ delete fileMan;
+ }
+ return ETrue;
+ }
+ return EFalse; // Still items left
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::StepL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::StepL()
+ {
+ FUNC_LOG
+
+ TInt64 startTime( GetTimeStamp() );
+ TInt indexCount( iIndexList.Count() );
+ TInt i( KFileManagerDeletionPerStep );
+ TBool timedOut( EFalse );
+
+ while ( iCurrentIndex < indexCount && i && !timedOut )
+ {
+ TBool isItemDone( EFalse );
+
+ // Fetch item path if missing
+ if ( !iFullPath )
+ {
+ iFullPath = iEngine.IndexToFullPathL(
+ iIndexList.At( iCurrentIndex ) );
+ if ( IsDir( *iFullPath ) )
+ {
+ // Ignore default folders
+ if ( iUtils.DefaultFolder( *iFullPath ) )
+ {
+ SetError( KErrFmgrDefaultFolder, *iFullPath );
+ isItemDone = ETrue;
+ }
+ }
+ }
+ // Delete item
+ if ( !isItemDone )
+ {
+ if ( IsDir( *iFullPath ) )
+ {
+ // Delete directory item
+ while ( iCurrentIndex < indexCount && i && !isItemDone && !timedOut )
+ {
+ isItemDone = DeleteItemsInDirectoryL();
+ --i;
+
+ // Adjust amount of deleted files per step by consumed time.
+ // This is an attempt to avoid long periods of time,
+ // where the UI does not respond to user activity.
+ timedOut = IsTimedOut( startTime );
+ }
+ }
+ else
+ {
+ // Delete file item
+ DeleteFileL( *iFullPath );
+ isItemDone = ETrue;
+ --i;
+
+ // Adjust amount of deleted files per step by consumed time.
+ // This is an attempt to avoid long periods of time,
+ // where the UI does not respond to user activity.
+ timedOut = IsTimedOut( startTime );
+ }
+ }
+
+ // Move to next item if done
+ if ( isItemDone )
+ {
+ delete iFullPath;
+ iFullPath = NULL;
+ ++iCurrentIndex;
+ }
+ }
+
+ if ( iCurrentIndex >= indexCount )
+ {
+ iProcessDone = ETrue;
+ FlushNotifications();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::DialogDismissedL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::DialogDismissedL( TInt aButtonId )
+ {
+ if ( aButtonId == EAknSoftkeyCancel )
+ {
+ FlushNotifications();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::GetError
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerActiveDelete::GetError( TDes& aFileName )
+ {
+ if( iFileName.Length() > 0)
+ {
+ aFileName.Zero();
+ aFileName.Append( iFileName );
+ }
+ if ( iOpenFiles > 1 )
+ {
+ iError = KErrFmgrSeveralFilesInUse;
+ }
+ return iError;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::DeletedDrmItems
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerActiveDelete::DeletedDrmItems(TInt& aTotalCount )
+ {
+ aTotalCount = iDeletedItems;
+ return iDeletedDrmItems;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::DeleteFileL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::DeleteFileL(
+ const TDesC& aFullPath, const TBool aReadOnlyChecked )
+ {
+#ifndef RD_DRM_RIGHTS_MANAGER_REMOVAL
+ TBool isLocalDataFile( EFalse );
+ TBool isDrmProtected( EFalse );
+ if ( !iIsRemoteDrive )
+ {
+ // Check DRM protection
+ isDrmProtected = iUtils.IsDrmProtectedFile( aFullPath );
+ if ( isDrmProtected )
+ {
+ isLocalDataFile = iUtils.IsDrmLocalDataFile( aFullPath );
+ }
+ }
+#endif // RD_DRM_RIGHTS_MANAGER_REMOVAL
+
+ TInt err( iFs.Delete( aFullPath ) );
+ if ( err == KErrAccessDenied && !aReadOnlyChecked )
+ {
+ // Remove readonly and retry
+ TEntry entry;
+ if( iFs.Entry( aFullPath, entry ) == KErrNone )
+ {
+ CFileManagerUtils::RemoveReadOnlyAttribute(
+ iFs, aFullPath, entry );
+ err = iFs.Delete( aFullPath );
+ }
+ }
+ if ( !IsError( err ) )
+ {
+ ++iDeletedItems;
+ // Notification is relevant only for local drives
+ if ( !iIsRemoteDrive )
+ {
+ TRAPD( err2, iRemovedItems->AppendL( aFullPath ) );
+ if ( err2 != KErrNone )
+ {
+ ERROR_LOG1(
+ "CFileManagerActiveExecute::DeleteFileL-NotificationAppend-err=%d",
+ err2 )
+ }
+ }
+#ifndef RD_DRM_RIGHTS_MANAGER_REMOVAL
+ // Inform deletion of DRM protected files except local data files
+ if( isDrmProtected && !isLocalDataFile )
+ {
+ ++iDeletedDrmItems;
+ SetName( aFullPath );
+ }
+#endif // RD_DRM_RIGHTS_MANAGER_REMOVAL
+ }
+ else
+ {
+ // Delete failed, update error info
+ SetError( err, aFullPath );
+ if ( err == KErrInUse )
+ {
+ ++iOpenFiles;
+ }
+ ++iNotDeletedItems;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::IsDir
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveDelete::IsDir( const TDesC& aFullPath )
+ {
+ return CFileManagerUtils::HasFinalBackslash( aFullPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::SetName
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::SetName( const TDesC& aFullPath,
+ TBool aOverWrite )
+ {
+ if ( !aOverWrite && iFileName.Length() )
+ {
+ return;
+ }
+ iFileName.Zero();
+ if ( aFullPath.Length() )
+ {
+ if ( IsDir( aFullPath ) )
+ {
+ TParsePtrC parse( aFullPath.Left( aFullPath.Length() - 1 ) );
+ iFileName.Append( parse.Name() );
+ }
+ else
+ {
+ TParsePtrC parse( aFullPath );
+ iFileName.Append( parse.NameAndExt() );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::IsError
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveDelete::IsError( TInt aErr )
+ {
+ return ( aErr != KErrNone &&
+ aErr != KErrCorrupt &&
+ aErr != KErrNotFound &&
+ aErr != KErrPathNotFound );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::SetError
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::SetError( TInt aErr, const TDesC& aFullPath )
+ {
+ if ( iError == KErrNone && IsError( aErr ) )
+ {
+ iError = aErr;
+ SetName( aFullPath, ETrue );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveDelete::FlushNotifications
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveDelete::FlushNotifications()
+ {
+ if ( iRemovedItems->MdcaCount() > 0 )
+ {
+ //TRAP_IGNORE( iMgxFileManager->UpdateL( *iRemovedItems ) );
+ iRemovedItems->Reset();
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/Cfilemanageractivesize.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2002-2006 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: Calculates given folder size
+*
+*/
+
+
+// INCLUDES
+#include "Cfilemanageractivesize.h"
+
+// CONSTANTS
+const TInt KFileManagerProcessFilesPerCycle = 20;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::CFileManagerActiveSize
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveSize::CFileManagerActiveSize( RFs& aFs ) :
+ iFs( aFs )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveSize* CFileManagerActiveSize::NewL(
+ RFs& aFs, const TDesC& aRootFolder )
+ {
+ CFileManagerActiveSize* self = new( ELeave ) CFileManagerActiveSize(
+ aFs );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRootFolder );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveSize::ConstructL( const TDesC& aRootFolder )
+ {
+ iDirScan = CDirScan::NewL( iFs );
+ // Set scanning from current directory,
+ // take files and folder including the hidden and system files
+ // No sorting needed
+ iDirScan->SetScanDataL(
+ aRootFolder,
+ KEntryAttNormal | KEntryAttHidden | KEntryAttSystem,
+ ESortNone );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::~CFileManagerActiveSize
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerActiveSize::~CFileManagerActiveSize()
+ {
+ delete iDirScan;
+ delete iDir;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::IsProcessDone
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerActiveSize::IsProcessDone() const
+ {
+ return iProcessDone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::StepL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerActiveSize::StepL()
+ {
+ if ( !iDir )
+ {
+ iDirScan->NextL( iDir );
+ if( !iDir )
+ {
+ iProcessDone = ETrue;
+ return;
+ }
+ }
+
+ TInt processCount( KFileManagerProcessFilesPerCycle );
+ while( iFileCounter < iDir->Count() && processCount )
+ {
+ const TEntry& item( ( *iDir )[ iFileCounter ] );
+ iSize += item.iSize;
+ ++iFileCounter;
+ --processCount;
+ }
+
+ if ( iFileCounter >= iDir->Count() )
+ {
+ delete iDir;
+ iDir = NULL;
+ iFileCounter = 0;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerActiveSize::GetFolderSize()
+//
+// -----------------------------------------------------------------------------
+//
+TInt64 CFileManagerActiveSize::GetFolderSize() const
+ {
+ if( iProcessDone )
+ {
+ return iSize;
+ }
+ return KErrNotFound;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/Cfilemanagerfilesystemevent.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2002-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: This AO is signaled when directory entry is added or removed
+* from file system
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include "Cfilemanagerfilesystemevent.h"
+#include "CFileManagerEngine.h"
+#include "FileManagerDebug.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::CFileManagerFileSystemEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CFileManagerFileSystemEvent::CFileManagerFileSystemEvent(
+ RFs& aFs,
+ CFileManagerEngine& aEngine,
+ TNotifyType aNotifyType ) :
+ CActive( CActive::EPriorityLow ),
+ iFs( aFs ),
+ iEngine( aEngine),
+ iNotifyType( aNotifyType )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileSystemEvent::ConstructL( const TDesC& aFullPath )
+ {
+ CActiveScheduler::Add( this );
+
+ if ( aFullPath.Length() )
+ {
+ iFullPath = aFullPath.AllocL();
+ }
+
+ Setup();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileSystemEvent* CFileManagerFileSystemEvent::NewL(
+ RFs& aFs,
+ CFileManagerEngine& aEngine,
+ TNotifyType aNotifyType,
+ const TDesC& aFullPath )
+ {
+ CFileManagerFileSystemEvent* self =
+ new( ELeave ) CFileManagerFileSystemEvent(
+ aFs,
+ aEngine,
+ aNotifyType );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aFullPath );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::~CFileManagerFileSystemEvent
+//
+// ------------------------------------------------------------------------------
+CFileManagerFileSystemEvent::~CFileManagerFileSystemEvent()
+ {
+ Cancel();
+ delete iFullPath;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::RunL
+// From CActive. Called when asynchronous request is completed.
+// Notifies the observer
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileSystemEvent::RunL()
+ {
+ TInt err( iStatus.Int() );
+
+ LOG_IF_ERROR1( err, "CFileManagerFileSystemEvent::RunL-err=%d", err )
+
+ // Mark as received if there is no error
+ if ( err == KErrNone )
+ {
+ iIsReceived = ETrue;
+ }
+
+ // If not ENotifyDisk, do refresh when event is checked
+ // using CheckFileSystemEvent
+ if ( iNotifyType == ENotifyDisk )
+ {
+ iEngine.DriveAddedOrChangedL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::RunError
+// From CActive. Called when error occurred in asynchronous request
+// Notifies the observer
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFileSystemEvent::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::DoCancel
+// From CActive. Called when asynchronous request is canceled
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileSystemEvent::DoCancel()
+ {
+ iFs.NotifyChangeCancel( iStatus );
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::Setup
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerFileSystemEvent::Setup()
+ {
+ if( IsActive() )
+ {
+ return;
+ }
+
+ iIsReceived = EFalse;
+
+ if( iFullPath )
+ {
+ iFs.NotifyChange( iNotifyType, iStatus, *iFullPath );
+ }
+ else
+ {
+ iFs.NotifyChange( iNotifyType, iStatus );
+ }
+
+ SetActive();
+ }
+
+// ------------------------------------------------------------------------------
+// CFileManagerFileSystemEvent::CheckFileSystemEvent
+//
+// ------------------------------------------------------------------------------
+//
+void CFileManagerFileSystemEvent::CheckFileSystemEvent()
+ {
+ if( iIsReceived )
+ {
+ TRAP_IGNORE( iEngine.FolderContentChangedL() );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/Cfilemanagerfolderarray.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,356 @@
+/*
+* Copyright (c) 2002-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: Holds the array of CFileManagerFolderEntry
+*
+*/
+
+
+// INCLUDE FILES
+#include <barsread.h> // TResourceReader
+#include <bautils.h> // BaflUtils::EnsurePathExists
+#include <coemain.h> // CCoeEnv
+#ifdef RD_MULTIPLE_DRIVE
+ #include <pathinfo.h>
+ #include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+#include "Cfilemanagerfolderarray.h"
+#ifndef RD_MULTIPLE_DRIVE
+ #include "cfilemanagerfolderentry.h"
+#endif // RD_MULTIPLE_DRIVE
+#include "CFileManagerCommonDefinitions.h"
+#include "CFileManagerUtils.h"
+
+
+// CONSTANTS
+const TInt KCreateCheckMaskMax = 32;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::NewL
+//
+// -----------------------------------------------------------------------------
+//
+#ifdef RD_MULTIPLE_DRIVE
+CFileManagerFolderArray* CFileManagerFolderArray::NewL(
+ CFileManagerUtils& aUtils )
+ {
+ return new ( ELeave ) CFileManagerFolderArray( aUtils );
+ }
+#else // RD_MULTIPLE_DRIVE
+CFileManagerFolderArray* CFileManagerFolderArray::NewL(
+ TInt aResId, CFileManagerUtils& aUtils )
+ {
+ CFileManagerFolderArray* self =
+ new( ELeave ) CFileManagerFolderArray(
+ aUtils );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aResId );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::CFileManagerFolderArray
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderArray::CFileManagerFolderArray(
+ CFileManagerUtils& aUtils ) :
+ iUtils( aUtils )
+ {
+ }
+
+#ifndef RD_MULTIPLE_DRIVE
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderArray::ConstructL( TInt aResId )
+ {
+ RArray< TInt > removableDrives;
+ CleanupClosePushL( removableDrives );
+
+ iUtils.DriveList( removableDrives, KDriveAttRemovable );
+ TInt drvCount( removableDrives.Count() );
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+ TInt count( reader.ReadInt16() );
+
+ TChar drvLetter( 0 );
+ TBool isRemovable( EFalse );
+
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ CFileManagerFolderEntry* entry =
+ CFileManagerFolderEntry::NewLC( reader );
+ iFolderArray.AppendL( entry );
+ CleanupStack::Pop( entry );
+
+ // The default folders are same to all removable drives.
+ // Add the folders dynamically for undefined removable drives.
+ TPtrC ptr( entry->Name() );
+ if ( ptr[ 0 ] != drvLetter )
+ {
+ drvLetter = ptr[ 0 ];
+ isRemovable = iUtils.IsRemovableDrive( ptr );
+ }
+ if ( isRemovable )
+ {
+ TInt baseDrv = TDriveUnit( ptr );
+ for( TInt j( 0 ); j < drvCount; j++ )
+ {
+ TInt drv( removableDrives[ j ] );
+ if ( drv != baseDrv )
+ {
+ entry = CFileManagerFolderEntry::NewLC( drv, ptr );
+ iFolderArray.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+ CleanupStack::PopAndDestroy( &removableDrives );
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::~CFileManagerFolderArray
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderArray::~CFileManagerFolderArray()
+ {
+#ifndef RD_MULTIPLE_DRIVE
+ iFolderArray.ResetAndDestroy();
+ iFolderArray.Close();
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::Contains
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFolderArray::Contains( const TDesC& aFolderName )
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ // Remote drives has no default folders
+ if ( !iUtils.IsRemoteDrive( aFolderName ) )
+ {
+ TInt pathType( PathInfo::PathType( aFolderName ) );
+ switch ( pathType )
+ {
+ // If non default folder but localized,
+ // handle it here as default folder
+ case PathInfo::ENotSystemPath:
+ {
+ TPtrC ptr( iUtils.LocalizedName( aFolderName ) );
+ if ( ptr.Length() )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+ // Ignore root folders
+ case PathInfo::EPhoneMemoryRootPath: // FALL THROUGH
+ case PathInfo::EMemoryCardRootPath: // FALL THROUGH
+ case PathInfo::ERomRootPath:
+ {
+ return EFalse;
+ }
+ // Accept other folders
+ default:
+ {
+ return ETrue;
+ }
+ }
+ }
+ return EFalse;
+#else // RD_MULTIPLE_DRIVE
+ CFileManagerFolderEntry* entry = FindFolder( aFolderName );
+ return ( entry ? ETrue : EFalse );
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::CreateFolders
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderArray::CreateFolders(
+ const TInt aDrive, const TBool aForced )
+ {
+ // If not forced creation, check if folders have been already created
+ if ( !aForced && aDrive >= 0 && aDrive < KCreateCheckMaskMax )
+ {
+ if ( ( 1 << aDrive ) & iCreateCheckMask )
+ {
+ return; // Folders have already been created
+ }
+ }
+#ifdef RD_MULTIPLE_DRIVE
+ if ( aDrive != KErrNotFound ) // Support only explicitly given drive id
+ {
+ TRAP_IGNORE( DoCreateFoldersL( aDrive ) );
+ // Update folder creation mask
+ iCreateCheckMask |= 1 << aDrive;
+ }
+#else // RD_MULTIPLE_DRIVE
+ RFs& fs( iUtils.Fs() );
+ TInt count( iFolderArray.Count() );
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ TPtrC defFolder( iFolderArray[ i ]->Name() );
+
+ TInt drv = TDriveUnit( defFolder );
+ if ( aDrive >= 0 )
+ {
+ // Apply drive filtering
+ if ( drv != aDrive )
+ {
+ continue;
+ }
+ }
+
+ // Update folder creation mask
+ iCreateCheckMask |= 1 << drv;
+
+ // Make sure that path exists
+ fs.MkDirAll( defFolder );
+
+ // Clear the possible hidden flag, all default folders
+ // should be visible
+ TEntry entry;
+ if ( fs.Entry( defFolder, entry ) == KErrNone )
+ {
+ if( entry.IsHidden() )
+ {
+ // If setting fails, File Manager can still go on
+ fs.SetEntry(
+ defFolder, entry.iModified, 0, KEntryAttHidden );
+ }
+ }
+ }
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+#ifndef RD_MULTIPLE_DRIVE
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::FindFolder
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderEntry* CFileManagerFolderArray::FindFolder(
+ const TDesC& aFolderName )
+ {
+ if ( !iSorted )
+ {
+ TLinearOrder< CFileManagerFolderEntry > key(
+ CFileManagerFolderEntry::CompareSort );
+ iFolderArray.Sort( key );
+ iSorted = ETrue;
+ }
+
+ TInt index( iFolderArray.FindInOrder(
+ aFolderName, CFileManagerFolderEntry::CompareFind ) );
+ if ( index >= 0 && index < iFolderArray.Count() )
+ {
+ // Match found
+ return iFolderArray[ index ];
+ }
+
+ return NULL;
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+#ifdef RD_MULTIPLE_DRIVE
+// -----------------------------------------------------------------------------
+// CFileManagerFolderArray::DoCreateFolders
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderArray::DoCreateFoldersL( const TInt aDrive )
+ {
+ TUint drvStatus( 0 );
+ RFs& fs( iUtils.Fs() );
+ User::LeaveIfError( DriveInfo::GetDriveStatus( fs, aDrive, drvStatus ) );
+ if ( !( drvStatus & DriveInfo::EDriveUserVisible ) ||
+ ( drvStatus & ( DriveInfo::EDriveRemote |
+ DriveInfo::EDriveReadOnly |
+ DriveInfo::EDriveUsbMemory ) ) )
+ {
+ return; // Default folder creation is not allowed for this drive type
+ }
+
+ TEntry entry;
+ CDesCArray* array = PathInfo::GetListOfPathsLC( aDrive );
+ TInt count( array->MdcaCount() );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ TPtrC fullPath( array->MdcaPoint( i ) );
+ TBool allow( ETrue );
+
+ if ( drvStatus & DriveInfo::EDriveRemovable )
+ {
+ // Filter few folder types from physically removable memory cards
+ TInt pathType( PathInfo::PathType( fullPath ) );
+ switch( pathType )
+ {
+ case PathInfo::EGamesPath: // FALL THROUGH
+ case PathInfo::EInstallsPath: // FALL THROUGH
+ case PathInfo::EGsmPicturesPath: // FALL THROUGH
+ case PathInfo::EMmsBackgroundImagesPath: // FALL THROUGH
+ case PathInfo::EPresenceLogosPath:
+ {
+ allow = EFalse;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ if ( allow )
+ {
+ fs.MkDirAll( fullPath ); // Ignore error
+
+ // Clear the possible hidden flag, all default folders
+ // should be visible
+ if ( fs.Entry( fullPath, entry ) == KErrNone )
+ {
+ if( entry.IsHidden() )
+ {
+ // If setting fails, File Manager can still go on
+ fs.SetEntry(
+ fullPath, entry.iModified, 0, KEntryAttHidden );
+ }
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( array );
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/Cfilemanagerindexiterator.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2002-2006 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: Goes through the list of given files
+*
+*/
+
+
+// INCLUDE FILES
+#include "Cfilemanagerindexiterator.h"
+#include "CFileManagerEngine.h"
+#include "CFileManagerCommonDefinitions.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerIndexIterator::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerIndexIterator* CFileManagerIndexIterator::NewL
+ ( CFileManagerEngine& aEngine,
+ CArrayFixFlat<TInt>& aIndexList,
+ const TDesC& aDstDir )
+ {
+ CFileManagerIndexIterator* self = new( ELeave )
+ CFileManagerIndexIterator( aEngine, aIndexList, aDstDir );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIndexIterator::CFileManagerIndexIterator
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerIndexIterator::CFileManagerIndexIterator
+ ( CFileManagerEngine& aEngine,
+ CArrayFixFlat< TInt >& aIndexList,
+ const TDesC& aDstDir ):
+ iEngine( aEngine ),
+ iIndexList( aIndexList ),
+ iDstDir( aDstDir )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIndexIterator::~CFileManagerIndexIterator
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerIndexIterator::~CFileManagerIndexIterator()
+ {
+ delete iSrc;
+ delete iDst;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIndexIterator::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIndexIterator::ConstructL()
+ {
+ // We need double destination size
+ // because source and target folder can be
+ // KMaxFileName sized and those are append
+ // to same buffer.
+ iDst = HBufC::NewL( KFmgrDoubleMaxFileName );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIndexIterator::CurrentL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIndexIterator::CurrentL(
+ HBufC** aSrc,
+ HBufC** aDst,
+ TFileManagerTypeOfItem& aItemType )
+ {
+ delete iSrc;
+ iSrc = NULL;
+ iSrc = iEngine.IndexToFullPathL( iIndexList.At( iCurrentIndex ) );
+
+ TPtr ptrDst( iDst->Des() );
+ ptrDst.Copy( iDstDir );
+ TParsePtrC parse( *iSrc );
+ ptrDst.Append( parse.NameAndExt() );
+
+ *aSrc = iSrc;
+ *aDst = iDst;
+
+ aItemType = EFileManagerFile;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIndexIterator::NextL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerIndexIterator::NextL()
+ {
+ ++iCurrentIndex;
+ if( iCurrentIndex < iIndexList.Count())
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/Engine/src/TFileManagerDriveInfo.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2002-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: Drive info storage
+*
+*/
+
+
+// INCLUDE FILES
+#include <coreapplicationuisdomainpskeys.h>
+#include "TFileManagerDriveInfo.h"
+#include "CFileManagerEngine.h"
+#include "FileManagerDebug.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "CFileManagerFeatureManager.h"
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TFileManagerDriveInfo::TFileManagerDriveInfo
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TFileManagerDriveInfo::TFileManagerDriveInfo()
+ {
+ Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// TFileManagerDriveInfo::TFileManagerDriveInfo
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TFileManagerDriveInfo::Reset()
+ {
+ iName.Zero();
+ iCapacity = 0;
+ iSpaceFree = 0;
+ iUid = 0;
+ iDrive = 0;
+ iState = 0;
+ }
+
+// -----------------------------------------------------------------------------
+// TFileManagerDriveInfo::GetInfoL
+// -----------------------------------------------------------------------------
+//
+void TFileManagerDriveInfo::GetInfoL(
+ const CFileManagerEngine& aEngine, const TInt aDrive )
+ {
+ FUNC_LOG
+
+ INFO_LOG1( "TFileManagerDriveInfo::GetInfoL - aDrive %d", aDrive )
+
+ Reset();
+ iDrive = aDrive;
+
+ RFs& fs( aEngine.Fs() );
+ CheckMountL( fs, aDrive );
+ TInt err( FillStateFromVolumeInfo( fs, aDrive ) );
+ if ( err == KErrInUse )
+ {
+ iState |= EDriveInUse;
+ }
+ else if ( err == KErrCorrupt )
+ {
+ iState |= EDrivePresent | EDriveCorrupted;
+ }
+ else if ( err == KErrLocked )
+ {
+ iState |= EDrivePresent | EDriveLocked | EDriveFormatted |
+ EDrivePasswordProtected | EDriveLockable;
+ }
+ else if ( err == KErrNone )
+ {
+ if ( iState & EDriveRemote )
+ {
+ if ( aEngine.IsRemoteDriveConnected( aDrive ) )
+ {
+ iState |= EDriveConnected;
+ }
+ }
+
+#ifndef RD_FILE_MANAGER_BACKUP
+ if ( iState & EDriveRemovable )
+ {
+ if ( aEngine.BackupFileExistsL( aDrive ) )
+ {
+ iState |= EDriveBackupped;
+ }
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+ }
+
+ INFO_LOG3( "TFileManagerDriveInfo::GetInfoL - aDrive %d, err %d, iState 0x%x",
+ aDrive, err, iState )
+
+ if ( aEngine.FeatureManager().IsEmbedded() )
+ {
+ // Disable format in embedded mode, because it messes up
+ // operations since embedded apps are closed.
+ iState &= ~EDriveFormattable;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// TFileManagerDriveInfo::CheckMountL()
+// -----------------------------------------------------------------------------
+//
+void TFileManagerDriveInfo::CheckMountL(
+ RFs& aFs, const TInt aDrive ) const
+ {
+ FUNC_LOG
+
+ HBufC* fullname = HBufC::NewLC( KMaxFullName );
+ TPtr name( fullname->Des() );
+ TInt err( aFs.FileSystemName( name, aDrive ) );
+ if ( err == KErrNone && !name.Length() )
+ {
+ // Drive isn't mounted at present, so try it now....
+ // Returns KErrLocked, if locked and the password
+ // is not in store
+ err = aFs.MountFileSystem( KFmgrFatFSName, aDrive );
+ }
+ CleanupStack::PopAndDestroy( fullname );
+
+ LOG_IF_ERROR1( err, "TFileManagerDriveInfo::CheckMountL-err=%d", err )
+ }
+
+// -----------------------------------------------------------------------------
+// TFileManagerDriveInfo::FillStateFromDriveInfo()
+// -----------------------------------------------------------------------------
+//
+TInt TFileManagerDriveInfo::FillStateFromDriveInfo(
+#ifdef RD_MULTIPLE_DRIVE
+ RFs& aFs,
+#else // RD_MULTIPLE_DRIVE
+ RFs& /*aFs*/,
+#endif // RD_MULTIPLE_DRIVE
+ const TInt aDrive,
+ const TDriveInfo& aDrvInfo )
+ {
+ FUNC_LOG
+
+ TInt ret( KErrNone );
+
+#ifdef RD_MULTIPLE_DRIVE
+ TUint drvStatus( 0 );
+ TInt err( DriveInfo::GetDriveStatus( aFs, aDrive, drvStatus ) );
+ if ( err != KErrNone )
+ {
+ ERROR_LOG2( "TFileManagerDriveInfo::FillStateFromDriveInfo - aDrive %d, Status err %d",
+ aDrive, err )
+ }
+ INFO_LOG2( "TFileManagerDriveInfo::FillStateFromDriveInfo - Media type %d, drvStatus 0x%x",
+ aDrvInfo.iType, drvStatus )
+ if ( aDrvInfo.iType != EMediaNotPresent && ( drvStatus & DriveInfo::EDriveInUse ) )
+ {
+ ret = KErrInUse; // Drive is reserved for exclusive usage like file transfer
+ }
+ if ( ( drvStatus & DriveInfo::EDriveInternal ) &&
+ ( drvStatus & DriveInfo::EDriveExternallyMountable ) )
+ {
+ // Handle mass storage bits here
+ iState |= EDriveMassStorage | EDriveRemovable;
+ if ( aDrvInfo.iMediaAtt & KMediaAttFormattable )
+ {
+ iState |= EDriveFormattable;
+ }
+ if ( aDrvInfo.iMediaAtt & KMediaAttLocked )
+ {
+ // Locking internal drives is not supported
+ iState |= EDriveCorrupted;
+ ret = KErrCorrupt;
+ }
+ return ret;
+ }
+ if ( drvStatus & DriveInfo::EDriveUsbMemory )
+ {
+ iState |= EDriveUsbMemory;
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+ // Setup flags from drive info
+ if ( aDrvInfo.iMediaAtt & KMediaAttWriteProtected )
+ {
+ iState |= EDriveWriteProtected;
+ }
+ if ( aDrvInfo.iMediaAtt & KMediaAttLocked )
+ {
+ iState |= EDriveLocked;
+ ret = KErrLocked;
+ }
+ if ( aDrvInfo.iMediaAtt & KMediaAttFormattable )
+ {
+ iState |= EDriveFormattable;
+ }
+ if ( aDrvInfo.iMediaAtt & KMediaAttLockable )
+ {
+ iState |= EDriveLockable;
+ }
+ if ( aDrvInfo.iMediaAtt & KMediaAttHasPassword )
+ {
+ iState |= EDrivePasswordProtected;
+ }
+ if ( ( aDrvInfo.iDriveAtt & KDriveAttRemovable ) ||
+ aDrive == KFmgrMemoryCardDrive )
+ {
+ iState |= EDriveRemovable;
+#ifdef RD_MULTIPLE_DRIVE
+ if ( drvStatus & DriveInfo::EDriveSwEjectable )
+ {
+ iState |= EDriveEjectable;
+ }
+#else // RD_MULTIPLE_DRIVE
+ // Eject is possible for external memory cards
+ if ( !( aDrvInfo.iDriveAtt & KDriveAttInternal ) ||
+ aDrive == KFmgrMemoryCardDrive )
+ {
+ iState |= EDriveEjectable;
+ }
+#endif // RD_MULTIPLE_DRIVE
+ }
+ if ( aDrvInfo.iDriveAtt & KDriveAttRemote )
+ {
+ iState |= EDriveRemote;
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// TFileManagerDriveInfo::FillStateFromVolumeInfo()
+// -----------------------------------------------------------------------------
+//
+TInt TFileManagerDriveInfo::FillStateFromVolumeInfo(
+ RFs& aFs, const TInt aDrive )
+ {
+ FUNC_LOG
+
+ TVolumeInfo volInfo;
+ TInt ret( aFs.Volume( volInfo, aDrive ) );
+ LOG_IF_ERROR1( ret,
+ "TFileManagerDriveInfo::FillStateFromVolumeInfo - Volume err %d", ret );
+ if ( ret == KErrNone )
+ {
+ // Get all information from volume info
+ TInt maxLen( Min( volInfo.iName.Length(), KMaxVolumeName ) );
+
+ iName = volInfo.iName.Left( maxLen );
+ iUid = volInfo.iUniqueID;
+ iCapacity = volInfo.iSize;
+ iSpaceFree = volInfo.iFree;
+
+ iState |= EDrivePresent;
+
+ if ( volInfo.iSize )
+ {
+ iState |= EDriveFormatted;
+ }
+
+ ret = FillStateFromDriveInfo( aFs, aDrive, volInfo.iDrive );
+ }
+ else
+ {
+ // Get all information from drive info
+ TDriveInfo& drvInfo( volInfo.iDrive );
+ TInt err( aFs.Drive( drvInfo, aDrive ) );
+ LOG_IF_ERROR1( err,
+ "TFileManagerDriveInfo::FillStateFromVolumeInfo - Drive err %d", err );
+ if ( err == KErrNone )
+ {
+ err = FillStateFromDriveInfo( aFs, aDrive, drvInfo );
+
+ // If memory card is not ready but type is present,
+ // then check if it is reserved.
+ if( err == KErrNone &&
+ ret == KErrNotReady &&
+ drvInfo.iType != EMediaNotPresent )
+ {
+ // Check USB file transfer state
+ TInt prop( ECoreAppUIsUSBFileTransferUninitialized );
+ RProperty::Get(
+ KPSUidCoreApplicationUIs,
+ KCoreAppUIsUSBFileTransfer, prop );
+ if ( prop == ECoreAppUIsUSBFileTransferActive )
+ {
+ ret = KErrInUse; // Reserved for file transfer
+ }
+ INFO_LOG2( "TFileManagerDriveInfo::FillStateFromVolumeInfo-prop=%d,ret=%d",
+ prop, ret )
+ }
+ }
+ if ( err != KErrNone )
+ {
+ ret = err;
+ }
+ }
+
+ LOG_IF_ERROR2( ret,
+ "TFileManagerDriveInfo::FillStateFromVolumeInfo - aDrive %d, Ret %d",
+ aDrive, ret )
+
+ return ret;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/data/GflmFileExtensionMimeTypes.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,98 @@
+/*
+* 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: Resource definitions for GFLM extension MIME types
+*
+*/
+
+
+#include <eikon.rh>
+#include <bldvariant.hrh>
+
+#include "GflmFileExtensionMimeTypes.rh"
+
+// RESOURCE IDENTIFIER
+NAME FWMT
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE EXT_MIME_PAIR_LIST r_ext_mime_pairs
+{
+ pairs =
+ {
+
+ // Images
+ EXT_MIME_PAIR { extension = ".jpg"; mime_type = "image/jpeg"; },
+ EXT_MIME_PAIR { extension = ".jpeg"; mime_type = "image/jpeg"; },
+ EXT_MIME_PAIR { extension = ".gif"; mime_type = "image/gif"; },
+ EXT_MIME_PAIR { extension = ".png"; mime_type = "image/png"; },
+ EXT_MIME_PAIR { extension = ".ota"; mime_type = "image/x-ota-bitmap"; },
+ EXT_MIME_PAIR { extension = ".tif"; mime_type = "image/tiff"; },
+ EXT_MIME_PAIR { extension = ".mbm"; mime_type = "image/x-epoc-mbm"; },
+ EXT_MIME_PAIR { extension = ".bmp"; mime_type = "image/x-bmp"; },
+ EXT_MIME_PAIR { extension = ".wbmp"; mime_type = "image/vnd.wap.wbmp"; },
+ EXT_MIME_PAIR { extension = ".svg"; mime_type = "image/svg+xml"; },
+ EXT_MIME_PAIR { extension = ".wmf"; mime_type = "image/x-wmf"; },
+
+ // Audios
+ EXT_MIME_PAIR { extension = ".mid"; mime_type = "audio/midi"; },
+ EXT_MIME_PAIR { extension = ".au"; mime_type = "audio/au"; },
+ EXT_MIME_PAIR { extension = ".amr"; mime_type = "audio/amr"; },
+ EXT_MIME_PAIR { extension = ".awb"; mime_type = "audio/amr-wb"; },
+ EXT_MIME_PAIR { extension = ".rmf"; mime_type = "audio/x-beatnik-rmf"; },
+ EXT_MIME_PAIR { extension = ".aiff"; mime_type = "audio/aiff"; },
+ EXT_MIME_PAIR { extension = ".aif"; mime_type = "audio/aiff"; },
+ EXT_MIME_PAIR { extension = ".wav"; mime_type = "audio/wav"; },
+ EXT_MIME_PAIR { extension = ".rng"; mime_type = "application/vnd.nokia.ringing-tone"; },
+ EXT_MIME_PAIR { extension = ".nrt"; mime_type = "application/vnd.nokia.ringing-tone"; },
+ EXT_MIME_PAIR { extension = ".mp3"; mime_type = "audio/mp3"; },
+
+ // Videos
+ EXT_MIME_PAIR { extension = ".nim"; mime_type = "video/sdp"; },
+ EXT_MIME_PAIR { extension = ".sdp"; mime_type = "application/sdp"; }
+
+ };
+}
+
+// Remote drive specific file extension mime mappings for faster recognition.
+// Mime types are resolved from extension by remote storage framework anyway.
+RESOURCE EXT_MIME_PAIR_LIST r_remote_ext_mime_pairs
+{
+ pairs =
+ {
+
+ // Audios
+ EXT_MIME_PAIR { extension = ".m4a"; mime_type = "audio/mp4"; },
+ EXT_MIME_PAIR { extension = ".aac"; mime_type = "audio/aac"; },
+ EXT_MIME_PAIR { extension = ".3g2"; mime_type = "audio/3gpp2"; },
+ EXT_MIME_PAIR { extension = ".mxmf"; mime_type = "audio/vnd.nokia.mobile-xmf"; },
+ EXT_MIME_PAIR { extension = ".mid"; mime_type = "audio/midi"; },
+ EXT_MIME_PAIR { extension = ".wma"; mime_type = "audio/x-ms-wma"; },
+
+ // Videos
+ EXT_MIME_PAIR { extension = ".mp4"; mime_type = "video/mp4"; },
+ EXT_MIME_PAIR { extension = ".mpeg4"; mime_type = "video/mp4"; },
+ EXT_MIME_PAIR { extension = ".mpeg"; mime_type = "video/mp4"; },
+ EXT_MIME_PAIR { extension = ".3gp"; mime_type = "video/3gpp"; },
+
+ // Other
+ EXT_MIME_PAIR { extension = ".txt"; mime_type = "text/plain"; },
+ EXT_MIME_PAIR { extension = ".sis"; mime_type = "sis"; },
+ EXT_MIME_PAIR { extension = ".sisx"; mime_type = "sis"; },
+ EXT_MIME_PAIR { extension = ".jar"; mime_type = "java-archive"; },
+ EXT_MIME_PAIR { extension = ".jad"; mime_type = "java-archive"; }
+
+ };
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmDirectoryListingCache.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2002-2006 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: Provides directory listing cache
+*
+*/
+
+
+
+#ifndef CGFLMDIRECTORYLISTINGCACHE_H
+#define CGFLMDIRECTORYLISTINGCACHE_H
+
+
+// INCLUDES
+#include <f32file.h>
+#include "GFLM.hrh"
+
+
+// CLASS DECLARATION
+
+/**
+* A class that encapsulates reading and storing the contents of a
+* directory. When a directory listing is read, the results are
+* cached so that the same listing can be used in other groups
+* without having to re-read the same directory.
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CGflmDirectoryListingCache) : public CBase
+ {
+ public:
+ typedef CArrayPakFlat< TEntry > CEntryArray;
+
+ private:
+ /**
+ * An internal data structure for storing directory name and listing
+ * pairs.
+ */
+ NONSHARABLE_CLASS(CListingNamePair) : public CBase
+ {
+ public:
+ ~CListingNamePair();
+ static CListingNamePair* NewLC( const TDesC& aDirectory );
+ private:
+ void ConstructL( const TDesC& aDirectory );
+ public:
+ HBufC* iDirectory;
+ CEntryArray* iListing;
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @since 2.0
+ * @param aFss A reference to a valid and open file server session
+ * @param aCancelIndicator A reference to cancel indicator
+ */
+ static CGflmDirectoryListingCache* NewL(
+ RFs& aFss,
+ const TBool& aCancelIndicator );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmDirectoryListingCache();
+
+ public: // New functions
+
+ /**
+ * Clears the contents of the cache
+ * @since 2.0
+ */
+ void ClearCache();
+
+ /**
+ * Retrieves a directory listing
+ * @since 2.0
+ * @param aDirectory Path of the directory
+ * @return A pointer to a CEntryArray object that contains the requested items
+ */
+ const CEntryArray* ListingL( const TDesC& aDirectory );
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmDirectoryListingCache(
+ RFs& aFss,
+ const TBool& aCancelIndicator );
+
+ void GetDirL( CListingNamePair& aPair );
+
+ private: // Data
+ // For caching directory contents. Owned.
+ CListingNamePair* iCache;
+
+ // An open fileserver session. Not owned.
+ RFs& iFss;
+
+ // Read only cancel indicator. Not owned
+ const TBool& iCancelIndicator;
+
+ // A buffer for reading directory contents
+ TEntryArray iEntryBuffer;
+
+ // An indicator if cache must be cleared
+ TBool iClearCache;
+
+ };
+
+#endif // CGFLMDIRECTORYLISTINGCACHE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmDriveItem.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* 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: Drive item definitions
+*
+*/
+
+
+
+#ifndef CGFLMDRIVEITEM_H
+#define CGFLMDRIVEITEM_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include "CGflmGroupItem.h"
+
+
+// CLASS DECLARATION
+/**
+* A class representing drive items.
+*
+* @lib GFLM.lib
+* @since 3.1
+*/
+class CGflmDriveItem : public CGflmGroupItem
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmDriveItem* NewLC(
+ const TInt aDrive,
+ const TVolumeInfo& aFSVolume,
+ const TInt aVolumeStatus,
+ const TUint aDriveStatus );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmDriveItem( );
+
+ public: // New functions
+
+ /**
+ * Sets the localized name of the item.
+ * @since 3.1
+ * @param aName A descriptor containing the localized name for the
+ entry. A copy of the name is created.
+ */
+ IMPORT_C void SetLocalizedNameL( const TDesC& aName );
+
+ /**
+ * Sets the root directory of the item.
+ * @since 3.1
+ * @param aName A descriptor containing the path for the
+ entry. A copy of the path is created.
+ */
+ IMPORT_C void SetRootDirectoryL( const TDesC& aPath );
+
+ /**
+ * Gets the root directory of the item.
+ * @since 3.1
+ * @return A pointer descriptor to root directory
+ */
+ IMPORT_C TPtrC RootDirectory() const;
+
+ /**
+ * Gets the volume info of the item.
+ * @since 3.1
+ * @return A reference to volume info
+ */
+ IMPORT_C const TVolumeInfo& VolumeInfo() const;
+
+ /**
+ * Get the drive id
+ * @since 3.1
+ * @return Drive id.
+ */
+ IMPORT_C TInt Drive() const;
+
+ /**
+ * Get the volume status
+ * @since 3.1
+ * @return volume status
+ */
+ IMPORT_C TInt VolumeStatus() const;
+
+ /**
+ * Get the drive status
+ * @since 3.2
+ * @return drive status
+ */
+ IMPORT_C TUint DriveStatus() const;
+
+ public: // From CGflmGroupItem
+
+ TGflmItemType Type() const;
+
+ TPtrC Name() const;
+
+ TTime Date() const;
+
+ TInt64 Size() const;
+
+ TPtrC Ext() const;
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmDriveItem(
+ const TInt aDrive,
+ const TVolumeInfo& aFSVolume,
+ const TInt aVolumeStatus,
+ const TUint aDriveStatus );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ private: // Data
+ // A TVolumeInfo object that is the actual entry
+ TVolumeInfo iVolume;
+
+ // The drive numeric id.
+ TInt iDrive;
+
+ // The root directory of the entry.
+ HBufC* iRootDir;
+
+ // The localised name of the entry.
+ HBufC* iLocalizedName;
+
+ // Holds volume status i.e return value of drive or volume info
+ TInt iVolumeStatus;
+
+ // Holds drive status i.e the value from DriveInfo::GetDriveStatus
+ TUint iDriveStatus;
+
+ };
+
+#endif // CGFLMDRIVEITEM_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmDriveResolver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2002-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: Resolves different media types' drive letters
+*
+*/
+
+
+#ifndef CGFLMDRIVERESOLVER_H
+#define CGFLMDRIVERESOLVER_H
+
+
+// INCLUDES
+#include <f32file.h>
+#include "GFLM.hrh"
+
+// CONSTANTS
+const TInt KGflmReadBufferLen = 256;
+
+// FORWARD DECLARATIONS
+class CGflmDriveItem;
+class MGflmItemFilter;
+
+
+// CLASS DECLARATION
+/**
+* Resolves different media types' drive letters
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CGflmDriveResolver) : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmDriveResolver* NewL( RFs& aFs );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmDriveResolver();
+
+ public: // New functions
+ /**
+ * Refreshes drive information
+ * @param aFs Reference to file system handle
+ * @param aFilter Pointer to filter
+ * @return System wide error code.
+ * @since 3.2
+ */
+ TInt RefreshDrives( MGflmItemFilter* aFilter );
+
+ /**
+ * Gets number of drives
+ * @since 3.1
+ * @return A number of drives
+ */
+ TInt DriveCount() const;
+
+ /**
+ * Gets drive item at position
+ * @since 3.1
+ * @param aIndex Given position
+ * @return A pointer to drive item (not owned).
+ */
+ CGflmDriveItem* DriveAt( const TInt aIndex ) const;
+
+ /**
+ * Gets drive item from given path
+ * @since 3.1
+ * @param aPath Given path
+ * @return A pointer to drive item (not owned)
+ * or NULL if drive not found.
+ */
+ CGflmDriveItem* DriveFromPath( const TDesC& aPath ) const;
+
+ /**
+ * Clears drive information
+ * @since 3.1
+ */
+ void ClearDrives();
+
+ /**
+ * Checks if path is drive root path
+ * @since 3.1
+ */
+ TBool IsRootPath( const TDesC& aPath ) const;
+
+ /**
+ * Checks if path is on remote drive
+ * @since 3.1
+ */
+ TBool IsRemoteDrive( const TDesC& aPath ) const;
+
+ /**
+ * Gets drive item from given id
+ * @since 3.2
+ * @param aDrive Given drive id
+ * @return A pointer to drive item (not owned)
+ * or NULL if drive not found.
+ */
+ CGflmDriveItem* DriveFromId( const TInt aDrive ) const;
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmDriveResolver( RFs& aFs );
+
+ void ConstructL();
+
+ void AppendDriveL(
+ const TInt aDrive, MGflmItemFilter* aFilter );
+
+ void RefreshDrivesL( MGflmItemFilter* aFilter );
+
+ private: // Data
+ // Shareable file server session.
+ RFs& iFs;
+
+ // List of drives. Owned.
+ RPointerArray< CGflmDriveItem > iDrives;
+
+ TBool iRefreshed;
+
+ RCriticalSection iCs;
+
+ TBuf< KGflmReadBufferLen > iReadBuffer;
+ };
+
+#endif // CGFLMDRIVERESOLVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmFileFinder.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 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: Searches items matching with given string in given file system
+*
+*/
+
+
+#ifndef CGFLMITEMFINDER_H
+#define CGFLMITEMFINDER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <f32file.h>
+#include <collate.h>
+#include "GFLM.hrh"
+#include "MGflmItemGroup.h"
+
+// FORWARD DECLARATIONS
+class CGflmItemLocalizer;
+class CGflmDriveResolver;
+class MGflmItemFilter;
+class CGflmGroupItem;
+
+// CLASS DECLARATION
+/**
+* Finds the items matching with given string in given folder
+*
+* @lib GFLM.lib
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CGflmFileFinder) : public CBase,
+ public MGflmItemGroup
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmFileFinder* NewL(
+ RFs& aFss,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver,
+ const TBool& aCancelIndicator );
+
+ /**
+ * Destructor.
+ */
+ ~CGflmFileFinder();
+
+ public:
+ /**
+ * Sets search folder
+ * @since 3.2
+ * @param aSearchFolder Given search folder
+ */
+ void SetSearchFolderL( const TDesC& aSearchFolder );
+
+ /**
+ * Sets search string. Wild cards are allowed.
+ * @since 3.2
+ * @param aSearchString Given search string
+ */
+ void SetSearchStringL( const TDesC& aSearchString );
+
+ /**
+ * Refreshes the model
+ * @since 3.2
+ * @param aFilter Pointer to filter. NULL if not used.
+ * @param aSortMethod Sort method
+ * @param aRefreshMode Refresh mode
+ */
+ void RefreshL(
+ MGflmItemFilter* aFilter,
+ TGflmSortMethod aSortMethod,
+ TGflmRefreshMode aRefreshMode );
+
+ public: // From MGflmItemGroup
+
+ TInt Id() const;
+
+ TInt ItemCount() const;
+
+ CGflmGroupItem* Item( TInt aIndex );
+
+ void AddSourceL( const TDesC& aDirectory );
+
+ void ResetSources();
+
+ void AddActionItemL( TInt aId, const TDesC& aCaption );
+
+ void SetInclusion( TUint aInclusion );
+
+ const TCollationMethod* CollationMethod();
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CGflmFileFinder(
+ RFs& aFss,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver,
+ const TBool& aCancelIndicator );
+
+ void ConstructL();
+
+ void DoSearchL( MGflmItemFilter* aFilter );
+
+ private: // Data
+ // Ref: An open shareable file server session
+ RFs& iFss;
+
+ // Ref: Item localizer
+ CGflmItemLocalizer& iItemLocalizer;
+
+ // Ref: Drive resolver
+ CGflmDriveResolver& iDriveResolver;
+
+ // Own: Read only cancel indicator
+ const TBool& iCancelIndicator;
+
+ // Own: Contains folder string
+ HBufC* iSearchFolder;
+
+ // Own: Contains folder path with search string with wild cards
+ HBufC* iSearchFolderWild;
+
+ // Own: Contains search string
+ HBufC* iSearchString;
+
+ // Own: Contains search string with wild cards
+ HBufC* iSearchStringWild;
+
+ // Own: Contains found items
+ RPointerArray< CGflmGroupItem > iSearchResults;
+
+ // Own: Buffer for full path handling
+ TFileName iFullPath;
+
+ // Own: Used collation method
+ TCollationMethod iSortCollationMethod;
+ };
+
+#endif // CGFLMITEMFINDER_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmFileFinderItem.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 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: File finder item definitions
+*
+*/
+
+
+
+#ifndef CGFLMFILEFINDERITEM_H
+#define CGFLMFILEFINDERITEM_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "CGflmFileSystemItem.h"
+
+
+// FORWARD DECLARATIONS
+
+
+// CLASS DECLARATION
+
+/**
+* A class representing a file system item.
+* A file system item is either a file or a directory.
+*
+* @lib GFLM.lib
+* @since 3.2
+*/
+class CGflmFileFinderItem : public CGflmFileSystemItem
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmFileFinderItem* NewLC(
+ const TEntry& aEntry,
+ const TDesC& aBasePath );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmFileFinderItem();
+
+ /**
+ * Compares items by match
+ * @since 3.2
+ * @param aFirst Given first item for comparison
+ * @param aSecond Given second item for comparison
+ * @return Comparison result
+ */
+ static TInt CompareByMatch(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ /**
+ * Prepares item for by match sorting
+ * @since 3.2
+ * @param aSearchString Given search string
+ */
+ void PrepareSort( const TDesC& aSearchString );
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmFileFinderItem( const TEntry& aFSEntry );
+
+ void ConstructL( const TDesC& aBasePath );
+
+ private: // Data
+ TEntry iEntry;
+ HBufC* iBasePath;
+ TInt16 iSortValue;
+ };
+
+#endif // CGFLMFILEFINDERITEM_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmFileListModel.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2002-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: File list model
+*
+*/
+
+
+
+#ifndef CGFLMFILELISTMODEL_H
+#define CGFLMFILELISTMODEL_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h> // MDesCArray
+#include <f32file.h> // RFs
+#include "GFLM.hrh"
+
+
+// FORWARD DECLARATIONS
+class MGflmItemGroup;
+class CGflmItemGroupImpl;
+class CGflmGroupItem;
+class MGflmItemFilter;
+class CGflmDirectoryListingCache;
+class CGflmFileRecognizer;
+class CGflmItemLocalizer;
+class CGflmDriveResolver;
+class CGflmDriveItem;
+class CGflmFileFinder;
+
+
+// CLASS DECLARATION
+/**
+* A class that implements the basic file list functionality.
+* @lib GFLM.lib
+* @since 2.0
+*/
+class CGflmFileListModel : public CActive, public MDesCArray
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @since 3.2
+ * @param aFs Shareable file server session, see RFs::ShareProtected()
+ * @return Pointer to a CGflmFileListModel instance
+ */
+ IMPORT_C static CGflmFileListModel* NewL( RFs& aFs );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmFileListModel();
+
+ public: // New functions
+
+ /**
+ * Refreshes the model
+ * @since 2.0
+ * @param aStatus A reference to a TRequestStatus object that
+ * is used to notify the client thread about completion of
+ * the refresh
+ * @param aRefreshMode Refresh mode
+ */
+ IMPORT_C void RefreshListL(
+ TRequestStatus& aStatus,
+ TGflmRefreshMode aRefreshMode = ERefreshItems );
+
+ /**
+ * Cancels the asynchronous refresh request
+ * @since 2.0
+ */
+ IMPORT_C void CancelRefresh();
+
+ /**
+ * Obtains a pointer to a CGflmGroupItem object.
+ * The item is indexed by a global index.
+ * Raises a panic (EGlobalIndexOutOfBounds) if the index refers to a
+ * non-existent item.
+ * @since 2.0
+ * @param aIndex Global index of the item.
+ * @return A pointer to a CGflmGroupItem object.
+ */
+ IMPORT_C CGflmGroupItem* Item( TInt aIndex ) const;
+
+ /**
+ * Resets the model. All item groups are destroyed.
+ * @since 2.0
+ */
+ IMPORT_C void ResetModel();
+
+ /**
+ * Obtains a pointer to a MGflmItemGroup object.
+ * Raises a panic (EInvalidGroupId) if a group is not found with given id.
+ * @since 2.0
+ * @param aId Id of the group
+ * @return A pointer to a MGflmItemGroup object.
+ */
+ IMPORT_C MGflmItemGroup* FindGroupById( TInt aId );
+
+ /**
+ * Creates a new item group with a given id.
+ * @since 2.0
+ * @param aId The id given to the created group
+ * @return A pointer to the created MGflmItemGroup object
+ */
+ IMPORT_C MGflmItemGroup* CreateGroupL( TInt aId );
+
+ /**
+ * Creates a new item group with a given id.
+ * @since 3.1
+ * @param aId The id given to the created group
+ * @param aInclusion The group item inclusion
+ * @return A pointer to the created MGflmItemGroup object
+ */
+ IMPORT_C MGflmItemGroup* CreateGroupL(
+ TInt aId, TUint aInclusion );
+
+ /**
+ * Recognizes a file and resolves it's MIME-type.
+ * This method accesses GFLM's internal recognizer cache
+ * and is thus recomended for efficiency. NOTE: The file doesn't
+ * have to belong to the current state of the model.
+ * @since 2.0
+ * @param aFilename Full path of the file to be recognized
+ * @return A pointer descriptor containing the MIME-type of the item.
+ * If the MIME-type couldn't be recognized, returns KNullDesC
+ */
+ IMPORT_C TPtrC ResolveMimeTypeL( const TDesC& aFilename );
+
+ /**
+ * Sets the item filter object for the model to use.
+ * If aOwned is ETrue the model gets the ownership of the object.
+ * @since 2.0
+ * @param aFilter A pointer to a MGflmItemFilter object to be used
+ */
+ IMPORT_C void SetCustomFilter( MGflmItemFilter* aFilter );
+
+ /**
+ * Returns the validity of the model. If the refresh operation failed
+ * or was canceled the model is corrupt and it's items shouldn't be
+ * accessed
+ * @since 2.0
+ * @return ETrue if the model is corrupt. EFalse if the model is in
+ * valid state.
+ */
+ IMPORT_C TBool IsCorrupt() const;
+
+ /**
+ * Returns the localized name of a file or a directory
+ * @since 2.0
+ * @param aPath Full path to the file or directory
+ * @return A pointer descriptor containing the localized name
+ * without the full path
+ */
+ IMPORT_C TPtrC LocalizedName( const TDesC& aPath ) const;
+
+ /**
+ * Clears the contents of the file cache
+ * @since 2.0
+ */
+ IMPORT_C void ClearCache();
+
+ /**
+ * Clears the contents of the drive info
+ * @since 3.1
+ */
+ IMPORT_C void ClearDriveInfo();
+
+ /**
+ * Gets drive item from given path
+ * @since 3.1
+ * @param aPath Given path
+ * @return A pointer to drive item (not owned)
+ * or NULL if drive not found.
+ */
+ IMPORT_C CGflmDriveItem* DriveFromPath( const TDesC& aPath ) const;
+
+ /**
+ * Gets drive item from given id
+ * @since 3.2
+ * @param aDrive Given drive id
+ * @return A pointer to drive item (not owned)
+ * or NULL if drive not found.
+ */
+ IMPORT_C CGflmDriveItem* DriveFromId( const TInt aDrive ) const;
+
+ /**
+ * Enables and disables search mode
+ * @since 3.2
+ * @param aEnabled Enable or disable
+ */
+ IMPORT_C void EnableSearchMode( const TBool aEnabled );
+
+ /**
+ * Get search mode
+ * @since 5.0
+ * @return search mode
+ */
+ IMPORT_C TBool SearchMode();
+ /**
+ * Sets search string. Wild cards are allowed.
+ * @since 3.2
+ * @param aSearchString Given search string
+ */
+ IMPORT_C void SetSearchStringL( const TDesC& aSearchString );
+
+ /**
+ * Sets search folder
+ * @since 3.2
+ * @param aSearchFolder Given search folder
+ */
+ IMPORT_C void SetSearchFolderL( const TDesC& aSearchFolder );
+
+ /**
+ * Sets sort method
+ * @since 5.0
+ * @param aSortMethod Given sort method
+ */
+ IMPORT_C void SetSortMethod( TGflmSortMethod aSortMethod );
+
+ /**
+ * Gets sort method
+ * @since 5.0
+ * @return Currently used sort method
+ */
+ IMPORT_C TGflmSortMethod SortMethod() const;
+
+ /**
+ * Flush cache in CGflmFileRecognizer
+ */
+ IMPORT_C void FlushCache();
+
+ public: // MDesCArray
+
+ TInt MdcaCount() const;
+
+ TPtrC MdcaPoint( TInt aIndex ) const;
+
+ private: // CActive
+
+ void RunL();
+
+ TInt RunError( TInt aError );
+
+ void DoCancel();
+
+ protected: // New functions
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmFileListModel( RFs& aFs );
+
+ /**
+ * 2nd phase constructor
+ */
+ void ConstructL();
+
+ private:
+
+ static TInt WorkThreadStart( TAny* aPtr );
+
+ void WorkThread();
+
+ void NotifyClient( TInt aErr );
+
+ void GetGroupAndLocalIndex(
+ const TInt aGlobalIndex,
+ TInt& aLocalIndex,
+ MGflmItemGroup*& aGroup ) const;
+
+ void DoRefreshL();
+
+ protected: // Data
+
+ // Ref: An open shareable file server session
+ RFs& iFs;
+
+ // Request status of the work thread client
+ TRequestStatus* iClientStatus;
+
+ // Dynamic array containing all the CGflmItemGroupImpl objects that
+ // belong to the model. Owned.
+ CArrayPtrSeg< CGflmItemGroupImpl >* iGroups;
+
+ // Instance of CGflmDirectoryListingCache. Owned.
+ CGflmDirectoryListingCache* iListingCache;
+
+ // Instance of CGflmFileRecognizer. Owned.
+ CGflmFileRecognizer* iFileRecognizer;
+
+ // Instance of CGflmItemLocalizer. Owned.
+ CGflmItemLocalizer* iItemLocalizer;
+
+ // Instance of CGflmDriveResolver. Owned.
+ CGflmDriveResolver* iDriveResolver;
+
+ // A boolean indicating wether the model is corrupt and needs to be
+ // refreshed
+ TBool iCorrupt;
+
+ // A pointer to a class implementing MGflmItemFilter interface
+ MGflmItemFilter* iFilter;
+
+ // Own: For synchronising client and work thread
+ RSemaphore iSemaphore;
+
+ // Own: Client thread id to be informed
+ TThreadId iClientId;
+
+ // A boolean indicating wether the model is shutting down
+ // Main thread is allowed write and work thread is allowed to read only
+ TBool iShutdown;
+
+ // A boolean indicating wether the refresh is canceled
+ // Main thread is allowed write and work thread is allowed to read only
+ TBool iCanceled;
+
+ // A boolean indicating if search mode enabled or disabled
+ // Main thread is allowed write and work thread is allowed to read only
+ TBool iSearchEnabled;
+
+ // Own: For finding files and directories from file system
+ CGflmFileFinder* iFileFinder;
+
+ // Own: Stores currently used sort method
+ // Main thread is allowed write and work thread is allowed to read only
+ TGflmSortMethod iSortMethod;
+
+ // Own: Stores currently used sort method in search mode
+ // Main thread is allowed write and work thread is allowed to read only
+ TGflmSortMethod iSearchSortMethod;
+
+ // Own: Stores currently used refresh mode
+ // Main thread is allowed write and work thread is allowed to read only
+ TGflmRefreshMode iRefreshMode;
+
+ };
+
+#endif // CGFLMFILELISTMODEL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmFileRecognizer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2002-2006 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: Recogniser wrapper
+*
+*/
+
+
+
+#ifndef CGFLMFILERECOGNIZER_H
+#define CGFLMFILERECOGNIZER_H
+
+
+// INCLUDES
+#include <apgcli.h>
+#include <e32base.h>
+#include <barsc.h>
+
+
+// FORWARD DECLARATIONS
+class CGflmDriveResolver;
+
+
+// CLASS DECLARATION
+
+/**
+* A class for wrapping recogniser functionality.
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CGflmFileRecognizer) : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmFileRecognizer* NewL(
+ RFs& aFs,
+ TInt aMemoryConsumption,
+ CGflmDriveResolver* aDriveResolver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmFileRecognizer();
+
+ public: // New functions
+
+ /**
+ * Recognises a MIME type of file.
+ * @since S60 3.1
+ * @param aFilename A name of the file
+ * @return Pointer to MIME type. KNullDesC if not recognised.
+ */
+ TPtrC RecognizeL( const TDesC& aFilename );
+
+ /**
+ * Flushed recogniser cache.
+ * @since S60 3.1
+ */
+ void FlushCache();
+
+ private:
+
+ NONSHARABLE_CLASS(CPathTypePair) : public CBase
+ {
+ public:
+ static CPathTypePair* NewLC( const TDesC& aFilename );
+ void ConstructL( const TDesC& aFilename );
+ CPathTypePair();
+ ~CPathTypePair();
+ TInt Size() const;
+
+ public:
+ TDblQueLink iLink;
+ TInt iTypeIndex;
+ HBufC* iFilename;
+ };
+
+ NONSHARABLE_CLASS(CExtMimePair) : public CBase
+ {
+ public:
+ ~CExtMimePair();
+
+ public:
+ HBufC* iExt;
+ HBufC* iMime;
+ };
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmFileRecognizer(
+ CGflmDriveResolver* aDriveResolver,
+ RFs& aFs );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( TInt aMemoryConsumption );
+
+ /**
+ * Cleans old entries from cache according to specified per cent
+ *
+ */
+ void CleanupCache( );
+
+ /**
+ * Constructs file extension mime pairs
+ *
+ */
+ void ConstructExtMimePairsL(
+ RResourceFile& aResFile,
+ TInt aResId,
+ RPointerArray< CExtMimePair >& aPairs );
+
+ /**
+ * Finds mime from file extension
+ *
+ */
+ TPtrC FindMimeFromExt(
+ const TDesC& aExt, RPointerArray< CExtMimePair >& aPairs );
+
+ /**
+ * Does actual recognition
+ *
+ */
+ TPtrC DoRecognizeL( const TDesC& aFilename );
+
+ private: // Data
+ // Own: For using the apparc recognisers
+ RApaLsSession iApaSession;
+
+ // Array for mime types, owned
+ CDesCArraySeg* iMimeTypes;
+
+ // Mime type cache, owned
+ TDblQue< CPathTypePair > iCache;
+
+ // Current memory usage for cache
+ TInt iCacheMemoryUsage;
+
+ // Maximum memory usage for cache
+ TInt iCacheMaxMemoryUsage;
+
+ // Ref: Pointer to drive resolver
+ CGflmDriveResolver* iDriveResolver;
+
+ // Own: General file extension mime pairs
+ RPointerArray< CExtMimePair > iExtMimePairs;
+
+ // Own: Remote drive specific file extension mime pairs
+ RPointerArray< CExtMimePair > iRemoteExtMimePairs;
+
+ // Ref: Open file server session
+ RFs& iFs;
+
+ };
+
+#endif // CGFLMFILERECOGNIZER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmFileSystemItem.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2002-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: File system item definitions
+*
+*/
+
+
+
+#ifndef CGFLMFILESYSTEMITEM_H
+#define CGFLMFILESYSTEMITEM_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "CGflmGroupItem.h"
+
+
+// FORWARD DECLARATIONS
+class TEntry;
+
+
+// CLASS DECLARATION
+
+/**
+* A class representing a file system item.
+* A file system item is either a file or a directory.
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+class CGflmFileSystemItem : public CGflmGroupItem
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmFileSystemItem* NewLC(
+ const TEntry& aFSEntry,
+ const TDesC& aBasePath );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmFileSystemItem( );
+
+ public: // New functions
+
+ /**
+ * Get the full path of the item.
+ * @since 2.0
+ * @param aPath Modifiable descriptor with atleast the size of
+ * KMaxFileName. The full path of the item will be
+ * placed in this descriptor.
+ */
+ IMPORT_C void GetFullPath( TDes& aPath ) const;
+
+ /**
+ * Sets the localized name of the item.
+ * @since 2.0
+ * @param aName A descriptor containing the localized name for the
+ entry. A copy of the name is created.
+ */
+ IMPORT_C void SetLocalizedNameL( const TDesC& aName );
+
+ /**
+ * Get reference to TEntry object of the item.
+ * @since 3.1
+ * @return A reference to TEntry object.
+ */
+ IMPORT_C const TEntry& Entry() const;
+
+ /**
+ * Get the full path of the item.
+ * @since 3.2
+ * @return Item full path. The pointer must be freed.
+ */
+ IMPORT_C HBufC* FullPathLC() const;
+
+ /**
+ * Get the full path of the item.
+ * @since 3.2
+ * @return Item full path. The pointer must be freed.
+ */
+ IMPORT_C HBufC* FullPathL() const;
+
+ public: // From CGflmGroupItem
+
+ TGflmItemType Type() const;
+
+ TPtrC Name() const;
+
+ TTime Date() const;
+
+ TInt64 Size() const;
+
+ TPtrC Ext() const;
+
+ private:
+
+ void SetExt();
+
+ protected:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmFileSystemItem(
+ const TEntry& aFSEntry,
+ const TDesC& aBasePath );
+
+ inline CGflmFileSystemItem()
+ {
+ }
+
+ inline void SetBasePath( const TDesC& aBasePath )
+ {
+ iBasePath.Set( aBasePath );
+ }
+
+ void SetEntry( const TEntry& aFSEntry );
+
+ private: // Data
+ // A reference to a TEntry object that is the actual filesystem entry
+ const TEntry* iFSEntry;
+
+ // A pointer descriptor that contains the base path of the
+ // filesystem entry.
+ TPtrC iBasePath;
+
+ // The localized name of the entry. NULL if it doesn't have one.
+ HBufC* iLocalizedName;
+
+ // A pointer descriptor that contains the file extension
+ TPtrC iExt;
+
+ };
+
+#endif // CGFLMFILESYSTEMITEM_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmGlobalActionItem.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2002-2006 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: Global action item definitions
+*
+*/
+
+
+
+#ifndef CGFLMGLOBALACTIONITEM_H
+#define CGFLMGLOBALACTIONITEM_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "CGflmGroupItem.h"
+
+
+// CLASS DECLARATION
+
+/**
+* A class representing a global action item.
+* A global item item is visible all the time in a group.
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+class CGflmGlobalActionItem : public CGflmGroupItem
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmGlobalActionItem* NewLC(
+ TInt aId, const TDesC& aCaption );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmGlobalActionItem();
+
+ public: // New functions
+ /**
+ * Returns the id of the action item
+ * @since 2.0
+ * @return Id of the item
+ */
+ IMPORT_C TInt Id() const;
+
+ public: // From CGflmGroupItem
+
+ TGflmItemType Type() const;
+
+ TPtrC Name() const;
+
+ TTime Date() const;
+
+ TInt64 Size() const;
+
+ TPtrC Ext() const;
+
+ protected: // New functions
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmGlobalActionItem();
+
+ private:
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TDesC& aCaption );
+
+ private: // Data
+
+ // Id of the action item
+ TInt iId;
+
+ // Caption of the action item
+ HBufC* iCaption;
+
+ };
+
+#endif // CGFLMGLOBALACTIONITEM_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmGroupItem.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2002-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: Group item definitions
+*
+*/
+
+
+
+#ifndef CGFLMGROUPITEM_H
+#define CGFLMGROUPITEM_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "GFLM.hrh"
+
+// FORWARD DECLARATIONS
+class MGflmItemGroup;
+
+// CLASS DECLARATION
+
+/**
+* A base class for all GFLM item classes
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+class CGflmGroupItem : public CBase
+ {
+
+ public:
+ // Data types in default priority order
+ enum TGflmItemType
+ {
+ EGlobalActionItem = 0,
+ EDrive,
+ EDirectory,
+ EFile
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmGroupItem();
+
+ public: // New functions
+
+ /**
+ * Returns the type of the item.
+ * @since 2.0
+ * @return Type of the item.
+ */
+ virtual TGflmItemType Type() const = 0;
+
+ /**
+ * Returns the name of the item.
+ * @since 2.0
+ * @return A pointer descriptor containing the name of the item.
+ */
+ virtual TPtrC Name() const = 0;
+
+ /**
+ * Returns the date of the item.
+ * @since 2.0
+ * @return A TTime object containing the date of the item.
+ */
+ virtual TTime Date() const = 0;
+
+ /**
+ * Returns the size.
+ * @since 5.0
+ * @return Size in bytes
+ */
+ virtual TInt64 Size() const = 0;
+
+ /**
+ * Returns the extension of the item.
+ * @since 5.0
+ * @return A pointer descriptor containing the extension of the item
+ */
+ virtual TPtrC Ext() const = 0;
+
+ /**
+ * Returns the icon id of the item.
+ * @since 3.1
+ * @param aIconId Reference of icon id. Filled if icon is defined.
+ * @return KErrNotFound if icon id is undefined.
+ * Otherwise KErrNone.
+ */
+ IMPORT_C TInt GetIconId( TInt& aIconId );
+
+ /**
+ * Stores the icon id of the item.
+ * @since 3.1
+ * @param aIconId Icon id of the item.
+ */
+ IMPORT_C void SetIconId( const TInt aIconId );
+
+ /**
+ * Checks if simple name comparison can be used that is
+ * significantly faster compared to normal comparison.
+ * @since 3.2
+ * @return ETrue if simple name comparison can be used, otherwise EFalse
+ */
+ TBool CanUseCompareF() const;
+
+ /**
+ * Sets the group owning the item
+ * @since 3.2
+ * @param Pointer to the group or NULL
+ */
+ void SetGroup( MGflmItemGroup* aGroup );
+
+ /**
+ * Gets sort function from method
+ * @since 5.0
+ * @param aSortMethod Given sort method
+ */
+ static TLinearOrder< CGflmGroupItem > GetSortL( TGflmSortMethod aSortMethod );
+
+ /**
+ * Compares items by name and ignores item type
+ * @since 5.0
+ * @param aFirst Given first item for comparison
+ * @param aSecond Given second item for comparison
+ * @return Comparison result
+ */
+ static TInt CompareByNameWithoutItemType(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ /**
+ * Compares items by name with item type
+ * @since 5.0
+ * @param aFirst Given first item for comparison
+ * @param aSecond Given second item for comparison
+ * @return Comparison result
+ */
+ static TInt CompareByName(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ /**
+ * Compares items by type
+ * @since 5.0
+ * @param aFirst Given first item for comparison
+ * @param aSecond Given second item for comparison
+ * @return Comparison result
+ */
+ static TInt CompareByType(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ /**
+ * Compares items by modified date and time
+ * @since 5.0
+ * @param aFirst Given first item for comparison
+ * @param aSecond Given second item for comparison
+ * @return Comparison result
+ */
+ static TInt CompareMostRecentFirst(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ /**
+ * Compares items by size
+ * @since 5.0
+ * @param aFirst Given first item for comparison
+ * @param aSecond Given second item for comparison
+ * @return Comparison result
+ */
+ static TInt CompareLargestFirst(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ protected: // New functions
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmGroupItem();
+
+ private:
+ // Internal status flags
+ enum TStatus
+ {
+ ECanUseCompareF = 0x1,
+ ECannotUseCompareF = 0x2
+ };
+
+ static TInt CompareByItemType(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond );
+
+ private: // Data
+ // Icon id of the item.
+ TInt iIconId;
+ // Internal status of the item.
+ mutable TUint iStatus;
+ // Group owning the item. Not owned.
+ MGflmItemGroup* iGroup;
+ };
+
+#endif // CGFLMGROUPITEM_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmItemGroupImpl.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2002-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: Concrete implementation of MGflmItemGroup interface
+*
+*/
+
+
+
+#ifndef CGFLMITEMGROUPIMPL_H
+#define CGFLMITEMGROUPIMPL_H
+
+
+// INCLUDES
+#include "MGflmItemGroup.h"
+#include <e32std.h>
+#include <badesca.h>
+#include <collate.h>
+
+
+// FORWARD DECLARATIONS
+class RFs;
+class CGflmDirectoryListingCache;
+class CGflmFileRecognizer;
+class CGflmItemLocalizer;
+class CGflmDriveResolver;
+class MGflmItemFilter;
+
+
+// CLASS DECLARATION
+
+/**
+* Concrete implementation of MGflmItemGroup interface
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CGflmItemGroupImpl) : public CBase, public MGflmItemGroup
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aId The new id
+ * @param aFss A reference to an open and valid file server session
+ * @param aCache A constructed directory listing cache
+ * @param aRecognizer A constructed file recognizer
+ * @param aLocalizer A constructed item localizer
+ * @param aResolver A constructed drive letter resolver
+ */
+ static CGflmItemGroupImpl* NewLC(
+ const TInt aId,
+ RFs& aFss,
+ CGflmDirectoryListingCache& aCache,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmItemGroupImpl();
+
+ public: // New functions
+
+ /**
+ * Refreshes and reformats the contents of the group
+ * @since 2.0
+ * @param aFilter MGflmItemFilter object used to to filter the contents
+ * @param aSortMethod Sort method
+ * @param aRefreshMode Refresh mode
+ */
+ void RefreshL(
+ MGflmItemFilter* aFilter,
+ TGflmSortMethod aSortMethod,
+ TGflmRefreshMode aRefreshMode );
+
+ public: // From MGflmItemGroup
+
+ TInt Id() const;
+
+ TInt ItemCount() const;
+
+ CGflmGroupItem* Item( TInt aIndex );
+
+ void AddSourceL( const TDesC& aDirectory );
+
+ void ResetSources();
+
+ void AddActionItemL( TInt aId, const TDesC& aCaption );
+
+ void SetInclusion( TUint aInclusion );
+
+ const TCollationMethod* CollationMethod();
+
+ private:
+
+ /**
+ * Constructor.
+ * @param aId The new id
+ * @param aFss A reference to an open and valid file server session
+ * @param aCache A constructed directory listing cache
+ * @param aLocalizer A constructed item localizer
+ * @param aResolver A constructed drive letter resolver
+ */
+ CGflmItemGroupImpl(
+ const TInt aId,
+ RFs& aFss,
+ CGflmDirectoryListingCache& aCache,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver );
+
+ void ConstructL();
+
+ void PopulateReferenceListL( MGflmItemFilter* aFilter );
+
+ private: // Data
+
+ // Id of the group
+ TInt iId;
+
+ // Reference to an open fileserver session
+ RFs& iFss;
+
+ // Inclusion type
+ TUint iInclusion;
+
+ // Contains (and owns) static items (action items and symbolic
+ // links) of this group
+ RPointerArray< CGflmGroupItem > iStaticItems;
+
+ // Contains (and owns) volatile items (information aquired from
+ // the filesystem) of this group
+ RPointerArray< CGflmGroupItem > iVolatileItems;
+
+ // Contains the same items as iStaticItems and iVolatileItems,
+ // but doesn't own them
+ RPointerArray< CGflmGroupItem > iItemReferences;
+
+ // Directory name
+ HBufC* iDirectory;
+
+ // Reference to a CGflmDirectoryListingCache object. Not owned.
+ CGflmDirectoryListingCache& iListingCache;
+
+ // Reference to an CGflmItemLocalizer object. Not owned.
+ CGflmItemLocalizer& iItemLocalizer;
+
+ // Reference to an CGflmDriveResolver object. Not owned.
+ CGflmDriveResolver& iDriveResolver;
+
+ // Used collation method
+ TCollationMethod iSortCollationMethod;
+
+ };
+
+#endif // CGFLMITEMGROUPIMPL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmItemLocalizer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002-2006 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 is used to provide localized names
+*
+*/
+
+
+
+#ifndef CGFLMITEMLOCALIZER_H
+#define CGFLMITEMLOCALIZER_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// FORWARD DECLARATIONS
+class CDirectoryLocalizer;
+
+
+// CLASS DECLARATION
+
+/**
+* This class is used to provide localized names to files and directories
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(CGflmItemLocalizer) : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CGflmItemLocalizer* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmItemLocalizer();
+
+ public: // New functions
+
+ /**
+ * Get the localized name of a file or a directory by it's path.
+ * Works only in main thread context.
+ * @since 2.0
+ * @param aPath A descriptor containing the full path to be localized
+ * @return A TPtrC object containing the localized name. KNullDesC
+ * if no localized name is defined.
+ */
+ TPtrC Localize( const TDesC& aPath ) const;
+
+ /**
+ * Get the localized name of a file or a directory by it's path
+ * Works only in work thread context.
+ * @since 3.2
+ * @param aPath A descriptor containing the full path to be localized
+ * @return A TPtrC object containing the localized name. KNullDesC
+ * if no localized name is defined.
+ */
+ TPtrC LocalizeFromWorkThread( const TDesC& aPath ) const;
+
+ /**
+ * Setups localizer for work thread
+ * Works only in work thread context.
+ * @since 3.2
+ */
+ void SetupWorkThreadLocalizerL();
+
+ /**
+ * Releases localizer used by work thread
+ * Works only in work thread context.
+ * @since 3.2
+ */
+ void ReleaseWorkThreadLocalizer();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmItemLocalizer();
+
+ void ConstructL();
+
+ TPtrC Localize(
+ CDirectoryLocalizer& aLocalizer, const TDesC& aPath ) const;
+
+ private: // Data
+ // Own: For localising in main thread context
+ CDirectoryLocalizer* iLocalizer;
+
+ // Own: For localising in work thread context
+ CDirectoryLocalizer* iWorkThreadLocalizer;
+
+ };
+
+#endif // CGFLMITEMLOCALIZER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/CGflmNavigatorModel.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2002-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: Navigable file list model
+*
+*/
+
+
+
+#ifndef CGFLMNAVIGATORMODEL_H
+#define CGFLMNAVIGATORMODEL_H
+
+
+// INCLUDES
+#include "CGflmFileListModel.h"
+
+
+// FORWARD DECLARATIONS
+class CGflmDriveItem;
+
+
+// CLASS DECLARATION
+
+/**
+* Decorates the file list model with navigator functionality
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+class CGflmNavigatorModel : public CGflmFileListModel
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ IMPORT_C static CGflmNavigatorModel* NewL( RFs& aFs );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CGflmNavigatorModel();
+
+ public: // New functions
+
+ /**
+ * Sets the navigator's basepath to a given directory
+ * @since 2.0
+ * @param aPath A descriptor containing the directory to enter
+ * @param aBackstepping If false the backstepping stack is reset
+ */
+ IMPORT_C void GoToDirectoryL( const TDesC& aPath,
+ TBool aBackstepping = ETrue );
+
+ /**
+ * Sets the navigator's basepath to a given directory and
+ * constructs a backstepping stack that leads from the base path
+ * to the top path one intermediate directory at a time
+ * @since 2.0
+ * @param aBasePath A descriptor containing the base path
+ * @param aTopPath A descriptor containing the directory to enter
+ */
+ IMPORT_C void GoToDirectoryL( const TDesC& aBasePath,
+ const TDesC& aTopPath );
+
+ /**
+ * Navigates one step backwards.
+ * @since 2.0
+ */
+ IMPORT_C void BackstepL();
+
+ /**
+ * Returns the current navigation directory
+ * @since 2.0
+ * @return A pointer descriptor containing the current navigation
+ * directory.
+ */
+ IMPORT_C TPtrC CurrentDirectory() const;
+
+ /**
+ * Returns the localized name of the current navigation directory
+ * @since 2.0
+ * @return A pointer descriptor containing the localized name
+ * of the current navigation directory.
+ */
+ IMPORT_C TPtrC LocalizedNameOfCurrentDirectory() const;
+
+ /**
+ * Returns the current navigation level, the depth of backstep stack
+ * @since 2.0
+ * @return Current navigation level
+ */
+ IMPORT_C TInt NavigationLevel() const;
+
+ /**
+ * Obtains a pointer to current drive (not own).
+ * @since 3.1
+ * @return Pointer to current drive or NULL.
+ */
+ IMPORT_C CGflmDriveItem* CurrentDrive() const;
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CGflmNavigatorModel( RFs& aFs );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Sets the navigator's base directory
+ * @since 2.0
+ * @param aDirectory The new base directory
+ */
+ void SetBaseDirectoryL( const TDesC& aDirectory );
+
+ void SetSourceL( const TDesC& aSource );
+
+ TBool IsValidSource( const TDesC& aSource ) const;
+
+ private: // Data
+
+ // An dynamic array holding backstepping information
+ CDesCArraySeg* iBackstepStack;
+
+ };
+
+#endif // CGFLMNAVIGATORMODEL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/GFLM.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2002-2006 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: GFLM resource header file
+*
+*/
+
+
+
+#ifndef GFLM_HRH
+#define GFLM_HRH
+
+
+// DATA TYPES
+
+enum TGflmSortMethod
+ {
+ EByName = 0,
+ EByType,
+ EMostRecentFirst,
+ ELargestFirst,
+ EByMatch
+ };
+
+enum TGflmFSItemInclusion
+ {
+ ENothing = 0,
+ EFiles = 0x1,
+ EDirectories = 0x2,
+ EDrives = 0x4
+ };
+
+enum TGflmPanicReason
+ {
+ EGlobalIndexOutOfBounds = 0,
+ EUnknownSortMethod,
+ ENotADirectory,
+ EInvalidGroupId,
+ ENotAnActionItem
+ };
+
+enum TGflmRefreshMode
+ {
+ ERefreshItems = 0,
+ ERefreshSort
+ };
+
+#endif
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/GFLMConsts.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2002-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: Contains constants of GFLM
+*
+*/
+
+
+
+#ifndef GFLMCONSTS_H
+#define GFLMCONSTS_H
+
+
+// CONSTANTS
+_LIT( KGFLMPanicText, "GFLM" );
+_LIT( KGFLMWorkThreadName, "GFLM work thread" );
+const TInt KGFLMWorkThreadStackSize( 8192 ); // 8KB
+const TInt KGFLMFileRecognizerCacheSize( 16384 ); // 16KB
+_LIT( KGFLMBackslash, "\\" );
+_LIT( KGFLMDot, "." );
+
+#endif // GFLMCONSTS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/GFLMUid.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2002-2006 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: Defines UIDs for GFLM
+*
+*/
+
+
+
+#ifndef GFLMUID_H
+#define GFLMUID_H
+
+// MACROS
+#define KSymbianDLLUid2 0x1000008d // Symbian defined
+#define KGflmUid3 0x101F84EA
+
+#endif // GFLMUID_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/GflmFileExtensionMimeTypes.rh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2002-2006 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: Resource headers for GFLM extension MIME types
+*
+*/
+
+
+STRUCT EXT_MIME_PAIR
+{
+ LTEXT extension;
+ LTEXT mime_type;
+}
+
+STRUCT EXT_MIME_PAIR_LIST
+{
+ STRUCT pairs [];
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/GflmUtils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2002-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: Static utility class for GFLM
+*
+*/
+
+
+
+#ifndef GFLMUTILS_H
+#define GFLMUTILS_H
+
+
+// INCLUDES
+#include <e32def.h>
+#include <e32std.h>
+#include "FileManagerDebug.h"
+
+// FORWARD DECLARATIONS
+class TEntry;
+
+// CLASS DECLARATION
+/**
+* GflmUtils is a static utility class
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+NONSHARABLE_CLASS(GflmUtils)
+ {
+ public:
+
+ /**
+ * Returns the index of a Nth character in a descriptor. The search
+ * is started from the end of the descriptor
+ * @since 2.0
+ * @param aDescriptor The descriptor upon which the search is made
+ * @param aChar The character that is located
+ * @param aNth Tells how many matches are made
+ * @return Index to the located character. KErrNotFound if the character
+ * was not found. KErrArgument if aNth was <= 0
+ */
+ static TInt LocateReverseNth(
+ const TDesC& aDescriptor, TChar aChar, const TInt aNth);
+
+ /**
+ * Ensures that final backslash is set
+ * @since 3.1
+ * @param aPath
+ */
+ IMPORT_C static void EnsureFinalBackslash( TDes& aPath );
+
+ /**
+ * Strips final backslash if it exists
+ * @since 3.1
+ * @param aPath
+ * @return Pointer to stripped path
+ */
+ IMPORT_C static TPtrC StripFinalBackslash( const TDesC& aPath );
+
+ /**
+ * Checks if final backslash exist
+ * @since 3.2
+ * @param aPath Directory path
+ */
+ IMPORT_C static TBool HasFinalBackslash( const TDesC& aPath );
+
+ /**
+ * Gets item full path
+ * @since 3.2
+ * @param aDir Parent directory path
+ * @param aEntry File system entry
+ * @param aFullPath Full path to item
+ */
+ IMPORT_C static void GetFullPath(
+ const TDesC& aDir, const TEntry& aEntry, TDes& aFullPath );
+
+ /**
+ * Gets item full path
+ * @since 3.2
+ * @param aDir Parent directory path
+ * @param aEntry File system entry
+ * @return Pointer to full path
+ */
+ IMPORT_C static HBufC* FullPathLC(
+ const TDesC& aDir, const TEntry& aEntry );
+
+ /**
+ * Gets item full path
+ * @since 3.2
+ * @param aDir Parent directory path
+ * @param aEntry File system entry
+ * @return Pointer to full path
+ */
+ IMPORT_C static HBufC* FullPathL(
+ const TDesC& aDir, const TEntry& aEntry );
+
+ /**
+ * Strips final dot if it exists
+ * @since 3.1
+ * @param aPath
+ * @return Pointer to stripped path
+ */
+ static TPtrC StripFinalDot( const TDesC& aPath );
+
+ /**
+ * Strips given string from end if it exists
+ * @since 3.2
+ * @param aString
+ * @param aStringToStrip
+ * @return Pointer to stripped string
+ */
+ static TPtrC StripFinal( const TDesC& aString, const TDesC& aStringToStrip );
+
+ /**
+ * Checks if string contains any wild cards
+ * @since 3.2
+ * @param aString
+ * @return ETrue if string contains a wild card. Otherwise EFalse.
+ */
+ static TBool HasWildCard( const TDesC& aString );
+
+ };
+
+#endif // GFLMUTILS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/MGflmItemFilter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2002-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: Defines an interface for making a custom filter to GFLM
+*
+*/
+
+
+
+#ifndef MGFLMITEMFILTER_H
+#define MGFLMITEMFILTER_H
+
+
+// INCLUDES
+#include <e32def.h>
+
+
+// FORWARD DECLARATIONS
+class CGflmGroupItem;
+class CGflmDriveItem;
+
+
+// CLASS DECLARATION
+
+/**
+* Defines an interface for making a custom filter to GFLM.
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+class MGflmItemFilter
+ {
+ public: // New functions
+
+ /**
+ * This method is called for every item to be filtered
+ * Note that the method is run in work thread space
+ * @since 2.0
+ * @param aItem Group item to be filtered
+ * @param aGroupId Id of the group to which the item belongs
+ * @param aDrive The drive where item is located, NULL if data is unavailable
+ * @return True if item was accepted, false if not
+ */
+ virtual TBool FilterItemL(
+ CGflmGroupItem* aItem,
+ TInt aGroupId,
+ CGflmDriveItem* aDrive ) = 0;
+
+ };
+
+#endif // MGFLMITEMFILTER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/inc/MGflmItemGroup.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2002-2006 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: Defines an interface for GFLM clients to access item groups
+*
+*/
+
+
+
+#ifndef MGFLMITEMGROUP_H
+#define MGFLMITEMGROUP_H
+
+
+// INCLUDES
+#include "GFLM.hrh"
+#include <e32std.h>
+
+
+// FORWARD DECLARATIONS
+class CGflmGroupItem;
+
+
+// CLASS DECLARATION
+
+/**
+* Defines an interface for GFLM clients to access item groups
+*
+* @lib GFLM.lib
+* @since 2.0
+*/
+class MGflmItemGroup
+ {
+ public: // New functions
+
+ /**
+ * Returns the Id of the group
+ * @since 2.0
+ * @return Id of the group
+ */
+ virtual TInt Id() const = 0;
+
+ /**
+ * Returns the number of items in the group
+ * @since 2.0
+ * @return Number of items in the group
+ */
+ virtual TInt ItemCount() const = 0;
+
+ /**
+ * Returns a pointer to a specific item in the group by its index
+ * @since 2.0
+ * @param aIndex Index of the requested CGflmGroupItem object
+ * @return Pointer to a CGflmGroupItem object
+ */
+ virtual CGflmGroupItem* Item( TInt aIndex ) = 0;
+
+ /**
+ * Adds a new filesystem source to the group
+ * @since 2.0
+ * @param aDirectory Path of the directory to add to the group
+ */
+ virtual void AddSourceL( const TDesC& aDirectory ) = 0;
+
+ /**
+ * Resets the list of filesystem sources
+ * @since 2.0
+ */
+ virtual void ResetSources() = 0;
+
+ /**
+ * Adds a new action item to the group
+ * @since 2.0
+ * @param aId Id of the new action item
+ * @param aCaption Caption of the new action item
+ */
+ virtual void AddActionItemL( TInt aId, const TDesC& aCaption ) = 0;
+
+ /**
+ * Sets the inclusion mode (files/directories) of the group
+ * @since 2.0
+ * @param aInclusion New inclusion mode. See TGflmFSItemInclusion.
+ */
+ virtual void SetInclusion( TUint aInclusion ) = 0;
+
+ /**
+ * Gets the collation method
+ * @since 5.0
+ * @return Pointer to collation method
+ */
+ virtual const TCollationMethod* CollationMethod() = 0;
+
+ };
+
+#endif // MGFLMITEMGROUP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmDirectoryListingCache.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2002-2006 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: Provides directory listing cache
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmDirectoryListingCache.h"
+#include "GFLM.hrh"
+#include "GflmUtils.h"
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <f32file.h>
+#else
+#include <f32file.h>
+#include <f32file_private.h>
+#endif
+#include <e32std.h>
+
+
+// CONSTANTS
+const TInt KListingGranularity = 0x2000; // 8KB
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::CGflmDirectoryListingCache
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmDirectoryListingCache::CGflmDirectoryListingCache(
+ RFs& aFss,
+ const TBool& aCancelIndicator ) :
+ iFss( aFss ),
+ iCancelIndicator( aCancelIndicator )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmDirectoryListingCache* CGflmDirectoryListingCache::NewL(
+ RFs& aFss,
+ const TBool& aCancelIndicator )
+ {
+ return new( ELeave ) CGflmDirectoryListingCache(
+ aFss, aCancelIndicator );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::~CGflmDirectoryListingCache()
+// -----------------------------------------------------------------------------
+//
+CGflmDirectoryListingCache::~CGflmDirectoryListingCache()
+ {
+ delete iCache;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::ClearCache()
+// -----------------------------------------------------------------------------
+//
+void CGflmDirectoryListingCache::ClearCache()
+ {
+ iClearCache = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::ListingL()
+// Looks if a directory's listing is already loaded and returns it. If the
+// the listing is not found, it's read and added to the cache.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const CGflmDirectoryListingCache::CEntryArray*
+ CGflmDirectoryListingCache::ListingL( const TDesC& aDirectory )
+ {
+
+ TIMESTAMP( "GFLM listing fetch started: " )
+
+ // Clear directory cache first if needed
+ if ( iClearCache )
+ {
+ delete iCache;
+ iCache = NULL;
+ iClearCache = EFalse;
+ }
+
+ // Check if directory is already cached
+ TBool found( EFalse );
+ if ( iCache && !aDirectory.Compare( *( iCache->iDirectory ) ) )
+ {
+ found = ETrue;
+ }
+
+ if ( !found )
+ {
+ // Read directory to cache
+ CListingNamePair* newPair = CListingNamePair::NewLC( aDirectory );
+ GetDirL( *newPair );
+ CleanupStack::Pop( newPair );
+ delete iCache;
+ iCache = NULL;
+ iCache = newPair;
+ }
+
+ TIMESTAMP( "GFLM listing fetch ended: " )
+
+ return iCache->iListing;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::GetDirL
+// -----------------------------------------------------------------------------
+//
+void CGflmDirectoryListingCache::GetDirL( CListingNamePair& aPair )
+ {
+ RDir dir;
+ User::LeaveIfError( dir.Open(
+ iFss,
+ *aPair.iDirectory,
+ KEntryAttNormal | KEntryAttDir ) );
+ CleanupClosePushL( dir );
+
+ TInt err( KErrNone );
+
+ do
+ {
+ if ( iCancelIndicator )
+ {
+ // User has canceled the operation, abort
+ User::Leave( KErrCancel );
+ }
+
+ err = dir.Read( iEntryBuffer );
+ if ( err == KErrNone || err == KErrEof )
+ {
+ TInt entryCount( iEntryBuffer.Count() );
+ if ( !entryCount )
+ {
+ break;
+ }
+ for ( TInt i( 0 ); i < entryCount; i++ )
+ {
+ const TEntry& entry( iEntryBuffer[ i ] );
+ TInt entrySize( EntrySize( entry ) );
+ aPair.iListing->AppendL( entry, entrySize );
+ }
+ }
+
+ }while ( err == KErrNone );
+
+ if ( err != KErrNone && err != KErrEof )
+ {
+ User::Leave( err );
+ }
+
+ CleanupStack::PopAndDestroy( &dir );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::CListingNamePair::~CListingNamePair()
+// -----------------------------------------------------------------------------
+//
+CGflmDirectoryListingCache::CListingNamePair::~CListingNamePair()
+ {
+ delete iDirectory;
+
+ if ( iListing )
+ {
+ iListing->Reset();
+ delete iListing;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::CListingNamePair::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CGflmDirectoryListingCache::CListingNamePair::ConstructL(
+ const TDesC& aDirectory )
+ {
+ iDirectory = aDirectory.AllocL();
+ iListing = new( ELeave ) CEntryArray( KListingGranularity );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDirectoryListingCache::CListingNamePair::NewLC()
+// -----------------------------------------------------------------------------
+//
+CGflmDirectoryListingCache::CListingNamePair*
+ CGflmDirectoryListingCache::CListingNamePair::NewLC(
+ const TDesC& aDirectory )
+ {
+ CListingNamePair* self = new ( ELeave ) CListingNamePair();
+ CleanupStack::PushL( self );
+ self->ConstructL( aDirectory );
+ return self;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmDriveItem.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* 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: Drive item definitions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmDriveItem.h"
+#include "GflmUtils.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::CGflmDriveItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmDriveItem::CGflmDriveItem(
+ const TInt aDrive,
+ const TVolumeInfo& aVolume,
+ const TInt aVolumeStatus,
+ const TUint aDriveStatus )
+ : iVolume( aVolume ),
+ iDrive( aDrive ),
+ iVolumeStatus( aVolumeStatus ),
+ iDriveStatus( aDriveStatus )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmDriveItem* CGflmDriveItem::NewLC(
+ const TInt aDrive,
+ const TVolumeInfo& aVolume,
+ const TInt aVolumeStatus,
+ const TUint aDriveStatus )
+ {
+ CGflmDriveItem* self = new( ELeave ) CGflmDriveItem(
+ aDrive,
+ aVolume,
+ aVolumeStatus,
+ aDriveStatus );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmDriveItem::ConstructL()
+ {
+ SetRootDirectoryL( TDriveUnit( iDrive ).Name() );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::~CGflmDriveItem
+//
+// -----------------------------------------------------------------------------
+//
+CGflmDriveItem::~CGflmDriveItem()
+ {
+ delete iLocalizedName;
+ delete iRootDir;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::Type
+//
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem::TGflmItemType CGflmDriveItem::Type() const
+ {
+ return EDrive;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::Name
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmDriveItem::Name() const
+ {
+ if ( iLocalizedName )
+ {
+ return iLocalizedName->Des();
+ }
+ return TPtrC( iVolume.iName );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::Date
+//
+// -----------------------------------------------------------------------------
+//
+TTime CGflmDriveItem::Date() const
+ {
+ return TTime( 0 );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::Size
+//
+// -----------------------------------------------------------------------------
+//
+TInt64 CGflmDriveItem::Size() const
+ {
+ return 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::Ext
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmDriveItem::Ext() const
+ {
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::SetLocalizedNameL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmDriveItem::SetLocalizedNameL( const TDesC& aName )
+ {
+ HBufC* temp = aName.AllocL();
+ delete iLocalizedName;
+ iLocalizedName = temp;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::SetRootDirectoryL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmDriveItem::SetRootDirectoryL( const TDesC& aPath )
+ {
+ const TInt KFmgrBackslashSpace = 1;
+ TInt len( aPath.Length() );
+ HBufC* temp = HBufC::NewL( len + KFmgrBackslashSpace );
+ TPtr ptr( temp->Des() );
+ ptr.Copy( aPath );
+ GflmUtils::EnsureFinalBackslash( ptr );
+ delete iRootDir;
+ iRootDir = temp;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::RootDirectory
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CGflmDriveItem::RootDirectory() const
+ {
+ return iRootDir->Des();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::GetVolumeInfo
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TVolumeInfo& CGflmDriveItem::VolumeInfo() const
+ {
+ return iVolume;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::Drive
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CGflmDriveItem::Drive() const
+ {
+ return iDrive;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::VolumeStatus
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CGflmDriveItem::VolumeStatus() const
+ {
+ return iVolumeStatus;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveItem::DriveStatus
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint CGflmDriveItem::DriveStatus() const
+ {
+ return iDriveStatus;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmDriveResolver.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002-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: Resolves different media types' drive letters
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmDriveResolver.h"
+#include "CGflmDriveItem.h"
+#include "MGflmItemFilter.h"
+#include "GflmUtils.h"
+#include <f32file.h>
+#ifdef RD_MULTIPLE_DRIVE
+ #include <driveinfo.h>
+#endif // RD_MULTIPLE_DRIVE
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::CGflmDriveResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmDriveResolver::CGflmDriveResolver( RFs& aFs ) :
+ iFs( aFs )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmDriveResolver* CGflmDriveResolver::NewL( RFs& aFs )
+ {
+ CGflmDriveResolver* self = new ( ELeave ) CGflmDriveResolver( aFs );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CGflmDriveResolver::ConstructL()
+ {
+ User::LeaveIfError( iCs.CreateLocal() );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::~CGflmDriveResolver
+//
+// -----------------------------------------------------------------------------
+//
+CGflmDriveResolver::~CGflmDriveResolver()
+ {
+ iDrives.ResetAndDestroy();
+ iDrives.Close();
+ iCs.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::RefreshDrives()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CGflmDriveResolver::RefreshDrives( MGflmItemFilter* aFilter )
+ {
+ iCs.Wait();
+
+ TRAPD( ret, RefreshDrivesL( aFilter ) );
+
+ LOG_IF_ERROR1(
+ ret, "CGflmDriveResolver::RefreshDrives-ret=%d", ret )
+
+ iCs.Signal();
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::RefreshDrivesL()
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmDriveResolver::RefreshDrivesL( MGflmItemFilter* aFilter )
+ {
+ TIMESTAMP( "GFLM refresh drives started: " )
+
+ if ( !iRefreshed )
+ {
+ iDrives.ResetAndDestroy();
+ TDriveList drives;
+ User::LeaveIfError( iFs.DriveList( drives, KDriveAttAll ) );
+ TInt count( drives.Length() );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ if ( drives[ i ] )
+ {
+ AppendDriveL( i, aFilter );
+ }
+ }
+ iRefreshed = ETrue;
+ }
+
+ TIMESTAMP( "GFLM refresh drives ended: " )
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::DriveCount()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CGflmDriveResolver::DriveCount() const
+ {
+ return iDrives.Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::DriveAt()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmDriveItem* CGflmDriveResolver::DriveAt( const TInt aIndex ) const
+ {
+ return iDrives[ aIndex ];
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::DriveFromPath()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmDriveItem* CGflmDriveResolver::DriveFromPath( const TDesC& aPath ) const
+ {
+ TInt drv( 0 );
+ if ( aPath.Length() &&
+ RFs::CharToDrive( aPath[ 0 ], drv ) == KErrNone )
+ {
+ return DriveFromId( drv );
+ }
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::ClearDrives()
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmDriveResolver::ClearDrives()
+ {
+ iRefreshed = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::IsRootPath()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CGflmDriveResolver::IsRootPath( const TDesC& aPath ) const
+ {
+ TInt count( iDrives.Count() );
+ TInt pathLen( aPath.Length() );
+
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ CGflmDriveItem* drvItem = iDrives[ i ];
+ TPtrC root( drvItem->RootDirectory() );
+
+ if ( pathLen == root.Length() && !root.CompareF( aPath ) )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::AppendDriveL()
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmDriveResolver::AppendDriveL(
+ const TInt aDrive, MGflmItemFilter* aFilter )
+ {
+ INFO_LOG1( "CGflmDriveResolver::AppendDriveL()-aDrive=%d", aDrive )
+
+ TVolumeInfo volInfo;
+ TInt err( iFs.Volume( volInfo, aDrive ) );
+
+ LOG_IF_ERROR1( err, "CGflmDriveResolver::AppendDriveL()-err=%d", err )
+
+ if ( err != KErrNone )
+ {
+ TInt err2( iFs.Drive( volInfo.iDrive, aDrive ) );
+
+ LOG_IF_ERROR1( err2, "CGflmDriveResolver::AppendDriveL()-err2=%d", err )
+
+ if ( err2 != KErrNone )
+ {
+ return;
+ }
+ }
+
+ TDriveInfo& drvInfo( volInfo.iDrive );
+ if ( drvInfo.iMediaAtt & KMediaAttLocked )
+ {
+ err = KErrLocked;
+ }
+ if ( drvInfo.iType == EMediaNotPresent )
+ {
+ err = KErrNotReady;
+ }
+
+ TUint drvStatus( 0 );
+
+#ifdef RD_MULTIPLE_DRIVE
+ TInt err3( DriveInfo::GetDriveStatus( iFs, aDrive, drvStatus ) );
+ LOG_IF_ERROR1( err3, "CGflmDriveResolver::AppendDriveL()-err3=%d", err3 )
+ if ( err3 != KErrNone )
+ {
+ // Supress error
+ }
+#endif // RD_MULTIPLE_DRIVE
+
+ CGflmDriveItem* drvItem = CGflmDriveItem::NewLC(
+ aDrive, volInfo, err, drvStatus );
+
+ if ( drvInfo.iDriveAtt & KDriveAttRemote )
+ {
+ // Get remote drive name
+ if ( iFs.GetDriveName( aDrive, iReadBuffer ) == KErrNone )
+ {
+ drvItem->SetLocalizedNameL( iReadBuffer );
+ }
+ }
+
+ TBool allowed( ETrue );
+ if ( aFilter )
+ {
+ allowed = aFilter->FilterItemL( drvItem, 0, NULL );
+ }
+ if ( allowed )
+ {
+ iDrives.AppendL( drvItem );
+ CleanupStack::Pop( drvItem );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( drvItem );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::IsRemoteDrive()
+//
+// -----------------------------------------------------------------------------
+//
+TBool CGflmDriveResolver::IsRemoteDrive( const TDesC& aPath ) const
+ {
+ CGflmDriveItem* drv = DriveFromPath( aPath );
+ if ( drv )
+ {
+ const TVolumeInfo& vol( drv->VolumeInfo() );
+ if ( vol.iDrive.iDriveAtt & KDriveAttRemote )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmDriveResolver::DriveFromId()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmDriveItem* CGflmDriveResolver::DriveFromId( const TInt aDrive ) const
+ {
+ TInt count( iDrives.Count() );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ CGflmDriveItem* drvItem = iDrives[ i ];
+ if ( aDrive == drvItem->Drive() )
+ {
+ return drvItem;
+ }
+ }
+ return NULL;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmFileFinder.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,408 @@
+/*
+* Copyright (c) 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: Searches items matching with given string in given file system
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <f32file.h>
+#include <bautils.h>
+#include "CGflmFileFinder.h"
+#include "CGflmFileFinderItem.h"
+#include "CGflmDriveItem.h"
+#include "CGflmDriveResolver.h"
+#include "CGflmItemLocalizer.h"
+#include "MGflmItemFilter.h"
+#include "GflmUtils.h"
+
+// CONSTANTS
+const TInt KWildCardSpace = 2;
+_LIT( KWildCard, "*" );
+const TInt KSearchResultsGranularity = 32;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// MakeWildStringL
+// -----------------------------------------------------------------------------
+//
+static HBufC* MakeWildStringL( const TDesC& aString )
+ {
+ if ( GflmUtils::HasWildCard( aString ) )
+ {
+ return aString.AllocL();
+ }
+ HBufC* ret = HBufC::NewL( aString.Length() + KWildCardSpace );
+ TPtr ptr( ret->Des() );
+ ptr.Copy( KWildCard );
+ ptr.Append( aString );
+ ptr.Append( KWildCard );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// MakeWildPathL
+// -----------------------------------------------------------------------------
+//
+#if 0
+static HBufC* MakeWildPathL( const TDesC& aFolder, const TDesC& aString )
+ {
+ const TInt KBackslashSpace = 1;
+ if ( !GflmUtils::HasWildCard( aString ) )
+ {
+ return aFolder.AllocL();
+ }
+ HBufC* ret = HBufC::NewL(
+ aFolder.Length() + aString.Length() + KBackslashSpace );
+ TPtr ptr( ret->Des() );
+ ptr.Copy( aFolder );
+ GflmUtils::EnsureFinalBackslash( ptr );
+ ptr.Append( aString );
+ return ret;
+ }
+#endif // 0
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::CGflmFileFinder
+// -----------------------------------------------------------------------------
+//
+CGflmFileFinder::CGflmFileFinder(
+ RFs& aFss,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver,
+ const TBool& aCancelIndicator ) :
+ iFss( aFss ),
+ iItemLocalizer( aLocalizer ),
+ iDriveResolver( aResolver ),
+ iCancelIndicator( aCancelIndicator ),
+ iSearchResults( KSearchResultsGranularity )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::NewL
+// -----------------------------------------------------------------------------
+//
+CGflmFileFinder* CGflmFileFinder::NewL(
+ RFs& aFss,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver,
+ const TBool& aCancelIndicator )
+ {
+ CGflmFileFinder* self = new( ELeave ) CGflmFileFinder(
+ aFss, aLocalizer, aResolver, aCancelIndicator );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::ConstructL()
+ {
+ iSortCollationMethod = *Mem::CollationMethodByIndex( 0 );
+ iSortCollationMethod.iFlags |=
+ TCollationMethod::EIgnoreNone | TCollationMethod::EFoldCase;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::~CGflmFileFinder
+// -----------------------------------------------------------------------------
+//
+CGflmFileFinder::~CGflmFileFinder()
+ {
+ delete iSearchFolder;
+ delete iSearchFolderWild;
+ delete iSearchString;
+ delete iSearchStringWild;
+ iSearchResults.ResetAndDestroy();
+ iSearchResults.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::SetSearchFolderL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::SetSearchFolderL( const TDesC& aSearchFolder )
+ {
+ delete iSearchFolderWild;
+ iSearchFolderWild = NULL;
+
+ delete iSearchFolder;
+ iSearchFolder = NULL;
+ iSearchFolder = aSearchFolder.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::SetSearchStringL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::SetSearchStringL( const TDesC& aSearchString )
+ {
+ delete iSearchFolderWild;
+ iSearchFolderWild = NULL;
+
+ delete iSearchString;
+ iSearchString = NULL;
+ iSearchString = aSearchString.AllocL();
+
+ delete iSearchStringWild;
+ iSearchStringWild = NULL;
+ iSearchStringWild = MakeWildStringL( aSearchString );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::RefreshL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::RefreshL(
+ MGflmItemFilter* aFilter,
+ TGflmSortMethod aSortMethod,
+ TGflmRefreshMode aRefreshMode )
+ {
+ FUNC_LOG
+
+ INFO_LOG2(
+ "CGflmItemGroupImpl::RefreshL-aRefreshMode=%d, aSortMethod=%d",
+ aRefreshMode, aSortMethod )
+
+ if ( aRefreshMode == ERefreshItems )
+ {
+ TRAPD( err, DoSearchL( aFilter ) );
+
+ // If error just log it and show already found items
+ if ( err != KErrNone )
+ {
+ ERROR_LOG1( "CGflmFileFinder::RefreshL-err=%d", err )
+ }
+ }
+
+ if ( aSortMethod == EByMatch )
+ {
+ iSearchResults.Sort( CGflmFileFinderItem::CompareByMatch );
+ }
+ else
+ {
+ iSearchResults.Sort( CGflmGroupItem::GetSortL( aSortMethod ) );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::DoSearchL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::DoSearchL( MGflmItemFilter* aFilter )
+ {
+ FUNC_LOG
+
+ iSearchResults.ResetAndDestroy();
+
+ // Ensure that search data is defined
+ if ( !iSearchFolder || !iSearchString || !iSearchStringWild )
+ {
+ return;
+ }
+ // Ensure that search drive exists
+ CGflmDriveItem* drvItem = iDriveResolver.DriveFromPath( *iSearchFolder );
+ if ( !drvItem )
+ {
+ return;
+ }
+ if ( !iSearchFolderWild )
+ {
+#if 0
+ if ( iDriveResolver.IsRemoteDrive( *iSearchFolder ) )
+ {
+ // Some remote drives are case sensitive with wild cards.
+ // Therefore, wild cards cannot be used for remote drives,
+ // because then it is not possible to do case
+ // insensitive comparison like it is done for local drives.
+ iSearchFolderWild = iSearchFolder->AllocL();
+ }
+ else
+ {
+ // Do search using the folder with wild string for better performance.
+ // It is faster to let file server do the wild matching instead of
+ // reading all subitems under search folder to be matched here.
+
+ // Prepare search folder with wild search string
+ iSearchFolderWild = MakeWildPathL(
+ *iSearchFolder, *iSearchStringWild );
+ }
+#else
+ // Because of problems with localized folder names,
+ // wild card folder string cannot be given to file server since
+ // file server is not aware of localized names.
+ // This search operation is slower because all items are transferred
+ // here for comparison.
+ iSearchFolderWild = iSearchFolder->AllocL();
+#endif
+ }
+
+ INFO_LOG1( "CGflmFileFinder::DoSearchL-CDirScan::NewLC-%S",
+ iSearchFolderWild )
+ CDirScan* dirScan = CDirScan::NewLC( iFss );
+
+ INFO_LOG( "CGflmFileFinder::DoSearchL-CDirScan::SetScanDataL" )
+ dirScan->SetScanDataL( *iSearchFolderWild, KEntryAttDir, ESortNone );
+
+ INFO_LOG( "CGflmFileFinder::DoSearchL-CDirScan::NextL" )
+ CDir* dir = NULL;
+ dirScan->NextL( dir );
+
+ while( dir )
+ {
+ CleanupStack::PushL( dir );
+ if ( iCancelIndicator )
+ {
+ User::Leave( KErrCancel );
+ }
+ TPtrC basePath( dirScan->FullPath() );
+ INFO_LOG1( "CGflmFileFinder::DoSearchL-Search-%S", &basePath )
+
+ TInt count( dir->Count() );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ if ( iCancelIndicator )
+ {
+ User::Leave( KErrCancel );
+ }
+ const TEntry& entry( ( *dir )[ i ] );
+ TPtrC name( entry.iName );
+ TBool isLocalized( EFalse );
+ TBool isDir( entry.IsDir() );
+ if( isDir )
+ {
+ // Handle localized name
+ GflmUtils::GetFullPath( basePath, entry, iFullPath );
+ TPtrC localizedName(
+ iItemLocalizer.LocalizeFromWorkThread( iFullPath ) );
+ if ( localizedName.Length() )
+ {
+ name.Set( localizedName );
+ isLocalized = ETrue;
+ }
+ }
+ // Append matching items
+ if( name.MatchC( *iSearchStringWild ) != KErrNotFound )
+ {
+ CGflmFileFinderItem* finderItem = CGflmFileFinderItem::NewLC(
+ entry, basePath );
+ if ( isLocalized )
+ {
+ finderItem->SetLocalizedNameL( name );
+ }
+ // Filter out unwanted items
+ if ( !aFilter ||
+ ( aFilter && aFilter->FilterItemL(
+ finderItem,
+ isDir ? CGflmGroupItem::EDirectory : CGflmGroupItem::EFile,
+ drvItem ) ) )
+ {
+ finderItem->PrepareSort( *iSearchString );
+ finderItem->SetGroup( this );
+ iSearchResults.AppendL( finderItem );
+ CleanupStack::Pop( finderItem );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( finderItem );
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( dir );
+
+ INFO_LOG( "CGflmFileFinder::DoSearchL-CDirScan::NextL" )
+ dirScan->NextL( dir );
+ }
+ CleanupStack::PopAndDestroy( dirScan );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::ItemCount
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileFinder::ItemCount() const
+ {
+ return iSearchResults.Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::Item
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem* CGflmFileFinder::Item( TInt aIndex )
+ {
+ return iSearchResults[ aIndex ];
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::Id
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileFinder::Id() const
+ {
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::AddSourceL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::AddSourceL( const TDesC& /*aDirectory*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::ResetSources
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::ResetSources()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::AddActionItemL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::AddActionItemL( TInt /*aId*/, const TDesC& /*aCaption*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::SetInclusion
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinder::SetInclusion( TUint /*aInclusion*/ )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinder::CollationMethod
+// -----------------------------------------------------------------------------
+//
+const TCollationMethod* CGflmFileFinder::CollationMethod()
+ {
+ return &iSortCollationMethod;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmFileFinderItem.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 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: File finder item definitions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <f32file.h>
+#include "CGflmFileFinderItem.h"
+#include "GflmUtils.h"
+
+// CONSTANTS
+const TInt16 KExactMatch = 0;
+const TInt16 KBeginMatch = 1;
+const TInt16 KNoMatch = KMaxTInt16;
+
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// GetSortValue
+// -----------------------------------------------------------------------------
+//
+TInt16 GetSortValue( const TDesC& aName, const TDesC& aSearchString )
+ {
+ TInt16 ret( 0 );
+ TInt pos( 0 );
+ if ( GflmUtils::HasWildCard( aSearchString ) )
+ {
+ pos = aName.MatchC( aSearchString );
+ if ( pos != KErrNotFound )
+ {
+ ret = KBeginMatch + pos;
+ }
+ else
+ {
+ ret = KNoMatch;
+ }
+ }
+ else
+ {
+ pos = aName.FindC( aSearchString );
+ if ( !pos && aName.Length() == aSearchString.Length() )
+ {
+ ret = KExactMatch;
+ }
+ else if ( pos != KErrNotFound )
+ {
+ ret = KBeginMatch + pos;
+ }
+ else
+ {
+ ret = KNoMatch;
+ }
+ }
+ return ret;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinderItem::CGflmFileFinderItem
+// -----------------------------------------------------------------------------
+//
+CGflmFileFinderItem::CGflmFileFinderItem( const TEntry& aEntry ) :
+ iEntry( aEntry )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinderItem::NewLC
+// -----------------------------------------------------------------------------
+//
+CGflmFileFinderItem* CGflmFileFinderItem::NewLC(
+ const TEntry& aFSEntry,
+ const TDesC& aBasePath )
+ {
+ CGflmFileFinderItem* self = new( ELeave ) CGflmFileFinderItem( aFSEntry );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aBasePath );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinderItem::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinderItem::ConstructL( const TDesC& aBasePath )
+ {
+ iBasePath = aBasePath.AllocL();
+ SetBasePath( *iBasePath );
+ SetEntry( iEntry );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinderItem::~CGflmFileFinderItem
+// -----------------------------------------------------------------------------
+//
+CGflmFileFinderItem::~CGflmFileFinderItem()
+ {
+ delete iBasePath;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinderItem::PrepareSort
+// -----------------------------------------------------------------------------
+//
+void CGflmFileFinderItem::PrepareSort(
+ const TDesC& aSearchString )
+ {
+ iSortValue = GetSortValue( Name(), aSearchString );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileFinderItem::CompareByMatch
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileFinderItem::CompareByMatch(
+ const CGflmGroupItem& aFirst,
+ const CGflmGroupItem& aSecond )
+ {
+ const CGflmFileFinderItem& first(
+ static_cast< const CGflmFileFinderItem& >( aFirst ) );
+ const CGflmFileFinderItem& second(
+ static_cast< const CGflmFileFinderItem& >( aSecond ) );
+
+ if ( first.iSortValue == second.iSortValue )
+ {
+ // If both sort value is the same then the directory should be first
+ TBool isFirstDir( first.iEntry.IsDir() );
+ TBool isSecondDir( second.iEntry.IsDir() );
+ if ( isFirstDir && !isSecondDir )
+ {
+ return -1;
+ }
+ if ( !isFirstDir && isSecondDir )
+ {
+ return 1;
+ }
+ // If even then alphabetical order is used
+ return CompareByNameWithoutItemType( aFirst, aSecond );
+ }
+ if ( first.iSortValue < second.iSortValue )
+ {
+ return -1;
+ }
+ return 1;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmFileListModel.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,686 @@
+/*
+* Copyright (c) 2002-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: File list model
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmFileListModel.h"
+#include "MGflmItemGroup.h"
+#include "CGflmItemGroupImpl.h"
+#include "CGflmDirectoryListingCache.h"
+#include "CGflmFileRecognizer.h"
+#include "CGflmDriveResolver.h"
+#include "CGflmItemLocalizer.h"
+#include "CGflmFileSystemItem.h"
+#include "CGflmGlobalActionItem.h"
+#include "CGflmFileFinder.h"
+#include "MGflmItemFilter.h"
+#include "GflmUtils.h"
+#include "GFLMConsts.h"
+#include "GFLM.hrh"
+#include <e32base.h>
+#include <e32std.h>
+#include <badesca.h>
+
+
+// CONSTANTS
+
+// Granularity of iGroups array
+const TInt KItemGroupArrayGranularity = 3;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::CGflmFileListModel
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmFileListModel::CGflmFileListModel( RFs& aFs ) :
+ CActive( CActive::EPriorityStandard ),
+ iFs( aFs )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGflmFileListModel* CGflmFileListModel::NewL( RFs& aFs )
+ {
+ CGflmFileListModel* self = new( ELeave ) CGflmFileListModel( aFs );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::ConstructL()
+ {
+ FUNC_LOG
+
+ CActiveScheduler::Add( this );
+
+ iGroups = new( ELeave )
+ CArrayPtrSeg< CGflmItemGroupImpl >
+ ( KItemGroupArrayGranularity );
+ iListingCache = CGflmDirectoryListingCache::NewL( iFs, iCanceled );
+ iDriveResolver = CGflmDriveResolver::NewL( iFs );
+ iFileRecognizer = CGflmFileRecognizer::NewL(
+ iFs, KGFLMFileRecognizerCacheSize, iDriveResolver );
+ iItemLocalizer = CGflmItemLocalizer::NewL();
+ iFileFinder = CGflmFileFinder::NewL(
+ iFs, *iItemLocalizer, *iDriveResolver, iCanceled );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::~CGflmFileListModel
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileListModel::~CGflmFileListModel()
+ {
+ FUNC_LOG
+
+ Cancel();
+ if ( iGroups )
+ {
+ iGroups->ResetAndDestroy();
+ delete iGroups;
+ }
+ delete iFileFinder;
+ delete iListingCache;
+ delete iFileRecognizer;
+ delete iItemLocalizer;
+ delete iDriveResolver;
+ iSemaphore.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::RefreshListL()
+// Creates and starts the work thread that refreshes the model
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::RefreshListL(
+ TRequestStatus& aStatus, TGflmRefreshMode aRefreshMode )
+ {
+ FUNC_LOG
+
+ if ( aStatus == KRequestPending )
+ {
+ return;
+ }
+
+ iCorrupt = ETrue;
+ iClientStatus = &aStatus;
+ *iClientStatus = KRequestPending;
+ iClientId = RThread().Id();
+
+ if ( iShutdown )
+ {
+ // Ensure client completion
+ NotifyClient( KErrNone );
+ return;
+ }
+
+ iCanceled = EFalse;
+
+ if ( !IsActive() )
+ {
+ // Create the work thread to do refresh
+ iSemaphore.Close();
+ User::LeaveIfError( iSemaphore.CreateLocal( 0 ) );
+
+ RThread workThread;
+ TInt err( workThread.Create(
+ KGFLMWorkThreadName,
+ WorkThreadStart,
+ KGFLMWorkThreadStackSize,
+ NULL,
+ this ) );
+ LOG_IF_ERROR1( err, "CGflmFileListModel::RefreshListL-err1=%d", err )
+ User::LeaveIfError( err );
+ workThread.SetPriority( EPriorityLess );
+ workThread.Logon( iStatus );
+ SetActive();
+ iRefreshMode = aRefreshMode;
+ workThread.Resume();
+ workThread.Close();
+ }
+ else
+ {
+ // Signal the work thread to do refresh
+ iRefreshMode = aRefreshMode;
+ iSemaphore.Signal();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::WorkThreadStart()
+// An entry point function for the work thread
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileListModel::WorkThreadStart( TAny* aPtr )
+ {
+ FUNC_LOG
+
+ CGflmFileListModel* self = static_cast< CGflmFileListModel* >( aPtr );
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+ if ( !cleanupStack )
+ {
+ ERROR_LOG1(
+ "CGflmFileListModel::WorkThreadStart-err1=%d", KErrNoMemory )
+ return KErrNoMemory;
+ }
+
+ TRAPD( err, self->iItemLocalizer->SetupWorkThreadLocalizerL() );
+ LOG_IF_ERROR1( err, "CGflmFileListModel::WorkThreadStart-err2=%d", err )
+
+ self->WorkThread();
+ self->iItemLocalizer->ReleaseWorkThreadLocalizer();
+ delete cleanupStack;
+
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::WorkThread()
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::WorkThread()
+ {
+ TInt err( KErrNone );
+ do
+ {
+
+ // Do refresh
+ iCorrupt = ETrue;
+ err = KErrNone;
+
+ TRAP( err, DoRefreshL() );
+ if ( err == KErrNone )
+ {
+ iCorrupt = EFalse;
+ }
+
+ LOG_IF_ERROR1( err, "CGflmFileListModel::WorkThread-err=%d", err )
+
+ NotifyClient( err );
+
+ iSemaphore.Wait(); // Wait for refresh signal from main thread
+
+ } while ( !iShutdown );
+
+ if ( iShutdown )
+ {
+ // Disable list usage and ensure client completion
+ iCorrupt = ETrue;
+ NotifyClient( err );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::NotifyClient()
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::NotifyClient( TInt aErr )
+ {
+ FUNC_LOG
+
+ if ( iClientStatus )
+ {
+ RThread client;
+ if ( client.Open( iClientId ) == KErrNone )
+ {
+ client.RequestComplete( iClientStatus, aErr );
+ client.Close();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::DoRefreshL()
+// This method does the actual refreshing. It's not static so it can access
+// member data and it can leave as it's trap harnessed in RefreshAndNotify()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::DoRefreshL()
+ {
+ TIMESTAMP( "GFLM refresh files and folders started: " )
+
+ INFO_LOG1(
+ "CGflmFileListModel::DoRefreshL-iSearchEnabled=%d",
+ iSearchEnabled )
+
+ if ( iSearchEnabled )
+ {
+ User::LeaveIfError( iDriveResolver->RefreshDrives( iFilter ) );
+ iFileFinder->RefreshL( iFilter, iSearchSortMethod, iRefreshMode );
+ }
+ else
+ {
+ if ( iRefreshMode == ERefreshItems )
+ {
+ iListingCache->ClearCache();
+ }
+ User::LeaveIfError( iDriveResolver->RefreshDrives( iFilter ) );
+
+ TInt groupCount( iGroups->Count() );
+ for ( TInt i( 0 ); i < groupCount; i++ )
+ {
+ iGroups->At( i )->RefreshL( iFilter, iSortMethod, iRefreshMode );
+ }
+ }
+
+ TIMESTAMP( "GFLM refresh files and folders ended: " )
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::CancelRefresh()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::CancelRefresh()
+ {
+ FUNC_LOG
+
+ iCanceled = ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::MdcaCount()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileListModel::MdcaCount() const
+ {
+ if ( iCorrupt )
+ {
+ return 0;
+ }
+ if ( iSearchEnabled )
+ {
+ return iFileFinder->ItemCount();
+ }
+
+ // Count the total number of items in groups
+ TInt groupCount( iGroups->Count() );
+ TInt itemCount( 0 );
+ for( TInt i( 0 ); i < groupCount; i++ )
+ {
+ itemCount += iGroups->At( i )->ItemCount();
+ }
+ return itemCount;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::MdcaPoint()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmFileListModel::MdcaPoint( TInt aIndex ) const
+ {
+ if ( iSearchEnabled )
+ {
+ return iFileFinder->Item( aIndex )->Name();
+ }
+
+ // Return the formatted presentation by global index
+ MGflmItemGroup* group = NULL;
+ TInt localIndex( 0 );
+ GetGroupAndLocalIndex( aIndex, localIndex, group );
+ return group->Item( localIndex )->Name();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::GetGroupAndLocalIndex()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::GetGroupAndLocalIndex(
+ const TInt aGlobalIndex,
+ TInt& aLocalIndex,
+ MGflmItemGroup*& aGroup ) const
+ {
+ // Calculate the group and the requested item's local index
+ // from a global index
+ TInt groupCount( iGroups->Count() );
+ TInt offset( 0 );
+ for( TInt i( 0 ); i < groupCount; i++ )
+ {
+ MGflmItemGroup* currentGroup = iGroups->At( i );
+ TInt itemsInGroup( currentGroup->ItemCount() );
+ if ( aGlobalIndex < itemsInGroup + offset )
+ {
+ // The global index resides in this group
+ aGroup = iGroups->At( i );
+ aLocalIndex = aGlobalIndex - offset;
+ return;
+ }
+ offset += itemsInGroup;
+ }
+
+ // Group not found
+ User::Panic( KGFLMPanicText, EGlobalIndexOutOfBounds );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::Item()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGflmGroupItem* CGflmFileListModel::Item( TInt aIndex ) const
+ {
+ if ( iSearchEnabled )
+ {
+ return iFileFinder->Item( aIndex );
+ }
+ // Return the formatted presentation by global index
+ MGflmItemGroup* group = NULL;
+ TInt localIndex( 0 );
+ GetGroupAndLocalIndex( aIndex, localIndex, group );
+ return group->Item( localIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::ResetModel()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::ResetModel()
+ {
+ iGroups->ResetAndDestroy();
+ iListingCache->ClearCache();
+ iDriveResolver->ClearDrives();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::FindGroupById()
+// Used to provide clients with CGflmItemGroupImpl objects downcasted to
+// CGflmItemGroup.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MGflmItemGroup* CGflmFileListModel::FindGroupById( TInt aId )
+ {
+ TInt groupCount( iGroups->Count() );
+
+ for( TInt i( 0 ); i < groupCount; i++ )
+ {
+ CGflmItemGroupImpl* group = iGroups->At( i );
+ if ( aId == group->Id() )
+ {
+ return group;
+ }
+ }
+
+ // Group not found
+ User::Panic( KGFLMPanicText, EInvalidGroupId );
+
+ // Execution never reaches this point
+ // following line keeps the compiler happy
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::CreateGroupL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+EXPORT_C MGflmItemGroup* CGflmFileListModel::CreateGroupL( TInt aId )
+ {
+ // Scan the list of groups for identical IDs
+ TInt groupCount( iGroups->Count() );
+ for ( TInt i( 0 ); i < groupCount; i++ )
+ {
+ if ( iGroups->At( i )->Id() == aId )
+ {
+ User::Leave( KErrAlreadyExists );
+ }
+ }
+
+ CGflmItemGroupImpl* newGroup = CGflmItemGroupImpl::NewLC(
+ aId,
+ iFs,
+ *iListingCache,
+ *iItemLocalizer,
+ *iDriveResolver );
+
+ iGroups->AppendL( newGroup );
+ CleanupStack::Pop( newGroup );
+ return newGroup;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::CreateGroupL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+EXPORT_C MGflmItemGroup* CGflmFileListModel::CreateGroupL(
+ TInt aId, TUint aInclusion )
+ {
+ MGflmItemGroup* newGroup = CreateGroupL( aId );
+ newGroup->SetInclusion( aInclusion );
+ return newGroup;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::SetCustomFilter()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+EXPORT_C void CGflmFileListModel::SetCustomFilter( MGflmItemFilter* aFilter )
+ {
+ iFilter = aFilter;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::ResolveMimeTypeL()
+// Uses the internal file recognition cache
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+EXPORT_C TPtrC CGflmFileListModel::ResolveMimeTypeL( const TDesC& aFilename )
+ {
+ return iFileRecognizer->RecognizeL( aFilename );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::IsCorrupt()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CGflmFileListModel::IsCorrupt() const
+ {
+ return iCorrupt;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::LocalizedName()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CGflmFileListModel::LocalizedName( const TDesC& aPath ) const
+ {
+ return iItemLocalizer->Localize( aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::ClearCache()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::ClearCache()
+ {
+ iListingCache->ClearCache();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::ClearDriveInfo()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::ClearDriveInfo()
+ {
+ iDriveResolver->ClearDrives();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::DriveFromPath()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGflmDriveItem* CGflmFileListModel::DriveFromPath(
+ const TDesC& aPath ) const
+ {
+ if ( !iDriveResolver->DriveCount() )
+ {
+ ERROR_LOG( "CGflmFileListModel::DriveFromPath-Forced drive refresh" )
+ iDriveResolver->RefreshDrives( iFilter );
+ }
+ return iDriveResolver->DriveFromPath( aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::RunL()
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::RunL()
+ {
+ FUNC_LOG
+
+ NotifyClient( iStatus.Int() );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileListModel::RunError( TInt /*aError*/ )
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CGflmFileListModel::DoCancel()
+ {
+ FUNC_LOG
+
+ iShutdown = ETrue;
+ iSemaphore.Signal();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::DriveFromId
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGflmDriveItem* CGflmFileListModel::DriveFromId(
+ const TInt aDrive ) const
+ {
+ if ( !iDriveResolver->DriveCount() )
+ {
+ ERROR_LOG( "CGflmFileListModel::DriveFromId-Forced drive refresh" )
+ iDriveResolver->RefreshDrives( iFilter );
+ }
+ return iDriveResolver->DriveFromId( aDrive );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::EnableSearchMode
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::EnableSearchMode( const TBool aEnabled )
+ {
+ iSearchEnabled = aEnabled;
+ if ( iSearchEnabled )
+ {
+ iSearchSortMethod = EByMatch; // Default for search
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::SearchMode
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGflmFileListModel::SearchMode()
+ {
+ return iSearchEnabled;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::SetSearchStringL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::SetSearchStringL( const TDesC& aSearchString )
+ {
+ iFileFinder->SetSearchStringL( aSearchString );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::SetSearchFolderL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::SetSearchFolderL( const TDesC& aSearchFolder )
+ {
+ iFileFinder->SetSearchFolderL( aSearchFolder );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::SetSortMethod
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::SetSortMethod( TGflmSortMethod aSortMethod )
+ {
+ if ( iSearchEnabled )
+ {
+ iSearchSortMethod = aSortMethod;
+ }
+ else if ( aSortMethod != EByMatch ) // EByMatch is allowed only for search
+ {
+ iSortMethod = aSortMethod;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::SortMethod
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TGflmSortMethod CGflmFileListModel::SortMethod() const
+ {
+ if ( iSearchEnabled )
+ {
+ return iSearchSortMethod;
+ }
+ return iSortMethod;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileListModel::FlushCache()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileListModel::FlushCache()
+ {
+ iFileRecognizer->FlushCache();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmFileRecognizer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2002-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: Recogniser wrapper
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmFileRecognizer.h"
+#include "CGflmDriveResolver.h"
+#include "CGflmDriveItem.h"
+#include "GflmUtils.h"
+#include "GFLMConsts.h"
+#include <e32svr.h>
+#include <barsread.h>
+#include <GflmFileExtensionMimeTypes.rsg>
+#include <data_caging_path_literals.hrh>
+
+
+// CONSTANTS
+_LIT( KFileExtensionResourceFile, "gflmfileextensionmimetypes.rsc" );
+const TInt KMimeTypeGranularity = 10;
+const TUint KPerCentToDrop = 30;
+const TUint KHundredPerCent = 100;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CGflmFileRecognizer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer::CGflmFileRecognizer(
+ CGflmDriveResolver* aDriveResolver,
+ RFs& aFs ) :
+ iCache( _FOFF( CPathTypePair, iLink ) ),
+ iDriveResolver( aDriveResolver ),
+ iFs( aFs )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CGflmFileRecognizer::ConstructL( TInt aMemoryConsumption )
+ {
+ User::LeaveIfError( iApaSession.Connect() );
+ iMimeTypes = new( ELeave ) CDesCArraySeg( KMimeTypeGranularity );
+ iCacheMaxMemoryUsage = aMemoryConsumption;
+
+ // Get resource drive from dll location
+ TFileName dllFileName;
+ Dll::FileName( dllFileName );
+ TParsePtrC dllParse( dllFileName );
+
+ TFileName resFileName;
+ resFileName.Copy( dllParse.Drive() );
+ resFileName.Append( KDC_RESOURCE_FILES_DIR );
+ GflmUtils::EnsureFinalBackslash( resFileName );
+ resFileName.Append( KFileExtensionResourceFile );
+
+ RResourceFile resFile;
+ resFile.OpenL( iFs, resFileName );
+ CleanupClosePushL( resFile );
+ resFile.ConfirmSignatureL();
+
+ ConstructExtMimePairsL( resFile, R_EXT_MIME_PAIRS, iExtMimePairs );
+ ConstructExtMimePairsL(
+ resFile, R_REMOTE_EXT_MIME_PAIRS, iRemoteExtMimePairs );
+
+ CleanupStack::PopAndDestroy( &resFile );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::ConstructExtMimePairsL
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmFileRecognizer::ConstructExtMimePairsL(
+ RResourceFile& aResFile,
+ TInt aResId,
+ RPointerArray< CExtMimePair >& aPairs )
+ {
+ // read the pairs
+ HBufC8* resData = aResFile.AllocReadLC( aResId );
+ TResourceReader reader;
+ reader.SetBuffer( resData );
+ TInt count( reader.ReadInt16() );
+ aPairs.ReserveL( count );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ TPtrC ext( reader.ReadTPtrC() );
+ TPtrC mime( reader.ReadTPtrC() );
+ CExtMimePair* pair = new (ELeave) CExtMimePair();
+ CleanupStack::PushL( pair );
+ pair->iExt = ext.AllocL();
+ pair->iMime = mime.AllocL();
+ aPairs.AppendL( pair );
+ CleanupStack::Pop( pair );
+ }
+ CleanupStack::PopAndDestroy( resData );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::FindMimeFromExt
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmFileRecognizer::FindMimeFromExt(
+ const TDesC& aExt,
+ RPointerArray< CExtMimePair >& aPairs )
+ {
+ TInt count( aPairs.Count() );
+
+ for( TInt i( 0 ); i < count; i++)
+ {
+ CExtMimePair* pair = aPairs[ i ];
+ if( !aExt.CompareF( *pair->iExt ) )
+ {
+ return TPtrC( *pair->iMime );
+ }
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer* CGflmFileRecognizer::NewL(
+ RFs& aFs,
+ TInt aMemoryConsumption,
+ CGflmDriveResolver* aDriveResolver )
+ {
+ CGflmFileRecognizer* self =
+ new( ELeave ) CGflmFileRecognizer( aDriveResolver, aFs );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aMemoryConsumption );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::~CGflmFileRecognizer
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer::~CGflmFileRecognizer()
+ {
+ iApaSession.Close();
+
+ FlushCache();
+
+ delete iMimeTypes;
+
+ iExtMimePairs.ResetAndDestroy();
+ iExtMimePairs.Close();
+
+ iRemoteExtMimePairs.ResetAndDestroy();
+ iRemoteExtMimePairs.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::RecognizeL( const TDesC& aFilename )
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmFileRecognizer::RecognizeL( const TDesC& aFilename )
+ {
+ TPtrC mimeType;
+ TRAPD( err, mimeType.Set( DoRecognizeL( aFilename ) ) );
+ if ( err == KErrNoMemory )
+ {
+ FlushCache();
+ return DoRecognizeL( aFilename );
+ }
+ User::LeaveIfError( err );
+ return mimeType;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::DoRecognizeL( const TDesC& aFilename )
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmFileRecognizer::DoRecognizeL( const TDesC& aFilename )
+ {
+ // Search the cache for a hit
+ TInt cropPoint( aFilename.LocateReverse( KGFLMDot()[ 0 ] ) );
+ TBool isRemoteDrive( EFalse );
+
+ if ( iDriveResolver && iDriveResolver->IsRemoteDrive( aFilename ) )
+ {
+ isRemoteDrive = ETrue;
+ }
+
+ if( cropPoint != KErrNotFound )
+ {
+ TPtrC ext( aFilename.Mid( cropPoint ) );
+ TPtrC mime( FindMimeFromExt( ext, iExtMimePairs ) );
+ if ( mime.Length() )
+ {
+ return mime;
+ }
+
+ // Use remote drive specific extension mime pairs and skip
+ // content recognition because it is so slow for remote drives.
+ // Mime types are resolved from extension by remote storage framework
+ // anyway.
+ if ( isRemoteDrive)
+ {
+ return FindMimeFromExt( ext, iRemoteExtMimePairs );
+ }
+ }
+ else if ( isRemoteDrive)
+ {
+ // Skip content recognition for remote drives because it is so slow
+ return TPtrC( KNullDesC );
+ }
+
+ TDblQueIter< CPathTypePair > pairIt( iCache );
+ pairIt.SetToFirst();
+ CPathTypePair* pair = NULL;
+ while ( ( pair = pairIt++ ) != NULL )
+ {
+ TPtrC ptr( *( pair->iFilename ) );
+ if( ptr.Length() == aFilename.Length() &&
+ !aFilename.CompareF( ptr ) )
+ {
+ // Cache hit
+ // Move item to the first position if not already.
+ // When clearing cache, oldest items can be dropped easily.
+ pair->iLink.Deque();
+ iCache.AddFirst( *pair );
+
+ if ( pair->iTypeIndex != KErrNotFound )
+ {
+ return iMimeTypes->MdcaPoint( pair->iTypeIndex );
+ }
+ return TPtrC( KNullDesC );
+ }
+ }
+
+ // Cache miss
+ TUid uid( KNullUid );
+ TDataType datatype;
+
+ TIMESTAMP( "GFLM AppForDocument started: " )
+
+ // Acquire the mime-type of the file
+ TInt err( iApaSession.AppForDocument( aFilename, uid, datatype ) );
+
+ TIMESTAMP( "GFLM AppForDocument ended: " )
+
+ if ( err != KErrNone )
+ {
+ // If recognition returns error, handle as unrecognized file
+ ERROR_LOG1(
+ "CGflmFileRecognizer::DoRecognizeL-AppForDocument=%d",
+ err )
+ return TPtrC( KNullDesC );
+ }
+
+ CPathTypePair* newPair = CPathTypePair::NewLC( aFilename );
+ TPtrC mimeType( datatype.Des() );
+
+ INFO_LOG2( "GFLM AppForDocument:file=%S,mime=%S", &aFilename, &mimeType )
+
+ // Run through the mime-type list to find the correct index
+ if ( mimeType.Length() )
+ {
+ TBool isMimeFound( EFalse );
+ TInt mimeCount( iMimeTypes->MdcaCount() );
+ for ( TInt j( 0 ); j < mimeCount; j++ )
+ {
+ if( !mimeType.CompareF( iMimeTypes->MdcaPoint( j ) ) )
+ {
+ newPair->iTypeIndex = j;
+ isMimeFound = ETrue;
+ break;
+ }
+ }
+ // Add mime type to list if not already added
+ if ( !isMimeFound )
+ {
+ iMimeTypes->AppendL( mimeType );
+ newPair->iTypeIndex = mimeCount;
+ }
+ }
+
+ // Cleanup cache and add new pair
+ CleanupStack::Pop( newPair );
+ CleanupCache();
+ iCacheMemoryUsage += newPair->Size();
+ iCache.AddFirst( *newPair );
+
+ if ( newPair->iTypeIndex != KErrNotFound )
+ {
+ return iMimeTypes->MdcaPoint( newPair->iTypeIndex );
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::FlushCache( )
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmFileRecognizer::FlushCache()
+ {
+ TDblQueIter< CPathTypePair > pairIt( iCache );
+ pairIt.SetToFirst();
+ CPathTypePair* pair = NULL;
+ while ( ( pair = pairIt++ ) != NULL )
+ {
+ pair->iLink.Deque();
+ delete pair;
+ }
+ iCacheMemoryUsage = 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CleanupCache( )
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmFileRecognizer::CleanupCache( )
+ {
+ if( iCacheMemoryUsage > iCacheMaxMemoryUsage )
+ {
+ TInt dropThreshold = ( TInt ) ( ( ( ( TUint ) iCacheMaxMemoryUsage ) *
+ KPerCentToDrop ) / KHundredPerCent );
+ TInt droppedSize( 0 );
+
+ TDblQueIter< CPathTypePair > pairIt( iCache );
+ pairIt.SetToLast();
+ CPathTypePair* pair = NULL;
+ while ( ( pair = pairIt-- ) != NULL )
+ {
+ droppedSize += pair->Size();
+ pair->iLink.Deque();
+ delete pair;
+ if ( droppedSize >= dropThreshold )
+ {
+ break;
+ }
+ }
+ iCacheMemoryUsage -= droppedSize;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CPathTypePair::NewLC()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer::CPathTypePair*
+ CGflmFileRecognizer::CPathTypePair::NewLC( const TDesC& aFilename )
+ {
+ CPathTypePair* self = new ( ELeave ) CPathTypePair();
+ CleanupStack::PushL( self );
+ self->ConstructL( aFilename );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CPathTypePair::ConstructL()
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmFileRecognizer::CPathTypePair::ConstructL( const TDesC& aFilename )
+ {
+ iFilename = aFilename.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CPathTypePair::CPathTypePair()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer::CPathTypePair::CPathTypePair() :
+ iTypeIndex( KErrNotFound )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CPathTypePair::~CPathTypePair()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer::CPathTypePair::~CPathTypePair()
+ {
+ delete iFilename;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CPathTypePair::Size()
+//
+// -----------------------------------------------------------------------------
+//
+TInt CGflmFileRecognizer::CPathTypePair::Size() const
+ {
+ return ( sizeof( TInt ) + iFilename->Size() + sizeof( TDblQueLink ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileRecognizer::CExtMimePair::~CExtMimePair()
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileRecognizer::CExtMimePair::~CExtMimePair()
+ {
+ delete iExt;
+ delete iMime;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmFileSystemItem.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2002-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: File system item definitions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmFileSystemItem.h"
+#include "GflmUtils.h"
+#include "GFLMConsts.h"
+#include <f32file.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::CGflmFileSystemItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmFileSystemItem::CGflmFileSystemItem(
+ const TEntry& aFSEntry,
+ const TDesC& aBasePath ) :
+ iFSEntry( &aFSEntry ),
+ iBasePath( aBasePath )
+ {
+ SetExt();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmFileSystemItem* CGflmFileSystemItem::NewLC(
+ const TEntry& aFSEntry,
+ const TDesC& aBasePath )
+ {
+ CGflmFileSystemItem* self = new( ELeave ) CGflmFileSystemItem(
+ aFSEntry, aBasePath );
+
+ CleanupStack::PushL( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::~CGflmFileSystemItem
+//
+// -----------------------------------------------------------------------------
+//
+CGflmFileSystemItem::~CGflmFileSystemItem()
+ {
+ delete iLocalizedName;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::Type
+//
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem::TGflmItemType CGflmFileSystemItem::Type() const
+ {
+ if ( iFSEntry->IsDir() )
+ {
+ return EDirectory;
+ }
+ return EFile;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::Name
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmFileSystemItem::Name() const
+ {
+ if ( iLocalizedName )
+ {
+ return iLocalizedName->Des();
+ }
+ // The entry has no localized name
+ return TPtrC( iFSEntry->iName );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::Date
+//
+// -----------------------------------------------------------------------------
+//
+TTime CGflmFileSystemItem::Date() const
+ {
+ return iFSEntry->iModified;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::Size
+//
+// -----------------------------------------------------------------------------
+//
+TInt64 CGflmFileSystemItem::Size() const
+ {
+ return static_cast<TUint>( iFSEntry->iSize );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::Ext
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmFileSystemItem::Ext() const
+ {
+ return iExt;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::GetFullPath
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileSystemItem::GetFullPath( TDes& aPath ) const
+ {
+ GflmUtils::GetFullPath( iBasePath, *iFSEntry, aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::SetLocalizedNameL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmFileSystemItem::SetLocalizedNameL( const TDesC& aName )
+ {
+ HBufC* temp = aName.AllocL();
+ delete iLocalizedName;
+ iLocalizedName = temp;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::Entry
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TEntry& CGflmFileSystemItem::Entry() const
+ {
+ return *iFSEntry;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::FullPathLC
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CGflmFileSystemItem::FullPathLC() const
+ {
+ return GflmUtils::FullPathLC( iBasePath, *iFSEntry );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::FullPathL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CGflmFileSystemItem::FullPathL() const
+ {
+ return GflmUtils::FullPathL( iBasePath, *iFSEntry );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::SetEntry
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmFileSystemItem::SetEntry( const TEntry& aEntry )
+ {
+ iFSEntry = &aEntry;
+ SetExt();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmFileSystemItem::SetExt
+//
+// -----------------------------------------------------------------------------
+//
+void CGflmFileSystemItem::SetExt()
+ {
+ TPtrC name( iFSEntry->iName );
+ TInt pos( name.LocateReverse( KGFLMDot()[ 0 ] ) );
+ if( pos != KErrNotFound )
+ {
+ iExt.Set( name.Mid( pos ) );
+ }
+ else
+ {
+ iExt.Set( KNullDesC );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmGlobalActionItem.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2002-2006 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: Global action item definitions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmGlobalActionItem.h"
+#include <e32std.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::CGflmGlobalActionItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmGlobalActionItem::CGflmGlobalActionItem()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CGflmGlobalActionItem::ConstructL( const TDesC& aCaption )
+ {
+ iCaption = aCaption.AllocL();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmGlobalActionItem* CGflmGlobalActionItem::NewLC(
+ TInt aId, const TDesC& aCaption )
+ {
+ CGflmGlobalActionItem* self = new( ELeave ) CGflmGlobalActionItem;
+
+ CleanupStack::PushL( self );
+ self->iId = aId;
+ self->ConstructL( aCaption );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::~CGflmGlobalActionItem
+//
+// -----------------------------------------------------------------------------
+//
+CGflmGlobalActionItem::~CGflmGlobalActionItem()
+ {
+ delete iCaption;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::Type()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem::TGflmItemType CGflmGlobalActionItem::Type() const
+ {
+ return EGlobalActionItem;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::Name()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmGlobalActionItem::Name() const
+ {
+ return iCaption->Des();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::Date()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TTime CGflmGlobalActionItem::Date() const
+ {
+ // Date of an action item is undefined
+ // Groups containing action items shouldn't be sorted by date
+ return TTime( 0 );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::Size()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt64 CGflmGlobalActionItem::Size() const
+ {
+ return 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::Ext()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmGlobalActionItem::Ext() const
+ {
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGlobalActionItem::Id()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CGflmGlobalActionItem::Id() const
+ {
+ return iId;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmGroupItem.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,343 @@
+/*
+* Copyright (c) 2002-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: Group item definitions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmGroupItem.h"
+#include "MGflmItemGroup.h"
+#include <e32std.h>
+
+
+// CONSTANTS
+const TInt KIconIdUndefined = -1;
+const TInt KSortCollationLevel = 3;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CGflmGroupItem
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem::CGflmGroupItem()
+ : iIconId( KIconIdUndefined )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::~CGflmGroupItem()
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem::~CGflmGroupItem()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::GetIconId()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CGflmGroupItem::GetIconId( TInt& aIconId )
+ {
+ if ( iIconId == KIconIdUndefined )
+ {
+ aIconId = 0;
+ return KErrNotFound;
+ }
+ aIconId = iIconId;
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::SetIconId()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmGroupItem::SetIconId( const TInt aIconId )
+ {
+ iIconId = aIconId;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CanUseCompareF()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CGflmGroupItem::CanUseCompareF() const
+ {
+ if ( iStatus & ECanUseCompareF )
+ {
+ return ETrue;
+ }
+ if ( iStatus & ECannotUseCompareF )
+ {
+ return EFalse;
+ }
+
+ TPtrC name( Name() );
+ TInt len( name.Length() );
+ const TText* ptr = name.Ptr();
+ while ( len-- > 0 )
+ {
+ TText ch = *ptr++;
+ // Do not allow CompareF for non Ascii or special chars
+ if ( !( ( ch >= 0x000A && ch <= 0x0039 ) || // Ascii basic symbols
+ ( ch >= 0x0041 && ch <= 0x005A ) || // Ascii capital alpha
+ ( ch >= 0x0061 && ch <= 0x007A ) ) ) // Ascii small alpha
+ {
+ iStatus |= ECannotUseCompareF;
+ return EFalse;
+ }
+ }
+ iStatus |= ECanUseCompareF;
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::SetGroup()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmGroupItem::SetGroup( MGflmItemGroup* aGroup )
+ {
+ iGroup = aGroup;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::GetSortL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+TLinearOrder< CGflmGroupItem > CGflmGroupItem::GetSortL(
+ TGflmSortMethod aSortMethod )
+ {
+ switch( aSortMethod )
+ {
+ case EByName:
+ {
+ return CompareByName;
+ }
+ case EByType:
+ {
+ return CompareByType;
+ }
+ case EMostRecentFirst:
+ {
+ return CompareMostRecentFirst;
+ }
+ case ELargestFirst:
+ {
+ return CompareLargestFirst;
+ }
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+ return CompareByName;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CompareByItemType
+// Compares two CGflmGroupItem objects by name (ascending)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmGroupItem::CompareByItemType(
+ const CGflmGroupItem& aFirst, const CGflmGroupItem& aSecond )
+ {
+ TGflmItemType first( aFirst.Type() );
+ TGflmItemType second( aSecond.Type() );
+ if ( first < second )
+ {
+ return -1;
+ }
+ else if ( first > second )
+ {
+ return 1;
+ }
+ return 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CompareByNameWithoutItemType
+// Compares two CGflmGroupItem objects by name (ascending)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmGroupItem::CompareByNameWithoutItemType(
+ const CGflmGroupItem& aFirst, const CGflmGroupItem& aSecond )
+ {
+ // Do not use CompareC by default with collation
+ // because it is very bad for performance when sorting
+ // large folders i.e. several 1000s of files with long item names
+ // e.g. names containing over 40 chars
+
+ // However, some languages are not sorted correctly with CompareF,
+ // so do cached name check to decide what comparison to use.
+
+ if ( !aFirst.CanUseCompareF() || !aSecond.CanUseCompareF() )
+ {
+ if ( aFirst.iGroup )
+ {
+ const TCollationMethod* collate =
+ aFirst.iGroup->CollationMethod();
+ if ( collate )
+ {
+ return aFirst.Name().CompareC(
+ aSecond.Name(),
+ KSortCollationLevel,
+ collate );
+ }
+ }
+ }
+
+ return aFirst.Name().CompareF( aSecond.Name() );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CompareByName
+// Compares two CGflmGroupItem objects by name (ascending)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmGroupItem::CompareByName(
+ const CGflmGroupItem& aFirst, const CGflmGroupItem& aSecond )
+ {
+ TInt ret( CompareByItemType( aFirst, aSecond ) );
+ if ( !ret )
+ {
+ return CompareByNameWithoutItemType( aFirst, aSecond );
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CompareByType
+// Compares two CGflmGroupItem objects by file extension (ascending)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmGroupItem::CompareByType(
+ const CGflmGroupItem& aFirst, const CGflmGroupItem& aSecond )
+ {
+ TInt ret( CompareByItemType( aFirst, aSecond ) );
+ if ( ret )
+ {
+ return ret;
+ }
+
+ // Do not use CompareC by default with collation
+ // because it is very bad for performance when sorting
+ // large folders i.e. several 1000s of files with long item names
+ // e.g. names containing over 40 chars
+
+ // However, some languages are not sorted correctly with CompareF,
+ // so do cached name check to decide what comparison to use.
+
+ if ( !aFirst.CanUseCompareF() || !aSecond.CanUseCompareF() )
+ {
+ if ( aFirst.iGroup )
+ {
+ const TCollationMethod* collate =
+ aFirst.iGroup->CollationMethod();
+ if ( collate )
+ {
+ ret = aFirst.Ext().CompareC(
+ aSecond.Ext(),
+ KSortCollationLevel,
+ collate );
+ if ( !ret )
+ {
+ ret = CompareByName( aFirst, aSecond );
+ }
+ return ret;
+ }
+ }
+ }
+
+ ret = aFirst.Ext().CompareF( aSecond.Ext() );
+ if ( !ret )
+ {
+ ret = CompareByNameWithoutItemType( aFirst, aSecond );
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CompareMostRecentFirst
+// Compares two CGflmGroupItem objects by date (ascending)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmGroupItem::CompareMostRecentFirst(
+ const CGflmGroupItem& aFirst, const CGflmGroupItem& aSecond )
+ {
+ TInt ret( -CompareByItemType( aFirst, aSecond ) );
+ if ( ret )
+ {
+ return ret;
+ }
+
+ TTime first( aFirst.Date() );
+ TTime second( aSecond.Date() );
+
+ if ( first > second )
+ {
+ return -1;
+ }
+ else if ( first < second )
+ {
+ return 1;
+ }
+ return CompareByNameWithoutItemType( aFirst, aSecond );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmGroupItem::CompareLargestFirst
+// Compares two CGflmGroupItem objects by size (ascending)
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmGroupItem::CompareLargestFirst(
+ const CGflmGroupItem& aFirst, const CGflmGroupItem& aSecond )
+ {
+ TInt ret( -CompareByItemType( aFirst, aSecond ) );
+ if ( ret )
+ {
+ return ret;
+ }
+
+ TInt64 first( aFirst.Size() );
+ TInt64 second( aSecond.Size() );
+
+ if ( first > second )
+ {
+ return -1;
+ }
+ else if ( first < second )
+ {
+ return 1;
+ }
+ return CompareByNameWithoutItemType( aFirst, aSecond );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmItemGroupImpl.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2002-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: Concrete implementation of MGflmItemGroup interface
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmItemGroupImpl.h"
+#include "MGflmItemFilter.h"
+#include "CGflmItemLocalizer.h"
+#include "CGflmDriveResolver.h"
+#include "CGflmFileRecognizer.h"
+#include "CGflmDirectoryListingCache.h"
+#include "CGflmGlobalActionItem.h"
+#include "CGflmFileSystemItem.h"
+#include "CGflmDriveItem.h"
+#include "GFLMConsts.h"
+#include "GFLM.hrh"
+#include "GflmUtils.h"
+#include <f32file.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::CGflmItemGroupImpl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmItemGroupImpl::CGflmItemGroupImpl(
+ const TInt aId,
+ RFs& aFss,
+ CGflmDirectoryListingCache& aCache,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver ) :
+ iId( aId ),
+ iFss( aFss ),
+ iListingCache( aCache ),
+ iItemLocalizer( aLocalizer ),
+ iDriveResolver( aResolver )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::~CGflmItemGroupImpl
+//
+// -----------------------------------------------------------------------------
+//
+CGflmItemGroupImpl::~CGflmItemGroupImpl()
+ {
+ iVolatileItems.ResetAndDestroy();
+ iVolatileItems.Close();
+
+ iStaticItems.ResetAndDestroy();
+ iStaticItems.Close();
+
+ iItemReferences.Close();
+
+ delete iDirectory;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmItemGroupImpl* CGflmItemGroupImpl::NewLC(
+ const TInt aId,
+ RFs& aFss,
+ CGflmDirectoryListingCache& aCache,
+ CGflmItemLocalizer& aLocalizer,
+ CGflmDriveResolver& aResolver )
+ {
+ CGflmItemGroupImpl* self = new( ELeave ) CGflmItemGroupImpl(
+ aId, aFss, aCache, aLocalizer, aResolver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::ContructL
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::ConstructL()
+ {
+ iSortCollationMethod = *Mem::CollationMethodByIndex( 0 );
+ iSortCollationMethod.iFlags |=
+ TCollationMethod::EIgnoreNone | TCollationMethod::EFoldCase;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::RefreshL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::RefreshL(
+ MGflmItemFilter* aFilter,
+ TGflmSortMethod aSortMethod,
+ TGflmRefreshMode aRefreshMode )
+ {
+ FUNC_LOG
+
+ INFO_LOG2(
+ "CGflmItemGroupImpl::RefreshL-aRefreshMode=%d, aSortMethod=%d",
+ aRefreshMode, aSortMethod )
+
+ if ( aRefreshMode == ERefreshItems )
+ {
+ // Reset reference list
+ iItemReferences.Reset();
+
+ // Destroy old filesystem items
+ iVolatileItems.ResetAndDestroy();
+
+ // Re-read contents of the assigned directories, filter out unwanted
+ // items and add rest to the item list
+ TIMESTAMP( "GFLM reading and filtering directories started: " )
+ PopulateReferenceListL( aFilter );
+ TIMESTAMP( "GFLM reading and filtering directories ended: " )
+ }
+
+ if ( aRefreshMode == ERefreshItems || aRefreshMode == ERefreshSort )
+ {
+ if ( !( iInclusion & EDrives ) )
+ {
+ TIMESTAMP( "GFLM group sorting started: " )
+ iItemReferences.Sort( CGflmGroupItem::GetSortL( aSortMethod ) );
+ TIMESTAMP( "GFLM group sorting ended: " )
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::PopulateReferenceListL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::PopulateReferenceListL( MGflmItemFilter* aFilter )
+ {
+ CGflmGroupItem* item = NULL;
+ TInt i( 0 );
+
+ // Add drive items to the reference list
+ if ( iInclusion & EDrives )
+ {
+ if ( iDirectory )
+ {
+ // Hide drive selection when location inside folder.
+ return;
+ }
+
+ TInt count( iDriveResolver.DriveCount() );
+ for ( i = 0; i < count; i++ )
+ {
+ // Add directly, items are filtered from drive resolver
+ CGflmDriveItem* drvItem = iDriveResolver.DriveAt( i );
+ iItemReferences.AppendL( drvItem );
+ drvItem->SetGroup( this );
+ }
+ }
+
+ // Add pointers to the static items (action items) to the
+ // reference list
+ TInt staticCount( iStaticItems.Count() );
+
+ for ( i = 0; i < staticCount; i++ )
+ {
+ item = iStaticItems[ i ];
+ if ( !aFilter ||
+ ( aFilter && aFilter->FilterItemL( item, iId, NULL ) ) )
+ {
+ iItemReferences.AppendL( item );
+ item->SetGroup( this );
+ }
+ }
+
+ if ( iInclusion & ( EFiles | EDirectories ) )
+ {
+ if ( iDirectory )
+ {
+ // Check directory name length validity
+ TPtrC directory( iDirectory->Des() );
+ TInt dirLen( directory.Length() );
+ if ( !dirLen || dirLen > KMaxFileName )
+ {
+ return;
+ }
+
+ // Get the drive where items are located
+ CGflmDriveItem* drvItem = iDriveResolver.DriveFromPath(
+ directory );
+
+ const CGflmDirectoryListingCache::CEntryArray* dir =
+ iListingCache.ListingL( directory );
+ TInt entryCount( dir->Count() );
+
+ // Reserve room for all entries at once to avoid overhead
+ iVolatileItems.ReserveL( entryCount );
+ iItemReferences.ReserveL( iItemReferences.Count() + entryCount );
+
+ // Create buffer for filenames
+ HBufC* buffer = HBufC::NewLC( KMaxFileName );
+ TPtr filename( buffer->Des() );
+
+ TIMESTAMP( "GFLM files and folders list genaration started: " )
+
+ TInt bsLen( KGFLMBackslash().Length() );
+
+ // For all items in a directory listing
+ for( i = 0; i < entryCount; i++ )
+ {
+ const TEntry& entry( ( *dir )[ i ] );
+ TBool isDir( entry.IsDir() );
+ TInt extLen( isDir ? bsLen : 0 ); // Handle final backslash
+ if ( dirLen + entry.iName.Length() + extLen > KMaxFileName )
+ {
+ continue; // Too long name
+ }
+ if ( isDir && !( iInclusion & EDirectories ) )
+ {
+ continue; // No directories allowed
+ }
+ if ( !isDir && !( iInclusion & EFiles ) )
+ {
+ continue; // No files allowed
+ }
+
+ // Create a new filesystem item
+ CGflmFileSystemItem* fsItem = CGflmFileSystemItem::NewLC(
+ entry, directory );
+
+ // Filter out unwanted items
+ if ( !aFilter ||
+ ( aFilter && aFilter->FilterItemL( fsItem, iId, drvItem ) ) )
+ {
+ // Only directory items can be localized
+ if ( isDir )
+ {
+ // Get localized name for the item, if it has one
+ GflmUtils::GetFullPath( directory, entry, filename );
+ TPtrC localizedName(
+ iItemLocalizer.LocalizeFromWorkThread( filename ) );
+ if ( localizedName.Length() )
+ {
+ fsItem->SetLocalizedNameL( localizedName );
+ }
+ }
+ iVolatileItems.AppendL( fsItem );
+ CleanupStack::Pop( fsItem );
+ iItemReferences.AppendL( fsItem );
+ fsItem->SetGroup( this );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( fsItem );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+
+ TIMESTAMP( "GFLM files and folders list genaration ended: " )
+
+ }
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::ItemCount()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmItemGroupImpl::ItemCount() const
+ {
+ return iItemReferences.Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::Item()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CGflmGroupItem* CGflmItemGroupImpl::Item( TInt aIndex )
+ {
+ return iItemReferences[ aIndex ];
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::Id()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CGflmItemGroupImpl::Id() const
+ {
+ return iId;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::SetInclusion()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::SetInclusion( TUint aInclusion )
+ {
+ iInclusion = aInclusion;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::AddSourceL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::AddSourceL( const TDesC& aDirectory )
+ {
+ HBufC* temp = aDirectory.AllocL();
+ delete iDirectory;
+ iDirectory = temp;
+ // Reset reference list to cleanup all references to deleted directory
+ iItemReferences.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::ResetSources()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::ResetSources()
+ {
+ delete iDirectory;
+ iDirectory = NULL;
+ // Reset reference list to cleanup all references to deleted directory
+ iItemReferences.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::AddActionItemL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmItemGroupImpl::AddActionItemL( TInt aId, const TDesC& aCaption )
+ {
+ CGflmGlobalActionItem* actionItem =
+ CGflmGlobalActionItem::NewLC( aId, aCaption );
+ iStaticItems.AppendL( actionItem );
+ CleanupStack::Pop( actionItem );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemGroupImpl::CollationMethod
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TCollationMethod* CGflmItemGroupImpl::CollationMethod()
+ {
+ return &iSortCollationMethod;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmItemLocalizer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002-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: This class is used to provide localized names
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CGflmItemLocalizer.h"
+#include "GflmUtils.h"
+#include "GFLM.hrh"
+#include <CDirectoryLocalizer.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::CGflmItemLocalizer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmItemLocalizer::CGflmItemLocalizer()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CGflmItemLocalizer* CGflmItemLocalizer::NewL()
+ {
+ CGflmItemLocalizer* self = new( ELeave ) CGflmItemLocalizer();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CGflmItemLocalizer::ConstructL()
+ {
+ iLocalizer = CDirectoryLocalizer::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::~CGflmItemLocalizer
+// -----------------------------------------------------------------------------
+//
+CGflmItemLocalizer::~CGflmItemLocalizer()
+ {
+ delete iLocalizer;
+ // iWorkThreadLocalizer cannot be freed here because it was
+ // allocated by another thread
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::Localize()
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmItemLocalizer::Localize( const TDesC& aPath ) const
+ {
+ return Localize( *iLocalizer, aPath );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::LocalizeFromWorkThread()
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmItemLocalizer::LocalizeFromWorkThread( const TDesC& aPath ) const
+ {
+ if ( iWorkThreadLocalizer )
+ {
+ return Localize( *iWorkThreadLocalizer, aPath );
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::SetupWorkThreadLocalizerL()
+// -----------------------------------------------------------------------------
+//
+void CGflmItemLocalizer::SetupWorkThreadLocalizerL()
+ {
+ if ( !iWorkThreadLocalizer )
+ {
+ iWorkThreadLocalizer = CDirectoryLocalizer::NewL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::SetupWorkThreadLocalizer()
+// -----------------------------------------------------------------------------
+//
+void CGflmItemLocalizer::ReleaseWorkThreadLocalizer()
+ {
+ delete iWorkThreadLocalizer;
+ iWorkThreadLocalizer = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmItemLocalizer::SetupWorkThreadLocalizer()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPtrC CGflmItemLocalizer::Localize(
+ CDirectoryLocalizer& aLocalizer, const TDesC& aPath ) const
+ {
+ aLocalizer.SetFullPath( aPath );
+ if( aLocalizer.IsLocalized() )
+ {
+ // Ensure that localized name is legal.
+ // Some localizations may have dot in the end that makes it
+ // invalid for file system point of view.
+ return GflmUtils::StripFinalDot( aLocalizer.LocalizedName() );
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/CGflmNavigatorModel.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2002-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: Navigable file list model
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <bautils.h>
+#include "CGflmNavigatorModel.h"
+#include "CGflmItemGroupImpl.h"
+#include "CGflmItemLocalizer.h"
+#include "CGflmDriveResolver.h"
+#include "GFLM.hrh"
+#include "GflmUtils.h"
+#include "GFLMConsts.h"
+
+
+// CONSTANTS
+
+// Granularity of iBackstepStack array
+const TInt KBackstepStackGranularity = 3;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::CGflmNavigatorModel
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CGflmNavigatorModel::CGflmNavigatorModel( RFs& aFs ) :
+ CGflmFileListModel( aFs )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CGflmNavigatorModel::ConstructL()
+ {
+ CGflmFileListModel::ConstructL();
+ iBackstepStack = new( ELeave ) CDesCArraySeg( KBackstepStackGranularity );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGflmNavigatorModel* CGflmNavigatorModel::NewL( RFs& aFs )
+ {
+ CGflmNavigatorModel* self = new( ELeave ) CGflmNavigatorModel( aFs );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::~CGflmNavigatorModel()
+// -----------------------------------------------------------------------------
+//
+CGflmNavigatorModel::~CGflmNavigatorModel()
+ {
+ delete iBackstepStack;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::GoToDirectoryL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmNavigatorModel::GoToDirectoryL(
+ const TDesC& aPath, TBool aBackstepping )
+ {
+ if ( !aPath.CompareF( CurrentDirectory() ) )
+ {
+ return; // Already in the directory
+ }
+ SetBaseDirectoryL( aPath );
+
+ // Update the backstepping stack after calling SetBaseDirectoryL()
+ // because it might leave
+ if ( !aBackstepping )
+ {
+ iBackstepStack->Reset();
+ }
+ iBackstepStack->AppendL( aPath );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::BackstepL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmNavigatorModel::BackstepL()
+ {
+ if ( iBackstepStack->MdcaCount() )
+ {
+ iBackstepStack->Delete( iBackstepStack->MdcaCount() - 1 );
+ if ( iBackstepStack->MdcaCount() )
+ {
+ TPtrC dir( iBackstepStack->MdcaPoint(
+ iBackstepStack->MdcaCount() - 1 ) );
+ SetSourceL( dir );
+ if ( !IsValidSource( dir ) )
+ {
+ User::Leave( KErrPathNotFound );
+ }
+ }
+ else
+ {
+ SetSourceL( KNullDesC );
+ }
+ }
+ else
+ {
+ User::Leave( KErrUnderflow );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::GoToDirectoryL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CGflmNavigatorModel::GoToDirectoryL( const TDesC& aBasePath,
+ const TDesC& aTopPath )
+ {
+ // Use copies because descriptors may come from backstep stack itself
+ HBufC* basePathBuffer = aBasePath.AllocLC();
+ TPtrC basePath( basePathBuffer->Des() );
+ HBufC* topPathBuffer = aTopPath.AllocLC();
+ TPtrC topPath( topPathBuffer->Des() );
+ const TInt KNthMatch = 2;
+
+ // Clear the backstepping stack
+ iBackstepStack->Reset();
+
+ // Construct the backstepping stack
+
+ while ( basePath.CompareF( topPath ) )
+ {
+ iBackstepStack->InsertL( 0, topPath );
+
+ // Find the second backslash starting from the end
+ TInt cutPoint( GflmUtils::LocateReverseNth(
+ topPath, KGFLMBackslash()[ 0 ], KNthMatch ) );
+ User::LeaveIfError( cutPoint );
+ topPath.Set( topPath.Left( cutPoint + 1 ) );
+ }
+
+ // Add basepath too
+ iBackstepStack->InsertL( 0, topPath );
+
+ SetBaseDirectoryL( *topPathBuffer );
+
+ CleanupStack::PopAndDestroy( topPathBuffer );
+ CleanupStack::PopAndDestroy( basePathBuffer );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::CurrentDirectory()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CGflmNavigatorModel::CurrentDirectory() const
+ {
+ TInt stackSize( iBackstepStack->MdcaCount() );
+ if ( stackSize <= 0 )
+ {
+ return KNullDesC();
+ }
+ return iBackstepStack->MdcaPoint( stackSize - 1 );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::LocalizedNameOfCurrentDirectory()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CGflmNavigatorModel::LocalizedNameOfCurrentDirectory() const
+ {
+ TInt stackSize( iBackstepStack->MdcaCount() );
+ if ( stackSize <= 0 )
+ {
+ return TPtrC( KNullDesC );
+ }
+ TPtrC directory( iBackstepStack->MdcaPoint( stackSize - 1 ) );
+ TPtrC localizedName( iItemLocalizer->Localize( directory ) );
+ if ( localizedName.Length() )
+ {
+ // Return the localized name
+ return localizedName;
+ }
+ // Directory has no localized name => return the name of the directory
+ TPtrC ptr( GflmUtils::StripFinalBackslash( directory ) );
+ TInt lastBs( ptr.LocateReverse( KGFLMBackslash()[ 0 ] ) );
+ if ( lastBs != KErrNotFound )
+ {
+ return ptr.Mid( lastBs + 1 );
+ }
+ return TPtrC( KNullDesC );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::SetBaseDirectoryL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmNavigatorModel::SetBaseDirectoryL( const TDesC& aDirectory )
+ {
+ if ( IsValidSource( aDirectory ) )
+ {
+ SetSourceL( aDirectory );
+ }
+ else
+ {
+ User::Leave( KErrPathNotFound );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::NavigationLevel()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CGflmNavigatorModel::NavigationLevel() const
+ {
+ return iBackstepStack->Count() - 1;
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::CurrentDrive()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGflmDriveItem* CGflmNavigatorModel::CurrentDrive() const
+ {
+ return DriveFromPath( CurrentDirectory() );
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::SetSourceL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CGflmNavigatorModel::SetSourceL( const TDesC& aSource )
+ {
+ TBool empty( !aSource.Length() );
+ TInt groupCount( iGroups->Count() );
+ for ( TInt i( 0 ); i < groupCount; i++ )
+ {
+ MGflmItemGroup* group = iGroups->At( i );
+ group->ResetSources();
+ if ( !empty )
+ {
+ group->AddSourceL( aSource );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CGflmNavigatorModel::IsValidSource()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CGflmNavigatorModel::IsValidSource( const TDesC& aSource ) const
+ {
+ if ( aSource.Length() &&
+ !iDriveResolver->IsRemoteDrive( aSource ) &&
+ !BaflUtils::PathExists( iFs, aSource ) &&
+ !iDriveResolver->IsRootPath( aSource ) )
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/GFLM/src/GflmUtils.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2002-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: Static utility class for GFLM
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "GflmUtils.h"
+#include "GFLMConsts.h"
+#include <e32def.h>
+#include <e32svr.h>
+#include <f32file.h>
+#include <collate.h>
+
+// CONSTANTS
+_LIT( KWildCard, "*" );
+_LIT( KWildCard2, "?" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// GflmUtils::LocateReverseNth()
+// -----------------------------------------------------------------------------
+//
+TInt GflmUtils::LocateReverseNth(
+ const TDesC& aDescriptor,
+ TChar aChar,
+ const TInt aNth )
+ {
+ TPtrC ptr( aDescriptor );
+ TInt ret( KErrArgument );
+ for ( TInt i( 0 ); i < aNth; i++ )
+ {
+ ret = ptr.LocateReverse( aChar );
+ if ( ret == KErrNotFound )
+ {
+ break;
+ }
+ ptr.Set( ptr.Left( ret ) );
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::EnsureFinalBackslash()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void GflmUtils::EnsureFinalBackslash( TDes& aPath )
+ {
+ if ( !HasFinalBackslash( aPath ) )
+ {
+ aPath.Append( KGFLMBackslash );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::StripFinalBackslash()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPtrC GflmUtils::StripFinalBackslash( const TDesC& aPath )
+ {
+ return StripFinal( aPath, KGFLMBackslash );
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::HasFinalBackslash
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool GflmUtils::HasFinalBackslash( const TDesC& aPath )
+ {
+ TPtrC ptr( aPath.Right( KGFLMBackslash().Length() ) );
+ if ( KGFLMBackslash().Compare( ptr ) )
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::GetFullPath
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void GflmUtils::GetFullPath(
+ const TDesC& aDir, const TEntry& aEntry, TDes& aFullPath )
+ {
+ aFullPath.Copy( aDir );
+ EnsureFinalBackslash( aFullPath );
+ aFullPath.Append( aEntry.iName );
+ if ( aEntry.IsDir() )
+ {
+ aFullPath.Append( KGFLMBackslash );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::FullPathLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* GflmUtils::FullPathLC(
+ const TDesC& aDir, const TEntry& aEntry )
+ {
+ HBufC* fullPath = FullPathL( aDir, aEntry );
+ CleanupStack::PushL( fullPath );
+ return fullPath;
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::FullPathL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC* GflmUtils::FullPathL(
+ const TDesC& aDir, const TEntry& aEntry )
+ {
+ TInt len( aDir.Length() + aEntry.iName.Length() );
+ if ( aEntry.IsDir() )
+ {
+ len += KGFLMBackslash().Length();
+ }
+ HBufC* fullPath = HBufC::NewL( len );
+ TPtr ptr( fullPath->Des() );
+ GetFullPath( aDir, aEntry, ptr );
+ return fullPath;
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::StripFinalDot
+// -----------------------------------------------------------------------------
+//
+TPtrC GflmUtils::StripFinalDot( const TDesC& aPath )
+ {
+ return StripFinal( aPath, KGFLMDot );
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::StripFinal
+// -----------------------------------------------------------------------------
+//
+TPtrC GflmUtils::StripFinal(
+ const TDesC& aString, const TDesC& aStringToStrip )
+ {
+ TInt len( aStringToStrip.Length() );
+ TPtrC ptr( aString.Right( len ) );
+
+ if( !aStringToStrip.Compare( ptr ) )
+ {
+ return aString.Left( aString.Length() - len );
+ }
+ return TPtrC( aString );
+ }
+
+// -----------------------------------------------------------------------------
+// GflmUtils::HasWildCard
+// -----------------------------------------------------------------------------
+//
+TBool GflmUtils::HasWildCard( const TDesC& aString )
+ {
+ return ( aString.Find( KWildCard ) != KErrNotFound ||
+ aString.Find( KWildCard2 ) != KErrNotFound );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/data/FileManagerView.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,740 @@
+/*
+* Copyright (c) 2002-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: Resource definitions for project FileManagerView
+*
+*/
+
+
+
+NAME FMGV // From FileManager View
+
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include "FileManagerView.hrh"
+#include "FileManagerView.rh"
+#include "FileManagerEngine.hrh"
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.loc>
+#include <aiwbrowserprovider.loc>
+#include <drmcommon.loc>
+#include <commondialogs.mbg>
+#include <filemanager.mbg>
+#include <avkon.mbg>
+#include <aknsconstants.hrh>
+#include <filemanager.loc>
+
+// ---------------------------------------------------------
+// Standard resource signature
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE { }
+
+
+// RESOURCE DEFINITIONS
+RESOURCE ARRAY r_filemanager_icon_array
+ {
+ items =
+ {
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerMarkIcon;
+ mbmFile = avkon_mbm_file_location;
+ iconBmpId = EMbmAvkonQgn_indi_marked_add;
+ maskBmpId = EMbmAvkonQgn_indi_marked_add_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnIndiMarkedAdd;
+ iconType = EFileManagerIconColorIcon;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerFolderIcon;
+ mbmFile = avkon_mbm_file_location;
+ iconBmpId = EMbmAvkonQgn_prop_folder_small;
+ maskBmpId = EMbmAvkonQgn_prop_folder_small_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorQgnPropFolderSmall;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerFolderSubIcon;
+ mbmFile = avkon_mbm_file_location;
+ iconBmpId = EMbmAvkonQgn_prop_folder_sub_small;
+ maskBmpId = EMbmAvkonQgn_prop_folder_sub_small_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorQgnPropFolderSubSmall;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerFolderEmptyIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_folder_empty;
+ maskBmpId = EMbmFilemanagerQgn_prop_folder_empty_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorGenericQgnPropFolderEmpty;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerMemoryCardIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_mmc_memc;
+ maskBmpId = EMbmFilemanagerQgn_prop_mmc_memc_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorQgnPropMmcMemc;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerPhoneMemoryIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_phone_memc;
+ maskBmpId = EMbmFilemanagerQgn_prop_phone_memc_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorQgnPropPhoneMemc;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerImageFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_image;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_image_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileImage;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerPictureMsgFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_gms;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_gms_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileGms;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerDycLogoFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_dyc_logos;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_dyc_logos_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrDycLogos;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerLinkFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_link;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_link_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileLink;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerVoicerecFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_voicerec;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_voicerec_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileVoicerec;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerSoundFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_sound;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_sound_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileSound;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerPlaylistFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_playlist;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_playlist_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFilePlaylist;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerCompoFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_compo;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_compo_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileCompo;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerNoteFileIcon;
+ mbmFile = avkon_mbm_file_location;
+ iconBmpId = EMbmAvkonQgn_prop_nrtyp_note;
+ maskBmpId = EMbmAvkonQgn_prop_nrtyp_note_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorQgnPropNrtypNote;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerAppFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_apps;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_apps_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileApps;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerVideoFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_video;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_video_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrFileVideo;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerGameFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_game;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_game_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorQgnPropFmgrFileGame;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerOtherFileIcon;
+ mbmFile = commondialogs_mbm_file_location;
+ iconBmpId = EMbmCommondialogsQgn_prop_fmgr_file_other;
+ maskBmpId = EMbmCommondialogsQgn_prop_fmgr_file_other_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorQgnPropFmgrFileOther;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerFlashFileIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_file_swf_small;
+ maskBmpId = EMbmFilemanagerQgn_prop_file_swf_small_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFileSwfSmall;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerPhoneMemoryMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_fmgr_phone_memc_sub;
+ maskBmpId = EMbmFilemanagerQgn_prop_fmgr_phone_memc_sub_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrPhoneMemcSub;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerMemoryCardPresentMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_fmgr_mmc_sub;
+ maskBmpId = EMbmFilemanagerQgn_prop_fmgr_mmc_sub_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrMmcSub;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerMemoryCardNotPresentMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_fmgr_mmc_no_sub;
+ maskBmpId = EMbmFilemanagerQgn_prop_fmgr_mmc_no_sub_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrMmcNoSub;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerBackupMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_fmgr_backup_sub;
+ maskBmpId = EMbmFilemanagerQgn_prop_fmgr_backup_sub_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrBackupSub;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerRemoteDriveConnectedIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_indi_connection_on_add;
+ maskBmpId = EMbmFilemanagerQgn_indi_connection_on_add_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnIndiConnectionOnAdd;
+ iconType = EFileManagerIconColorIcon;
+ },
+ FILEMANAGER_ICON
+ {
+ iconId = EFileManagerRemoteDriveMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_menu_fmgr_remote_drive;
+ maskBmpId = EMbmFilemanagerQgn_menu_fmgr_remote_drive_mask;
+ majorSkinId = EAknsMajorGeneric;
+ // There is no own skin for qgn_menu_fmgr_remote_drive
+ minorSkinId = EAknsMinorGenericQgnPropRemoteDriveMemcLarge;
+ }
+//#ifdef RD_MULTIPLE_DRIVE
+ ,FILEMANAGER_ICON
+ {
+ iconId = EFileManagerMassStorageMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_fmgr_ms_sub;
+ maskBmpId = EMbmFilemanagerQgn_prop_fmgr_ms_sub_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrMsSub;
+ }
+//#endif // RD_MULTIPLE_DRIVE
+ ,FILEMANAGER_ICON
+ {
+ iconId = EFileManagerUsbMemoryMainIcon;
+ mbmFile = filemanager_mbm_file_location;
+ iconBmpId = EMbmFilemanagerQgn_prop_usb_memc_sub; // Change these after USB icons available
+ maskBmpId = EMbmFilemanagerQgn_prop_usb_memc_sub_mask;
+// iconBmpId = EMbmFilemanagerQgn_prop_fmgr_ms_sub;
+// maskBmpId = EMbmFilemanagerQgn_prop_fmgr_ms_sub_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrUsbMemcSub;
+// minorSkinId = EAknsMinorGenericQgnPropFmgrMsSub;
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_file_name_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EDataLayout;
+ label = qtn_fldr_item_name_prmpt;
+ control = EDWIN
+ {
+ flags = EEikEdwinNoHorizScrolling |
+ EEikEdwinResizable |
+ EEikEdwinNoLineOrParaBreaks;
+ lines = 1;
+ maxlength = 256;
+ };
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_popup_dialog
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ };
+ }
+ };
+ }
+
+RESOURCE LISTBOX r_filemanager_setting_listbox
+ {
+ flags = EAknListBoxMultipleSelection;
+ }
+
+RESOURCE AVKON_SETTING_PAGE r_filemanager_setting_checkbox_page
+ {
+ softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__MARK;
+ type = EAknSetListBox;
+ editor_resource_id = r_filemanager_setting_listbox;
+ menubar = R_AVKON_MENUPANE_EMPTY;
+ }
+
+RESOURCE AVKON_SETTING_PAGE r_filemanager_setting_radiobutton_page
+ {
+ softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__SELECT;
+ type = EAknSetListBox;
+ editor_resource_id = r_filemanager_setting_listbox;
+ menubar = R_AVKON_MENUPANE_EMPTY;
+ }
+
+RESOURCE TIME_EDITOR r_filemanager_time_editor
+ {
+ minTime = TIME{ second = 0; minute = 0; hour = 0; };
+ maxTime = TIME{ second = 59; minute = 59; hour = 23; };
+ flags = EEikTimeWithoutSecondsField;
+ }
+
+RESOURCE AVKON_SETTING_PAGE r_filemanager_time_setting_page
+ {
+ type = EEikCtTimeEditor;
+ editor_resource_id = r_filemanager_time_editor;
+ }
+
+RESOURCE DIALOG r_filemanager_info_query
+ {
+ flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtPopupHeadingPane;
+ id = EAknMessageQueryHeaderId;
+ control = AVKON_HEADING
+ {
+ label = qtn_apps_fmgr_list;
+ };
+ },
+ DLG_LINE
+ {
+ type = EAknCtMessageQuery;
+ id = EAknMessageQueryContentId;
+ control = AVKON_MESSAGE_QUERY
+ {
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_info_confirm_query_with_ok
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ bmpfile = AVKON_ICON_FILE;
+ bmpid = EMbmAvkonQgn_note_info;
+ bmpmask = EMbmAvkonQgn_note_info_mask;
+ animation = R_QGN_NOTE_INFO_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_error_confirm_query_with_ok
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ bmpfile = AVKON_ICON_FILE;
+ bmpid = EMbmAvkonQgn_note_error;
+ bmpmask = EMbmAvkonQgn_note_error_mask;
+ animation = R_QGN_NOTE_ERROR_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_confirm_query_with_yes_no
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_YES_NO;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ bmpfile = AVKON_ICON_FILE;
+ bmpid = EMbmAvkonQgn_note_query;
+ bmpmask = EMbmAvkonQgn_note_query_mask;
+ animation = R_QGN_NOTE_QUERY_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_confirm_query_with_ok_cancel
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_CONFIRMATION_QUERY
+ {
+ layout = EConfirmationQueryLayout;
+ bmpfile = AVKON_ICON_FILE;
+ bmpid = EMbmAvkonQgn_note_query;
+ bmpmask = EMbmAvkonQgn_note_query_mask;
+ animation = R_QGN_NOTE_QUERY_ANIM;
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_simple_password_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtQuery;
+ id = EGeneralQuery;
+ control = AVKON_DATA_QUERY
+ {
+ layout = ECodeLayout;
+ control = SECRETED
+ {
+ num_letters = 8; // Only 8 Unicode chars fit
+ };
+ };
+ }
+ };
+ }
+
+RESOURCE DIALOG r_filemanager_password_query
+ {
+ flags = EGeneralQueryFlags;
+ buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+ items=
+ {
+ DLG_LINE
+ {
+ type = EAknCtMultilineQuery;
+ id = EMultilineFirstLine;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EMultiDataFirstSecEd;
+ label = qtn_memc_set_password_prompt1;
+ control = SECRETED
+ {
+ num_letters = 8; // Only 8 Unicode chars fit
+ };
+ };
+ },
+
+ DLG_LINE
+ {
+ type = EAknCtMultilineQuery;
+ id = EMultilineSecondLine;
+ control = AVKON_DATA_QUERY
+ {
+ layout = EMultiDataSecondSecEd;
+ label = qtn_memc_set_password_prompt2;
+ control = SECRETED
+ {
+ num_letters = 8; // Only 8 Unicode chars fit
+ };
+ };
+ }
+ };
+ }
+
+// -----------------------------------------------------------------------------
+//
+// r_filemanager_folder_navigation_pane
+// folder indicator for navipane
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE FILEMANAGER_FOLDER_NAVIGATION_PANE r_filemanager_folder_navigation_pane
+ {
+ bmpfile = filemanager_mbm_file_location;
+ foldericonid = EMbmFilemanagerQgn_prop_folder_tab;
+ foldermaskid = EMbmFilemanagerQgn_prop_folder_tab_mask;
+ majorSkinId = EAknsMajorAvkon;
+ minorSkinId = EAknsMinorQgnPropFolderTab;
+ separator = qtn_memc_main_separator;
+ endchar = qtn_memc_main_end;
+
+
+ folderindicators =
+ {
+ FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ {
+ id = EFmPhoneMemory;
+ bmpfile = filemanager_mbm_file_location;
+ rooticonid = EMbmFilemanagerQgn_prop_memc_phone_tab;
+ rootmaskid = EMbmFilemanagerQgn_prop_memc_phone_tab_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropMemcPhoneTab;
+ },
+ FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ {
+ id = EFmMemoryCard;
+ bmpfile = filemanager_mbm_file_location;
+ rooticonid = EMbmFilemanagerQgn_prop_memc_mmc_tab;
+ rootmaskid = EMbmFilemanagerQgn_prop_memc_mmc_tab_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropMemcMmcTab;
+ },
+ FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ {
+ id = EFmRemoteDrive;
+ bmpfile = filemanager_mbm_file_location;
+ rooticonid = EMbmFilemanagerQgn_prop_fmgr_remote_drive_tab;
+ rootmaskid = EMbmFilemanagerQgn_prop_fmgr_remote_drive_tab_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropFmgrRemoteDriveTab;
+ }
+#ifdef RD_MULTIPLE_DRIVE
+ ,FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ {
+ id = EFmMassStorage;
+ bmpfile = filemanager_mbm_file_location;
+ rooticonid = EMbmFilemanagerQgn_prop_memc_ms_tab;
+ rootmaskid = EMbmFilemanagerQgn_prop_memc_ms_tab_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropMemcMsTab;
+ }
+#endif // RD_MULTIPLE_DRIVE
+ ,FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ {
+ id = EFmUsbMemory;
+ bmpfile = filemanager_mbm_file_location;
+ rooticonid = EMbmFilemanagerQgn_prop_usb_memc_tab; // Change these after USB icons available
+ rootmaskid = EMbmFilemanagerQgn_prop_usb_memc_tab_mask;
+// rooticonid = EMbmFilemanagerQgn_prop_memc_ms_tab;
+// rootmaskid = EMbmFilemanagerQgn_prop_memc_ms_tab_mask;
+ majorSkinId = EAknsMajorGeneric;
+ minorSkinId = EAknsMinorGenericQgnPropUsbMemcTab;
+// minorSkinId = EAknsMinorGenericQgnPropMemcMsTab;
+ }
+ };
+ }
+
+// LOCALIZED STRINGS
+// Different titles for info popup
+RESOURCE TBUF r_qtn_fmgr_info_heading_file { buf = qtn_fmgr_info_heading_file; }
+RESOURCE TBUF r_qtn_fmgr_info_heading_fldr { buf = qtn_fmgr_info_heading_fldr; }
+RESOURCE TBUF r_qtn_fmgr_info_heading_link { buf = qtn_fmgr_info_heading_link; }
+
+// Headings for info popup
+RESOURCE TBUF r_qtn_swins_lsh2_apps_name { buf = qtn_swins_lsh2_apps_name; }
+RESOURCE TBUF r_qtn_swins_lsh2_apps_type { buf = qtn_swins_lsh2_apps_type; }
+RESOURCE TBUF r_qtn_album_datim_date { buf = qtn_album_datim_date; }
+RESOURCE TBUF r_qtn_album_datim_time { buf = qtn_album_datim_time; }
+RESOURCE TBUF r_qtn_album_litxt_size { buf = qtn_album_litxt_size; }
+RESOURCE TBUF r_qtn_fmgr_info_fldr_default { buf = qtn_fmgr_info_fldr_default; }
+RESOURCE TBUF r_qtn_fmgr_info_contain_fldr { buf = qtn_fmgr_info_contain_fldr; }
+RESOURCE TBUF r_qtn_fmgr_info_contain_file { buf = qtn_fmgr_info_contain_file; }
+
+// Data strings for info popup
+RESOURCE TBUF r_qtn_fmgr_info_def_fldr_text { buf = qtn_fmgr_info_def_fldr_text; }
+RESOURCE TBUF r_filemanager_default_folder_name { buf = qtn_fldr_name_default; }
+RESOURCE TBUF r_filemanager_default_folder_name_n { buf = qtn_fldr_name_default"(%U)"; }
+RESOURCE TBUF r_qtn_fldr_name_already_used { buf = qtn_fldr_name_already_used; }
+RESOURCE TBUF r_qtn_wmlbm_name_already_used { buf = qtn_wmlbm_name_already_used; }
+RESOURCE TBUF r_qtn_fldr_bad_file_name { buf = qtn_fldr_bad_file_name; }
+RESOURCE TBUF r_qtn_fldr_illegal_characters { buf = qtn_fldr_illegal_characters; }
+RESOURCE TBUF r_qtn_item_overwrite_query { buf = qtn_fldr_overwrite_query; }
+
+RESOURCE TBUF r_qtn_drm_mgr_det2_play { buf = qtn_drm_mgr_det2_play; }
+RESOURCE TBUF r_qtn_drm_mgr_det2_display { buf = qtn_drm_mgr_det2_display; }
+RESOURCE TBUF r_qtn_drm_mgr_det2_execute { buf = qtn_drm_mgr_det2_execute; }
+RESOURCE TBUF r_qtn_drm_mgr_det2_print { buf = qtn_drm_mgr_det2_print; }
+RESOURCE TBUF r_qtn_drm_mgr_det_full_x { buf = qtn_drm_mgr_det_full_x; }
+RESOURCE TBUF r_qtn_drm_mgr_det_unlimited { buf = qtn_drm_mgr_det_unlimited; }
+RESOURCE TBUF r_qtn_drm_mgr_det_utl_x { buf = qtn_drm_mgr_det_utl_x; }
+RESOURCE TBUF r_qtn_drm_mgr_det_1_count { buf = qtn_drm_mgr_det_1_count; }
+RESOURCE TBUF r_qtn_drm_mgr_det_n_counts { buf = qtn_drm_mgr_det_n_counts; }
+RESOURCE TBUF r_qtn_drm_mgr_det_uts_x { buf = qtn_drm_mgr_det_uts_x; }
+RESOURCE TBUF r_qtn_drm_mgr_det_not_act { buf = qtn_drm_mgr_det_not_act; }
+RESOURCE TBUF r_qtn_drm_mgr_det_udl_x { buf = qtn_drm_mgr_det_udl_x; }
+RESOURCE TBUF r_qtn_drm_mgr_det_inter { buf = qtn_drm_mgr_det_inter; }
+RESOURCE TBUF r_qtn_drm_mgr_det_inter_two { buf = qtn_drm_mgr_det_inter_two; }
+RESOURCE TBUF r_qtn_drm_nbr_of_years_one { buf = qtn_drm_nbr_of_years_one; }
+RESOURCE TBUF r_qtn_drm_nbr_of_years_one_final { buf = qtn_drm_nbr_of_years_one_final; }
+RESOURCE TBUF r_qtn_drm_nbr_of_years_two_four { buf = qtn_drm_nbr_of_years_two_four; }
+RESOURCE TBUF r_qtn_drm_nbr_of_years_five_zero { buf = qtn_drm_nbr_of_years_five_zero; }
+RESOURCE TBUF r_qtn_drm_nbr_of_months_one { buf = qtn_drm_nbr_of_months_one; }
+RESOURCE TBUF r_qtn_drm_nbr_of_months_five_zero { buf = qtn_drm_nbr_of_months_five_zero; }
+RESOURCE TBUF r_qtn_drm_nbr_of_months_two_four { buf = qtn_drm_nbr_of_months_two_four; }
+RESOURCE TBUF r_qtn_drm_nbr_of_days_one { buf = qtn_drm_nbr_of_days_one; }
+RESOURCE TBUF r_qtn_drm_nbr_of_days_one_final { buf = qtn_drm_nbr_of_days_one_final; }
+RESOURCE TBUF r_qtn_drm_nbr_of_days_two_four { buf = qtn_drm_nbr_of_days_two_four; }
+RESOURCE TBUF r_qtn_drm_nbr_of_days_five_zero { buf = qtn_drm_nbr_of_days_five_zero; }
+RESOURCE TBUF r_qtn_drm_nbr_of_hours_one { buf = qtn_drm_nbr_of_hours_one; }
+RESOURCE TBUF r_qtn_drm_nbr_of_hours_one_final { buf = qtn_drm_nbr_of_hours_one_final; }
+RESOURCE TBUF r_qtn_drm_nbr_of_hours_two_four { buf = qtn_drm_nbr_of_hours_two_four; }
+RESOURCE TBUF r_qtn_drm_nbr_of_hours_five_zero { buf = qtn_drm_nbr_of_hours_five_zero; }
+RESOURCE TBUF r_qtn_drm_nbr_of_mins_one { buf = qtn_drm_nbr_of_mins_one; }
+RESOURCE TBUF r_qtn_drm_nbr_of_mins_one_final { buf = qtn_drm_nbr_of_mins_one_final; }
+RESOURCE TBUF r_qtn_drm_nbr_of_mins_two_four { buf = qtn_drm_nbr_of_mins_two_four; }
+RESOURCE TBUF r_qtn_drm_nbr_of_mins_five_zero { buf = qtn_drm_nbr_of_mins_five_zero; }
+RESOURCE TBUF r_qtn_drm_nbr_of_secs_one { buf = qtn_drm_nbr_of_secs_one; }
+RESOURCE TBUF r_qtn_drm_nbr_of_secs_one_final { buf = qtn_drm_nbr_of_secs_one_final; }
+RESOURCE TBUF r_qtn_drm_nbr_of_secs_two_four { buf = qtn_drm_nbr_of_secs_two_four; }
+RESOURCE TBUF r_qtn_drm_nbr_of_secs_five_zero { buf = qtn_drm_nbr_of_secs_five_zero; }
+RESOURCE TBUF r_qtn_drm_mgr_det_rvf_x { buf = qtn_drm_mgr_det_rvf_x; }
+RESOURCE TBUF r_qtn_drm_mgr_det_rvt_x { buf = qtn_drm_mgr_det_rvt_x; }
+RESOURCE TBUF r_qtn_drm_mgr_det_cs { buf = qtn_drm_mgr_det_cs; }
+RESOURCE TBUF r_qtn_drm_mgr_det_allowed { buf = qtn_drm_mgr_det_allowed; }
+RESOURCE TBUF r_qtn_drm_mgr_det_forbid { buf = qtn_drm_mgr_det_forbid; }
+RESOURCE TBUF r_qtn_drm_mgr_det_stat { buf = qtn_drm_mgr_det_stat; }
+RESOURCE TBUF r_qtn_drm_mgr_det_valid { buf = qtn_drm_mgr_det_valid; }
+RESOURCE TBUF r_qtn_drm_mgr_det_exp { buf = qtn_drm_mgr_det_exp; }
+RESOURCE TBUF r_qtn_drm_mgr_det_accum_time_left { buf = qtn_drm_mgr_det_accum_time_left; }
+RESOURCE TBUF r_qtn_fmgr_drm_det_link { buf = qtn_drm_mgr_title_pane; }
+RESOURCE TBUF r_qtn_fmgr_drm_det_link_view { buf = qtn_drm_mgr_group_mo_view_det; }
+RESOURCE TBUF r_qtn_fm_warning_file_extension { buf = qtn_fm_warning_file_extension; }
+
+// Memory card details info popup
+RESOURCE TBUF r_qtn_fmgr_memcard_info_heading { buf = qtn_fmgr_memcard_info_heading; }
+RESOURCE TBUF r_qtn_fmgr_card_info_name { buf = qtn_fmgr_card_info_name; }
+RESOURCE TBUF r_qtn_fmgr_card_info_default_name { buf = qtn_fmgr_card_info_default_name; }
+RESOURCE TBUF r_qtn_fmgr_card_info_size { buf = qtn_fmgr_card_info_size; }
+RESOURCE TBUF r_qtn_fmgr_card_info_used { buf = qtn_fmgr_card_info_used; }
+RESOURCE TBUF r_qtn_fmgr_card_info_free { buf = qtn_fmgr_card_info_free; }
+RESOURCE TBUF r_qtn_fmgr_card_info_data { buf = qtn_fmgr_card_info_data; }
+// Password
+RESOURCE TBUF r_qtn_passwords_dont_match_text { buf = qtn_memc_set_password_error; }
+
+RESOURCE TBUF r_qtn_drm_mgr_det_not_valid_yet { buf = qtn_drm_mgr_det_not_valid_yet; }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerCheckBoxSettingPage.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2006 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: Checkbox setting page
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERCHECKBOXSETTINGPAGE_H
+#define C_FILEMANAGERCHECKBOXSETTINGPAGE_H
+
+
+// INCLUDES
+#include <akncheckboxsettingpage.h>
+
+
+// CLASS DECLARATION
+/**
+ * This class implements checkbox setting page
+ *
+ * @lib FileManagerView.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS(CFileManagerCheckBoxSettingPage) :
+ public CAknCheckBoxSettingPage
+ {
+
+public:
+ /**
+ * Constructor.
+ * @see CAknCheckBoxSettingPage
+ */
+ CFileManagerCheckBoxSettingPage(
+ const TInt aResourceID,
+ CSelectionItemList& aItemArray,
+ const TInt aDominantItemIndex );
+
+ ~CFileManagerCheckBoxSettingPage();
+
+private: // From CAknCheckBoxSettingPage
+ void UpdateSettingL();
+
+private: // New functions
+ void UpdateSelection();
+
+private: // Data
+ /**
+ * Pointer to items array
+ * Not own.
+ */
+ CSelectionItemList& iItemsArray;
+
+ /**
+ * Index of the dominant item
+ */
+ TInt iDominantItemIndex;
+
+ };
+
+#endif // C_FILEMANAGERCHECKBOXSETTINGPAGE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerFileNameQueryDlg.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2002-2006 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: Dialog for asking file name from user
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFILENAMEQUERYDLG_H
+#define CFILEMANAGERFILENAMEQUERYDLG_H
+
+// INCLUDES
+#include <AknQueryDialog.h> // CAknTextQueryDialog
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+// CLASS DECLARATION
+/**
+ * Dialog for querying file names in File Manager
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.0
+ */
+NONSHARABLE_CLASS(CFileManagerFileNameQueryDlg) : public CAknTextQueryDialog
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aOldName Old name of the file, this will be the default name
+ * @param aNewName User entered new name of the file.
+ * @param aEngine Reference to File Manager engine.
+ * @return Newly created query dialog.
+ */
+ static CFileManagerFileNameQueryDlg* NewL(
+ const TDesC& aOldName,
+ TDes& aNewName,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFileNameQueryDlg();
+
+ private: // from CAknTextQueryDialog
+ /**
+ * @see CAknTextQueryDialog
+ */
+ TBool OkToExitL( TInt aButtonId );
+
+ /**
+ * @see CAknTextQueryDialog
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFileNameQueryDlg(
+ TDes& aNewName, CFileManagerEngine& aEngine );
+
+ /**
+ * Symbian OS 2nd phase constructor.
+ * @param aOldName Old name of the file, this will be the default name
+ */
+ void ConstructL( const TDesC& aOldName );
+
+ /**
+ * Performs exit checking
+ * @param aButtonId Button identifier
+ */
+ TBool DoOkToExitL( TInt aButtonId );
+
+ private: // Data
+ /// Ref: Reference to File Manager engine
+ CFileManagerEngine& iEngine;
+ /// Own: Old file name
+ HBufC* iOldName;
+ /// For blocking unwanted softkey events
+ TBool iCallbackDisabled;
+ };
+
+#endif // CFILEMANAGERFILENAMEQUERYDLG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerFullOmaDrmInfo.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2005-2006 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: Gets the item DRM information
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFULLOMADRMINFO_H
+#define CFILEMANAGERFULLOMADRMINFO_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+
+
+// FORWARD DECLARATIONS
+class CCoeEnv;
+class DRM::CDrmUiHandling;
+
+// CLASS DECLARATION
+/**
+ * Collects the drm info of item and puts strings to given array
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.8
+ */
+NONSHARABLE_CLASS(CFileManagerFullOmaDrmInfo) : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aArray Array which is filled with DRM information,
+ * to be displayed in info popup
+ * @param aFullPath Full path to item which DRM info is needed
+ * @param aCoeEnv Control environment
+ * @return Newly created popup.
+ */
+ static CFileManagerFullOmaDrmInfo* NewL(
+ CDesCArray& aArray, const TDesC& aFullPath, CCoeEnv& aCoeEnv );
+
+ /**
+ * Two-phased constructor.
+ * @param aArray Array which is filled with DRM information,
+ * to be displayed in info popup
+ * @param aFullPath Full path to item which DRM info is needed
+ * @param aCoeEnv Control environment
+ * @return Newly created popup.
+ */
+ static CFileManagerFullOmaDrmInfo* NewLC(
+ CDesCArray& aArray, const TDesC& aFullPath, CCoeEnv& aCoeEnv );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFullOmaDrmInfo();
+
+ public: // New functions
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ /**
+ * Two-phased constructor.
+ * @param aFullPath Full path to item which DRM info is needed
+ * @param aCoeEnv Control environment
+ * @param aUiHandling DRM UI Handler
+ */
+ static void ViewDetailsL( const TDesC& aFullPath, DRM::CDrmUiHandling* aUiHandling );
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ private:
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(
+ CDesCArray& aArray,
+ const TDesC& aFullPath,
+ CCoeEnv& aCoeEnv );
+
+ /**
+ * C++ default constructor.
+ * @param aProperties Properties of the item that will be shown
+ */
+ CFileManagerFullOmaDrmInfo();
+
+ };
+
+#endif // CFILEMANAGERFULLOMADRMINFO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerGlobalDlg.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2006 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: Global dialog handling
+*
+*/
+
+
+#ifndef C_FILEMANAGERLOBALDLG_H
+#define C_FILEMANAGERLOBALDLG_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include "MFileManagerGlobalDlgObserver.h"
+
+
+// FORWARD DECLARATIONS
+class CFileManagerGlobalQueryDlg;
+class CAknGlobalProgressDialog;
+class CAknGlobalNote;
+
+
+// CLASS DECLARATION
+/**
+ * This class handles global dialog wrapping
+ *
+ * @lib FileManagerView.lib
+ * @since S60 3.1
+ */
+class CFileManagerGlobalDlg : public CActive,
+ public MFileManagerGlobalDlgObserver
+ {
+
+public: // New functions
+ // Global dialog types
+ enum TType
+ {
+ ECountdownQuery = 0,
+ EQuery,
+ EProgressDialog,
+ EErrorNote,
+ EInfoNote,
+ EQueryWithWarningIcon,
+ EQueryWithInfoIcon
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ IMPORT_C static CFileManagerGlobalDlg* NewL();
+
+ /**
+ * Destructor
+ */
+ IMPORT_C ~CFileManagerGlobalDlg();
+
+ /**
+ * Sets global dialog observer
+ *
+ * @since S60 3.1
+ * @param aObserver Pointer to observer
+ */
+ IMPORT_C void SetObserver(
+ MFileManagerGlobalDlgObserver* aObserver );
+
+ /**
+ * Cancels global dialog
+ *
+ * @since S60 3.1
+ */
+ IMPORT_C void CancelDialog();
+
+ /**
+ * Shows global dialog
+ *
+ * @since S60 3.1
+ * @param aType Global dialog type
+ * @param aText Text to display
+ * @param aSkId Softkeys to display
+ */
+ IMPORT_C void ShowDialogL(
+ const CFileManagerGlobalDlg::TType aType,
+ const TDesC& aText,
+ const TInt aSkId = 0 );
+
+ /**
+ * Shows global dialog
+ *
+ * @since S60 3.1
+ * @param aType Global dialog type
+ * @param aTextId TextId to display
+ * @param aSkId Softkeys to display
+ */
+ IMPORT_C void ShowDialogL(
+ const CFileManagerGlobalDlg::TType aType,
+ const TInt aTextId,
+ const TInt aSkId = 0 );
+
+ /**
+ * Updates global progress dialog
+ *
+ * @since S60 3.1
+ * @param aValue Current progress value
+ * @param aFinalValue Final progress value
+ */
+ IMPORT_C void UpdateProgressDialog(
+ const TInt aValue,
+ const TInt aFinalValue = - 1);
+
+ /**
+ * Finishes global progress dialog
+ *
+ * @since S60 3.1
+ */
+ IMPORT_C void ProcessFinished();
+
+private: // From CActive
+ /**
+ * @see CActive
+ */
+ void DoCancel();
+
+ /**
+ * @see CActive
+ */
+ void RunL();
+
+private: // From MFileManagerGlobalDlgObserver
+ void HandleGlobalDlgResult(
+ TInt aDlgType,
+ TInt aDlgResult );
+
+private:
+ /**
+ * Constructors
+ */
+ CFileManagerGlobalDlg();
+
+ void ConstructL();
+
+ /**
+ * Countdown timer callback
+ * @param aPtr Pointer to this class instance
+ */
+ static TInt CountdownCB( TAny* aPtr );
+
+ /**
+ * Countdown timer callback
+ */
+ void CountdownL();
+
+ /**
+ * Starts countdown
+ * @param aTimeout Timeout value
+ */
+ void StartCountdownL( const TUint aTimeout );
+
+ /**
+ * Notifies global dialog observer
+ * @param aValue Value to notify
+ */
+ void NotifyObserver( const TInt aValue );
+
+private: // Data
+ /**
+ * Pointer to global query dialog
+ * Own.
+ */
+ CFileManagerGlobalQueryDlg* iQueryDialog;
+
+ /**
+ * Pointer to global progress dialog
+ * Own.
+ */
+ CAknGlobalProgressDialog* iProgressDialog;
+
+ /**
+ * Pointer to countdown step timer
+ * Own.
+ */
+ CPeriodic* iCountdown;
+
+ /**
+ * Steps to countdown
+ */
+ TInt iCountdownSteps;
+
+ /**
+ * Pointer to global dialog observer
+ * Not own.
+ */
+ MFileManagerGlobalDlgObserver* iObserver;
+
+ /**
+ * Global dialog type
+ */
+ TType iType;
+
+ /**
+ * Global progress dialog final value
+ */
+ TInt iFinalValue;
+
+ /**
+ * Pointer to countdown text
+ * Own.
+ */
+ HBufC* iCountdownText;
+ };
+
+#endif // C_FILEMANAGERLOBALDLG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerGlobalQueryDlg.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2006 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: Global query dialog handling
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERLOBALQUERYDLG_H
+#define C_FILEMANAGERLOBALQUERYDLG_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// FORWARD DECLARATIONS
+class CAknGlobalConfirmationQuery;
+class MFileManagerGlobalDlgObserver;
+
+
+// CLASS DECLARATION
+/**
+ * This class handles global query dialog
+ *
+ * @lib FileManagerView.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS(CFileManagerGlobalQueryDlg) : public CActive
+ {
+
+public: // New functions
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerGlobalQueryDlg* NewL();
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerGlobalQueryDlg();
+
+ /**
+ * Sets global query observer
+ *
+ * @since S60 3.1
+ * @param aObserver Pointer to observer
+ */
+ void SetObserver(
+ MFileManagerGlobalDlgObserver* aObserver );
+
+ /**
+ * Cancels global query
+ *
+ * @since S60 3.1
+ */
+ void CancelDialog();
+
+ /**
+ * Shows global query
+ *
+ * @since S60 3.1
+ * @param aText Text to display
+ * @param aSkId Softkeys to display
+ */
+ void ShowDialogL(
+ const TDesC& aText,
+ const TInt aSkId = 0 );
+
+ /**
+ * Shows global query
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aSkId Softkeys to display
+ */
+ void ShowDialogL(
+ const TInt aTextId,
+ const TInt aSkId = 0 );
+
+ /**
+ * Shows global query
+ *
+ * @since S60 3.1
+ * @param aText Text to display
+ * @param aSkId Softkeys to display
+ * @param aBitmapFile Bitmap file to use
+ * @param aImageId Bitmap id to use
+ * @param aMaskId Bitmap mask id to use
+ */
+ void ShowDialogL(
+ const TDesC& aText,
+ const TInt aSkId,
+ const TDesC& aBitmapFile,
+ const TInt aImageId,
+ const TInt aMaskId );
+
+private: // From CActive
+ /**
+ * @see CActive
+ */
+ void DoCancel();
+
+ /**
+ * @see CActive
+ */
+ void RunL();
+
+private:
+ /**
+ * Constructors
+ */
+ CFileManagerGlobalQueryDlg();
+
+ void ConstructL();
+
+ /**
+ * Notifies global query observer
+ * @param aValue Value to notify
+ */
+ void NotifyObserver( const TInt aValue );
+
+private: // Data
+ /**
+ * Pointer to global query dialog
+ * Own.
+ */
+ CAknGlobalConfirmationQuery* iQueryDialog;
+
+ /**
+ * Pointer to global query observer
+ * Not own.
+ */
+ MFileManagerGlobalDlgObserver* iObserver;
+
+ };
+
+#endif // C_FILEMANAGERLOBALQUERYDLG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerIconArray.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2002-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: All the files and folders icons are stored here
+*
+*/
+
+
+
+#ifndef CFILEMANAGERICONARRAY_H
+#define CFILEMANAGERICONARRAY_H
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CGulIcon;
+
+// CLASS DECLARATION
+/**
+ * Array of icons.
+ * Is an array of icons that is read from resource file.
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.0
+ */
+class CFileManagerIconArray : public CArrayPtrFlat< CGulIcon >
+ {
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ * @return a new icon array.
+ */
+ IMPORT_C static CFileManagerIconArray* NewL();
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CFileManagerIconArray();
+
+ /**
+ * Updates icons.
+ */
+ IMPORT_C void UpdateIconsL();
+
+ /**
+ * Finds array index of the icon
+ * @param aIconId Icon id
+ * @return Array index of the icon or KErrNotFound
+ */
+ IMPORT_C TInt FindIcon( TInt aIconId );
+
+ /**
+ * Loads icon from icon file
+ * @param aIconFile Full path of the icon file
+ * @param aIconId Icon id
+ * @param aMaskId Mask id
+ * @param aMajorSkin Major skin id
+ * @param aMinorSkin Minor skin id
+ * @param aIsColorIcon True if color icon
+ * @return Pointer to new icon and the ownership is transferred.
+ */
+ IMPORT_C static CGulIcon* LoadIconL(
+ const TDesC& aIconFile,
+ TInt aIconId,
+ TInt aMaskId,
+ TInt aMajorSkin,
+ TInt aMinorSkin,
+ TBool aIsColorIcon );
+
+ private:
+ NONSHARABLE_CLASS(TIconInfo)
+ {
+ public:
+ HBufC* iFile;
+ TInt iId;
+ TInt iIconId;
+ TInt iMaskId;
+ TInt iMajorSkinId;
+ TInt iMinorSkinId;
+ TInt iIconType;
+ TInt iIndex;
+ };
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerIconArray();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ void LoadIconL( TIconInfo& aInfo );
+
+ void LoadMandatoryIconsL();
+
+ private: // Data
+ RArray< TIconInfo > iIconInfo;
+
+ };
+
+#endif // CFILEMANAGERICONARRAY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerInfoPopup.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2002-2006 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: Popup to show the item information, view info
+*
+*/
+
+
+#ifndef CFILEMANAGERINFOPOPUP_H
+#define CFILEMANAGERINFOPOPUP_H
+
+// INCLUDES
+#include <e32def.h>
+#include <drmuihandling.h>
+#include "CFileManagerPopupBase.h"
+
+// FORWARD DECLARATIONS
+class CFileManagerItemProperties;
+class CMSPUtil;
+class CFileManagerFeatureManager;
+class DRM::CDrmUiHandling;
+
+// CLASS DECLARATION
+/**
+ * Popup dialog for showing detailed information about item.
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.0
+ */
+NONSHARABLE_CLASS(CFileManagerInfoPopup) : public CFileManagerPopupBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aProperties Properties of the item that will be shown
+ * @param aFeatureManager Reference to the feature manager
+ * @return Newly created popup.
+ */
+ static CFileManagerInfoPopup* NewL(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager );
+
+ private:
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ virtual void ConstructL();
+
+ private: // From CFileManagerPopupBase
+ /**
+ * @see CFileManagerPopupBase
+ */
+ virtual MDesCArray* ConstructDataArrayL();
+
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ /**
+ * @see CFileManagerPopupBase
+ */
+ virtual void ActivateLinkL();
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ private: // New Functions
+ /**
+ * Creates the name entry for data array.
+ * @return Name entry.
+ */
+ HBufC* NameEntryLC();
+
+ /**
+ * Creates the type entry for data array.
+ * @return Type entry.
+ */
+ HBufC* TypeEntryLC();
+
+ /**
+ * Creates the date entry for data array.
+ * @return Date entry.
+ */
+ HBufC* DateEntryLC();
+
+ /**
+ * Creates the time entry for data array.
+ * @return Time entry.
+ */
+ HBufC* TimeEntryLC();
+
+ /**
+ * Creates the size entry for data array.
+ * @return Size entry.
+ */
+ HBufC* SizeEntryLC();
+
+ /**
+ * Creates the default folder entry for data array.
+ * @return Default folder entry.
+ */
+ HBufC* DefaultFolderEntryLC();
+
+
+ /**
+ * Creates the string of given resource id and value
+ * @param resource id of number string
+ * @param aValue value for string
+ * @return HBufC* formatted string, caller must delete it
+ */
+ HBufC* ResourceStringValueLC( TInt aResId, TInt aValue );
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerInfoPopup(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerInfoPopup();
+
+ private: // Data
+ /// Ref: Reference to properties data that will be shown in popup.
+ CFileManagerItemProperties& iProperties;
+
+ // Own: Memory State Popup utilities
+ CMSPUtil* iUtil;
+
+ // Ref: Reference to the feature manager
+ const CFileManagerFeatureManager& iFeatureManager;
+
+ // DRM UI Handler
+ DRM::CDrmUiHandling* iUiHandling;
+
+ };
+
+#endif // CFILEMANAGERINFOPOPUP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerMMCInfoPopup.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2006 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: Memory card info popup
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERMMCINFOPOPUP_H
+#define C_FILEMANAGERMMCINFOPOPUP_H
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <badesca.h>
+
+
+// FORWARD DECLARATIONS
+class CAknSingleHeadingPopupMenuStyleListBox;
+class CAknPopupList;
+class TFileManagerDriveInfo;
+class CMSPUtil;
+
+
+// CLASS DECLARATION
+/**
+ * This class displays memory card info
+ *
+ * @lib FileManagerView.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS(CFileManagerMMCInfoPopup) : public CCoeControl
+ {
+
+public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ * @param aProperties Properties of the item that will be shown
+ * @return Newly created popup.
+ */
+ static CFileManagerMMCInfoPopup* NewL(
+ const TFileManagerDriveInfo& aInfo );
+
+ /**
+ * Executes the dialog.
+ * @return ETrue if dialog was dismissed using OK,
+ * EFalse otherwise.
+ */
+ TBool ExecuteLD();
+
+protected:
+ /**
+ * Destructor.
+ */
+ ~CFileManagerMMCInfoPopup();
+
+private: // New functions
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerMMCInfoPopup();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL( const TFileManagerDriveInfo& aInfo );
+
+ /**
+ * Constructs data array
+ * @param aProperties Properties of the item that will be shown
+ * @return Data array
+ */
+ MDesCArray* ConstructDataArrayL(
+ const TFileManagerDriveInfo& aInfo );
+
+ /**
+ * Creates name entry
+ * @param aProperties Properties of the item that will be shown
+ * @return Name entry
+ */
+ HBufC* NameEntryLC(
+ const TFileManagerDriveInfo& aInfo );
+
+ /**
+ * Creates size entry with text and size
+ * @param aTextId Text to display
+ * @param aSize Size to display
+ * @return Size entry
+ */
+ HBufC* SizeEntryLC( TInt aTextId, TInt64 aSize );
+
+private: // Data
+ /**
+ * Popup list that is the actual dialog that is shown
+ * Own.
+ */
+ CAknPopupList* iPopupList;
+
+ /**
+ * Listbox that is given to CAknPopupList constructor
+ * Own.
+ */
+ CAknSingleHeadingPopupMenuStyleListBox* iListBox;
+
+ /**
+ * Keeps track if destructor is already called
+ * Not own.
+ */
+ TBool* iIsDestroyed;
+
+ /**
+ * Memory State Popup utilities
+ * Own.
+ */
+ CMSPUtil* iUtil;
+
+ };
+
+#endif // C_FILEMANAGERMMCINFOPOPUP_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/CFileManagerPopupBase.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002-2006 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: Base class for file manager popups
+*
+*/
+
+
+
+#ifndef CFILEMANAGERPOPUPBASE_H
+#define CFILEMANAGERPOPUPBASE_H
+
+// INCLUDES
+#include <coecntrl.h>
+
+// FORWARD DECLARATIONS
+class MDesCArray;
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+class CAknMessageQueryDialog;
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+class CAknDoublePopupMenuStyleListBox;
+class CAknPopupList;
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// CLASS DECLARATION
+/**
+ * Base class for all popup dialogs in File Manager
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.0
+ */
+NONSHARABLE_CLASS(CFileManagerPopupBase) : public CCoeControl
+ {
+ public: // Constructors and destructor
+ /**
+ * Executes the dialog.
+ * @return ETrue if dialog was dismissed using OK,
+ * EFalse otherwise.
+ */
+ TBool ExecuteLD();
+ protected:
+ /**
+ * Destructor.
+ */
+ ~CFileManagerPopupBase();
+
+ protected: // New functions
+ /**
+ * Constructs the information that this popup shows.
+ * @return Array of items that will be shown in popup.
+ */
+ virtual MDesCArray* ConstructDataArrayL() = 0;
+
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerPopupBase();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ virtual void ConstructL();
+
+ /**
+ * Sets the title of popup dialog.
+ * @param aTitle New title of popup dialog.
+ */
+ void SetTitleL(const TDesC &aTitle);
+
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ /**
+ * Activates CAknMessageQueryDialog link action.
+ */
+ virtual void ActivateLinkL();
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ private:
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ /**
+ * Callback to implement CAknMessageQueryDialog link action.
+ */
+ static TInt LinkCallback(TAny* aPtr);
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ private: // Data
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ // Own: Dialog title.
+ HBufC* iTitle;
+ // Own: Dialog data.
+ HBufC* iData;
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ // Own: Popup list that is the actual dialog that is shown.
+ CAknPopupList* iPopupList;
+ /// Own: Listbox that is given to CAknPopupList constructor.
+ CAknDoublePopupMenuStyleListBox* iListBox;
+ /// Ref: Keeps track if destructor is already called.
+ TBool* iIsDestroyed;
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ };
+
+#endif // CFILEMANAGERPOPUPBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/Cfilemanagerfoldernamequerydlg.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2002-2006 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: Dialog for asking folder name from user
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFOLDERNAMEQUERYDLG_H
+#define CFILEMANAGERFOLDERNAMEQUERYDLG_H
+
+// INCLUDES
+#include <AknQueryDialog.h> // CAknTextQueryDialog
+
+// FORWARD DECLARATIONS
+class CFileManagerEngine;
+
+// CLASS DECLARATION
+/**
+ * Dialog for querying folder names in File Manager
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.0
+ */
+NONSHARABLE_CLASS(CFileManagerFolderNameQueryDlg) : public CAknTextQueryDialog
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aDataText Old folder name, this will be the default
+ * @param aEngine Reference to File Manager engine.
+ * @param aNameGeneration ETrue if name generation will be used,
+ * EFalse otherwise.
+ * @return Newly created query dialog.
+ */
+ static CFileManagerFolderNameQueryDlg* NewL(
+ TDes& aDataText,
+ CFileManagerEngine& aEngine,
+ TBool aNameGeneration );
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerFolderNameQueryDlg();
+
+ private: // from CAknTextQueryDialog
+ /**
+ * @see CAknTextQueryDialog
+ */
+ TBool OkToExitL( TInt aButtonId );
+
+ /**
+ * @see CAknTextQueryDialog
+ */
+ TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerFolderNameQueryDlg( TDes& aDataText, CFileManagerEngine& aEngine );
+
+ /**
+ * Symbian OS 2nd phase constructor.
+ * @param aNameGeneration ETrue if name generation will be used,
+ * EFalse otherwise.
+ */
+ void ConstructL( TBool aNameGeneration, TDes& aDataText );
+
+ /**
+ * Performs exit checking
+ * @param aButtonId Button identifier
+ */
+ TBool DoOkToExitL( TInt aButtonId );
+
+ private: // Data
+ /// Ref: Reference to File Manager engine.
+ CFileManagerEngine& iEngine;
+ /// Own: Old folder name
+ HBufC* iOldName;
+ /// For blocking unwanted softkey events
+ TBool iCallbackDisabled;
+ };
+
+#endif // CFILEMANAGERFOLDERNAMEQUERYDLG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/Cfilemanagerfoldernavigationpane.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2002-2006 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: Navigation pane for file manager
+*
+*/
+
+
+
+#ifndef CFILEMANAGERFOLDERNAVIGATIONPANE_H
+#define CFILEMANAGERFOLDERNAVIGATIONPANE_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <AknUtils.h> // TAknLayoutRect, TAknLayoutText
+#include <aknlongtapdetector.h>
+#include <AknsItemID.h>
+
+// CONSTANTS
+const TInt KFileManagerMaxFolderDepth = 5; // Includes the root
+
+// FORWARD DECLARATIONS
+class CFbsBitmap;
+class MFileManagerFolderNaviObserver;
+
+// CLASS DECLARATION
+
+/**
+ * Folder navigation pane for File Manager.
+ * Custom navigation pane to show folder depth of the
+ * current folder in navigation pane using folder icons.
+ *
+ * @lib FileManagerView.lib
+ * @since S60 2.0
+ */
+class CFileManagerFolderNavigationPane :
+ public CCoeControl,
+ public MAknLongTapDetectorCallBack
+ {
+ private:
+ /**
+ * Folder indicator set.
+ */
+ class TIndicatorSet
+ {
+ public: // New functions
+ /**
+ * Compares two indicator sets.
+ * @param aFirst First indicator set to compare.
+ * @param aSecond The other indicator set to compare.
+ * @return ETrue if sets are equal, EFalse otherwise.
+ */
+ static TBool Compare(
+ const TIndicatorSet& aFirst,
+ const TIndicatorSet& aSecond );
+
+ public: // Data
+ /// id
+ TInt iId;
+ /// Bitmap file name
+ TFileName iBmpFile;
+ /// Icon bitmap id
+ TInt iIconId;
+ /// Mask bitmap id
+ TInt iMaskId;
+ /// Skin ID
+ TAknsItemID iAknsItemIdRoot;
+
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aRoot Id of the root indicator
+ * @param aDepth Depth of the navigation
+ * @param aReader Resource reader for reading navigation pane from
+ * resource file.
+ * @return Newly created navigation pane.
+ */
+ IMPORT_C static CFileManagerFolderNavigationPane* NewL(
+ const TInt aRoot,
+ const TInt aDepth,
+ TResourceReader& aReader );
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CFileManagerFolderNavigationPane();
+
+
+ public: // New functions
+
+ /**
+ * Specifies how many subfolder icons are displayed.
+ * Depth range is 0..n ( 0 = root, 1 = root+subfolder, etc. )
+ * Depth over 4 is displayed just as tree dots at the end of navipane.
+ * @param aDepth set current depth
+ */
+ IMPORT_C void SetFolderDepth( const TInt aDepth );
+
+ /**
+ * Return current folder depth.
+ * @return aDepth return current depth
+ */
+ IMPORT_C TInt FolderDepth() const;
+
+ /**
+ * Changes the active root
+ * @param aRoot Id of the root indicator
+ */
+ IMPORT_C void ChangeRootL( const TInt aRoot );
+
+ /**
+ * Handles resource change
+ * @param aType Change type
+ */
+ IMPORT_C void HandleResourceChangeL( TInt aType );
+
+ /**
+ * Sets navigation observer
+ * @param aObserver Pointer to navigation observer
+ */
+ IMPORT_C void SetObserver(
+ MFileManagerFolderNaviObserver* aObserver );
+
+ protected: // Functions From CCoeControl
+
+ /**
+ * @see CCoeControl
+ */
+ void SizeChanged();
+
+ /**
+ * @see CCoeControl
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * @see CCoeControl
+ */
+ void HandlePointerEventL(
+ const TPointerEvent& aPointerEvent );
+
+ private: // From MAknLongTapDetectorCallBack
+ /**
+ * @see MAknLongTapDetectorCallBack
+ */
+ void HandleLongTapEventL(
+ const TPoint& aPenEventLocation,
+ const TPoint& aPenEventScreenLocation );
+
+ private:
+
+ /**
+ * C++ default constructor.
+ * @param aDepth Depth of the navigation
+ */
+ CFileManagerFolderNavigationPane(
+ const TInt aRoot, const TInt aDepth );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param aRoot Id of the root indicator
+ * @param aReader Resource reader for reading navigation pane from
+ * resource file.
+ */
+ void ConstructL( TResourceReader& aReader );
+
+ private: // New functions
+ /**
+ * Notifies CCoeControl to redraw the pane
+ */
+ void ReportChange();
+
+ /**
+ * Loads folder bitmaps
+ */
+ void LoadFolderBitmapL();
+
+ /**
+ * Checks does position map to drawn navigation level icon
+ */
+ TInt CheckHitFolderLevel( const TPoint& aPos );
+
+ private: // Data
+
+ // 0 = phone, 1 = MMC
+ TInt iRoot;
+
+ /// Own: Bitmap for subfolders
+ CFbsBitmap* iFolderBitmap;
+
+ /// Own: Bitmap mask for subfolders
+ CFbsBitmap* iFolderMask;
+
+ /// Own: Name of the bitmap file for folder icon and mask
+ HBufC* iBmpFile;
+
+ /// Id for folder icon bitmap
+ TInt iFolderIconId;
+
+ /// Id for folder icon mask
+ TInt iFolderMaskId;
+
+ /// Own: Separator character for folders
+ HBufC* iSeparator;
+
+ /// Own: The end character append to the indicator after iMaxDepth is reached
+ HBufC* iEndChar;
+
+ /// Id for folder skin
+ TAknsItemID iAknsItemIdFolder;
+
+ /// Maximum folder depth displayed in indicator
+ TInt iMaxDepth;
+
+ /// Own: Bitmap for rootfolder
+ CFbsBitmap* iRootBitmap;
+
+ /// Own: Bitmap mask for rootfolder
+ CFbsBitmap* iRootMask;
+
+ /// Rectangles where bitmaps are drawn ( 0 = rootbitmap, 1..max = defaultbitmaps )
+ TFixedArray<TAknLayoutRect, KFileManagerMaxFolderDepth> iBitmapLayout;
+
+ /// Rectangles where slashs are drawn ( 0..max = \, max + 1 = ... )
+ TFixedArray<TAknLayoutText, KFileManagerMaxFolderDepth + 1> iTextLayout;
+
+ /// Folder depth
+ TInt iDepth;
+
+ /// Array to store folder indicators
+ RArray<TIndicatorSet> iIndicatorArray;
+
+ /// Ref: Pointer to navigation observer
+ MFileManagerFolderNaviObserver* iObserver;
+
+ /// Own: For long tap detecting
+ CAknLongTapDetector* iLongTapDetector;
+
+ /// For long tap handling
+ TBool iLongTap;
+ };
+
+#endif // CMGNAVIPANEOLDERINDICATOR_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/FileManagerDlgUtils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,389 @@
+/*
+* 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: Dialog utilities
+*
+*/
+
+
+
+#ifndef FILEMANAGERVIEWUTILS_H
+#define FILEMANAGERVIEWUTILS_H
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CONSTANTS
+const TInt KIndexNotUsed = -1;
+
+
+// FORWARD DECLARATIONS
+class TFileManagerDriveInfo;
+class CFileManagerEngine;
+class CFileManagerItemProperties;
+class CFileManagerFeatureManager;
+
+
+// CLASS DECLARATION
+/**
+ * This class is used for static dialog utilities
+ *
+ * @lib FileManagerView.lib
+ * @since S60 3.1
+ */
+class FileManagerDlgUtils
+ {
+
+public:
+ /**
+ * Shows one of many setting page
+ *
+ * @since S60 3.1
+ * @param aTitleId Title text id
+ * @param aTextArray Text array for available settings
+ * @param aSelectedIndex For storing selected index
+ * @return ETrue if selection made, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowOOfMSettingQueryL(
+ const TInt aTitleId,
+ const MDesCArray* aTextArray,
+ TInt& aSelectedIndex );
+
+ /**
+ * Shows one of many setting page
+ *
+ * @since S60 3.1
+ * @param aTitleId Title text id
+ * @param aTextIds Text id array for available settings
+ * @param aSelectedIndex For storing selected index
+ * @return ETrue if selection made, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowOOfMSettingQueryL(
+ const TInt aTitleId,
+ const TInt aTextIds,
+ TInt& aSelectedIndex );
+
+ /**
+ * Shows weekday selection setting page
+ *
+ * @since S60 3.1
+ * @param aTitleId Title text id
+ * @param aDay For storing selected weekday
+ * @return ETrue if selection made, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowWeekdayQueryL(
+ const TInt aTitleId,
+ TDay& aDay );
+
+ /**
+ * Shows n of many setting page
+ *
+ * @since S60 3.1
+ * @param aTitleId Title text id
+ * @param aTextIds Text id array for available settings
+ * @param aSelection For storing selected indexes as bitmask
+ * @param aDominantIndex Dominant index for select all behaviour
+ * @return ETrue if selection made, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowNOfMSettingQueryL(
+ const TInt aTitleId,
+ const TInt aTextIds,
+ TUint32& aSelection,
+ const TInt aDominantIndex = KIndexNotUsed );
+
+ /**
+ * Shows time setting page
+ *
+ * @since S60 3.1
+ * @param aTitleId Title text id
+ * @param aTime Selected time
+ * @return ETrue if selection made, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowTimeSettingQueryL(
+ const TInt aTitleId, TTime& aTime );
+
+ /**
+ * Shows memory store info popup
+ *
+ * @since S60 3.1
+ * @param aInfo Memory store info
+ */
+ IMPORT_C static void ShowMemoryStoreInfoPopupL(
+ const TFileManagerDriveInfo& aInfo );
+
+ /**
+ * Shows info query in message query format
+ *
+ * @since S60 3.1
+ * @param aText Text to display
+ */
+ IMPORT_C static void ShowInfoQueryL(
+ const TDesC& aText );
+
+ /**
+ * Shows info query in message query format
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Text value to display
+ */
+ IMPORT_C static void ShowInfoQueryL(
+ const TInt aTextId,
+ const TDesC& aValue = KNullDesC );
+
+ /**
+ * Shows info query in message query format
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Integer value to display
+ */
+ IMPORT_C static void ShowInfoQueryL(
+ const TInt aTextId,
+ const TInt aValue );
+
+ /**
+ * Shows error note
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Text value to display
+ */
+ IMPORT_C static void ShowErrorNoteL(
+ const TInt aTextId,
+ const TDesC& aValue = KNullDesC );
+
+ /**
+ * Shows confirm note
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ */
+ IMPORT_C static void ShowConfirmNoteL( const TInt aTextId );
+
+ /**
+ * Shows warning note
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ */
+ IMPORT_C static void ShowWarningNoteL( const TInt aTextId );
+
+ /**
+ * Shows confirm query with yes no softkey
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Text value to display
+ * @return ETrue is Yes selected, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowConfirmQueryWithYesNoL(
+ const TInt aTextId,
+ const TDesC& aValue = KNullDesC );
+
+ /**
+ * Shows confirm query with yes no softkey
+ *
+ * @since S60 3.1
+ * @param aText Text to display
+ * @return ETrue is Yes selected, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowConfirmQueryWithYesNoL(
+ const TDesC& aText );
+
+ // Dialog icon types
+ enum TIcons
+ {
+ EInfoIcons = 0,
+ EErrorIcons
+ };
+
+ /**
+ * Shows confirm query with ok softkey
+ *
+ * @since S60 3.1
+ * @param aIcons Icons to display
+ * @param aText Text to display
+ * @param aValue Text value to display
+ */
+ IMPORT_C static void ShowConfirmQueryWithOkL(
+ const TIcons aIcons,
+ const TInt aTextId,
+ const TDesC& aValue = KNullDesC );
+
+ /**
+ * Shows confirm query with ok softkey
+ *
+ * @since S60 3.1
+ * @param aIcons Icons to display
+ * @param aText Text to display
+ * @param aValue Integer value to display
+ */
+ IMPORT_C static void ShowConfirmQueryWithOkL(
+ const TIcons aIcons,
+ const TInt aTextId,
+ const TInt aValue );
+
+ /**
+ * Shows confirm query with ok softkey
+ *
+ * @since S60 3.1
+ * @param aIcons Icons to display
+ * @param aText Text to display
+ */
+ IMPORT_C static void ShowConfirmQueryWithOkL(
+ const TIcons aIcons,
+ const TDesC& aText );
+
+ /**
+ * Shows confirm query with ok cancel softkeys
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Text value to display
+ * @return ETrue is Cancel selected, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowConfirmQueryWithOkCancelL(
+ const TInt aTextId,
+ const TDesC& aValue = KNullDesC );
+
+ /**
+ * Shows confirm query with ok cancel softkeys
+ *
+ * @since S60 3.1
+ * @param aText Text to display
+ * @return ETrue is Cancel selected, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowConfirmQueryWithOkCancelL(
+ const TDesC& aText );
+
+ /**
+ * Shows info note
+ *
+ * @since S60 3.1
+ * @param aText Text to display
+ */
+ IMPORT_C static void ShowInfoNoteL(
+ const TDesC& aText );
+
+ /**
+ * Shows info note
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Text value to display
+ */
+ IMPORT_C static void ShowInfoNoteL(
+ const TInt aTextId,
+ const TDesC& aValue = KNullDesC );
+
+ /**
+ * Shows info note
+ *
+ * @since S60 3.1
+ * @param aTextId TextId to display
+ * @param aValue Integer value to display
+ */
+ IMPORT_C static void ShowInfoNoteL(
+ const TInt aTextId,
+ const TInt aValue );
+
+ /**
+ * Shows simple password query
+ *
+ * @since S60 3.1
+ * @param aTitleId Title to display
+ * @param aPwd For storing given password
+ * @return ETrue if password is given, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowSimplePasswordQueryL(
+ const TInt aTitleId, TDes& aPwd );
+
+ /**
+ * Shows password query
+ *
+ * @since S60 3.1
+ * @param aPwd For storing given password
+ * @return ETrue if password is given correctly, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowPasswordQueryL( TDes& aPwd );
+
+ /**
+ * Shows file name query
+ *
+ * @since S60 3.2
+ * @param aTitleId Title text id
+ * @param aOldName Old file name
+ * @param aNewName User given new name
+ * @param aEngine Reference to the engine
+ * @return ETrue if name is given, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowFileNameQueryL(
+ const TInt aTitleId,
+ const TDesC& aOldName,
+ TDes& aNewName,
+ CFileManagerEngine& aEngine );
+
+ /**
+ * Shows folder name query
+ *
+ * @since S60 3.2
+ * @param aTitleId Title text id
+ * @param aName Old folder name, this will be the default for new
+ * @param aEngine Reference to the engine
+ * @param aNameGeneration ETrue if name generation will be used,
+ * EFalse otherwise
+ * @return ETrue if name is given, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowFolderNameQueryL(
+ const TInt aTitleId,
+ TDes& aName,
+ CFileManagerEngine& aEngine,
+ const TBool aNameGeneration = EFalse );
+
+ /**
+ * Shows item info popup
+ *
+ * @since S60 3.2
+ * @param aProperties Item properties
+ * @param aFeatureManager Reference to the feature manager
+ */
+ IMPORT_C static void ShowItemInfoPopupL(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager );
+
+ /**
+ * Shows simple password query with drive name
+ *
+ * @since S60 3.2
+ * @param aText Name to display
+ * @param aPwd For storing given password
+ * @return ETrue if password is given, otherwise EFalse
+ */
+ IMPORT_C static TBool ShowSimplePasswordQueryL(
+ const TDesC& aText, TDes& aPwd );
+
+ /**
+ * Shows error note
+ *
+ * @since S60 3.2
+ * @param aText Text to display
+ */
+ IMPORT_C static void ShowErrorNoteL( const TDesC& aText );
+
+ };
+
+#endif // FILEMANAGERVIEWUTILS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/FileManagerView.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006 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: Resource headers for project FileManagerView
+*
+*/
+
+
+#ifndef FILEMANAGERVIEW_HRH
+#define FILEMANAGERVIEW_HRH
+
+
+// The icon types
+enum TFileManagerIconType
+ {
+ // Standard icon
+ EFileManagerIconStdIcon = 0,
+ // Custom color icon
+ EFileManagerIconColorIcon
+ };
+
+#endif // FILEMANAGERVIEW_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/FileManagerView.rh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2002-2006 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: Resource headers for project FileManagerEngine
+*
+*/
+
+
+#ifndef FILEMANAGERVIEW_RH
+#define FILEMANAGERVIEW_RH
+
+// STRUCTURE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+// FILEMANAGER_ICON
+// -----------------------------------------------------------------------------
+//
+
+STRUCT FILEMANAGER_ICON
+ {
+ BYTE iconId; // unique filemanager icon id
+ LTEXT mbmFile; // Mbm file name
+ WORD iconBmpId; // icon bitmap
+ WORD maskBmpId; // mask bitmap
+ LONG majorSkinId = EAknsMajorNone; // most significant part of icon skin ID
+ LONG minorSkinId = EAknsMinorNone; // least significant part of icon skin ID
+ BYTE iconType = EFileManagerIconStdIcon; // icon type info
+ }
+
+// -----------------------------------------------------------------------------
+// MG_FOLDER_INDICATOR
+// Array of MG_FOLDER_INDICATOR_DATA.
+// -----------------------------------------------------------------------------
+//
+STRUCT FILEMANAGER_FOLDER_NAVIGATION_PANE
+ {
+ LTEXT bmpfile;
+ WORD foldericonid = 0;
+ WORD foldermaskid = 0;
+ LONG majorSkinId = EAknsMajorNone; // most significant part of icon skin ID
+ LONG minorSkinId = EAknsMinorNone; // least significant part of icon skin ID
+ LTEXT separator;
+ LTEXT endchar;
+ STRUCT folderindicators []; // FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ }
+
+// -----------------------------------------------------------------------------
+// MG_FOLDER_INDICATOR_DATA
+// Folder indicator for single drive
+// -----------------------------------------------------------------------------
+//
+STRUCT FILEMANAGER_FOLDER_NAVIGATION_PANE_DATA
+ {
+ WORD id = 0;
+ LTEXT bmpfile;
+ WORD rooticonid = 0;
+ WORD rootmaskid = 0;
+ LONG majorSkinId = EAknsMajorNone; // most significant part of icon skin ID
+ LONG minorSkinId = EAknsMinorNone; // least significant part of icon skin ID
+ }
+
+#endif // FILEMANAGERVIEW_RH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/MFileManagerFolderNaviObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2006 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: Observer for folder navigation events
+*
+*/
+
+
+#ifndef M_FILEMANAGERFOLDERNAVIOBSERVER_H
+#define M_FILEMANAGERFOLDERNAVIOBSERVER_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+/**
+ * This class observes folder navigation notifications
+ *
+ * @since S60 3.1
+ */
+class MFileManagerFolderNaviObserver
+ {
+
+public:
+ // Navigation event types
+ enum TNaviEvent
+ {
+ ENaviTapDown = 0,
+ ENaviTapUp,
+ ENaviLongTap
+ };
+
+ /**
+ * Handles folder navigation notification
+ *
+ * @since S60 3.1
+ * @param aEvent Navigation event type
+ * @param aValue Navigation event related value
+ */
+ virtual void HandleFolderNaviEventL(
+ TNaviEvent aEvent, TInt aValue ) = 0;
+
+ };
+
+#endif // M_FILEMANAGERFOLDERNAVIOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/inc/MFileManagerGlobalDlgObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2006 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: Global dialog result observer
+*
+*/
+
+
+#ifndef M_FILEMANAGERGLOBALDLGOBSERVER_H
+#define M_FILEMANAGERGLOBALDLGOBSERVER_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+/**
+ * This class observes global dialog notifications
+ *
+ * @since S60 3.1
+ */
+class MFileManagerGlobalDlgObserver
+ {
+
+public:
+ /**
+ * Handles global dialog result value
+ *
+ * @since S60 3.1
+ * @param aDialogType Global dialog type
+ * @param aDialogResult Global dialog result value
+ */
+ virtual void HandleGlobalDlgResult(
+ TInt aDialogType,
+ TInt aDialogResult ) = 0;
+
+ };
+
+#endif // M_FILEMANAGERGLOBALDLGOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerCheckBoxSettingPage.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2006 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: Checkbox setting page
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <akncheckboxsettingpage.h>
+#include "CFileManagerCheckBoxSettingPage.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+// ----------------------------------------------------------------------------
+// CFileManagerCheckBoxSettingPage::CFileManagerCheckBoxSettingPage
+// ----------------------------------------------------------------------------
+//
+CFileManagerCheckBoxSettingPage::CFileManagerCheckBoxSettingPage(
+ const TInt aResourceID,
+ CSelectionItemList& aItemArray,
+ const TInt aDominantItemIndex ) :
+ CAknCheckBoxSettingPage( aResourceID, &aItemArray ),
+ iItemsArray( aItemArray ),
+ iDominantItemIndex( aDominantItemIndex )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerCheckBoxSettingPage::~CFileManagerCheckBoxSettingPage
+// ----------------------------------------------------------------------------
+//
+CFileManagerCheckBoxSettingPage::~CFileManagerCheckBoxSettingPage()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerCheckBoxSettingPage::UpdateSelectionL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerCheckBoxSettingPage::UpdateSettingL()
+ {
+ CAknCheckBoxSettingPage::UpdateSettingL();
+ UpdateSelection();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerCheckBoxSettingPage::UpdateSelection
+// ----------------------------------------------------------------------------
+//
+void CFileManagerCheckBoxSettingPage::UpdateSelection()
+ {
+ TInt count( iItemsArray.Count() );
+ if ( iDominantItemIndex < 0 || iDominantItemIndex > count )
+ {
+ return; // Dominant item not used
+ }
+
+ CAknSetStyleListBox* listBox = ListBoxControl();
+ CListBoxView* view = listBox->View();
+
+ TInt selectedItem( listBox->CurrentItemIndex() );
+ if ( selectedItem < 0 || selectedItem > count )
+ {
+ return; // Invalid selection
+ }
+
+ TBool redraw( EFalse );
+
+ // Deselect all other items if dominant item is selected
+ if ( iDominantItemIndex == selectedItem &&
+ iItemsArray.At( selectedItem )->SelectionStatus() )
+ {
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ if ( i != iDominantItemIndex )
+ {
+ iItemsArray.At( i )->SetSelectionStatus( EFalse );
+ view->DeselectItem( i );
+ }
+ }
+ redraw = ETrue;
+ }
+ // Deselect dominant item if any other item is selected
+ else if ( iDominantItemIndex != selectedItem &&
+ iItemsArray.At( iDominantItemIndex )->SelectionStatus() )
+ {
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ if ( i != iDominantItemIndex &&
+ iItemsArray.At( i )->SelectionStatus() )
+ {
+ iItemsArray.At( iDominantItemIndex )->SetSelectionStatus(
+ EFalse );
+ view->DeselectItem( iDominantItemIndex );
+ redraw = ETrue;
+ break;
+ }
+ }
+ }
+
+ // Hide ok if selection is empty
+ TBool empty( ETrue );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ if ( iItemsArray.At( i )->SelectionStatus() )
+ {
+ empty = EFalse;
+ break;
+ }
+ }
+ CEikButtonGroupContainer* cba = Cba();
+ if ( empty )
+ {
+ cba->MakeCommandVisible( EAknSoftkeyOk, EFalse );
+ }
+ else
+ {
+ cba->MakeCommandVisible( EAknSoftkeyOk, ETrue );
+ }
+ cba->DrawDeferred();
+
+ if ( redraw )
+ {
+ listBox->DrawDeferred();
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerFileNameQueryDlg.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2002-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: Dialog for asking file name from user
+*
+*/
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <bautils.h>
+#include <CFileManagerEngine.h>
+#include <FileManagerView.rsg>
+#include "CFileManagerFileNameQueryDlg.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "CFileManagerItemProperties.h"
+#include "FileManagerDlgUtils.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileNameQueryDlg* CFileManagerFileNameQueryDlg::NewL(
+ const TDesC& aOldName,
+ TDes& aNewName,
+ CFileManagerEngine& aEngine )
+ {
+ CFileManagerFileNameQueryDlg* self =
+ new( ELeave ) CFileManagerFileNameQueryDlg(
+ aNewName, aEngine );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aOldName );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::CFileManagerFileNameQueryDlg
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileNameQueryDlg::CFileManagerFileNameQueryDlg(
+ TDes& aNewName,
+ CFileManagerEngine& aEngine ) :
+ CAknTextQueryDialog( aNewName ),
+ iEngine( aEngine )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFileNameQueryDlg::ConstructL( const TDesC& aOldName )
+ {
+ TParsePtrC name( aOldName );
+ Text().Copy( name.NameAndExt() );
+ iOldName = aOldName.AllocL();
+
+ // Strip any directionality markers to get pure name
+ TPtr ptr( iOldName->Des() );
+ AknTextUtils::StripCharacters( ptr, KFmgrDirectionalChars );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::~CFileManagerFileNameQueryDlg
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerFileNameQueryDlg::~CFileManagerFileNameQueryDlg()
+ {
+ delete iOldName;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::DoOkToExitL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFileNameQueryDlg::DoOkToExitL( TInt aButtonId )
+ {
+ TBool result( CAknTextQueryDialog::OkToExitL( aButtonId ) );
+
+ HBufC* userText = Text().AllocLC();
+ TPtr ptrUserText( userText->Des() );
+
+ // Strip any directionality markers to get pure name
+ AknTextUtils::StripCharacters( ptrUserText, KFmgrDirectionalChars );
+
+ // Check file name
+ TBool isValidName( EFalse );
+ TParsePtrC oldName( *iOldName );
+ if ( oldName.PathPresent() )
+ {
+ isValidName = iEngine.IsValidName(
+ oldName.DriveAndPath(), *userText, EFalse );
+ }
+ else
+ {
+ isValidName = iEngine.IsValidName( KNullDesC, *userText, EFalse );
+ }
+
+ if( !isValidName )
+ {
+ if( iEngine.IllegalChars( *userText ) )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_ILLEGAL_CHARACTERS );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_BAD_FILE_NAME );
+ }
+ CAknQueryControl* queryControl = QueryControl();
+ if (queryControl)
+ {
+ CEikEdwin* edwin = static_cast< CEikEdwin* >(
+ queryControl->ControlByLayoutOrNull( EDataLayout ) );
+ if (edwin)
+ {
+ edwin->SetSelectionL( edwin->TextLength(), 0 );
+ }
+ }
+ CleanupStack::PopAndDestroy( userText );
+ return EFalse;
+ }
+
+ HBufC* userTextFullPath = HBufC::NewLC( KMaxFileName );
+ TPtr ptrUserTextFullPath( userTextFullPath->Des() );
+
+ ptrUserTextFullPath.Append( oldName.DriveAndPath() );
+ ptrUserTextFullPath.Append( *userText );
+ // if some other entry found with same name
+ // not ok except if name same as original
+ if( oldName.NameAndExt().CompareF( *userText ) &&
+ ( iEngine.IsNameFoundL( ptrUserTextFullPath ) ||
+ BaflUtils::FileExists(CCoeEnv::Static()->FsSession(), ptrUserTextFullPath)) )
+ {
+ TBool overWrite( EFalse );
+ TUint32 fileType( 0 );
+
+ TRAPD( err, fileType = iEngine.FileTypeL( ptrUserTextFullPath ) );
+ if ( err != KErrNone && err != KErrAccessDenied )
+ {
+ User::Leave( err );
+ }
+
+ if( ( fileType & ( CFileManagerItemProperties::EOpen |
+ CFileManagerItemProperties::EReadOnly |
+ CFileManagerItemProperties::EFolder ) ) ||
+ ( err == KErrAccessDenied ) )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_NAME_ALREADY_USED, Text() );
+ }
+ else
+ {
+ overWrite =
+ FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ R_QTN_ITEM_OVERWRITE_QUERY, Text() );
+ }
+
+ if( !overWrite )
+ {
+ CAknQueryControl* queryControl = QueryControl();
+ if (queryControl)
+ {
+ CEikEdwin* edwin = static_cast< CEikEdwin* >(
+ queryControl->ControlByLayoutOrNull( EDataLayout ) );
+ if (edwin)
+ {
+ edwin->SetSelectionL( edwin->TextLength(), 0 );
+ }
+ }
+ result = EFalse;
+ }
+ }
+
+ TParsePtrC newName( ptrUserText );
+ if ( result && oldName.Ext().CompareF( newName.Ext() ) )
+ {
+ FileManagerDlgUtils::ShowWarningNoteL(
+ R_QTN_FM_WARNING_FILE_EXTENSION );
+ }
+
+ CleanupStack::PopAndDestroy( userTextFullPath );
+ CleanupStack::PopAndDestroy( userText );
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::OkToExitL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFileNameQueryDlg::OkToExitL( TInt aButtonId )
+ {
+ if ( iCallbackDisabled )
+ {
+ return EFalse; // Block unwanted softkey events
+ }
+ TBool ret( EFalse );
+ iCallbackDisabled = ETrue;
+ TRAPD( err, ret = DoOkToExitL( aButtonId ) );
+ iCallbackDisabled = EFalse;
+ User::LeaveIfError( err );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::OfferKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerFileNameQueryDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse response = EKeyWasNotConsumed;
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyEnter )
+ {
+ response = EKeyWasConsumed;
+ }
+ else
+ {
+ response = CAknTextQueryDialog::OfferKeyEventL(aKeyEvent, aType);
+ }
+ return response;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerFullOmaDrmInfo.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,997 @@
+/*
+* Copyright (c) 2005-2006 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: Gets the item DRM information
+*
+*/
+
+
+// INCLUDE FILES
+#include <coemain.h>
+#include <StringLoader.h>
+#include <DRMHelper.h>
+#include <DRMRights.h>
+#include <AknUtils.h>
+#include <FileManagerView.rsg>
+#include <FileManagerDebug.h>
+#include <drmuihandling.h>
+#include "CFileManagerFullOmaDrmInfo.h"
+
+// CONSTANTS
+_LIT( KSeparator, "\t" );
+#ifndef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+_LIT( KDateFormat1, "%1" );
+_LIT( KDateFormat2, "%2" );
+_LIT( KDateFormat3, "%3" );
+_LIT( KTimeFormatBefore, " %-B %J:%T" );
+_LIT( KTimeFormatAfter, " %J:%T %+B" );
+_LIT( KEmptyChar, " " );
+const TInt KDateStringLen = 20;
+
+const TUint KSecondSeparator = 1;
+const TUint KThirdSeparator = 2;
+
+
+const TInt KPlayRights = 0;
+const TInt KDisplayRights = 1;
+const TInt KExecuteRights = 2;
+const TInt KPrintRights = 3;
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+
+// ============================ LOCAL FUNCTIONS ================================
+
+// -----------------------------------------------------------------------------
+// AppendLabelAndDataToArrayL
+// -----------------------------------------------------------------------------
+static void AppendLabelAndDataToArrayL( CDesCArray& aArray,
+ const TDesC& aLabel,
+ const TDesC& aData )
+ {
+ HBufC* dataStr = HBufC::NewLC( aLabel.Length() +
+ KSeparator().Length() +
+ aData.Length() );
+
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( aLabel );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( aData );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ aArray.AppendL( dataPtr );
+
+ CleanupStack::PopAndDestroy( dataStr );
+ }
+
+#ifndef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+// -----------------------------------------------------------------------------
+// ResetAndDestroy
+// -----------------------------------------------------------------------------
+static void ResetAndDestroy( TAny* aPtr )
+ {
+ RPointerArray< CDRMHelperRightsConstraints >* array =
+ static_cast< RPointerArray<CDRMHelperRightsConstraints>* >( aPtr );
+ array->ResetAndDestroy();
+ array->Close();
+ }
+
+// -----------------------------------------------------------------------------
+// IsFutureRights
+// -----------------------------------------------------------------------------
+static TBool IsFutureRights(
+ RPointerArray<CDRMRightsConstraints>& aRightsArray )
+ {
+ TBool ret( EFalse );
+ const TInt count( aRightsArray.Count() );
+ for( TInt i = 0 ; i < count ; ++i )
+ {
+ CDRMRightsConstraints* rights = aRightsArray[i];
+ TUint32 expiration( 0 );
+ TUint32 constType( 0 );
+ TInt topPriorityValue( CDRMRights::EInvalidRights );
+ if( rights )
+ {
+ TInt currentPriorityValue( rights->GetConstraintInfo( expiration, constType ) );
+ if( currentPriorityValue > topPriorityValue )
+ {
+ // priority is higher than previous rigths
+ topPriorityValue = currentPriorityValue;
+ if( CDRMRights::EFutureRights == expiration )
+ {
+ ret = ETrue;
+ }
+ else
+ {
+ // no future rights
+ ret = EFalse;
+ }
+ }
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// DateTimeStringLC
+// -----------------------------------------------------------------------------
+static HBufC* DateTimeStringLC( const TTime& aTime )
+ {
+ TBuf<KDateStringLen> dateStr;
+ TBuf<KDateStringLen> timeStr;
+ TBuf<KDateStringLen> dateStrFormat;
+
+ // Localized date separator form
+ TLocale local;
+ dateStrFormat.Append( KDateFormat1 );
+ dateStrFormat.Append( local.DateSeparator( KSecondSeparator ) );
+ dateStrFormat.Append( KDateFormat2 );
+ dateStrFormat.Append( local.DateSeparator( KThirdSeparator ) );
+ dateStrFormat.Append( KDateFormat3 );
+ aTime.FormatL( dateStr, dateStrFormat );
+
+ if ( local.AmPmSymbolPosition() == ELocaleBefore )
+ {
+ aTime.FormatL( timeStr, KTimeFormatBefore );
+ }
+ else
+ {
+ aTime.FormatL( timeStr, KTimeFormatAfter );
+ }
+
+ HBufC* buf = HBufC::NewLC( dateStr.Length() +
+ KEmptyChar().Length() +
+ timeStr.Length() );
+ TPtr ptrBuffer( buf->Des() );
+ ptrBuffer.Append( dateStr );
+ ptrBuffer.Append( KEmptyChar );
+ ptrBuffer.Append( timeStr );
+
+ return buf;
+ }
+
+// -----------------------------------------------------------------------------
+// DateTimeL
+// -----------------------------------------------------------------------------
+static void DateTimeL( CDesCArray& aArray,
+ const TTime& aTime,
+ TInt aResourceId,
+ const TDesC& aType )
+ {
+ HBufC* label = StringLoader::LoadLC( aResourceId, aType );
+ HBufC* dateTime = DateTimeStringLC( aTime );
+
+ AppendLabelAndDataToArrayL( aArray, *label, *dateTime );
+
+ CleanupStack::PopAndDestroy( dateTime );
+ CleanupStack::PopAndDestroy( label );
+ }
+
+// -----------------------------------------------------------------------------
+// FillCounterInfoL
+// -----------------------------------------------------------------------------
+static void FillCounterInfoL( CDesCArray& aArray,
+ CDRMHelperRightsConstraints& aRights,
+ const TDesC& aType )
+ {
+ TUint32 count( 0 );
+ TUint32 timedCount( 0 );
+ TUint32 ignore1( 0 );
+ TUint32 ignore2( 0 );
+ TTimeIntervalSeconds ignore3( 0 );
+ TInt err( KErrNone );
+
+ TRAPD( errCount, aRights.GetCountersL( count, ignore1 ) );
+ TRAPD( errTimedCount, aRights.GetTimedCountL( timedCount, ignore2,
+ ignore3 ) );
+
+ if ( errCount == KErrNone && errTimedCount == KErrNone )
+ {
+ // Both counts present, use minimum
+ count = Min( count, timedCount );
+ err = KErrNone;
+ }
+ else if ( errCount == KErrNone )
+ {
+ // Use count
+ err = KErrNone;
+ }
+ else if ( errTimedCount == KErrNone )
+ {
+ // Use timed count
+ count = timedCount;
+ err = KErrNone;
+ }
+ else
+ {
+ // Neither regular nor timed count constraint
+ // present, return error
+ err = KErrNotFound;
+ }
+
+ if ( err == KErrNone )
+ {
+ // "Times left (%U)"
+ HBufC* label =
+ StringLoader::LoadLC( R_QTN_DRM_MGR_DET_UTL_X, aType );
+
+ HBufC* data = NULL;
+
+ if ( count == 1 )
+ {
+ // "1 count"
+ data = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_1_COUNT );
+ }
+ else
+ {
+ // "%N counts"
+ data = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_N_COUNTS, count );
+ }
+
+ AppendLabelAndDataToArrayL( aArray, *label, *data );
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// SplitTime
+// -----------------------------------------------------------------------------
+//
+static void SplitTime( const TTimeIntervalSeconds& aInterval,
+ TInt& aIntYrs, TInt& aIntMon, TInt& aIntDay,
+ TInt& aIntHrs, TInt& aIntMin, TInt& aIntSec )
+ {
+ const TInt KSecsInMin( 60 );
+ const TInt KSecsInHour( KSecsInMin * 60 );
+ const TInt KSecsInDay( KSecsInHour * 24 );
+
+ // includes leap year day
+ const TInt KLastMonthIndex = 11;
+ const TInt KMaxDaysInMonths[] = {
+ 31, 62, 92, 123, 153, 184,
+ 215, 245, 276, 306, 337, 366 };
+
+ // calculate full days
+ TInt temp( aInterval.Int() / KSecsInDay );
+
+ // calculate full years, calculate without leap year for user to get the
+ // longest time possible
+ aIntYrs = temp / ( KMaxDaysInMonths[KLastMonthIndex] - 1 );
+
+ // calc remainder days
+ temp = temp % ( KMaxDaysInMonths[KLastMonthIndex] - 1 );
+
+ aIntMon = 0;
+
+ TInt i( 0 );
+ if ( temp >= KMaxDaysInMonths[0] )
+ {
+ for ( i = 0; i < KLastMonthIndex; i++ )
+ {
+ // found correct amount of months
+ if ( temp >= KMaxDaysInMonths[i] && temp < KMaxDaysInMonths[i+1] )
+ {
+ // i now contains amount of full months (+1 because of table index)
+ aIntMon = i + 1;
+ break;
+ }
+ }
+ }
+
+ // calc remainder days = allSecs - secsInFullYears - secsInFullMonts
+ if( temp >= KMaxDaysInMonths[i] )
+ {
+ aIntDay = temp - KMaxDaysInMonths[i];
+ }
+ else
+ {
+ aIntDay = temp;
+ }
+
+ // calculate remainder secs
+ temp = aInterval.Int() % KSecsInDay;
+
+ aIntHrs = temp / KSecsInHour;
+
+ // calculate remainder secs
+ temp = temp % KSecsInHour;
+
+ aIntMin = temp / KSecsInMin;
+
+ // calculate remainder secs
+ aIntSec = temp % KSecsInMin;
+ }
+
+// -----------------------------------------------------------------------------
+// AddSinglePartOfTimeL
+// -----------------------------------------------------------------------------
+//
+static void AddSinglePartOfTimeL( TInt aNumOfElements,
+ TInt aResourceIdSingle,
+ TInt aResourceIdOneFinal,
+ TInt aResourceIdTwoFour,
+ TInt aResourceIdFiveZero,
+ CDesCArrayFlat* aStrings )
+ {
+ const TInt KDigitFive = 5;
+ const TInt KDigitNine = 9;
+ const TInt KDigitTen = 10;
+ const TInt KDigitEleven = 11;
+ const TInt KDigitFourTeen = 14;
+ const TInt KDigitHundred = 100;
+ HBufC* stringHolder = NULL;
+ TInt finalOneDigit( aNumOfElements % KDigitTen );
+ TInt finalTwoDigits( aNumOfElements % KDigitHundred );
+
+ if ( aNumOfElements == 1 )
+ {
+ stringHolder = StringLoader::LoadLC( aResourceIdSingle );
+ }
+ else if ( finalOneDigit == 1 && finalTwoDigits != KDigitEleven )
+ {
+ stringHolder = StringLoader::LoadLC( aResourceIdOneFinal,
+ aNumOfElements );
+ }
+ else if ( finalOneDigit == 0 ||
+ ( finalOneDigit >= KDigitFive && finalOneDigit <= KDigitNine ) ||
+ ( finalTwoDigits >= KDigitEleven && finalTwoDigits <= KDigitFourTeen ) )
+ {
+ stringHolder = StringLoader::LoadLC( aResourceIdFiveZero,
+ aNumOfElements );
+ }
+ else
+ {
+ stringHolder = StringLoader::LoadLC( aResourceIdTwoFour,
+ aNumOfElements );
+ }
+
+ if ( aStrings )
+ {
+ aStrings->AppendL( *stringHolder );
+ }
+
+ CleanupStack::PopAndDestroy ( stringHolder );
+ }
+
+// -----------------------------------------------------------------------------
+// AddPartsOfTimeLC
+// -----------------------------------------------------------------------------
+//
+static HBufC* AddPartsOfTimeLC( TInt aIntYrs, TInt aIntMon, TInt aIntDay,
+ TInt aIntHrs, TInt aIntMin, TInt aIntSec )
+ {
+ // Only the two most meaningful data will be showed
+ TInt numOfData( 0 );
+ const TInt KMaxDataItems = 2;
+
+ CDesCArrayFlat* strings = new ( ELeave ) CDesCArrayFlat( KMaxDataItems );
+ CleanupStack::PushL( strings );
+
+ if ( aIntYrs > 0 )
+ {
+ AddSinglePartOfTimeL( aIntYrs,
+ R_QTN_DRM_NBR_OF_YEARS_ONE,
+ R_QTN_DRM_NBR_OF_YEARS_ONE_FINAL,
+ R_QTN_DRM_NBR_OF_YEARS_TWO_FOUR,
+ R_QTN_DRM_NBR_OF_YEARS_FIVE_ZERO,
+ strings );
+ numOfData++;
+ }
+
+ if ( aIntMon > 0 )
+ {
+ // Second type not provided because 11 is the maximum
+ AddSinglePartOfTimeL( aIntMon,
+ R_QTN_DRM_NBR_OF_MONTHS_ONE,
+ 0,
+ R_QTN_DRM_NBR_OF_MONTHS_TWO_FOUR,
+ R_QTN_DRM_NBR_OF_MONTHS_FIVE_ZERO,
+ strings );
+ numOfData++;
+ }
+
+ // Only if years or months were missing
+ if ( aIntDay > 0 && numOfData < KMaxDataItems )
+ {
+ AddSinglePartOfTimeL( aIntDay,
+ R_QTN_DRM_NBR_OF_DAYS_ONE,
+ R_QTN_DRM_NBR_OF_DAYS_ONE_FINAL,
+ R_QTN_DRM_NBR_OF_DAYS_TWO_FOUR,
+ R_QTN_DRM_NBR_OF_DAYS_FIVE_ZERO,
+ strings );
+ numOfData++;
+ }
+
+ if ( aIntHrs > 0 && numOfData < KMaxDataItems )
+ {
+ AddSinglePartOfTimeL( aIntHrs,
+ R_QTN_DRM_NBR_OF_HOURS_ONE,
+ R_QTN_DRM_NBR_OF_HOURS_ONE_FINAL,
+ R_QTN_DRM_NBR_OF_HOURS_TWO_FOUR,
+ R_QTN_DRM_NBR_OF_HOURS_FIVE_ZERO,
+ strings );
+ numOfData++;
+ }
+
+ if ( aIntMin > 0 && numOfData < KMaxDataItems )
+ {
+ AddSinglePartOfTimeL( aIntMin,
+ R_QTN_DRM_NBR_OF_MINS_ONE,
+ R_QTN_DRM_NBR_OF_MINS_ONE_FINAL,
+ R_QTN_DRM_NBR_OF_MINS_TWO_FOUR,
+ R_QTN_DRM_NBR_OF_MINS_FIVE_ZERO,
+ strings );
+ numOfData++;
+ }
+
+ // If interval is 0, then it shows "0 seconds" anyway
+ if ( ( aIntSec > 0 && numOfData < KMaxDataItems ) || numOfData == 0 )
+ {
+ AddSinglePartOfTimeL( aIntSec,
+ R_QTN_DRM_NBR_OF_SECS_ONE,
+ R_QTN_DRM_NBR_OF_SECS_ONE_FINAL,
+ R_QTN_DRM_NBR_OF_SECS_TWO_FOUR,
+ R_QTN_DRM_NBR_OF_SECS_FIVE_ZERO,
+ strings );
+ numOfData++;
+ }
+
+ HBufC* stringHolder = NULL;
+ if ( numOfData == 1 )
+ {
+ stringHolder = StringLoader::LoadL( R_QTN_DRM_MGR_DET_INTER,
+ strings->MdcaPoint(0) );
+ }
+ else
+ {
+ stringHolder = StringLoader::LoadL( R_QTN_DRM_MGR_DET_INTER_TWO,
+ *strings );
+ }
+
+ CleanupStack::PopAndDestroy( strings );
+
+ CleanupStack::PushL( stringHolder );
+
+ return stringHolder;
+ }
+
+// -----------------------------------------------------------------------------
+// FillUsageTimeLeftInfoL
+// -----------------------------------------------------------------------------
+static void FillUsageTimeLeftInfoL( CDesCArray& aArray,
+ const TTimeIntervalSeconds& aInterval,
+ const TDesC& aType,
+ TBool aIsAccumulatedTime )
+ {
+ TInt years( 0 );
+ TInt months( 0 );
+ TInt days( 0 );
+ TInt hours( 0 );
+ TInt minutes( 0 );
+ TInt seconds( 0 );
+ HBufC* label = NULL;
+ HBufC* data = NULL;
+
+ if ( aIsAccumulatedTime )
+ {
+ // "Usage time left"
+ label = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_ACCUM_TIME_LEFT );
+ }
+ else
+ {
+ // "Time left (%U)"
+ label = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_UDL_X, aType );
+ }
+
+ SplitTime( aInterval, years, months, days, hours, minutes, seconds );
+ data = AddPartsOfTimeLC( years, months, days, hours, minutes, seconds );
+
+ AppendLabelAndDataToArrayL( aArray, *label, *data );
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+ }
+
+// -----------------------------------------------------------------------------
+// FillIntervalInfoL
+// -----------------------------------------------------------------------------
+static void FillIntervalInfoL( CDesCArray& aArray,
+ CDRMHelperRightsConstraints& aRights,
+ const TDesC& aType )
+ {
+ TTimeIntervalSeconds intervalSeconds( 0 );
+
+ TRAPD( err, aRights.GetIntervalL( intervalSeconds ) );
+
+ if ( err != KErrNotFound && err != KErrNone )
+ {
+ User::Leave( err );
+ }
+
+ if ( err == KErrNone )
+ {
+ TTime intervalStartTime( 0 );
+
+ TRAP( err, aRights.GetIntervalStartL( intervalStartTime ) );
+
+ if ( ( err != KErrNotFound ) && ( err != KErrNone ) )
+ {
+ User::Leave( err );
+ }
+
+ if ( err == KErrNotFound )
+ {
+ // "Times status (%U)"
+ HBufC* label =
+ StringLoader::LoadLC( R_QTN_DRM_MGR_DET_UTS_X, aType );
+
+ // "Not activated"
+ HBufC* data = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_NOT_ACT );
+
+ AppendLabelAndDataToArrayL( aArray, *label, *data );
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+
+ // "Time left (%U)"
+ FillUsageTimeLeftInfoL( aArray, intervalSeconds, aType, EFalse );
+ }
+ else
+ {
+ TTime endTime( intervalStartTime );
+ endTime += intervalSeconds;
+
+ // "Valid from (%U)"
+ DateTimeL( aArray, intervalStartTime,
+ R_QTN_DRM_MGR_DET_RVF_X, aType );
+
+ // "Valid until (%U)"
+ DateTimeL( aArray, endTime, R_QTN_DRM_MGR_DET_RVT_X, aType );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// FillTimeInfoL
+// -----------------------------------------------------------------------------
+static void FillTimeInfoL( CDesCArray& aArray,
+ CDRMHelperRightsConstraints& aRights,
+ const TDesC& aType )
+ {
+ TTime startTime;
+ TRAPD( err, aRights.GetStartTimeL( startTime ) );
+ if ( err != KErrNotFound && err != KErrNone )
+ {
+ User::Leave( err );
+ }
+ if ( err == KErrNone )
+ {
+ // "Valid from (%U)"
+ DateTimeL( aArray, startTime, R_QTN_DRM_MGR_DET_RVF_X, aType );
+ }
+
+ TTime endTime;
+ TRAP( err, aRights.GetEndTimeL( endTime ) );
+ if ( err != KErrNotFound && err != KErrNone )
+ {
+ User::Leave( err );
+ }
+ if ( err == KErrNone )
+ {
+ // "Valid until (%U)"
+ DateTimeL( aArray, endTime, R_QTN_DRM_MGR_DET_RVT_X, aType );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// FillAccumulatedTimeInfoL
+// -----------------------------------------------------------------------------
+static void FillAccumulatedTimeInfoL( CDesCArray& aArray,
+ CDRMHelperRightsConstraints& aRights,
+ const TDesC& aType )
+ {
+ TTimeIntervalSeconds accumSeconds( 0 );
+ TRAPD( err, aRights.GetAccumulatedTimeL( accumSeconds ));
+ if ( err != KErrNotFound && err != KErrNone )
+ {
+ User::Leave( err );
+ }
+ if ( err == KErrNone )
+ {
+ // "Usage time left"
+ FillUsageTimeLeftInfoL( aArray, accumSeconds, aType, ETrue );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// FillDrmInfoL
+// -----------------------------------------------------------------------------
+static void FillDrmInfoL( CDesCArray& aArray,
+ CDRMHelperRightsConstraints* aRights,
+ TInt aResourceId )
+ {
+ // Check if no rights at all
+ if ( !aRights )
+ {
+ return;
+ }
+
+ // Rights type is either "Play", "Display", "Execute" or "Print"
+ HBufC* type = StringLoader::LoadLC( aResourceId );
+
+ // Check if full rights
+ if ( aRights->FullRights() )
+ {
+ // "Rights (%U)"
+ HBufC* label =
+ StringLoader::LoadLC( R_QTN_DRM_MGR_DET_FULL_X, *type );
+
+ // "Unlimited"
+ HBufC* data = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_UNLIMITED );
+
+ AppendLabelAndDataToArrayL( aArray, *label, *data );
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+ CleanupStack::PopAndDestroy( type );
+ return; // full rights -> return
+ }
+
+ // Get detailed counter constraint information
+ FillCounterInfoL( aArray, *aRights, *type );
+
+ // Get detailed interval constraint information (start time + duration)
+ FillIntervalInfoL( aArray, *aRights, *type );
+
+ // Get detailed time constraint information (start time + end time)
+ FillTimeInfoL( aArray, *aRights, *type );
+
+ // Get detailed accumulated time constraint information (duration)
+ FillAccumulatedTimeInfoL( aArray, *aRights, *type );
+
+ CleanupStack::PopAndDestroy( type );
+ }
+
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFullOmaDrmInfo
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFullOmaDrmInfo::CFileManagerFullOmaDrmInfo()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFullOmaDrmInfo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFullOmaDrmInfo* CFileManagerFullOmaDrmInfo::NewL( CDesCArray& aArray,
+ const TDesC& aFullPath,
+ CCoeEnv& aCoeEnv )
+ {
+ CFileManagerFullOmaDrmInfo* self = NewLC( aArray, aFullPath, aCoeEnv );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFullOmaDrmInfo::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFullOmaDrmInfo* CFileManagerFullOmaDrmInfo::NewLC( CDesCArray& aArray,
+ const TDesC& aFullPath,
+ CCoeEnv& aCoeEnv )
+ {
+ CFileManagerFullOmaDrmInfo* self = new( ELeave ) CFileManagerFullOmaDrmInfo();
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aArray, aFullPath, aCoeEnv );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFullOmaDrmInfo::~CFileManagerFullOmaDrmInfo
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerFullOmaDrmInfo::~CFileManagerFullOmaDrmInfo()
+ {
+ }
+
+#ifndef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// -----------------------------------------------------------------------------
+// CImageInfoPopupList::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFullOmaDrmInfo::ConstructL( CDesCArray& aItemArray,
+ const TDesC& aFileName,
+ CCoeEnv& aCoeEnv )
+ {
+ TBool expired ( EFalse );
+ TBool sendingAllowed( EFalse );
+ RPointerArray<CDRMHelperRightsConstraints> tempArr;
+ TCleanupItem cleanupItem( ResetAndDestroy, &tempArr );
+ CleanupStack::PushL( cleanupItem );
+ tempArr.AppendL( NULL ); // Play
+ tempArr.AppendL( NULL ); // Display
+ tempArr.AppendL( NULL ); // Execute
+ tempArr.AppendL( NULL ); // Print
+
+ CDRMHelper* drmHelper = CDRMHelper::NewLC( aCoeEnv );
+
+ TRAPD( err, drmHelper->GetRightsDetailsL(
+ aFileName,
+ 0, // Details for everything
+ expired,
+ sendingAllowed,
+ tempArr[KPlayRights],
+ tempArr[KDisplayRights],
+ tempArr[KExecuteRights],
+ tempArr[KPrintRights] ) );
+ TBool future( EFalse );
+ if( expired || err == CDRMRights::ENoRights )
+ {
+ // Check future rights
+ RPointerArray<CDRMRightsConstraints> fArr;
+ TCleanupItem cleanupItem( ResetAndDestroy, &fArr );
+ CleanupStack::PushL( cleanupItem );
+ fArr.AppendL( NULL ); // Play
+ fArr.AppendL( NULL ); // Display
+ fArr.AppendL( NULL ); // Execute
+ fArr.AppendL( NULL ); // Print
+
+ TBool tmp( EFalse );
+ TBool tmp2( EFalse );
+ TRAP( err, drmHelper->GetRightsDetailsL( aFileName,
+ 0,
+ tmp,
+ tmp2,
+ fArr[KPlayRights],
+ fArr[KDisplayRights],
+ fArr[KExecuteRights],
+ fArr[KPrintRights] ) );
+
+ if( err == KErrNone || err == CDRMRights::ENoRights )
+ {
+ future = IsFutureRights( fArr );
+ }
+ CleanupStack::PopAndDestroy( &fArr );
+
+ ERROR_LOG2( "CFileManagerFullOmaDrmInfo::ConstructL-err:%d,future:%d",
+ err, future )
+ }
+ CleanupStack::PopAndDestroy( drmHelper );
+
+ ERROR_LOG3( "CFileManagerFullOmaDrmInfo::ConstructL-err:%d,expired:%d,sendingAllowed:%d",
+ err, expired, sendingAllowed )
+
+ // Check if the rights are valid or expired
+ // Should probably be able to append this information also when the
+ // rights have expired.
+ // "Status"
+ HBufC* label = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_STAT );
+ HBufC* data = NULL;
+ // "Valid" or "Expired" or "Not valid yet"
+ TInt resId( R_QTN_DRM_MGR_DET_VALID );
+ if( future )
+ {
+ resId = R_QTN_DRM_MGR_DET_NOT_VALID_YET;
+ }
+ else if ( expired || err == CDRMRights::ENoRights )
+ {
+ resId = R_QTN_DRM_MGR_DET_EXP;
+ }
+ data = StringLoader::LoadLC( resId );
+ AppendLabelAndDataToArrayL( aItemArray, *label, *data );
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+
+ // "Play"
+ FillDrmInfoL( aItemArray, tempArr[KPlayRights], R_QTN_DRM_MGR_DET2_PLAY );
+
+ // "Display"
+ FillDrmInfoL( aItemArray, tempArr[KDisplayRights], R_QTN_DRM_MGR_DET2_DISPLAY );
+
+ // "Execute"
+ FillDrmInfoL( aItemArray, tempArr[KExecuteRights], R_QTN_DRM_MGR_DET2_EXECUTE );
+
+ // "Print"
+ FillDrmInfoL( aItemArray, tempArr[KPrintRights], R_QTN_DRM_MGR_DET2_PRINT );
+
+ CleanupStack::PopAndDestroy( &tempArr );
+
+ // Check whether sending is allowed or not
+
+ // "Sending"
+ label = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_CS );
+ data = NULL;
+ // "Allowed" or "Forbidden"
+ resId = ( sendingAllowed ? R_QTN_DRM_MGR_DET_ALLOWED
+ : R_QTN_DRM_MGR_DET_FORBID );
+ data = StringLoader::LoadLC( resId );
+ AppendLabelAndDataToArrayL( aItemArray, *label, *data );
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+ }
+
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// -----------------------------------------------------------------------------
+// CImageInfoPopupList::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFullOmaDrmInfo::ConstructL( CDesCArray& aItemArray,
+ const TDesC& /*aFileName*/,
+ CCoeEnv& /*aCoeEnv*/ )
+ {
+ /*
+ TBool expired ( EFalse );
+ TBool sendingAllowed( EFalse );
+ RPointerArray<CDRMHelperRightsConstraints> tempArr;
+ TCleanupItem cleanupItem( ResetAndDestroy, &tempArr );
+ CleanupStack::PushL( cleanupItem );
+ tempArr.AppendL( NULL ); // Play
+ tempArr.AppendL( NULL ); // Display
+ tempArr.AppendL( NULL ); // Execute
+ tempArr.AppendL( NULL ); // Print
+
+ CDRMHelper* drmHelper = CDRMHelper::NewLC( aCoeEnv );
+
+ TRAPD( err, drmHelper->GetRightsDetailsL(
+ aFileName,
+ 0, // Details for everything
+ expired,
+ sendingAllowed,
+ tempArr[KPlayRights],
+ tempArr[KDisplayRights],
+ tempArr[KExecuteRights],
+ tempArr[KPrintRights] ) );
+ TBool future( EFalse );
+ if( expired || err == CDRMRights::ENoRights )
+ {
+ // Check future rights
+ RPointerArray<CDRMRightsConstraints> fArr;
+ TCleanupItem cleanupItem( ResetAndDestroy, &fArr );
+ CleanupStack::PushL( cleanupItem );
+ fArr.AppendL( NULL ); // Play
+ fArr.AppendL( NULL ); // Display
+ fArr.AppendL( NULL ); // Execute
+ fArr.AppendL( NULL ); // Print
+
+ TBool tmp( EFalse );
+ TBool tmp2( EFalse );
+ TRAP( err, drmHelper->GetRightsDetailsL( aFileName,
+ 0,
+ tmp,
+ tmp2,
+ fArr[KPlayRights],
+ fArr[KDisplayRights],
+ fArr[KExecuteRights],
+ fArr[KPrintRights] ) );
+
+ if( err == KErrNone || err == CDRMRights::ENoRights )
+ {
+ future = IsFutureRights( fArr );
+ }
+ CleanupStack::PopAndDestroy( &fArr );
+
+ ERROR_LOG2( "CFileManagerFullOmaDrmInfo::ConstructL-err:%d,future:%d",
+ err, future )
+ }
+ CleanupStack::PopAndDestroy( drmHelper );
+
+ ERROR_LOG3( "CFileManagerFullOmaDrmInfo::ConstructL-err:%d,expired:%d,sendingAllowed:%d",
+ err, expired, sendingAllowed )
+
+ if ( tempArr[KPlayRights] ||
+ tempArr[KDisplayRights] ||
+ tempArr[KExecuteRights] ||
+ tempArr[KPrintRights] )
+ {
+ */
+ // Add link to display rights details
+ _LIT( KLinkTagStart, "<AknMessageQuery Link>" );
+ _LIT( KLinkTagEnd, "</AknMessageQuery Link>" );
+
+ HBufC* linkTitle = StringLoader::LoadLC( R_QTN_FMGR_DRM_DET_LINK );
+ HBufC* linkText = StringLoader::LoadLC( R_QTN_FMGR_DRM_DET_LINK_VIEW );
+ HBufC* dataStr = HBufC::NewLC( KLinkTagStart().Length() +
+ linkText->Length() +
+ KLinkTagEnd().Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( KLinkTagStart );
+ dataPtr.Append( *linkText );
+ dataPtr.Append( KLinkTagEnd );
+ AppendLabelAndDataToArrayL( aItemArray, *linkTitle, *dataStr );
+ CleanupStack::PopAndDestroy( dataStr );
+ CleanupStack::PopAndDestroy( linkText );
+ CleanupStack::PopAndDestroy( linkTitle );
+ /*
+ }
+ else
+ {
+ // Add forward-lock details
+ // "Status"
+ HBufC* label = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_STAT );
+ HBufC* data = NULL;
+ // "Valid" or "Expired" or "Not valid yet"
+ TInt resId( R_QTN_DRM_MGR_DET_VALID );
+ if( future )
+ {
+ resId = R_QTN_DRM_MGR_DET_NOT_VALID_YET;
+ }
+ else if ( expired || err == CDRMRights::ENoRights )
+ {
+ resId = R_QTN_DRM_MGR_DET_EXP;
+ }
+ data = StringLoader::LoadLC( resId );
+ AppendLabelAndDataToArrayL( aItemArray, *label, *data );
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+
+ // "Sending"
+ label = StringLoader::LoadLC( R_QTN_DRM_MGR_DET_CS );
+ data = NULL;
+ // "Allowed" or "Forbidden"
+ resId = ( sendingAllowed ? R_QTN_DRM_MGR_DET_ALLOWED
+ : R_QTN_DRM_MGR_DET_FORBID );
+ data = StringLoader::LoadLC( resId );
+ AppendLabelAndDataToArrayL( aItemArray, *label, *data );
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( label );
+ }
+
+ CleanupStack::PopAndDestroy( &tempArr );
+ */
+ }
+
+// -----------------------------------------------------------------------------
+// CImageInfoPopupList::ViewDetailsL
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFullOmaDrmInfo::ViewDetailsL(
+ const TDesC& aFileName,
+ DRM::CDrmUiHandling* aUiHandling )
+ {
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL( fs );
+
+ RFile64 drmFile;
+ User::LeaveIfError( drmFile.Open(
+ fs, aFileName, EFileRead | EFileShareReadersOrWriters ) );
+
+ CleanupClosePushL( drmFile );
+
+ TRAPD( err, aUiHandling->ShowDetailsViewL( drmFile ) );
+
+ CleanupStack::PopAndDestroy( &drmFile );
+ CleanupStack::PopAndDestroy( &fs );
+
+ }
+
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerGlobalDlgFull.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,391 @@
+/*
+* Copyright (c) 2006 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: Global dialog handling
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <AknGlobalNote.h>
+#include <AknGlobalConfirmationQuery.h>
+#include <AknGlobalProgressDialog.h>
+#include <avkon.rsg>
+#include <aknconsts.h>
+#include <avkon.mbg>
+#include "CFileManagerGlobalDlg.h"
+#include "CFileManagerGlobalQueryDlg.h"
+
+
+// CONSTANTS
+const TUint KCountdownTimeout = 1000000; // 1s
+const TInt KCountdownSteps = 30;
+const TInt KCountdownShowSKStep = 3;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CFileManagerGlobalDlg
+// ---------------------------------------------------------------------------
+//
+CFileManagerGlobalDlg::CFileManagerGlobalDlg() :
+ CActive( EPriorityUserInput )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::NewL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerGlobalDlg* CFileManagerGlobalDlg::NewL()
+ {
+ CFileManagerGlobalDlg* self =
+ new( ELeave ) CFileManagerGlobalDlg();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::~CFileManagerGlobalDlg
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerGlobalDlg::~CFileManagerGlobalDlg()
+ {
+ Cancel();
+ delete iQueryDialog;
+ delete iProgressDialog;
+ delete iCountdown;
+ delete iCountdownText;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CancelDialog
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::CancelDialog()
+ {
+ delete iCountdown;
+ iCountdown = NULL;
+
+ if ( iQueryDialog )
+ {
+ iQueryDialog->CancelDialog();
+ delete iQueryDialog;
+ iQueryDialog = NULL;
+ }
+
+ if ( iProgressDialog )
+ {
+ iProgressDialog->CancelProgressDialog();
+ delete iProgressDialog;
+ iProgressDialog = NULL;
+ }
+
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ShowDialogL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::ShowDialogL(
+ const CFileManagerGlobalDlg::TType aType,
+ const TDesC& aText,
+ const TInt aSkId )
+ {
+ CancelDialog();
+
+ iType = aType;
+
+ switch ( aType )
+ {
+ case ECountdownQuery:
+ {
+ iCountdownText = aText.AllocL();
+ iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+ iQueryDialog->ShowDialogL(
+ *iCountdownText,
+ R_AVKON_SOFTKEYS_EMPTY );
+ iCountdownSteps = 0;
+ StartCountdownL( KCountdownTimeout );
+ break;
+ }
+ case EQuery:
+ {
+ iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+ iQueryDialog->SetObserver( this );
+ iQueryDialog->ShowDialogL(
+ aText,
+ aSkId );
+ break;
+ }
+ case EQueryWithWarningIcon:
+ {
+ iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+ iQueryDialog->SetObserver( this );
+ iQueryDialog->ShowDialogL(
+ aText,
+ aSkId,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_note_warning,
+ EMbmAvkonQgn_note_warning_mask );
+ break;
+ }
+ case EQueryWithInfoIcon:
+ {
+ iQueryDialog = CFileManagerGlobalQueryDlg::NewL();
+ iQueryDialog->SetObserver( this );
+ iQueryDialog->ShowDialogL(
+ aText,
+ aSkId,
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_note_info,
+ EMbmAvkonQgn_note_info_mask );
+ break;
+ }
+ case EProgressDialog:
+ {
+ iProgressDialog = CAknGlobalProgressDialog::NewL();
+ if ( aSkId )
+ {
+ iProgressDialog->ShowProgressDialogL(
+ iStatus, aText, aSkId );
+ }
+ else
+ {
+ iProgressDialog->ShowProgressDialogL(
+ iStatus, aText );
+ }
+ SetActive();
+ iFinalValue = 0;
+ break;
+ }
+ case EErrorNote:
+ {
+ CAknGlobalNote* note = CAknGlobalNote::NewLC();
+ note->SetTone( EAvkonSIDNoSound ); // no tone
+ note->ShowNoteL( EAknGlobalErrorNote, aText );
+ CleanupStack::PopAndDestroy( note );
+ break;
+ }
+ case EInfoNote:
+ {
+ CAknGlobalNote* note = CAknGlobalNote::NewLC();
+ note->SetTone( EAvkonSIDNoSound ); // no tone
+ note->ShowNoteL( EAknGlobalInformationNote, aText );
+ CleanupStack::PopAndDestroy( note );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ShowDialogL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::ShowDialogL(
+ const CFileManagerGlobalDlg::TType aType,
+ const TInt aTextId,
+ const TInt aSkId )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId );
+ ShowDialogL( aType, *text, aSkId );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::DoCancel()
+ {
+ if ( iQueryDialog )
+ {
+ iQueryDialog->CancelDialog();
+ }
+ if ( iProgressDialog )
+ {
+ iProgressDialog->CancelProgressDialog();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::RunL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::RunL()
+ {
+ CancelDialog();
+ NotifyObserver( iStatus.Int() );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::SetObserver
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::SetObserver(
+ MFileManagerGlobalDlgObserver* aObserver )
+ {
+ // This instance is not allowed to set by client
+ if ( aObserver != this )
+ {
+ iObserver = aObserver;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::StartCountdownL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::StartCountdownL( const TUint aTimeout )
+ {
+ delete iCountdown;
+ iCountdown = NULL;
+ iCountdown = CPeriodic::NewL( CActive::EPriorityStandard );
+ iCountdown->Start( aTimeout, aTimeout, TCallBack( CountdownCB, this ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CountdownCB
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerGlobalDlg::CountdownCB( TAny* aPtr )
+ {
+ CFileManagerGlobalDlg* self =
+ static_cast< CFileManagerGlobalDlg* >( aPtr );
+
+ TRAP_IGNORE( self->CountdownL() );
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::CountdownL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::CountdownL()
+ {
+ if( iCountdownSteps < KCountdownSteps )
+ {
+ // Countdown in progress
+ ++iCountdownSteps;
+ if ( iCountdownSteps == KCountdownShowSKStep )
+ {
+ iProgressDialog = CAknGlobalProgressDialog::NewL();
+ iProgressDialog->SetImageL(
+ KAvkonBitmapFile,
+ EMbmAvkonQgn_note_query,
+ EMbmAvkonQgn_note_query_mask );
+ iProgressDialog->ShowProgressDialogL(
+ iStatus,
+ *iCountdownText,
+ R_AVKON_SOFTKEYS_YES_NO );
+ SetActive();
+
+ if ( iQueryDialog )
+ {
+ iQueryDialog->CancelDialog();
+ delete iQueryDialog;
+ iQueryDialog = NULL;
+ }
+ }
+
+ if ( iProgressDialog &&
+ iCountdownSteps >= KCountdownShowSKStep )
+ {
+ iProgressDialog->UpdateProgressDialog(
+ iCountdownSteps, KCountdownSteps );
+ }
+ }
+ else
+ {
+ // Countdown expired
+ CancelDialog();
+ NotifyObserver( EAknSoftkeyYes );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::UpdateProgressDialog
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::UpdateProgressDialog(
+ const TInt aValue,
+ const TInt aFinalValue )
+ {
+ if ( iProgressDialog )
+ {
+ if ( aFinalValue >= 0 )
+ {
+ iFinalValue = aFinalValue;
+ }
+ iProgressDialog->UpdateProgressDialog( aValue, iFinalValue );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::ProcessFinished
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerGlobalDlg::ProcessFinished()
+ {
+ if ( iProgressDialog )
+ {
+ iProgressDialog->ProcessFinished();
+ delete iProgressDialog;
+ iProgressDialog = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::NotifyObserver
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::NotifyObserver( const TInt aValue )
+ {
+ if ( iObserver )
+ {
+ iObserver->HandleGlobalDlgResult( iType, aValue );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerGlobalDlg::HandleGlobalDlgResult
+// ---------------------------------------------------------------------------
+//
+void CFileManagerGlobalDlg::HandleGlobalDlgResult(
+ TInt /*aDlgType*/,
+ TInt aDlgResult )
+ {
+ NotifyObserver( aDlgResult );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerGlobalQueryDlg.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2006 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: Global query dialog handling
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <AknGlobalConfirmationQuery.h>
+#include "CFileManagerGlobalQueryDlg.h"
+#include "CFileManagerGlobalDlg.h"
+#include "MFileManagerGlobalDlgObserver.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::CFileManagerGlobalQueryDlg
+// ----------------------------------------------------------------------------
+//
+CFileManagerGlobalQueryDlg::CFileManagerGlobalQueryDlg() :
+ CActive( EPriorityUserInput )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::NewL
+// ----------------------------------------------------------------------------
+//
+CFileManagerGlobalQueryDlg* CFileManagerGlobalQueryDlg::NewL()
+ {
+ CFileManagerGlobalQueryDlg* self =
+ new( ELeave ) CFileManagerGlobalQueryDlg();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::~CFileManagerGlobalQueryDlg
+// ----------------------------------------------------------------------------
+//
+CFileManagerGlobalQueryDlg::~CFileManagerGlobalQueryDlg()
+ {
+ Cancel();
+ delete iQueryDialog;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::CancelDialog
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::CancelDialog()
+ {
+ if ( iQueryDialog )
+ {
+ iQueryDialog->CancelConfirmationQuery();
+ delete iQueryDialog;
+ iQueryDialog = NULL;
+ }
+ Cancel();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::ShowDialogL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::ShowDialogL(
+ const TDesC& aText,
+ const TInt aSkId )
+ {
+ CancelDialog();
+
+ iQueryDialog = CAknGlobalConfirmationQuery::NewL();
+ iQueryDialog->ShowConfirmationQueryL(
+ iStatus, aText, aSkId );
+ SetActive();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::ShowDialogL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::ShowDialogL(
+ const TDesC& aText,
+ const TInt aSkId,
+ const TDesC& aBitmapFile,
+ const TInt aImageId,
+ const TInt aMaskId )
+ {
+ CancelDialog();
+
+ iQueryDialog = CAknGlobalConfirmationQuery::NewL();
+ iQueryDialog->ShowConfirmationQueryL(
+ iStatus,
+ aText,
+ aSkId,
+ 0,
+ aBitmapFile,
+ aImageId,
+ aMaskId
+ );
+ SetActive();
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::ShowDialogL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::ShowDialogL(
+ const TInt aTextId,
+ const TInt aSkId )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId );
+ ShowDialogL( *text, aSkId );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::DoCancel
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::DoCancel()
+ {
+ if ( iQueryDialog )
+ {
+ iQueryDialog->CancelConfirmationQuery();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::RunL
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::RunL()
+ {
+ CancelDialog();
+ NotifyObserver( iStatus.Int() );
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::SetObserver
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::SetObserver(
+ MFileManagerGlobalDlgObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerGlobalQueryDlg::NotifyObserver
+// ----------------------------------------------------------------------------
+//
+void CFileManagerGlobalQueryDlg::NotifyObserver( const TInt aValue )
+ {
+ if ( iObserver )
+ {
+ iObserver->HandleGlobalDlgResult(
+ CFileManagerGlobalDlg::EQuery,
+ aValue );
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerIconArray.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2002-2006 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: All the files and folders icons are stored here
+*
+*/
+
+
+// INCLUDE FILES
+#include <FileManagerEngine.hrh>
+#include <barsread.h>
+#include <coemain.h>
+#include <gulicon.h>
+#include <AknsItemID.h>
+#include <AknsUtils.h>
+#include <FileManagerView.rsg>
+#include "CFileManagerIconArray.h"
+#include "FileManagerView.hrh"
+
+
+
+// CONSTANTS
+const TInt KGranularity = 1;
+
+// needed because _LIT macro does not expand parameter, which is also macro
+#define _CREATE_LIT( a, b ) _LIT( a, b )
+
+_CREATE_LIT( KFileManagerMifFile, filemanager_mbm_file_location );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::CFileManagerIconArray
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerIconArray::CFileManagerIconArray() :
+ CArrayPtrFlat( KGranularity )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::NewL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerIconArray* CFileManagerIconArray::NewL()
+ {
+ CFileManagerIconArray* self = new (ELeave) CFileManagerIconArray();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIconArray::ConstructL()
+ {
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(
+ reader, R_FILEMANAGER_ICON_ARRAY );
+
+ TInt count( reader.ReadInt16() );
+ iIconInfo.ReserveL( count );
+ SetReserveL( count );
+
+ // Get File Manager mif drive from exe location
+ TFileName exeFileName( RProcess().FileName() );
+
+ // Load icon info now and actual icon data later when needed to decrease
+ // construction time
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ TIconInfo info;
+
+ info.iId = reader.ReadInt8();
+ info.iFile = reader.ReadHBufCL();
+ info.iIconId = reader.ReadInt16();
+
+ TPtr ptr( info.iFile->Des() );
+ if ( !ptr.CompareF( KFileManagerMifFile ) )
+ {
+ // Set correct File Manager mif drive
+ ptr[ 0 ] = exeFileName[ 0 ];
+ }
+
+ info.iMaskId = reader.ReadInt16();
+ info.iMajorSkinId = reader.ReadInt32();
+ info.iMinorSkinId = reader.ReadInt32();
+ info.iIconType = reader.ReadInt8();
+ info.iIndex = KErrNotFound;
+
+ CleanupStack::PushL( info.iFile );
+ iIconInfo.AppendL( info );
+ CleanupStack::Pop( info.iFile );
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ LoadMandatoryIconsL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::~CFileManagerIconArray
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerIconArray::~CFileManagerIconArray()
+ {
+ TInt count( iIconInfo.Count() );
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ TIconInfo& info = iIconInfo[ i ];
+ delete info.iFile;
+ info.iFile = NULL;
+ }
+ iIconInfo.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::UpdateIconsL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerIconArray::UpdateIconsL()
+ {
+ // Remove icon data and set info to load icon data again when needed
+ ResetAndDestroy();
+
+ TInt count( iIconInfo.Count() );
+ SetReserveL( count );
+
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ TIconInfo& info = iIconInfo[ i ];
+ info.iIndex = KErrNotFound;
+ }
+
+ LoadMandatoryIconsL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::FindIcon
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerIconArray::FindIcon( TInt aIconId )
+ {
+ TInt count( iIconInfo.Count() );
+ for( TInt i( 0 ); i < count; i++ )
+ {
+ TIconInfo& info = iIconInfo[ i ];
+ if ( info.iId == aIconId )
+ {
+ if ( info.iIndex == KErrNotFound )
+ {
+ TRAPD( err, LoadIconL( info ) );
+ if ( err != KErrNone )
+ {
+ return err;
+ }
+ }
+ return info.iIndex;
+ }
+ }
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::LoadIconL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIconArray::LoadIconL( TIconInfo& aInfo )
+ {
+ CGulIcon* icon = LoadIconL(
+ *aInfo.iFile,
+ aInfo.iIconId,
+ aInfo.iMaskId,
+ aInfo.iMajorSkinId,
+ aInfo.iMinorSkinId,
+ aInfo.iIconType == EFileManagerIconColorIcon );
+ CleanupStack::PushL( icon );
+ TInt index( Count() );
+ AppendL( icon );
+ CleanupStack::Pop( icon );
+ aInfo.iIndex = index;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::LoadMandatoryIconsL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerIconArray::LoadMandatoryIconsL()
+ {
+ // At least these icons must be loaded on startup.
+ // Other icons can be loaded first time when needed.
+
+ // Make sure that selection icon is always loaded to first index.
+ // Required by list control.
+ User::LeaveIfError( FindIcon( EFileManagerMarkIcon ) );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerIconArray::LoadIconL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGulIcon* CFileManagerIconArray::LoadIconL(
+ const TDesC& aIconFile,
+ TInt aIconId,
+ TInt aMaskId,
+ TInt aMajorSkin,
+ TInt aMinorSkin,
+ TBool aIsColorIcon )
+ {
+ TAknsItemID aknsItemId;
+ aknsItemId.Set( aMajorSkin, aMinorSkin );
+ MAknsSkinInstance* aknsSkin = AknsUtils::SkinInstance();
+ CGulIcon* ret = NULL;
+ if ( aIsColorIcon )
+ {
+ TRgb defaultColour( KRgbBlack );
+ CFbsBitmap* bmap = NULL;
+ CFbsBitmap* mask = NULL;
+ AknsUtils::GetCachedColor(
+ aknsSkin,
+ defaultColour,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG13 );
+ AknsUtils::CreateColorIconLC(
+ aknsSkin,
+ aknsItemId,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG13,
+ bmap,
+ mask,
+ aIconFile,
+ aIconId,
+ aMaskId,
+ defaultColour );
+ ret = CGulIcon::NewL( bmap, mask );
+ ret->SetBitmapsOwnedExternally( EFalse );
+ CleanupStack::Pop( 2 ); // icon owns the bitmaps now
+ }
+ else
+ {
+ ret = AknsUtils::CreateGulIconL(
+ aknsSkin, aknsItemId, aIconFile, aIconId, aMaskId );
+ ret->SetBitmapsOwnedExternally( EFalse );
+ }
+ return ret;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerInfoPopup.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2002-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: Popup to show the item information, view info
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+#include <StringLoader.h>
+#include <cmemstatepopup.h>
+#include <FileManagerView.rsg>
+#include <CFileManagerItemProperties.h>
+#include <CFileManagerFeatureManager.h>
+#include <drmuihandling.h>
+#include "CFileManagerInfoPopup.h"
+#include "CFileManagerFullOmaDrmInfo.h"
+
+// CONSTANTS
+_LIT( KDateFormat1, "%1" );
+_LIT( KDateFormat2, "%2" );
+_LIT( KDateFormat3, "%3" );
+_LIT( KTimeFormatBefore, "%-B" );
+_LIT( KTimeFormatAfter, "%+B" );
+_LIT( KTimeFormatHour, "%J" );
+_LIT( KTimeFormatMinutes, "%T" );
+_LIT( KTimeFormatSpace, " ");
+
+_LIT( KNumberFormat, "%d" );
+_LIT( KSeparator, "\t" );
+const TUint KDefaultItemCount = 3;
+const TUint KMaxInfoPopupWidth = 16; // From AVKON LAF document
+const TUint KSecondSeparator = 1;
+const TUint KThirdSeparator = 2;
+const TInt KNumBufLen = 24;
+_LIT( KNumBufFormatString, "%d" );
+_LIT( KNumBufSpaceString, " " );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::CFileManagerInfoPopup
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerInfoPopup::CFileManagerInfoPopup(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager ) :
+ iProperties( aProperties ),
+ iFeatureManager( aFeatureManager ),
+ iUiHandling( NULL )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ConstructDataArrayL
+//
+// -----------------------------------------------------------------------------
+//
+MDesCArray* CFileManagerInfoPopup::ConstructDataArrayL()
+ {
+ // Get unit utility instance
+ CMemStatePopup::GetUtilL( iUtil );
+
+ CDesCArray* array = new( ELeave ) CDesCArrayFlat( KDefaultItemCount );
+ CleanupStack::PushL( array );
+
+ HBufC* title = NULL;
+ TUint32 itemType( iProperties.TypeL() );
+ if( itemType & CFileManagerItemProperties::EFolder )
+ {
+ title = StringLoader::LoadLC( R_QTN_FMGR_INFO_HEADING_FLDR );
+ }
+ else if( itemType & CFileManagerItemProperties::ELink )
+ {
+ title = StringLoader::LoadLC( R_QTN_FMGR_INFO_HEADING_LINK );
+ }
+ else
+ {
+ title = StringLoader::LoadLC( R_QTN_FMGR_INFO_HEADING_FILE );
+ }
+ SetTitleL( *title );
+ CleanupStack::PopAndDestroy( title );
+
+ if ( ( itemType & CFileManagerItemProperties::EDrmProtected ) &&
+ iFeatureManager.IsDrmFullSupported() )
+ {
+ CFileManagerFullOmaDrmInfo* drmInfo =
+ CFileManagerFullOmaDrmInfo::NewLC( *array, iProperties.FullPath(), *iCoeEnv );
+ CleanupStack::PopAndDestroy( drmInfo );
+ }
+
+ // Name of the file/folder
+ HBufC* nameEntry = NameEntryLC();
+ array->AppendL( *nameEntry );
+ CleanupStack::PopAndDestroy( nameEntry );
+
+ if( itemType & CFileManagerItemProperties::EFile )
+ {
+ // Type of the file
+ HBufC* type = TypeEntryLC();
+ array->AppendL( *type );
+ CleanupStack::PopAndDestroy( type );
+ }
+
+ // Modification date
+ HBufC* date = DateEntryLC();
+ array->AppendL( *date );
+ CleanupStack::PopAndDestroy( date );
+
+ // Modification time
+ HBufC* time = TimeEntryLC();
+ array->AppendL( *time );
+ CleanupStack::PopAndDestroy( time );
+
+ // Size of file/folder
+ HBufC* size = SizeEntryLC();
+ array->AppendL( *size );
+ CleanupStack::PopAndDestroy( size );
+
+ TUint32 defaultFolderMask = CFileManagerItemProperties::EFolder |
+ CFileManagerItemProperties::EDefault;
+ if( ( itemType & defaultFolderMask ) == defaultFolderMask )
+ {
+ HBufC* str = DefaultFolderEntryLC();
+ array->AppendL( *str );
+ CleanupStack::PopAndDestroy( str );
+ }
+
+ if( itemType & CFileManagerItemProperties::EFolder )
+ {
+ HBufC* folders = ResourceStringValueLC(
+ R_QTN_FMGR_INFO_CONTAIN_FLDR,
+ iProperties.FoldersContainedL() );
+ array->AppendL( *folders );
+ CleanupStack::PopAndDestroy( folders );
+
+ HBufC* files = ResourceStringValueLC(
+ R_QTN_FMGR_INFO_CONTAIN_FILE,
+ iProperties.FilesContainedL() );
+ array->AppendL( *files );
+ CleanupStack::PopAndDestroy( files );
+ }
+
+ CleanupStack::Pop( array );
+ return array;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerInfoPopup* CFileManagerInfoPopup::NewL(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager )
+ {
+ CFileManagerInfoPopup* self = new( ELeave ) CFileManagerInfoPopup(
+ aProperties, aFeatureManager );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerInfoPopup::ConstructL()
+ {
+ iUiHandling = DRM::CDrmUiHandling::NewL();
+
+ CFileManagerPopupBase::ConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::~CFileManagerInfoPopup
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerInfoPopup::~CFileManagerInfoPopup()
+ {
+ delete iUtil;
+
+ delete iUiHandling;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::NameEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::NameEntryLC()
+ {
+ HBufC* name = StringLoader::LoadLC( R_QTN_SWINS_LSH2_APPS_NAME );
+ HBufC* dataStr = HBufC::NewLC(
+ name->Length() + 1 + iProperties.LocalizedName().Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *name );
+ dataPtr.Append( KSeparator );
+ HBufC* itemNameBuf = NULL;
+ if ( iProperties.TypeL() & CFileManagerItemProperties::EFolder )
+ {
+ const TPtrC ptr( iProperties.LocalizedName() );
+ itemNameBuf = ptr.AllocLC();
+ }
+ else
+ {
+ const TPtrC ptr( iProperties.Name() );
+ itemNameBuf = ptr.AllocLC();
+ }
+ // Remove all possible tabs in the name so listbox won't get broken
+ TPtr itemNamePtr = itemNameBuf->Des();
+ AknTextUtils::StripCharacters( itemNamePtr, KSeparator );
+ dataPtr.Append( itemNamePtr );
+ CleanupStack::PopAndDestroy( itemNameBuf );
+ CleanupStack::Pop( dataStr );
+ CleanupStack::PopAndDestroy( name );
+ CleanupStack::PushL( dataStr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::TypeEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::TypeEntryLC()
+ {
+ HBufC* type = StringLoader::LoadLC( R_QTN_SWINS_LSH2_APPS_TYPE );
+ HBufC* dataStr = HBufC::NewL( type->Length() + 1 + iProperties.Ext().Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *type );
+ dataPtr.Append( KSeparator );
+ const TPtrC ptr( iProperties.Ext() );
+ HBufC* extBuf = ptr.AllocLC();
+ // Remove all possible tabs in the name so listbox won't get broken
+ TPtr extPtr = extBuf->Des();
+ AknTextUtils::StripCharacters( extPtr, KSeparator );
+ dataPtr.Append( extPtr );
+ CleanupStack::PopAndDestroy( extBuf );
+ CleanupStack::PopAndDestroy( type );
+ CleanupStack::PushL( dataStr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::DateEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::DateEntryLC()
+ {
+ HBufC* date = StringLoader::LoadLC( R_QTN_ALBUM_DATIM_DATE );
+ TBuf<KMaxInfoPopupWidth> dateStr;
+ TBuf<KMaxInfoPopupWidth> dateStrFormat;
+ // Localized date separator form
+ TLocale local;
+ TTime localTime;
+ User::LeaveIfError( iProperties.ModifiedLocalDate( localTime ) );
+ dateStrFormat.Append( KDateFormat1 );
+ dateStrFormat.Append( local.DateSeparator( KSecondSeparator ) );
+ dateStrFormat.Append( KDateFormat2 );
+ dateStrFormat.Append( local.DateSeparator( KThirdSeparator ) );
+ dateStrFormat.Append( KDateFormat3 );
+ localTime.FormatL( dateStr, dateStrFormat );
+ HBufC* dataStr = HBufC::NewL( date->Length() + 1 + dateStr.Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *date );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( dateStr );
+
+ CleanupStack::PopAndDestroy( date );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::TimeEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::TimeEntryLC()
+ {
+ HBufC* time = StringLoader::LoadLC( R_QTN_ALBUM_DATIM_TIME );
+ TBuf<KMaxInfoPopupWidth> timeStr;
+ TBuf<KMaxInfoPopupWidth> timeStrFormat;
+ TLocale local;
+ TTime localTime;
+ User::LeaveIfError( iProperties.ModifiedLocalDate( localTime ) );
+
+ if( local.AmPmSymbolPosition() == ELocaleBefore )
+ {
+ timeStrFormat.Append( KTimeFormatBefore );
+ timeStrFormat.Append( KTimeFormatSpace );
+ timeStrFormat.Append( KTimeFormatHour );
+ timeStrFormat.Append( local.TimeSeparator( KSecondSeparator ) );
+ timeStrFormat.Append( KTimeFormatMinutes );
+
+ localTime.FormatL( timeStr, timeStrFormat );
+ }
+ else
+ {
+ timeStrFormat.Append( KTimeFormatHour );
+ timeStrFormat.Append( local.TimeSeparator( KSecondSeparator ) );
+ timeStrFormat.Append( KTimeFormatMinutes );
+ timeStrFormat.Append( KTimeFormatSpace );
+ timeStrFormat.Append( KTimeFormatAfter );
+
+ localTime.FormatL( timeStr, timeStrFormat );
+ }
+
+ HBufC* dataStr = HBufC::NewL( time->Length() + 1 + timeStr.Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *time );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( timeStr );
+
+ CleanupStack::PopAndDestroy( time );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::SizeEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::SizeEntryLC()
+ {
+ TInt64 sizeInBytes( iProperties.SizeL() );
+ TPtrC unit( iUtil->SolveUnitAndSize( sizeInBytes ) );
+ TBuf< KNumBufLen > numBuf;
+ numBuf.Format( KNumBufFormatString, I64INT( sizeInBytes ) );
+
+ HBufC* header = StringLoader::LoadLC( R_QTN_ALBUM_LITXT_SIZE );
+ HBufC* dataStr = HBufC::NewL(
+ header->Length() + 1 +
+ numBuf.Length() +
+ KNumBufSpaceString().Length() +
+ unit.Length() );
+ TPtr dataPtr( dataStr->Des() );
+
+ dataPtr.Append( *header );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( numBuf );
+ dataPtr.Append( KNumBufSpaceString );
+ dataPtr.Append( unit );
+
+ CleanupStack::PopAndDestroy( header );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::DefaultFolderEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::DefaultFolderEntryLC()
+ {
+ HBufC* header = StringLoader::LoadLC( R_QTN_FMGR_INFO_FLDR_DEFAULT );
+ HBufC* data = StringLoader::LoadLC( R_QTN_FMGR_INFO_DEF_FLDR_TEXT );
+ HBufC* dataStr = HBufC::NewL( header->Length() + 1 + data->Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *header );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( *data );
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( header );
+ CleanupStack::PushL( dataStr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ResourceStringValueLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::ResourceStringValueLC( TInt aResId, TInt aValue )
+ {
+ HBufC* string = StringLoader::LoadLC( aResId );
+ TBuf<KMaxInfoPopupWidth> infoStr;
+ infoStr.Format( KNumberFormat, aValue );
+ HBufC* dataStr = HBufC::NewL( string->Length() + 1 + infoStr.Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *string );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( infoStr );
+
+ CleanupStack::PopAndDestroy( string );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ return dataStr;
+ }
+
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ActivateLinkL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerInfoPopup::ActivateLinkL()
+ {
+ CFileManagerFullOmaDrmInfo::ViewDetailsL(
+ iProperties.FullPath(),
+ iUiHandling );
+ }
+#endif //RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerMMCInfoPopup.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2006-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: Memory card info popup
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <aknlists.h>
+#include <FileManagerView.rsg>
+#include <cmemstatepopup.h>
+#include "CFileManagerMMCInfoPopup.h"
+#include "TFileManagerDriveInfo.h"
+
+
+// CONSTANTS
+_LIT( KSeparator, "\t" );
+const TUint KDefaultItemCount = 4;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::CFileManagerMMCInfoPopup
+// ---------------------------------------------------------------------------
+//
+CFileManagerMMCInfoPopup::CFileManagerMMCInfoPopup()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerMMCInfoPopup::ConstructL(
+ const TFileManagerDriveInfo& aInfo )
+ {
+ // Get unit utility instance
+ CMemStatePopup::GetUtilL( iUtil );
+
+ iListBox = new ( ELeave ) CAknSingleHeadingPopupMenuStyleListBox;
+ iPopupList = CAknPopupList::NewL(
+ iListBox,
+ R_AVKON_SOFTKEYS_OK_EMPTY,
+ AknPopupLayouts::EMenuGraphicHeadingWindow );
+
+ HBufC* title = StringLoader::LoadLC( R_QTN_FMGR_MEMCARD_INFO_HEADING );
+ iPopupList->SetTitleL( *title );
+ CleanupStack::PopAndDestroy( title );
+
+ iListBox->ConstructL( iPopupList, EAknListBoxViewerFlags );
+
+ MDesCArray* array = ConstructDataArrayL( aInfo );
+ iListBox->Model()->SetItemTextArray( array );
+
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ iListBox->SetMopParent( this );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::~CFileManagerMMCInfoPopup
+// ---------------------------------------------------------------------------
+//
+CFileManagerMMCInfoPopup::~CFileManagerMMCInfoPopup()
+ {
+ if( iIsDestroyed )
+ {
+ *iIsDestroyed = ETrue;
+ }
+ delete iListBox;
+ delete iUtil;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::NewL
+// ---------------------------------------------------------------------------
+//
+CFileManagerMMCInfoPopup* CFileManagerMMCInfoPopup::NewL(
+ const TFileManagerDriveInfo& aInfo )
+ {
+ CFileManagerMMCInfoPopup* self =
+ new( ELeave ) CFileManagerMMCInfoPopup();
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aInfo );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::ExecuteLD
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerMMCInfoPopup::ExecuteLD()
+ {
+ CFileManagerMMCInfoPopup* self = this;
+ CleanupStack::PushL( self );
+
+ TBool thisDestroyed( EFalse );
+ iIsDestroyed = &thisDestroyed;
+
+ TBool ret( EFalse );
+ TRAPD( err, ( ret = iPopupList->ExecuteLD() ));
+
+ // just in case check is this base object still on,
+ // before using member variable
+ if( !thisDestroyed )
+ {
+ iPopupList = NULL;
+ }
+
+ if( thisDestroyed )
+ {
+ CleanupStack::Pop( self );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( self );
+ }
+
+ User::LeaveIfError( err );
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::ConstructDataArrayL
+// ---------------------------------------------------------------------------
+//
+MDesCArray* CFileManagerMMCInfoPopup::ConstructDataArrayL(
+ const TFileManagerDriveInfo& aInfo )
+ {
+ CDesCArray* array = new( ELeave ) CDesCArrayFlat( KDefaultItemCount );
+ CleanupStack::PushL( array );
+
+ // Name
+ HBufC* entry = NameEntryLC( aInfo );
+ array->AppendL( *entry );
+ CleanupStack::PopAndDestroy( entry );
+
+ // Capacity
+ entry = SizeEntryLC( R_QTN_FMGR_CARD_INFO_SIZE, aInfo.iCapacity );
+ array->AppendL( *entry );
+ CleanupStack::PopAndDestroy( entry );
+
+ // Used
+ entry = SizeEntryLC( R_QTN_FMGR_CARD_INFO_USED,
+ aInfo.iCapacity - aInfo.iSpaceFree );
+ array->AppendL( *entry );
+ CleanupStack::PopAndDestroy( entry );
+
+ // Free
+ entry = SizeEntryLC( R_QTN_FMGR_CARD_INFO_FREE, aInfo.iSpaceFree );
+ array->AppendL( *entry );
+ CleanupStack::PopAndDestroy( entry );
+
+ CleanupStack::Pop( array );
+ return array;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::NameEntryLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CFileManagerMMCInfoPopup::NameEntryLC(
+ const TFileManagerDriveInfo& aInfo )
+ {
+ HBufC* title = StringLoader::LoadLC( R_QTN_FMGR_CARD_INFO_NAME );
+ HBufC* name = NULL;
+ if ( aInfo.iName.Length() )
+ {
+ name = aInfo.iName.AllocLC();
+ }
+ else
+ {
+ name = StringLoader::LoadLC( R_QTN_FMGR_CARD_INFO_DEFAULT_NAME );
+ }
+ HBufC* dataStr = HBufC::NewL( title->Length() + name->Length() + 1 );
+ TPtr dataPtr( dataStr->Des() );
+
+ dataPtr.Append( *title );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( *name );
+
+ CleanupStack::PopAndDestroy( name );
+ CleanupStack::PopAndDestroy( title );
+ CleanupStack::PushL( dataStr );
+ return dataStr;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerMMCInfoPopup::SizeEntryLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CFileManagerMMCInfoPopup::SizeEntryLC(
+ TInt aTextId, TInt64 aSize )
+ {
+ TPtrC unit( iUtil->SolveUnitAndSize( aSize ) );
+ HBufC* title = StringLoader::LoadLC( aTextId );
+ HBufC* sizeAndUnit = StringLoader::LoadLC(
+ R_QTN_FMGR_CARD_INFO_DATA, unit, I64INT( aSize ) );
+ HBufC* dataStr = HBufC::NewL(
+ title->Length() + sizeAndUnit->Length() + 1 );
+ TPtr dataPtr( dataStr->Des() );
+
+ dataPtr.Append( *title );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( *sizeAndUnit );
+
+ CleanupStack::PopAndDestroy( sizeAndUnit );
+ CleanupStack::PopAndDestroy( title );
+ CleanupStack::PushL( dataStr );
+ return dataStr;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerPopupBase.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,236 @@
+/*
+* Copyright (c) 2002-2006 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: Base class for file manager popups
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <FileManagerView.rsg>
+#include <FileManagerDebug.h>
+#include <CFileManagerCommonDefinitions.h>
+#include "CFileManagerPopupBase.h"
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ #include <aknmessagequerydialog.h>
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ #include <aknPopup.h>
+ #include <aknlists.h>
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+_LIT( KFmgrLineFeedWithClosingBoldTag, "</AknMessageQuery Bold>\n" );
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::CFileManagerPopupBase
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerPopupBase::CFileManagerPopupBase()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerPopupBase::ConstructL()
+ {
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ const TInt KLineFeedSpace = 2;
+ const TInt KReservedForBoldTags = 600;
+ TInt i( 0 );
+ TInt len( 0 );
+ MDesCArray* array = ConstructDataArrayL();
+
+ // Reformat array to a single buffer for CAknMessageQueryDialog.
+ for ( i = 0; i < array->MdcaCount(); i++ )
+ {
+ len += array->MdcaPoint( i ).Length() + KLineFeedSpace;
+ len += KReservedForBoldTags; //Reserve some space for putting bold tags
+ }
+ iData = HBufC::New( len );
+ if ( !iData )
+ {
+ delete array;
+ User::LeaveNoMemory();
+ }
+ TPtr ptr = iData->Des();
+ for ( i = 0; i < array->MdcaCount(); i++ )
+ {
+ if ( i > 0 )
+ {
+ ptr.Append( KFmgrLineFeed );
+ ptr.Append( KFmgrLineFeed );
+ }
+ ptr.Append( KOpeningBoldTag ); // insert openning bold tag
+ ptr.Append( array->MdcaPoint( i ) );
+ TInt tmpPos = ptr.Find( KFmgrTab );
+ ptr.Replace(tmpPos, 1, KFmgrLineFeedWithClosingBoldTag);
+ }
+// AknTextUtils::ReplaceCharacters( ptr, KFmgrTab, KFmgrLineFeed()[0] );
+ delete array;
+
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ iListBox = new(ELeave) CAknDoublePopupMenuStyleListBox;
+ iPopupList = CAknPopupList::NewL( iListBox,
+ R_AVKON_SOFTKEYS_OK_EMPTY,
+ AknPopupLayouts::EMenuDoubleWindow );
+ iListBox->ConstructL( iPopupList, EAknListBoxViewerFlags );
+
+ MDesCArray* array = ConstructDataArrayL();
+ iListBox->Model()->SetItemTextArray( array );
+
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+ iListBox->SetMopParent( this );
+
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::~CFileManagerPopupBase
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerPopupBase::~CFileManagerPopupBase()
+ {
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ delete iTitle;
+ delete iData;
+
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ if( iIsDestroyed )
+ {
+ *iIsDestroyed = ETrue;
+ }
+ delete iListBox;
+
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::ExecuteLD
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerPopupBase::ExecuteLD()
+ {
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ CleanupStack::PushL( this );
+ CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *iData );
+ dlg->PrepareLC( R_FILEMANAGER_POPUP_DIALOG );
+ dlg->QueryHeading()->SetTextL( *iTitle );
+ dlg->SetMopParent( this );
+ TCallBack cb( CFileManagerPopupBase::LinkCallback, this );
+ dlg->SetLink( cb );
+ TBool ret( dlg->RunLD() );
+ CleanupStack::PopAndDestroy( this );
+ return ret;
+
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ CFileManagerPopupBase* self = this;
+ CleanupStack::PushL( self );
+
+ TBool thisDestroyed( EFalse );
+ iIsDestroyed = &thisDestroyed;
+
+ TBool ret( EFalse );
+ TRAPD( err, ( ret = iPopupList->ExecuteLD() ));
+
+ // just in case check is this base object still on,
+ // before using member variable
+ if( !thisDestroyed )
+ {
+ iPopupList = NULL;
+ }
+
+ if( thisDestroyed )
+ {
+ CleanupStack::Pop( self );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( self );
+ }
+
+ User::LeaveIfError( err );
+
+ return ret;
+
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::SetTitleL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerPopupBase::SetTitleL(const TDesC &aTitle)
+ {
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ if (iTitle)
+ {
+ delete iTitle;
+ iTitle = NULL;
+ }
+ iTitle = aTitle.AllocL();
+
+#else // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+ iPopupList->SetTitleL( aTitle );
+
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+ }
+
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::ActivateLinkL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerPopupBase::ActivateLinkL()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerPopupBase::LinkCallback
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerPopupBase::LinkCallback(TAny* aPtr)
+ {
+ CFileManagerPopupBase* ptr = static_cast<CFileManagerPopupBase*>( aPtr );
+ TRAPD( err, ptr->ActivateLinkL() );
+ ERROR_LOG1( "CFileManagerPopupBase::LinkCallback()-err:%d", err )
+ return err;
+ }
+#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/Cfilemanagerfoldernamequerydlg.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2002-2006 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: Dialog for asking folder name from user
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <bautils.h>
+#include <CFileManagerEngine.h>
+#include <CFileManagerUtils.h>
+#include <FileManagerView.rsg>
+#include "Cfilemanagerfoldernamequerydlg.h"
+#include "CFileManagerCommonDefinitions.h"
+#include "FileManagerDlgUtils.h"
+#include "CFileManagerItemProperties.h"
+
+
+// CONSTANTS
+// If number is 10 or more 2 digits are needed to display it
+const TInt KTwoDigitNeeded = 10;
+_LIT( KFormatStringTwoDigit, "%02d" );
+_LIT( KFormatString, "%d" );
+const TInt KFormatBufLen = 16;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNameQueryDlg::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderNameQueryDlg* CFileManagerFolderNameQueryDlg::NewL(
+ TDes& aDataText,
+ CFileManagerEngine& aEngine,
+ TBool aNameGeneration )
+ {
+ CFileManagerFolderNameQueryDlg* self =
+ new( ELeave ) CFileManagerFolderNameQueryDlg( aDataText, aEngine );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aNameGeneration, aDataText );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNameQueryDlg::CFileManagerFolderNameQueryDlg
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderNameQueryDlg::CFileManagerFolderNameQueryDlg(
+ TDes& aDataText,
+ CFileManagerEngine& aEngine ) :
+ CAknTextQueryDialog( aDataText ),
+ iEngine( aEngine )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNameQueryDlg::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNameQueryDlg::ConstructL( TBool aNameGeneration,
+ TDes& aDataText )
+ {
+ if( aNameGeneration )
+ {
+ TInt i( 1 );
+ HBufC* folderName =
+ StringLoader::LoadLC( R_FILEMANAGER_DEFAULT_FOLDER_NAME );
+ TBuf< KFormatBufLen > numBuf;
+
+ while( iEngine.IsNameFoundL( *folderName ) )
+ {
+ CleanupStack::PopAndDestroy( folderName );
+ numBuf.Zero();
+ if( i < KTwoDigitNeeded )
+ {
+ numBuf.Format( KFormatStringTwoDigit, i );
+ }
+ else
+ {
+ numBuf.Format( KFormatString, i );
+ }
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion(
+ numBuf );
+ folderName = StringLoader::LoadLC(
+ R_FILEMANAGER_DEFAULT_FOLDER_NAME_N, numBuf );
+ ++i;
+ }
+ Text().Copy( *folderName );
+ CleanupStack::PopAndDestroy( folderName );
+ }
+ else
+ {
+ iOldName = aDataText.AllocL();
+ TParsePtrC parse(
+ CFileManagerUtils::StripFinalBackslash( *iOldName ) );
+ if ( parse.PathPresent() )
+ {
+ Text().Copy( parse.NameAndExt() );
+ }
+ else
+ {
+ Text().Copy( *iOldName );
+ }
+
+ // Strip any directionality markers to get pure name
+ TPtr ptr( iOldName->Des() );
+ AknTextUtils::StripCharacters( ptr, KFmgrDirectionalChars );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNameQueryDlg::~CFileManagerFolderNameQueryDlg
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderNameQueryDlg::~CFileManagerFolderNameQueryDlg()
+ {
+ delete iOldName;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNameQueryDlg::DoOkToExitL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFolderNameQueryDlg::DoOkToExitL( TInt aButtonId )
+ {
+ TBool result( CAknTextQueryDialog::OkToExitL( aButtonId ) );
+
+ HBufC* userText = Text().AllocLC();
+ TPtr ptrUserText( userText->Des() );
+
+ // Strip any directionality markers to get pure name
+ AknTextUtils::StripCharacters( ptrUserText, KFmgrDirectionalChars );
+
+ // Check folder name
+ TBool isValidName( EFalse );
+ TPtrC empty( KNullDesC );
+ TParsePtrC oldName( CFileManagerUtils::StripFinalBackslash(
+ iOldName ? *iOldName : empty ) );
+ if ( oldName.PathPresent() )
+ {
+ isValidName = iEngine.IsValidName(
+ oldName.DriveAndPath(), *userText, ETrue );
+ }
+ else
+ {
+ isValidName = iEngine.IsValidName( KNullDesC, *userText, ETrue );
+ }
+
+ if( !isValidName )
+ {
+ if( iEngine.IllegalChars( *userText ) )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_ILLEGAL_CHARACTERS );
+ }
+ else
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_FLDR_BAD_FILE_NAME );
+ }
+ CAknQueryControl* queryControl = QueryControl();
+ if ( queryControl )
+ {
+ CEikEdwin* edwin = static_cast< CEikEdwin* >( queryControl->
+ ControlByLayoutOrNull( EDataLayout ) );
+ if ( edwin )
+ {
+ edwin->SetSelectionL( edwin->TextLength(), 0 );
+ }
+ }
+ CleanupStack::PopAndDestroy( userText );
+ return EFalse;
+ }
+
+ HBufC* userTextFullPath = HBufC::NewLC( KMaxFileName );
+ TPtr ptrUserTextFullPath( userTextFullPath->Des() );
+ if ( oldName.PathPresent() )
+ {
+ ptrUserTextFullPath.Append( oldName.DriveAndPath() );
+ }
+
+ ptrUserTextFullPath.Append( *userText );
+
+ // if entry with same name - not ok except if name same as original
+ if( iEngine.IsNameFoundL( ptrUserTextFullPath ) &&
+ ( !iOldName || ( iOldName &&
+ iOldName->Des().CompareF( ptrUserTextFullPath ) ) ) )
+ {
+ FileManagerDlgUtils::ShowInfoNoteL(
+ R_QTN_WMLBM_NAME_ALREADY_USED );
+
+ CAknQueryControl* queryControl = QueryControl();
+ if ( queryControl )
+ {
+ CEikEdwin* edwin = static_cast< CEikEdwin* >
+ ( queryControl->ControlByLayoutOrNull( EDataLayout ) );
+ if ( edwin )
+ {
+ edwin->SetSelectionL( edwin->TextLength(), 0 );
+ }
+ }
+ result = EFalse;
+ }
+ CleanupStack::PopAndDestroy( userTextFullPath );
+ CleanupStack::PopAndDestroy( userText );
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFileNameQueryDlg::OkToExitL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFolderNameQueryDlg::OkToExitL( TInt aButtonId )
+ {
+ if ( iCallbackDisabled )
+ {
+ return EFalse; // Block unwanted softkey events
+ }
+ TBool ret( EFalse );
+ iCallbackDisabled = ETrue;
+ TRAPD( err, ret = DoOkToExitL( aButtonId ) );
+ iCallbackDisabled = EFalse;
+ User::LeaveIfError( err );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNameQueryDlg::OfferKeyEventL
+//
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerFolderNameQueryDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TKeyResponse response = EKeyWasNotConsumed;
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyEnter )
+ {
+ response = EKeyWasConsumed;
+ }
+ else
+ {
+ response = CAknTextQueryDialog::OfferKeyEventL(aKeyEvent, aType);
+ }
+ return response;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/Cfilemanagerfoldernavigationpane.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,622 @@
+/*
+* Copyright (c) 2002-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: Navigation pane for file manager
+*
+*/
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <avkon.rsg>
+#include <aknconsts.h>
+#include <StringLoader.h>
+#include <bautils.h>
+#include <featmgr.h>
+#include <AknsSkinInstance.h>
+#include <AknsUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <FileManagerView.rsg>
+#include <FileManagerEngine.hrh>
+#include "Cfilemanagerfoldernavigationpane.h"
+#include "MFileManagerFolderNaviObserver.h"
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#endif //RD_TACTILE_FEEDBACK
+
+// CONSTANTS
+const TUint KFmgrRoot = 0;
+const TUint KFmgrFirstLevel = 1;
+
+// needed because _LIT macro does not expand parameter, which is also macro
+#define _CREATE_LIT( a, b ) _LIT( a, b )
+
+_CREATE_LIT( KFileManagerMifFile, filemanager_mbm_file_location );
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::TIndicatorSet::Compare
+//
+// -----------------------------------------------------------------------------
+//
+TBool CFileManagerFolderNavigationPane::TIndicatorSet::Compare(
+ const TIndicatorSet& aFirst,
+ const TIndicatorSet& aSecond )
+ {
+ return ( aFirst.iId == aSecond.iId );
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::~CFileManagerFolderNavigationPane
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerFolderNavigationPane::~CFileManagerFolderNavigationPane()
+ {
+ delete iLongTapDetector;
+ iIndicatorArray.Reset();
+ delete iFolderBitmap;
+ delete iFolderMask;
+ delete iRootBitmap;
+ delete iRootMask;
+ delete iSeparator;
+ delete iBmpFile;
+ delete iEndChar;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::CFileManagerFolderNavigationPane
+//
+// -----------------------------------------------------------------------------
+//
+CFileManagerFolderNavigationPane::CFileManagerFolderNavigationPane(
+ const TInt aRoot,
+ const TInt aDepth ) :
+ iRoot( aRoot ),
+ iMaxDepth( KFileManagerMaxFolderDepth - 1 ), // Exclude the root
+ iIndicatorArray( 1 )
+ {
+ // ensure that iDepth will be positive
+ if ( aDepth < 0 )
+ {
+ iDepth = 0;
+ }
+ else
+ {
+ iDepth = aDepth;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::ConstructL( TResourceReader& aReader )
+ {
+ // Get File Manager mif drive from exe location
+ TFileName exeFileName( RProcess().FileName() );
+
+ iBmpFile = aReader.ReadHBufCL();
+
+ TPtr ptr( iBmpFile->Des() );
+ if ( !ptr.CompareF( KFileManagerMifFile ) )
+ {
+ // Set correct File Manager mif drive
+ ptr[ 0 ] = exeFileName[ 0 ];
+ }
+
+ iFolderIconId = aReader.ReadInt16();
+ iFolderMaskId = aReader.ReadInt16();
+ const TInt majorSkinId = static_cast< TInt >( aReader.ReadInt32() );
+ const TInt minorSkinId = static_cast< TInt >( aReader.ReadInt32() );
+ iSeparator = aReader.ReadHBufCL();
+ iEndChar = aReader.ReadHBufCL();
+
+ iAknsItemIdFolder.Set( majorSkinId, minorSkinId );
+
+ TInt count( aReader.ReadInt16() );
+
+ for ( TInt i( 0 ); i < count ; i++ )
+ {
+ TIndicatorSet set;
+ set.iId = aReader.ReadInt16() ;
+
+ HBufC* tmp = aReader.ReadHBufCL();
+ TPtr ptr( tmp->Des() );
+ if ( !ptr.CompareF( KFileManagerMifFile ) )
+ {
+ // Set correct File Manager mif drive
+ ptr[ 0 ] = exeFileName[ 0 ];
+ }
+ set.iBmpFile = *tmp;
+ delete tmp;
+
+ set.iIconId = aReader.ReadInt16();
+ set.iMaskId = aReader.ReadInt16();
+ const TInt majorSkinIdRoot = static_cast< TInt >( aReader.ReadInt32() );
+ const TInt minorSkinIdRoot = static_cast< TInt >( aReader.ReadInt32() );
+ set.iAknsItemIdRoot.Set( majorSkinIdRoot, minorSkinIdRoot );
+
+ iIndicatorArray.AppendL( set );
+ }
+
+
+ LoadFolderBitmapL();
+
+ // Set the default root bitmap
+ ChangeRootL( iRoot );
+
+ iLongTapDetector = CAknLongTapDetector::NewL( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::NewL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFileManagerFolderNavigationPane*
+ CFileManagerFolderNavigationPane::NewL( const TInt aRoot,
+ const TInt aDepth,
+ TResourceReader& aReader )
+ {
+ CFileManagerFolderNavigationPane* self =
+ new( ELeave ) CFileManagerFolderNavigationPane( aRoot, aDepth );
+ CleanupStack::PushL( self );
+ self->ConstructL( aReader );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::SetFolderDepth
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerFolderNavigationPane::SetFolderDepth( const TInt aDepth )
+ {
+ if ( aDepth < 0 )
+ {
+ iDepth = 0;
+ }
+ else
+ {
+ iDepth = aDepth;
+ }
+
+ // ReportChange() is used to notify CoeControl to redraw pane.
+ ReportChange();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::FolderDepth
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CFileManagerFolderNavigationPane::FolderDepth() const
+ {
+ return iDepth;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::SizeChanged
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::SizeChanged()
+ {
+
+ TSize size( TSize::EUninitialized );
+ AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::ENaviPane, size );
+ TRect parentRect( size );
+ // Get pane icon and text layouts
+ TAknWindowLineLayout paneIconLayout(
+ AknLayoutScalable_Avkon::navi_icon_text_pane_g1().LayoutLine() );
+ TAknTextLineLayout paneTextLayout(
+ AknLayoutScalable_Avkon::navi_icon_text_pane_t1().LayoutLine() );
+ TAknLayoutRect layoutRect;
+ TAknLayoutText layoutText;
+ layoutRect.LayoutRect( parentRect, paneIconLayout );
+ layoutText.LayoutText( parentRect, paneTextLayout );
+ // Setup pane items
+ TRect itemsRect( layoutRect.Rect() );
+ const CFont* font( layoutText.Font() ); // Not owned
+ TInt bsWidth( font->MeasureText( *iSeparator ) );
+ TInt dotsWidth( font->MeasureText( *iEndChar ) );
+ TInt textWidth( KFileManagerMaxFolderDepth * bsWidth + dotsWidth );
+ TInt iconWidth( ( itemsRect.Width() - textWidth )
+ / KFileManagerMaxFolderDepth );
+ TInt i( 0 );
+
+ if ( AknLayoutUtils::LayoutMirrored() )
+ {
+ TInt offs( itemsRect.Width() );
+ for ( i = 0 ; i < KFileManagerMaxFolderDepth; i++ )
+ {
+ // Root and Folder Icons
+ offs -= iconWidth;
+ iBitmapLayout[ i ].LayoutRect(
+ parentRect,
+ paneIconLayout.iC,
+ paneIconLayout.il + offs,
+ paneIconLayout.it,
+ paneIconLayout.ir,
+ paneIconLayout.ib,
+ iconWidth,
+ paneIconLayout.iH
+ );
+ // Backslashes
+ offs -= bsWidth;
+ iTextLayout[ i ].LayoutText(
+ parentRect,
+ paneTextLayout.iFont,
+ paneTextLayout.iC,
+ paneTextLayout.il + offs,
+ paneTextLayout.ir,
+ paneTextLayout.iB,
+ paneTextLayout.iW,
+ paneTextLayout.iJ
+ );
+ }
+ // Dots
+ offs -= dotsWidth;
+ iTextLayout[ i ].LayoutText(
+ parentRect,
+ paneTextLayout.iFont,
+ paneTextLayout.iC,
+ paneTextLayout.il + offs,
+ paneTextLayout.ir,
+ paneTextLayout.iB,
+ paneTextLayout.iW,
+ paneTextLayout.iJ
+ );
+ }
+ else
+ {
+ TInt offs( 0 );
+ for ( i = 0 ; i < KFileManagerMaxFolderDepth; i++ )
+ {
+ // Root and Folder Icons
+ iBitmapLayout[ i ].LayoutRect(
+ parentRect,
+ paneIconLayout.iC,
+ paneIconLayout.il + offs,
+ paneIconLayout.it,
+ paneIconLayout.ir,
+ paneIconLayout.ib,
+ iconWidth,
+ paneIconLayout.iH
+ );
+ offs += iconWidth;
+ // Backslashes
+ iTextLayout[ i ].LayoutText(
+ parentRect,
+ paneTextLayout.iFont,
+ paneTextLayout.iC,
+ paneTextLayout.il + offs,
+ paneTextLayout.ir,
+ paneTextLayout.iB,
+ paneTextLayout.iW,
+ paneTextLayout.iJ
+ );
+ offs += bsWidth;
+ }
+ // Dots
+ iTextLayout[ i ].LayoutText(
+ parentRect,
+ paneTextLayout.iFont,
+ paneTextLayout.iC,
+ paneTextLayout.il + offs,
+ paneTextLayout.ir,
+ paneTextLayout.iB,
+ paneTextLayout.iW,
+ paneTextLayout.iJ
+ );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::Draw
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::Draw( const TRect& /*aRect*/ ) const
+ {
+
+ CWindowGc& gc = SystemGc();
+
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+ CFbsBitmap* bmp = NULL;
+ TRgb color( KRgbWhite ); // Default never used
+ bmp = AknsUtils::GetCachedBitmap( skin, KAknsIIDQsnComponentColorBmpCG2 );
+ AknsUtils::GetCachedColor( skin, color,
+ KAknsIIDQsnComponentColors, EAknsCIQsnComponentColorsCG2 );
+
+ AknIconUtils::SetSize( iRootMask, iBitmapLayout[ KFmgrRoot ].Rect().Size() );
+ if ( bmp )
+ {
+ iBitmapLayout[ KFmgrRoot ].DrawImage( gc, bmp, iRootMask );
+ }
+ else
+ {
+ AknIconUtils::SetSize( iRootBitmap, iBitmapLayout[ KFmgrRoot ].Rect().Size() );
+ iBitmapLayout[ KFmgrRoot ].DrawImage( gc, iRootBitmap, iRootMask );
+ }
+
+ if ( !bmp )
+ {
+ AknIconUtils::SetSize( iFolderBitmap, iBitmapLayout[ KFmgrFirstLevel ].Rect().Size() );
+ bmp = iFolderBitmap;
+ }
+
+
+ // draw folder bitmaps depending on current folderdepth
+ TInt count( iDepth > iMaxDepth ? iMaxDepth : iDepth );
+ AknIconUtils::SetSize( iFolderMask, iBitmapLayout[ KFmgrFirstLevel ].Rect().Size() );
+ for( TInt i( KFmgrFirstLevel ); i <= count; i++ )
+ {
+ iBitmapLayout[ i ].DrawImage( gc, bmp, iFolderMask );
+ }
+
+ // draw backslashes between folderbitmaps depending on current folderdepth
+ TInt tc( iDepth > ( iMaxDepth + 1 ) ? ( iMaxDepth + 1 ) : iDepth );
+ for( TInt j( 0 ); j < tc; j++ )
+ {
+ const CFont* font = iTextLayout[j].Font(); // Not owned
+ gc.UseFont( font );
+ gc.SetPenColor( color );
+ gc.DrawText( *iSeparator, iTextLayout[j].TextRect(),
+ font->AscentInPixels(), CGraphicsContext::ELeft, 0 );
+ }
+
+ // draw "..." at the end if necessary
+ if ( iDepth > iMaxDepth )
+ {
+ const CFont* font = iTextLayout[iMaxDepth+1].Font(); // Not owned
+ gc.UseFont( font );
+ gc.SetPenColor( color );
+ gc.DrawText( *iEndChar, iTextLayout[iMaxDepth+1].TextRect(),
+ font->AscentInPixels(), CGraphicsContext::ELeft, 0 );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::HandleResourceChangeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerFolderNavigationPane::HandleResourceChangeL( TInt aType )
+ {
+ // Skin has propably changed so load bitmaps again
+ if( aType == KAknsMessageSkinChange )
+ {
+ LoadFolderBitmapL();
+
+ // Delete old to make sure that bitmaps are reloaded
+ delete iRootBitmap;
+ iRootBitmap = NULL;
+ delete iRootMask;
+ iRootMask = NULL;
+
+ ChangeRootL( iRoot );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::ReportChange
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::ReportChange()
+ {
+ // Leave is trapped because it's not critical to functionality.
+ // If leave occurs, navipane just may not be redrawn at that very moment.
+ TRAP_IGNORE( ReportEventL( MCoeControlObserver::EEventStateChanged ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::ChangeRootL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerFolderNavigationPane::ChangeRootL( const TInt aRoot )
+ {
+ // Do not reload icon if correct one is already in use
+ if ( iRoot == aRoot && iRootBitmap && iRootMask )
+ {
+ return;
+ }
+
+ TIndicatorSet set;
+ set.iId = aRoot;
+
+ TInt index( iIndicatorArray.Find( set, TIndicatorSet::Compare ) );
+
+ if ( index >= 0 )
+ {
+ set = iIndicatorArray[ index ];
+
+ delete iRootBitmap;
+ iRootBitmap = NULL;
+ delete iRootMask;
+ iRootMask = NULL;
+
+ AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
+ set.iAknsItemIdRoot,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG7,
+ iRootBitmap,
+ iRootMask,
+ set.iBmpFile,
+ set.iIconId,
+ set.iMaskId,
+ KRgbBlack );
+ iRoot = aRoot;
+ ReportChange();
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::LoadFolderBitmapL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::LoadFolderBitmapL()
+ {
+
+ delete iFolderBitmap;
+ iFolderBitmap = NULL;
+ delete iFolderMask;
+ iFolderMask = NULL;
+
+ AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
+ iAknsItemIdFolder,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG7,
+ iFolderBitmap,
+ iFolderMask,
+ *iBmpFile,
+ iFolderIconId,
+ iFolderMaskId,
+ KRgbBlack );
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::SetObserver
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CFileManagerFolderNavigationPane::SetObserver(
+ MFileManagerFolderNaviObserver* aObserver )
+ {
+ iObserver = aObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::CheckHitFolderLevel
+//
+// -----------------------------------------------------------------------------
+//
+TInt CFileManagerFolderNavigationPane::CheckHitFolderLevel(
+ const TPoint& aPos )
+ {
+ TInt ret( KErrNotFound );
+ TInt count( iDepth + 1 );
+ count = Min( KFileManagerMaxFolderDepth, count );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ const TRect& bmpRect( iBitmapLayout[ i ].Rect() );
+ if ( bmpRect.Contains( aPos ) )
+ {
+ ret = i;
+ break;
+ }
+ }
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::HandlePointerEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::HandlePointerEventL(
+ const TPointerEvent& aPointerEvent )
+ {
+ if ( !AknLayoutUtils::PenEnabled() )
+ {
+ return;
+ }
+
+ TInt level( KErrNotFound );
+
+ switch ( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ level = CheckHitFolderLevel( aPointerEvent.iPosition );
+ if ( iObserver )
+ {
+#ifdef RD_TACTILE_FEEDBACK
+ if (KErrNotFound != level)
+ {
+ MTouchFeedback* feedback = MTouchFeedback::Instance();
+ if ( feedback )
+ {
+ feedback->InstantFeedback( this, ETouchFeedbackBasic );
+ }
+ }
+#endif //RD_TACTILE_FEEDBACK
+
+ iObserver->HandleFolderNaviEventL(
+ MFileManagerFolderNaviObserver::ENaviTapDown,
+ level );
+ }
+ iLongTap = EFalse;
+ break;
+ }
+ case TPointerEvent::EButton1Up:
+ {
+ level = CheckHitFolderLevel( aPointerEvent.iPosition );
+ if ( !iLongTap )
+ {
+ if ( iObserver )
+ {
+ iObserver->HandleFolderNaviEventL(
+ MFileManagerFolderNaviObserver::ENaviTapUp,
+ level );
+ }
+ }
+ else
+ {
+ iLongTap = EFalse;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ if ( iLongTapDetector && level != KErrNotFound )
+ {
+ iLongTapDetector->PointerEventL( aPointerEvent );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerFolderNavigationPane::HandleLongTapEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerFolderNavigationPane::HandleLongTapEventL(
+ const TPoint& aPenEventLocation,
+ const TPoint& /*aPenEventScreenLocation*/ )
+ {
+ if ( iObserver )
+ {
+ TInt level( CheckHitFolderLevel( aPenEventLocation ) );
+ iObserver->HandleFolderNaviEventL(
+ MFileManagerFolderNaviObserver::ENaviLongTap,
+ level );
+ }
+ iLongTap = ETrue;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/FileManagerDlgUtils.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,665 @@
+/*
+* 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: Dialog utilities
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <avkon.rsg>
+#include <StringLoader.h>
+#include <aknradiobuttonsettingpage.h>
+#include <akncheckboxsettingpage.h>
+#include <aknmfnesettingpage.h>
+#include <aknmessagequerydialog.h>
+#include <aknnotewrappers.h>
+#include <FileManagerView.rsg>
+#include <CFileManagerEngine.h>
+#include "FileManagerDlgUtils.h"
+#include "CFileManagerMMCInfoPopup.h"
+#include "CFileManagerCheckBoxSettingPage.h"
+#include "CFileManagerFileNameQueryDlg.h"
+#include "Cfilemanagerfoldernamequerydlg.h"
+#include "CFileManagerInfoPopup.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowOOfMSettingQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowOOfMSettingQueryL(
+ const TInt aTitleId,
+ const MDesCArray* aTextArray,
+ TInt& aSelectedIndex )
+ {
+ TInt index( aSelectedIndex );
+ TBool ret( EFalse );
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ CAknRadioButtonSettingPage* dlg =
+ new ( ELeave )CAknRadioButtonSettingPage(
+ R_FILEMANAGER_SETTING_RADIOBUTTON_PAGE, index, aTextArray );
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( *title );
+ CleanupStack::Pop( dlg );
+ if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ // Get new selected item and inform change
+ if ( index != aSelectedIndex )
+ {
+ aSelectedIndex = index;
+ ret = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowOOfMSettingQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowOOfMSettingQueryL(
+ const TInt aTitleId,
+ const TInt aTextIds,
+ TInt& aSelectedIndex )
+ {
+ CDesCArray* texts = CCoeEnv::Static()->ReadDesCArrayResourceL( aTextIds );
+ CleanupStack::PushL( texts );
+ TBool ret( ShowOOfMSettingQueryL( aTitleId, texts, aSelectedIndex ) );
+ CleanupStack::PopAndDestroy( texts );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowWeekdayQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowWeekdayQueryL(
+ const TInt aTitleId,
+ TDay& aDay )
+ {
+ const TInt KDaysPerWeek = 7;
+ TLocale locale;
+ TDay startingDay( locale.StartOfWeek() );
+ CDesCArray* texts = new ( ELeave ) CDesCArrayFlat( KDaysPerWeek );
+ CleanupStack::PushL( texts );
+ TInt j( startingDay % KDaysPerWeek );
+ TDayName dayName;
+ for ( TInt i( 0 ); i < KDaysPerWeek; i++ )
+ {
+ dayName.Set( static_cast< TDay >( j ) );
+ texts->AppendL( dayName );
+ j = ( j + 1 ) % KDaysPerWeek;
+ }
+ TInt index( 0 );
+ if ( aDay >= startingDay )
+ {
+ index = aDay - startingDay;
+ }
+ else
+ {
+ index = KDaysPerWeek - startingDay + aDay;
+ }
+ TBool ret( ShowOOfMSettingQueryL( aTitleId, texts, index ) );
+ if ( ret )
+ {
+ aDay = static_cast< TDay >( ( startingDay + index ) % KDaysPerWeek );
+ }
+ CleanupStack::PopAndDestroy( texts );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowNOfMSettingQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowNOfMSettingQueryL(
+ const TInt aTitleId,
+ const TInt aTextIds,
+ TUint32& aSelection,
+ const TInt aDominantIndex )
+ {
+ TBool ret( EFalse );
+
+ // Get title and text array
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ CDesCArray* texts = CCoeEnv::Static()->ReadDesCArrayResourceL( aTextIds );
+ CleanupStack::PushL( texts );
+
+ // Create selection array
+ TInt count( texts->MdcaCount() );
+ CSelectionItemList* items =
+ new ( ELeave ) CSelectionItemList( count );
+ CleanupStack::PushL( items );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ TBool check( EFalse );
+ if ( aSelection & ( 1 << i ) )
+ {
+ check = ETrue;
+ }
+ TPtrC ptr( texts->MdcaPoint( i ) );
+ CSelectableItem* selectionItem = new ( ELeave ) CSelectableItem(
+ ptr, check );
+ CleanupStack::PushL( selectionItem );
+ selectionItem->ConstructL();
+ items->AppendL( selectionItem );
+ CleanupStack::Pop( selectionItem );
+ }
+
+ // Create multiselection list
+ CFileManagerCheckBoxSettingPage* dlg =
+ new ( ELeave ) CFileManagerCheckBoxSettingPage(
+ R_FILEMANAGER_SETTING_CHECKBOX_PAGE, *items, aDominantIndex );
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( *title );
+ CleanupStack::Pop( dlg );
+ if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+ {
+ // Get new selection and inform changes
+ TUint32 selection( 0 );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ if ( items->At( i )->SelectionStatus() )
+ {
+ selection |= 1 << i;
+ }
+ }
+ if ( selection != aSelection )
+ {
+ aSelection = selection;
+ ret = ETrue;
+ }
+ }
+ items->ResetAndDestroy();
+ CleanupStack::PopAndDestroy( items );
+ CleanupStack::PopAndDestroy( texts );
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowTimeSettingQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowTimeSettingQueryL(
+ const TInt aTitleId, TTime& aTime )
+ {
+ TTime time( aTime );
+ TBool ret( EFalse );
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ CAknTimeSettingPage* dlg =
+ new (ELeave) CAknTimeSettingPage(
+ R_FILEMANAGER_TIME_SETTING_PAGE,
+ time);
+ CleanupStack::PushL( dlg );
+ dlg->SetSettingTextL( *title );
+ CleanupStack::Pop( dlg );
+ if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) )
+ {
+ // Get new time and inform change
+ if ( time != aTime )
+ {
+ aTime = time;
+ ret = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowInfoQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowInfoQueryL(
+ const TDesC& aText )
+ {
+ CAknMessageQueryDialog* dlg =
+ CAknMessageQueryDialog::NewL( const_cast< TDesC& >( aText ) );
+ dlg->ExecuteLD( R_FILEMANAGER_INFO_QUERY );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowInfoQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowInfoQueryL(
+ const TInt aTextId, const TDesC& aValue )
+ {
+ HBufC* text = NULL;
+ if ( aValue.Length() )
+ {
+ text = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextId );
+ }
+ ShowInfoQueryL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowInfoQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowInfoQueryL(
+ const TInt aTextId, const TInt aValue )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId, aValue );
+ ShowInfoQueryL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowErrorNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowErrorNoteL(
+ const TInt aTextId, const TDesC& aValue )
+ {
+ HBufC* text = NULL;
+ if ( aValue.Length() )
+ {
+ text = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextId );
+ }
+ ShowErrorNoteL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowConfirmNoteL(
+ const TInt aTextId )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId );
+ CAknConfirmationNote* confirmNote =
+ new( ELeave ) CAknConfirmationNote( ETrue );
+ confirmNote->ExecuteLD( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowWarningNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowWarningNoteL(
+ const TInt aTextId )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId );
+ CAknWarningNote* warningNote =
+ new( ELeave ) CAknWarningNote( ETrue );
+ warningNote->ExecuteLD( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithYesNoL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ const TInt aTextId, const TDesC& aValue )
+ {
+ HBufC* text = NULL;
+ if ( aValue.Length() )
+ {
+ text = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextId );
+ }
+
+ TBool ret( ShowConfirmQueryWithYesNoL( *text ) );
+ CleanupStack::PopAndDestroy( text );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithYesNoL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowConfirmQueryWithYesNoL(
+ const TDesC& aText )
+ {
+ TBool ret( EFalse );
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ if ( dlg->ExecuteLD( R_FILEMANAGER_CONFIRM_QUERY_WITH_YES_NO, aText ) )
+ {
+ ret = ETrue;
+ }
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithOkL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ const TIcons aIcons,
+ const TInt aTextId,
+ const TDesC& aValue )
+ {
+ HBufC* text = NULL;
+ if ( aValue.Length() )
+ {
+ text = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextId );
+ }
+ ShowConfirmQueryWithOkL( aIcons, *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithOkL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ const TIcons aIcons,
+ const TInt aTextId,
+ const TInt aValue )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId, aValue );
+ ShowConfirmQueryWithOkL( aIcons, *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithOkL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowConfirmQueryWithOkL(
+ const TIcons aIcons,
+ const TDesC& aText )
+ {
+ TInt resId( 0 );
+ switch ( aIcons )
+ {
+ case EInfoIcons:
+ {
+ resId = R_FILEMANAGER_INFO_CONFIRM_QUERY_WITH_OK;
+ break;
+ }
+ case EErrorIcons:
+ {
+ resId = R_FILEMANAGER_ERROR_CONFIRM_QUERY_WITH_OK;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ if ( resId )
+ {
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ dlg->ExecuteLD( resId, aText );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL(
+ const TDesC& aText )
+ {
+ TBool ret( EFalse );
+ CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+ if ( dlg->ExecuteLD(
+ R_FILEMANAGER_CONFIRM_QUERY_WITH_OK_CANCEL, aText ) )
+ {
+ ret = ETrue;
+ }
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowConfirmQueryWithOkCancelL(
+ const TInt aTextId,
+ const TDesC& aValue )
+ {
+ HBufC* text = NULL;
+ if ( aValue.Length() )
+ {
+ text = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextId );
+ }
+ TBool ret( ShowConfirmQueryWithOkCancelL( *text ) );
+ CleanupStack::PopAndDestroy( text );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowInfoNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowInfoNoteL(
+ const TDesC& aText )
+ {
+ CAknInformationNote* dlg = new(ELeave) CAknInformationNote( ETrue );
+ dlg->ExecuteLD( aText );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowInfoNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowInfoNoteL(
+ const TInt aTextId, const TDesC& aValue )
+ {
+ HBufC* text = NULL;
+ if( aValue.Length() )
+ {
+ text = StringLoader::LoadLC( aTextId, aValue );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextId );
+ }
+ ShowInfoNoteL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowInfoNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowInfoNoteL(
+ const TInt aTextId, const TInt aValue )
+ {
+ HBufC* text = StringLoader::LoadLC( aTextId, aValue );
+ ShowInfoNoteL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowSimplePasswordQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowSimplePasswordQueryL(
+ const TInt aTitleId,
+ TDes& aPwd )
+ {
+ TBool ret( EFalse );
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ ret = ShowSimplePasswordQueryL( *title, aPwd );
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowPasswordQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowPasswordQueryL(
+ TDes& aPwd )
+ {
+ HBufC* confirm = HBufC::NewLC( aPwd.MaxLength() );
+ TPtr ptrConfirm( confirm->Des() );
+ TBool ret( EFalse );
+ // Execute dialog again and again until cancelled or passwords match
+ TBool isDone( EFalse );
+ while( !isDone )
+ {
+ aPwd.FillZ( aPwd.MaxLength() );
+ aPwd.Zero();
+ ptrConfirm.FillZ( ptrConfirm.MaxLength() );
+ ptrConfirm.Zero();
+
+ CAknMultiLineDataQueryDialog* dlg =
+ CAknMultiLineDataQueryDialog::NewL(
+ aPwd, ptrConfirm );
+ if ( dlg->ExecuteLD( R_FILEMANAGER_PASSWORD_QUERY ) )
+ {
+ // Check if the words match
+ if ( aPwd.Compare( ptrConfirm ) )
+ {
+ FileManagerDlgUtils::ShowErrorNoteL(
+ R_QTN_PASSWORDS_DONT_MATCH_TEXT );
+ }
+ else
+ {
+ ret = ETrue;
+ isDone = ETrue;
+ }
+ }
+ else
+ {
+ isDone = ETrue;
+ }
+ }
+ CleanupStack::PopAndDestroy( confirm );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowMemoryStoreInfoPopupL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowMemoryStoreInfoPopupL(
+ const TFileManagerDriveInfo& aInfo
+ )
+ {
+ CFileManagerMMCInfoPopup* popup = CFileManagerMMCInfoPopup::NewL(
+ aInfo );
+ popup->ExecuteLD();
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowFileNameQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowFileNameQueryL(
+ const TInt aTitleId,
+ const TDesC& aOldName,
+ TDes& aNewName,
+ CFileManagerEngine& aEngine )
+ {
+ TBool ret( EFalse );
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ CFileManagerFileNameQueryDlg* dlg =
+ CFileManagerFileNameQueryDlg::NewL(
+ aOldName, aNewName, aEngine );
+ if ( dlg->ExecuteLD( R_FILEMANAGER_FILE_NAME_QUERY, *title ) )
+ {
+ ret = ETrue;
+ }
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowFolderNameQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowFolderNameQueryL(
+ const TInt aTitleId,
+ TDes& aName,
+ CFileManagerEngine& aEngine,
+ const TBool aNameGeneration )
+ {
+ TBool ret( EFalse );
+ HBufC* title = StringLoader::LoadLC( aTitleId );
+ CFileManagerFolderNameQueryDlg* dlg =
+ CFileManagerFolderNameQueryDlg::NewL(
+ aName, aEngine, aNameGeneration );
+ if ( dlg->ExecuteLD( R_FILEMANAGER_FILE_NAME_QUERY, *title ) )
+ {
+ ret = ETrue;
+ }
+ CleanupStack::PopAndDestroy( title );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowItemInfoPopupL(
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowItemInfoPopupL(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager )
+ {
+ CFileManagerInfoPopup* popup = CFileManagerInfoPopup::NewL(
+ aProperties, aFeatureManager );
+ popup->ExecuteLD();
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowSimplePasswordQueryL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool FileManagerDlgUtils::ShowSimplePasswordQueryL(
+ const TDesC& aText, TDes& aPwd )
+ {
+ TBool ret( EFalse );
+ CAknTextQueryDialog* dlg =
+ CAknTextQueryDialog::NewL( aPwd, CAknQueryDialog::ENoTone );
+ if ( dlg->ExecuteLD( R_FILEMANAGER_SIMPLE_PASSWORD_QUERY, aText ) )
+ {
+ ret = ETrue;
+ }
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// FileManagerDlgUtils::ShowErrorNoteL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void FileManagerDlgUtils::ShowErrorNoteL( const TDesC& aText )
+ {
+ CAknErrorNote* dlg = new( ELeave ) CAknErrorNote( ETrue );
+ dlg->ExecuteLD( aText );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/aiwprovider/data/200110F8.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* 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: Registry info resource file for filemanageraiwprovider
+*
+*/
+
+
+// INCLUDE FILES
+#include <ecom/registryinfov2.rh>
+#include <AiwCommon.hrh>
+
+
+// ---------------------------------------------------------
+// filemanageraiwprovider_registry_info
+// Registry info resource.
+// ---------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO filemanageraiwprovider_registry_info
+ {
+ resource_format_version = RESOURCE_FORMAT_VERSION_2;
+ dll_uid = 0x200110F8;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KAiwClassBase;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x200110F9;
+ version_no = 1;
+ display_name = "filemanageraiwprovider";
+ default_data = "*";
+ opaque_data = KAiwCmdEditStr;
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/aiwprovider/inc/filemanageraiwprovider.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,128 @@
+/*
+* 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
+*
+*/
+
+
+
+#ifndef C_FILEMANAGERAIWPROVIDER_H
+#define C_FILEMANAGERAIWPROVIDER_H
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <AiwServiceIfBase.h>
+#include <AknLaunchAppService.h>
+
+
+// CLASS DECLARATION
+/**
+* This class offers AIW services
+*
+* @since 5.0
+*/
+NONSHARABLE_CLASS( CFileManagerAiwProvider ) :
+ public CAiwServiceIfBase,
+ public MAknServerAppExitObserver
+ {
+public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerAiwProvider* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CFileManagerAiwProvider();
+
+public: // From CAiwServiceIfBase
+
+ void InitialiseL(
+ MAiwNotifyCallback& aFrameworkCallback,
+ const RCriteriaArray& aInterest );
+
+ void HandleServiceCmdL(
+ const TInt& aCmdId,
+ const CAiwGenericParamList& aInParamList,
+ CAiwGenericParamList& aOutParamList,
+ TUint aCmdOptions = 0,
+ const MAiwNotifyCallback* aCallback = NULL );
+
+public: // From MAknServerAppExitObserver
+ void HandleServerAppExit( TInt aReason );
+
+private: // New methods
+ void CmdEditL(
+ const CAiwGenericParamList& aInParamList,
+ const MAiwNotifyCallback* aCallback );
+
+ void NotifyL( TInt aEvent );
+
+ TUid GetAppUidL();
+
+ TUid GetAppUid();
+
+ void LaunchEmbeddedL(
+ const CAiwGenericParamList& aInParamList,
+ const MAiwNotifyCallback* aCallback );
+
+ TBool IsStandaloneLaunch(
+ const CAiwGenericParamList& aInParamList );
+
+ void LaunchStandaloneL(
+ const CAiwGenericParamList& aInParamList );
+
+ TBool IsFolderToOpenPathGiven(
+ const CAiwGenericParamList& aInParamList );
+
+private:
+ /**
+ * C++ default constructor.
+ */
+ CFileManagerAiwProvider();
+
+private: // Data
+ /**
+ * For launching embedded file manager
+ * Own.
+ */
+ CAknLaunchAppService* iService;
+
+ /**
+ * For client notifications
+ * Not own.
+ */
+ const MAiwNotifyCallback* iCallback;
+
+ /**
+ * For storing the current input params
+ * Own.
+ */
+ CAiwGenericParamList* iInParamList;
+
+ /**
+ * Id of the current command
+ */
+ TInt iCmd;
+
+ /**
+ * The uid of File Manager application to be started for this service
+ */
+ TUid iAppUid;
+
+ };
+
+#endif // C_FILEMANAGERAIWPROVIDER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/aiwprovider/src/filemanageraiwprovider.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,443 @@
+/*
+* 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;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupchecker/data/10205078.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2006 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: Registry info resource file for filemanagerbkupchecker
+*
+*/
+
+
+#include <ecom/registryinfov2.rh>
+
+// ---------------------------------------------------------
+//
+// filemanagerbkupchecker_registry_info
+// Registry info resource.
+//
+// ---------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO filemanagerbkupchecker_registry_info
+ {
+ resource_format_version = RESOURCE_FORMAT_VERSION_2;
+ dll_uid = 0x10205078;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = 0x1020d466; // Const for all rule based recognizers
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x1020508A;
+ version_no = 1;
+ display_name = "filemanagerbkupchecker";
+ default_data = "";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupchecker/data/filemanagerbkupchecker.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2006 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: Resource file for filemanagerbkupchecker plugin
+*
+*/
+
+
+#include <eikon.rh>
+#include <filemanager.loc>
+#include "filemanagerbkupchecker.rh"
+
+NAME BKCH
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf="bkupchecker"; }
+
+RESOURCE LBUF r_qtn_fmgr_backup_applaunch_prevented
+ {
+ txt = qtn_fmgr_backup_applaunch_prevented;
+ }
+
+RESOURCE LBUF r_qtn_fmgr_restore_applaunch_prevented
+ {
+ txt = qtn_fmgr_restore_applaunch_prevented;
+ }
+
+/**
+* The resources for UIDs.
+* This struct lists UIDs allowed to launch
+* during backup or restore
+*
+*/
+RESOURCE ALLOWEDUID alloweduids
+ {
+ uid=
+ {
+ 0x101F4CD2, // Application Shell Menu
+ 0x100058B3, // Phone application
+ 0x101F84EB, // File Manager
+ 0x101F8681 // Video Telephone Application
+ };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupchecker/inc/filemanagerbkupchecker.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2006 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: Declaration of CFileManagerBkupChecker class
+*
+*/
+
+
+#ifndef C_FILEMANAGERBKUPCHECKER_H
+#define C_FILEMANAGERBKUPCHECKER_H
+
+#include <aplaunchchecker.h>
+#include <connect/sbdefs.h>
+
+class CResourceFile;
+
+using namespace conn;
+
+/**
+* Plugin for application launch check
+*
+* This class implements rule based application check Plug-in API.
+* Application launch is restricted during backup and restore.
+*
+* @since S60 3.2
+*/
+NONSHARABLE_CLASS( CFileManagerBkupChecker ) : public CAppLaunchChecker
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerBkupChecker* NewL();
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerBkupChecker();
+
+ /**
+ * From CApplaunchChecker
+ * Two-phased constructor.
+ *
+ * @since S60 3.2
+ * @param aAppToLaunch Uid of application to launch
+ * @param TApaTaskList List of applications running in device
+ * @return Launch code for apparc
+ */
+ TAppLaunchCode virtual OkayToLaunchL(const TUid aAppToLaunch, TApaTaskList& aTaskList);
+
+private:
+
+ CFileManagerBkupChecker();
+
+ void ConstructL();
+
+ TBool ValidateBUROngoing();
+
+ static TInt ThreadFunction( TAny* ptr );
+
+ void ThreadFunctionL();
+
+private: // data
+
+ /**
+ * Array of allowed uids to run.
+ */
+ RArray<TUint32> iUids;
+
+ /**
+ * Notes shown during backup or restore.
+ * Own
+ */
+ HBufC* iBackupNote;
+ HBufC* iRestoreNote;
+
+ /**
+ * Ongoing backup or restore.
+ */
+ TBool iIsBackup;
+ };
+
+#endif // C_FILEMANAGERBKUPCHECKER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupchecker/inc/filemanagerbkupchecker.rh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006 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: Resource headers for project filemanagerbkupchecker
+*
+*/
+
+
+// ---------------------------------------------------------
+// ALLOWEDUIDS
+//
+// This struct lists UIDs allowed to lauch
+// during backup or restore
+// ---------------------------------------------------------
+//
+STRUCT ALLOWEDUID
+ {
+ LONG uid[];
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupchecker/src/filemanagerbkupchecker.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,460 @@
+/*
+* Copyright (c) 2006-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: Rule based application launch during backup and restore.
+*
+*/
+
+
+// INCLUDES
+#include <bautils.h>
+#include <barsc2.h>
+#include <barsread2.h>
+#include <e32property.h>
+#include <data_caging_path_literals.hrh>
+#include <filemanagerbkupchecker.rsg>
+#include <AknGlobalNote.h>
+#include <AknSgcc.h>
+#include <ecom/implementationproxy.h>
+
+#include "FileManagerDebug.h"
+#include "filemanagerprivatepskeys.h"
+#include "FileManagerUID.h"
+#include "filemanagerbkupchecker.h"
+
+// CONSTANTS
+_LIT(KMsengRscFilePath,"filemanagerbkupchecker.rsc");
+_LIT(KThreadName,"BkupCheckerThread");
+
+#ifdef __SKIP_PS_IN_TEST_
+// Controlling of KUidBackupRestoreKey only possible with SID 0x10202D56
+// That is why we have to variate running of test code using testVariable
+extern TInt testVariable;
+#endif
+
+// Define the interface UIDs.
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( 0x1020508A, CFileManagerBkupChecker::NewL )
+ };
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ProcessExists
+// ---------------------------------------------------------------------------
+//
+static TBool 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;
+ }
+
+// ---------------------------------------------------------------------------
+// GetFileManagerBurStatus
+// ---------------------------------------------------------------------------
+//
+static TInt GetFileManagerBurStatus()
+ {
+ TInt status( EFileManagerBkupStatusUnset );
+ TInt err( RProperty::Get(
+ KPSUidFileManagerStatus, KFileManagerBkupStatus, status ) );
+ if ( err != KErrNone )
+ {
+ status = EFileManagerBkupStatusUnset;
+ }
+ else if( status == EFileManagerBkupStatusBackup ||
+ status == EFileManagerBkupStatusRestore )
+ {
+ const TSecureId KFileManagerUid(KFileManagerUID3);
+ // Check file manager process just if bur state detected
+ if( !ProcessExists( KFileManagerUid ) )
+ {
+ status = EFileManagerBkupStatusUnset;
+ }
+ }
+
+ INFO_LOG2( "GetFileManagerBurStatus, status %d, err %d", status, err )
+
+ return status;
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy.
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+ return ImplementationTable;
+ }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerBkupChecker::CFileManagerBkupChecker
+//
+// ---------------------------------------------------------------------------
+//
+CFileManagerBkupChecker::CFileManagerBkupChecker()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerBkupChecker::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CFileManagerBkupChecker* CFileManagerBkupChecker::NewL()
+ {
+ CFileManagerBkupChecker* self = new (ELeave) CFileManagerBkupChecker();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerBkupChecker::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CFileManagerBkupChecker::ConstructL()
+ {
+ FUNC_LOG
+ RFs fsSession;
+
+ // Connect to File Server
+ User::LeaveIfError(fsSession.Connect());
+ CleanupClosePushL(fsSession);
+
+ // Get resource drive from dll location
+ TFileName dllFileName;
+ Dll::FileName( dllFileName );
+ TParsePtrC dllParse( dllFileName );
+ TFileName fileName;
+#ifdef __SKIP_PS_IN_TEST_
+ _LIT(KDriveZ,"Z:");
+ fileName.Copy( KDriveZ );
+#else
+ // Drive is parsed normally from dll-location in order to support
+ // installing/patching of component.
+ fileName.Copy( dllParse.Drive() );
+#endif
+ fileName.Append( KDC_RESOURCE_FILES_DIR );
+ fileName.Append( KMsengRscFilePath );
+ BaflUtils::NearestLanguageFile( fsSession, fileName );
+ //
+ TEntry entry;
+ User::LeaveIfError( fsSession.Entry( fileName, entry ) );
+ // if file does not exist, leaves with KErrNotFound
+
+ CResourceFile *resFile;
+ resFile = CResourceFile::NewLC( fsSession, fileName, 0, entry.iSize );
+
+ resFile->ConfirmSignatureL();
+
+ /////////////////////////////////////////////////////////
+ //Initialize white-list of applications from resource file
+
+ RResourceReader theReader;
+ theReader.OpenLC( resFile, ALLOWEDUIDS );
+
+ //the first WORD contains the number of elements in the resource
+ TInt numberOfUIDs = theReader.ReadInt16L();
+
+ for( TInt i = 0; i < numberOfUIDs; i++)
+ {
+ TUint32 uid = theReader.ReadInt32L();
+ iUids.Append(uid);
+ INFO_LOG1( "CFileManagerBkupChecker::ConstructL, Application 0x%x added in white-list", iUids[i] )
+ }
+ CleanupStack::PopAndDestroy( &theReader );
+
+ //Initialize information note texts from resource file
+ theReader.OpenLC( resFile, R_QTN_FMGR_BACKUP_APPLAUNCH_PREVENTED );
+ iBackupNote = theReader.ReadHBufCL();
+ CleanupStack::PopAndDestroy( &theReader );
+
+ theReader.OpenLC( resFile, R_QTN_FMGR_RESTORE_APPLAUNCH_PREVENTED );
+ iRestoreNote = theReader.ReadHBufCL();
+ CleanupStack::PopAndDestroy( &theReader );
+
+ CleanupStack::PopAndDestroy( resFile );
+ CleanupStack::PopAndDestroy( &fsSession );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CFileManagerBkupChecker::~CFileManagerBkupChecker
+//
+// ---------------------------------------------------------------------------
+//
+CFileManagerBkupChecker::~CFileManagerBkupChecker()
+ {
+ delete iBackupNote;
+ delete iRestoreNote;
+ iUids.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerBkupChecker::OkayToLaunchL
+//
+// ---------------------------------------------------------------------------
+//
+CAppLaunchChecker::TAppLaunchCode CFileManagerBkupChecker::OkayToLaunchL(const TUid aAppToLaunch,
+ TApaTaskList& /* aTaskList */)
+ {
+ FUNC_LOG
+ CAppLaunchChecker::TAppLaunchCode launch = CAppLaunchChecker::EAppLaunchIndifferent;
+
+ TInt burState( 0 );
+ TInt burErr = RProperty::Get( KUidSystemCategory, KUidBackupRestoreKey, burState );
+
+ if(burErr == KErrNone)
+ {
+ INFO_LOG2
+ (
+ "CFileManagerBkupChecker::OkayToLaunchL, Application 0x%x, KUidBackupRestoreKey status %d",
+ aAppToLaunch.iUid, burState
+ )
+
+ TBURPartType burType = static_cast< TBURPartType >( burState & KBURPartTypeMask );
+ TInt fmBurStatus( GetFileManagerBurStatus() );
+
+ // We can't rely on just p&s value. Additional check is carried out in ValidateBUROngoing.
+#ifdef __SKIP_PS_IN_TEST_
+ // Run additional validation check in test mode just to cover all use cases
+ ValidateBUROngoing();
+#else
+ if( fmBurStatus == EFileManagerBkupStatusBackup ||
+ fmBurStatus == EFileManagerBkupStatusRestore ||
+ ( ( burType == EBURBackupPartial || burType == EBURBackupFull ||
+ burType == EBURRestorePartial || burType == EBURRestoreFull ) &&
+ ValidateBUROngoing() ) )
+#endif
+ {
+ launch = CAppLaunchChecker::EAppLaunchDecline;
+
+ TInt count( iUids.Count() );
+
+ for( TInt i = 0; i < count; i++ )
+ {
+ if(iUids[i] == aAppToLaunch.iUid)
+ {
+ INFO_LOG1
+ (
+ "CFileManagerBkupChecker::OkayToLaunchL, Application 0x%x in white-list",
+ iUids[i]
+ )
+ launch = CAppLaunchChecker::EAppLaunchIndifferent;
+ break;
+ }
+ }
+
+ if( launch == CAppLaunchChecker::EAppLaunchDecline )
+ {
+ INFO_LOG1
+ (
+ "CFileManagerBkupChecker::OkayToLaunchL, Application 0x%x launch prevented",
+ aAppToLaunch.iUid
+ )
+
+ iIsBackup = ( fmBurStatus == EFileManagerBkupStatusBackup ||
+ burType == EBURBackupPartial ||
+ burType == EBURBackupFull );
+
+ RThread thread;
+
+ TInt err = thread.Create(
+ KThreadName, ThreadFunction, KDefaultStackSize, NULL, this );
+
+ INFO_LOG1("CFileManagerBkupChecker::OkayToLaunchL, thread err %d", err)
+
+ if ( err == KErrNone )
+ {
+ TRequestStatus status;
+
+ thread.Rendezvous( status );
+ thread.Resume();
+
+ // Wait until thread has copy of note text.
+ User::WaitForRequest( status );
+
+ INFO_LOG1("CFileManagerBkupChecker::OkayToLaunchL, thread exit %d", status.Int())
+ }
+
+ thread.Close();
+ }
+ }
+ }
+
+ return launch;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerBkupChecker::ValidateBUROngoing
+//
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerBkupChecker::ValidateBUROngoing()
+ {
+ TBool err(EFalse);
+ _LIT( KFindPattern, "*" );
+ const TSecureId KSBEUid(0x10202D56);
+ const TSecureId KFileManagerUid(KFileManagerUID3);
+ const TSecureId KPCConnectivityUid(0x101F99F6);
+ TBool serverRunning(EFalse);
+ TBool client1Running(EFalse);
+ TBool client2Running(EFalse);
+
+ // If SBE panics, File Manager and PC-connectivity server are supposed to
+ // re-establish connection to server and set BUR-mode back to normal.
+ // If SBE client panics, server is supposed to set BUR-mode back to normal.
+ // However, it might be reasonable to validate also that BUR client is
+ // up and running. E.g. if both server and client panic in sequence, BUR
+ // state might stay as backup or restore and we never let application run.
+ // We have to search by UID, because process can have localized name
+ TFindProcess finder( KFindPattern );
+ TFullName processName;
+
+ while( finder.Next( processName ) == KErrNone )
+ {
+ RProcess process;
+ const TInt r = process.Open( processName );
+ if ( r == KErrNone )
+ {
+ const TSecureId processId = process.SecureId();
+ process.Close();
+
+ if( processId == KSBEUid )
+ {
+ serverRunning = ETrue;
+ }
+ else if( processId == KFileManagerUid )
+ {
+ client1Running = ETrue;
+ }
+ else if( processId == KPCConnectivityUid )
+ {
+ client2Running = ETrue;
+ }
+ }
+ }
+
+ INFO_LOG2("CFileManagerBkupChecker::ValidateBUROngoing, %x status %d",
+ KSBEUid.iId, serverRunning);
+ INFO_LOG2("CFileManagerBkupChecker::ValidateBUROngoing, %x status %d",
+ KFileManagerUid.iId, client1Running);
+ INFO_LOG2("CFileManagerBkupChecker::ValidateBUROngoing, %x status %d",
+ KPCConnectivityUid.iId, client2Running);
+
+ if( serverRunning && (client1Running || client2Running) )
+ {
+ err = ETrue;
+ }
+
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBkupChecker::ThreadFunction()
+//
+// ----------------------------------------------------------------------------
+TInt CFileManagerBkupChecker::ThreadFunction( TAny* ptr )
+ {
+ FUNC_LOG
+
+ CFileManagerBkupChecker* self =
+ static_cast< CFileManagerBkupChecker* >( ptr );
+
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+ if ( !cleanupStack )
+ {
+ return KErrNoMemory;
+ }
+
+ TRAPD( err, self->ThreadFunctionL() );
+
+ INFO_LOG1("CFileManagerBkupChecker::ThreadFunction, ThreadFunctionL err %d", err)
+
+ delete cleanupStack;
+
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CFileManagerBkupChecker::ThreadFunctionL()
+//
+// ----------------------------------------------------------------------------
+void CFileManagerBkupChecker::ThreadFunctionL( )
+ {
+ FUNC_LOG
+
+ HBufC* note = NULL;
+
+#ifdef __SKIP_PS_IN_TEST_
+ if(!testVariable)
+ {
+ note = iBackupNote->AllocLC();
+ }
+ else
+ {
+ note = iRestoreNote->AllocLC();
+ }
+#else
+ if( iIsBackup )
+ {
+ note = iBackupNote->AllocLC();
+ }
+ else
+ {
+ note = iRestoreNote->AllocLC();
+ }
+#endif
+
+ // Once we have locally allocated note string, we can signal main thread.
+ RThread::Rendezvous( KErrNone );
+
+ RAknUiServer aknSrv;
+ TInt err( aknSrv.Connect() );
+ INFO_LOG1("CFileManagerBkupChecker::ThreadFunctionL, connect err %d", err)
+ User::LeaveIfError( err );
+ CleanupClosePushL( aknSrv );
+
+ aknSrv.ShowGlobalNoteL( *note, EAknGlobalInformationNote );
+
+ CleanupStack::PopAndDestroy( &aknSrv );
+ CleanupStack::PopAndDestroy( note );
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/BKupEngine.rh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2002-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:
+* This file contains declarations for resources.
+* The file can be included only in resource file.
+*
+*
+*/
+
+
+// INCLUDES
+#include <bldvariant.hrh>
+
+// STRUCTURE DEFINITIONS
+
+// ---------------------------------------------------------
+// BACKUPITEM
+// Defines a file or folder to be backed up
+// Note! Remember to use a trailing backslash!
+// ---------------------------------------------------------
+//
+STRUCT BACKUPITEM
+ {
+ LTEXT item_path;
+ WORD item_flags;
+ }
+
+
+
+// ---------------------------------------------------------
+// MMC_SECURE_BACKUP_DRIVE_LIST
+//
+// Defines an array of drive numbers, starting at 0
+// (EDriveA), to a maximum of 25 (EDriveZ)
+// which are included in a backup/restore to/from MMC
+// operation
+//
+// See TMMCDriveNumber and TBkupDriveCategory (BkupEngine.hrh)
+// See TMMCScBkupOwnerDataType in TMMCScBkupOwnerDataType.hrh
+// ---------------------------------------------------------
+//
+STRUCT MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ {
+ BYTE drive; // See TMMCDriveNumber and TBkupDriveCategory (BkupEngine.hrh)
+ BYTE type; // See TMMCScBkupOwnerDataType (TMMCScBkupOwnerDataType.h)
+ }
+
+
+
+// ---------------------------------------------------------
+// MMC_SECURE_BACKUP_DRIVES_AND_OPERATIONS
+//
+// Defines an array of drive numbers and operations.
+// The drive starts at 0 (EDriveA), to a maximum of 25 (EDriveZ)
+// which are included in a backup/restore to/from MMC
+// operation. Each drive should include a number of associated
+// operations. For example, for drive C:\ we wish to carry
+// out all SBE backup/restore ops. For MMC we wish to only
+// back up & restore package data (Required to ensure that
+// hashes for MMC-based binaries are recreated on C:\ after
+// the internal drive is formatted & a restore is performed).
+//
+// ---------------------------------------------------------
+//
+STRUCT MMC_SECURE_BACKUP_DRIVES_AND_OPERATIONS
+ {
+ LEN BYTE STRUCT drivesAndOperations[]; // SEE MMC_SECURE_BACKUP_DRIVE_AND_OPERATION_TYPE
+ }
+
+// ---------------------------------------------------------
+// BACKUPCATEGORY
+// Defines a category, name for archive and uids,
+// from which backup category consists of
+// ---------------------------------------------------------
+//
+STRUCT BACKUPCATEGORY
+ {
+ LONG category;
+ LTEXT archive_name;
+ LONG special_flags;
+ LONG exclude_special_flags;
+ LONG uids[];
+ LONG exclude_uids[];
+ }
+
+
+// ---------------------------------------------------------
+// BACKUPCATEGORY
+// Defines a category, name for archive and uids,
+// from which backup category consists of
+// ---------------------------------------------------------
+//
+STRUCT BACKUPCATEGORYARRAY
+ {
+ STRUCT backupcategory[];
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/BkupEngine.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2004-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:
+* FileManager / FileManagerBkupEngine constants.
+*
+*/
+
+
+
+#ifndef __BAENGINE_HRH__
+#define __BAENGINE_HRH__
+
+// Partial backup categories bitmask values
+enum MAEngineBackupCategories
+ {
+ EBUCatSettings = 0x1,
+ EBUCatMessages = 0x2,
+ EBUCatContacts = 0x4,
+ EBUCatCalendar = 0x8,
+ EBUCatBookmarks = 0x10,
+ EBUCatUserFiles = 0x20,
+ EBUCatAllInOne = 0x8000000,
+ EBUCatAllSeparately = 0x7FFFFFF
+ // Set as 0xFFFFFFF (EBUCatAllInOne+EBUCatAllSeparately) if archive containing
+ // data from all data owners needs to be created.
+ };
+
+// Bitmask values for special ruling of which category data owner belongs to
+#define EBUCatSpecNone 0x0
+#define EBUCatSpecSystem 0x1
+#define EBUCatSpecJava 0x2
+#define EBUCatSpecPublic 0x4
+#define EBUCatSpecAll 0x8
+
+#ifndef RD_MULTIPLE_DRIVE
+
+// Drive list enumeration - see TDriveNumber
+// (these must match F32's TDriveNumber exactly)
+enum TMMCDriveNumber
+ {
+ EMMCDriveNumberA = 0,
+ EMMCDriveNumberB,
+ EMMCDriveNumberC,
+ EMMCDriveNumberD,
+ EMMCDriveNumberE,
+ EMMCDriveNumberF,
+ EMMCDriveNumberG,
+ EMMCDriveNumberH,
+ EMMCDriveNumberI,
+ EMMCDriveNumberJ,
+ EMMCDriveNumberK,
+ EMMCDriveNumberL,
+ EMMCDriveNumberM,
+ EMMCDriveNumberN,
+ EMMCDriveNumberO,
+ EMMCDriveNumberP,
+ EMMCDriveNumberQ,
+ EMMCDriveNumberR,
+ EMMCDriveNumberS,
+ EMMCDriveNumberT,
+ EMMCDriveNumberU,
+ EMMCDriveNumberV,
+ EMMCDriveNumberW,
+ EMMCDriveNumberX,
+ EMMCDriveNumberY,
+ EMMCDriveNumberZ
+ };
+
+#else // RD_MULTIPLE_DRIVE
+
+// Defines drive caterories for multiple drives to setup backup sources and restore targets
+#define EBkupDeviceMemories 0x1
+#define EBkupInternalMassStorages 0x2
+#define EBkupExternalMassStorages 0x4
+
+#endif // RD_MULTIPLE_DRIVE
+
+#endif // __BAENGINE_HRH__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupArchive.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2005-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: Declaration of CMMCScBkupArchive
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPARCHIVE_H__
+#define __CMMCSCBKUPARCHIVE_H__
+
+// System includes
+#include <f32file.h>
+#include <babitflags.h>
+
+// Classes referenced
+class MMMCScBkupDriver;
+class CMMCScBkupArchiveHeader;
+class CMMCScBkupArchiveFooter;
+class MMMCScBkupProgressObserver;
+class CMMCScBkupArchiveDataManager;
+class MMMCScBkupArchiveDataInterface;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupArchive) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchive* NewL( RFs& aFsSession, MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupDriver& aDriver, TBitFlags aCategory );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupArchive();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupArchive( RFs& aFsSession, MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupDriver& aDriver, TBitFlags aCategory );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ void OpenForReadingL(const TDesC& aName);
+
+ /**
+ *
+ */
+ void OpenForWritingL(const TDesC& aName);
+
+ /**
+ *
+ */
+ void RestoreOldArchive();
+
+ /**
+ *
+ */
+ void DeleteOldArchive();
+
+ /**
+ *
+ */
+ void Close( TInt aError );
+
+ /**
+ *
+ */
+ CMMCScBkupArchiveHeader& Header() const;
+
+ /**
+ *
+ */
+ CMMCScBkupArchiveFooter& Footer() const;
+
+ /**
+ *
+ */
+ MMMCScBkupArchiveDataInterface& ADI() const;
+
+ /**
+ *
+ */
+ static TBool ValidArchiveForRestoreL( RFs& aFsSession, const TDesC& aFileName );
+
+ /**
+ *
+ */
+ TBitFlags Category() const { return iCategory; }
+
+ private: // Internal enumerations
+
+ /**
+ *
+ */
+ enum TMode
+ {
+ EModeUninitialised = 0,
+ //
+ EModeReading,
+ EModeWriting
+ };
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ TInt PrepareToOverwrite( const TDesC& aFile );
+
+ /**
+ *
+ */
+ void SetMode(TMode aMode);
+
+ /**
+ *
+ */
+ void PrepareObjectsL();
+
+ /**
+ *
+ */
+ inline TMode Mode() const { return iMode; }
+
+ private: // Member data
+
+ //
+ RFs& iFsSession;
+ //
+ RFile64 iArchiveFile;
+ //
+ MMMCScBkupProgressObserver& iProgressManager;
+ //
+ MMMCScBkupDriver& iDriver;
+ //
+ TMode iMode;
+ //
+ CMMCScBkupArchiveDataManager* iDataManager;
+ //
+ CMMCScBkupArchiveHeader* iHeader;
+ //
+ CMMCScBkupArchiveFooter* iFooter;
+ //
+ HBufC* iArchiveFileName;
+ //
+ HBufC* iOldArchiveFileName;
+ //
+ TBitFlags iCategory;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPARCHIVE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupArchiveDataManager.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupArchiveDataManager
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPARCHIVEDATAMANAGER_H__
+#define __CMMCSCBKUPARCHIVEDATAMANAGER_H__
+
+// System includes
+#include <f32file.h>
+#include <s32strm.h>
+
+// User includes
+#include "CMMCScBkupBufferManagers.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "TMMCScBkupArchiveVector.h"
+#include "RMMCScBkupArchiveStreams.h"
+#include "MMCScBkupOperations.h"
+#include "MMCScBkupConfig.h"
+
+// Classes referenced
+class CEZCompressor;
+class CEZDecompressor;
+class RMMCScBkupArchiveBuf;
+class MMMCScBkupProgressObserver;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupArchiveDataManager) : public CActive, public MMMCScBkupArchiveDataInterface
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchiveDataManager* NewL( RFs& aFsSession, RFile64& aFile, MMMCScBkupProgressObserver& aProgressManager );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupArchiveDataManager();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupArchiveDataManager( RFs& aFsSession, RFile64& aFile, MMMCScBkupProgressObserver& aProgressManager );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ * Leaves on error, returns offset
+ */
+ TInt CurrentOffsetL() const;
+
+ /**
+ * Returns error or offset
+ */
+ TInt CurrentOffset() const;
+
+ private: // For RMMCScBkupArchiveBuf only
+
+ /**
+ *
+ */
+ void SetCurrentVector(const TMMCScBkupArchiveVector& aInfo);
+
+
+ private: // From MMMCScBkupArchiveDataInterface
+ RFs& ADIFsSession() const;
+ RFile64& ADIRawArchiveFile() const;
+ //
+ const TMMCScBkupArchiveVector& ADICurrentArchiveVectorInfo() const;
+ const TMMCScBkupArchiveVector& ADIOverallArchiveVectorInfo() const;
+ //
+ RWriteStream& ADIWriteStreamUncompressedLC( TInt aPos );
+ RReadStream& ADIReadStreamUncompressedLC( TInt aPos );
+ //
+ const TMMCScBkupArchiveVector& ADIWriteL( const TDesC8& aData );
+ const TMMCScBkupArchiveVector& ADIReadL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo );
+ //
+ void ADIWriteFileL( const TDesC& aSourceFileName, TRequestStatus& aObserver );
+ void ADIReadFileL( const TDesC& aDestinationFileName, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus );
+ //
+ void ADIWriteCompressedL( const TDesC8& aData, TRequestStatus& aObserver );
+ void ADIReadDecompressedL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus ) ;
+ //
+ void ADIAsynchronousCancel();
+ void ADIResetResources(TMMCScBkupOperationType aType);
+#ifdef RD_FILE_MANAGER_BACKUP
+ void ADIActivateCrcCalculation(TBool aType) { iCrcCalcActivated = aType; }
+ TUint32 ADIArchiveCrc() { return iCrc; }
+#endif
+
+
+ private: // Internal enumerations
+
+ /**
+ *
+ */
+ enum TOperation
+ {
+ EOperationIdle = 0,
+ EOperationCompressing,
+ EOperationDecompressing
+ };
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void EnsureCompressorExistsL(MEZBufferManager& aBufferManager);
+
+ /**
+ *
+ */
+ void EnsureDecompressorExistsL(MEZBufferManager& aBufferManager);
+
+ /**
+ *
+ */
+ void SetObserver(TRequestStatus& aStatus);
+
+ /**
+ *
+ */
+ void CompleteSelf(TInt aCompletionCode = KErrNone);
+
+ /**
+ *
+ */
+ void CompleteObserver(TInt aCompletionCode = KErrNone);
+
+ /**
+ *
+ */
+ void SetOperation(TOperation aOperation);
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ *
+ */
+ void CalculateCrc( const TAny* aPtr,TInt aLength );
+#endif
+
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+
+ private: // Member data
+
+ // Owned externally:
+ //
+ RFs& iFsSession;
+ //
+ RFile64& iFile;
+ //
+ MMMCScBkupProgressObserver& iProgressManager;
+ //
+ TRequestStatus* iObserverStatus;
+
+ // Owned by this object
+ //
+ TOperation iOperation;
+ //
+ CMMCScBkupBufferManagerBase* iBufferManager;
+ //
+ CEZCompressor* iCompressor;
+ //
+ CEZDecompressor* iDecompressor;
+ //
+ TMMCScBkupArchiveVector iCurrentVectorInfo;
+ //
+ TMMCScBkupArchiveVector iOverallArchiveVectorInfo;
+ //
+ RMMCScBkupArchiveWriteStream iWriteStream;
+ //
+ RMMCScBkupArchiveReadStream iReadStream;
+#ifdef RD_FILE_MANAGER_BACKUP
+ //
+ TBool iCrcCalcActivated;
+ //
+ TUint32 iCrc;
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ TUint32 iTotalTickCount;
+#endif
+#endif // RD_FILE_MANAGER_BACKUP
+
+ friend class RMMCScBkupArchiveBuf;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPARCHIVEDATAMANAGER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupArchiveFooter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupArchiveFooter
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPARCHIVEFOOTER_H__
+#define __CMMCSCBKUPARCHIVEFOOTER_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "CMMCScBkupIndexBase.h"
+#include "RMMCScBkupPointerArray.h"
+#include "TMMCScBkupDriveAndSize.h"
+
+// Classes referenced
+class MMMCScBkupDriver;
+class MMMCScBkupArchiveDataInterface;
+class CMMCScBkupIndexRegistrationData;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupArchiveFooter) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchiveFooter* NewL( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupArchiveFooter();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupArchiveFooter( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ CMMCScBkupIndexBase& IndexByType( TMMCScBkupOwnerDataType aType );
+
+ /**
+ *
+ */
+ CMMCScBkupIndexBase* IndexByTypeOrNull( TMMCScBkupOwnerDataType aType );
+
+ public: // Store/Restore
+
+ /**
+ *
+ */
+ void StoreL();
+
+ /**
+ *
+ */
+ void RestoreL( TInt aCalculatedFooterOffsetWithinArchive );
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Member data
+
+ //
+ MMMCScBkupArchiveDataInterface& iDataInterface;
+ //
+ MMMCScBkupDriver& iDriver;
+ //
+ RMMCScBkupPointerArray< CMMCScBkupIndexBase > iIndicies;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPARCHIVEFOOTER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupArchiveHeader.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupArchiveHeader
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPARCHIVEHEADER_H__
+#define __CMMCSCBKUPARCHIVEHEADER_H__
+
+// System includes
+#include <f32file.h>
+#include <babitflags.h>
+
+// User includes
+#include "MMCScBkupArchiveFlags.h"
+
+// Classes referenced
+class MMMCScBkupDriver;
+class MMMCScBkupArchiveDataInterface;
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupArchiveHeader) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchiveHeader* NewL( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupArchiveHeader();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupArchiveHeader( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ void StoreL(TBitFlags aCategory);
+
+ /**
+ *
+ */
+ void RestoreL();
+
+ public: // For Archive Utils
+
+ /**
+ *
+ */
+ inline void SetCheckedUid( const TCheckedUid& aCheckedUid ) { iCheckedUid = aCheckedUid; }
+
+ /**
+ *
+ */
+ inline const TCheckedUid& CheckedUid() const { return iCheckedUid; }
+
+ /**
+ *
+ */
+ inline void SetVersion( const TVersion& aVersion ) { iVersion = aVersion; }
+
+ /**
+ *
+ */
+ inline const TVersion& Version() const { return iVersion; }
+
+ /**
+ *
+ */
+ inline void SetFooterLength( TInt aLength ) { iFooterLength = aLength; }
+
+ /**
+ *
+ */
+ inline TInt FooterLength() const { return iFooterLength; }
+
+ /**
+ *
+ */
+ void SetPhoneModelIdentifierL( const TDesC8& aModel );
+
+ /**
+ *
+ */
+ inline const TDesC8& PhoneModelIdentifier() const { return *iPhoneModelIdentifier; }
+
+ /**
+ *
+ */
+ inline void SetArchiveFlags( TUint32 aFlagsValue ) { iArchiveFlags.SetValue( aFlagsValue ); }
+
+ /**
+ *
+ */
+ inline const TBitFlags32& ArchiveFlags() const { return iArchiveFlags; }
+
+ private: // Member data
+
+ //
+ MMMCScBkupArchiveDataInterface& iDataInterface;
+ //
+ MMMCScBkupDriver& iDriver;
+ //
+ TCheckedUid iCheckedUid;
+ //
+ TVersion iVersion;
+ //
+ TInt iFooterLength;
+ //
+ HBufC8* iPhoneModelIdentifier;
+ //
+ TBitFlags32 iArchiveFlags;
+
+ };
+
+
+
+
+#endif // __CMMCSCBKUPARCHIVEHEADER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupArchiveInfo.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupArchiveInfo
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPARCHIVEINFO_H__
+#define __CMMCSCBKUPARCHIVEINFO_H__
+
+// System includes
+#include <f32file.h>
+#include <babitflags.h>
+#include <barsread.h>
+
+#include "CMMCScBkupFileInfo.h"
+
+/**
+* Class for encapsulating category specific information
+*
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CMMCScBkupArchiveInfo) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchiveInfo* NewL( TResourceReader& aReader );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchiveInfo* NewL( const TEntry& aEntry );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupArchiveInfo* NewLC( const TEntry& aEntry );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupArchiveInfo();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupArchiveInfo();
+
+ /**
+ * C++ default constructor
+ */
+ //CMMCScBkupArchiveInfo( const TEntry& aEntry );
+
+ /**
+ *
+ */
+ void ConstructL( const TEntry& aEntry );
+
+ public: // API - Setters
+
+ /**
+ *
+ */
+ void SetTargetDrive( TDriveUnit aDrive ) { iTargetDrive = aDrive; }
+
+ /**
+ *
+ */
+ void SetCategory(TBitFlags aCategories) { iCategory = aCategories; }
+
+ /**
+ *
+ */
+ void SetSpecialFlags(TBitFlags aFlags) { iSpecialFlags = aFlags; }
+
+ /**
+ *
+ */
+ void SetExcludedSpecialFlags(TBitFlags aFlags) { iExcludedSpecialFlags = aFlags; }
+
+ /**
+ *
+ */
+ void SetSIDs( RArray<TSecureId>& aSIDs );
+
+ /**
+ *
+ */
+ void SetExcludedSIDs( RArray<TSecureId>& aExcludedSIDs );
+
+ public: // API - Getters
+
+ /**
+ *
+ */
+ IMPORT_C TBitFlags Category() const;
+
+ /**
+ *
+ */
+ IMPORT_C const TDesC& FileName() const;
+
+ /**
+ *
+ */
+ IMPORT_C const TTime& DateTime() const;
+
+ /**
+ *
+ */
+ IMPORT_C TDriveNumber Drive() const;
+
+ /**
+ *
+ */
+ TBitFlags SpecialFlags() const { return iSpecialFlags; }
+
+ /**
+ *
+ */
+ TBitFlags ExcludedSpecialFlags() const { return iExcludedSpecialFlags; }
+
+ /**
+ *
+ */
+ const RArray<TSecureId>& SIDs( TBitFlags aCategory ) const;
+
+ /**
+ *
+ */
+ const RArray<TSecureId>& ExcludedSIDs( TBitFlags aCategory ) const;
+
+ private: // Member data
+
+ //
+ TDriveUnit iTargetDrive;
+ //
+ TBitFlags iCategory;
+ //
+ TBitFlags iSpecialFlags;
+ //
+ TBitFlags iExcludedSpecialFlags;
+ //
+ CMMCScBkupFileInfo* iFileInfo;
+ //
+ RArray<TSecureId> iSecureIds;
+ //
+ RArray<TSecureId> iExcludedSecureIds;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPARCHIVEINFO_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupBufferManagers.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,428 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupBufferManagerBase
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPBUFFERMANAGERS_H__
+#define __CMMCSCBKUPBUFFERMANAGERS_H__
+
+// User includes
+#include <e32std.h>
+#include <e32cmn.h>
+#include <f32file.h>
+#include <ezbufman.h>
+
+// User includes
+#include "TMMCScBkupArchiveVector.h"
+
+// Classes referenced
+class MMMCScBkupArchiveDataInterface;
+class CMMCScBkupDataStrategy;
+class MMMCScBkupProgressObserver;
+
+// Constants
+const TInt KScBkupDefaultBufferSize = 0x4000;
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupBufferManagerBase) : public CBase, public MEZBufferManager
+ {
+ public: // Enumerations
+
+ /**
+ *
+ */
+ enum TType
+ {
+ ETypeDescriptorToArchive = 0,
+ ETypeFileToArchive,
+ ETypeArchiveToDescriptor,
+ ETypeArchiveToFile
+ };
+
+ public: // Construct / destruct
+
+ /**
+ *
+ */
+ static CMMCScBkupBufferManagerBase* NewByTypeL( TType aType, MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI, TAny* aParam1 = NULL, TAny* aParam2 = NULL );
+
+ /**
+ *
+ */
+ ~CMMCScBkupBufferManagerBase();
+
+ protected: // Internal construct
+
+ /**
+ *
+ */
+ CMMCScBkupBufferManagerBase( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI, TType aType );
+
+ /**
+ *
+ */
+ virtual void ConstructL( TInt aBufferSize = KScBkupDefaultBufferSize );
+
+ public: // Framework API
+
+ /**
+ *
+ */
+ inline TType Type() const { return iType; }
+
+ /**
+ *
+ */
+ inline const TMMCScBkupArchiveVector& Info() const { return iInfo; }
+
+ /**
+ *
+ */
+ inline TMMCScBkupArchiveVector& Info() { return iInfo; }
+
+ /**
+ *
+ */
+ virtual void InitializeL( TAny* aParam1 = NULL, TAny* aParam2 = NULL ) = 0;
+
+ protected: // Internal methods
+
+ /**
+ *
+ */
+ inline TPtr8& WriteBuffer() { return iBufferPointer; }
+
+ /**
+ *
+ */
+ inline const TDesC8& DataView() const { return *iBuffer; }
+
+ /**
+ *
+ */
+ inline MMMCScBkupProgressObserver& ProgressManager() const { return iProgressManager; }
+
+ /**
+ *
+ */
+ inline MMMCScBkupArchiveDataInterface& ADI() const { return iADI; }
+
+ /**
+ *
+ */
+ void WriteToArchiveAndUpdateStatsL( const TDesC8& aData );
+
+ private:
+
+ /**
+ *
+ */
+ TType iType;
+
+ /**
+ *
+ */
+ HBufC8* iBuffer;
+
+ /**
+ *
+ */
+ TPtr8 iBufferPointer;
+
+ /**
+ *
+ */
+ MMMCScBkupProgressObserver& iProgressManager;
+
+ /**
+ *
+ */
+ MMMCScBkupArchiveDataInterface& iADI;
+
+ /**
+ *
+ */
+ TMMCScBkupArchiveVector iInfo;
+ };
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupBufferManagerDescriptorToArchive) : public CMMCScBkupBufferManagerBase
+ {
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupBufferManagerDescriptorToArchive( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ /**
+ *
+ */
+ static CMMCScBkupBufferManagerDescriptorToArchive* NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ public: // From CMMCScBkupBufferManagerBase
+ void InitializeL(TAny* aParam1, TAny* aParam2);
+
+ private: // From MEZBufferManager
+ void InitializeL( CEZZStream& aZStream );
+ void NeedInputL( CEZZStream& aZStream );
+ void NeedOutputL( CEZZStream& aZStream );
+ void FinalizeL( CEZZStream& aZStream );
+
+ private: // Data members
+
+ /**
+ *
+ */
+ TPtrC8 iSource;
+
+ friend class CMMCScBkupBufferManagerBase;
+ };
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupBufferManagerFileToArchive) : public CMMCScBkupBufferManagerBase
+ {
+ public:
+
+ /**
+ *
+ */
+ ~CMMCScBkupBufferManagerFileToArchive();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupBufferManagerFileToArchive( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ /**
+ *
+ */
+ void ConstructL(const TDesC& aFileName);
+
+ /**
+ *
+ */
+ static CMMCScBkupBufferManagerFileToArchive* NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ public: // From CMMCScBkupBufferManagerBase
+ void InitializeL(TAny* aParam1, TAny* aParam2);
+
+ private: // From MEZBufferManager
+ void InitializeL( CEZZStream& aZStream );
+ void NeedInputL( CEZZStream& aZStream );
+ void NeedOutputL( CEZZStream& aZStream );
+ void FinalizeL( CEZZStream& aZStream );
+
+ private: // Data members
+
+ /**
+ *
+ */
+ CMMCScBkupDataStrategy* iReadStrategy;
+
+ /**
+ *
+ */
+ HBufC8* iOutput;
+
+ /**
+ *
+ */
+ TPtr8 iOutputPointer;
+
+ /**
+ * Useful for debugging
+ */
+ TPtrC iFileName;
+
+ friend class CMMCScBkupBufferManagerBase;
+ };
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupBufferManagerArchiveToDescriptor) : public CMMCScBkupBufferManagerBase
+ {
+ public:
+
+ /**
+ *
+ */
+ ~CMMCScBkupBufferManagerArchiveToDescriptor();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupBufferManagerArchiveToDescriptor( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ /**
+ *
+ */
+ static CMMCScBkupBufferManagerArchiveToDescriptor* NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ public: // From CMMCScBkupBufferManagerBase
+ void InitializeL(TAny* aParam1, TAny* aParam2);
+
+ private: // From MEZBufferManager
+ void InitializeL( CEZZStream& aZStream );
+ void NeedInputL( CEZZStream& aZStream );
+ void NeedOutputL( CEZZStream& aZStream );
+ void FinalizeL( CEZZStream& aZStream );
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void TryToReadMoreSourceDataL();
+
+ private: // Data members
+
+ /**
+ *
+ */
+ TPtr8 iOutputPointer;
+
+ friend class CMMCScBkupBufferManagerBase;
+ };
+
+
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupBufferManagerArchiveToFile) : public CMMCScBkupBufferManagerBase
+ {
+ public:
+
+ /**
+ *
+ */
+ ~CMMCScBkupBufferManagerArchiveToFile();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupBufferManagerArchiveToFile( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ /**
+ *
+ */
+ void ConstructL(const TDesC& aFileName);
+
+ /**
+ *
+ */
+ static CMMCScBkupBufferManagerArchiveToFile* NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI );
+
+ public: // From CMMCScBkupBufferManagerBase
+ void InitializeL(TAny* aParam1, TAny* aParam2);
+
+ private: // From MEZBufferManager
+ void InitializeL( CEZZStream& aZStream );
+ void NeedInputL( CEZZStream& aZStream );
+ void NeedOutputL( CEZZStream& aZStream );
+ void FinalizeL( CEZZStream& aZStream );
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void TryToReadMoreSourceDataL();
+
+ private: // Data members
+
+ /**
+ *
+ */
+ CMMCScBkupDataStrategy* iWriteStrategy;
+
+ /**
+ *
+ */
+ HBufC8* iOutput;
+
+ /**
+ *
+ */
+ TPtr8 iOutputPointer;
+
+ /**
+ * Needed, since we restore to temporary file
+ * and then delete and rename temp file if
+ * extraction succeeds.
+ */
+ TPtrC iFileName;
+
+ friend class CMMCScBkupBufferManagerBase;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#endif // __CMMCSCBKUPBUFFERMANAGERS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupDataOwnerCollection.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2005-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: Declaration of CMMCScBkupDataOwnerCollection
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPDATAOWNERCOLLECTION_H__
+#define __CMMCSCBKUPDATAOWNERCOLLECTION_H__
+
+// System includes
+#include <connect/sbtypes.h>
+#include <s32strm.h>
+#include <babitflags.h>
+#include <bldvariant.hrh>
+
+// User includes
+#include "RMMCScBkupPointerArray.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class MMMCScBkupDriver;
+class CMMCScBkupDriveSizer;
+class CMMCScBkupDataOwnerInfo;
+
+#ifndef RD_FILE_MANAGER_BACKUP
+// Type definitions
+typedef RPointerArray<CDataOwnerInfo> RDataOwnerInfoArray;
+#endif
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDataOwnerCollection) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataOwnerCollection* NewL( MMMCScBkupDriver& aDriver, TBitFlags aCategory );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupDataOwnerCollection();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupDataOwnerCollection( MMMCScBkupDriver& aDriver, TBitFlags aCategory );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+#ifdef RD_FILE_MANAGER_BACKUP
+ TBool AssignL( const CMMCScBkupDataOwnerInfo& dataOwnersInfo );
+#else
+ void AssignL( RDataOwnerInfoArray& aArray );
+#endif
+
+ /**
+ *
+ */
+ void AppendL( CMMCScBkupDataOwnerInfo* aNewEntry );
+
+ /**
+ *
+ */
+ TInt Count() const;
+
+ /**
+ *
+ */
+ CMMCScBkupDataOwnerInfo& Owner( TInt aIndex );
+
+ /**
+ *
+ */
+ const CMMCScBkupDataOwnerInfo& Owner( TInt aIndex ) const;
+
+ /**
+ *
+ */
+ CMMCScBkupDataOwnerInfo& OwnerL( TSecureId aSID );
+
+ /**
+ *
+ */
+ const CMMCScBkupDataOwnerInfo& OwnerL( TSecureId aSID ) const;
+
+ /**
+ *
+ */
+ CMMCScBkupDataOwnerInfo& OwnerL( TUid aPackageId );
+
+ /**
+ *
+ */
+ const CMMCScBkupDataOwnerInfo& OwnerL( TUid aPackageId ) const;
+
+ /**
+ *
+ */
+ CMMCScBkupDataOwnerInfo& OwnerL( const TDesC& aHash );
+
+ /**
+ *
+ */
+ const CMMCScBkupDataOwnerInfo& OwnerL( const TDesC& aHash ) const;
+
+ /**
+ *
+ */
+ void Remove( TInt aIndex );
+
+ /**
+ *
+ */
+ void Reset();
+
+ /**
+ * The amount of space required spanning all drives.
+ * This is used as the total progress amount during
+ * restore operations.
+ */
+ TInt64 TotalOperationalSizeL() const;
+
+ /**
+ * Whether one or more data owners require a reboot
+ * after restore has completed.
+ */
+ TBool RebootRequired() const;
+
+ /**
+ *
+ */
+ TInt64 DiskSpaceRequiredForRestore( TDriveNumber aDrive ) const;
+
+ /**
+ *
+ */
+ void CalculateDiskSpaceRequiredForRestoreL();
+
+ /**
+ *
+ */
+ TBitFlags Category() const { return iCategory; }
+
+ public:
+
+ /**
+ * Internalize 'iRestoreSizer' from stream
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ * Externalize 'iRestoreSizer' to stream
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ private:
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ *
+ */
+ TBool BelongsToL(const CMMCScBkupDataOwnerInfo& aInfo, TBitFlags aFlags, TBitFlags aExcludedFlags,
+ const RArray<TSecureId> aSecureIds, const RArray<TSecureId> aExcludedSecureIds) const;
+#endif
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Member data
+
+ //
+ MMMCScBkupDriver& iDriver;
+ // Array of data owners
+ RMMCScBkupPointerArray<CMMCScBkupDataOwnerInfo> iOwners;
+ //
+ CMMCScBkupDriveSizer* iRestoreSizer;
+ //
+ TBitFlags iCategory;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPDATAOWNERCOLLECTION_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupDataOwnerInfo.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2005-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: Declaration of CMMCScBkupDataOwnerInfo
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPDATAOWNERINFO_H__
+#define __CMMCSCBKUPDATAOWNERINFO_H__
+
+// System includes
+#include <e32std.h>
+#include <s32strm.h>
+#include <connect/sbtypes.h>
+
+// User includes
+#include "TMMCScBkupOwnerDataType.h"
+
+// Classes referenced
+class TMMCScBkupDriveAndSize;
+class CMMCScBkupDataTypeSizer;
+class MMMCScBkupArchiveDataInterface;
+
+// Namespaces
+using namespace conn;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDataOwnerInfo) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataOwnerInfo* NewLC( CDataOwnerInfo* aOwner );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataOwnerInfo* NewLC( RReadStream& aStream );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataOwnerInfo* New( TSecureId aSecureId );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupDataOwnerInfo();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupDataOwnerInfo( CDataOwnerInfo* aOwner = NULL );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ CDataOwnerInfo& Owner();
+
+ /**
+ *
+ */
+ const CDataOwnerInfo& Owner() const;
+
+ /**
+ *
+ */
+ TDataOwnerStatus Status() const;
+
+ /**
+ *
+ */
+ void SetStatus( TDataOwnerStatus aStatus );
+
+ /**
+ *
+ */
+ void AddToOperationalSizeL( TMMCScBkupOwnerDataType aType, TDriveNumber aDrive, TInt64 aSize );
+
+ /**
+ *
+ */
+ void SetOperationalSizeL( TMMCScBkupOwnerDataType aType, TDriveNumber aDrive, TInt64 aSize );
+
+ /**
+ *
+ */
+ void ResetOperationalSize( TMMCScBkupOwnerDataType aType );
+
+ /**
+ *
+ */
+ TInt64 OperationalSize( TMMCScBkupOwnerDataType aType ) const;
+
+ /**
+ *
+ */
+ TInt64 OperationalSize( TMMCScBkupOwnerDataType aType, TDriveNumber aDrive ) const;
+
+ /**
+ *
+ */
+ TInt64 OperationalSize( TDriveNumber aDrive ) const;
+
+ /**
+ *
+ */
+ void OperationalSizesL( RArray<TMMCScBkupDriveAndSize>& aSizes ) const;
+
+ /**
+ *
+ */
+ inline TSecureId SecureId() const { return iSecureId; }
+
+ /**
+ *
+ */
+ TInt NumberOfOperationsRequiredL() const;
+
+ /**
+ *
+ */
+ void SetCompletionStatus( TMMCScBkupOwnerDataType aType, TBool aCompleted );
+
+ /**
+ *
+ */
+ TBool CompletionStatus( TMMCScBkupOwnerDataType aType ) const;
+
+ /**
+ *
+ */
+ TInt ActiveDataRetryCount() const;
+
+ /**
+ *
+ */
+ void SetActiveDataRetryCount( TInt aCount );
+
+ /**
+ *
+ */
+ inline TInt Version() const { return iVersion; }
+
+ public: // Store/Restore
+
+ /**
+ *
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ *
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ public: // Comparison support
+
+ /**
+ *
+ */
+ static TBool CompareDataOwnerBySIDL( const CMMCScBkupDataOwnerInfo& aLeft, const CMMCScBkupDataOwnerInfo& aRight );
+
+ /**
+ *
+ */
+ TBool HasJavaDataL() const;
+
+ /**
+ *
+ */
+ TBool HasActiveDataL() const;
+
+ /**
+ *
+ */
+ TBool HasPassiveDataL() const;
+
+ /**
+ *
+ */
+ TBool HasPublicDataL() const;
+
+ /**
+ *
+ */
+ TBool HasSystemDataL() const;
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1,
+ EStreamFormatVersion2,
+ EStreamFormatVersionLatest
+ };
+
+ public: // Public enumerations
+ enum
+ {
+ EStreamFormatVersionFirst = EStreamFormatVersion1
+ };
+
+ private: // Member data
+
+ // Underlying data owner - owned by this object
+ CDataOwnerInfo* iDataOwner;
+ // Associated secure id of the data owner (if it has one)
+ TSecureId iSecureId;
+ // Ready status of the data owner
+ TDataOwnerStatus iStatus;
+ // Size of data that the owner has to backup/restore
+ CMMCScBkupDataTypeSizer* iOperationalSize;
+ // The completion status of each individual element
+ TFixedArray<TBool, EMMCScBkupOwnerDataTypeCount> iCompletionStatus;
+ // For active data, we record how many times the SID has returned "not ready"
+ TInt iActiveDataRetryCount;
+ // Version information
+ TInt iVersion;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPDATAOWNERINFO_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupDataStrategies.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupDataStrategy
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPDATASTRATEGIES_H__
+#define __CMMCSCBKUPDATASTRATEGIES_H__
+
+// User includes
+#include <f32file.h>
+
+// Constants
+const TBool KMMCScBkupUseTempFile = EFalse;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+class CMMCScBkupDataStrategy : public CBase
+ {
+ public:
+
+ /**
+ * Factory method
+ */
+ static CMMCScBkupDataStrategy* ReadStrategyLC( const TDesC& aName, RFs& aFsSession );
+
+ /**
+ * Factory method
+ */
+ static CMMCScBkupDataStrategy* ReadStrategyLC( const TDesC& aName, RFs& aFsSession, TInt aStartOffset, TInt aLengthToRead );
+
+ /**
+ * Factory method
+ */
+ static CMMCScBkupDataStrategy* WriteStrategyLC( const TDesC& aName, RFs& aFsSession, TBool aUseTempFile );
+
+ public: // Framework API
+
+ /**
+ * Read data from the source
+ *
+ * @return TInt The amount of data read, or 0 if the end of file has been reached
+ */
+ virtual TInt Read(TDes8& aSink) = 0;
+
+ /**
+ * Write data to the source
+ *
+ * @return TInt KErrNone if success, KErrNotSupported if the strategy doesn't support writing
+ * or any of the other System-Wide error codes upon failure.
+ */
+ virtual TInt Write(const TDesC8& aSource);
+
+ /**
+ * Perform any final actions
+ *
+ * @return TInt an error code.
+ */
+ virtual TInt Finalize();
+
+ protected:
+
+ /**
+ * C++ Constructor
+ */
+ CMMCScBkupDataStrategy();
+
+ private: // Internal methods
+
+ /**
+ * Sets the offset and length
+ */
+ void SetOffsetAndLength(TInt aStartOffset, TInt aLengthToRead);
+
+ protected: // Internal
+ inline TInt Offset() const { return iOffset; }
+ inline TInt LengthToRead() const { return iLengthToRead; }
+ inline void SetOffset(TInt64 aOffset) { iOffset = aOffset; }
+
+ private: // Data members
+
+ //
+ TInt iOffset;
+ //
+ TInt iLengthToRead;
+ };
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDataFileStrategy) : public CMMCScBkupDataStrategy
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataFileStrategy* NewForReadingL( const TDesC& aName, RFs& aFsSession );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataFileStrategy* NewForWritingL( const TDesC& aName, RFs& aFsSession, TBool aUseTempFile );
+
+ /**
+ * C++ Destructor
+ */
+ ~CMMCScBkupDataFileStrategy();
+
+ private:
+
+ /**
+ * C++ Constructor
+ */
+ CMMCScBkupDataFileStrategy( RFs& aFsSession, TBool aUseTempFile = EFalse );
+
+ /**
+ * Second phase construction
+ */
+ void ConstructL( const TDesC& aName, TUint aMode );
+
+ public: // From CMMCScBkupDataStrategy
+ TInt Read(TDes8& aSink);
+ TInt Write(const TDesC8& aSource);
+ TInt Finalize();
+
+ private: // Internal functions
+
+ /**
+ *
+ */
+ static TInt PrepareToOverwriteFile( RFs& aFsSession, const TDesC& aFileName );
+
+ private: // Data members
+
+ RFs& iFsSession;
+ //
+ RFile64 iFile;
+ //
+ TBool iUseTempFile;
+ //
+ HBufC* iFileName;
+ //
+ TFileName iTempFileName;
+ };
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDataFileSectionReadStrategy) : public CMMCScBkupDataStrategy
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupDataFileSectionReadStrategy* NewL(const TDesC& aName, RFs& aFsSession);
+
+ /**
+ * C++ Destructor
+ */
+ ~CMMCScBkupDataFileSectionReadStrategy();
+
+ private:
+
+ /**
+ * C++ Constructor
+ */
+ CMMCScBkupDataFileSectionReadStrategy(RFs& aFsSession);
+
+ /**
+ *
+ */
+ void ConstructL(const TDesC& aName);
+
+ public: // From CMMCScBkupDataStrategy
+ TInt Read(TDes8& aSink);
+
+ private: // Data members
+
+ //
+ RFs& iFsSession;
+ //
+ HBufC* iFileName;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPDATASTRATEGIES_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupDriveAndOperationTypeManager.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupDriveAndOperationTypeManager
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPDRIVEANDOPERATIONTYPEMANAGER_H__
+#define __CMMCSCBKUPDRIVEANDOPERATIONTYPEMANAGER_H__
+
+// System includes
+#include <connect/sbdefs.h>
+#include <connect/sbtypes.h>
+#include <barsread.h>
+
+// User includes
+#include "TMMCScBkupOwnerDataType.h"
+
+// Namespaces
+using namespace conn;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(TMMCScBkupDriveAndOperationType)
+ {
+ public:
+ inline TMMCScBkupDriveAndOperationType()
+ : iDrive( EDriveC ), iType( EMMCScBkupOwnerDataTypeAny ) { }
+
+ inline TMMCScBkupDriveAndOperationType( TDriveNumber aDrive, TMMCScBkupOwnerDataType aType )
+ : iDrive( aDrive ), iType( aType ) { }
+
+ public: // Common attributes
+
+ /**
+ *
+ */
+ inline TDriveNumber Drive() const { return iDrive; }
+
+ /**
+ *
+ */
+ inline void SetDrive( TDriveNumber aDrive ) { iDrive = aDrive; }
+
+ /**
+ *
+ */
+ inline TMMCScBkupOwnerDataType DataType() const { return iType; }
+
+ /**
+ *
+ */
+ inline void SetDataType( TMMCScBkupOwnerDataType aType ) { iType = aType; }
+
+ private: // Data members
+
+ //
+ TDriveNumber iDrive;
+ //
+ TMMCScBkupOwnerDataType iType;
+ };
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDriveAndOperationTypeManager) : public CBase
+ {
+ public:
+
+ /**
+ *
+ */
+ IMPORT_C static CMMCScBkupDriveAndOperationTypeManager* NewL( TResourceReader& aReader );
+
+ /**
+ *
+ */
+ IMPORT_C ~CMMCScBkupDriveAndOperationTypeManager();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupDriveAndOperationTypeManager();
+
+ /**
+ *
+ */
+ void ConstructL( TResourceReader& aReader );
+
+
+ public: // API
+
+ /**
+ *
+ */
+ TInt Count() const;
+
+ /**
+ *
+ */
+ const TMMCScBkupDriveAndOperationType& At( TInt aIndex ) const;
+
+ /**
+ *
+ */
+ inline const TDriveList& DriveList() const { return iCalculatedDriveList; }
+
+ /**
+ *
+ */
+ TBool IsDataTypeAllowedToAccessDrive( TDriveNumber aDrive, TMMCScBkupOwnerDataType aDataType ) const;
+
+ private: // Internal methods
+
+
+ private: // Data members
+
+ //
+ RArray< TMMCScBkupDriveAndOperationType > iEntries;
+ //
+ TDriveList iCalculatedDriveList;
+
+ };
+
+#endif // __CMMCSCBKUPDRIVEANDOPERATIONTYPEMANAGER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupDriveDataSizeManager.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2005-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: Declaration of CMMCScBkupDriveSizer
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPDRIVEDATASIZEMANAGER_H__
+#define __CMMCSCBKUPDRIVEDATASIZEMANAGER_H__
+
+// System includes
+#include <s32strm.h>
+#include <f32file.h>
+
+// User includes
+#include "TMMCScBkupDriveAndSize.h"
+#include "RMMCScBkupPointerArray.h"
+#include "TMMCScBkupOwnerDataType.h"
+
+
+/**
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDriveSizer) : public CBase
+ {
+ public:
+
+ /**
+ *
+ */
+ static CMMCScBkupDriveSizer* NewLC( TMMCScBkupOwnerDataType aType );
+
+ /**
+ *
+ */
+ static CMMCScBkupDriveSizer* NewLC( RReadStream& aStream );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupDriveSizer();
+
+ private:
+
+ /**
+ * C++ constructor
+ */
+ CMMCScBkupDriveSizer( TMMCScBkupOwnerDataType aType );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ inline TMMCScBkupOwnerDataType DataType() const { return iDataType; }
+
+ /**
+ *
+ */
+ void AddToSizeL( TInt64 aAmount, TDriveNumber aDrive );
+
+ /**
+ *
+ */
+ void Reset();
+
+ /**
+ *
+ */
+ void Reset( TDriveNumber aDrive );
+
+ /**
+ *
+ */
+ TInt64 Size() const;
+
+ /**
+ *
+ */
+ TInt64 Size( TDriveNumber aDrive ) const;
+
+ public:
+
+ /**
+ * Internalize object from stream
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ * Externalize object to stream
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ TMMCScBkupDriveAndSize* EntryByDrive( TDriveNumber aDrive );
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Data members
+
+ //
+ RArray<TMMCScBkupDriveAndSize> iEntries;
+ //
+ TMMCScBkupOwnerDataType iDataType;
+ };
+
+
+
+
+
+
+/**
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDataTypeSizer) : public CBase
+ {
+ public:
+
+ /**
+ *
+ */
+ static CMMCScBkupDataTypeSizer* NewL();
+
+ /**
+ *
+ */
+ static CMMCScBkupDataTypeSizer* NewLC( RReadStream& aStream );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupDataTypeSizer();
+
+ private:
+
+ /**
+ * C++ constructor
+ */
+ CMMCScBkupDataTypeSizer();
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ void AddToSizeL( TMMCScBkupOwnerDataType aDataType, TInt64 aAmount, TDriveNumber aDrive );
+
+ /**
+ *
+ */
+ void Reset( TMMCScBkupOwnerDataType aDataType );
+
+ /**
+ *
+ */
+ void Reset( TMMCScBkupOwnerDataType aDataType, TDriveNumber aDrive );
+
+ /**
+ *
+ */
+ TInt64 Size( TMMCScBkupOwnerDataType aDataType ) const;
+
+ /**
+ *
+ */
+ TInt64 Size( TMMCScBkupOwnerDataType aDataType, TDriveNumber aDrive ) const;
+
+ /**
+ *
+ */
+ void GetSizesL( RArray<TMMCScBkupDriveAndSize>& aSizes ) const;
+
+ /**
+ *
+ */
+ TInt64 CombinedSize( TDriveNumber aDrive ) const;
+
+ public:
+
+ /**
+ * Internalize object from stream
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ * Externalize object to stream
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ CMMCScBkupDriveSizer* SizerByDataType( TMMCScBkupOwnerDataType aDataType );
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Data members
+
+ //
+ RMMCScBkupPointerArray<CMMCScBkupDriveSizer> iSizers;
+ };
+
+
+
+
+
+
+#endif // __CMMCSCBKUPDRIVEDATASIZEMANAGER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupDriveSpecificRequest.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2005 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: Declaration of CMMCScBkupDriveSpecificRequest
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPDRIVESPECIFICREQUEST_H__
+#define __CMMCSCBKUPDRIVESPECIFICREQUEST_H__
+
+// System includes
+#include <e32base.h>
+#include <f32file.h>
+
+// User includes
+#include "TMMCScBkupOwnerDataType.h"
+
+// Classes referenced
+class CMMCScBkupDriveAndOperationTypeManager;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupDriveSpecificRequest) : public CActive
+ {
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupDriveSpecificRequest( const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperations, TMMCScBkupOwnerDataType aDataType, CActive::TPriority aPriority = CActive::EPriorityIdle );
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL( );
+
+ public:
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupDriveSpecificRequest();
+
+ protected: // API
+
+ /**
+ *
+ */
+ virtual void RequestL( TRequestStatus& aObserver );
+
+ protected: // Internal methods
+
+ /**
+ *
+ */
+ TBool NextValidDrive(TDriveNumber& aDrive);
+
+ /**
+ *
+ */
+ TBool NextValidDrive(TDriveNumber& aDrive, const TDriveList& aCrossCheckList);
+
+ /**
+ * Return the current drive
+ */
+ TDriveNumber CurrentDrive() const;
+
+ /**
+ *
+ */
+ void CompleteObserverRequest(TInt aCompletionCode);
+
+ /**
+ *
+ */
+ void CompleteSelf(TInt aCompletionCode = KErrNone);
+
+ /**
+ *
+ */
+ inline const CMMCScBkupDriveAndOperationTypeManager& DriveAndOperations() const { return iDriveAndOperations; }
+
+ private: // From CActive
+
+ /**
+ * Default behaviour is to do nothing
+ */
+ void DoCancel();
+
+ /**
+ * Complete's observer with the error code
+ */
+ TInt RunError(TInt aError);
+
+ private: // Member data
+
+ //
+ const CMMCScBkupDriveAndOperationTypeManager& iDriveAndOperations;
+ //
+ TMMCScBkupOwnerDataType iDataType;
+ //
+ TInt iCurrentDrive;
+ //
+ TRequestStatus* iObserver;
+ };
+
+
+
+
+
+
+
+
+#endif // __CMMCSCBKUPARCHIVE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupEngine.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2002-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:
+* Scans for names of the files according to array.
+*
+*/
+
+#ifndef __CMMCSCBKUPENGINE_H__
+#define __CMMCSCBKUPENGINE_H__
+
+// User includes
+#include "MMCScBkupOperations.h"
+
+// Classes referenced
+class RFs;
+class CMMCScBkupEngineImpl;
+class CMMCScBkupOpParamsBase;
+class MMMCScBkupEngineObserver;
+class CMMCScBkupArchiveInfo;
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupEngine) : public CBase
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ IMPORT_C static CMMCScBkupEngine* NewL( RFs& aFsSession );
+
+ /**
+ * Destructor
+ */
+ IMPORT_C ~CMMCScBkupEngine();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupEngine();
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL( RFs& aFsSession );
+
+
+ public: // API
+
+ /**
+ * NB. aParams are IMMEDIATELY owned by the engine. Do not pass them in
+ * left on the cleanup stack.
+ */
+ IMPORT_C void StartOperationL(TMMCScBkupOperationType aOperation, MMMCScBkupEngineObserver& aObserver, CMMCScBkupOpParamsBase* aParams );
+
+ /**
+ *
+ */
+ IMPORT_C void CancelOperation();
+
+ /**
+ *
+ */
+ IMPORT_C TBool ValidArchiveForRestore( const TDesC& aFileName );
+
+ /**
+ *
+ */
+ IMPORT_C TInt64 TotalOperationSizeL() const;
+
+ /**
+ *
+ */
+ IMPORT_C TBool RebootRequired() const;
+
+ /**
+ *
+ */
+ IMPORT_C void ListArchivesL(
+ RPointerArray< CMMCScBkupArchiveInfo >& aArchives,
+ CMMCScBkupOpParamsBase* aParams,
+ const TUint32 aDriveAttMatch,
+ const TInt aDriveMatch = KErrNotFound ) const;
+
+ private: // Member data
+
+ // Real engine
+ CMMCScBkupEngineImpl* iEngine;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPENGINE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupEngineImpl.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2002-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:
+* Scans for names of the files according to array.
+*
+*/
+
+#ifndef __CMMCSCBKUPENGINEIMPL_H__
+#define __CMMCSCBKUPENGINEIMPL_H__
+
+// System includes
+#include <connect/sbeclient.h>
+
+// User includes
+#include "MMCScBkupConfig.h"
+#include "MMMCScBkupDriver.h"
+#include "MMCScBkupStateIds.h"
+#include "MMCScBkupOperations.h"
+#include "MMMCScBkupEngineObserver.h"
+#include "MMMCScBkupProgressObserver.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class RFs;
+class CMMCScBkupState;
+class CMMCScBkupArchive;
+class CMMCScBkupStateFactory;
+class CMMCScBkupOpParamsBase;
+class MMMCScBkupEngineObserver;
+class CMMCScBkupFileListCollection;
+class CMMCScBkupDataOwnerCollection;
+class MMMCScBkupArchiveDataInterface;
+class CMMCScBkupArchiveInfo;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupEngineImpl) : public CActive, public MMMCScBkupDriver, public MMMCScBkupProgressObserver
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ */
+ static CMMCScBkupEngineImpl* NewL( RFs& aFsSession );
+
+ /**
+ * Destructor
+ */
+ ~CMMCScBkupEngineImpl();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupEngineImpl( RFs& aFsSession );
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL( );
+
+
+ public: // API
+
+ /**
+ *
+ */
+ void StartOperationL(TMMCScBkupOperationType aOperation, MMMCScBkupEngineObserver& aObserver, CMMCScBkupOpParamsBase* aParams );
+
+ /**
+ *
+ */
+ void CleanupL( TInt aError = KErrNone );
+
+ /**
+ *
+ */
+ TBool ValidArchiveForRestoreL( const TDesC& aFileName );
+
+ /**
+ *
+ */
+ TInt64 TotalOperationSizeL() const;
+
+ /**
+ *
+ */
+ TBool RebootRequired() const;
+
+ /**
+ *
+ */
+ void ListArchivesL(
+ RPointerArray< CMMCScBkupArchiveInfo >& aArchives,
+ CMMCScBkupOpParamsBase* aParams,
+ const TUint32 aDriveAttMatch,
+ const TInt aDriveMatch );
+
+ private: // From MMMCScBkupDriver
+ void DrvHandleStateExecutionCompleteL( const CMMCScBkupState& aState );
+ void DrvHandleStateExecutionCompleteL( const CMMCScBkupState& aState, TMMCScBkupStateId aNextState );
+ void DrvHandleStateExecutionErrorL( const CMMCScBkupState& aState, TInt aError );
+
+ private: // From MMMCScBkupDriver
+ MMMCScBkupArchiveDataInterface& DrvADI() const;
+ CMMCScBkupArchive& DrvArchive() const;
+ CSBEClient& DrvSecureBackupClient() const;
+ TMMCScBkupOperationType DrvOperation() const;
+ CMMCScBkupOpParamsBase& DrvParamsBase() const;
+ CMMCScBkupDataOwnerCollection& DrvDataOwners() const;
+ RPointerArray<CMMCScBkupDataOwnerCollection>& DrvDataOwnersAll();
+ CMMCScBkupFileListCollection& DrvFileList() const;
+ TBool DrvLastCategory() const;
+ void DrvStoreTotalProgress(TInt64 aProgress);
+ TInt64 DrvTotalProgress() const;
+ MMMCScBkupProgressObserver& DrvProgressHandler() const;
+
+ private: // From MMMCScBkupProgressObserver
+ void MMCScBkupHandleProgress( TInt aAmountCompleted );
+ void MMCScBkupHandleProgressDomainUnderstood( TInt aTotalProgressAmount );
+ TInt MMCScBkupHandleFreeSpace( TInt aPercentualFree );
+ void MMCScBkupStartBackuping( TBool aProceed );
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+
+ private: // Internal
+
+ /**
+ *
+ */
+ void CompleteOwnRequest(TInt aCompletionCode = KErrNone, TBool aSetActive = ETrue);
+
+ /**
+ *
+ */
+ void NotifyObserver(MMMCScBkupEngineObserver::TEvent aEvent, TInt aAssociatedData = KErrNone);
+
+ /**
+ *
+ */
+ void PrepareForBackupL(TBool aPartial);
+
+ /**
+ *
+ */
+ void PrepareForRestoreL(TBool aPartial);
+
+ /**
+ *
+ */
+ void SetParameters(CMMCScBkupOpParamsBase* aParameters);
+
+ /**
+ *
+ */
+ void CreateFactoryL(TMMCScBkupOperationType aOperation);
+
+ /**
+ *
+ */
+ TBool CurrentStateAvailable() const;
+
+ /**
+ *
+ */
+ TMMCScBkupStateId CurrentStateId() const;
+
+ /**
+ *
+ */
+ CMMCScBkupState& CurrentState();
+
+ /**
+ *
+ */
+ const CMMCScBkupState& CurrentState() const;
+
+ /**
+ *
+ */
+ void PrepareNextStateL( TMMCScBkupStateId aCurrentStateId );
+
+ /**
+ *
+ */
+ void DestroyCurrentState();
+
+ /**
+ *
+ */
+ void ExecuteStateL();
+
+ /**
+ *
+ */
+ void PrepareObjectsL();
+
+#ifdef DEBUGGING_DATA_TRANSFER
+
+ /**
+ *
+ */
+ void CleanBackupFilesL();
+
+ /**
+ *
+ */
+ void ClearRestoreFilesL();
+#endif
+
+ private: // Member data
+
+ // Referenced objects
+ // file server session
+ RFs& iFsSession;
+ // backup engine observer
+ MMMCScBkupEngineObserver* iObserver;
+
+ // Owned objects
+ //
+ TInt64 iCumulativeProgress;
+ // Secure backup engine client
+ CSBEClient* iSBEClient;
+ // Archive array
+ RMMCScBkupPointerArray<CMMCScBkupArchive> iArchives;
+ // Current operation
+ TMMCScBkupOperationType iOperationType;
+ // Operational parameters
+ CMMCScBkupOpParamsBase* iParameters;
+ //
+ CMMCScBkupState* iCurrentState;
+ // Current factory
+ CMMCScBkupStateFactory* iFactory;
+ //
+ RPointerArray<CMMCScBkupDataOwnerCollection> iDataOwners;
+ //
+ RPointerArray<CMMCScBkupFileListCollection> iFileLists;
+ //
+ TInt iCurrentArchive;
+ //
+ TInt64 iTotalProgress;
+ //
+ TBool iActiveDataProcessingOngoing;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPENGINEIMPL_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupFileInfo.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupFileInfo
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPFILEINFO_H__
+#define __CMMCSCBKUPFILEINFO_H__
+
+// System includes
+#include <f32file.h>
+#include <s32strm.h>
+
+
+/**
+* Represents a public file within an archive. Each public file
+* has an associated data owner. This is encapsulated by the SID
+* of the owning process.
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupFileInfo) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupFileInfo* NewL( const TEntry& aEntry, TSecureId aAssociatedSID );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupFileInfo* NewLC( const TEntry& aEntry, TSecureId aAssociatedSID );
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupFileInfo* NewLC( RReadStream& aStream );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupFileInfo();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupFileInfo();
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupFileInfo( const TEntry& aEntry, TSecureId aAssociatedSID );
+
+ /**
+ *
+ */
+ void ConstructL( const TEntry& aEntry );
+
+ public: // API - Getters
+
+ /**
+ *
+ */
+ inline const TDesC& FileName() const { return *iFileName; }
+
+ /**
+ *
+ */
+ inline TInt Size() const { return iSize; }
+
+ /**
+ *
+ */
+ inline const TTime& DateTime() const { return iDateTime; }
+
+ /**
+ *
+ */
+ inline TUint Attributes() const { return iAttributes; }
+
+ /**
+ *
+ */
+ inline TSecureId SecureId() const { return iSecureId; }
+
+ /**
+ *
+ */
+ TDriveNumber Drive() const;
+
+ public: // Store/Restore
+
+ /**
+ *
+ */
+ void InternalizeL(RReadStream& aStream);
+
+ /**
+ *
+ */
+ void ExternalizeL(RWriteStream& aStream) const;
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ public: // Comparison support
+
+ /**
+ *
+ */
+ static TInt OrderByFileName(const CMMCScBkupFileInfo& aLeft, const CMMCScBkupFileInfo& aRight);
+
+ /**
+ *
+ */
+ static TBool CompareByFileName(const CMMCScBkupFileInfo& aLeft, const CMMCScBkupFileInfo& aRight);
+
+ private: // Member data
+
+ // File name
+ HBufC* iFileName;
+ //
+ TInt iSize;
+ //
+ TTime iDateTime;
+ //
+ TUint iAttributes;
+ //
+ TSecureId iSecureId;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPFILEINFO_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupFileListCollection.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2005-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: Declaration for CMMCScBkupFileListCollection
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPFILELISTCOLLECTION_H__
+#define __CMMCSCBKUPFILELISTCOLLECTION_H__
+
+// System includes
+#include <f32file.h>
+
+// User includes
+#include "RMMCScBkupPointerArray.h"
+#include "CMMCScBkupFileInfo.h"
+#include <babitflags.h>
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupFileListCollection) : public CBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupFileListCollection* NewL( TBitFlags aCategory, RFs& aFsSession );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupFileListCollection();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupFileListCollection( TBitFlags aCategory, RFs& aFsSession );
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ void AppendL( const RArray<TEntry>& aArray, RArray< const CMMCScBkupFileInfo* >& aAddedItems, TSecureId aAssociatedSID );
+
+ /**
+ *
+ */
+ void AppendL( CMMCScBkupFileInfo* aFileInfo );
+
+ /**
+ *
+ */
+ TInt Count() const;
+
+ /**
+ *
+ */
+ const CMMCScBkupFileInfo& Entry(TInt aIndex) const;
+
+ /**
+ *
+ */
+ void Remove( TInt aIndex );
+
+ /**
+ *
+ */
+ void Reset();
+
+ /**
+ *
+ */
+ TBitFlags Category() const { return iCategory; }
+
+ private: // Member data
+
+ // Array of data owners
+ RMMCScBkupPointerArray<CMMCScBkupFileInfo> iEntries;
+ //
+ TBitFlags iCategory;
+ //
+ RFs& iFsSession;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPFILELISTCOLLECTION_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexActiveData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexActiveData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXACTIVEDATA_H__
+#define __CMMCSCBKUPINDEXACTIVEDATA_H__
+
+// User includes
+#include "CMMCScBkupIndexWithIdentifier.h"
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexActiveData) : public CMMCScBkupIndexWithIdentifier< TSecureId >
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupIndexActiveData* NewLC();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexActiveData();
+
+ };
+
+
+
+
+#endif // __CMMCSCBKUPINDEXACTIVEDATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexBase.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexBase
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXBASE_H__
+#define __CMMCSCBKUPINDEXBASE_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "MMMCScBkupDriver.h"
+#include "TMMCScBkupOwnerDataType.h"
+#include "RMMCScBkupPointerArray.h"
+#include "TMMCScBkupArchiveVector.h"
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexBase) : public CBase
+ {
+ public:
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupIndexBase();
+
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexBase(TMMCScBkupOwnerDataType aType);
+
+ /**
+ *
+ */
+ virtual void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ inline TMMCScBkupOwnerDataType Type() const { return iType; }
+
+ /**
+ *
+ */
+ inline const TMMCScBkupArchiveVector& Vector() const { return iVector; }
+
+ /**
+ *
+ */
+ inline void SetVector( const TMMCScBkupArchiveVector& aVector ) { iVector = aVector; }
+
+ public: // Store/Restore
+
+ /**
+ *
+ */
+ virtual void StoreL(MMMCScBkupDriver& aDriver) = 0;
+
+ /**
+ *
+ */
+ virtual void RestoreL(MMMCScBkupDriver& aDriver) = 0;
+
+ private: // Member data
+
+ //
+ TMMCScBkupOwnerDataType iType;
+ //
+ TMMCScBkupArchiveVector iVector;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPINDEXBASE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexDataOwners.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexDataOwners
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXDATAOWNERS_H__
+#define __CMMCSCBKUPINDEXDATAOWNERS_H__
+
+// System includes
+#include <f32file.h>
+
+// User includes
+#include "CMMCScBkupIndexBase.h"
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexDataOwners) : public CMMCScBkupIndexBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupIndexDataOwners* NewLC();
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupIndexDataOwners();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexDataOwners();
+
+ public: // API
+
+ /**
+ *
+ */
+ void AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo );
+
+ /**
+ *
+ */
+ inline TInt Count() const
+ { return iEntries.Count(); }
+
+ /**
+ *
+ */
+ inline const TMMCScBkupArchiveVector& At( TInt aIndex ) const
+ { return iEntries[ aIndex ]; }
+
+ public: // From CMMCScBkupIndexBase
+
+ /**
+ *
+ */
+ void StoreL(MMMCScBkupDriver& aDriver);
+
+ /**
+ *
+ */
+ void RestoreL(MMMCScBkupDriver& aDriver);
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Member data
+
+ //
+ RArray<TMMCScBkupArchiveVector> iEntries;
+
+ };
+
+
+
+
+#endif // __CMMCSCBKUPINDEXDATAOWNERS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexJavaData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2006 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: Declaration for CMMCScBkupIndexJavaDataEntry and
+* CMMCScBkupIndexJavaData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXJAVADATA_H__
+#define __CMMCSCBKUPINDEXJAVADATA_H__
+
+// User includes
+#include "CMMCScBkupIndexWithIdentifier.h"
+
+
+
+/**
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS( CMMCScBkupIndexJavaDataEntry ) : public CBase
+ {
+ public:
+
+ /**
+ *
+ */
+ static CMMCScBkupIndexJavaDataEntry* NewLC();
+
+ /**
+ *
+ */
+ static CMMCScBkupIndexJavaDataEntry* NewLC( RReadStream& aStream );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupIndexJavaDataEntry();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupIndexJavaDataEntry();
+
+ /**
+ *
+ */
+ void ConstructL();
+
+ public: // API
+
+ /**
+ *
+ */
+ inline const TDesC& Hash() const { return *iHash; }
+
+ /**
+ *
+ */
+ void SetHashL( const TDesC& aHash );
+
+ /**
+ *
+ */
+ inline TDriveNumber Drive() const { return iDrive; }
+
+ /**
+ *
+ */
+ inline void SetDrive( TDriveNumber aDrive ) { iDrive = aDrive; }
+
+ /**
+ *
+ */
+ inline const TMMCScBkupArchiveVector& MidletInfo() const { return iMidletInfo; }
+
+ /**
+ *
+ */
+ inline void SetMidletInfo( const TMMCScBkupArchiveVector& aInfo ) { iMidletInfo = aInfo; }
+
+ /**
+ *
+ */
+ inline const TMMCScBkupArchiveVector& MidletDataInfo() const { return iMidletDataInfo; }
+
+ /**
+ *
+ */
+ inline void SetMidletDataInfo( const TMMCScBkupArchiveVector& aInfo ) { iMidletDataInfo = aInfo; }
+
+ /**
+ *
+ */
+ inline TBool HasMidletDataInfo() const { return iMidletDataInfo.Length() > 0 && iMidletDataInfo.Offset() > 0; }
+
+ public: // Store & restore
+
+ /**
+ *
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ *
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Data members
+ //
+ HBufC* iHash;
+ //
+ TDriveNumber iDrive;
+ //
+ TMMCScBkupArchiveVector iMidletInfo;
+ //
+ TMMCScBkupArchiveVector iMidletDataInfo;
+ };
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexJavaData) : public CMMCScBkupIndexBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupIndexJavaData* NewLC();
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupIndexJavaData();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexJavaData();
+
+ public: // API
+
+ /**
+ *
+ */
+ void AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo, const TDesC& aHash, TDriveNumber aDrive, TJavaTransferType aType );
+
+ /**
+ *
+ */
+ inline TInt Count() const { return iEntries.Count(); }
+
+ /**
+ *
+ */
+ const CMMCScBkupIndexJavaDataEntry& At( TInt aIndex ) const;
+
+ public: // From CMMCScBkupIndexBase
+
+ /**
+ *
+ */
+ void StoreL( MMMCScBkupDriver& aDriver );
+
+ /**
+ *
+ */
+ void RestoreL( MMMCScBkupDriver& aDriver );
+
+ private: // Internal classes
+
+ /**
+ *
+ */
+ CMMCScBkupIndexJavaDataEntry* EntryByHash( const TDesC& aHash, TDriveNumber aDrive ) const;
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Member data
+
+ //
+ RMMCScBkupPointerArray< CMMCScBkupIndexJavaDataEntry > iEntries;
+
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPINDEXJAVADATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexPassiveData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexPassiveData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXPASSIVEDATA_H__
+#define __CMMCSCBKUPINDEXPASSIVEDATA_H__
+
+// System includes
+#include <f32file.h>
+
+// User includes
+#include "CMMCScBkupIndexWithIdentifier.h"
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexPassiveData) : public CMMCScBkupIndexWithIdentifier< TSecureId >
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupIndexPassiveData* NewLC();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexPassiveData();
+
+ };
+
+
+
+
+#endif // __CMMCScBkupIndexPassiveData_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexPublicDataFiles.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexPublicDataFiles
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXPUBLICDATAFILES_H__
+#define __CMMCSCBKUPINDEXPUBLICDATAFILES_H__
+
+// System includes
+#include <f32file.h>
+
+// User includes
+#include "CMMCScBkupIndexBase.h"
+
+// Classes referenced
+class CMMCScBkupFileInfo;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexPublicDataFiles) : public CMMCScBkupIndexBase
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupIndexPublicDataFiles* NewLC();
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupIndexPublicDataFiles();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexPublicDataFiles();
+
+ public: // API
+
+ /**
+ *
+ */
+ void AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo, const CMMCScBkupFileInfo& aFile );
+
+ /**
+ *
+ */
+ inline TInt Count() const { return iEntries.Count(); }
+
+ /**
+ *
+ */
+ const CMMCScBkupFileInfo& At( TInt aIndex, TMMCScBkupArchiveVector& aInfo ) const;
+
+ public: // From CMMCScBkupIndexBase
+
+ /**
+ *
+ */
+ void StoreL( MMMCScBkupDriver& aDriver );
+
+ /**
+ *
+ */
+ void RestoreL( MMMCScBkupDriver& aDriver );
+
+ private: // Internal classes
+
+ /**
+ *
+ * @since 3.0
+ */
+ class TMMCScBkupPublicFileEntry
+ {
+ public:
+ inline TMMCScBkupPublicFileEntry() { }
+ inline TMMCScBkupPublicFileEntry(const TMMCScBkupArchiveVector& aInfo, const CMMCScBkupFileInfo& aFile)
+ : iInfo(aInfo), iFile(&aFile)
+ {
+ }
+
+ public: // Data members
+ TMMCScBkupArchiveVector iInfo;
+ const CMMCScBkupFileInfo* iFile;
+ };
+
+ private: // Member data
+
+ //
+ RArray<TMMCScBkupPublicFileEntry> iEntries;
+
+ };
+
+
+#endif // __CMMCSCBKUPINDEXPUBLICDATAFILES_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexSystemData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexSystemData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXSYSTEMDATA_H__
+#define __CMMCSCBKUPINDEXSYSTEMDATA_H__
+
+// System includes
+#include <f32file.h>
+
+// User includes
+#include "CMMCScBkupIndexWithIdentifier.h"
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupIndexSystemData) : public CMMCScBkupIndexWithIdentifier< TInt32 >
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupIndexSystemData* NewLC();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupIndexSystemData();
+
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPINDEXSYSTEMDATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupIndexWithIdentifier.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupIndexWithIdentifier
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPINDEXWITHIDENTIFIER_H__
+#define __CMMCSCBKUPINDEXWITHIDENTIFIER_H__
+
+// User includes
+#include "CMMCScBkupIndexBase.h"
+#include "TMMCScBkupOwnerDataType.h"
+#include "TMMCScBkupArchiveVector.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+template < class TIdentifier >
+class CMMCScBkupIndexEntry : public CBase
+ {
+ public:
+ inline static CMMCScBkupIndexEntry* NewLC( const TIdentifier& aIdentifier )
+ {
+ CMMCScBkupIndexEntry* self = new(ELeave) CMMCScBkupIndexEntry( aIdentifier );
+ CleanupStack::PushL( self );
+ return self;
+ }
+
+ inline static CMMCScBkupIndexEntry* NewLC( RReadStream& aStream )
+ {
+ CMMCScBkupIndexEntry* self = new(ELeave) CMMCScBkupIndexEntry();
+ CleanupStack::PushL( self );
+ aStream >> *self;
+ return self;
+ }
+
+ inline ~CMMCScBkupIndexEntry()
+ {
+ iAssociatedData.Close();
+ }
+
+ private:
+
+ inline CMMCScBkupIndexEntry()
+ {
+ }
+
+ inline CMMCScBkupIndexEntry( const TIdentifier& aIdentifier )
+ : iIdentifier( aIdentifier )
+ {
+ }
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ public:// Store & Restore
+
+ inline void InternalizeL( RReadStream& aStream )
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ aStream.ReadInt32L(); // spare3
+ //
+ iIdentifier = aStream.ReadInt32L();
+ //
+ const TInt count = aStream.ReadInt32L();
+ for(TInt i=0; i<count; i++)
+ {
+ TMMCScBkupArchiveDriveAndVector entry;
+ aStream >> entry;
+ //
+ iAssociatedData.AppendL( entry );
+ }
+ }
+
+ inline void ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ aStream.WriteInt32L( 0 ); // spare3
+ //
+ aStream.WriteInt32L( iIdentifier );
+ //
+ const TInt count = iAssociatedData.Count();
+ aStream.WriteInt32L(count);
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ const TMMCScBkupArchiveDriveAndVector& entry = iAssociatedData[i];
+ aStream << entry;
+ }
+ }
+
+ public: // General access
+
+ inline const TIdentifier& Identifier() const
+ { return iIdentifier; }
+
+ inline void AddEntryL( const TMMCScBkupArchiveDriveAndVector& aEntry )
+ { iAssociatedData.AppendL(aEntry); }
+
+ inline TInt Count() const
+ { return iAssociatedData.Count(); }
+
+ inline const TMMCScBkupArchiveDriveAndVector& Entry(TInt aIndex) const
+ { return iAssociatedData[ aIndex ]; }
+
+ inline const RArray<TMMCScBkupArchiveDriveAndVector>& Entries() const
+ { return iAssociatedData; }
+
+ private:
+
+ /**
+ *
+ */
+ TIdentifier iIdentifier;
+
+ /**
+ *
+ */
+ RArray<TMMCScBkupArchiveDriveAndVector> iAssociatedData;
+ };
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+template < class TIdentifier >
+class CMMCScBkupIndexWithIdentifier : public CMMCScBkupIndexBase
+ {
+
+ public:
+
+ /**
+ * C++ destructor
+ */
+ inline ~CMMCScBkupIndexWithIdentifier()
+ {
+ iEntries.Close();
+ }
+
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ inline CMMCScBkupIndexWithIdentifier( TMMCScBkupOwnerDataType aType )
+ : CMMCScBkupIndexBase( aType )
+ {
+ }
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ public: // API
+
+ /**
+ *
+ */
+ inline void AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive, const TIdentifier& aIdentifier )
+ {
+ // Locate the parent
+ CMMCScBkupIndexEntry< TIdentifier >& entry = EntryByIdentifierL( aIdentifier );
+
+ // Create new sub-entry
+ TMMCScBkupArchiveDriveAndVector subItem;
+ subItem.iDrive = aDrive;
+ subItem.iVector = aInfo;
+
+ // Add it to our index
+ entry.AddEntryL( subItem );
+ }
+
+ /**
+ *
+ */
+ inline TInt Count() const
+ { return iEntries.Count(); }
+
+ /**
+ *
+ */
+ inline const CMMCScBkupIndexEntry< TIdentifier >& At( TInt aIndex ) const
+ { return *iEntries[ aIndex ]; }
+
+ /**
+ *
+ */
+ inline void StoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RWriteStream stream( archiveDataInterface.ADIWriteStreamUncompressedLC() );
+ //
+ stream.WriteInt32L( EStreamFormatVersion1 );
+ stream.WriteInt32L( 0 ); // spare1
+ stream.WriteInt32L( 0 ); // spare2
+ stream.WriteInt32L( 0 ); // spare3
+
+ const TInt count = iEntries.Count();
+ stream.WriteInt32L( count );
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ const CMMCScBkupIndexEntry< TIdentifier > & entry = *iEntries[ i ];
+ stream << entry;
+ }
+ //
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+ // Update our base class info with the offset to the index
+ SetVector( archiveDataInterface.ADICurrentArchiveVectorInfo() );
+ }
+
+ /**
+ *
+ */
+ inline void RestoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RReadStream stream( archiveDataInterface.ADIReadStreamUncompressedLC( Vector().Offset() ) );
+ //
+ stream.ReadInt32L(); // EStreamFormatVersion1
+ stream.ReadInt32L(); // spare1
+ stream.ReadInt32L(); // spare2
+ stream.ReadInt32L(); // spare3
+ //
+ const TInt count = stream.ReadInt32L();
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupIndexEntry< TIdentifier >* entry = CMMCScBkupIndexEntry< TIdentifier >::NewLC( stream );
+ iEntries.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+ //
+ CleanupStack::PopAndDestroy(); // stream
+ //
+ if ( archiveDataInterface.ADICurrentArchiveVectorInfo().Length() > Vector().Length() )
+ {
+ // We've read too much!
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ inline CMMCScBkupIndexEntry< TIdentifier >* EntryByIdentifier( const TIdentifier& aIdentifier )
+ {
+ CMMCScBkupIndexEntry< TIdentifier >* ret = NULL;
+ //
+ const TInt count = iEntries.Count();
+ for( TInt i=count-1; i>=0; i-- )
+ {
+ CMMCScBkupIndexEntry< TIdentifier >* entry = iEntries[ i ];
+ if ( entry->Identifier() == aIdentifier )
+ {
+ ret = entry;
+ break;
+ }
+ }
+ //
+ return ret;
+ }
+
+ /**
+ *
+ */
+ inline CMMCScBkupIndexEntry< TIdentifier >& EntryByIdentifierL( const TIdentifier& aIdentifier )
+ {
+ CMMCScBkupIndexEntry< TIdentifier >* ret = EntryByIdentifier( aIdentifier );
+ if ( !ret )
+ {
+ // Need to make a new entry
+ ret = CMMCScBkupIndexEntry< TIdentifier >::NewLC( aIdentifier );
+ iEntries.AppendL( ret );
+ CleanupStack::Pop( ret );
+ }
+ //
+ return *ret;
+ }
+
+ private: // Member Data
+
+ //
+ RMMCScBkupPointerArray< CMMCScBkupIndexEntry< TIdentifier > > iEntries;
+ };
+
+
+
+
+
+
+#endif // __CMMCSCBKUPINDEXWITHIDENTIFIER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupOperationParameters.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupOpParamsBase
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPOPERATIONPARAMETERS_H__
+#define __CMMCSCBKUPOPERATIONPARAMETERS_H__
+
+// System includes
+#include <connect/sbdefs.h>
+#include <connect/sbtypes.h>
+#include <barsread.h>
+#include <babitflags.h>
+
+// User includes
+#include "MMCScBkupOperations.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "RMMCScBkupPointerArray.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDriveAndOperationTypeManager;
+class CMMCScBkupArchiveInfo;
+
+_LIT( KBackUpFolder, "\\Backup\\" );
+_LIT( KBackUpFiles, "*.arc" );
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupOpParamsBase) : public CBase
+ {
+ public:
+
+ /**
+ *
+ */
+ IMPORT_C ~CMMCScBkupOpParamsBase();
+
+ protected:
+
+ /**
+ *
+ */
+ CMMCScBkupOpParamsBase( );
+
+ /**
+ *
+ */
+ void ConstructL( TResourceReader& aDriveReader, TBitFlags aCategories );
+
+ public: // Common mandatory framework methods
+
+ /**
+ *
+ */
+ virtual TMMCScBkupOperationType AssociatedOpType() const = 0;
+
+ /**
+ *
+ */
+ virtual TBURPartType PartType() const = 0;
+
+ /**
+ *
+ */
+ virtual TBackupIncType IncrementType() const = 0;
+
+ /**
+ *
+ */
+ virtual TTransferDataType PassiveTransferType() const = 0;
+
+ /**
+ *
+ */
+ virtual TTransferDataType ActiveTransferType() const = 0;
+
+ /**
+ *
+ */
+ virtual TPackageDataType PackageTransferType() const = 0;
+
+ public: // Common attributes
+
+ /**
+ *
+ */
+ IMPORT_C const CMMCScBkupDriveAndOperationTypeManager& DriveAndOperations() const;
+
+ /**
+ *
+ */
+ IMPORT_C void SetArchiveInfosL(RPointerArray<CMMCScBkupArchiveInfo>& aInfos);
+
+ /**
+ *
+ */
+ RMMCScBkupPointerArray<CMMCScBkupArchiveInfo>& ArchiveInfos();
+
+ /**
+ *
+ */
+ const CMMCScBkupArchiveInfo& ArchiveInfo(TBitFlags aCategory) const;
+
+ /**
+ *
+ */
+ const TDesC& FileName(TInt aIndex) const;
+
+ /**
+ *
+ */
+ TBitFlags Categories() { return iCategories; }
+
+ private: // Data members
+
+ //
+ CMMCScBkupDriveAndOperationTypeManager* iDriveAndOperations;
+ //
+ RMMCScBkupPointerArray< CMMCScBkupArchiveInfo > iArchiveInfos;
+ //
+ TBitFlags iCategories;
+ };
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupOpParamsBackupFull) : public CMMCScBkupOpParamsBase
+ {
+ public:
+
+ /**
+ *
+ */
+ IMPORT_C static CMMCScBkupOpParamsBackupFull* NewL( TResourceReader& aDriveReader, TResourceReader& aCategoryReader,
+ TDriveNumber aDrive, TBitFlags aCategories );
+
+ /**
+ *
+ */
+ IMPORT_C ~CMMCScBkupOpParamsBackupFull();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupOpParamsBackupFull( TDriveNumber aDrive );
+
+ /**
+ *
+ */
+ void ConstructL( TResourceReader& aDriveReader, TResourceReader& aCategoryReader, TBitFlags aCategories );
+
+ /**
+ *
+ */
+ void ReadFromResourceL( TResourceReader& aReader );
+
+ public: // From CMMCScBkupOpParamsBase
+ IMPORT_C TMMCScBkupOperationType AssociatedOpType() const;
+ IMPORT_C TBURPartType PartType() const;
+ IMPORT_C TBackupIncType IncrementType() const;
+ IMPORT_C TTransferDataType PassiveTransferType() const;
+ IMPORT_C TTransferDataType ActiveTransferType() const;
+ IMPORT_C TPackageDataType PackageTransferType() const;
+
+ private: // Data members
+
+ //
+ TDriveNumber iDrive;
+ };
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupOpParamsRestoreFull) : public CMMCScBkupOpParamsBase
+ {
+ public:
+
+ /**
+ *
+ */
+ IMPORT_C static CMMCScBkupOpParamsRestoreFull* NewL( TResourceReader& aDriveReader, TBitFlags aCategories );
+
+ /**
+ *
+ */
+ IMPORT_C ~CMMCScBkupOpParamsRestoreFull();
+
+ private:
+
+ /**
+ *
+ */
+ CMMCScBkupOpParamsRestoreFull();
+
+ public: // From CMMCScBkupOpParamsBase
+ IMPORT_C TMMCScBkupOperationType AssociatedOpType() const;
+ IMPORT_C TBURPartType PartType() const;
+ IMPORT_C TBackupIncType IncrementType() const;
+ IMPORT_C TTransferDataType PassiveTransferType() const;
+ IMPORT_C TTransferDataType ActiveTransferType() const;
+ IMPORT_C TPackageDataType PackageTransferType() const;
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPOPERATIONPARAMETERS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupState.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,183 @@
+/*
+* 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: Declaration for CMMCScBkupState
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATE_H__
+#define __CMMCSCBKUPSTATE_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "MMMCScBkupDriver.h"
+#include "MMCScBkupStateIds.h"
+#include "RMMCScBkupPointerArray.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupState;
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupState) : public CActive
+ {
+ public:
+
+ /**
+ * Enumeration specifying how state is supposed to be handled
+ */
+ enum TStateExecution
+ {
+ EStateOnce = 0,
+ EStatePerCategory,
+ EStatePerCategoryCommon
+ };
+
+ /**
+ * Destructor
+ */
+ ~CMMCScBkupState();
+
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupState( MMMCScBkupDriver& aDriver, TInt aPriority = CActive::EPriorityIdle );
+
+ public:
+
+ /**
+ * Return the unique RTTI id of this state
+ */
+ virtual TMMCScBkupStateId StateId() const = 0;
+
+ /**
+ * Return the next state that should be executed
+ * after this state has finished. This allows
+ * for dynamic changes in the state machine
+ */
+ virtual TMMCScBkupStateId NextStateId() const = 0;
+
+ /**
+ * Return false if no need for category specific actions, otherwise true
+ */
+ virtual TStateExecution CategorySpecific() const { return EStateOnce; }
+
+ /**
+ * Perform the action associated with this
+ * state
+ */
+ void ExecuteL(TRequestStatus& aObserver);
+
+ protected: // Virtual framework
+
+ /**
+ * Perform the initial action associated with this
+ * state
+ */
+ virtual void PerformStateInitL() = 0;
+
+ /**
+ * Perform some asynchronous operation
+ */
+ virtual void PerformAsynchronousStateStepL();
+
+ /**
+ * Perform some asynchronous cancellation
+ */
+ virtual void PerformAsynchronousCancellation();
+
+ /**
+ * Called just before observer's request is completed
+ * in the case of an error-free operation. Not called
+ * when errors occur during state processing.
+ */
+ virtual void PerformLastRightsL();
+
+ /**
+ * Called from RunError
+ */
+ virtual TBool PerformAsynchronousErrorCleanup(TInt aError);
+
+ private: // Virtual framework
+
+ /**
+ * Default behaviour is to panic if called
+ */
+ void RunL();
+
+ /**
+ *
+ */
+ void DoCancel();
+
+ /**
+ * Default behaviour is to return KErrNone
+ */
+ TInt RunError(TInt aError);
+
+ protected: // Internal API
+
+ /**
+ *
+ */
+ inline MMMCScBkupDriver& Driver() const { return iDriver; }
+
+ /**
+ *
+ */
+ inline MMMCScBkupArchiveDataInterface& ADI() const { return iDriver.DrvADI(); }
+
+ /**
+ *
+ */
+ void CompleteSelf(TInt aCompletionCode = KErrNone);
+
+ /**
+ *
+ */
+ void SetObserver(TRequestStatus& aStatus);
+
+ private: // Internal API
+
+ /**
+ *
+ */
+ void CompleteObserver(TInt aCompletionCode);
+
+ private: // Member data
+
+ // Driver
+ MMMCScBkupDriver& iDriver;
+ // Observer
+ TRequestStatus* iObserver;
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpActiveData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpActiveData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPACTIVEDATA_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPACTIVEDATA_H__
+
+// System includes
+#include <connect/sbtypes.h>
+
+// User includes
+#include "CMMCScBkupStateOpAware.h"
+#include "TMMCScBkupArchiveVector.h"
+#include "CMMCScBkupTransferWriteRequest.h"
+#include "CMMCScBkupTransferReadRequest.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpActiveData) : public CMMCScBkupStateOpAware, public MMMCScBkupIndexHandler
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpActiveData* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateArchiveOpActiveData( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpActiveData( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+
+ public: // From CMMCScBkupStateOpAware
+ TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const;
+ TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const;
+
+ private: // From CMMCScBkupStateOpAware
+ void PerformStateInitBackupL( TBool aPartial );
+ void PerformStateInitRestoreL( TBool aPartial );
+ void PerformAsynchronousStateStepBackupL( TBool aPartial );
+ void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+ void PerformLastRightsBackupL( TBool aPartial );
+ TBool PerformAsynchronousErrorCleanupBackup( TBool aPartial, TInt aError );
+ TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+
+ private: // From CMMCScBkupState
+ void PerformAsynchronousCancellation();
+
+ private: // From MMMCScBkupIndexHandler
+ void AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive );
+
+ private: // Internal members
+
+ /**
+ *
+ */
+ inline TBool AllDataOwnersHandled() const { return !iAtLeastOneDataOwnerIsNotYetReady; }
+
+ /**
+ *
+ */
+ void CheckNeedToStartRetryTimerL();
+
+ private: // Member data
+
+ //
+ TInt iIndexValueCurrent;
+ //
+ TBool iAtLeastOneDataOwnerIsNotYetReady;
+ //
+ RTimer iTimer;
+ //
+ CMMCScBkupWriteDataTransferRequest< TTransferDataType >* iBackupTransferObject;
+ //
+ CMMCScBkupReadDataTransferRequest< TTransferDataType >* iRestoreTransferObject;
+ };
+
+
+
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPACTIVEDATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpArchiveFooter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpArchiveFooter
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPARCHIVEFOOTER_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPARCHIVEFOOTER_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpArchiveFooter) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpArchiveFooter* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpArchiveFooter( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+ TStateExecution CategorySpecific() const { return EStatePerCategory; }
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ };
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPARCHIVEFOOTER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpArchiveHeader.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpArchiveHeader
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPARCHIVEHEADER_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPARCHIVEHEADER_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpArchiveHeader) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpArchiveHeader* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpArchiveHeader( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+ TStateExecution CategorySpecific() const { return EStatePerCategory; }
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ };
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPARCHIVEHEADER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpDataOwners.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpDataOwners
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPDATAOWNERS_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPDATAOWNERS_H__
+
+// User includes
+#include "CMMCScBkupStateOpAware.h"
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpDataOwners) : public CMMCScBkupStateOpAware
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpDataOwners* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateArchiveOpDataOwners();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpDataOwners( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+
+ public: // From CMMCScBkupStateOpAware
+ TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const;
+ TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const;
+
+ private: // From CMMCScBkupStateOpAware
+
+ private: // From CMMCScBkupState
+ void PerformStateInitBackupL( TBool aPartial );
+ void PerformStateInitRestoreL( TBool aPartial );
+ //
+ void PerformAsynchronousStateStepBackupL( TBool aPartial );
+ void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+ //
+ void PerformLastRightsBackupL( TBool aPartial );
+ void PerformLastRightsRestoreL( TBool aPartial );
+ //
+ TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+
+ private: // Member data
+
+ //
+ TInt iIndexValueCurrent;
+ };
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPDATAOWNERS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpJavaData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpJavaData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPJAVADATA_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPJAVADATA_H__
+
+// System includes
+#include <connect/sbtypes.h>
+
+// User includes
+#include "CMMCScBkupStateOpAware.h"
+#include "TMMCScBkupArchiveVector.h"
+#include "CMMCScBkupTransferWriteRequest.h"
+#include "CMMCScBkupTransferReadRequest.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpJavaData) : public CMMCScBkupStateOpAware, public MMMCScBkupIndexHandler
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpJavaData* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateArchiveOpJavaData( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpJavaData( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+
+ public: // From CMMCScBkupStateOpAware
+ TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const;
+ TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const;
+
+ private: // From CMMCScBkupStateOpAware
+ void PerformStateInitBackupL( TBool aPartial );
+ void PerformStateInitRestoreL( TBool aPartial );
+ void PerformAsynchronousStateStepBackupL( TBool aPartial );
+ void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+ void PerformLastRightsBackupL( TBool aPartial );
+ void PerformLastRightsRestoreL( TBool aPartial );
+ TBool PerformAsynchronousErrorCleanupBackup( TBool aPartial, TInt aError );
+ TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+
+ private: // From CMMCScBkupState
+ void PerformAsynchronousCancellation();
+
+ private: // From MMMCScBkupIndexHandler
+ void AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive );
+
+ private: // Internal enumerations
+ enum TJavaState
+ {
+ EJavaStateIdle = 0,
+ EJavaStateMidlet,
+ EJavaStateMidletData
+ };
+
+ private: // Internal methods
+ void BackupMidletL();
+ void BackupMidletDataL();
+ void RestoreMidletL();
+ void RestoreMidletDataL();
+
+ private: // Member data
+
+ //
+ TInt iIndexValueCurrent;
+ //
+ TJavaState iCurrentJavaState;
+ //
+ RArray<TMMCScBkupArchiveDriveAndVector> iRestoreEntries;
+ //
+ CMMCScBkupWriteDataTransferRequest< TJavaTransferType >* iBackupTransferObjectMidlet;
+ CMMCScBkupWriteDataTransferRequest< TJavaTransferType >* iBackupTransferObjectMidletData;
+ CMMCScBkupReadDataTransferRequest< TJavaTransferType >* iRestoreTransferObjectMidlet;
+ CMMCScBkupReadDataTransferRequest< TJavaTransferType >* iRestoreTransferObjectMidletData;
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPJAVADATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpPassiveData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpPassiveData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPPASSIVEDATA_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPPASSIVEDATA_H__
+
+// System includes
+#include <connect/sbtypes.h>
+
+// User includes
+#include "CMMCScBkupStateOpAware.h"
+#include "TMMCScBkupArchiveVector.h"
+#include "CMMCScBkupTransferWriteRequest.h"
+#include "CMMCScBkupTransferReadRequest.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpPassiveData) : public CMMCScBkupStateOpAware, public MMMCScBkupIndexHandler
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpPassiveData* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateArchiveOpPassiveData( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpPassiveData( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+
+ public: // From CMMCScBkupStateOpAware
+ TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const;
+ TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const;
+
+ private: // From CMMCScBkupStateOpAware
+ void PerformStateInitBackupL( TBool aPartial );
+ void PerformStateInitRestoreL( TBool aPartial );
+ void PerformAsynchronousStateStepBackupL( TBool aPartial );
+ void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+ void PerformLastRightsBackupL( TBool aPartial );
+ TBool PerformAsynchronousErrorCleanupBackup( TBool aPartial, TInt aError );
+ TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+
+ private: // From CMMCScBkupState
+ void PerformAsynchronousCancellation();
+
+ private: // From MMMCScBkupIndexHandler
+ void AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive );
+
+ private: // Member data
+
+ //
+ TInt iIndexValueCurrent;
+ //
+ CMMCScBkupWriteDataTransferRequest< TTransferDataType >* iBackupTransferObject;
+ //
+ CMMCScBkupReadDataTransferRequest< TTransferDataType >* iRestoreTransferObject;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPPASSIVEDATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpPublicDataFiles.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpPublicDataFiles
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPPUBLICDATAFILES_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPPUBLICDATAFILES_H__
+
+// System includes
+#include <connect/sbtypes.h>
+
+// User includes
+#include "CMMCScBkupStateOpAware.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpPublicDataFiles) : public CMMCScBkupStateOpAware
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpPublicDataFiles* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpPublicDataFiles( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+
+ public: // From CMMCScBkupStateOpAware
+ TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const;
+ TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const;
+
+ private: // From CMMCScBkupStateOpAware
+ void PerformStateInitBackupL( TBool aPartial );
+ void PerformStateInitRestoreL( TBool aPartial );
+ void PerformAsynchronousStateStepBackupL( TBool aPartial );
+ void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+ void PerformLastRightsBackupL( TBool aPartial );
+ void PerformLastRightsRestoreL( TBool aPartial );
+ TBool PerformAsynchronousErrorCleanupBackup( TBool aPartial, TInt aError );
+ TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+ void PerformAsynchronousCancellation();
+
+ private: // Internal enumerations
+
+ /**
+ *
+ */
+ enum TState
+ {
+ EStateCommonIdle = 0,
+ EStateCommonKickOff,
+ EStateCommonProcessingFile,
+ EStateBackupAddIndexRecord,
+ EStateRestoreResetAttributes
+ };
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void CompressingAndWritingFileL();
+
+ /**
+ *
+ */
+ void DecompressingAndWritingFileL();
+
+ /**
+ *
+ */
+ void AddIndexRecordL();
+
+ /**
+ *
+ */
+ void RestoreFileAttributesL();
+
+ /**
+ *
+ */
+ inline void SetState(TState aState) { iState = aState; }
+
+ /**
+ *
+ */
+ inline TState State() const { return iState; }
+
+ private: // Member data
+
+ //
+ TInt iIndexValueCurrent;
+ //
+ TState iState;
+ };
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPPUBLICDATAFILES_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateArchiveOpSystemData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateArchiveOpSystemData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEARCHIVEOPSYSTEMDATA_H__
+#define __CMMCSCBKUPSTATEARCHIVEOPSYSTEMDATA_H__
+
+// System includes
+#include <connect/sbtypes.h>
+
+// User includes
+#include "CMMCScBkupStateOpAware.h"
+#include "TMMCScBkupArchiveVector.h"
+#include "CMMCScBkupTransferWriteRequest.h"
+#include "CMMCScBkupTransferReadRequest.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateArchiveOpSystemData) : public CMMCScBkupStateOpAware, public MMMCScBkupIndexHandler
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateArchiveOpSystemData* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateArchiveOpSystemData( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateArchiveOpSystemData( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+
+ public: // From CMMCScBkupStateOpAware
+ TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const;
+ TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const;
+
+ private: // From CMMCScBkupStateOpAware
+ void PerformStateInitBackupL( TBool aPartial );
+ void PerformStateInitRestoreL( TBool aPartial );
+ void PerformAsynchronousStateStepBackupL( TBool aPartial );
+ void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+ void PerformLastRightsBackupL( TBool aPartial );
+ void PerformLastRightsRestoreL( TBool aPartial );
+ TBool PerformAsynchronousErrorCleanupBackup( TBool aPartial, TInt aError );
+ TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+
+ private: // From CMMCScBkupState
+ void PerformAsynchronousCancellation();
+
+ private: // From MMMCScBkupIndexHandler
+ void AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive );
+
+ private: // Member data
+
+ //
+ TInt iIndexValueCurrent;
+ // Associated secure id of the data owner (if it has one)
+ TSecureId iSecureId;
+ //
+ CMMCScBkupWriteDataTransferRequest< TPackageDataType >* iBackupTransferObject;
+ CMMCScBkupReadDataTransferRequest< TPackageDataType >* iRestoreTransferObject;
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATEARCHIVEOPSYSTEMDATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateFactory.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateFactory
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEFACTORY_H__
+#define __CMMCSCBKUPSTATEFACTORY_H__
+
+// User includes
+#include "MMCScBkupStateIds.h"
+#include "MMCScBkupOperations.h"
+
+// Classes referenced
+class CMMCScBkupState;
+class MMMCScBkupDriver;
+
+// Type definitions
+typedef RPointerArray<CMMCScBkupState> RMMCScBkupStateArray;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+class CMMCScBkupStateFactory : public CBase
+ {
+ public:
+ /**
+ *
+ */
+ static CMMCScBkupStateFactory* FactoryByOperationTypeLC( TMMCScBkupOperationType aOperationType );
+
+ protected:
+
+ /**
+ *
+ */
+ CMMCScBkupStateFactory();
+
+ public: // From CMMCScBkupStateFactory
+
+ /**
+ *
+ */
+ virtual CMMCScBkupState* GetStateLC(TMMCScBkupStateId aCurrentState, MMMCScBkupDriver& aDriver) = 0;
+ };
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateFactoryBackup) : public CMMCScBkupStateFactory
+ {
+ public:
+ static CMMCScBkupStateFactoryBackup* NewL();
+
+ private:
+ CMMCScBkupStateFactoryBackup();
+
+ public: // From CMMCScBkupStateFactory
+ CMMCScBkupState* GetStateLC(TMMCScBkupStateId aRequiredType, MMMCScBkupDriver& aDriver);
+ };
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateFactoryRestore) : public CMMCScBkupStateFactory
+ {
+ public:
+ static CMMCScBkupStateFactoryRestore* NewL();
+
+ private:
+ CMMCScBkupStateFactoryRestore();
+
+ public: // From CMMCScBkupStateFactory
+ CMMCScBkupState* GetStateLC(TMMCScBkupStateId aRequiredType, MMMCScBkupDriver& aDriver);
+ };
+
+
+
+
+#endif // __CMMCSCBKUPSTATEFACTORY_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateGetDataOwnerStatuses.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateGetDataOwnerStatuses
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEGETDATAOWNERSTATUSES_H__
+#define __CMMCSCBKUPSTATEGETDATAOWNERSTATUSES_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateGetDataOwnerStatuses) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateGetDataOwnerStatuses* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateGetDataOwnerStatuses( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateGetDataOwnerStatuses( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+ TStateExecution CategorySpecific() const { return EStatePerCategory; }
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+
+ private: // Internal state enumeration
+
+ /**
+ *
+ */
+ enum TState
+ {
+ EPrearingQuery = 0,
+ EGettingStatus,
+ EProcessingResults
+ };
+
+ private: // Internal methods
+ inline TState State() const { return iState; }
+ inline void SetState(TState aState) { iState = aState; }
+ //
+ void PrepareQueryL();
+ void ProcessStatusResultsL();
+
+ private: // Member data
+
+ //
+ RSIDStatusArray iStatusArray;
+ //
+ TState iState;
+ };
+
+
+
+
+#endif // __CMMCSCBKUPSTATEGETDATAOWNERSTATUSES_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateGetDataOwners.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateGetDataOwners
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEGETDATAOWNERS_H__
+#define __CMMCSCBKUPSTATEGETDATAOWNERS_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateGetDataOwners) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateGetDataOwners* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateGetDataOwners( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ };
+
+
+
+
+#endif // __CMMCSCBKUPSTATEGETDATAOWNERS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateNotifyAllSnapshotsSupplied.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateNotifyAllSnapshotsSupplied
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATENOTIFYALLSNAPSHOTSSUPPLIED_H__
+#define __CMMCSCBKUPSTATENOTIFYALLSNAPSHOTSSUPPLIED_H__
+
+// User includes
+#include "MMCScBkupOperations.h"
+#include "CMMCScBkupState.h"
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateNotifyAllSnapshotsSupplied) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateNotifyAllSnapshotsSupplied* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateNotifyAllSnapshotsSupplied( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ };
+
+
+
+
+#endif // __CMMCSCBKUPSTATENOTIFYALLSNAPSHOTSSUPPLIED_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateOpAware.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateOpAware
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEOPAWARE_H__
+#define __CMMCSCBKUPSTATEOPAWARE_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+#include "MMCScBkupOperations.h"
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateOpAware) : public CMMCScBkupState
+ {
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateOpAware( MMMCScBkupDriver& aDriver, TInt aPriority = CActive::EPriorityIdle );
+
+ public: // From CMMCScBkupState
+
+ /**
+ *
+ */
+ TMMCScBkupStateId NextStateId() const;
+
+ /**
+ *
+ */
+ TStateExecution CategorySpecific() const { return EStatePerCategory; }
+
+ protected: // New Framework
+
+ /**
+ *
+ */
+ virtual TMMCScBkupStateId NextStateBackupId( TBool aPartial ) const = 0;
+
+ /**
+ *
+ */
+ virtual TMMCScBkupStateId NextStateRestoreId( TBool aPartial ) const = 0;
+
+ protected: // New Framework
+
+ /**
+ *
+ */
+ virtual void PerformStateInitBackupL( TBool aPartial ) = 0;
+
+ /**
+ *
+ */
+ virtual void PerformStateInitRestoreL( TBool aPartial ) = 0;
+
+ /**
+ *
+ */
+ virtual void PerformAsynchronousStateStepBackupL( TBool aPartial );
+
+ /**
+ *
+ */
+ virtual void PerformAsynchronousStateStepRestoreL( TBool aPartial );
+
+ /**
+ *
+ */
+ virtual void PerformAsynchronousCancellationBackup( TBool aPartial );
+
+ /**
+ *
+ */
+ virtual void PerformAsynchronousCancellationRestore( TBool aPartial );
+
+ /**
+ *
+ */
+ virtual void PerformLastRightsBackupL( TBool aPartial );
+
+ /**
+ *
+ */
+ virtual void PerformLastRightsRestoreL( TBool aPartial );
+
+ /**
+ *
+ */
+ virtual TBool PerformAsynchronousErrorCleanupBackup( TBool aPartial, TInt aError );
+
+ /**
+ *
+ */
+ virtual TBool PerformAsynchronousErrorCleanupRestore( TBool aPartial, TInt aError );
+
+ protected: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ void PerformAsynchronousCancellation();
+ void PerformLastRightsL();
+ TBool PerformAsynchronousErrorCleanup( TInt aError );
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATEOPAWARE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateRequestListOfPublicFiles.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateRequestListOfPublicFiles
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEREQUESTLISTOFPUBLICFILES_H__
+#define __CMMCSCBKUPSTATEREQUESTLISTOFPUBLICFILES_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+#include "CMMCScBkupDriveSpecificRequest.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+class CMMCScBkupStateRequestSpecificPublicFileInfo;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateRequestListOfPublicFiles) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateRequestListOfPublicFiles* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateRequestListOfPublicFiles( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateRequestListOfPublicFiles( MMMCScBkupDriver& aDriver );
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL( );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+ TStateExecution CategorySpecific() const { return EStatePerCategory; }
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ TBool PerformAsynchronousErrorCleanup(TInt aError);
+ void PerformAsynchronousCancellation();
+ void PerformLastRightsL();
+
+ private: // Data members
+
+ //
+ TInt iCurrentDataOwnerIndex;
+ //
+ CMMCScBkupStateRequestSpecificPublicFileInfo* iRequestObject;
+ };
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+class CMMCScBkupStateRequestSpecificPublicFileInfo : public CMMCScBkupDriveSpecificRequest
+ {
+ public:
+
+ /**
+ *
+ */
+ static CMMCScBkupStateRequestSpecificPublicFileInfo* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateRequestSpecificPublicFileInfo( MMMCScBkupDriver& aDriver );
+
+ public: // API
+
+ /**
+ *
+ */
+ void RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver );
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+
+ private: // Internal methods
+ inline MMMCScBkupDriver& Driver() { return iDriver; }
+
+ private: // Member data
+
+ //
+ MMMCScBkupDriver& iDriver;
+ //
+ CMMCScBkupDataOwnerInfo* iOwner;
+ };
+
+
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATEREQUESTLISTOFPUBLICFILES_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateRequestSizeOfBackupData.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateRequestSizeOfBackupData
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEREQUESTSIZEOFBACKUPDATA_H__
+#define __CMMCSCBKUPSTATEREQUESTSIZEOFBACKUPDATA_H__
+
+// User includes
+#include "MMCScBkupOperations.h"
+#include "CMMCScBkupState.h"
+#include "CMMCScBkupDriveSpecificRequest.h"
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+class CMMCScBkupStateRequestSizeOfDataOwner;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateRequestSizeOfBackupData) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateRequestSizeOfBackupData* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupStateRequestSizeOfBackupData( );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateRequestSizeOfBackupData( MMMCScBkupDriver& aDriver );
+
+ /**
+ * Second phase constructor
+ */
+ void ConstructL( );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+ TStateExecution CategorySpecific() const { return EStatePerCategory; }
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ TBool PerformAsynchronousErrorCleanup( TInt aError );
+ void PerformAsynchronousCancellation();
+
+ private: // Data members
+
+ //
+ TInt iCurrentDataOwnerIndex;
+ //
+ CMMCScBkupStateRequestSizeOfDataOwner* iRequestObject;
+ };
+
+
+
+
+
+
+
+/**
+* NB. This class only sizes active, passive, system and java data. Public
+* data is sized elsewhere.
+*
+* @since 3.0
+*/
+class CMMCScBkupStateRequestSizeOfDataOwner : public CMMCScBkupDriveSpecificRequest
+ {
+ public:
+
+ /**
+ *
+ */
+ static CMMCScBkupStateRequestSizeOfDataOwner* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateRequestSizeOfDataOwner( MMMCScBkupDriver& aDriver );
+
+ public: // API
+
+ /**
+ *
+ */
+ void RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver );
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+
+ private: // Internal methods
+ inline MMMCScBkupDriver& Driver() { return iDriver; }
+ //
+ TUint GetActiveAndPassiveDataSizesL( const CDataOwnerInfo& aOwner, CSBGenericDataType& aIdentifier, TDriveNumber aDrive );
+ TUint GetSIDSpecificSizeL( TSecureId aSecureID, TDriveNumber aDrive, TTransferDataType aDataType );
+ TUint GetSystemDataSizesL( const CDataOwnerInfo& aOwner, CSBGenericDataType& aIdentifier, TDriveNumber aDrive );
+ TUint GetJavaDataSizesL( const CDataOwnerInfo& aOwner, CSBGenericDataType& aIdentifier, TDriveNumber aDrive );
+ TUint GetJavaSpecificSizeL( const TDesC& aHash, TDriveNumber aDrive, TJavaTransferType aDataType );
+
+ private: // Member data
+
+ //
+ MMMCScBkupDriver& iDriver;
+ //
+ CMMCScBkupDataOwnerInfo* iOwner;
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPSTATEREQUESTSIZEOFBACKUPDATA_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateSetPhoneMode.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupStateSetPhoneMode
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATESETPHONEMODE_H__
+#define __CMMCSCBKUPSTATESETPHONEMODE_H__
+
+// User includes
+#include "MMCScBkupOperations.h"
+#include "CMMCScBkupState.h"
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateSetPhoneMode) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateSetPhoneMode* NewL( MMMCScBkupDriver& aDriver );
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateSetPhoneMode( MMMCScBkupDriver& aDriver );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+ };
+
+
+
+
+#endif // __CMMCSCBKUPSTATESETPHONEMODE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupStateValidateDiskSpace.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2005-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: Declaration for CMMCScBkupStateValidateDiskSpace
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPSTATEVALIDATEDISKSPACE_H__
+#define __CMMCSCBKUPSTATEVALIDATEDISKSPACE_H__
+
+// User includes
+#include "CMMCScBkupState.h"
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupStateValidateDiskSpace) : public CMMCScBkupState
+ {
+ public:
+
+ /**
+ * Static constructor
+ */
+ static CMMCScBkupStateValidateDiskSpace* NewL( MMMCScBkupDriver& aDriver );
+
+ /**
+ * Destructor
+ */
+ ~CMMCScBkupStateValidateDiskSpace();
+
+ private:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupStateValidateDiskSpace( MMMCScBkupDriver& aDriver );
+
+ // Second phase
+ void ConstructL( );
+
+ public: // From CMMCScBkupState
+ TMMCScBkupStateId StateId() const;
+ TMMCScBkupStateId NextStateId() const;
+ TStateExecution CategorySpecific() const { return EStatePerCategoryCommon; }
+
+ private: // From CMMCScBkupState
+ void PerformStateInitL();
+ void PerformAsynchronousStateStepL();
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void ValidateFreeSpaceBeforeBackupL();
+ void ValidateFreeSpaceBeforeRestoreL();
+
+ private: // Member data
+
+ //
+ TInt64 iCumulatedSize;
+ //
+ RArray<TMMCScBkupDriveAndSize> iDriveSizes;
+ //
+ RArray<TMMCScBkupDriveAndSize> iDriveMaxFileSizes;
+ };
+
+
+#endif // __CMMCSCBKUPSTATEVALIDATEDISKSPACE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupTransferReadRequest.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupReadDataTransferRequestBase
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPTRANSFERREADREQUEST_H__
+#define __CMMCSCBKUPTRANSFERREADREQUEST_H__
+
+// User includes
+#include "MMCScBkupConfig.h"
+#include "MMCScBkupSBEUtils.h"
+#include "TMMCScBkupOwnerDataType.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "CMMCScBkupTransferRequest.h"
+#include "CMMCScBkupIndexWithIdentifier.h"
+
+// Classes referenced
+class MMMCScBkupDriver;
+class CMMCScBkupArchiveFooter;
+
+// Constants
+const TInt KMMCScBkupDefaultChunkReadSize = 4096; // 4k read chunks
+
+// CMMCScBkupIndexEntry
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupReadDataTransferRequestBase) : public CMMCScBkupTransferRequestBase
+ {
+ public:
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupReadDataTransferRequestBase();
+
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupReadDataTransferRequestBase( MMMCScBkupDriver& aDriver,
+ TMMCScBkupOwnerDataType aElementType,
+ TInt aChunkSize = KMMCScBkupDefaultChunkReadSize,
+ TInt aPriority = CActive::EPriorityIdle );
+
+ public: // API
+
+ /**
+ *
+ */
+ void RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver, const RArray<TMMCScBkupArchiveDriveAndVector>& aEntries );
+
+ protected: // New Framework API
+
+ /**
+ *
+ */
+ virtual CSBGenericTransferType* PrepareTransferTypeL( const CSBGenericDataType& aGeneric,
+ TDriveNumber aDrive, TInt aVersion ) const = 0;
+
+ private: // From CMMCScBkupTransferRequest
+ TBool ProcessChunkOfDataL();
+ void PrepareDataTransferL();
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void ReadChunkL( TDes8& aSink, TInt aLength );
+
+ /**
+ *
+ */
+ TBool DoProcessChunkOfDataL();
+
+ /**
+ *
+ */
+ TBool PrepareForNextEntry();
+
+ /**
+ *
+ */
+ TDriveNumber CurrentDrive() const;
+
+ /**
+ *
+ */
+ const TMMCScBkupArchiveVector& CurrentReadInfo() const;
+
+ /**
+ *
+ */
+ const TMMCScBkupArchiveDriveAndVector& CurrentEntry() const;
+
+ /**
+ *
+ */
+ inline TInt CurrentOffset() const { return iCurrentOffset; }
+
+ private: // From CActive
+ TInt RunError( TInt aError );
+
+ private: // Debugging support
+
+ /**
+ *
+ */
+#ifdef DEBUGGING_DATA_TRANSFER
+ void DumpTransferDataL( RFs& aFsSession, const TDesC8& aData ) const;
+#endif
+
+ private: // Member data
+
+ // Owned externally
+ //
+ const RArray<TMMCScBkupArchiveDriveAndVector>* iEntries;
+
+ // Owned by this object
+
+ // Pointer to the SBE's shared chunk. It *must* be a reference
+ // because otherwise the SBE loses track of what we actually write
+ // to the chunk!
+ TPtr8* iTransferChunkPointer;
+ //
+ const TInt iReadChunkSize;
+ //
+ TInt iCurrentIndex;
+ //
+ TBool iFinishedSupplyingData;
+ //
+ CSBGenericTransferType* iTransferType;
+ //
+ TInt iCurrentOffset;
+ //
+ HBufC8* iTemporaryTransferSink;
+ };
+
+
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+template <class Type>
+class CMMCScBkupReadDataTransferRequest : public CMMCScBkupReadDataTransferRequestBase
+ {
+ public: // Construction
+
+ /**
+ *
+ */
+ inline static CMMCScBkupReadDataTransferRequest* NewL( MMMCScBkupDriver& aDriver,
+ TMMCScBkupOwnerDataType aElementType,
+ Type aTransferEnumType,
+ TInt aChunkSize = KMMCScBkupDefaultChunkReadSize,
+ TInt aPriority = CActive::EPriorityIdle )
+ {
+ CMMCScBkupReadDataTransferRequest<Type>* self = new(ELeave) CMMCScBkupReadDataTransferRequest<Type>( aDriver, aElementType, aTransferEnumType, aChunkSize, aPriority );
+ return self;
+ }
+
+ private: // Internal construction
+
+ /**
+ * C++ default constructor
+ */
+ inline CMMCScBkupReadDataTransferRequest( MMMCScBkupDriver& aDriver,
+ TMMCScBkupOwnerDataType aElementType,
+ Type aTransferEnumType,
+ TInt aChunkSize = KMMCScBkupDefaultChunkReadSize,
+ TInt aPriority = CActive::EPriorityIdle )
+ : CMMCScBkupReadDataTransferRequestBase( aDriver, aElementType, aChunkSize, aPriority),
+ iTransferEnumType( aTransferEnumType )
+ {
+ }
+
+ private: // From CMMCScBkupTransferRequest
+ inline CSBGenericTransferType* PrepareTransferTypeL( const CSBGenericDataType& aGeneric,
+ TDriveNumber aDrive, TInt aVersion ) const
+ {
+ CSBGenericTransferType* transferType = MMCScBkupSBEUtils::TransferTypeLC( aGeneric, aDrive,
+ iTransferEnumType, aVersion );
+ CleanupStack::Pop( transferType );
+ return transferType;
+ }
+
+ private: // Member data
+
+ //
+ Type iTransferEnumType;
+ };
+
+
+
+#endif // __CMMCSCBKUPTRANSFERREADREQUEST_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupTransferRequest.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupTransferRequestBase
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPTRANSFERREQUEST_H__
+#define __CMMCSCBKUPTRANSFERREQUEST_H__
+
+// System includes
+#include <e32base.h>
+#include <connect/sbeclient.h>
+
+// User includes
+#include "TMMCScBkupDriveFilter.h"
+#include "TMMCScBkupOwnerDataType.h"
+#include "TMMCScBkupArchiveVector.h"
+
+// Namespaces
+using namespace conn;
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+class MMMCScBkupDriver;
+class TMMCScBkupArchiveVector;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupTransferRequestBase) : public CActive
+ {
+ public:
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupTransferRequestBase();
+
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupTransferRequestBase( MMMCScBkupDriver& aDriver, TMMCScBkupOwnerDataType aElementType, TBool aUpdateOperationalSizes = ETrue, TInt aPriority = CActive::EPriorityIdle );
+
+ public: // API
+
+ /**
+ *
+ */
+ virtual void RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver );
+
+ protected: // From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError );
+
+ protected: // State relation
+
+ /**
+ *
+ */
+ enum TState
+ {
+ EIdle = 0,
+ EFinished,
+ //
+ ETransferData,
+ EProcessData
+ };
+
+ /**
+ *
+ */
+ inline TState State() const { return iState; }
+
+ /**
+ *
+ */
+ inline void SetState( TState aState ) { iState = aState; }
+
+ protected: // Internal framework API
+
+ /**
+ *
+ */
+ virtual TBool ProcessChunkOfDataL() = 0;
+
+ /**
+ *
+ */
+ virtual void PrepareDataTransferL() = 0;
+
+ /**
+ *
+ */
+ virtual TDriveNumber CurrentDrive() const = 0;
+
+ /**
+ *
+ */
+ virtual void SingleDriveTransferCompleteL();
+
+ /**
+ *
+ */
+ virtual void TransferCompleteL();
+
+ protected: // Internal methods
+
+ /**
+ *
+ */
+ void CompleteSelf( TInt aCompletionCode = KErrNone );
+
+ /**
+ *
+ */
+ inline MMMCScBkupDriver& Driver() { return iDriver; }
+
+ /**
+ *
+ */
+ inline CMMCScBkupDataOwnerInfo& DataOwner() { return *iDataOwner; }
+
+ /**
+ *
+ */
+ inline const CMMCScBkupDataOwnerInfo& DataOwner() const { return *iDataOwner; }
+
+ /**
+ *
+ */
+ inline TMMCScBkupArchiveVector& Info() { return iCurrentInfo; }
+
+ /**
+ *
+ */
+ inline const TMMCScBkupArchiveVector& Info() const { return iCurrentInfo; }
+
+ /**
+ *
+ */
+ inline TMMCScBkupOwnerDataType ElementType() const { return iElementType; }
+
+ /**
+ *
+ */
+ inline void DataTransferred( TInt aAmount ) { iDataTransferred += aAmount; }
+
+ /**
+ *
+ */
+ inline TInt AmountOfDataTransferred() const { return iDataTransferred; }
+
+ /**
+ *
+ */
+ inline void ResetDataTransferCounter() { iDataTransferred = 0; }
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ void SetObserver( TRequestStatus& aObserver );
+
+ /**
+ *
+ */
+ void CompleteObserverRequest( TInt aCompletionCode );
+
+ private: // Internal state methods
+
+ /**
+ *
+ */
+ void ProcessDataChunkL();
+
+ private: // Member data
+
+ // Owned externally
+ //
+ MMMCScBkupDriver& iDriver;
+ //
+ CMMCScBkupDataOwnerInfo* iDataOwner;
+ //
+ TRequestStatus* iObserver;
+
+ // Owned by this class
+ //
+ TInt iDataTransferred;
+ //
+ TState iState;
+ //
+ TMMCScBkupArchiveVector iCurrentInfo;
+ //
+ const TMMCScBkupOwnerDataType iElementType;
+ //
+ const TBool iUpdateOperationalSizes;
+ };
+
+
+
+
+
+
+#endif // __CMMCSCBKUPTRANSFERREQUEST_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/CMMCScBkupTransferWriteRequest.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2005 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: Declaration for CMMCScBkupWriteDataTransferRequestBase
+*
+*
+*/
+
+#ifndef __CMMCSCBKUPTRANSFERWRITEREQUEST_H__
+#define __CMMCSCBKUPTRANSFERWRITEREQUEST_H__
+
+// User includes
+#include "MMCScBkupConfig.h"
+#include "MMCScBkupSBEUtils.h"
+#include "TMMCScBkupOwnerDataType.h"
+#include "CMMCScBkupTransferRequest.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+
+// Classes referenced
+class CMMCScBkupArchiveFooter;
+class CMMCScBkupDriveAndOperationTypeManager;
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMMCScBkupIndexHandler
+ {
+ public:
+
+ /**
+ *
+ */
+ virtual void AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive ) = 0;
+ };
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(CMMCScBkupWriteDataTransferRequestBase) : public CMMCScBkupTransferRequestBase
+ {
+ public:
+
+ /**
+ * C++ destructor
+ */
+ ~CMMCScBkupWriteDataTransferRequestBase();
+
+ public: // API
+
+ /**
+ *
+ */
+ void RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver, const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperations );
+
+ protected:
+
+ /**
+ * C++ default constructor
+ */
+ CMMCScBkupWriteDataTransferRequestBase( MMMCScBkupDriver& aDriver,
+ MMMCScBkupIndexHandler& aIndexHandler,
+ TMMCScBkupOwnerDataType aElementType,
+ TSBDerivedType aExpectedTransferType,
+ TInt aPriority = CActive::EPriorityIdle );
+
+ protected: // New Framework API
+
+ /**
+ *
+ */
+ virtual CSBGenericTransferType* PrepareTransferTypeL( const CSBGenericDataType& aGeneric,
+ TDriveNumber aDrive, TInt aVersion ) const = 0;
+
+ protected: // From CMMCScBkupTransferRequestBase
+
+ /**
+ *
+ */
+ TBool ProcessChunkOfDataL();
+
+ /**
+ *
+ */
+ void PrepareDataTransferL();
+
+ /**
+ *
+ */
+ TDriveNumber CurrentDrive() const;
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ inline void SetCurrentDrive( TDriveNumber aDrive ) { iCurrentDrive = aDrive; }
+
+ /**
+ *
+ */
+ void ValidateTransferInfoL( CSBGenericTransferType* aInfo );
+
+ /**
+ *
+ */
+ void RequestDataTransferL();
+
+ private: // From CActive
+ TInt RunError( TInt aError );
+
+ private:
+
+ /**
+ *
+ */
+#ifdef DEBUGGING_DATA_TRANSFER
+ void DumpTransferDataL( RFs& aFsSession, const TDesC8& aData ) const;
+#endif
+
+
+ private: // Member data
+
+ // Owned by this class
+ //
+ TMMCScBkupDriveFilter iDriveFilter;
+ //
+ MMMCScBkupIndexHandler& iIndexHandler;
+ //
+ const TSBDerivedType iExpectedTransferType;
+ //
+ const CMMCScBkupDriveAndOperationTypeManager* iDriveAndOperations;
+ //
+ RWriteStream iStream;
+ //
+ TBool iStreamIsOpen;
+ //
+ CSBGenericTransferType* iTransferType;
+ //
+ TBool iAdditionalTransferRequired;
+ //
+ TDriveNumber iCurrentDrive;
+ };
+
+
+
+
+
+
+
+
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+template <class Type>
+class CMMCScBkupWriteDataTransferRequest : public CMMCScBkupWriteDataTransferRequestBase
+ {
+ public: // Construction
+
+ /**
+ * Static constructor
+ */
+ inline static CMMCScBkupWriteDataTransferRequest* NewL( MMMCScBkupDriver& aDriver,
+ MMMCScBkupIndexHandler& aIndexHandler,
+ TMMCScBkupOwnerDataType aElementType,
+ TSBDerivedType aExpectedTransferType,
+ Type aTransferEnumType,
+ TInt aPriority = CActive::EPriorityIdle )
+ {
+ CMMCScBkupWriteDataTransferRequest<Type>* self = new(ELeave) CMMCScBkupWriteDataTransferRequest<Type>( aDriver, aIndexHandler, aElementType, aExpectedTransferType, aTransferEnumType, aPriority );
+ return self;
+ }
+
+ private: // Internal construction
+
+ /**
+ * C++ default constructor
+ */
+ inline CMMCScBkupWriteDataTransferRequest( MMMCScBkupDriver& aDriver,
+ MMMCScBkupIndexHandler& aIndexHandler,
+ TMMCScBkupOwnerDataType aElementType,
+ TSBDerivedType aExpectedTransferType,
+ Type aTransferEnumType,
+ TInt aPriority )
+ : CMMCScBkupWriteDataTransferRequestBase( aDriver, aIndexHandler, aElementType, aExpectedTransferType, aPriority ),
+ iTransferEnumType( aTransferEnumType )
+ {
+ }
+
+ private: // From CMMCScBkupTransferRequest
+ inline CSBGenericTransferType* PrepareTransferTypeL( const CSBGenericDataType& aGeneric,
+ TDriveNumber aDrive, TInt aVersion ) const
+ {
+ CSBGenericTransferType* transferType = MMCScBkupSBEUtils::TransferTypeLC( aGeneric, aDrive,
+ iTransferEnumType, aVersion );
+ CleanupStack::Pop( transferType );
+ return transferType;
+ }
+
+ private: // Member data
+
+ //
+ Type iTransferEnumType;
+ };
+
+
+
+
+
+#endif // __CMMCSCBKUPTRANSFERWRITEREQUEST_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupArchiveFlags.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2005 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: Declaration for TMMCScBkupArchiveFlags
+*
+*
+*/
+
+#ifndef __MMCSCBKUPARCHIVEFLAGS_H__
+#define __MMCSCBKUPARCHIVEFLAGS_H__
+
+enum TMMCScBkupArchiveFlags
+ {
+ EMMCScBkupArchiveFlagsDefault = 0x000,
+ EMMCScBkupArchiveFlagsContentValid = 0x001
+ };
+
+
+#endif // __MMCSCBKUPARCHIVEFLAGS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupArchiveUtils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2005 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: Declaration for MMCScBkupArchiveUtils
+*
+*
+*/
+
+#ifndef __MMCSCBKUPARCHIVEUTILS_H__
+#define __MMCSCBKUPARCHIVEUTILS_H__
+
+// System includes
+#include <f32file.h>
+#include <s32strm.h>
+#include <babitflags.h>
+
+// User includes
+#include "TMMCScBkupArchiveVector.h"
+
+// Classes referenced
+class CMMCScBkupArchiveHeader;
+class MMMCScBkupArchiveDataInterface;
+
+// Constants
+const TInt KMMCScBkupArchiveFileFormatFirstRestorableMajorVersion = 1;
+const TInt KMMCScArchiveUidsByteCount = sizeof( TCheckedUid );
+const TInt KMMCScArchiveVersionByteCount = sizeof( TInt8 ) + sizeof( TInt8 ) + sizeof( TInt16 );
+const TInt KMMCScArchiveFooterLengthByteCount = sizeof( TUint32 );
+const TInt KMMCScArchiveFlagsByteCount = sizeof( TUint32 );
+const TInt KMMCScArchiveCrcByteCount = sizeof( TUint32 );
+const TInt KMMCScArchiveCategoryByteCount = sizeof( TUint32 );
+const TInt KMMCScSpareByteCount = 5 * sizeof(TInt32);
+const TInt KMMCScArchivePhoneModelStringLength = sizeof(TUint8);
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMCScBkupArchiveUtils
+ {
+ public: // API
+
+ /**
+ *
+ */
+ static void ArchiveUidType( TUidType& aType );
+
+ /**
+ *
+ */
+ static void ArchiveCheckedUid( TCheckedUid& aCheckedUids );
+
+ /**
+ *
+ */
+ static HBufC8* PhoneModelFromArchiveLC( MMMCScBkupArchiveDataInterface& aADI );
+
+ /**
+ *
+ */
+ static void ReadPhoneValidityInformationL( RFs& aFsSession, const TDesC& aFileName, HBufC8*& aPhoneModelData, TBitFlags& aArchiveFlags, TVersion& aArchiveVersion );
+
+ /**
+ *
+ */
+ static TVersion ArchiveRunTimeFileFormatVersion();
+
+ /**
+ *
+ */
+ static const TMMCScBkupArchiveVector& WriteHeaderL( MMMCScBkupArchiveDataInterface& aADI, TBitFlags aCategory );
+
+ /**
+ *
+ */
+ static const TMMCScBkupArchiveVector& ReadHeaderL( MMMCScBkupArchiveDataInterface& aADI, CMMCScBkupArchiveHeader& aHeader );
+
+ /**
+ *
+ */
+ static void SetArchiveContentAsValidL( RFile64& aArchive );
+
+ /**
+ *
+ */
+ static void SetFooterLengthL( RFile64& aArchive, TInt aLength );
+
+ /**
+ *
+ */
+ static TBitFlags ReadBkUpCategoryInformationL( RFs& aFsSession, const TDesC& aFileName );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ *
+ */
+ static void SetArchiveCrcsL( RFile64& aArchive, TUint32 aCrc );
+
+ /**
+ *
+ */
+ static TBool ValidateArchiveCrcsL( RFs& aFsSession, const TDesC& aFileName );
+#endif
+
+ private: // Offsets
+ enum
+ {
+ EArchiveOffsetUids = 0,
+ EArchiveOffsetFileFormatVersion = EArchiveOffsetUids + KMMCScArchiveUidsByteCount,
+ EArchiveOffsetFooterLength = EArchiveOffsetFileFormatVersion + KMMCScArchiveVersionByteCount,
+ EArchiveOffsetArchiveFlags = EArchiveOffsetFooterLength + KMMCScArchiveFooterLengthByteCount,
+ EArchiveOffsetArchivePayloadCRC = EArchiveOffsetArchiveFlags + KMMCScArchiveFlagsByteCount,
+ EArchiveOffsetArchiveCategory = EArchiveOffsetArchivePayloadCRC + KMMCScArchiveCrcByteCount,
+ EArchiveOffsetArchiveHeaderCRC = EArchiveOffsetArchiveCategory + KMMCScArchiveCategoryByteCount,
+ EArchiveOffsetPadding = EArchiveOffsetArchiveHeaderCRC + KMMCScArchiveCrcByteCount,
+ EArchiveOffsetPhoneModelStringLength = EArchiveOffsetPadding + KMMCScSpareByteCount,
+ EArchiveOffsetPhoneModelString = EArchiveOffsetPhoneModelStringLength + KMMCScArchivePhoneModelStringLength
+ };
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ static TInt OffsetOfModelInformation();
+
+ /**
+ *
+ */
+ static HBufC8* PhoneModelFromArchiveLC( RReadStream& aStream );
+
+ /**
+ *
+ */
+ static TUint32 DefaultArchiveFlags();
+
+ /**
+ *
+ */
+ static TBitFlags ReadArchiveFlagsL( RFile64& aFile );
+
+ /**
+ *
+ */
+ static void ReadArchiveVersionL( RFile64& aFile, TVersion& aVersion );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ *
+ */
+ static void SetArchiveCrcL( RFile64& aArchive, TUint32 aCrc, TUint aOffset );
+
+ /**
+ *
+ */
+ static void CalculateCrcFromArchive( TUint32& aCrc, RFile64& aArchive, TUint32 aOffset, TUint32 aLength );
+#endif
+ };
+
+
+
+
+#endif // __MMCSCBKUPARCHIVEUTILS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupConfig.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2005 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: Macros for scheduled backup configuration
+*
+*
+*/
+
+#ifndef __MMCSCBKUPCONFIG_H__
+#define __MMCSCBKUPCONFIG_H__
+
+// System includes
+#include <e32std.h>
+#include <f32file.h>
+
+
+/**
+*
+*
+* @since 3.0
+*/
+const TDriveNumber KMMCScBkupTempFileDrive = EDriveC;
+
+
+/**
+*
+* Folder for temporary files, which will be cleaned by Starter if temporary files not deleted.
+* Currently in 3.0/3.1 folder from C and E drives is cleaned.
+*
+* @since 3.0
+*/
+_LIT(KMMCScBkupTempDir, ":\\System\\Temp\\");
+
+
+/**
+*
+*
+* @since 3.0
+*/
+_LIT(KMMCScBkupMediaGalleryThumbnailFolder, "*\\_PAlbTN\\*"); //Photo Album Thumbnail folder
+_LIT(KMMCScBkupVideoCenterFolderPath, "C:\\Data\\videocenter\\"); //video center folder
+_LIT(KMMCScBkupVideoCenterFolder, "*\\videocenter\\*"); //video center folder
+/**
+*
+* Allows the data that is received from the SBE or sent to the SBE to be dumped to individual
+* files for comparison and inspection purposes.
+*
+* @since 3.0
+*/
+//#define DEBUGGING_DATA_TRANSFER
+
+/**
+*
+* Controls the various directories and files that are generated when debugging
+* data transfer
+*
+* @since 3.0
+*/
+#ifdef DEBUGGING_DATA_TRANSFER
+ _LIT(KMMCScBkupDataTransferDebuggingAllFiles, "*.*");
+ _LIT(KMMCScBkupDataTransferDebuggingFileName, "MMCBackupDataTransfer_0x%08x_(%c).dat");
+ //
+ _LIT(KMMCScBkupDataTransferDebuggingPathRoot, "MMCDataDump\\");
+ _LIT(KMMCScBkupDataTransferDebuggingPathDataJava, "JavData\\");
+ _LIT(KMMCScBkupDataTransferDebuggingPathDataSystem, "SysData\\");
+ _LIT(KMMCScBkupDataTransferDebuggingPathDataPassive, "PasData\\");
+ _LIT(KMMCScBkupDataTransferDebuggingPathDataActive, "ActData\\");
+ //
+ _LIT(KMMCScBkupDataTransferDebuggingPathDataBackup, "Backup\\");
+ _LIT(KMMCScBkupDataTransferDebuggingPathDataRestore, "Restore\\");
+#endif
+
+/**
+*
+* Always makes the SBE logging directory - ensures logs are available
+*
+* @since 3.0
+*/
+//#define MAKE_SBE_LOGGING_DIRECTORY
+
+/**
+*
+* Always makes the MMC Engine logging directory
+*
+* @since 3.0
+*/
+//#define MAKE_MMCSCBKUP_LOGGING_DIRECTORY
+
+/**
+*
+* Controls whether logging is to file or to RDebug
+*
+* @since 3.0
+*/
+#ifdef _DEBUG
+# define __MMCSCBKUPLOGGING_ENABLED__
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+//# define __MMCSCBKUP_DATA_LOGGING_ENABLED__
+#endif
+//# define __MMCSCBKUPLOGGING_MODE_FILE__
+# define __MMCSCBKUPLOGGING_MODE_RDEBUG__
+#endif
+
+
+/**
+* Use these to disable backup for the various data types.
+*
+* E.g:
+*
+* __DEBUG_TESTING_SKIP_BACKUP_REG_DATA return
+*
+* ... will ensure that registration data is not backed up (for any DO).
+*
+* @since 3.0
+*/
+#define __DEBUG_TESTING_SKIP_BACKUP_REG_DATA
+#define __DEBUG_TESTING_SKIP_BACKUP_ACT_DATA
+#define __DEBUG_TESTING_SKIP_BACKUP_PAS_DATA
+#define __DEBUG_TESTING_SKIP_BACKUP_SYS_DATA
+#define __DEBUG_TESTING_SKIP_BACKUP_JAV_DATA
+#define __DEBUG_TESTING_SKIP_BACKUP_PUB_DATA
+
+/**
+* Use these to disable restore for the various data types
+*
+* E.g:
+*
+* __DEBUG_TESTING_SKIP_RESTORE_REG_DATA return
+*
+* ... will ensure that registration data is not restored (for any DO).
+*
+* @since 3.0
+*/
+#define __DEBUG_TESTING_SKIP_RESTORE_REG_DATA
+#define __DEBUG_TESTING_SKIP_RESTORE_ACT_DATA
+#define __DEBUG_TESTING_SKIP_RESTORE_PAS_DATA
+#define __DEBUG_TESTING_SKIP_RESTORE_SYS_DATA
+#define __DEBUG_TESTING_SKIP_RESTORE_JAV_DATA
+#define __DEBUG_TESTING_SKIP_RESTORE_PUB_DATA
+
+
+#endif // __MMCSCBKUPCONFIG_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupDllUids.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* 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:
+* Contains the UIDs for FileManager / FileManagerBkupEngine
+*
+*/
+
+#ifndef __MMCSCBKUPDLLUIDS_H__
+#define __MMCSCBKUPDLLUIDS_H__
+
+// Module UIDs
+#define KEPOCDLLUID2 0x1000008d // Symbian defined
+#define KMMCAppEngUID3 0x101F4667
+
+#endif // __MMCSCBKUPDLLUIDS_H__
+
+// End Of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupLogger.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2005 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:
+* Macro definition file for logging.
+*
+*
+*/
+
+#ifndef __MMCSCBKUPLOGGER_H__
+#define __MMCSCBKUPLOGGER_H__
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupConfig.h"
+#include "TMMCScBkupOwnerDataType.h"
+
+class MMCScBkupLogger
+ {
+ public:
+ static void LogRaw( const TDesC& aData );
+ static void Log( TRefByValue<const TDesC> aFmt, ... );
+ static void LogFile( TRefByValue<const TDesC> aFmt, ... );
+ static const TDesC& DataType( TMMCScBkupOwnerDataType aType );
+ static const TDesC& FriendlyNameForSID( TSecureId aSID );
+ };
+
+
+// Logging Macros
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+
+ _LIT( KMMCScBkupLoggingFullPath, "C:\\Logs\\MMCScBkup\\" );
+
+ #define __LOG(aFmt) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes); }
+ #define __LOG1(aFmt, A) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A); }
+ #define __LOG2(aFmt, A, B) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B); }
+ #define __LOG3(aFmt, A, B, C) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B, C); }
+ #define __LOG4(aFmt, A, B, C, D) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B, C, D); }
+ #define __LOG5(aFmt, A, B, C, D, E) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B, C, D, E); }
+ #define __LOG6(aFmt, A, B, C, D, E, F) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B, C, D, E, F); }
+ #define __LOG7(aFmt, A, B, C, D, E, F, G) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B, C, D, E, F, G); }
+ #define __LOG8(aFmt, A, B, C, D, E, F, G, H) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::Log(tempLogDes, A, B, C, D, E, F, G, H); }
+
+ // Path for backup log containing possible errors encountered during backup
+ // or restore. This is needed because all errors won't interrupt operation.
+ _LIT( KMMCScBkupLoggingFullPathAndName, "C:\\Private\\101F84EB\\BURLog\\bur.txt" );
+
+ #define __LOGFILE(aFmt) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::LogFile(tempLogDes); }
+ #define __LOGFILE1(aFmt, A) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::LogFile(tempLogDes, A); }
+ #define __LOGFILE2(aFmt, A, B) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::LogFile(tempLogDes, A, B); }
+ #define __LOGFILE3(aFmt, A, B, C) { _LIT(tempLogDes, aFmt); MMCScBkupLogger::LogFile(tempLogDes, A, B, C); }
+
+#else
+
+ #define __LOG(aFmt)
+ #define __LOG1(aFmt, A)
+ #define __LOG2(aFmt, A, B)
+ #define __LOG3(aFmt, A, B, C)
+ #define __LOG4(aFmt, A, B, C, D)
+ #define __LOG5(aFmt, A, B, C, D, E)
+ #define __LOG6(aFmt, A, B, C, D, E, F)
+ #define __LOG7(aFmt, A, B, C, D, E, F, G)
+ #define __LOG8(aFmt, A, B, C, D, E, F, G, H)
+
+ #define __LOGFILE(aFmt)
+ #define __LOGFILE1(aFmt, A)
+ #define __LOGFILE2(aFmt, A, B)
+ #define __LOGFILE3(aFmt, A, B, C)
+
+#endif
+
+#endif // __MMCSCBKUPLOGGER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupOperations.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005 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: Declaration for TMMCScBkupOperationType
+*
+*
+*/
+
+#ifndef __MMCSCBKUPOPERATIONS_H__
+#define __MMCSCBKUPOPERATIONS_H__
+
+// System includes
+#include <e32base.h>
+
+
+/**
+*
+*
+* @since 3.0
+*/
+enum TMMCScBkupOperationType
+ {
+ EMMCScBkupOperationTypeIdle = 0,
+ EMMCScBkupOperationTypeFullBackup,
+ EMMCScBkupOperationTypeFullRestore,
+ EMMCScBkupOperationTypePartialBackup,
+ EMMCScBkupOperationTypePartialRestore
+ };
+
+
+
+
+#endif // __MMCSCBKUPOPERATIONS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupPhoneModelUtils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2005 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: Declaration for MMCScBkupPhoneModelUtils
+*
+*
+*/
+
+#ifndef __MMCSCBKUPPHONEMODELUTILS_H__
+#define __MMCSCBKUPPHONEMODELUTILS_H__
+
+// System includes
+#include <f32file.h>
+#include <babitflags.h>
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMCScBkupPhoneModelUtils
+ {
+ public:
+
+ /**
+ *
+ */
+ static HBufC8* CurrentPhoneModelLC();
+
+ /**
+ *
+ */
+ static TInt MaximumPhoneModelIdentifierLength();
+
+ /**
+ *
+ */
+ static TBool ArchiveRestorePermissableL( const TDesC8& aPhoneModelData, TBitFlags aArchiveFlags, const TVersion& aArchiveVersion );
+ };
+
+
+
+
+#endif // __MMCScBkupPhoneModelUtils_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupSBEUtils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2005 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: Declaration for MMCScBkupSBEUtils
+*
+*
+*/
+
+#ifndef __MMCSCBKUPSBEUTILS_H__
+#define __MMCSCBKUPSBEUTILS_H__
+
+// System includes
+#include <f32file.h>
+#include <connect/sbtypes.h>
+#include <connect/sbeclient.h>
+
+// Namespaces
+using namespace conn;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMCScBkupSBEUtils
+ {
+ public:
+
+ /**
+ *
+ */
+ static TSecureId SecureIdFromGenericL(const CSBGenericDataType& aGeneric);
+
+ /**
+ *
+ */
+ static TUid PackageIdFromGenericL(const CSBGenericDataType& aGeneric);
+
+ /**
+ *
+ */
+ static HBufC* JavaHashFromGenericLC(const CSBGenericDataType& aGeneric);
+
+ /**
+ *
+ */
+ static CSBGenericDataType* CopyLC(const CSBGenericDataType& aToBeCopied);
+
+ /**
+ *
+ */
+ static CSBGenericTransferType* TransferTypeLC(const CSBGenericDataType& aDT, TDriveNumber aDrive,
+ TTransferDataType aTransferType, TInt aVersion);
+
+ /**
+ *
+ */
+ static CSBGenericTransferType* TransferTypeLC(const CSBGenericDataType& aDT, TDriveNumber aDrive,
+ TPackageDataType aDataType, TInt aVersion);
+
+ /**
+ *
+ */
+ static CSBGenericTransferType* TransferTypeLC(const CSBGenericDataType& aDT, TDriveNumber aDrive,
+ TJavaTransferType aDataType, TInt aVersion);
+
+ /**
+ *
+ */
+ static TBool PhoneIsInBackupOrRestoreModeL();
+
+ /**
+ *
+ */
+ static void EndBackupOrRestoreL( CSBEClient& aSBEClient );
+
+ /**
+ *
+ */
+ static TBool HasSystemDataL( const CDataOwnerInfo& aDataOwner );
+
+ /**
+ *
+ */
+ static TBool HasJavaDataL( const CDataOwnerInfo& aDataOwner );
+
+ /**
+ *
+ */
+ static TBool HasPassiveDataL( const CDataOwnerInfo& aDataOwner );
+
+ /**
+ *
+ */
+ static TBool HasActiveDataL( const CDataOwnerInfo& aDataOwner );
+
+ /**
+ *
+ */
+ static TBool HasPublicDataL( const CDataOwnerInfo& aDataOwner );
+ };
+
+
+
+
+#endif // __MMCSCBKUPSBEUTILS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMCScBkupStateIds.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2005 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: Constants for scheduled backup state IDs
+*
+*
+*/
+
+#ifndef __MMCSCBKUPSTATEIDS_H__
+#define __MMCSCBKUPSTATEIDS_H__
+
+// System includes
+#include <e32std.h>
+
+// Type definitions
+typedef TUid TMMCScBkupStateId;
+
+// Constants
+
+
+/**
+* Archive Header
+* ===========================
+*
+* BACKUP: Step 1 - first archive write operation: store archive header
+* RESTORE: Step 1 - first archive read operation: restore archive header
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpArchiveHeader = 0x0BAC001;
+const TMMCScBkupStateId KMMCScBkupStateArchiveOpArchiveHeader = { KMMCScBkupStateIdValueArchiveOpArchiveHeader };
+
+/**
+* Obtain List of Data Owners
+* ==========================
+*
+* BACKUP: Step 2 - Get list of data owners from SBE
+*/
+const TInt32 KMMCScBkupStateIdValueGetDataOwners = 0x0BAC0002;
+const TMMCScBkupStateId KMMCScBkupStateIdGetDataOwners = { KMMCScBkupStateIdValueGetDataOwners };
+
+/**
+* Set Smartphone into Backup Mode
+* ===============================
+*
+* BACKUP: Step 3
+* RESTORE:
+*/
+const TInt32 KMMCScBkupStateIdValueSetPhoneMode = 0x0BAC0003;
+const TMMCScBkupStateId KMMCScBkupStateIdSetPhoneMode = { KMMCScBkupStateIdValueSetPhoneMode };
+
+/**
+* Supply Data Snapshots (Not Currently Supported)
+* ===============================================
+*
+* BACKUP: Step 4
+*/
+const TInt32 KMMCScBkupStateIdValueSupplyDataSnapshots = 0x0BAC0004; // Not supported
+const TMMCScBkupStateId KMMCScBkupStateIdSupplyDataSnapshots = { KMMCScBkupStateIdValueSupplyDataSnapshots };
+
+/**
+* Inform the Device that All Snapshots Have Been Supplied
+* =======================================================
+*
+* BACKUP: Step 5
+*/
+const TInt32 KMMCScBkupStateIdValueNotifyAllSnapshotsSupplied = 0x0BAC0005;
+const TMMCScBkupStateId KMMCScBkupStateIdNotifyAllSnapshotsSupplied = { KMMCScBkupStateIdValueNotifyAllSnapshotsSupplied };
+
+/**
+* Request Size of Backup Data
+* ===========================
+*
+* BACKUP: Step 6
+*/
+const TInt32 KMMCScBkupStateIdValueRequestSizeOfBackupData = 0x0BAC0006;
+const TMMCScBkupStateId KMMCScBkupStateIdRequestSizeOfBackupData = { KMMCScBkupStateIdValueRequestSizeOfBackupData };
+
+/**
+* Archive Operation: data owners
+* ==============================
+*
+* BACKUP: Step 7 - second archive write operation: store data owners
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpDataOwners = 0x0BAC0007;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpDataOwners = { KMMCScBkupStateIdValueArchiveOpDataOwners };
+
+/**
+* Request List of Public Files
+* ============================
+*
+* BACKUP: Step 8
+*/
+const TInt32 KMMCScBkupStateIdValueRequestListOfPublicFiles = 0x0BAC0008;
+const TMMCScBkupStateId KMMCScBkupStateIdRequestListOfPublicFiles = { KMMCScBkupStateIdValueRequestListOfPublicFiles };
+
+/**
+* Calculate disk space required for backup or restore
+* ============================
+*
+* BACKUP: Step 8
+*/
+const TInt32 KMMCScBkupStateIdValueValidateDiskSpace = 0x0BAC0009;
+const TMMCScBkupStateId KMMCScBkupStateIdValidateDiskSpace = { KMMCScBkupStateIdValueValidateDiskSpace };
+
+
+/**
+* Archive Operation: public data files
+* ====================================
+*
+* BACKUP: Step 10 - forth archive write operation: store public data files
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpPublicDataFiles = 0x0BAC000A;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpPublicDataFiles = { KMMCScBkupStateIdValueArchiveOpPublicDataFiles };
+
+/**
+* Request System Data
+* ===================
+*
+* BACKUP: Step 11 - fifth archive write operation: store system data
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpSystemData = 0x0BAC000B;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpSystemData = { KMMCScBkupStateIdValueArchiveOpSystemData };
+
+/**
+* Request Java Data
+* ===================
+*
+* BACKUP: Step 12 - sixth archive write operation: store system data
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpJavaData = 0x0BAC000C;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpJavaData = { KMMCScBkupStateIdValueArchiveOpJavaData };
+
+/**
+* Request Request State of Active Data Owners
+* ===========================================
+*
+* BACKUP: Step 13
+*/
+const TInt32 KMMCScBkupStateIdValueGetDataOwnerStatuses = 0x0BAC000D;
+const TMMCScBkupStateId KMMCScBkupStateIdGetDataOwnerStatuses = { KMMCScBkupStateIdValueGetDataOwnerStatuses };
+
+/**
+* Request Active Private Data
+* ===========================
+*
+* BACKUP: Step 14 - seventh archive write operation: store active data
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpActiveData = 0x0BAC000E;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpActiveData = { KMMCScBkupStateIdValueArchiveOpActiveData };
+
+/**
+* Request Passive Private Data
+* ===========================
+*
+* BACKUP: Step 15 - eighth archive write operation: store passive data
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpPassiveData = 0x0BAC000F;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpPassiveData = { KMMCScBkupStateIdValueArchiveOpPassiveData };
+
+/**
+* Archive Footer
+* ===========================
+*
+* BACKUP: Step 16 - nineth archive write operation: store footer
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpArchiveFooter = 0x0BAC0010;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpArchiveFooter = { KMMCScBkupStateIdValueArchiveOpArchiveFooter };
+
+/**
+* Archive Header
+* ===========================
+*
+* COMMON: Special step to indicate no more steps required
+*/
+const TInt32 KMMCScBkupStateIdValueOperationComplete = 0x0BAC0011;
+const TMMCScBkupStateId KMMCScBkupStateIdOperationComplete = { KMMCScBkupStateIdValueOperationComplete };
+
+
+
+/**
+* Archive Operation: read data owners
+* ===================================
+*
+* RESTORE: Step 2 - read from archive, inform to secure backup engine
+*/
+const TInt32 KMMCScBkupStateIdValueArchiveOpReadDataOwners = 0x0BAC0012;
+const TMMCScBkupStateId KMMCScBkupStateIdArchiveOpReadDataOwners = { KMMCScBkupStateIdValueArchiveOpReadDataOwners };
+
+
+
+
+/**
+* BACKUP STATE FLOW
+* =================
+*
+* 1) KMMCScBkupStateIdArchiveOpArchiveHeader
+* 2) KMMCScBkupStateIdGetDataOwners
+* 3) KMMCScBkupStateIdSetPhoneMode
+* 4) KMMCScBkupStateIdNotifyAllSnapshotsSupplied
+* 5) KMMCScBkupStateIdRequestSizeOfBackupData
+* 6) KMMCScBkupStateIdRequestListOfPublicFiles
+* 7) KMMCScBkupStateIdValidateDiskSpace
+* 8) KMMCScBkupStateIdArchiveOpPublicDataFiles
+* 9) KMMCScBkupStateIdArchiveOpSystemData
+* 10) KMMCScBkupStateIdArchiveOpJavaData
+* 11) KMMCScBkupStateIdGetDataOwnerStatuses
+* 12) KMMCScBkupStateIdArchiveOpActiveData
+* 13) KMMCScBkupStateIdArchiveOpPassiveData
+* 14) KMMCScBkupStateIdArchiveOpDataOwners
+* 15) KMMCScBkupStateIdArchiveOpArchiveFooter
+* 16) KMMCScBkupStateIdOperationComplete
+*
+*/
+
+
+
+/**
+* RESTORE STATE FLOW
+* =================
+*
+* 1) KMMCScBkupStateIdArchiveOpArchiveHeader
+* 2) KMMCScBkupStateIdArchiveOpArchiveFooter
+* 3) KMMCScBkupStateIdArchiveOpDataOwners
+* 4) KMMCScBkupStateIdValidateDiskSpace
+* 5) KMMCScBkupStateIdSetPhoneMode
+* 6) KMMCScBkupStateIdArchiveOpSystemData
+* 7) KMMCScBkupStateIdArchiveOpJavaData
+* 8) KMMCScBkupStateIdArchiveOpPassiveData
+* 9) KMMCScBkupStateIdGetDataOwnerStatuses
+* 10) KMMCScBkupStateIdArchiveOpActiveData
+* 11) KMMCScBkupStateIdArchiveOpPublicDataFiles
+* 12) KMMCScBkupStateIdOperationComplete
+*
+*/
+
+#endif // __MMCSCBKUPSTATEIDS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMMCScBkupArchiveDataInterface.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,131 @@
+/*
+* 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: Declaration for MMMCScBkupArchiveDataInterface
+*
+*
+*/
+
+#ifndef __MMMCSCBKUPARCHIVEDATAINTERFACE_H__
+#define __MMMCSCBKUPARCHIVEDATAINTERFACE_H__
+
+// System includes
+#include <e32std.h>
+#include <f32file.h>
+
+// User includes
+#include "TMMCScBkupArchiveVector.h"
+#include "MMCScBkupOperations.h"
+
+// Constants
+const TInt KMMCScBkupArchiveWriteStreamCurrentPos = -1;
+const TInt KMMCScBkupArchiveReadStreamCurrentPos = -1;
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMMCScBkupArchiveDataInterface
+ {
+ public: // From MMMCScBkupArchiveDataInterface
+
+ /**
+ *
+ */
+ virtual RFs& ADIFsSession() const = 0;
+
+ /**
+ *
+ */
+ virtual RFile64& ADIRawArchiveFile() const = 0;
+
+ /**
+ *
+ */
+ virtual const TMMCScBkupArchiveVector& ADICurrentArchiveVectorInfo() const = 0;
+
+ /**
+ *
+ */
+ virtual const TMMCScBkupArchiveVector& ADIOverallArchiveVectorInfo() const = 0;
+
+ /**
+ *
+ */
+ virtual RWriteStream& ADIWriteStreamUncompressedLC( TInt aPos = KMMCScBkupArchiveWriteStreamCurrentPos ) = 0;
+
+ /**
+ *
+ */
+ virtual RReadStream& ADIReadStreamUncompressedLC( TInt aPos = KMMCScBkupArchiveReadStreamCurrentPos ) = 0;
+
+ /**
+ *
+ */
+ virtual const TMMCScBkupArchiveVector& ADIWriteL( const TDesC8& aData ) = 0;
+
+ /**
+ *
+ */
+ virtual const TMMCScBkupArchiveVector& ADIReadL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo ) = 0;
+
+ /**
+ *
+ */
+ virtual void ADIWriteFileL( const TDesC& aSourceFileName, TRequestStatus& aStatus ) = 0;
+
+ /**
+ *
+ */
+ virtual void ADIReadFileL( const TDesC& aDestinationFileName, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus ) = 0;
+
+ /**
+ *
+ */
+ virtual void ADIWriteCompressedL( const TDesC8& aData, TRequestStatus& aStatus ) = 0;
+
+ /**
+ *
+ */
+ virtual void ADIReadDecompressedL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus ) = 0;
+
+ /**
+ *
+ */
+ virtual void ADIAsynchronousCancel() = 0;
+
+ /**
+ *
+ */
+ virtual void ADIResetResources(TMMCScBkupOperationType aType) = 0;
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ *
+ */
+ virtual void ADIActivateCrcCalculation(TBool aType) = 0;
+
+ /**
+ *
+ */
+ virtual TUint32 ADIArchiveCrc() = 0;
+#endif
+ };
+
+
+
+
+#endif // __MMMCSCBKUPARCHIVEDATAINTERFACE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMMCScBkupDriver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002-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: Declaration for MMMCScBkupDriver
+*
+*
+*/
+
+#ifndef __MMMCSCBKUPDRIVER_H__
+#define __MMMCSCBKUPDRIVER_H__
+
+// System includes
+#include <connect/sbeclient.h>
+
+// User includes
+#include "MMCScBkupStateIds.h"
+#include "MMCScBkupOperations.h"
+#include "CMMCScBkupOperationParameters.h"
+
+// Classes referenced
+class CMMCScBkupState;
+class CMMCScBkupArchive;
+class MMMCScBkupProgressObserver;
+class CMMCScBkupDataOwnerCollection;
+class CMMCScBkupFileListCollection;
+class MMMCScBkupArchiveDataInterface;
+
+// Namespaces
+using namespace conn;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMMCScBkupDriver
+ {
+ public: // From MMMCScBkupDriver
+
+ /**
+ *
+ */
+ virtual MMMCScBkupArchiveDataInterface& DrvADI() const = 0;
+
+ /**
+ *
+ */
+ virtual CMMCScBkupArchive& DrvArchive() const = 0;
+
+ /**
+ *
+ */
+ virtual CSBEClient& DrvSecureBackupClient() const = 0;
+
+ /**
+ *
+ */
+ virtual TMMCScBkupOperationType DrvOperation() const = 0;
+
+ /**
+ *
+ */
+ virtual CMMCScBkupOpParamsBase& DrvParamsBase() const = 0;
+
+ /**
+ *
+ */
+ virtual CMMCScBkupDataOwnerCollection& DrvDataOwners() const = 0;
+
+ /**
+ *
+ */
+ virtual RPointerArray<CMMCScBkupDataOwnerCollection>& DrvDataOwnersAll() = 0;
+
+ /**
+ *
+ */
+ virtual CMMCScBkupFileListCollection& DrvFileList() const = 0;
+
+ /**
+ *
+ */
+ virtual TBool DrvLastCategory() const = 0;
+
+ /**
+ *
+ */
+ virtual void DrvStoreTotalProgress(TInt64 aProgress) = 0;
+
+ /**
+ *
+ */
+ virtual TInt64 DrvTotalProgress() const = 0;
+
+ /**
+ *
+ */
+ virtual MMMCScBkupProgressObserver& DrvProgressHandler() const = 0;
+ };
+
+
+
+
+#endif // __MMMCSCBKUPDRIVER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMMCScBkupEngineObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,68 @@
+/*
+* 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: Declaration for MMMCScBkupEngineObserver
+*
+*
+*/
+
+#ifndef __MMMCSCBKUPENGINEOBSERVER_H__
+#define __MMMCSCBKUPENGINEOBSERVER_H__
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMMCScBkupEngineObserver
+ {
+ public:
+
+ /**
+ *
+ */
+ enum TEvent
+ {
+ // COMMON
+ ECommonEventFirst = 0,
+ ECommonOperationStarting = ECommonEventFirst,
+ ECommonSizeOfTaskUnderstood,
+ ECommonOperationPrepareEnded,
+ ECommonOperationEnded,
+ ECommonOperationError,
+ ECommonProgress,
+ ECommonEventLast,
+
+ // BACKUP
+ EBackupEventFirst = 100,
+ EBackupAnalysingData,
+ EBackupEventLast,
+
+ // RESTORE
+ ERestoreEventFirst = 200,
+ ERestoreEventLast
+ };
+
+ public: // From MMMCScBkupEngineObserver
+
+ /**
+ *
+ */
+ virtual TInt HandleBkupEngineEventL(TEvent aEvent, TInt aAssociatedData) = 0;
+
+ };
+
+
+#endif // __MMMCSCBKUPENGINEOBSERVER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/MMMCScBkupProgressObserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2005-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: Declaration for MMMCScBkupProgressObserver
+*
+*
+*/
+
+#ifndef __MMMCSCBKUPPROGRESSOBSERVER_H__
+#define __MMMCSCBKUPPROGRESSOBSERVER_H__
+
+// System includes
+#include <e32std.h>
+
+// User includes
+
+
+/**
+*
+*
+* @since 3.0
+*/
+class MMMCScBkupProgressObserver
+ {
+ public: // From MMMCScBkupProgressObserver
+
+ /**
+ *
+ */
+ virtual void MMCScBkupHandleProgress( TInt aAmountCompleted ) = 0;
+
+
+ /**
+ *
+ */
+ virtual void MMCScBkupHandleProgressDomainUnderstood( TInt aTotalProgressAmount ) = 0;
+
+
+ /**
+ *
+ */
+ virtual TInt MMCScBkupHandleFreeSpace( TInt aPercent ) = 0;
+
+
+ /**
+ *
+ */
+ virtual void MMCScBkupStartBackuping( TBool aProceed ) = 0;
+ };
+
+
+
+
+#endif // __MMMCSCBKUPPROGRESSOBSERVER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/RMMCScBkupArchiveStreams.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2005 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: Declaration for RMMCScBkupArchiveReadStream
+*
+*
+*/
+
+#ifndef __RMMCSCBKUPARCHIVESTREAMS_H__
+#define __RMMCSCBKUPARCHIVESTREAMS_H__
+
+// System includes
+#include <s32strm.h>
+#include <s32file.h>
+
+// User includes
+#include "TMMCScBkupArchiveVector.h"
+
+// Classes referenced
+class CMMCScBkupArchiveDataManager;
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(RMMCScBkupArchiveBuf) : public RFileBuf
+ {
+ public:
+
+ /**
+ *
+ */
+ RMMCScBkupArchiveBuf();
+
+ public: // API
+
+ /**
+ *
+ */
+ void AttachL(CMMCScBkupArchiveDataManager& aADM, RFile64& aFile, TInt aPos, TBool aForWrite );
+
+ /**
+ *
+ */
+ IMPORT_C void Close();
+
+ /**
+ *
+ */
+ TBool IsOpen() const;
+
+ private: // From MStreamBuf
+
+ /**
+ *
+ */
+ void DoRelease();
+
+ /**
+ *
+ */
+ void DoSynchL();
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ /**
+ *
+ */
+ void DoWriteL(const TAny* aPtr,TInt aLength);
+#endif
+
+ private:
+
+ /**
+ *
+ */
+ void UpdateInfoL();
+
+ private: // Member data
+
+ //
+ TBool iWriteMode;
+ //
+ CMMCScBkupArchiveDataManager* iADM;
+ //
+ TMMCScBkupArchiveVector iInfo;
+
+ };
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(RMMCScBkupArchiveReadStream) : public RReadStream
+ {
+ public: // Constructors
+
+ /**
+ *
+ */
+ inline RMMCScBkupArchiveReadStream() { }
+
+ public: // API
+
+ /**
+ *
+ */
+ void OpenLC(CMMCScBkupArchiveDataManager& aADM, RFile64& aArchiveFile, TInt aPos=0);
+
+ /**
+ *
+ */
+ TBool IsOpen() const;
+
+ private: // Member data
+
+ //
+ RMMCScBkupArchiveBuf iSource;
+ };
+
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(RMMCScBkupArchiveWriteStream) : public RWriteStream
+ {
+ public: // Constructors
+
+ /**
+ *
+ */
+ inline RMMCScBkupArchiveWriteStream()
+ {}
+
+ public: // API
+
+ /**
+ *
+ */
+ void OpenLC(CMMCScBkupArchiveDataManager& aADM, RFile64& aArchiveFile, TInt aPos=0);
+
+ /**
+ *
+ */
+ TBool IsOpen() const;
+
+ private: // Member data
+
+ //
+ RMMCScBkupArchiveBuf iSink;
+ };
+
+
+
+#endif // __RMMCSCBKUPARCHIVESTREAMS_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/RMMCScBkupPointerArray.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2005 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: Declaration for RMMCScBkupPointerArray
+*
+*
+*/
+
+#ifndef __RMMCSCBKUPPOINTERARRAY_H__
+#define __RMMCSCBKUPPOINTERARRAY_H__
+
+// User includes
+#include <e32cmn.h>
+
+
+/**
+*
+*
+* @since 3.0
+*/
+template <class T>
+class RMMCScBkupPointerArray : public RPointerArray<T>
+ {
+public:
+ inline RMMCScBkupPointerArray();
+ inline explicit RMMCScBkupPointerArray(TInt aGranularity);
+ inline void Close();
+ };
+
+
+
+
+
+// Inline methods
+
+template <class T>
+inline RMMCScBkupPointerArray<T>::RMMCScBkupPointerArray()
+ : RPointerArray<T>()
+ {}
+
+template <class T>
+inline RMMCScBkupPointerArray<T>::RMMCScBkupPointerArray(TInt aGranularity)
+ : RPointerArray<T>( aGranularity )
+ {}
+
+template <class T>
+inline void RMMCScBkupPointerArray<T>::Close()
+ {
+ RPointerArray<T>::ResetAndDestroy();
+ RPointerArray<T>::Close();
+ }
+
+
+
+
+
+
+#endif // __RMMCSCBKUPPOINTERARRAY_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/RMMCScBkupProgressSizer.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2005-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: Declaration for RMMCScBkupProgressSizer
+*
+*
+*/
+
+#ifndef __RMMCSCBKUPPROGRESSSIZER_H__
+#define __RMMCSCBKUPPROGRESSSIZER_H__
+
+// System includes
+#include <f32file.h>
+
+// User includes
+#include "TMMCScBkupDriveFilter.h"
+#include "TMMCScBkupOwnerDataType.h"
+
+// Classes referenced
+class CMMCScBkupDataOwnerInfo;
+class MMMCScBkupProgressObserver;
+class CMMCScBkupDriveAndOperationTypeManager;
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(RMMCScBkupProgressSizer)
+ {
+ public:
+
+ /**
+ * C++ default constructor
+ */
+ RMMCScBkupProgressSizer( const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperationTypes );
+
+ public: // BACKUP SIZING API
+
+ /**
+ *
+ */
+ TInt64 BackupTotalProgressValueL( const CMMCScBkupDataOwnerInfo& aDataOwner );
+
+ /**
+ *
+ */
+ void BackupReportFixedProgressForOpL( MMMCScBkupProgressObserver& aProgressManager, TMMCScBkupOwnerDataType aType );
+
+ public: // RESTORE SIZING API
+
+ /**
+ *
+ */
+ TInt64 RestoreCombinedDataSizeL( const CMMCScBkupDataOwnerInfo& aOwner );
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ TInt NumberOfDriveOpsRequiredL( const CMMCScBkupDataOwnerInfo& aOwner, TMMCScBkupOwnerDataType aType );
+
+ /**
+ *
+ */
+ TInt64 AmountOfPublicDataToBeRestoredL( const CMMCScBkupDataOwnerInfo& aOwner );
+
+ private: // Member data
+
+ //
+ const CMMCScBkupDriveAndOperationTypeManager& iDriveAndOperationTypes;
+ //
+ TMMCScBkupDriveFilter iDriveFilter;
+
+ };
+
+
+
+
+#endif // __RMMCSCBKUPPROGRESSSIZER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/TMMCScBkupArchiveVector.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2005 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: Declaration for TMMCScBkupArchiveVector
+*
+*
+*/
+
+#ifndef __TMMCSCBKUPARCHIVEVECTOR_H__
+#define __TMMCSCBKUPARCHIVEVECTOR_H__
+
+// System includes
+#include <s32strm.h>
+#include <f32file.h>
+
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(TMMCScBkupArchiveVector)
+ {
+ public:
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupArchiveVector()
+ { Reset(); }
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupArchiveVector( TInt aOffset, TInt aLength )
+ : iOffset( aOffset ), iLength( aLength )
+ {}
+
+ /**
+ * C++ copy constructor
+ */
+ inline TMMCScBkupArchiveVector( const TMMCScBkupArchiveVector& aVector )
+ : iOffset( aVector.Offset() ), iLength( aVector.Length() )
+ {}
+
+ public:
+
+ /**
+ *
+ */
+ inline TInt Offset() const { return iOffset; }
+
+ /**
+ *
+ */
+ inline void SetOffset( TInt aOffset ) { iOffset = aOffset; }
+
+ /**
+ *
+ */
+ inline TInt Length() const { return iLength; }
+
+ /**
+ *
+ */
+ inline void SetLength( TInt aLength ) { iLength = aLength; }
+
+ /**
+ *
+ */
+ inline TInt EndOffset() const { return (iOffset + iLength); }
+
+ /**
+ *
+ */
+ inline void AdjustByDelta( TInt aOffsetDelta ) { iOffset += aOffsetDelta; }
+
+ /**
+ *
+ */
+ static TInt ExternalizedSize();
+
+ public:
+
+ /**
+ *
+ */
+ inline void Reset() { iLength = iOffset = 0; }
+
+ /**
+ *
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ /**
+ *
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ private: // Member data
+
+ /**
+ *
+ */
+ TInt iOffset;
+
+ /**
+ *
+ */
+ TInt iLength;
+ };
+
+
+
+/**
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(TMMCScBkupArchiveDriveAndVector)
+ {
+ public:
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupArchiveDriveAndVector() : iDrive( EDriveC ) { }
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupArchiveDriveAndVector( TDriveNumber aDrive, const TMMCScBkupArchiveVector& aVector ) : iDrive( aDrive), iVector( aVector ) { }
+
+ public:
+
+ /**
+ * Internalize object from stream
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ * Externalize object to stream
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ };
+
+ public: // Data members
+ TDriveNumber iDrive;
+ TMMCScBkupArchiveVector iVector;
+ };
+
+
+
+
+#endif // __TMMCSCBKUPARCHIVEVECTOR_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/TMMCScBkupDriveAndSize.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2005-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: Declaration for TMMCScBkupDriveAndSize
+*
+*
+*/
+
+#ifndef __TMMCSCBKUPDRIVEANDSIZE_H__
+#define __TMMCSCBKUPDRIVEANDSIZE_H__
+
+// System includes
+#include <s32strm.h>
+#include <f32file.h>
+
+
+
+/**
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(TMMCScBkupDriveAndSize)
+ {
+ public:
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupDriveAndSize() : iDrive( EDriveC ), iSize( 0 ) { }
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupDriveAndSize( TDriveNumber aDrive, TInt aSize ) : iDrive( aDrive), iSize( aSize ) { }
+
+ public:
+
+ /**
+ * Internalize object from stream
+ */
+ void InternalizeL( RReadStream& aStream );
+
+ /**
+ * Externalize object to stream
+ */
+ void ExternalizeL( RWriteStream& aStream ) const;
+
+ public: // API
+
+ /**
+ *
+ */
+ inline TInt64 Size() const { return iSize; }
+
+ /**
+ *
+ */
+ inline TDriveNumber Drive() const { return iDrive; }
+
+ /**
+ *
+ */
+ inline void SetSize( TInt64 aSize ) { iSize = aSize; }
+
+ /**
+ *
+ */
+ inline void AddToSize( TInt64 aAmount ) { iSize += aAmount; }
+
+ /**
+ *
+ */
+ inline void SetDrive( TDriveNumber aDrive ) { iDrive = aDrive; }
+
+ private: // Internal enumerations
+ enum
+ {
+ EStreamFormatVersion1 = 1
+ //EStreamFormatVersion2 = 2 // If 64-bit handling will be supported in the future.
+ // That will mean in practice a break in archive file format.
+ // Change are also needed in TMMCScBkupArchiveVector class
+ // to support larger than 2 GB files and data in it.
+ };
+
+ private: // Data members
+ TDriveNumber iDrive;
+ TInt64 iSize;
+ };
+
+
+
+
+
+#endif // __TMMCSCBKUPDRIVEANDSIZE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/TMMCScBkupDriveFilter.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2005 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: Declaration for TMMCScBkupDriveFilter
+*
+*
+*/
+
+#ifndef __TMMCSCBKUPDRIVEFILTER_H__
+#define __TMMCSCBKUPDRIVEFILTER_H__
+
+// System includes
+#include <e32std.h>
+#include <f32file.h>
+
+/**
+*
+*
+* @since 3.0
+*/
+NONSHARABLE_CLASS(TMMCScBkupDriveFilter)
+ {
+ public:
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupDriveFilter()
+ { Reset(); }
+
+ /**
+ * C++ default constructor
+ */
+ inline TMMCScBkupDriveFilter( const TDriveList& aPrimaryList )
+ : iPrimaryDriveList( aPrimaryList ), iHaveSecondaryList( EFalse )
+ { Reset(); }
+
+ public: // API
+
+ /**
+ *
+ */
+ void Reset();
+
+ /**
+ *
+ */
+ void SetPrimaryDriveFilter( const TDriveList& aDriveList );
+
+ /**
+ *
+ */
+ void SetSecondaryDriveFilter( const TDriveList& aDriveList );
+
+ /**
+ *
+ */
+ TBool NextValidDrive(TDriveNumber& aDrive);
+
+ /**
+ *
+ */
+ TDriveNumber CurrentDrive() const;
+
+ private: // Internal methods
+
+ /**
+ *
+ */
+ TBool FindValidDrive( const TDriveList& aList, TDriveNumber& aDrive, TBool aOneAttemptOnly = EFalse );
+
+ private: // Member data
+
+ /**
+ *
+ */
+ TInt iCurrentDrive;
+
+ /**
+ *
+ */
+ TDriveList iPrimaryDriveList;
+
+ /**
+ *
+ */
+ TDriveList iSecondaryDriveList;
+
+ /**
+ *
+ */
+ TBool iHaveSecondaryList;
+ };
+
+
+
+
+#endif // __TMMCSCBKUPDRIVEFILTER_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/inc/TMMCScBkupOwnerDataType.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2005 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: Declaration for TMMCScBkupOwnerDataType
+*
+*
+*/
+
+#ifndef __TMMCSCBKUPOWNERDATATYPE_H__
+#define __TMMCSCBKUPOWNERDATATYPE_H__
+
+// NB. This file is included inside an HRH file, so do not include
+// C++ constructs.
+
+/**
+* DO NOT CHANGE THE ORDER OF THIS ENUMERATION
+*
+* @since 3.0
+*/
+enum TMMCScBkupOwnerDataType
+ {
+ // Relates to all data owners
+ EMMCScBkupOwnerDataTypeDataOwner = 0,
+
+ // Relates to java data for a particular owner
+ EMMCScBkupOwnerDataTypeJavaData,
+
+ // Relates to public data for a particular owner
+ EMMCScBkupOwnerDataTypePublicData,
+
+ // Relates to system data for a particular owner
+ EMMCScBkupOwnerDataTypeSystemData,
+
+ // Relates to active data for a particular owner
+ EMMCScBkupOwnerDataTypeActiveData,
+
+ // Relates to passive data for a particular owner
+ EMMCScBkupOwnerDataTypePassiveData,
+
+ // Always leave this last, don't assign it
+ // a value. Don't use it either!
+ EMMCScBkupOwnerDataTypeCount,
+
+ // A generic 'any data type' value. Used by the drive-specific-request &
+ // data sizer. Not a real SBE data type, hence it appears after
+ // the last marker.
+ EMMCScBkupOwnerDataTypeAny
+ };
+
+
+
+#endif // __TMMCSCBKUPOWNERDATATYPE_H__
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupArchive.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,364 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupArchive Implementation
+*
+*
+*/
+
+#include "CMMCScBkupArchive.h"
+
+// System includes
+#include <bautils.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupArchiveUtils.h"
+#include "CMMCScBkupArchiveHeader.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "MMCScBkupPhoneModelUtils.h"
+#include "CMMCScBkupArchiveDataManager.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::CMMCScBkupArchive()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchive::CMMCScBkupArchive( RFs& aFsSession, MMMCScBkupProgressObserver& aProgressManager,
+ MMMCScBkupDriver& aDriver, TBitFlags aCategory )
+: iFsSession( aFsSession ), iProgressManager( aProgressManager ), iDriver( aDriver ), iCategory( aCategory )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::~CMMCScBkupArchive()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchive::~CMMCScBkupArchive()
+ {
+ Close( KErrNone );
+ DeleteOldArchive();
+ // Must do these last, as we may need to use the file name in order
+ // to delete any partially created or old archives.
+ delete iArchiveFileName;
+ iArchiveFileName = NULL;
+
+ delete iOldArchiveFileName;
+ iOldArchiveFileName = NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchive* CMMCScBkupArchive::NewL( RFs& aFsSession, MMMCScBkupProgressObserver& aProgressManager,
+ MMMCScBkupDriver& aDriver, TBitFlags aCategory )
+ {
+ __LOG("CMMCScBkupArchive::NewL() - START");
+ CMMCScBkupArchive* self = new(ELeave) CMMCScBkupArchive( aFsSession, aProgressManager, aDriver, aCategory );
+ __LOG("CMMCScBkupArchive::NewL() - END");
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::OpenForReadingL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::OpenForReadingL( const TDesC& aName )
+ {
+ __LOG1("CMMCScBkupArchive::OpenForReadingL() - START - aName: %S", &aName);
+
+ Close( KErrNone );
+ iArchiveFileName = aName.AllocL();
+ //
+ const TInt error = iArchiveFile.Open(iFsSession, *iArchiveFileName, EFileShareReadersOnly | EFileStream | EFileRead);
+ __LOG1("CMMCScBkupArchive::OpenForReadingL() - open error: %d", error);
+ User::LeaveIfError(error);
+ //
+ PrepareObjectsL();
+ SetMode(EModeReading);
+ __LOG1("CMMCScBkupArchive::OpenForReadingL() - END - file handle: 0x%08x", iArchiveFile.SubSessionHandle());
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::OpenForWritingL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::OpenForWritingL( const TDesC& aName )
+ {
+ __LOG1("CMMCScBkupArchive::OpenForWritingL() - START - aName: %S", &aName);
+
+ Close( KErrNone );
+ iArchiveFileName = aName.AllocL();
+
+ // Name old archive as .old until disk space validation is carried out.
+ _LIT( KOldSuffix, "old" );
+ const TChar dot('.');
+ iOldArchiveFileName = HBufC::NewL(aName.Length() + KOldSuffix().Length() + 1);
+ TPtr temp( iOldArchiveFileName->Des() );
+ temp.Copy( aName );
+ const TInt location = temp.LocateReverseF( dot ) + 1;
+ TInt length = temp.Length() - location;
+
+ if( location != KErrNotFound && length <= KOldSuffix().Length() )
+ {
+ temp.Delete( location, length );
+ temp.Append( KOldSuffix().Ptr(), length );
+ }
+ else
+ {
+ temp.Append( dot );
+ temp.Append( KOldSuffix().Ptr(), length );
+ }
+
+ // Ensure archive directory and attributes permit writing of file
+ TInt error = PrepareToOverwrite(aName);
+ __LOG1("CMMCScBkupArchive::OpenForWritingL() - prepare to over-write error: %d", error);
+ User::LeaveIfError(error);
+
+ // Open file for writing
+ error = iArchiveFile.Replace(iFsSession, *iArchiveFileName, EFileShareExclusive | EFileStream | EFileWrite);
+ __LOG1("CMMCScBkupArchive::OpenForWritingL() - replace error: %d", error);
+ User::LeaveIfError(error);
+ //
+ PrepareObjectsL();
+ SetMode(EModeWriting);
+ __LOG1("CMMCScBkupArchive::OpenForWritingL() - END - file handle: 0x%08x", iArchiveFile.SubSessionHandle());
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::RestoreOldArchive()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::RestoreOldArchive()
+ {
+ Close( KErrCancel );
+ TInt err = iFsSession.Rename( *iOldArchiveFileName, *iArchiveFileName );
+
+ __LOG2("CMMCScBkupArchive::RestoreOldArchive() - %S restore error: %d", iArchiveFileName, err);
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::DeleteOldArchive()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::DeleteOldArchive()
+ {
+ if( iOldArchiveFileName != NULL )
+ {
+ TInt err = iFsSession.Delete( *iOldArchiveFileName );
+
+ __LOG2("CMMCScBkupArchive::DeleteOldArchive() - %S delete error: %d", iOldArchiveFileName, err);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::Close()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::Close( TInt aError )
+ {
+ __LOG1("CMMCScBkupArchive::Close() - aError: %d", aError);
+
+ delete iHeader;
+ iHeader = NULL;
+ delete iFooter;
+ iFooter = NULL;
+ delete iDataManager;
+ iDataManager = NULL;
+ //
+ if ( aError != KErrNone && Mode() == EModeWriting )
+ {
+ // Delete the archive if there was an error with the backup operation
+ __LOG1("CMMCScBkupArchive::Close() - ERROR CREATING BACKUP - aError: %d => archive will be deleted", aError);
+
+ // Ignore error when attempting delete
+ iArchiveFile.Close();
+ (void) iFsSession.Delete( *iArchiveFileName );
+ }
+
+ // Close archive. It might have already been closed in an error situation
+ // but that's okay - it doesn't cause any problems to close it twice.
+ iArchiveFile.Close();
+
+ // Ignore error if setting read-only attribute fails, because it is not fatal
+ iFsSession.SetAtt( *iArchiveFileName, KEntryAttReadOnly, !KEntryAttReadOnly );
+
+ // Reset mode back to default, ready for next operation
+ iMode = EModeUninitialised;
+
+ __LOG("CMMCScBkupArchive::Close() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::Header()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveHeader& CMMCScBkupArchive::Header() const
+ {
+ return *iHeader;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::Footer()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveFooter& CMMCScBkupArchive::Footer() const
+ {
+ return *iFooter;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::ADI()
+//
+//
+// ---------------------------------------------------------------------------
+MMMCScBkupArchiveDataInterface& CMMCScBkupArchive::ADI() const
+ {
+ return *iDataManager;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::PrepareToOverwrite()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupArchive::PrepareToOverwrite( const TDesC& aFile )
+ {
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - START - aFile: %S", &aFile);
+ TInt err = KErrNone;
+
+ // Try deleting file with temporary name (one we have created earlier,
+ // but which has potentially remained for some reason).
+ err = iFsSession.Delete( *iOldArchiveFileName );
+ __LOG2("CMMCScBkupArchive::PrepareToOverwrite() - delete %S result: %d", iOldArchiveFileName, err);
+ // Rename the file for possible later "restoration".
+ err = iFsSession.Rename( aFile, *iOldArchiveFileName );
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - rename existing file: %d", err);
+ // Reset file flags in order to make sure file can be deleted
+ err = iFsSession.SetAtt( *iOldArchiveFileName, KEntryAttNormal, !KEntryAttNormal );
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - setFileAttNormal: %d", err);
+
+ // Create the full path, if not exists
+ err = iFsSession.MkDirAll( aFile );
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - mkDirAll: %d", err);
+
+ if (err == KErrAlreadyExists || err == KErrNone )
+ {
+ // Set folder hidden, ignore error
+ err = iFsSession.SetAtt( BaflUtils::DriveAndPathFromFullName( aFile ), KEntryAttHidden, !KEntryAttHidden );
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - setFolderHidden: %d", err);
+
+ // Reset file flags in order to make sure file can be deleted
+ err = iFsSession.SetAtt( aFile, KEntryAttNormal, !KEntryAttNormal );
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - setFileAttNormal: %d", err);
+
+ }
+ //
+ if ( err == KErrNotFound )
+ {
+ // These errors are ignored
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - mapped %d to KErrNone -> everything is okay", err);
+ err = KErrNone;
+ }
+ //
+ __LOG1("CMMCScBkupArchive::PrepareToOverwrite() - END - err: %d", err);
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::ValidArchiveForRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupArchive::ValidArchiveForRestoreL( RFs& aFsSession, const TDesC& aFileName )
+ {
+ HBufC8* modelInfo = NULL;
+ TBitFlags archiveFlags( 0 );
+
+ TVersion archiveVersion;
+
+ // Read the header from the specified archive
+ MMCScBkupArchiveUtils::ReadPhoneValidityInformationL( aFsSession, aFileName, modelInfo, archiveFlags, archiveVersion );
+ CleanupStack::PushL( modelInfo );
+
+ // Check whether its okay to restore the archive.
+ const TBool validArchiveForRestore = MMCScBkupPhoneModelUtils::ArchiveRestorePermissableL( *modelInfo, archiveFlags, archiveVersion );
+ CleanupStack::PopAndDestroy(modelInfo);
+ //
+ return validArchiveForRestore;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::SetMode()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::SetMode(TMode aMode)
+ {
+ iMode = aMode;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchive::PrepareObjectsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchive::PrepareObjectsL()
+ {
+ __LOG("CMMCScBkupArchive::PrepareObjectsL() - START");
+
+ __LOG("CMMCScBkupArchive::PrepareObjectsL() - creating data manager...");
+ iDataManager = CMMCScBkupArchiveDataManager::NewL( iFsSession, iArchiveFile, iProgressManager );
+
+ __LOG("CMMCScBkupArchive::PrepareObjectsL() - creating header...");
+ iHeader = CMMCScBkupArchiveHeader::NewL( *iDataManager, iDriver );
+
+ __LOG("CMMCScBkupArchive::PrepareObjectsL() - creating footer...");
+ iFooter = CMMCScBkupArchiveFooter::NewL( *iDataManager, iDriver );
+
+ __LOG("CMMCScBkupArchive::PrepareObjectsL() - END");
+ }
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupArchiveDataManager.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,647 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupArchiveDataManager Implementation
+*
+*
+*/
+
+#include "CMMCScBkupArchiveDataManager.h"
+
+// System includes
+#include <ezcompressor.h>
+#include <ezdecompressor.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "RMMCScBkupArchiveStreams.h"
+#include "MMCScBkupOperations.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::CMMCScBkupArchiveDataManager()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveDataManager::CMMCScBkupArchiveDataManager( RFs& aFsSession, RFile64& aFile, MMMCScBkupProgressObserver& aProgressManager )
+: CActive( CActive::EPriorityIdle ), iFsSession( aFsSession ), iFile( aFile ), iProgressManager( aProgressManager )
+ {
+ __LOG1("CMMCScBkupArchiveDataManager::CMMCScBkupArchiveDataManager() - START - aFile: 0x%08x", aFile.SubSessionHandle() );
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::~CMMCScBkupArchiveDataManager()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveDataManager::~CMMCScBkupArchiveDataManager()
+ {
+ Cancel();
+ //
+ iWriteStream.Close();
+ //
+ delete iCompressor;
+ delete iDecompressor;
+ delete iBufferManager;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ConstructL()
+ {
+ TInt64 size = 0;
+ User::LeaveIfError( iFile.Size( size ) );
+ //
+ iOverallArchiveVectorInfo.SetOffset( 0 );
+ iOverallArchiveVectorInfo.SetLength( size );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveDataManager* CMMCScBkupArchiveDataManager::NewL( RFs& aFsSession, RFile64& aFile, MMMCScBkupProgressObserver& aProgressManager )
+ {
+ CMMCScBkupArchiveDataManager* self = new(ELeave) CMMCScBkupArchiveDataManager( aFsSession, aFile, aProgressManager );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::CurrentOffsetL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupArchiveDataManager::CurrentOffsetL() const
+ {
+ TInt offset = CurrentOffset();
+ User::LeaveIfError(offset);
+ return offset;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::CurrentOffset()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupArchiveDataManager::CurrentOffset() const
+ {
+ TInt64 offsetOrError = 0;
+ TInt error = iFile.Seek( ESeekCurrent, offsetOrError );
+ //
+ if (error != KErrNone)
+ {
+ offsetOrError = error;
+ }
+ //
+ return offsetOrError;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::SetCurrentVector()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::SetCurrentVector( const TMMCScBkupArchiveVector& aVector )
+ {
+ iCurrentVectorInfo = aVector;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIFsSession()
+//
+//
+// ---------------------------------------------------------------------------
+RFs& CMMCScBkupArchiveDataManager::ADIFsSession() const
+ {
+ return iFsSession;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIRawArchiveFile()
+//
+//
+// ---------------------------------------------------------------------------
+RFile64& CMMCScBkupArchiveDataManager::ADIRawArchiveFile() const
+ {
+ return iFile;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADICurrentArchiveVectorInfo()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADICurrentArchiveVectorInfo() const
+ {
+ return iCurrentVectorInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIOverallArchiveVectorInfo()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADIOverallArchiveVectorInfo() const
+ {
+ return iOverallArchiveVectorInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC()
+//
+//
+// ---------------------------------------------------------------------------
+RWriteStream& CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC( TInt aPos )
+ {
+ __LOG1("CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() - START - aPos: %d", aPos );
+ //
+ __ASSERT_ALWAYS( !iWriteStream.IsOpen(), User::Invariant() );
+ TInt offset = aPos;
+ if (offset == KMMCScBkupArchiveWriteStreamCurrentPos)
+ {
+ offset = CurrentOffsetL();
+ __LOG1("CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() - current offset is: %d", offset );
+ }
+ //
+ iWriteStream.OpenLC(*this, iFile, offset);
+
+ __LOG("CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() - END - stream opened and pushed");
+
+ iCurrentVectorInfo.Reset();
+ return iWriteStream;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIReadStreamUncompressedLC()
+//
+//
+// ---------------------------------------------------------------------------
+RReadStream& CMMCScBkupArchiveDataManager::ADIReadStreamUncompressedLC( TInt aPos )
+ {
+ __ASSERT_ALWAYS( !iReadStream.IsOpen(), User::Invariant() );
+ TInt offset = aPos;
+ if (offset == KMMCScBkupArchiveReadStreamCurrentPos)
+ {
+ offset = CurrentOffsetL();
+ }
+ //
+ iReadStream.OpenLC(*this, iFile, offset);
+ iCurrentVectorInfo.Reset();
+ return iReadStream;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIWriteL()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADIWriteL( const TDesC8& aData )
+ {
+ const TInt offset = CurrentOffsetL();
+ const TInt error = iFile.Write( aData );
+ User::LeaveIfError(error);
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ CalculateCrc(aData.Ptr(), aData.Length());
+#endif
+ //
+ iCurrentVectorInfo.SetOffset( offset );
+ iCurrentVectorInfo.SetLength( aData.Length() );
+ //
+ return iCurrentVectorInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIReadL()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADIReadL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo )
+ {
+ TMMCScBkupArchiveVector readInfo(aInfo);
+
+ // Read straight into aSink.
+ const TInt maxLength = aSink.MaxLength();
+ if (aInfo.Length() > maxLength)
+ {
+ readInfo.SetLength( maxLength );
+ }
+
+ aSink.Zero();
+ const TInt error = iFile.Read( static_cast<TInt64>(readInfo.Offset()), aSink, readInfo.Length() );
+ User::LeaveIfError( error );
+ //
+ iCurrentVectorInfo.SetOffset( readInfo.Offset() );
+ iCurrentVectorInfo.SetLength( aSink.Length() );
+ //
+ return iCurrentVectorInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIWriteFileL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ADIWriteFileL( const TDesC& aSourceFileName, TRequestStatus& aStatus )
+ {
+ __LOG1("CMMCScBkupArchiveDataManager::ADIWriteFileL() - START - file: %S", &aSourceFileName);
+
+ if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeFileToArchive)
+ {
+ CMMCScBkupBufferManagerBase* bm =
+ CMMCScBkupBufferManagerBase::NewByTypeL(
+ CMMCScBkupBufferManagerBase::ETypeFileToArchive,
+ iProgressManager,
+ *this,
+ (TAny*) &aSourceFileName);
+ //
+ delete iBufferManager;
+ iBufferManager = bm;
+ }
+ else
+ {
+ iBufferManager->InitializeL( (TAny*) &aSourceFileName );
+ }
+
+ // Setup our observer & op
+ SetOperation(EOperationCompressing);
+ SetObserver(aStatus);
+
+ // Compressing aData to the archive file
+ EnsureCompressorExistsL(*iBufferManager);
+
+ // Do the compression asynchronously
+ CompleteSelf();
+
+ __LOG("CMMCScBkupArchiveDataManager::ADIWriteFileL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIReadFileL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ADIReadFileL( const TDesC& aDestinationFileName, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus )
+ {
+ __LOG3("CMMCScBkupArchiveDataManager::ADIReadFileL() - START - file: %S, offset: %8d, length: %8d", &aDestinationFileName, aInfo.Offset(), aInfo.Length());
+
+ if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeArchiveToFile)
+ {
+ CMMCScBkupBufferManagerBase* bm =
+ CMMCScBkupBufferManagerBase::NewByTypeL(
+ CMMCScBkupBufferManagerBase::ETypeArchiveToFile,
+ iProgressManager,
+ *this,
+ (TAny*) &aDestinationFileName,
+ (TAny*) &aInfo );
+ //
+ delete iBufferManager;
+ iBufferManager = bm;
+ }
+ else
+ {
+ iBufferManager->InitializeL( (TAny*) &aDestinationFileName, (TAny*) &aInfo );
+ }
+
+ // Setup our observer & op
+ SetOperation(EOperationDecompressing);
+ SetObserver(aStatus);
+
+ // Compressing aData to the archive file
+ EnsureDecompressorExistsL(*iBufferManager);
+
+ // Do the compression asynchronously
+ CompleteSelf();
+
+ __LOG("CMMCScBkupArchiveDataManager::ADIReadFileL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIWriteCompressedL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ADIWriteCompressedL( const TDesC8& aData, TRequestStatus& aStatus )
+ {
+ if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeDescriptorToArchive)
+ {
+ CMMCScBkupBufferManagerBase* bm =
+ CMMCScBkupBufferManagerBase::NewByTypeL(
+ CMMCScBkupBufferManagerBase::ETypeDescriptorToArchive,
+ iProgressManager,
+ *this,
+ (TAny*) &aData );
+ //
+ delete iBufferManager;
+ iBufferManager = bm;
+ }
+ else
+ {
+ iBufferManager->InitializeL( (TAny*) &aData );
+ }
+
+ // Setup our observer & op
+ SetOperation(EOperationCompressing);
+ SetObserver(aStatus);
+
+ // Compressing aData to the archive file
+ EnsureCompressorExistsL(*iBufferManager);
+
+ // Do the compression asynchronously
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIReadDecompressedL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ADIReadDecompressedL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus )
+ {
+ if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeArchiveToDescriptor)
+ {
+ CMMCScBkupBufferManagerBase* bm =
+ CMMCScBkupBufferManagerBase::NewByTypeL(
+ CMMCScBkupBufferManagerBase::ETypeArchiveToDescriptor,
+ iProgressManager,
+ *this,
+ (TAny*) &aSink,
+ (TAny*) &aInfo );
+ //
+ delete iBufferManager;
+ iBufferManager = bm;
+ }
+ else
+ {
+ iBufferManager->InitializeL( (TAny*) &aSink, (TAny*) &aInfo );
+ }
+
+ // Setup our observer & op
+ SetOperation(EOperationDecompressing);
+ SetObserver(aStatus);
+
+ // Compressing aData to the archive file
+ EnsureDecompressorExistsL(*iBufferManager);
+
+ // Do the compression asynchronously
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIAsynchronousCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ADIAsynchronousCancel()
+ {
+ Cancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::ADIResetResources()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::ADIResetResources(TMMCScBkupOperationType /* aType */)
+ {
+ __LOG("CMMCScBkupArchiveDataManager::ADIResetResources()");
+
+ delete iCompressor;
+ iCompressor = NULL;
+ delete iDecompressor;
+ iDecompressor = NULL;
+ delete iBufferManager;
+ iBufferManager = NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::EnsureCompressorExistsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::EnsureCompressorExistsL( MEZBufferManager& aBufferManager )
+ {
+ delete iDecompressor;
+ iDecompressor = NULL;
+ //
+ if (iCompressor == NULL)
+ {
+ iCompressor = CEZCompressor::NewL( aBufferManager );
+ }
+ else
+ {
+ iCompressor->ResetL(aBufferManager);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::EnsureDecompressorExistsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::EnsureDecompressorExistsL( MEZBufferManager& aBufferManager )
+ {
+ delete iCompressor;
+ iCompressor = NULL;
+ //
+ if (iDecompressor == NULL)
+ {
+ iDecompressor = CEZDecompressor::NewL( aBufferManager );
+ }
+ else
+ {
+ iDecompressor->ResetL(aBufferManager);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::SetObserver()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::SetObserver( TRequestStatus& aStatus )
+ {
+ __ASSERT_DEBUG(iObserverStatus == NULL, User::Invariant());
+ iObserverStatus = &aStatus;
+ *iObserverStatus = KRequestPending;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::CompleteSelf()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::CompleteSelf( TInt aCompletionCode )
+ {
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, aCompletionCode);
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::CompleteObserver(()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::CompleteObserver( TInt aCompletionCode )
+ {
+ __ASSERT_ALWAYS(iObserverStatus != NULL, User::Invariant());
+ User::RequestComplete(iObserverStatus, aCompletionCode);
+
+ // Implicitly, we must be finished
+ SetOperation(EOperationIdle);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::SetOperation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::SetOperation( TOperation aOperation )
+ {
+ iOperation = aOperation;
+ }
+
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::CalculateCrc()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::CalculateCrc( const TAny* aPtr,TInt aLength )
+ {
+ if(iCrcCalcActivated)
+ {
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ TUint32 startTime = User::NTickCount();
+#endif
+ Mem::Crc32(iCrc, aPtr, aLength);
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ iTotalTickCount += (User::NTickCount() - startTime);
+ //__LOG5("CMMCScBkupArchiveDataManager::CalculateCrc() - crc %u, addr 0x%08x, len %d, offset %d, ticks in ms %u",
+ // iCrc, aPtr, aLength, CurrentOffset(), iTotalTickCount);
+#endif
+ }
+ }
+#endif
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::RunL()
+ {
+ User::LeaveIfError(iStatus.Int());
+ TBool moreToDo = EFalse;
+ //
+ switch(iOperation)
+ {
+ case EOperationIdle:
+ ASSERT( EFalse );
+ break;
+ case EOperationCompressing:
+ __LOG("CMMCScBkupArchiveDataManager::RunL() - START - EOperationCompressing");
+ moreToDo = iCompressor->DeflateL();
+ break;
+ case EOperationDecompressing:
+ __LOG("CMMCScBkupArchiveDataManager::RunL() - START - EOperationDecompressing");
+ moreToDo = iDecompressor->InflateL();
+ break;
+ }
+ //
+ if (moreToDo)
+ {
+ CompleteSelf();
+ }
+ else
+ {
+ // Update current offset & length info based upon buffer manager indications
+ const TMMCScBkupArchiveVector& finalInfo = iBufferManager->Info();
+ iCurrentVectorInfo = finalInfo;
+
+ // Ensure we set the state back to idle, ready for next operation...
+ iOperation = EOperationIdle;
+
+ __LOG2("CMMCScBkupArchiveDataManager::RunL() - operation complete - offset: %8d, length: %8d", iCurrentVectorInfo.Offset(), iCurrentVectorInfo.Length());
+ CompleteObserver();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveDataManager::DoCancel()
+ {
+ __ASSERT_DEBUG(iOperation != EOperationIdle, User::Invariant());
+ //
+ CompleteObserver(KErrCancel);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveDataManager::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupArchiveDataManager::RunError( TInt aError )
+ {
+ __LOG1("CMMCScBkupArchiveDataManager::RunError() - START - aError: %d", aError);
+ CompleteObserver(aError);
+ //
+ return KErrNone;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupArchiveFooter.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,342 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupArchiveFooter Implementation
+*
+*
+*/
+
+#include "CMMCScBkupArchiveFooter.h"
+
+// User includes
+#include "CMMCScBkupIndexPublicDataFiles.h"
+#include "CMMCScBkupIndexDataOwners.h"
+#include "CMMCScBkupIndexJavaData.h"
+#include "CMMCScBkupIndexSystemData.h"
+#include "CMMCScBkupIndexActiveData.h"
+#include "CMMCScBkupIndexJavaData.h"
+#include "CMMCScBkupIndexPassiveData.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMCScBkupArchiveUtils.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+
+/**
+
+ UNDERSTANDING ARCHIVE FOOTER
+ ============================
+
+ // Indicies are:
+ //
+ // EMMCScBkupOwnerDataTypeDataOwner
+ // EMMCScBkupOwnerDataTypeJavaData
+ // EMMCScBkupOwnerDataTypePublicData
+ // EMMCScBkupOwnerDataTypeSystemData
+ // EMMCScBkupOwnerDataTypeActiveData
+ // EMMCScBkupOwnerDataTypePassiveData
+ //
+ // 6 (index objects) *
+ // ( 1 byte for object type + TMMCScBkupArchiveVector::ExternalizedSize() )
+ //
+
+ // THIS IS THE SIZE OF AN INDIVIDUAL "INDEX RECORD POINTER"
+ const TInt indexDataSize = 1 // index type
+ + TMMCScBkupArchiveVector::ExternalizedSize() // vector
+ + 4 // spare1
+ + 4 // spare2
+ ;
+
+ // THIS IS THE TOTAL SIZE OF ALL "INDEX RECORD POINTERS"
+ const TInt sizeOfAllIndicies =
+ 4 // stream format version
+ + 4 // spare1
+ + 4 // spare2
+ + 4 // spare3
+ + 4 // spare4
+ + 4 // index object count
+ + ( EMMCScBkupOwnerDataTypeCount * indexDataSize);
+
+ // WE ALSO WRITE THE AMOUNT OF DISK SPACE REQUIRED FOR EACH DRIVE
+ // IN ORDER TO RESTORE THE ARCHIVE
+
+ (not included here)
+*/
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::CMMCScBkupArchiveFooter()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveFooter::CMMCScBkupArchiveFooter( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver )
+: iDataInterface( aDataInterface ), iDriver( aDriver )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::~CMMCScBkupArchiveFooter()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveFooter::~CMMCScBkupArchiveFooter()
+ {
+ iIndicies.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveFooter::ConstructL()
+ {
+ CMMCScBkupIndexBase* index = NULL;
+ //
+ index = CMMCScBkupIndexDataOwners::NewLC();
+ iIndicies.AppendL(index);
+ CleanupStack::Pop(index);
+ //
+ index = CMMCScBkupIndexPublicDataFiles::NewLC();
+ iIndicies.AppendL(index);
+ CleanupStack::Pop(index);
+ //
+ index = CMMCScBkupIndexSystemData::NewLC();
+ iIndicies.AppendL(index);
+ CleanupStack::Pop(index);
+ //
+ index = CMMCScBkupIndexJavaData::NewLC();
+ iIndicies.AppendL(index);
+ CleanupStack::Pop(index);
+ //
+ index = CMMCScBkupIndexActiveData::NewLC();
+ iIndicies.AppendL(index);
+ CleanupStack::Pop(index);
+ //
+ index = CMMCScBkupIndexPassiveData::NewLC();
+ iIndicies.AppendL(index);
+ CleanupStack::Pop(index);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveFooter* CMMCScBkupArchiveFooter::NewL( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupArchiveFooter* self = new(ELeave) CMMCScBkupArchiveFooter( aDataInterface, aDriver );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::IndexByType()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexBase& CMMCScBkupArchiveFooter::IndexByType( TMMCScBkupOwnerDataType aType )
+ {
+ CMMCScBkupIndexBase* ret = IndexByTypeOrNull( aType );
+ __ASSERT_ALWAYS(ret != NULL, User::Invariant());
+ return *ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::IndexByTypeOrNull()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexBase* CMMCScBkupArchiveFooter::IndexByTypeOrNull( TMMCScBkupOwnerDataType aType )
+ {
+ CMMCScBkupIndexBase* ret = NULL;
+ //
+ const TInt count = iIndicies.Count();
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupIndexBase* entry = iIndicies[i];
+ if (entry->Type() == aType)
+ {
+ ret = entry;
+ break;
+ }
+ }
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::StoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveFooter::StoreL()
+ {
+ RWriteStream stream( iDataInterface.ADIWriteStreamUncompressedLC() );
+ //
+ const TInt count = iIndicies.Count();
+ __ASSERT_DEBUG( count == EMMCScBkupOwnerDataTypeCount, User::Invariant());
+
+ // NEW: write index version
+ stream.WriteInt32L( EStreamFormatVersion1 );
+
+ // NEW: spare1, spare2, spare3, spare4
+ stream.WriteInt32L( 0 );
+ stream.WriteInt32L( 0 );
+ stream.WriteInt32L( 0 );
+ stream.WriteInt32L( 0 );
+
+ // NEW: write the number of indicies...
+ stream.WriteInt32L( count );
+
+ // ...then write each index in turn...
+ for(TInt i=0; i<count; i++)
+ {
+ // First write the index type...
+ const CMMCScBkupIndexBase& index = *iIndicies[i];
+ stream.WriteInt8L( index.Type() );
+
+ // Then write its offset (and length)
+ const TMMCScBkupArchiveVector& vector = index.Vector();
+ stream << vector;
+
+ // NEW: Then write spare bytes for each index record
+ stream.WriteInt32L( 0 ); // per-index spare1
+ stream.WriteInt32L( 0 ); // per-index spare2
+ }
+
+ // NEW: write the amount of disk space required for each drive as
+ // part of the footer information
+ CMMCScBkupDataOwnerCollection& dataOwners = iDriver.DrvDataOwners();
+ dataOwners.CalculateDiskSpaceRequiredForRestoreL();
+ stream << dataOwners;
+
+ // Tidy up...
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ // Disable crc-calculation for header data. Header crc'd separately
+ iDataInterface.ADIActivateCrcCalculation(EFalse);
+#endif
+
+ // We can now update the header with the total length of the footer, validation bits and crcs
+ const TMMCScBkupArchiveVector& finalWriteInfo = iDataInterface.ADICurrentArchiveVectorInfo();
+ MMCScBkupArchiveUtils::SetFooterLengthL( iDataInterface.ADIRawArchiveFile(), finalWriteInfo.Length() );
+ MMCScBkupArchiveUtils::SetArchiveContentAsValidL( iDataInterface.ADIRawArchiveFile() );
+#ifdef RD_FILE_MANAGER_BACKUP
+ MMCScBkupArchiveUtils::SetArchiveCrcsL( iDataInterface.ADIRawArchiveFile(), iDataInterface.ADIArchiveCrc() );
+#endif
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveFooter::RestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveFooter::RestoreL( TInt aCalculatedFooterOffsetWithinArchive )
+ {
+ RReadStream stream( iDataInterface.ADIReadStreamUncompressedLC( aCalculatedFooterOffsetWithinArchive ) );
+
+ // NEW: Read stream format
+ stream.ReadInt32L(); // EStreamFormatVersion1
+
+ // NEW: spare1, spare2, spare3, spare4
+ stream.ReadInt32L();
+ stream.ReadInt32L();
+ stream.ReadInt32L();
+ stream.ReadInt32L();
+
+ // NEW: Read written index count
+ const TInt inMemoryIndexCount = iIndicies.Count();
+ const TInt archiveIndexCount = stream.ReadInt32L();
+ if ( archiveIndexCount > inMemoryIndexCount )
+ {
+ // Something wrong with file format version info?
+ User::Leave( KErrCorrupt );
+ }
+
+ // Read index offsets
+ for(TInt i=0; i<archiveIndexCount; i++)
+ {
+ // We only read the offset & length information.
+ // The actual respective index restoration is done by other
+ // objects as a result of other states
+ const TMMCScBkupOwnerDataType type = static_cast< TMMCScBkupOwnerDataType >( stream.ReadInt8L() );
+ //
+ if ( type < 0 || type >= EMMCScBkupOwnerDataTypeCount )
+ {
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ // Always read the vector info (in order to keep the stream
+ // position inline with the externalised representation)
+ TMMCScBkupArchiveVector vector;
+ stream >> vector;
+
+ // NEW: Then read spare bytes for each index record
+ stream.ReadInt32L(); // per-index spare1
+ stream.ReadInt32L(); // per-index spare2
+
+ // But only prepare the index if we have a similar type..
+ CMMCScBkupIndexBase* index = IndexByTypeOrNull( type );
+ //
+ if ( index )
+ {
+ index->SetVector( vector );
+ }
+
+ }
+ }
+
+ // NEW: read the amount of disk space required for each drive as
+ // part of the footer information
+ CMMCScBkupDataOwnerCollection& dataOwners = iDriver.DrvDataOwners();
+ stream >> dataOwners;
+
+ //
+ CleanupStack::PopAndDestroy(); // stream
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupArchiveHeader.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupArchiveHeader Implementation
+*
+*
+*/
+
+#include "CMMCScBkupArchiveHeader.h"
+
+// User includes
+#include "MMCScBkupArchiveUtils.h"
+
+/**
+ * NB. See MMCScBkupArchiveUtils.cpp for archive header file format.
+ */
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::CMMCScBkupArchiveHeader()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveHeader::CMMCScBkupArchiveHeader( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver )
+: iDataInterface( aDataInterface ), iDriver( aDriver )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::~CMMCScBkupArchiveHeader()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveHeader::~CMMCScBkupArchiveHeader()
+ {
+ delete iPhoneModelIdentifier;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveHeader::ConstructL()
+ {
+ iPhoneModelIdentifier = KNullDesC8().AllocL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveHeader* CMMCScBkupArchiveHeader::NewL( MMMCScBkupArchiveDataInterface& aDataInterface, MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupArchiveHeader* self = new(ELeave) CMMCScBkupArchiveHeader( aDataInterface, aDriver );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::StoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveHeader::StoreL(TBitFlags aCategory)
+ {
+ MMCScBkupArchiveUtils::WriteHeaderL( iDataInterface, aCategory );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::RestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveHeader::RestoreL()
+ {
+ MMCScBkupArchiveUtils::ReadHeaderL( iDataInterface, *this );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveHeader::SetPhoneModelIdentifierL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveHeader::SetPhoneModelIdentifierL( const TDesC8& aModel )
+ {
+ HBufC8* model = aModel.AllocL();
+ delete iPhoneModelIdentifier;
+ iPhoneModelIdentifier = model;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupArchiveInfo.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupArchiveInfo Implementation
+*
+*
+*/
+
+#include "CMMCScBkupArchiveInfo.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::CMMCScBkupArchiveInfo()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveInfo::CMMCScBkupArchiveInfo()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::~CMMCScBkupArchiveInfo()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveInfo::~CMMCScBkupArchiveInfo()
+ {
+ delete iFileInfo;
+ iSecureIds.Close();
+ iExcludedSecureIds.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveInfo::ConstructL( const TEntry& aEntry )
+ {
+ iFileInfo = CMMCScBkupFileInfo::NewL( aEntry, 0 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveInfo* CMMCScBkupArchiveInfo::NewL( const TEntry& aEntry )
+ {
+ CMMCScBkupArchiveInfo* self = NewLC( aEntry );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchiveInfo* CMMCScBkupArchiveInfo::NewLC( const TEntry& aEntry )
+ {
+ CMMCScBkupArchiveInfo* self = new(ELeave) CMMCScBkupArchiveInfo( );
+ CleanupStack::PushL(self);
+ self->ConstructL(aEntry);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::SetSIDs()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveInfo::SetSIDs( RArray<TSecureId>& aSIDs )
+ {
+ TInt count = aSIDs.Count();
+
+ for(TInt i = 0; i < count; i++ )
+ {
+ iSecureIds.Append(aSIDs[i]);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::SetExcludedSIDs()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupArchiveInfo::SetExcludedSIDs( RArray<TSecureId>& aExcludedSIDs )
+ {
+ TInt count = aExcludedSIDs.Count();
+
+ for(TInt i = 0; i < count; i++ )
+ {
+ iExcludedSecureIds.Append(aExcludedSIDs[i]);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::SIDs()
+//
+//
+// ---------------------------------------------------------------------------
+const RArray<TSecureId>& CMMCScBkupArchiveInfo::SIDs( TBitFlags aCategory ) const
+ {
+ __ASSERT_ALWAYS(aCategory == iCategory, User::Invariant());
+
+ return iSecureIds;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::ExcludeSIDs()
+//
+//
+// ---------------------------------------------------------------------------
+const RArray<TSecureId>& CMMCScBkupArchiveInfo::ExcludedSIDs( TBitFlags aCategory ) const
+ {
+ __ASSERT_ALWAYS(aCategory == iCategory, User::Invariant());
+
+ return iExcludedSecureIds;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::Category()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBitFlags CMMCScBkupArchiveInfo::Category() const
+ {
+ return iCategory;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::FileName()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C const TDesC& CMMCScBkupArchiveInfo::FileName() const
+ {
+ return iFileInfo->FileName();
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::DateTime()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C const TTime& CMMCScBkupArchiveInfo::DateTime() const
+ {
+ return iFileInfo->DateTime();
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupArchiveInfo::Drive()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TDriveNumber CMMCScBkupArchiveInfo::Drive() const
+ {
+ return iFileInfo->Drive();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupBufferManagers.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,837 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupBufferManagerBase implementation
+*
+*
+*/
+
+#include "CMMCScBkupBufferManagers.h"
+
+// System includes
+#include <ezstream.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataStrategies.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "MMMCScBkupProgressObserver.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerBase::CMMCScBkupBufferManagerBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerBase::CMMCScBkupBufferManagerBase(MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI, TType aType )
+: iType( aType ), iBufferPointer( NULL, 0, 0 ), iProgressManager( aProgressManager ), iADI( aADI )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerBase::~CMMCScBkupBufferManagerBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerBase::~CMMCScBkupBufferManagerBase()
+ {
+ delete iBuffer;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerBase::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerBase::ConstructL(TInt aBufferSize)
+ {
+ HBufC8* buffer = HBufC8::NewL(aBufferSize);
+ delete iBuffer;
+ iBuffer = buffer;
+ iBufferPointer.Set(iBuffer->Des());
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerBase::NewByTypeL()
+//
+// Factory
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerBase* CMMCScBkupBufferManagerBase::NewByTypeL(TType aType, MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI, TAny* aParam1, TAny* aParam2)
+ {
+ CMMCScBkupBufferManagerBase* ret = NULL;
+ //
+ switch(aType)
+ {
+ case ETypeDescriptorToArchive:
+ ret = CMMCScBkupBufferManagerDescriptorToArchive::NewL( aProgressManager, aADI );
+ break;
+ case ETypeFileToArchive:
+ ret = CMMCScBkupBufferManagerFileToArchive::NewL( aProgressManager, aADI );
+ break;
+ case ETypeArchiveToDescriptor:
+ ret = CMMCScBkupBufferManagerArchiveToDescriptor::NewL( aProgressManager, aADI );
+ break;
+ case ETypeArchiveToFile:
+ ret = CMMCScBkupBufferManagerArchiveToFile::NewL( aProgressManager, aADI );
+ break;
+ default:
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ CleanupStack::PushL(ret);
+ ret->InitializeL(aParam1, aParam2);
+ CleanupStack::Pop(ret);
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerBase::WriteToArchiveAndUpdateStatsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerBase::WriteToArchiveAndUpdateStatsL( const TDesC8& aData )
+ {
+ // Write the data we currently have to file. This reset
+ const TMMCScBkupArchiveVector& writtenInfo = ADI().ADIWriteL( aData );
+
+ // Update our stats. We combined what we've already written with
+ // the amount of data we just wrote.
+ if ( Info().Offset() == 0 )
+ {
+ // Possibly never updated the offset before...
+ Info().SetOffset( writtenInfo.Offset() );
+ }
+ //
+ const TInt existingLength = Info().Length();
+ Info().SetLength( existingLength + writtenInfo.Length() );
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::CMMCScBkupBufferManagerDescriptorToArchive()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerDescriptorToArchive::CMMCScBkupBufferManagerDescriptorToArchive( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+: CMMCScBkupBufferManagerBase( aProgressManager, aADI, ETypeDescriptorToArchive ), iSource( KNullDesC8 )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::CMMCScBkupBufferManagerDescriptorToArchive()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerDescriptorToArchive* CMMCScBkupBufferManagerDescriptorToArchive::NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+ {
+ CMMCScBkupBufferManagerDescriptorToArchive* self = new(ELeave) CMMCScBkupBufferManagerDescriptorToArchive( aProgressManager, aADI );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerDescriptorToArchive::InitializeL(TAny* aParam1, TAny* /*aParam2*/)
+ {
+ const TDesC8* pData = reinterpret_cast<const TDesC8*>(aParam1);
+ iSource.Set(*pData);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerDescriptorToArchive::InitializeL( CEZZStream& aZStream )
+ {
+ // We use the source object as the input buffer. Therefore the
+ // dynamic buffer is used as an intermediate storage depot for compressed
+ // data before it is flushed to disk
+ aZStream.SetInput( iSource );
+ aZStream.SetOutput( WriteBuffer() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::NeedInputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerDescriptorToArchive::NeedInputL(CEZZStream& /*aZStream*/)
+ {
+ // Nothing to do here - we have provided all our input in one go
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::NeedOutputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerDescriptorToArchive::NeedOutputL( CEZZStream& aZStream )
+ {
+ const TPtrC8 output(aZStream.OutputDescriptor());
+ WriteToArchiveAndUpdateStatsL( output );
+
+ // Reset ready for more writing
+ WriteBuffer().Zero();
+ aZStream.SetOutput( WriteBuffer() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerDescriptorToArchive::FinalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerDescriptorToArchive::FinalizeL( CEZZStream& aZStream )
+ {
+ // Write any remaining data...
+ const TPtrC8 output(aZStream.OutputDescriptor());
+ WriteToArchiveAndUpdateStatsL( output );
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::CMMCScBkupBufferManagerFileToArchive()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerFileToArchive::CMMCScBkupBufferManagerFileToArchive( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+: CMMCScBkupBufferManagerBase( aProgressManager, aADI, ETypeDescriptorToArchive ), iOutputPointer( NULL, 0, 0 )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::~CMMCScBkupBufferManagerFileToArchive()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerFileToArchive::~CMMCScBkupBufferManagerFileToArchive()
+ {
+ delete iReadStrategy;
+ delete iOutput;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerFileToArchive::ConstructL( const TDesC& aFileName )
+ {
+ CMMCScBkupBufferManagerBase::ConstructL();
+ //
+ CMMCScBkupDataStrategy* strategy = CMMCScBkupDataStrategy::ReadStrategyLC(aFileName, ADI().ADIFsSession());
+ delete iReadStrategy;
+ iReadStrategy = strategy;
+ CleanupStack::Pop(strategy);
+ //
+ HBufC8* output = HBufC8::NewL(KScBkupDefaultBufferSize);
+ delete iOutput;
+ iOutput = output;
+ iOutputPointer.Set(iOutput->Des());
+ //
+ iFileName.Set(aFileName);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::CMMCScBkupBufferManagerFileToArchive()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerFileToArchive* CMMCScBkupBufferManagerFileToArchive::NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+ {
+ CMMCScBkupBufferManagerFileToArchive* self = new(ELeave) CMMCScBkupBufferManagerFileToArchive( aProgressManager, aADI );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerFileToArchive::InitializeL(TAny* aParam1, TAny* /*aParam2*/)
+ {
+ const TDesC* pFileName = reinterpret_cast<const TDesC*>(aParam1);
+ const TPtrC fileName(*pFileName);
+ ConstructL(fileName);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerFileToArchive::InitializeL( CEZZStream& aZStream )
+ {
+ // Seed input buffer
+ TPtr8 pWriteBuffer( WriteBuffer() );
+ iReadStrategy->Read( pWriteBuffer );
+ aZStream.SetInput( pWriteBuffer );
+
+ // Progress during a backup is calculated based upon the amount of the
+ // source file that has been read.
+ ProgressManager().MMCScBkupHandleProgress( pWriteBuffer.Length() );
+
+ // Make ready for output
+ aZStream.SetOutput( iOutputPointer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::NeedInputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerFileToArchive::NeedInputL( CEZZStream& aZStream )
+ {
+ // Read some data from the file
+ TPtr8 pWriteBuffer( WriteBuffer() );
+ iReadStrategy->Read( pWriteBuffer );
+
+ // Progress during a backup is calculated based upon the amount of the
+ // source file that has been read.
+ ProgressManager().MMCScBkupHandleProgress( pWriteBuffer.Length() );
+
+ aZStream.SetInput( pWriteBuffer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::NeedOutputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerFileToArchive::NeedOutputL( CEZZStream& aZStream )
+ {
+ const TPtrC8 output(aZStream.OutputDescriptor());
+ WriteToArchiveAndUpdateStatsL( output );
+
+ // Reset ready for more writing
+ iOutputPointer.Zero();
+ aZStream.SetOutput( iOutputPointer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerFileToArchive::FinalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerFileToArchive::FinalizeL( CEZZStream& aZStream )
+ {
+ const TPtrC8 output(aZStream.OutputDescriptor());
+
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ const TInt compressedSize = output.Size() + Info().Length();
+ TEntry entry;
+ const TInt error = ADI().ADIFsSession().Entry(iFileName, entry);
+ if (error == KErrNone)
+ {
+ const TReal ratio = (TReal) entry.iSize / (TReal) compressedSize;
+ __LOG4("CMMCScBkupBufferManagerFileToArchive::FinalizeL() - compressing %S - original: %d, compressed: %d, ratio: %f", &iFileName, entry.iSize, compressedSize, ratio);
+ if (compressedSize > entry.iSize)
+ {
+ // We've made this file bigger
+ __LOG3("CMMCScBkupBufferManagerFileToArchive::FinalizeL() - compressing %S had negative effect - originalSize: %d vs compressed: %d", &iFileName, entry.iSize, compressedSize);
+ }
+ }
+#endif
+
+ WriteToArchiveAndUpdateStatsL( output );
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::CMMCScBkupBufferManagerArchiveToDescriptor()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerArchiveToDescriptor::CMMCScBkupBufferManagerArchiveToDescriptor( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+: CMMCScBkupBufferManagerBase( aProgressManager, aADI, ETypeArchiveToDescriptor ), iOutputPointer( NULL, 0, 0 )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::~CMMCScBkupBufferManagerArchiveToDescriptor()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerArchiveToDescriptor::~CMMCScBkupBufferManagerArchiveToDescriptor()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::CMMCScBkupBufferManagerArchiveToDescriptor()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerArchiveToDescriptor* CMMCScBkupBufferManagerArchiveToDescriptor::NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+ {
+ CMMCScBkupBufferManagerArchiveToDescriptor* self = new(ELeave) CMMCScBkupBufferManagerArchiveToDescriptor( aProgressManager, aADI );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToDescriptor::InitializeL( TAny* aParam1, TAny* aParam2 )
+ {
+ // Setup sink
+ TDes8* pDataSink = (TDes8*) aParam1;
+ iOutputPointer.Set( const_cast<TUint8*>( pDataSink->Ptr() ), pDataSink->Length(), pDataSink->MaxLength() );
+
+ // Setup max read info
+ const TMMCScBkupArchiveVector* readInfo = (const TMMCScBkupArchiveVector*) aParam2;
+ Info() = *readInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToDescriptor::InitializeL( CEZZStream& aZStream )
+ {
+ // Try to read some data
+ TryToReadMoreSourceDataL();
+
+ // We use the source object as the input buffer. Therefore the
+ // dynamic buffer is used as an intermediate storage depot for compressed
+ // data before it is flushed to disk
+ aZStream.SetInput( DataView() );
+ aZStream.SetOutput( iOutputPointer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::NeedInputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToDescriptor::NeedInputL(CEZZStream& aZStream)
+ {
+ // Try to read some more data
+ TryToReadMoreSourceDataL();
+ aZStream.SetInput( DataView() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::NeedOutputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToDescriptor::NeedOutputL( CEZZStream& /*aZStream*/ )
+ {
+ // Nothing to do here, we've got no more space if the sink is full
+ ASSERT( EFalse );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::FinalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToDescriptor::FinalizeL( CEZZStream& /*aZStream*/ )
+ {
+ // Nothing to do here, we've writing straight to the client's descriptor
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToDescriptor::TryToReadMoreSourceDataL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToDescriptor::TryToReadMoreSourceDataL()
+ {
+ if ( Info().Length() > 0 )
+ {
+ // Try to read some source data, but don't read beyond the limits
+ const TMMCScBkupArchiveVector& readInfoResult = ADI().ADIReadL( WriteBuffer(), Info() );
+
+ // Update remaining read info so that we know where from and how much data
+ // to read next time around
+ const TInt newStartingOffset = readInfoResult.Offset() + readInfoResult.Length();
+ const TInt remainingToBeRead = Info().Length() - readInfoResult.Length();
+ //
+ Info().SetOffset( newStartingOffset );
+ Info().SetLength( remainingToBeRead );
+ //
+ __LOG1("CMMCScBkupBufferManagerArchiveToDescriptor::TryToReadMoreSourceDataL() - read: %d bytes from archive", readInfoResult.Length());
+ //
+ ProgressManager().MMCScBkupHandleProgress( readInfoResult.Length() );
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::CMMCScBkupBufferManagerArchiveToFile()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerArchiveToFile::CMMCScBkupBufferManagerArchiveToFile( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+: CMMCScBkupBufferManagerBase( aProgressManager, aADI, ETypeArchiveToFile ), iOutputPointer( NULL, 0, 0 )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::~CMMCScBkupBufferManagerArchiveToFile()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerArchiveToFile::~CMMCScBkupBufferManagerArchiveToFile()
+ {
+ delete iWriteStrategy;
+ delete iOutput;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::ConstructL( const TDesC& aFileName )
+ {
+ CMMCScBkupBufferManagerBase::ConstructL();
+
+ // Create a write strategy that ultimately writes to a temp file in our
+ // private data cage. When the file has been successfully extracted,
+ // we then replace the original. -> see FinalizeL()
+ CMMCScBkupDataStrategy* strategy = CMMCScBkupDataStrategy::WriteStrategyLC( aFileName, ADI().ADIFsSession(), KMMCScBkupUseTempFile );
+ delete iWriteStrategy;
+ iWriteStrategy = strategy;
+ CleanupStack::Pop( strategy );
+ //
+ HBufC8* output = HBufC8::NewL(KScBkupDefaultBufferSize);
+ delete iOutput;
+ iOutput = output;
+ iOutputPointer.Set(iOutput->Des());
+ //
+ iFileName.Set(aFileName);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::CMMCScBkupBufferManagerArchiveToFile()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupBufferManagerArchiveToFile* CMMCScBkupBufferManagerArchiveToFile::NewL( MMMCScBkupProgressObserver& aProgressManager, MMMCScBkupArchiveDataInterface& aADI )
+ {
+ CMMCScBkupBufferManagerArchiveToFile* self = new(ELeave) CMMCScBkupBufferManagerArchiveToFile( aProgressManager, aADI );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::InitializeL(TAny* aParam1, TAny* aParam2)
+ {
+ // Param 1 is the destination file name
+ const TDesC* pFileName = reinterpret_cast<const TDesC*>(aParam1);
+ const TPtrC fileName(*pFileName);
+ ConstructL(fileName);
+
+ // Param 2 defines where we should read archive data from (and how much we should read)
+ const TMMCScBkupArchiveVector* readInfo = (const TMMCScBkupArchiveVector*) aParam2;
+ Info() = *readInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::InitializeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::InitializeL( CEZZStream& aZStream )
+ {
+ // Try to read some data
+ TryToReadMoreSourceDataL();
+
+ // Input comes from the base class buffer. Its effectively the
+ // data from the archive.
+ aZStream.SetInput( WriteBuffer() );
+
+ // Output goes to our secondary buffer - we'll eventually
+ // write this to the destination file.
+ aZStream.SetOutput( iOutputPointer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::NeedInputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::NeedInputL( CEZZStream& aZStream )
+ {
+ // Try to read some more data
+ TryToReadMoreSourceDataL();
+ aZStream.SetInput( DataView() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::NeedOutputL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::NeedOutputL( CEZZStream& aZStream )
+ {
+ // Flush output to oure write strategy
+ const TPtrC8 output(aZStream.OutputDescriptor());
+ const TInt error = iWriteStrategy->Write( output );
+ User::LeaveIfError( error );
+
+ // Reset ready for more writing
+ iOutputPointer.Zero();
+ aZStream.SetOutput( iOutputPointer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::FinalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::FinalizeL( CEZZStream& aZStream )
+ {
+ const TPtrC8 output(aZStream.OutputDescriptor());
+ TInt error = iWriteStrategy->Write( output );
+ User::LeaveIfError( error );
+
+ // No errors writing to temp file, try to finalise write strategy -
+ // essentially this replaces the original file.
+ error = iWriteStrategy->Finalize();
+ User::LeaveIfError( error );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupBufferManagerArchiveToFile::TryToReadMoreSourceDataL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupBufferManagerArchiveToFile::TryToReadMoreSourceDataL()
+ {
+ if ( Info().Length() > 0 )
+ {
+ // Try to read some source data, but don't read beyond the limits
+ const TMMCScBkupArchiveVector& readInfoResult = ADI().ADIReadL( WriteBuffer(), Info() );
+
+ // Update remaining read info so that we know where from and how much data
+ // to read next time around
+ const TInt newStartingOffset = readInfoResult.Offset() + readInfoResult.Length();
+ const TInt remainingToBeRead = Info().Length() - readInfoResult.Length();
+ //
+ Info().SetOffset( newStartingOffset );
+ Info().SetLength( remainingToBeRead );
+ //
+ __LOG2("CMMCScBkupBufferManagerArchiveToFile::TryToReadMoreSourceDataL() - read: %d bytes from archive when reconstructing: %S", readInfoResult.Length(), &iFileName );
+ //
+ ProgressManager().MMCScBkupHandleProgress( readInfoResult.Length() );
+ }
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDataOwnerCollection.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,567 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupDataOwnerCollection implementation
+*
+*
+*/
+
+#include "CMMCScBkupDataOwnerCollection.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "TMMCScBkupDriveAndSize.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMCScBkupSBEUtils.h"
+#include "MMMCScBkupDriver.h"
+#include "CMMCScBkupDriveDataSizeManager.h"
+#include "RMMCScBkupProgressSizer.h"
+#ifdef RD_FILE_MANAGER_BACKUP
+#include "CMMCScBkupArchiveInfo.h"
+#include "BkupEngine.hrh"
+#endif
+
+// Constants
+const TInt KMMCScBkupDataOwnerGranularity = 20;
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::CMMCScBkupDataOwnerCollection()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerCollection::CMMCScBkupDataOwnerCollection( MMMCScBkupDriver& aDriver, TBitFlags aCategory )
+: iDriver( aDriver ), iOwners(KMMCScBkupDataOwnerGranularity), iCategory( aCategory )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::~CMMCScBkupDataOwnerCollection()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerCollection::~CMMCScBkupDataOwnerCollection()
+ {
+ Reset();
+ iOwners.Close();
+ delete iRestoreSizer;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::ConstructL()
+ {
+ // The restore sizer data type is not relevant. It holds
+ // the combined disk space requirements for all drives
+ // for all data types.
+ iRestoreSizer = CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeAny );
+ CleanupStack::Pop( iRestoreSizer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerCollection* CMMCScBkupDataOwnerCollection::NewL( MMMCScBkupDriver& aDriver, TBitFlags aCategory )
+ {
+ CMMCScBkupDataOwnerCollection* self = new(ELeave) CMMCScBkupDataOwnerCollection( aDriver, aCategory );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::AssignL()
+//
+//
+// ---------------------------------------------------------------------------
+#ifdef RD_FILE_MANAGER_BACKUP
+TBool CMMCScBkupDataOwnerCollection::AssignL( const CMMCScBkupDataOwnerInfo& dataOwnerInfo )
+ {
+ const CMMCScBkupArchiveInfo& archive = iDriver.DrvParamsBase().ArchiveInfo( Category() );
+ const RArray<TSecureId>& secureIds = archive.SIDs( Category() );
+ const RArray<TSecureId>& excludedSecureIds = archive.ExcludedSIDs( Category() );
+ TBitFlags flags = archive.SpecialFlags();
+ TBitFlags excludedFlags = archive.ExcludedSpecialFlags();
+
+ // Check whether data owner belongs to this category
+ if( BelongsToL( dataOwnerInfo, flags, excludedFlags, secureIds, excludedSecureIds) )
+ {
+ iOwners.AppendL(&dataOwnerInfo);
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+#else
+void CMMCScBkupDataOwnerCollection::AssignL( RDataOwnerInfoArray& aArray )
+ {
+ const TInt count = aArray.Count();
+ //
+ for(TInt i=count-1; i>=0; i--)
+ {
+ // Ownership is immediately transferred to the backup owner info object
+ // so we should remove it from the array prior to passing into NewLC
+ conn::CDataOwnerInfo* sbDataOwner = aArray[i];
+ aArray.Remove(i); // Ensures it won't be deleted twice
+ //
+ CMMCScBkupDataOwnerInfo* info = CMMCScBkupDataOwnerInfo::NewLC( sbDataOwner );
+ iOwners.AppendL(info);
+ CleanupStack::Pop(info);
+ }
+ }
+#endif
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::AppendL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::AppendL( CMMCScBkupDataOwnerInfo* aNewEntry )
+ {
+ iOwners.AppendL( aNewEntry );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::Count()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataOwnerCollection::Count() const
+ {
+ return iOwners.Count();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::Owner()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::Owner(TInt aIndex)
+ {
+ CMMCScBkupDataOwnerInfo* info = iOwners[aIndex];
+ return *info;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::Owner()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::Owner(TInt aIndex) const
+ {
+ const CMMCScBkupDataOwnerInfo* info = iOwners[aIndex];
+ return *info;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::OwnerL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::OwnerL( TSecureId aSID )
+ {
+ TInt index = KErrNotFound;
+ CMMCScBkupDataOwnerInfo* ret = CMMCScBkupDataOwnerInfo::New( aSID );
+ if (ret)
+ {
+ TIdentityRelation<CMMCScBkupDataOwnerInfo> relation(CMMCScBkupDataOwnerInfo::CompareDataOwnerBySIDL);
+ index = iOwners.Find( ret, relation );
+ delete ret;
+ ret = NULL;
+ }
+ //
+ if (index >= 0)
+ {
+ ret = iOwners[index];
+ }
+ else
+ {
+ User::Leave(KErrNotFound);
+ }
+ //
+ return *ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::OwnerL()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::OwnerL( TSecureId aSID ) const
+ {
+ CMMCScBkupDataOwnerCollection& self = *const_cast<CMMCScBkupDataOwnerCollection*>(this);
+ CMMCScBkupDataOwnerInfo& ret = self.OwnerL( aSID );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::OwnerL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::OwnerL( TUid aPackageId )
+ {
+ CMMCScBkupDataOwnerInfo* ret = NULL;
+ const TInt count = iOwners.Count();
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupDataOwnerInfo* entry = iOwners[ i ];
+ //
+ const TUid packageId = MMCScBkupSBEUtils::PackageIdFromGenericL( entry->Owner().Identifier() );
+ if ( packageId == aPackageId )
+ {
+ ret = entry;
+ }
+ }
+ //
+ if ( !ret )
+ {
+ User::Leave(KErrNotFound);
+ }
+ //
+ return *ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::OwnerL()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::OwnerL( TUid aPackageId ) const
+ {
+ CMMCScBkupDataOwnerCollection& self = *const_cast<CMMCScBkupDataOwnerCollection*>(this);
+ CMMCScBkupDataOwnerInfo& ret = self.OwnerL( aPackageId );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::OwnerL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::OwnerL( const TDesC& aHash )
+ {
+ CMMCScBkupDataOwnerInfo* ret = NULL;
+ const TInt count = iOwners.Count();
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupDataOwnerInfo* entry = iOwners[ i ];
+
+ // Check if its a java item...
+ const TSBDerivedType type = entry->Owner().Identifier().DerivedTypeL();
+ if ( type == EJavaDerivedType || type == EJavaTransferDerivedType )
+ {
+ // Get hash
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( entry->Owner().Identifier() );
+ const TBool foundMatch = ( *hash == aHash );
+ CleanupStack::PopAndDestroy( hash );
+
+ if ( foundMatch )
+ {
+ ret = entry;
+ break;
+ }
+ }
+ }
+ //
+ if ( !ret )
+ {
+ User::Leave(KErrNotFound);
+ }
+ //
+ return *ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::OwnerL()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupDataOwnerInfo& CMMCScBkupDataOwnerCollection::OwnerL( const TDesC& aHash ) const
+ {
+ CMMCScBkupDataOwnerCollection& self = *const_cast<CMMCScBkupDataOwnerCollection*>(this);
+ CMMCScBkupDataOwnerInfo& ret = self.OwnerL( aHash );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::Remove()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::Remove( TInt aIndex )
+ {
+ CMMCScBkupDataOwnerInfo* info = iOwners[aIndex];
+ delete info;
+ iOwners.Remove(aIndex);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::Reset()
+ {
+ iOwners.ResetAndDestroy();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::TotalOperationalSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataOwnerCollection::TotalOperationalSizeL() const
+ {
+ RMMCScBkupProgressSizer sizer( iDriver.DrvParamsBase().DriveAndOperations() );
+ TInt64 size = 0;
+ //
+ const TInt count = Count();
+ for(TInt i=0; i<count; i++)
+ {
+ const CMMCScBkupDataOwnerInfo& owner = Owner( i );
+ //
+ const TInt64 restoreSizeForDO = sizer.RestoreCombinedDataSizeL( owner );
+
+ __LOG2("CMMCScBkupDataOwnerCollection::TotalOperationalSizeL() - data transfer amount required for DO: 0x%08x is: %8Ld", owner.SecureId().iId, restoreSizeForDO );
+
+ size += restoreSizeForDO;
+ }
+ //
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::RebootRequired()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerCollection::RebootRequired() const
+ {
+ TBool rebootRequired = EFalse;
+ //
+ const TInt count = iOwners.Count();
+ for(TInt i=count-1; i>=0; i--)
+ {
+ // We check the SBE's common settings (for each Data Owner) to identify
+ // if a reboot is required. So long as one data owner requires a
+ // reboot, then we must reset the machine.. hence we break
+ // out of the loop immediately.
+ const CMMCScBkupDataOwnerInfo& info = *iOwners[i];
+ const CDataOwnerInfo& sbeDataOwnerInfo = info.Owner();
+ //
+ if ( sbeDataOwnerInfo.CommonSettings() & ERequiresReboot )
+ {
+ rebootRequired = ETrue;
+ break;
+ }
+ }
+ //
+ return rebootRequired;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::DiskSpaceRequiredForRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataOwnerCollection::DiskSpaceRequiredForRestore( TDriveNumber aDrive ) const
+ {
+ return iRestoreSizer->Size( aDrive );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::CalculateDiskSpaceRequiredForRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::CalculateDiskSpaceRequiredForRestoreL()
+ {
+ iRestoreSizer->Reset();
+ //
+ RArray<TMMCScBkupDriveAndSize> driveSizes;
+ CleanupClosePushL( driveSizes );
+ //
+ const TInt count = iOwners.Count();
+ for(TInt i=count-1; i>=0; i--)
+ {
+ const CMMCScBkupDataOwnerInfo& owner = *iOwners[i];
+ __LOG(" ");
+ __LOG1("CMMCScBkupDataOwnerCollection::CalculateDiskSpaceRequiredForRestoreL() - owner: 0x%08x...", owner.SecureId().iId);
+ //
+ owner.OperationalSizesL( driveSizes );
+ //
+ const TInt driveSizesCount = driveSizes.Count();
+ for( TInt j=0; j<driveSizesCount; j++ )
+ {
+ const TMMCScBkupDriveAndSize& entry = driveSizes[ j ];
+ __LOG2("CMMCScBkupDataOwnerCollection::CalculateDiskSpaceRequiredForRestoreL() - drive: %c:, size: %8Ld", entry.Drive() + 'A', entry.Size());
+ //
+ iRestoreSizer->AddToSizeL( entry.Size(), entry.Drive() );
+ }
+ }
+ //
+ CleanupStack::PopAndDestroy( &driveSizes );
+
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ __LOG(" ");
+ __LOG(" ");
+ __LOG(" ");
+ __LOG(" ");
+ __LOG("CMMCScBkupDataOwnerCollection::CalculateDiskSpaceRequiredForRestoreL() - SUMMARY:");
+ __LOG(" ");
+
+ for( TInt d = EDriveA; d<=EDriveZ; d++ )
+ {
+ // Get the size of each data type for this drive.
+ const TDriveNumber drive = static_cast< TDriveNumber >( d );
+ const TInt64 size = DiskSpaceRequiredForRestore( drive );
+
+ if ( size > 0 )
+ {
+ __LOG2("CMMCScBkupDataOwnerCollection::CalculateDiskSpaceRequiredForRestoreL() - %8Ld bytes required for drive: %c:", size, drive + 'A' );
+ }
+ }
+#endif
+ }
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::BelongsToL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerCollection::BelongsToL(const CMMCScBkupDataOwnerInfo& aInfo,
+ TBitFlags aFlags, TBitFlags aExcludedFlags,
+ const RArray<TSecureId> aSecureIds, const RArray<TSecureId> aExcludedSecureIds) const
+ {
+ // First of all check if data owner has system or java data. If it has and these
+ // types have been declared as excluded data types, then skip owner in this catecory.
+ // Public data is more common to data owners together with other data types meaning it
+ // cannot be a reason to invalidate data owner. System's user data folder (e.g. C:\Data) files
+ // are being skipped later on in public data backup phase if category is not EBUCatUserFiles
+ // It would be possible to just skip excluded types per data owner, but it
+ // might make data owner unstable after restore
+
+ if( ((aExcludedFlags.Value() & EBUCatSpecSystem) && aInfo.HasSystemDataL()) ||
+ ((aExcludedFlags.Value() & EBUCatSpecJava) && aInfo.HasJavaDataL()) ||
+ ((aExcludedFlags.Value() & EBUCatSpecPublic) && aInfo.HasPublicDataL()) )
+ {
+ return EFalse;
+ }
+
+ // Then check whether all specified and SID not in list of excluded owners
+ if( (aFlags.Value() & EBUCatSpecAll) )
+ {
+ TBool excluded = EFalse;
+
+ for(TInt i = 0; i < aExcludedSecureIds.Count(); i++)
+ {
+ if(aInfo.SecureId().iId == aExcludedSecureIds[i].iId)
+ {
+ excluded = ETrue;
+ break;
+ }
+ }
+
+ return !excluded;
+ }
+
+ // Then check whether special rules apply
+ if( ((aFlags.Value() & EBUCatSpecSystem) && aInfo.HasSystemDataL()) ||
+ ((aFlags.Value() & EBUCatSpecJava) && aInfo.HasJavaDataL()) ||
+ ((aFlags.Value() & EBUCatSpecPublic) && aInfo.HasPublicDataL()) )
+ {
+ return ETrue;
+ }
+
+ // Finally check whether SID matches
+ for(TInt i = 0; i < aSecureIds.Count(); i++)
+ {
+ if(aInfo.SecureId().iId == aSecureIds[i].iId)
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+#endif
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::InternalizeL( RReadStream& aStream )
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ aStream.ReadInt32L(); // spare3
+
+ CMMCScBkupDriveSizer* restoreSizer = CMMCScBkupDriveSizer::NewLC( aStream );
+ delete iRestoreSizer;
+ iRestoreSizer = restoreSizer;
+ CleanupStack::Pop( restoreSizer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerCollection::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerCollection::ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ aStream.WriteInt32L( 0 ); // spare3
+
+ aStream << *iRestoreSizer;
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDataOwnerInfo.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,560 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupDataOwnerInfo implementation
+*
+*
+*/
+
+#include "CMMCScBkupDataOwnerInfo.h"
+
+// System includes
+#include <s32strm.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupSBEUtils.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "CMMCScBkupDriveDataSizeManager.h"
+
+// Constants
+_LIT_SECURE_ID(KMMCScBkupUninitialisedSecureId, 0);
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::CMMCScBkupDataOwnerInfo()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo::CMMCScBkupDataOwnerInfo( CDataOwnerInfo* aOwner )
+: iDataOwner(aOwner), iVersion(EStreamFormatVersionLatest-1)
+ {
+ SetStatus(EUnset);
+ //
+ iSecureId = KMMCScBkupUninitialisedSecureId;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::~CMMCScBkupDataOwnerInfo()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo::~CMMCScBkupDataOwnerInfo()
+ {
+ delete iDataOwner;
+ delete iOperationalSize;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::ConstructL()
+ {
+ if ( iOperationalSize == NULL )
+ {
+ iOperationalSize = CMMCScBkupDataTypeSizer::NewL();
+ }
+
+ // Try and extract the SID if its a package or a SID type
+ const TSBDerivedType type = iDataOwner->Identifier().DerivedTypeL();
+ //
+ if (type == ESIDDerivedType || type == EPackageDerivedType)
+ {
+ iSecureId = MMCScBkupSBEUtils::SecureIdFromGenericL(iDataOwner->Identifier());
+ if( iSecureId.iId == KNullUid.iUid && iVersion > EStreamFormatVersion1 )
+ {
+ iSecureId = MMCScBkupSBEUtils::PackageIdFromGenericL(iDataOwner->Identifier());
+ }
+ }
+
+ // The following code sets the completion status to ETrue
+ // for any irrelevant items associated with a data owner. I.e. if
+ // a data owner doesn't support active backup, then it sets the completion
+ // of active backup to ETrue. This makes writing the logic inside the
+ // active/passive/system backup items a little easier (active in particular)
+ const TBool hasJavaData = HasJavaDataL();
+ const TBool hasActiveData = HasActiveDataL();
+ const TBool hasPassiveData = HasPassiveDataL();
+ const TBool hasPublicData = HasPublicDataL();
+ const TBool hasSystemData = HasSystemDataL();
+
+ // Update completion statuses (i.e. "what work must be done")
+ SetCompletionStatus( EMMCScBkupOwnerDataTypeJavaData, !hasJavaData );
+ SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, !hasActiveData );
+ SetCompletionStatus( EMMCScBkupOwnerDataTypePassiveData, !hasPassiveData );
+ SetCompletionStatus( EMMCScBkupOwnerDataTypePublicData, !hasPublicData );
+ SetCompletionStatus( EMMCScBkupOwnerDataTypeSystemData, !hasSystemData );
+
+ // Be aware that CMMCScBkupStateRequestSizeOfDataOwner::GetJavaDataSizesL() can
+ // manipulate the passive data completion status depending on whether the midlet
+ // has associated data files.
+
+ // If we're logging, then we write out some useful debugging info that shows
+ // which operations must be performed for each D.O.
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ TBuf<256> drivePrint;
+ const TDriveList& driveList = iDataOwner->DriveList();
+
+ for(TInt i=0; i<KMaxDrives; i++)
+ {
+ if (driveList[i] != 0)
+ {
+ const TDriveUnit driveUnit(i);
+ const TDriveName name(driveUnit.Name());
+ drivePrint.Append(name);
+ if (i < KMaxDrives - 1)
+ {
+ drivePrint.Append(_L(", "));
+ }
+ }
+ }
+
+ if ( hasJavaData )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( iDataOwner->Identifier() );
+ __LOG7("CMMCScBkupDataOwnerInfo::ConstructL() - PubD: %d, ActD: %d, PasD: %d, JavD: %d, SysD: %d, drives: %S, hash: %S", hasPublicData, hasActiveData, hasPassiveData, hasJavaData, hasSystemData, &drivePrint, hash);
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ __LOG8("CMMCScBkupDataOwnerInfo::ConstructL() - PubD: %d, ActD: %d, PasD: %d, JavD: %d, SysD: %d, drives: %S, SID : 0x%08x %S", hasPublicData, hasActiveData, hasPassiveData, hasJavaData, hasSystemData, &drivePrint, iSecureId.iId, &MMCScBkupLogger::FriendlyNameForSID( iSecureId ));
+ }
+#endif
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::New()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo* CMMCScBkupDataOwnerInfo::New( TSecureId aSecureId )
+ {
+ CMMCScBkupDataOwnerInfo* self = new CMMCScBkupDataOwnerInfo( NULL );
+ if (self)
+ {
+ self->iSecureId = aSecureId;
+ }
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo* CMMCScBkupDataOwnerInfo::NewLC( CDataOwnerInfo* aOwner )
+ {
+ CleanupStack::PushL(aOwner);
+ CMMCScBkupDataOwnerInfo* self = new(ELeave) CMMCScBkupDataOwnerInfo( aOwner );
+ CleanupStack::Pop(aOwner);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerInfo* CMMCScBkupDataOwnerInfo::NewLC( RReadStream& aStream )
+ {
+ CMMCScBkupDataOwnerInfo* self = new(ELeave) CMMCScBkupDataOwnerInfo();
+ CleanupStack::PushL(self);
+ aStream >> *self;
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::Owner()
+//
+//
+// ---------------------------------------------------------------------------
+CDataOwnerInfo& CMMCScBkupDataOwnerInfo::Owner()
+ {
+ return *iDataOwner;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::Owner()
+//
+//
+// ---------------------------------------------------------------------------
+const CDataOwnerInfo& CMMCScBkupDataOwnerInfo::Owner() const
+ {
+ return *iDataOwner;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::Status()
+//
+//
+// ---------------------------------------------------------------------------
+TDataOwnerStatus CMMCScBkupDataOwnerInfo::Status() const
+ {
+ return iStatus;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::SetStatus()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::SetStatus(TDataOwnerStatus aStatus)
+ {
+ iStatus = aStatus;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::AddToOperationalSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::AddToOperationalSizeL( TMMCScBkupOwnerDataType aType, TDriveNumber aDrive, TInt64 aSize )
+ {
+ iOperationalSize->AddToSizeL( aType, aSize, aDrive );
+
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ const TInt64 newSize = iOperationalSize->Size( aType, aDrive );
+ __LOG5("CMMCScBkupDataOwnerInfo::AddToOperationalSizeL() - [0x%08x] - aSize: %8Ld, newSize: %8Ld, aDrive: %c:, aType: %S", iSecureId.iId, aSize, newSize, aDrive + 'A', &MMCScBkupLogger::DataType( aType ) );
+#endif
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::SetOperationalSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::SetOperationalSizeL( TMMCScBkupOwnerDataType aType, TDriveNumber aDrive, TInt64 aSize )
+ {
+ iOperationalSize->Reset( aType, aDrive );
+ iOperationalSize->AddToSizeL( aType, aSize, aDrive );
+
+ __LOG4("CMMCScBkupDataOwnerInfo::SetOperationalSizeL() - [0x%08x] - aSize: %8Ld, aDrive: %c:, aType: %S", iSecureId.iId, aSize, aDrive + 'A', &MMCScBkupLogger::DataType( aType ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::ResetOperationalSize()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::ResetOperationalSize( TMMCScBkupOwnerDataType aType )
+ {
+ iOperationalSize->Reset( aType );
+ __LOG2("CMMCScBkupDataOwnerInfo::ResetOperationalSize() - [0x%08x] - aType: %S", iSecureId.iId, &MMCScBkupLogger::DataType( aType ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::OperationalSize()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataOwnerInfo::OperationalSize( TMMCScBkupOwnerDataType aType, TDriveNumber aDrive ) const
+ {
+ const TInt64 size = iOperationalSize->Size( aType, aDrive );
+
+ __LOG4("CMMCScBkupDataOwnerInfo::OperationalSize() - [0x%08x] - size: %8Ld, aDrive: %c:, aType: %S", iSecureId.iId, size, aDrive + 'A', &MMCScBkupLogger::DataType( aType ) );
+
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::OperationalSize()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataOwnerInfo::OperationalSize( TMMCScBkupOwnerDataType aType ) const
+ {
+ const TInt64 size = iOperationalSize->Size( aType );
+
+ //__LOG3("CMMCScBkupDataOwnerInfo::OperationalSize() - [0x%08x] - size: %8Ld, aType: %S", iSecureId.iId, size, &MMCScBkupLogger::DataType( aType ) );
+
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::OperationalSize()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataOwnerInfo::OperationalSize( TDriveNumber aDrive ) const
+ {
+ const TInt64 size = iOperationalSize->CombinedSize( aDrive );
+
+ //__LOG3("CMMCScBkupDataOwnerInfo::OperationalSize() - [0x%08x] - size: %8Ld, aDrive: %c:", iSecureId.iId, size, aDrive + 'A' );
+
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::OperationalSizesL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::OperationalSizesL( RArray<TMMCScBkupDriveAndSize>& aSizes ) const
+ {
+ iOperationalSize->GetSizesL( aSizes );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::SetCompletionStatus()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::SetCompletionStatus( TMMCScBkupOwnerDataType aType, TBool aCompleted )
+ {
+ iCompletionStatus[aType] = aCompleted;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::CompletionStatus()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::CompletionStatus( TMMCScBkupOwnerDataType aType ) const
+ {
+ return iCompletionStatus[aType];
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::ActiveDataRetryCount()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataOwnerInfo::ActiveDataRetryCount() const
+ {
+ return iActiveDataRetryCount;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::SetActiveDataRetryCount()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::SetActiveDataRetryCount(TInt aCount)
+ {
+ iActiveDataRetryCount = aCount;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::InternalizeL(RReadStream& aStream)
+ {
+ iVersion = aStream.ReadInt32L(); // EStreamFormatVersionX
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ aStream.ReadInt32L(); // spare3
+
+ // Secure ID
+ iSecureId = aStream.ReadInt32L();
+
+ // Data sizes
+ CMMCScBkupDataTypeSizer* operationalSize = CMMCScBkupDataTypeSizer::NewLC( aStream );
+ delete iOperationalSize;
+ iOperationalSize = operationalSize;
+ CleanupStack::Pop( operationalSize );
+
+ // Read data owner buffer length
+ TCardinality dataOwnerLength;
+ aStream >> dataOwnerLength;
+
+ // Internalize the data owner (as raw descriptor)
+ HBufC8* dataOwnerBuffer = HBufC8::NewLC( dataOwnerLength );
+ TPtr8 pDataOwnerBuffer( dataOwnerBuffer->Des() );
+ aStream.ReadL( pDataOwnerBuffer, dataOwnerLength );
+ //
+ CDataOwnerInfo* dataOwner = CDataOwnerInfo::NewL( *dataOwnerBuffer );
+ delete iDataOwner;
+ iDataOwner = dataOwner;
+ CleanupStack::PopAndDestroy( dataOwnerBuffer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataOwnerInfo::ExternalizeL(RWriteStream& aStream) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion2 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ aStream.WriteInt32L( 0 ); // spare3
+
+ // Always write secure id
+ aStream.WriteInt32L( iSecureId );
+
+ // ... and always write the data sizes
+ aStream << *iOperationalSize;
+
+ // Externalize the data owner to an HBufC8
+ HBufC8* dataOwnerBuffer = iDataOwner->ExternaliseL();
+ CleanupStack::PushL( dataOwnerBuffer );
+
+ // Write leading byte count - helps us when it comes to internalising
+ const TCardinality dataOwnerLength( dataOwnerBuffer->Length() );
+ aStream << dataOwnerLength;
+
+ // Now write the data owner buffer - not using chevrons just in case it
+ // does funny unicode compression stuff...
+ aStream.WriteL( *dataOwnerBuffer );
+
+ CleanupStack::PopAndDestroy(dataOwnerBuffer);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::CompareDataOwnerBySIDL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::CompareDataOwnerBySIDL(const CMMCScBkupDataOwnerInfo& aLeft, const CMMCScBkupDataOwnerInfo& aRight)
+ {
+ TBool same = EFalse;
+
+ // If we have an owner object, then we first compare the derived types.
+ // If not, we just directly compare the SIDs
+ if ( aLeft.iDataOwner && aRight.iDataOwner )
+ {
+ const TSBDerivedType leftType = aLeft.Owner().Identifier().DerivedTypeL();
+ const TSBDerivedType rightType = aRight.Owner().Identifier().DerivedTypeL();
+ //
+ same = ((leftType == rightType) ||
+ (leftType == ESIDDerivedType && rightType == EPackageDerivedType) ||
+ (leftType == EPackageDerivedType && rightType == ESIDDerivedType)
+ );
+ }
+ else if ( aRight.iDataOwner )
+ {
+ // Check that it is not Java data owner in question. Java DOs all have
+ // secure id 0x0, but it could also be the case for certain package
+ // data owners (see for KDummyId in SBE implementation).
+ if( !MMCScBkupSBEUtils::HasJavaDataL( aRight.Owner() ) )
+ {
+ // ..set to ETrue to trip next if-statement
+ same = ETrue;
+ }
+ }
+
+ // Now compare the SID's themselves
+ if ( same )
+ {
+ same = (aLeft.SecureId() == aRight.SecureId());
+ }
+ //
+ return same;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::HasJavaDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::HasJavaDataL() const
+ {
+ const TBool hasJavaData = MMCScBkupSBEUtils::HasJavaDataL( *iDataOwner );
+ const TInt64 opSize = OperationalSize( EMMCScBkupOwnerDataTypeJavaData );
+ //
+ return hasJavaData || (opSize > 0 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::HasActiveDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::HasActiveDataL() const
+ {
+ const TBool hasActiveData = MMCScBkupSBEUtils::HasActiveDataL( *iDataOwner );
+ const TInt64 opSize = OperationalSize( EMMCScBkupOwnerDataTypeActiveData );
+ //
+ return hasActiveData || (opSize > 0 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::HasPassiveDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::HasPassiveDataL() const
+ {
+ const TBool hasPassiveData = MMCScBkupSBEUtils::HasPassiveDataL( *iDataOwner );
+ const TInt64 opSize = OperationalSize( EMMCScBkupOwnerDataTypePassiveData );
+ //
+ return hasPassiveData || (opSize > 0 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::HasPublicDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::HasPublicDataL() const
+ {
+ const TBool hasPublicData = MMCScBkupSBEUtils::HasPublicDataL( *iDataOwner );
+ const TInt64 opSize = OperationalSize( EMMCScBkupOwnerDataTypePublicData );
+ //
+ return hasPublicData || (opSize > 0 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataOwnerInfo::HasSystemDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDataOwnerInfo::HasSystemDataL() const
+ {
+ const TBool hasSystemData = MMCScBkupSBEUtils::HasSystemDataL( *iDataOwner );
+ const TInt64 opSize = OperationalSize( EMMCScBkupOwnerDataTypeSystemData );
+ //
+ return hasSystemData || (opSize > 0 );
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDataStrategies.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,542 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupDataStrategy implementation
+*
+*
+*/
+
+#include "CMMCScBkupDataStrategies.h"
+
+// User includes
+#include "MMCScBkupConfig.h"
+#include "MMCScBkupLogger.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::CMMCScBkupDataStrategy()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataStrategy::CMMCScBkupDataStrategy()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::ReadStrategyLC()
+//
+// Factory function
+// ---------------------------------------------------------------------------
+CMMCScBkupDataStrategy* CMMCScBkupDataStrategy::ReadStrategyLC(const TDesC& aName, RFs& aFsSession)
+ {
+ // Fetch the size
+ TEntry entry;
+ const TInt error = aFsSession.Entry(aName, entry);
+ User::LeaveIfError(error);
+
+ // Construct
+ return CMMCScBkupDataStrategy::ReadStrategyLC(aName, aFsSession, 0, entry.iSize);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::ReadStrategyLC()
+//
+// Factory function
+// ---------------------------------------------------------------------------
+CMMCScBkupDataStrategy* CMMCScBkupDataStrategy::ReadStrategyLC(const TDesC& aName, RFs& aFsSession, TInt aOffset, TInt aLength)
+ {
+ CMMCScBkupDataStrategy* ret = NULL;
+
+ // First, try a normal read strategy
+ TRAPD(err, ret = CMMCScBkupDataFileStrategy::NewForReadingL(aName, aFsSession));
+ if (err != KErrNone)
+ {
+ // Try the file section read strategy - don't trap this - if it fails
+ // then this file cannot be read...
+ ret = CMMCScBkupDataFileSectionReadStrategy::NewL(aName, aFsSession);
+ }
+ //
+ if (ret)
+ {
+ ret->SetOffsetAndLength(aOffset, aLength);
+ }
+ //
+ CleanupStack::PushL( ret );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::WriteStrategyLC()
+//
+// Factory function
+// ---------------------------------------------------------------------------
+CMMCScBkupDataStrategy* CMMCScBkupDataStrategy::WriteStrategyLC( const TDesC& aName, RFs& aFsSession, TBool aUseTempFile )
+ {
+ CMMCScBkupDataStrategy* ret = CMMCScBkupDataFileStrategy::NewForWritingL( aName, aFsSession, aUseTempFile );
+ CleanupStack::PushL(ret);
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::Write()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataStrategy::Write(const TDesC8& /*aSource*/)
+ {
+ return KErrNotSupported;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::Finalize()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataStrategy::Finalize()
+ {
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataStrategy::SetOffsetAndLength()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataStrategy::SetOffsetAndLength(TInt aStartOffset, TInt aLengthToRead)
+ {
+ iOffset = aStartOffset;
+ iLengthToRead = aLengthToRead;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::CMMCScBkupDataFileStrategy()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileStrategy::CMMCScBkupDataFileStrategy( RFs& aFsSession, TBool aUseTempFile )
+: iFsSession( aFsSession ), iUseTempFile( aUseTempFile )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::~CMMCScBkupDataFileStrategy()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileStrategy::~CMMCScBkupDataFileStrategy()
+ {
+ iFile.Close();
+ delete iFileName;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataFileStrategy::ConstructL( const TDesC& aName, TUint aMode )
+ {
+ iFileName = aName.AllocL();
+
+ // The previous version of this engine would attempt to use the old
+ // backup & restore API to close this file.
+ //
+ // With the new Symbian Secure Backup Architecture, data owners are expected
+ // to release file locks on public files as soon as they receive
+ // notification that a backup is beginning.
+ TInt error = KErrNone;
+ //
+ if ( iUseTempFile )
+ {
+ // Ensure path for temporary files exists on same drive where file will eventually
+ // be stored. This is important, because we estimate available size on target drive
+ // and so also temporary file size affects whether restore can be carried out.
+ HBufC* tempPath = HBufC::NewLC( KMaxFileName );
+ TPtr pTempPath( tempPath->Des() );
+ pTempPath.Zero();
+ if(aName.Length())
+ {
+ pTempPath.Append( aName[0] );
+ }
+ else
+ {
+ const TDriveUnit driveUnit( KMMCScBkupTempFileDrive );
+ const TDriveName drive( driveUnit.Name() );
+ pTempPath.Append( drive );
+ }
+ pTempPath.Append( KMMCScBkupTempDir );
+
+ error = iFsSession.MkDirAll( pTempPath );
+ if ( ! (error == KErrNone || error == KErrAlreadyExists) )
+ {
+ User::LeaveIfError( error );
+ }
+
+ // Make a temporary file
+ error = iFile.Temp( iFsSession, pTempPath, iTempFileName, aMode );
+ __LOG2("CMMCScBkupDataFileStrategy::ConstructL() - Created temporary file: %S, error code: %d", &iTempFileName, error);
+
+ // Clean up
+ CleanupStack::PopAndDestroy( tempPath );
+ }
+ else
+ {
+ if( aMode & EFileWrite )
+ {
+ error = PrepareToOverwriteFile( iFsSession, *iFileName );
+
+ if ( error == KErrNone )
+ {
+ error = iFile.Create( iFsSession, *iFileName, aMode );
+ __LOG2("CMMCScBkupDataFileStrategy::ConstructL() - Created file %S, error code: %d", iFileName, error);
+ }
+ }
+ else
+ {
+ error = iFile.Open( iFsSession, aName, aMode );
+ }
+ }
+ //
+ User::LeaveIfError(error);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::NewForReadingL()
+//
+// Factory function
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileStrategy* CMMCScBkupDataFileStrategy::NewForReadingL( const TDesC& aName, RFs& aFsSession )
+ {
+ const TUint mode = EFileRead | EFileShareReadersOnly | EFileStream;
+ //
+ CMMCScBkupDataFileStrategy* self = new(ELeave) CMMCScBkupDataFileStrategy( aFsSession );
+ CleanupStack::PushL(self);
+ self->ConstructL( aName, mode );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::NewForWritingL()
+//
+// Factory function
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileStrategy* CMMCScBkupDataFileStrategy::NewForWritingL( const TDesC& aName, RFs& aFsSession, TBool aUseTempFile )
+ {
+ const TUint mode = EFileWrite | EFileStream;
+ //
+ CMMCScBkupDataFileStrategy* self = new(ELeave) CMMCScBkupDataFileStrategy( aFsSession, aUseTempFile );
+ CleanupStack::PushL(self);
+ self->ConstructL( aName, mode );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::Read()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataFileStrategy::Read(TDes8& aSink)
+ {
+ TInt error = KErrNone;
+ //
+ aSink.Zero();
+ TInt amountToRead = (LengthToRead() - Offset());
+ if (amountToRead > aSink.MaxLength())
+ {
+ amountToRead = aSink.MaxLength();
+ }
+ //
+ if (amountToRead > 0)
+ {
+ // Do the read
+ error = iFile.Read( static_cast<TInt64>(Offset()), aSink, amountToRead );
+ if (error == KErrNone)
+ {
+ SetOffset( Offset() + aSink.Length() );
+ }
+ }
+ //
+ return error;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::Write()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataFileStrategy::Write(const TDesC8& aSource)
+ {
+ // Offset writing not supported (no requirement)
+ const TInt error = iFile.Write( aSource );
+ return error;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::Finalize()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataFileStrategy::Finalize()
+ {
+ TInt error = KErrNone;
+ //
+ if ( iUseTempFile )
+ {
+ // Prepare for over-write
+ error = PrepareToOverwriteFile( iFsSession, *iFileName );
+ //
+ if ( error == KErrNone )
+ {
+ // Finally, do the rename
+ error = iFile.Rename( *iFileName );
+ __LOG2("CMMCScBkupDataFileStrategy::Finalize() - Renamed temporary file as: %S, error code: %d", iFileName, error);
+ }
+ }
+
+ // Whatever the situation, we close the file now
+ iFile.Close();
+ return error;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileStrategy::PrepareToOverwriteFile()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataFileStrategy::PrepareToOverwriteFile( RFs& aFsSession, const TDesC& aFileName )
+ {
+ TInt err = KErrNone;
+
+ // Create the full path, if not exists
+ err = aFsSession.MkDirAll( aFileName );
+
+ if( err == KErrAlreadyExists || !err )
+ {
+ // Reset file flags
+ err = aFsSession.SetAtt( aFileName, KEntryAttNormal, !KEntryAttNormal );
+ }
+
+ if( !err )
+ {
+ // Delete the file
+ err = aFsSession.Delete( aFileName );
+ }
+
+ if( err == KErrNotFound )
+ {
+ // These errors are ignored
+ err = KErrNone;
+ }
+
+ return err;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileSectionReadStrategy::CMMCScBkupDataFileSectionReadStrategy()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileSectionReadStrategy::CMMCScBkupDataFileSectionReadStrategy(RFs& aFsSession)
+: iFsSession(aFsSession)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileSectionReadStrategy::~CMMCScBkupDataFileSectionReadStrategy()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileSectionReadStrategy::~CMMCScBkupDataFileSectionReadStrategy()
+ {
+ delete iFileName;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileSectionReadStrategy::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataFileSectionReadStrategy::ConstructL(const TDesC& aName)
+ {
+ iFileName = aName.AllocL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileSectionReadStrategy::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataFileSectionReadStrategy* CMMCScBkupDataFileSectionReadStrategy::NewL(const TDesC& aName, RFs& aFsSession)
+ {
+ CMMCScBkupDataFileSectionReadStrategy* self = new(ELeave) CMMCScBkupDataFileSectionReadStrategy(aFsSession);
+ CleanupStack::PushL(self);
+ self->ConstructL(aName);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataFileSectionReadStrategy::Read()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDataFileSectionReadStrategy::Read(TDes8& aSink)
+ {
+ TInt error = KErrNone;
+ //
+ aSink.Zero();
+ TInt amountToRead = (LengthToRead() - Offset());
+ if (amountToRead > aSink.MaxLength())
+ {
+ amountToRead = aSink.MaxLength();
+ }
+ //
+ if (amountToRead > 0)
+ {
+ // Do the read
+ error = iFsSession.ReadFileSection( *iFileName, Offset(), aSink, amountToRead );
+ if (error == KErrNone)
+ {
+ SetOffset( Offset() + aSink.Length() );
+ }
+ }
+ return error;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDriveAndOperationTypeManager.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,216 @@
+/*
+* 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: CMMCScBkupDriveAndOperationTypeManager implementation
+*
+*
+*/
+
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#ifdef RD_MULTIPLE_DRIVE
+#include "BkupEngine.hrh"
+#include <driveinfo.h>
+#include <coemain.h>
+#endif // RD_MULTIPLE_DRIVE
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::CMMCScBkupDriveAndOperationTypeManager()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveAndOperationTypeManager::CMMCScBkupDriveAndOperationTypeManager()
+ {
+ iCalculatedDriveList.SetMax();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::CMMCScBkupDriveAndOperationTypeManager()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupDriveAndOperationTypeManager::~CMMCScBkupDriveAndOperationTypeManager()
+ {
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveAndOperationTypeManager::ConstructL( TResourceReader& aReader )
+ {
+#ifdef RD_MULTIPLE_DRIVE
+ RFs& fs( CCoeEnv::Static()->FsSession() );
+
+ // Get all user visible drives
+ TInt numDrives( 0 );
+ TDriveList drvList;
+ User::LeaveIfError( DriveInfo::GetUserVisibleDrives(
+ fs, drvList, numDrives ) );
+ TInt drvListLen( drvList.Length() );
+ TMMCScBkupDriveAndOperationType op;
+ TInt count( aReader.ReadInt8() );
+
+ // Get default system drive
+ TInt sysDrive( 0 );
+ User::LeaveIfError( DriveInfo::GetDefaultDrive(
+ DriveInfo::EDefaultSystem, sysDrive ) );
+
+ for( TInt i( 0 ); i < count; ++i )
+ {
+ TUint drvCategories( aReader.ReadUint8() );
+ TMMCScBkupOwnerDataType dataType(
+ static_cast< TMMCScBkupOwnerDataType >( aReader.ReadUint8() ) );
+
+ if ( drvCategories & EBkupDeviceMemories )
+ {
+ // Default system drive is always backed up when
+ // device memories are defined
+ op.SetDrive( static_cast< TDriveNumber >( sysDrive ) );
+ op.SetDataType( dataType );
+ iEntries.AppendL( op );
+ iCalculatedDriveList[ op.Drive() ] = ETrue;
+ }
+
+ for ( TInt j( 0 ); j < drvListLen; ++j )
+ {
+ if ( sysDrive != j && drvList[ j ] )
+ {
+ // Check for other drives
+ TBool append( EFalse );
+ TUint drvStatus( 0 );
+ User::LeaveIfError( DriveInfo::GetDriveStatus(
+ fs, j, drvStatus ) );
+ if ( ( drvCategories & EBkupDeviceMemories ) &&
+ ( drvStatus & DriveInfo::EDriveInternal ) &&
+ !( drvStatus & DriveInfo::EDriveExternallyMountable ) &&
+ !( drvStatus & DriveInfo::EDriveReadOnly ) )
+ {
+ append = ETrue; // Allow additional device memory
+ }
+ else if ( ( drvCategories & EBkupInternalMassStorages ) &&
+ ( drvStatus & DriveInfo::EDriveInternal ) &&
+ ( drvStatus & DriveInfo::EDriveExternallyMountable ) )
+ {
+ append = ETrue; // Allow internal mass storage
+ }
+ else if ( ( drvCategories & EBkupExternalMassStorages ) &&
+ ( drvStatus & DriveInfo::EDriveRemovable ) )
+ {
+ append = ETrue; // Allow external mass storage
+ }
+ if ( append )
+ {
+ op.SetDrive( static_cast< TDriveNumber >( j ) );
+ op.SetDataType( dataType );
+ iEntries.AppendL( op );
+ iCalculatedDriveList[ op.Drive() ] = ETrue;
+ }
+ }
+ }
+ }
+#else // RD_MULTIPLE_DRIVE
+ TMMCScBkupDriveAndOperationType op;
+ const TInt count = aReader.ReadInt8();
+ //
+ for( TInt i=0; i<count; i++ )
+ {
+ op.SetDrive( static_cast< TDriveNumber >( aReader.ReadInt8() ) );
+ op.SetDataType( static_cast< TMMCScBkupOwnerDataType >( aReader.ReadInt8() ) );
+ //
+ iEntries.AppendL( op );
+ //
+ iCalculatedDriveList[ op.Drive() ] = ETrue;
+ }
+#endif // RD_MULTIPLE_DRIVE
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupDriveAndOperationTypeManager* CMMCScBkupDriveAndOperationTypeManager::NewL( TResourceReader& aReader )
+ {
+ CMMCScBkupDriveAndOperationTypeManager* self = new(ELeave) CMMCScBkupDriveAndOperationTypeManager();
+ CleanupStack::PushL( self );
+ self->ConstructL( aReader );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::Count()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDriveAndOperationTypeManager::Count() const
+ {
+ return iEntries.Count();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::At()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupDriveAndOperationType& CMMCScBkupDriveAndOperationTypeManager::At( TInt aIndex ) const
+ {
+ return iEntries[ aIndex ];
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveAndOperationTypeManager::IsDataTypeAllowedToAccessDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDriveAndOperationTypeManager::IsDataTypeAllowedToAccessDrive( TDriveNumber aDrive, TMMCScBkupOwnerDataType aDataType ) const
+ {
+// __LOG2("CMMCScBkupDriveAndOperationTypeManager::IsDataTypeAllowedToAccessDrive() - START - aDrive: %c, aDataType: %S", aDrive + 'A', &MMCScBkupLogger::DataType( aDataType ));
+
+ TBool allowed = EFalse;
+ //
+ const TInt count = iEntries.Count();
+ //
+ for( TInt i=0; i<count; i++ )
+ {
+ const TMMCScBkupDriveAndOperationType& entry = iEntries[ i ];
+ //
+ if ( entry.DataType() == aDataType )
+ {
+ // Check drive...
+ if ( entry.Drive() == aDrive )
+ {
+ allowed = ETrue;
+ break;
+ }
+ }
+ }
+ //
+// __LOG1("CMMCScBkupDriveAndOperationTypeManager::IsDataTypeAllowedToAccessDrive() - END - allowed: %d", allowed);
+ return allowed;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDriveDataSizeManager.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,571 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupDriveSizer implementation
+*
+*
+*/
+
+#include "CMMCScBkupDriveDataSizeManager.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::CMMCScBkupDriveSizer()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer::CMMCScBkupDriveSizer( TMMCScBkupOwnerDataType aType )
+: iDataType( aType )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::~CMMCScBkupDriveSizer()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer::~CMMCScBkupDriveSizer()
+ {
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::ConstructL()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer* CMMCScBkupDriveSizer::NewLC( TMMCScBkupOwnerDataType aType )
+ {
+ CMMCScBkupDriveSizer* self = new(ELeave) CMMCScBkupDriveSizer( aType );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer* CMMCScBkupDriveSizer::NewLC( RReadStream& aStream )
+ {
+ CMMCScBkupDriveSizer* self = new(ELeave) CMMCScBkupDriveSizer( EMMCScBkupOwnerDataTypeAny );
+ CleanupStack::PushL(self);
+ aStream >> *self;
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::AddToSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::AddToSizeL( TInt64 aAmount, TDriveNumber aDrive )
+ {
+ TMMCScBkupDriveAndSize* entry = EntryByDrive( aDrive );
+ //
+ if ( entry == NULL )
+ {
+ if ( aAmount > 0 )
+ {
+ TMMCScBkupDriveAndSize newEntry( aDrive, aAmount );
+ iEntries.AppendL( newEntry );
+ }
+ }
+ else
+ {
+ entry->AddToSize( aAmount );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::Reset()
+ {
+ const TInt count = iEntries.Count();
+ for( TInt i=0; i<count; i++ )
+ {
+ TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+ entry.SetSize( 0 );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::Reset( TDriveNumber aDrive )
+ {
+ TMMCScBkupDriveAndSize* entry = EntryByDrive( aDrive );
+ //
+ if ( entry != NULL )
+ {
+ entry->SetSize( 0 );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Size()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDriveSizer::Size() const
+ {
+ TInt64 size = 0;
+ //
+ const TInt count = iEntries.Count();
+ for( TInt i=0; i<count; i++ )
+ {
+ const TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+ size += entry.Size();
+ }
+ //
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::Size()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDriveSizer::Size( TDriveNumber aDrive ) const
+ {
+ TInt64 size = 0;
+ TMMCScBkupDriveAndSize* entry = const_cast< CMMCScBkupDriveSizer* >( this )->EntryByDrive( aDrive );
+ //
+ if ( entry != NULL )
+ {
+ size = entry->Size();
+ }
+ //
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::InternalizeL(RReadStream& aStream)
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ //
+ iDataType = static_cast< TMMCScBkupOwnerDataType >( aStream.ReadInt8L() );
+ const TInt count = aStream.ReadInt8L();
+ for( TInt i=0; i<count; i++ )
+ {
+ TMMCScBkupDriveAndSize entry;
+ aStream >> entry;
+ iEntries.AppendL( entry );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSizer::ExternalizeL(RWriteStream& aStream) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ //
+ aStream.WriteInt8L( iDataType );
+
+ // Work out how many non-zero entries we need to write.
+ TInt i = 0;
+ const TInt count = iEntries.Count();
+ TInt numberOfExternalisedEntries = 0;
+ //
+ for( i=0; i<count; i++ )
+ {
+ const TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+ if ( entry.Size() > 0 )
+ {
+ ++numberOfExternalisedEntries;
+ }
+ }
+
+ // Now really write the entries...
+ aStream.WriteInt8L( numberOfExternalisedEntries );
+ if ( numberOfExternalisedEntries > 0 )
+ {
+ for( i=0; i<count; i++ )
+ {
+ const TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+ if ( entry.Size() > 0 )
+ {
+ aStream << entry;
+ }
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSizer::EntryByDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupDriveAndSize* CMMCScBkupDriveSizer::EntryByDrive( TDriveNumber aDrive )
+ {
+ TMMCScBkupDriveAndSize* ret = NULL;
+ //
+ const TInt count = iEntries.Count();
+ for( TInt i=0; i<count; i++ )
+ {
+ TMMCScBkupDriveAndSize& entry = iEntries[ i ];
+ //
+ if ( entry.Drive() == aDrive )
+ {
+ ret = &entry;
+ break;
+ }
+ }
+ //
+ return ret;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::CMMCScBkupDataTypeSizer()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer::CMMCScBkupDataTypeSizer()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::~CMMCScBkupDataTypeSizer()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer::~CMMCScBkupDataTypeSizer()
+ {
+ iSizers.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::ConstructL()
+ {
+ iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeDataOwner ) );
+ CleanupStack::Pop(); // sizer
+ iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeJavaData ) );
+ CleanupStack::Pop(); // sizer
+ iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypePublicData ) );
+ CleanupStack::Pop(); // sizer
+ iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeSystemData ) );
+ CleanupStack::Pop(); // sizer
+ iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypeActiveData ) );
+ CleanupStack::Pop(); // sizer
+ iSizers.AppendL( CMMCScBkupDriveSizer::NewLC( EMMCScBkupOwnerDataTypePassiveData ) );
+ CleanupStack::Pop(); // sizer
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer* CMMCScBkupDataTypeSizer::NewL()
+ {
+ CMMCScBkupDataTypeSizer* self = new(ELeave) CMMCScBkupDataTypeSizer();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataTypeSizer* CMMCScBkupDataTypeSizer::NewLC( RReadStream& aStream )
+ {
+ CMMCScBkupDataTypeSizer* self = new(ELeave) CMMCScBkupDataTypeSizer();
+ CleanupStack::PushL(self);
+ aStream >> *self;
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::AddToSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::AddToSizeL( TMMCScBkupOwnerDataType aDataType, TInt64 aAmount, TDriveNumber aDrive )
+ {
+ CMMCScBkupDriveSizer* sizer = SizerByDataType( aDataType );
+ ASSERT( sizer != NULL );
+ sizer->AddToSizeL( aAmount, aDrive );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::Reset( TMMCScBkupOwnerDataType aDataType )
+ {
+ CMMCScBkupDriveSizer* sizer = SizerByDataType( aDataType );
+ ASSERT( sizer != NULL );
+ sizer->Reset();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::Reset( TMMCScBkupOwnerDataType aDataType, TDriveNumber aDrive )
+ {
+ CMMCScBkupDriveSizer* sizer = SizerByDataType( aDataType );
+ ASSERT( sizer != NULL );
+ sizer->Reset( aDrive );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Size()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataTypeSizer::Size( TMMCScBkupOwnerDataType aDataType ) const
+ {
+ CMMCScBkupDriveSizer* sizer = const_cast< CMMCScBkupDataTypeSizer* >( this )->SizerByDataType( aDataType );
+ ASSERT( sizer != NULL );
+ const TInt64 size = sizer->Size();
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::Size()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataTypeSizer::Size( TMMCScBkupOwnerDataType aDataType, TDriveNumber aDrive ) const
+ {
+ CMMCScBkupDriveSizer* sizer = const_cast< CMMCScBkupDataTypeSizer* >( this )->SizerByDataType( aDataType );
+ ASSERT( sizer != NULL );
+ const TInt64 size = sizer->Size( aDrive );
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::GetSizesL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::GetSizesL( RArray<TMMCScBkupDriveAndSize>& aSizes ) const
+ {
+ aSizes.Reset();
+ //
+ for( TInt d = EDriveA; d<=EDriveZ; d++ )
+ {
+ // Get the size of each data type for this drive.
+ const TDriveNumber drive = static_cast< TDriveNumber >( d );
+ TMMCScBkupDriveAndSize driveAndSize( drive, 0 );
+
+ const TInt count = iSizers.Count();
+ for( TInt i=0; i<count; i++ )
+ {
+ const CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+ const TInt sizeOfDataForDrive = sizer->Size( drive );
+ //
+ driveAndSize.AddToSize( sizeOfDataForDrive );
+ }
+
+ // Add the entry if the size is more than 0
+ if ( driveAndSize.Size() > 0 )
+ {
+ aSizes.AppendL( driveAndSize );
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::CombinedSize()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupDataTypeSizer::CombinedSize( TDriveNumber aDrive ) const
+ {
+ TInt64 size = 0;
+ //
+ const TInt count = iSizers.Count();
+ for( TInt i=0; i<count; i++ )
+ {
+ const CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+ size += sizer->Size( aDrive );
+ }
+ //
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::InternalizeL(RReadStream& aStream)
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ //
+ const TInt count = aStream.ReadInt8L();
+ for( TInt i=0; i<count; i++ )
+ {
+ CMMCScBkupDriveSizer* sizer = CMMCScBkupDriveSizer::NewLC( aStream );
+ iSizers.AppendL( sizer );
+ CleanupStack::Pop( sizer );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDataTypeSizer::ExternalizeL(RWriteStream& aStream) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ //
+ const TInt count = iSizers.Count();
+ aStream.WriteInt8L( count );
+ //
+ for( TInt i=0; i<count; i++ )
+ {
+ CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+ aStream << *sizer;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDataTypeSizer::SizerByDataType()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSizer* CMMCScBkupDataTypeSizer::SizerByDataType( TMMCScBkupOwnerDataType aDataType )
+ {
+ CMMCScBkupDriveSizer* ret = NULL;
+ //
+ const TInt count = iSizers.Count();
+ for( TInt i=0; i<count; i++ )
+ {
+ CMMCScBkupDriveSizer* sizer = iSizers[ i ];
+ //
+ if ( sizer->DataType() == aDataType )
+ {
+ ret = sizer;
+ break;
+ }
+ }
+ //
+ return ret;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupDriveSpecificRequest.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupDriveSpecificRequest implementation
+*
+*
+*/
+
+#include "CMMCScBkupDriveSpecificRequest.h"
+
+// User includes
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::CMMCScBkupDriveSpecificRequest()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSpecificRequest::CMMCScBkupDriveSpecificRequest( const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperations, TMMCScBkupOwnerDataType aDataType, CActive::TPriority aPriority )
+: CActive(aPriority), iDriveAndOperations(aDriveAndOperations), iDataType( aDataType )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::~CMMCScBkupDriveSpecificRequest()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDriveSpecificRequest::~CMMCScBkupDriveSpecificRequest( )
+ {
+ Cancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSpecificRequest::ConstructL( )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::RequestL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSpecificRequest::RequestL( TRequestStatus& aObserver )
+ {
+ // Set to -1 so that when RunL is called, the next drive will be calculated
+ // as 0 == EDriveA
+ iCurrentDrive = -1;
+ iObserver = &aObserver;
+ *iObserver = KRequestPending;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::NextValidDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDriveSpecificRequest::NextValidDrive(TDriveNumber& aDrive)
+ {
+ // If we've already reached Z then there isn't any sense in continuing
+ // as all drives have been processed.
+ TBool driveAvailable = EFalse;
+
+ // Keep checking drives until we go past Z
+ while( ++iCurrentDrive <= EDriveZ )
+ {
+ if ( iDriveAndOperations.DriveList()[ iCurrentDrive ] != 0 )
+ {
+ const TDriveNumber drive = static_cast< TDriveNumber >( iCurrentDrive );
+
+ // Drive is allowable according to master list.
+ // But is this data type allowed to access that drive?
+ if ( iDataType == EMMCScBkupOwnerDataTypeAny )
+ {
+ // Found an available drive - data type filtering is not in play...
+ aDrive = drive;
+ driveAvailable = ETrue;
+ break;
+ }
+ else if ( iDriveAndOperations.IsDataTypeAllowedToAccessDrive( drive, iDataType ) )
+ {
+ // Found an available drive - this data type is allowed to access that drive...
+ aDrive = drive;
+ driveAvailable = ETrue;
+ break;
+ }
+ }
+ }
+ //
+ return driveAvailable;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::NextValidDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupDriveSpecificRequest::NextValidDrive(TDriveNumber& aDrive, const TDriveList& aCrossCheckList)
+ {
+ TDriveNumber drive;
+ TBool driveAvailable = NextValidDrive(drive);
+
+ while(driveAvailable)
+ {
+ // Check if aCrossCheckList also supports the same drive
+ if (aCrossCheckList[drive] != 0)
+ {
+ aDrive = drive;
+ break;
+ }
+ else
+ {
+ // Try another drive from our master list
+ driveAvailable = NextValidDrive(drive);
+ }
+ }
+ //
+ return driveAvailable;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::CurrentDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TDriveNumber CMMCScBkupDriveSpecificRequest::CurrentDrive() const
+ {
+ return static_cast<TDriveNumber>(iCurrentDrive);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSpecificRequest::DoCancel()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupDriveSpecificRequest::RunError(TInt aError)
+ {
+#ifdef MMCSCBKUP_USE_BREAKPOINTS
+ __BREAKPOINT();
+#endif
+ //
+ CompleteObserverRequest(aError);
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::CompleteObserverRequest()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSpecificRequest::CompleteObserverRequest(TInt aCompletionCode)
+ {
+ __ASSERT_ALWAYS(iObserver != NULL, User::Invariant());
+ User::RequestComplete(iObserver, aCompletionCode);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupDriveSpecificRequest::CompleteSelf()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupDriveSpecificRequest::CompleteSelf(TInt aCompletionCode)
+ {
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, aCompletionCode);
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupEngine.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupEngine implementation
+*
+*
+*/
+
+#include "CMMCScBkupEngine.h"
+
+// User includes
+#include "CMMCScBkupEngineImpl.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::CMMCScBkupEngine()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupEngine::CMMCScBkupEngine()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::~CMMCScBkupEngine()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupEngine::~CMMCScBkupEngine()
+ {
+ delete iEngine;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::ConstructL()
+//
+// Second phase constructor
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngine::ConstructL( RFs& aFsSession )
+ {
+ iEngine = CMMCScBkupEngineImpl::NewL( aFsSession );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::NewL()
+//
+// Static constructor
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupEngine* CMMCScBkupEngine::NewL( RFs& aFsSession )
+ {
+ CMMCScBkupEngine* self = new(ELeave) CMMCScBkupEngine();
+ CleanupStack::PushL( self );
+ self->ConstructL( aFsSession );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::StartOperationL()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C void CMMCScBkupEngine::StartOperationL(TMMCScBkupOperationType aOperation, MMMCScBkupEngineObserver& aObserver, CMMCScBkupOpParamsBase* aParams)
+ {
+ TRAPD(err, iEngine->StartOperationL( aOperation, aObserver, aParams ));
+
+ if(err != KErrNone)
+ {
+ TRAP_IGNORE( aObserver.HandleBkupEngineEventL( MMMCScBkupEngineObserver::ECommonOperationError, err) );
+ TRAP_IGNORE( aObserver.HandleBkupEngineEventL( MMMCScBkupEngineObserver::ECommonOperationEnded, err) );
+ // Call cleanup externally, because engine cannot be yet in active state and resources remain unfreed
+ iEngine->CleanupL(KErrCancel);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::CancelOperation()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C void CMMCScBkupEngine::CancelOperation()
+ {
+ iEngine->Cancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::ValidArchiveForRestore()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CMMCScBkupEngine::ValidArchiveForRestore( const TDesC& aFileName )
+ {
+ TBool archiveOkay = EFalse;
+ //
+ TRAPD(err, archiveOkay = iEngine->ValidArchiveForRestoreL( aFileName ) );
+ if ( err != KErrNone )
+ {
+ archiveOkay = EFalse;
+ }
+ //
+ return archiveOkay;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::TotalOperationSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TInt64 CMMCScBkupEngine::TotalOperationSizeL() const
+ {
+ return iEngine->TotalOperationSizeL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::RebootRequired()
+//
+// NOTE: This method is not used in S60 3.x - Sysap handles the reboot
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CMMCScBkupEngine::RebootRequired() const
+ {
+ return iEngine->RebootRequired();
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngine::ListArchivesL()
+//
+// Provide a list of archives available on all drives
+// ---------------------------------------------------------------------------
+EXPORT_C void CMMCScBkupEngine::ListArchivesL(
+ RPointerArray< CMMCScBkupArchiveInfo >& aArchives,
+ CMMCScBkupOpParamsBase* aParams,
+ const TUint32 aDriveAttMatch,
+ const TInt aDriveMatch ) const
+ {
+ return iEngine->ListArchivesL(
+ aArchives, aParams, aDriveAttMatch, aDriveMatch );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupEngineImpl.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,1189 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupEngineImpl implementation
+*
+*
+*/
+
+#include "CMMCScBkupEngineImpl.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupState.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupArchive.h"
+#include "MMCScBkupOperations.h"
+#include "MMCScBkupArchiveUtils.h"
+#include "CMMCScBkupStateFactory.h"
+#include "MMCScBkupPhoneModelUtils.h"
+#include "MMMCScBkupEngineObserver.h"
+#include "CMMCScBkupFileListCollection.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupOperationParameters.h"
+#include "CMMCScBkupArchiveInfo.h"
+#include "BkupEngine.hrh"
+#include <pathinfo.h>
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CMMCScBkupEngineImpl()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupEngineImpl::CMMCScBkupEngineImpl( RFs& aFsSession )
+: CActive( CActive::EPriorityIdle ),
+ iFsSession(aFsSession),
+ iCurrentArchive(0),
+ iTotalProgress(0),
+ iActiveDataProcessingOngoing(EFalse)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::~CMMCScBkupEngineImpl()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupEngineImpl::~CMMCScBkupEngineImpl()
+ {
+ Cancel();
+ //
+ TRAP_IGNORE(CleanupL());
+
+ iArchives.Close();
+ iDataOwners.Close();
+ iFileLists.Close();
+ delete iSBEClient;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::ConstructL()
+//
+// Second phase constructor
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::ConstructL()
+ {
+ __LOG("CMMCScBkupEngineImpl::ConstructL() - START");
+
+#ifdef MAKE_SBE_LOGGING_DIRECTORY
+ _LIT( KSBELoggingDir, "C:\\Logs\\connect\\" );
+ iFsSession.MkDirAll( KSBELoggingDir );
+#endif
+#ifdef MAKE_MMCSCBKUP_LOGGING_DIRECTORY
+ iFsSession.MkDirAll( KMMCScBkupLoggingFullPath );
+#endif
+
+ __LOG("CMMCScBkupEngineImpl::ConstructL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::NewL()
+//
+// Static constructor
+// ---------------------------------------------------------------------------
+CMMCScBkupEngineImpl* CMMCScBkupEngineImpl::NewL( RFs& aFsSession )
+ {
+ CMMCScBkupEngineImpl* self = new(ELeave) CMMCScBkupEngineImpl( aFsSession );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::StartOperationL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::StartOperationL(TMMCScBkupOperationType aOperation, MMMCScBkupEngineObserver& aObserver, CMMCScBkupOpParamsBase* aParams)
+ {
+ __ASSERT_DEBUG(DrvOperation() == EMMCScBkupOperationTypeIdle, User::Invariant()); //
+
+ // Setup our observer - we will report progress via this interface
+ iObserver = &aObserver;
+
+ // Take ownership of the parameters immediately
+ SetParameters(aParams);
+
+ if(!iSBEClient)
+ {
+ __LOG("CMMCScBkupEngineImpl::ConstructL() - creating SBE client...");
+ iSBEClient = CSBEClient::NewL();
+ }
+
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ // Create a logging directory for logging purposes and empty contents
+ // in order to have the log only from last backup or restore operation
+ CFileMan* fileMan = CFileMan::NewL( iFsSession );
+ CleanupStack::PushL( fileMan );
+ TParse* path = new(ELeave) TParse();
+
+ CleanupStack::PushL(path);
+ path->Set(KMMCScBkupLoggingFullPathAndName, NULL, NULL);
+ fileMan->Delete( path->Path(), CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( path->Path() );
+
+ CleanupStack::PopAndDestroy(2, fileMan );
+#endif
+
+ // Prepare supporting objects
+ PrepareObjectsL();
+
+ // Work out what to do...
+ CreateFactoryL( aOperation );
+ //
+ switch(aOperation)
+ {
+ case EMMCScBkupOperationTypeIdle:
+ __ASSERT_ALWAYS(EFalse, User::Invariant());
+ break;
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ PrepareForBackupL( DrvOperation() == EMMCScBkupOperationTypePartialBackup );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ PrepareForRestoreL( DrvOperation() == EMMCScBkupOperationTypePartialRestore );
+ break;
+ }
+
+ // Do this last, after everything that can leave has been executed
+ iOperationType = aOperation;
+
+ // Notify the observer we're starting up
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationStarting);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::ValidArchiveForRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupEngineImpl::ValidArchiveForRestoreL( const TDesC& aFileName )
+ {
+ const TBool valid = CMMCScBkupArchive::ValidArchiveForRestoreL( iFsSession, aFileName );
+ return valid;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::TotalOperationSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupEngineImpl::TotalOperationSizeL() const
+ {
+ const TInt64 size = iDataOwners[iCurrentArchive]->TotalOperationalSizeL();
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::RebootRequired()
+//
+// NOTE: This method is not used in S60 3.x - Sysap handles the reboot
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupEngineImpl::RebootRequired() const
+ {
+ // Criteria for a reboot are:
+ //
+ // 1) One or more data owners indicate that a reboot is necessary
+ // via their backup_registration.xml files.
+ //
+ // 2) The current operation is some form of restore (partial or full).
+
+ const TMMCScBkupOperationType currentOp = DrvOperation();
+ __LOG1("CMMCScBkupEngineImpl::RebootRequired() - operation type is: %d", currentOp);
+
+ TBool singleDataOwnerNeedsReboot = EFalse;
+
+ for(TInt i = 0; i < iDataOwners.Count(); i++)
+ {
+ singleDataOwnerNeedsReboot |= iDataOwners[i]->RebootRequired();
+ }
+
+ __LOG1("CMMCScBkupEngineImpl::RebootRequired() - D.O requires reboot?: %d", singleDataOwnerNeedsReboot);
+
+ const TBool rebootRequired = singleDataOwnerNeedsReboot &&
+ ( currentOp == EMMCScBkupOperationTypeFullRestore ||
+ currentOp == EMMCScBkupOperationTypePartialRestore );
+ __LOG1("CMMCScBkupEngineImpl::RebootRequired() - final rebootRequired value: %d", rebootRequired);
+
+ // We return the value to the caller - the UI will display appropriate
+ // UI dialogs and reset the machine as appropriate.
+ return rebootRequired;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvADI()
+//
+//
+// ---------------------------------------------------------------------------
+MMMCScBkupArchiveDataInterface& CMMCScBkupEngineImpl::DrvADI() const
+ {
+ return iArchives[iCurrentArchive]->ADI();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvArchive()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupArchive& CMMCScBkupEngineImpl::DrvArchive() const
+ {
+ __ASSERT_ALWAYS(iCurrentArchive < iArchives.Count(), User::Invariant());
+
+ return *iArchives[iCurrentArchive];
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvSecureBackupClient()
+//
+//
+// ---------------------------------------------------------------------------
+CSBEClient& CMMCScBkupEngineImpl::DrvSecureBackupClient() const
+ {
+ return *iSBEClient;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvOperation()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupOperationType CMMCScBkupEngineImpl::DrvOperation() const
+ {
+ return iOperationType;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvParamsBase()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupOpParamsBase& CMMCScBkupEngineImpl::DrvParamsBase() const
+ {
+ return *iParameters;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvDataOwners()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupDataOwnerCollection& CMMCScBkupEngineImpl::DrvDataOwners() const
+ {
+ __ASSERT_ALWAYS(iCurrentArchive < iDataOwners.Count(), User::Invariant());
+
+ return *iDataOwners[iCurrentArchive];
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvDataOwnersAll()
+//
+//
+// ---------------------------------------------------------------------------
+RPointerArray<CMMCScBkupDataOwnerCollection>& CMMCScBkupEngineImpl::DrvDataOwnersAll()
+ {
+ return iDataOwners;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvFileList()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupFileListCollection& CMMCScBkupEngineImpl::DrvFileList() const
+ {
+ __ASSERT_ALWAYS(iCurrentArchive < iFileLists.Count(), User::Invariant());
+
+ return *iFileLists[iCurrentArchive];
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvLastCategory()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupEngineImpl::DrvLastCategory() const
+ {
+ return ( (iCurrentArchive + 1) == iArchives.Count() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvStoreTotalProgress()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::DrvStoreTotalProgress(TInt64 aProgress)
+ {
+ iTotalProgress += aProgress;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvTotalProgress()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 CMMCScBkupEngineImpl::DrvTotalProgress() const
+ {
+ return iTotalProgress;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DrvProgressHandler()
+//
+//
+// ---------------------------------------------------------------------------
+MMMCScBkupProgressObserver& CMMCScBkupEngineImpl::DrvProgressHandler() const
+ {
+ CMMCScBkupEngineImpl* self = const_cast< CMMCScBkupEngineImpl* > (this);
+ return *self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::MMCScBkupHandleProgress()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::MMCScBkupHandleProgress( TInt aAmountCompleted )
+ {
+ __ASSERT_ALWAYS( aAmountCompleted >= 0, User::Invariant() );
+ if (aAmountCompleted > 0)
+ {
+ __LOG1("CMMCScBkupEngineImpl::MMCScBkupHandleProgress() - amount: %d", aAmountCompleted);
+ iCumulativeProgress += aAmountCompleted;
+
+ // Notify the observer that we've calculated the operational size
+ NotifyObserver( MMMCScBkupEngineObserver::ECommonProgress, iCumulativeProgress );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::MMCScBkupHandleProgressDomainUnderstood()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::MMCScBkupHandleProgressDomainUnderstood( TInt aTotalProgressAmount )
+ {
+ __LOG1("CMMCScBkupEngineImpl::MMCScBkupHandleProgressDomainUnderstood() - ##### TOTAL PROGRESS AMOUNT IS: %d", aTotalProgressAmount);
+
+ // Notify the observer that we've calculated the operational size
+ NotifyObserver( MMMCScBkupEngineObserver::ECommonSizeOfTaskUnderstood, aTotalProgressAmount );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::MMCScBkupHandleFreeSpace()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupEngineImpl::MMCScBkupHandleFreeSpace( TInt aPercentualFree )
+ {
+ TInt error(KErrNone);
+
+ TRAP_IGNORE( error = iObserver->HandleBkupEngineEventL( MMMCScBkupEngineObserver::EBackupAnalysingData, aPercentualFree ) );
+
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::MMCScBkupStartBackuping()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::MMCScBkupStartBackuping( TBool aProceed )
+ {
+ __LOG1("CMMCScBkupEngineImpl::MMCScBkupStartBackuping() - Disk space validation done, proceed %d", aProceed);
+
+ if( !aProceed )
+ {
+ // If there is no space to carry out backup, "restore" existing backup file,
+ // so that it can still be restored.
+ for(TInt i = 0; i < iArchives.Count(); i++)
+ {
+ iArchives[i]->RestoreOldArchive( );
+ }
+ }
+ else
+ {
+ // Clean up existing backup files.
+ for(TInt i = 0; i < iArchives.Count(); i++)
+ {
+ iArchives[i]->DeleteOldArchive( );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::RunL()
+ {
+ __LOG(" ");
+ __LOG(" ");
+ if ( !CurrentStateAvailable() )
+ {
+ __LOG2("CMMCScBkupEngineImpl::RunL() - START - iStatus: %d, iCurrentArchive %d",
+ iStatus.Int(), iCurrentArchive);
+ }
+ else
+ {
+ __LOG3("CMMCScBkupEngineImpl::RunL() - START - iStatus: %d, state: 0x%08x, iCurrentArchive %d",
+ iStatus.Int(), CurrentState().StateId().iUid, iCurrentArchive);
+ }
+
+ User::LeaveIfError(iStatus.Int());
+
+ // Get the state that just finished - its always the head item
+ const TBool stateStepAvailable = CurrentStateAvailable();
+ __ASSERT_ALWAYS(stateStepAvailable, User::Invariant());
+ CMMCScBkupState& currentState = CurrentState();
+
+ // Store completed state id as we're about to delete the object
+ // so it won't be available afterwards...
+ const TMMCScBkupStateId completedState = currentState.StateId();
+
+ // Identify which state should run next. In effect each state
+ // defines the overall state machine. This is required since
+ // some states need to dynamically change which state is executed
+ // next. A good example is the archive op for active data - when
+ // one or more active data clients are not ready, then the next
+ // state should be to requery their readyness. After their
+ // readyness has been ascertained, then any DO's that have now
+ // become ready should be archived. This process continues
+ // until all Active Data owners have provided all their data.
+ TMMCScBkupStateId nextState;
+
+ __LOG3("CMMCScBkupEngineImpl::RunL() - iActiveDataProcessingOngoing %d, completedState 0x%08x, nextState 0x%08x",
+ iActiveDataProcessingOngoing, completedState.iUid, currentState.NextStateId().iUid);
+
+ // Identify should we run current state again, i.e. run that state
+ // for next category. If state does not require processing of same
+ // state several times, then move on to next state.
+ if( currentState.CategorySpecific() != CMMCScBkupState::EStateOnce )
+ {
+ // For simplicity let's collect active data for each category in row.
+ // This means checking data owner status before proceeding to next category.
+ if( iActiveDataProcessingOngoing )
+ {
+ iActiveDataProcessingOngoing = EFalse;
+ nextState = currentState.NextStateId();
+ }
+ else
+ {
+ if( completedState == KMMCScBkupStateIdArchiveOpActiveData )
+ {
+ if( currentState.NextStateId() == KMMCScBkupStateIdGetDataOwnerStatuses )
+ {
+ // There is still some active data to be processed
+ iActiveDataProcessingOngoing = ETrue;
+ nextState = KMMCScBkupStateIdGetDataOwnerStatuses;
+ }
+ }
+
+ if( !iActiveDataProcessingOngoing )
+ {
+ if( ++iCurrentArchive < iArchives.Count() )
+ {
+ nextState = completedState;
+ }
+ else
+ {
+ iCurrentArchive = 0;
+ nextState = currentState.NextStateId();
+ }
+ }
+ }
+ }
+ else
+ {
+ iCurrentArchive = 0;
+ nextState = currentState.NextStateId();
+ }
+
+ if(nextState == completedState && currentState.CategorySpecific() == CMMCScBkupState::EStatePerCategoryCommon)
+ {
+ __LOG2("CMMCScBkupEngineImpl::RunL() - object not recreated for state: 0x%08x, iCurrentArchive %d",
+ nextState.iUid, iCurrentArchive);
+ }
+ else
+ {
+ // Remove the completed state (destroys 'currentState')
+ DestroyCurrentState();
+ // Identify the next state. Causes RunL to be called when the state
+ // has finished executing
+ __LOG2("CMMCScBkupEngineImpl::RunL() - preparing state: 0x%08x, iCurrentArchive %d",
+ nextState.iUid, iCurrentArchive);
+
+ PrepareNextStateL( nextState );
+ }
+
+ if (CurrentStateAvailable())
+ {
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ CMMCScBkupState& newState = CurrentState();
+ if( newState.CategorySpecific() != CMMCScBkupState::EStateOnce )
+ {
+ __LOG2("CMMCScBkupEngineImpl::RunL() - executing category specific state: 0x%08x for category 0x%x",
+ nextState.iUid, iArchives[iCurrentArchive]->Category().iFlags);
+ }
+ else
+ {
+ __LOG1("CMMCScBkupEngineImpl::RunL() - executing non category specific state: 0x%08x", nextState.iUid);
+ }
+#endif
+ ExecuteStateL();
+ }
+ else
+ {
+ if ( iSBEClient )
+ {
+ MMCScBkupSBEUtils::EndBackupOrRestoreL( *iSBEClient );
+ }
+ // Signal we are about to finish, so that bkupchecker can be notified.
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationPrepareEnded);
+ // We've finished
+ CleanupL();
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationEnded);
+ // Remove observer
+ iObserver = NULL;
+ }
+
+ __LOG3("CMMCScBkupEngineImpl::RunL() - END - nextState: 0x%08x, isActive: %d, iStatus: %d", nextState.iUid, IsActive(), iStatus.Int());
+ __LOG(" ");
+ __LOG(" ");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::DoCancel()
+ {
+ __LOG("CMMCScBkupEngineImpl::DoCancel() - START");
+
+ if (CurrentStateAvailable())
+ {
+ __LOG1("CMMCScBkupEngineImpl::DoCancel() - current state is: 0x%08x", CurrentState().StateId().iUid);
+
+ // Our request should be completed by the state
+ CurrentState().Cancel();
+ }
+
+ // Signal we are about to finish, so that bkupchecker can be notified.
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationPrepareEnded);
+ // Cleanup
+ TRAP_IGNORE( CleanupL( KErrCancel ) );
+
+ // Ensure observer is informed
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationError, KErrCancel);
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationEnded, KErrCancel);
+ // Remove observer
+ iObserver = NULL;
+
+ __LOG("CMMCScBkupEngineImpl::DoCancel() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupEngineImpl::RunError(TInt aError)
+ {
+ __LOG1("CMMCScBkupEngineImpl::RunError() - START - aError: %d", aError);
+
+ // Inform observer of error
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationError, aError);
+ // Signal we are about to finish, so that bkupchecker can be notified.
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationPrepareEnded);
+ // Cleanup
+ TRAP_IGNORE( CleanupL( aError ) );
+
+ // Finalize observer
+ NotifyObserver(MMMCScBkupEngineObserver::ECommonOperationEnded, aError);
+ // Remove observer
+ iObserver = NULL;
+
+ // Return KErrNone to stop the scheduler from panicking our thread
+
+ __LOG("CMMCScBkupEngineImpl::RunError() - END");
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CompleteOwnRequest()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::CompleteOwnRequest(TInt aCompletionCode, TBool aSetActive)
+ {
+ if (aSetActive)
+ {
+ SetActive();
+ }
+ //
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, aCompletionCode);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::NotifyObserver()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::NotifyObserver( MMMCScBkupEngineObserver::TEvent aEvent, TInt aAssociatedData )
+ {
+ if ( iObserver )
+ {
+ TRAP_IGNORE( iObserver->HandleBkupEngineEventL( aEvent, aAssociatedData ) );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::PrepareForBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::PrepareForBackupL( TBool aPartial )
+ {
+#ifdef DEBUGGING_DATA_TRANSFER
+ CleanBackupFilesL();
+#endif
+
+ // Open the archives for writing
+ for(TInt i = 0; i < iArchives.Count(); i++)
+ {
+ const TPtrC pArchiveName( DrvParamsBase().FileName(i) );
+ iArchives[i]->OpenForWritingL( pArchiveName );
+ }
+
+ // Initialise our state model
+ if ( !aPartial )
+ {
+ // Starting a FULL BACKUP
+ PrepareNextStateL( KMMCScBkupStateArchiveOpArchiveHeader );
+ ExecuteStateL();
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::PrepareForRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::PrepareForRestoreL( TBool aPartial )
+ {
+#ifdef DEBUGGING_DATA_TRANSFER
+ ClearRestoreFilesL();
+#endif
+
+ // Open the archives for reading
+ for(TInt i = 0; i < iArchives.Count(); i++)
+ {
+ const TPtrC pArchiveName( DrvParamsBase().FileName(i) );
+ iArchives[i]->OpenForReadingL( pArchiveName );
+
+#ifdef RD_FILE_MANAGER_BACKUP
+ // Validate archive content is not altered
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ TUint32 startTime = User::NTickCount();
+#endif
+ TInt validArchiveForRestore = MMCScBkupArchiveUtils::ValidateArchiveCrcsL( iFsSession, pArchiveName );
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ __LOG2("CMMCScBkupEngineImpl::PrepareForRestoreL - crcs validation result %d, ticks in ms %u",
+ validArchiveForRestore, User::NTickCount() - startTime);
+#endif
+ if(validArchiveForRestore == EFalse)
+ {
+ User::Leave(KErrCorrupt);
+ }
+#endif
+ }
+
+ // Initialise our state model
+ if ( !aPartial )
+ {
+ // Starting a FULL RESTORE
+ PrepareNextStateL( KMMCScBkupStateArchiveOpArchiveHeader );
+ ExecuteStateL();
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::SetParameters()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::SetParameters(CMMCScBkupOpParamsBase* aParameters)
+ {
+ __ASSERT_ALWAYS(aParameters != NULL, User::Invariant());
+ //
+ delete iParameters;
+ iParameters = aParameters;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CreateFactoryL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::CreateFactoryL(TMMCScBkupOperationType aOperation)
+ {
+ __ASSERT_DEBUG(iFactory == NULL, User::Invariant());
+ //
+ CMMCScBkupStateFactory* factory = CMMCScBkupStateFactory::FactoryByOperationTypeLC(aOperation);
+ delete iFactory;
+ iFactory = factory;
+ CleanupStack::Pop( factory );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CurrentStateAvailable()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupEngineImpl::CurrentStateAvailable() const
+ {
+ return (iCurrentState != NULL);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CurrentStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupEngineImpl::CurrentStateId() const
+ {
+ __ASSERT_ALWAYS(CurrentStateAvailable(), User::Invariant());
+ return CurrentState().StateId();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CurrentState()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupState& CMMCScBkupEngineImpl::CurrentState()
+ {
+ return *iCurrentState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CurrentState()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupState& CMMCScBkupEngineImpl::CurrentState() const
+ {
+ return *iCurrentState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::PrepareNextStateL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::PrepareNextStateL( TMMCScBkupStateId aNextState )
+ {
+ if ( aNextState != KMMCScBkupStateIdOperationComplete )
+ {
+ CMMCScBkupState* nextState = iFactory->GetStateLC( aNextState, *this );
+ delete iCurrentState;
+ iCurrentState = nextState;
+ CleanupStack::Pop( nextState );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::DestroyCurrentState()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::DestroyCurrentState()
+ {
+ delete iCurrentState;
+ iCurrentState = NULL;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::ExecuteStateL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::ExecuteStateL()
+ {
+ const TBool stateStepAvailable = CurrentStateAvailable();
+ __ASSERT_ALWAYS(stateStepAvailable, User::Invariant());
+ //
+ CMMCScBkupState& currentState = CurrentState();
+ //
+ currentState.ExecuteL(iStatus);
+ SetActive();
+
+ // RunL will now be called when the state has completed execution
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CleanupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::CleanupL( TInt aError )
+ {
+ __LOG1("CMMCScBkupEngineImpl::CleanupL() - START - aError: %d", aError);
+
+ // If SBE died, then recreate
+ if ( aError == KErrServerTerminated )
+ {
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - assuming SBE panicked - re-creating SBE session...");
+ CSBEClient* newSBEClient = CSBEClient::NewL();
+ delete iSBEClient;
+ iSBEClient = newSBEClient;
+ }
+
+
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - destroying current state...");
+ DestroyCurrentState();
+
+ const TBool backupOrRestoreUnderway = MMCScBkupSBEUtils::PhoneIsInBackupOrRestoreModeL();
+ __LOG1("CMMCScBkupEngineImpl::CleanupL() - backupOrRestoreUnderway: %d", backupOrRestoreUnderway);
+ if ( backupOrRestoreUnderway && iSBEClient )
+ {
+ // Must end backup or restore
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - ending backup or restore...");
+ MMCScBkupSBEUtils::EndBackupOrRestoreL( *iSBEClient );
+ }
+
+ // Ensure the archive is closed
+ if ( iArchives.Count() )
+ {
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - closing archives...");
+ for(TInt i = 0; i < iArchives.Count(); i++)
+ {
+ iArchives[i]->Close( aError );
+ }
+
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - reseting archive array...");
+ iArchives.ResetAndDestroy();
+ }
+
+ // Destroy old parameters
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - destroying parameters...");
+ delete iParameters;
+ iParameters = NULL;
+
+ // Set back to idle
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - setting operation status to idle...");
+ iOperationType = EMMCScBkupOperationTypeIdle;
+
+ // Dispose of our collections
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - destroying data owners and file lists...");
+ iDataOwners.ResetAndDestroy();
+ iFileLists.ResetAndDestroy();
+
+ // Dispose of state factory
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - destroying factory...");
+ delete iFactory;
+ iFactory = NULL;
+
+ // Reset progress
+ iCumulativeProgress = 0;
+
+ // Reduce memory consumption by deleting SBE client. Session will be closed
+ // and SBE frees reserved (e.g. 128 kB...) memory pool.
+ if(iSBEClient)
+ {
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - deleting SBE client...");
+ delete iSBEClient;
+ iSBEClient = NULL;
+ }
+
+ __LOG("CMMCScBkupEngineImpl::CleanupL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::PrepareObjectsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::PrepareObjectsL()
+ {
+ __LOG("CMMCScBkupEngineImpl::PrepareObjectsL() - creating objects...");
+
+ iTotalProgress = 0;
+ iCurrentArchive = 0;
+
+ const RMMCScBkupPointerArray<CMMCScBkupArchiveInfo>& archives = DrvParamsBase().ArchiveInfos();
+ TInt count = archives.Count();
+
+ if(count == 0)
+ {
+ __LOG("CMMCScBkupEngineImpl::PrepareObjectsL() - nothing to be done, leaving...");
+ User::Leave(KErrCancel);
+ }
+
+ for(TInt i = 0; i < count; i++)
+ {
+ CMMCScBkupArchive* archive;
+ archive = CMMCScBkupArchive::NewL( iFsSession, DrvProgressHandler(), *this, archives[i]->Category() );
+ CleanupStack::PushL( archive );
+ iArchives.AppendL( archive );
+ CleanupStack::Pop( archive );
+
+ CMMCScBkupDataOwnerCollection* dataOwners;
+ dataOwners = CMMCScBkupDataOwnerCollection::NewL( *this, archives[i]->Category() );
+ CleanupStack::PushL( dataOwners );
+ iDataOwners.AppendL( dataOwners );
+ CleanupStack::Pop( dataOwners );
+
+ CMMCScBkupFileListCollection* fileList;
+ fileList = CMMCScBkupFileListCollection::NewL( archives[i]->Category(), iFsSession );
+ CleanupStack::PushL( fileList );
+ iFileLists.AppendL( fileList );
+ CleanupStack::Pop( fileList );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::ListArchivesL()
+//
+// Provide a list of valid (both content and category do match) archives
+// available on all drives' backup folder
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::ListArchivesL(
+ RPointerArray< CMMCScBkupArchiveInfo >& aArchives,
+ CMMCScBkupOpParamsBase* aParams,
+ const TUint32 aDriveAttMatch,
+ const TInt aDriveMatch )
+ {
+ __LOG("CMMCScBkupEngineImpl::ListArchivesL() - START");
+
+ for(TInt i = 0; i < KMaxDrives; i++)
+ {
+ // Check is drive number allowed
+ if ( aDriveMatch != KErrNotFound && aDriveMatch != i )
+ {
+ continue;
+ }
+ // Check are drive attributes allowed
+ TBool supported( EFalse );
+ TDriveInfo driveInfo;
+ if ( iFsSession.Drive( driveInfo, i ) == KErrNone )
+ {
+ if ( driveInfo.iDriveAtt & aDriveAttMatch )
+ {
+ supported = ETrue;
+ }
+ }
+ if ( !supported )
+ {
+ continue;
+ }
+
+ const TDriveUnit driveUnit(i);
+ const TDriveName driveName(driveUnit.Name());
+ CDir* pFiles = NULL;
+ TFileName path;
+ path.Append(driveName);
+ path.Append(KBackUpFolder());
+ path.Append(KBackUpFiles());
+
+ // Scan for all archives
+ iFsSession.GetDir(path, KEntryAttMatchMask, ESortNone, pFiles);
+ CleanupStack::PushL(pFiles);
+
+ if(pFiles)
+ {
+ TInt count = pFiles->Count();
+ for (TInt x = 0; x < count; x++)
+ {
+ const TEntry& entryPtr = (*pFiles)[x];
+ TEntry entry(entryPtr);
+ TFileName pathAndFile;
+ pathAndFile.Append(driveName);
+ pathAndFile.Append(KBackUpFolder());
+ pathAndFile.Append(entry.iName);
+
+ entry.iName = pathAndFile;
+
+ // Read category information from archive
+ TBitFlags category;
+ TRAPD(err, category = MMCScBkupArchiveUtils::ReadBkUpCategoryInformationL( iFsSession, pathAndFile ));
+
+ if(err == KErrNone)
+ {
+ // Append archive in list when valid
+ if((category.Value() & aParams->Categories().Value()) && ValidArchiveForRestoreL( pathAndFile ))
+ {
+ __LOG2("CMMCScBkupEngineImpl::ListArchivesL() - adding archive %S of category 0x%x",
+ &pathAndFile, category.Value());
+ CMMCScBkupArchiveInfo* archiveInfo = CMMCScBkupArchiveInfo::NewLC( entry );
+ // Set category in archive info - can be used for filtering
+ archiveInfo->SetCategory( category );
+ // Move ownership to array
+ aArchives.AppendL(archiveInfo);
+ CleanupStack::Pop(archiveInfo);
+ }
+ else
+ {
+ __LOG3("CMMCScBkupEngineImpl::ListArchivesL() - archive %S of category 0x%x (vs. 0x%x) not included",
+ &pathAndFile, category.Value(), aParams->Categories().Value());
+ }
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(pFiles);
+ }
+
+ __LOG("CMMCScBkupEngineImpl::ListArchivesL() - END");
+ }
+
+
+#ifdef DEBUGGING_DATA_TRANSFER
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::CleanBackupFilesL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::CleanBackupFilesL()
+ {
+ CFileMan* fileMan = CFileMan::NewL( iFsSession );
+ CleanupStack::PushL( fileMan );
+
+ // Make directory, ignore error, ugly, functionise later on...
+ _LIT(KMMCScBkupFormatDes, "%S%S%S%S");
+ TFileName cleanPath;
+ const TDesC& path = PathInfo::MemoryCardRootPath();
+
+ //
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataJava, &KMMCScBkupDataTransferDebuggingPathDataBackup);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataSystem, &KMMCScBkupDataTransferDebuggingPathDataBackup);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataPassive, &KMMCScBkupDataTransferDebuggingPathDataBackup);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataActive, &KMMCScBkupDataTransferDebuggingPathDataBackup);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ //
+ CleanupStack::PopAndDestroy( fileMan );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupEngineImpl::ClearRestoreFilesL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupEngineImpl::ClearRestoreFilesL()
+ {
+ CFileMan* fileMan = CFileMan::NewL( iFsSession );
+ CleanupStack::PushL( fileMan );
+
+ // Make directory, ignore error, ugly, functionise later on...
+ _LIT(KMMCScBkupFormatDes, "%S%S%S%S");
+ TFileName cleanPath;
+ const TDesC& path = PathInfo::MemoryCardRootPath();
+
+ //
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataJava, &KMMCScBkupDataTransferDebuggingPathDataRestore);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataSystem, &KMMCScBkupDataTransferDebuggingPathDataRestore);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataPassive, &KMMCScBkupDataTransferDebuggingPathDataRestore);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ cleanPath.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot, &KMMCScBkupDataTransferDebuggingPathDataActive, &KMMCScBkupDataTransferDebuggingPathDataRestore);
+ fileMan->Delete( cleanPath, CFileMan::ERecurse ); // Ignore error
+ iFsSession.MkDirAll( cleanPath );
+ //
+ CleanupStack::PopAndDestroy( fileMan );
+ }
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupFileInfo.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupFileInfo implementation
+*
+*
+*/
+
+#include "CMMCScBkupFileInfo.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::CMMCScBkupFileInfo()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupFileInfo::CMMCScBkupFileInfo()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::CMMCScBkupFileInfo()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupFileInfo::CMMCScBkupFileInfo( const TEntry& aEntry, TSecureId aAssociatedSID )
+: iSecureId(aAssociatedSID)
+ {
+ iSize = aEntry.iSize;
+ iDateTime = aEntry.iModified;
+ iAttributes = aEntry.iAtt;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::~CMMCScBkupFileInfo()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupFileInfo::~CMMCScBkupFileInfo()
+ {
+ delete iFileName;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileInfo::ConstructL( const TEntry& aEntry )
+ {
+ iFileName = aEntry.iName.AllocL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupFileInfo* CMMCScBkupFileInfo::NewL( const TEntry& aEntry, TSecureId aAssociatedSID )
+ {
+ CMMCScBkupFileInfo* self = NewLC( aEntry, aAssociatedSID );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupFileInfo* CMMCScBkupFileInfo::NewLC( const TEntry& aEntry, TSecureId aAssociatedSID )
+ {
+ CMMCScBkupFileInfo* self = new(ELeave) CMMCScBkupFileInfo( aEntry, aAssociatedSID );
+ CleanupStack::PushL(self);
+ self->ConstructL(aEntry);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupFileInfo* CMMCScBkupFileInfo::NewLC( RReadStream& aStream )
+ {
+ CMMCScBkupFileInfo* self = new(ELeave) CMMCScBkupFileInfo();
+ CleanupStack::PushL(self);
+ aStream >> *self;
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::Drive()
+//
+//
+// ---------------------------------------------------------------------------
+TDriveNumber CMMCScBkupFileInfo::Drive() const
+ {
+ const TDriveUnit driveUnit( FileName() );
+ const TDriveNumber drive = static_cast< TDriveNumber > ( driveUnit.operator TInt() );
+ //
+ return drive;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileInfo::InternalizeL(RReadStream& aStream)
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ aStream.ReadInt32L(); // spare3
+ //
+ HBufC* fileName = HBufC::NewL(aStream, KMaxFileName);
+ delete iFileName;
+ iFileName = fileName;
+ //
+ TInt64 intermediateDateTime;
+ aStream >> intermediateDateTime;
+ iDateTime = TTime(intermediateDateTime);
+ //
+ TUid intermediateSID;
+ aStream >> intermediateSID;
+ iSecureId = intermediateSID;
+ //
+ iSize = aStream.ReadInt32L();
+ iAttributes = aStream.ReadUint32L();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileInfo::ExternalizeL(RWriteStream& aStream) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ aStream.WriteInt32L( 0 ); // spare3
+ //
+ aStream << *iFileName;
+ aStream << iDateTime.Int64();
+ aStream << iSecureId.operator TUid();
+ aStream.WriteInt32L(iSize);
+ aStream.WriteUint32L(iAttributes);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::OrderByFileName()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupFileInfo::OrderByFileName(const CMMCScBkupFileInfo& aLeft, const CMMCScBkupFileInfo& aRight)
+ {
+ const TPtrC pLeft(aLeft.FileName());
+ const TPtrC pRight(aRight.FileName());
+ //
+ const TInt ret = pLeft.Compare(pRight);
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileInfo::CompareByFileName()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupFileInfo::CompareByFileName(const CMMCScBkupFileInfo& aLeft, const CMMCScBkupFileInfo& aRight)
+ {
+ const TPtrC pLeft(aLeft.FileName());
+ const TPtrC pRight(aRight.FileName());
+ //
+ const TBool same = (pLeft.Compare(pRight) == 0);
+ return same;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupFileListCollection.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupFileListCollection implementation
+*
+*
+*/
+
+#include "CMMCScBkupFileListCollection.h"
+
+#include <bldvariant.hrh>
+#include <pathinfo.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#ifdef RD_FILE_MANAGER_BACKUP
+#include <driveinfo.h>
+#include "BkupEngine.hrh"
+#include "pathconfiguration.hrh"
+#endif
+
+// Constants
+const TInt KMMCScBkupDataOwnerGranularity = 50;
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::CMMCScBkupFileListCollection()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupFileListCollection::CMMCScBkupFileListCollection( TBitFlags aCategory,
+ RFs& aFsSession )
+ :iEntries(KMMCScBkupDataOwnerGranularity),
+ iCategory( aCategory ),
+ iFsSession( aFsSession )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::~CMMCScBkupFileListCollection()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupFileListCollection::~CMMCScBkupFileListCollection()
+ {
+ Reset();
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileListCollection::ConstructL()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupFileListCollection* CMMCScBkupFileListCollection::NewL( TBitFlags aCategory,
+ RFs& aFsSession )
+ {
+ CMMCScBkupFileListCollection* self = new(ELeave) CMMCScBkupFileListCollection( aCategory, aFsSession );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::AppendL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileListCollection::AppendL( const RArray<TEntry>& aArray, RArray< const CMMCScBkupFileInfo* >& aAddedItems, TSecureId aAssociatedSID )
+ {
+ const TInt count = aArray.Count();
+
+ __LOG2("CMMCScBkupFileListCollection::AppendL() - Number of files %d to check for category %x", count, Category().Value() );
+
+ for(TInt i=0; i<count; i++)
+ {
+ const TEntry& entry = aArray[i];
+#ifdef RD_FILE_MANAGER_BACKUP
+ TBool skipFile = EFalse;
+
+ if(Category().Value() != EBUCatUserFiles && Category().Value() != EBUCatAllInOne)
+ {
+ // Check whether public file in system user data folder. If it is and not part of
+ // user file category, then discard file from collection
+ const TDesC& path = PathInfo::PhoneMemoryRootPath();
+ TInt error = entry.iName.FindF(path);
+ if(error != KErrNotFound)
+ {
+ __LOG1("CMMCScBkupFileListCollection::AppendL() - Skipping file %S", &entry.iName );
+ skipFile = ETrue;
+ }
+ }
+ else if(Category().Value() == EBUCatUserFiles)
+ {
+ // Check also if public file is from mass-storage. If yes and user-files category in
+ // question, prevent file getting backed up, because otherwise it is probable 2 GB
+ // get exceeded and we cannot save larger than 2 GB archive. Allow public files being
+ // backed up in other categories.
+ TUint drvStatus( 0 );
+ TInt drive( KErrNotFound );
+
+ if( RFs::CharToDrive( entry.iName[0], drive ) != KErrNone )
+ {
+ drive = KErrNotFound;
+ }
+
+ TInt err = DriveInfo::GetDriveStatus(iFsSession, drive, drvStatus );
+
+ if ( err == KErrNone && ( drvStatus & DriveInfo::EDriveInternal ) &&
+ ( drvStatus & DriveInfo::EDriveExternallyMountable ) )
+ {
+ __LOG1("CMMCScBkupFileListCollection::AppendL() - Skipping file %S due it in mass storage", &entry.iName );
+ skipFile = ETrue;
+ }
+ }
+
+ if(!skipFile)
+#endif // RD_FILE_MANAGER_BACKUP
+ {
+ // Check whether the file is already present before adding it (avoid duplicate
+ // public files)
+ CMMCScBkupFileInfo* fileInfo = CMMCScBkupFileInfo::NewLC( entry, aAssociatedSID );
+
+ TLinearOrder<CMMCScBkupFileInfo> comparer( CMMCScBkupFileInfo::OrderByFileName );
+ const TInt indexIfFound = iEntries.FindInOrder( fileInfo, comparer );
+ if (indexIfFound < 0)
+ {
+ // Item wasn't found - insert it in sorted order
+ AppendL( fileInfo );
+ CleanupStack::Pop( fileInfo );
+
+ __LOG1("CMMCScBkupFileListCollection::AppendL() - Adding file %S", &fileInfo->FileName() );
+
+ // Add a copy to our return array.
+ aAddedItems.AppendL( fileInfo );
+ }
+ else
+ {
+ // Duplicate, discard
+ __LOG1("CMMCScBkupFileListCollection::AppendL() - Duplicate file %S", &fileInfo->FileName() );
+ CleanupStack::PopAndDestroy( fileInfo );
+ }
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::AppendL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileListCollection::AppendL( CMMCScBkupFileInfo* aFileInfo )
+ {
+ TLinearOrder<CMMCScBkupFileInfo> comparer( CMMCScBkupFileInfo::OrderByFileName );
+ iEntries.InsertInOrderL( aFileInfo, comparer );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::Count()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupFileListCollection::Count() const
+ {
+ return iEntries.Count();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::Entry()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupFileInfo& CMMCScBkupFileListCollection::Entry(TInt aIndex) const
+ {
+ const CMMCScBkupFileInfo& entry = *iEntries[aIndex];
+ return entry;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::Remove()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileListCollection::Remove( TInt aIndex )
+ {
+ CMMCScBkupFileInfo* entry = iEntries[aIndex];
+ delete entry;
+ iEntries.Remove(aIndex);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupFileListCollection::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupFileListCollection::Reset()
+ {
+ iEntries.ResetAndDestroy();
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexActiveData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexActiveData implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexActiveData.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+ /**
+ * Active Data
+ * ===========
+ *
+ * This is the format of the data written by the
+ * CMMCScBkupStateArchiveOpActiveData object
+ *
+ * E.g.:
+ *
+ * ACTIVE DATA for DO 0
+ * {
+ * AD for DO 0, 1st drive
+ * AD for DO 0, 2nd drive
+ * AD for DO 0, 'n'th drive
+ * },
+ * ACTIVE DATA for DO 1
+ * {
+ * AD for DO 0, 1st drive - (AD is only on
+ * AD for DO 0, 2nd drive two drives)
+ * },
+ * ACTIVE DATA for DO n
+ * {
+ * AD for DO 0, 1st drive - (AD is only on one drive)
+ * }
+ *
+ * Active Data Index
+ * =================
+ *
+ * This is the format of the data written by this object.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ *
+ * 4 bytes = count of active data entries
+ *
+ * FOR EACH DATA OWNER
+ * {
+ * 4 bytes = secure id associated with a active data owner
+ * 4 bytes = the number of different active data packages
+ * for this particular active data owner (one for each
+ * drive that was backed up)
+ * ENTRY
+ * {
+ * 1 byte = Associated TDriveNumber of the active data
+ * 8 bytes = offset and length of raw data
+ * }
+ * }
+ *
+ *
+ **/
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexActiveData::CMMCScBkupIndexActiveData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexActiveData::CMMCScBkupIndexActiveData()
+: CMMCScBkupIndexWithIdentifier< TSecureId >( EMMCScBkupOwnerDataTypeActiveData )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexActiveData::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexActiveData* CMMCScBkupIndexActiveData::NewLC()
+ {
+ CMMCScBkupIndexActiveData* self = new(ELeave) CMMCScBkupIndexActiveData();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexBase.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexBase implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexBase.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexBase::CMMCScBkupIndexBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexBase::CMMCScBkupIndexBase( TMMCScBkupOwnerDataType aType )
+: iType(aType)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexBase::~CMMCScBkupIndexBase()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexBase::~CMMCScBkupIndexBase()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexBase::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexBase::ConstructL()
+ {
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexDataOwners.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexDataOwners implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexDataOwners.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+
+// Constants
+const TInt KMMCScBkupDataOwnerIndexGranularity = 50;
+
+
+ /**
+ * Registration Data
+ * =================
+ *
+ * This is the format of the data written by the
+ * CMMCScBkupStateGetDataOwners object
+ *
+ *
+ * REG DATA for DO 0
+ * {
+ * RD for DO 0, 1st drive
+ * RD for DO 0, 2nd drive
+ * RD for DO 0, 'n'th drive
+ * },
+ * REG DATA for DO 1
+ * {
+ * RD for DO 0, 1st drive
+ * RD for DO 0, 2nd drive
+ * RD for DO 0, 'n'th drive
+ * },
+ * REG DATA for DO n
+ * {
+ * RD for DO 0, 1st drive
+ * RD for DO 0, 2nd drive
+ * RD for DO 0, 'n'th drive
+ * }
+ *
+ * Registration Data Index
+ * =======================
+ *
+ * This is the format of the data written by this method.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ *
+ * 4 bytes = count of data owners
+ *
+ * FOR EACH DATA OWNER
+ * {
+ * 4 bytes = secure id of data owner's process
+ * 4 bytes = the number of different registration data files
+ * for this particular data owner (one for each drive that
+ * was backed up)
+ * ENTRY
+ * {
+ * 1 byte = Associated TDriveNumber of the registration data
+ * n bytes = raw drive data
+ * }
+ * }
+ *
+ *
+ **/
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::CMMCScBkupIndexDataOwners()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexDataOwners::CMMCScBkupIndexDataOwners()
+: CMMCScBkupIndexBase( EMMCScBkupOwnerDataTypeDataOwner ), iEntries( KMMCScBkupDataOwnerIndexGranularity )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::~CMMCScBkupIndexDataOwners()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexDataOwners::~CMMCScBkupIndexDataOwners()
+ {
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexDataOwners* CMMCScBkupIndexDataOwners::NewLC()
+ {
+ CMMCScBkupIndexDataOwners* self = new(ELeave) CMMCScBkupIndexDataOwners();
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexDataOwners::AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo )
+ {
+ iEntries.AppendL( aInfo );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::StoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexDataOwners::StoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RWriteStream& stream = archiveDataInterface.ADIWriteStreamUncompressedLC();
+ //
+ stream.WriteInt32L( EStreamFormatVersion1 );
+ stream.WriteInt32L( 0 ); // spare1
+ stream.WriteInt32L( 0 ); // spare2
+ stream.WriteInt32L( 0 ); // spare3
+ //
+ const TInt count = iEntries.Count();
+ stream.WriteInt32L(count);
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ const TMMCScBkupArchiveVector& entry = iEntries[i];
+ stream << entry;
+ //
+ stream.WriteInt32L( 0 ); // spare1
+ stream.WriteInt32L( 0 ); // spare2
+ }
+ //
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+ // Update our base class info with the offset to the index
+ const TMMCScBkupArchiveVector& writeInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ SetVector( writeInfo );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::RestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexDataOwners::RestoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RReadStream& stream = archiveDataInterface.ADIReadStreamUncompressedLC( Vector().Offset() );
+ //
+ stream.ReadInt32L(); // EStreamFormatVersion1
+ stream.ReadInt32L(); // spare1
+ stream.ReadInt32L(); // spare2
+ stream.ReadInt32L(); // spare3
+ //
+ const TInt count = stream.ReadInt32L();
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ TMMCScBkupArchiveVector entry;
+ stream >> entry;
+ //
+ stream.ReadInt32L(); // spare1
+ stream.ReadInt32L(); // spare2
+ //
+ iEntries.AppendL( entry );
+ }
+ //
+ CleanupStack::PopAndDestroy(); // stream
+ //
+ const TMMCScBkupArchiveVector& readInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ if ( readInfo.Length() > Vector().Length() )
+ {
+ // We've read too much!
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexJavaData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,402 @@
+/*
+* Copyright (c) 2006 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: CMMCScBkupIndexJavaDataEntry implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexJavaData.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "MMCScBkupLogger.h"
+
+
+ /**
+ * Registration Data
+ * =================
+ *
+ *
+ * REG DATA for DO 0
+ * {
+ * RD for DO 0, 1st drive
+ * RD for DO 0, 2nd drive
+ * RD for DO 0, 'n'th drive
+ * },
+ * REG DATA for DO 1
+ * {
+ * RD for DO 0, 1st drive
+ * RD for DO 0, 2nd drive
+ * RD for DO 0, 'n'th drive
+ * },
+ * REG DATA for DO n
+ * {
+ * RD for DO 0, 1st drive
+ * RD for DO 0, 2nd drive
+ * RD for DO 0, 'n'th drive
+ * }
+ *
+ * Registration Data Index
+ * =======================
+ *
+ * This is the format of the data written by this object.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ *
+ * 4 bytes = count of registration data entries
+ *
+ * FOR EACH DATA OWNER
+ * {
+ * 4 bytes = secure id of data owner's process
+ * 4 bytes = the number of different registration data files
+ * for this particular data owner (one for each drive that
+ * was backed up)
+ * ENTRY
+ * {
+ * 1 byte = Associated TDriveNumber of the registration data
+ * 8 bytes = offset & length of actual registration data
+ * }
+ * }
+ *
+ **/
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::CMMCScBkupIndexJavaDataEntry()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaDataEntry::CMMCScBkupIndexJavaDataEntry()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::CMMCScBkupIndexJavaDataEntry()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaDataEntry::~CMMCScBkupIndexJavaDataEntry()
+ {
+ delete iHash;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaDataEntry::ConstructL()
+ {
+ iHash = KNullDesC().AllocL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaDataEntry* CMMCScBkupIndexJavaDataEntry::NewLC()
+ {
+ CMMCScBkupIndexJavaDataEntry* self = new(ELeave) CMMCScBkupIndexJavaDataEntry();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaDataEntry* CMMCScBkupIndexJavaDataEntry::NewLC( RReadStream& aStream )
+ {
+ CMMCScBkupIndexJavaDataEntry* self = new(ELeave) CMMCScBkupIndexJavaDataEntry();
+ CleanupStack::PushL( self );
+ aStream >> *self;
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::SetHashL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaDataEntry::SetHashL( const TDesC& aHash )
+ {
+ HBufC* hash = aHash.AllocL();
+ delete iHash;
+ iHash = hash;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaDataEntry::InternalizeL( RReadStream& aStream )
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ aStream.ReadInt32L(); // spare3
+ //
+ HBufC* hash = HBufC::NewL( aStream, KMaxTInt );
+ delete iHash;
+ iHash = hash;
+ //
+ aStream >> iMidletInfo;
+ aStream >> iMidletDataInfo;
+ iDrive = static_cast< TDriveNumber>( aStream.ReadInt8L() );
+ //
+ __LOG6("CMMCScBkupIndexJavaDataEntry::InternalizeL() - hash: %S, iDrive: %c:, MIDLET[offset: %8d, length: %8d], MIDLETDATA[offset: %8d, length: %8d]", iHash, iDrive + 'A', iMidletInfo.Offset(), iMidletInfo.Length(), iMidletDataInfo.Offset(), iMidletDataInfo.Length() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaDataEntry::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaDataEntry::ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ aStream.WriteInt32L( 0 ); // spare3
+ //
+ aStream << Hash();
+ aStream << iMidletInfo;
+ aStream << iMidletDataInfo;
+ aStream.WriteInt8L( iDrive );
+ //
+ __LOG6("CMMCScBkupIndexJavaDataEntry::ExternalizeL() - hash: %S, iDrive: %c:, MIDLET[offset: %8d, length: %8d], MIDLETDATA[offset: %8d, length: %8d]", iHash, iDrive + 'A', iMidletInfo.Offset(), iMidletInfo.Length(), iMidletDataInfo.Offset(), iMidletDataInfo.Length() );
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::CMMCScBkupIndexJavaData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaData::CMMCScBkupIndexJavaData()
+: CMMCScBkupIndexBase( EMMCScBkupOwnerDataTypeJavaData )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::~CMMCScBkupIndexJavaData()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaData::~CMMCScBkupIndexJavaData()
+ {
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaData* CMMCScBkupIndexJavaData::NewLC()
+ {
+ CMMCScBkupIndexJavaData* self = new(ELeave) CMMCScBkupIndexJavaData();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaData::AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo, const TDesC& aHash, TDriveNumber aDrive, TJavaTransferType aType )
+ {
+ // Check if we already have an entry for this item...
+ CMMCScBkupIndexJavaDataEntry* entry = EntryByHash( aHash, aDrive );
+
+ if ( !entry )
+ {
+ __LOG1("CMMCScBkupIndexJavaData::AddIndexRecordL() - making new entry for hash: %S", &aHash);
+ //
+ entry = CMMCScBkupIndexJavaDataEntry::NewLC();
+ //
+ entry->SetHashL( aHash );
+ entry->SetDrive( aDrive );
+ iEntries.AppendL( entry );
+ //
+ CleanupStack::Pop( entry );
+ }
+ else
+ {
+ __LOG1("CMMCScBkupIndexJavaData::AddIndexRecordL() - found existing entry for hash: %S", &aHash);
+ }
+
+ if ( aType == EJavaMIDlet )
+ {
+ entry->SetMidletInfo( aInfo );
+ }
+ else if ( aType == EJavaMIDletData )
+ {
+ entry->SetMidletDataInfo( aInfo );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::At()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupIndexJavaDataEntry& CMMCScBkupIndexJavaData::At( TInt aIndex ) const
+ {
+ const CMMCScBkupIndexJavaDataEntry* entry = iEntries[ aIndex ];
+ return *entry;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::StoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaData::StoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RWriteStream stream(archiveDataInterface.ADIWriteStreamUncompressedLC());
+ //
+ stream.WriteInt32L( EStreamFormatVersion1 );
+ stream.WriteInt32L( 0 ); // spare1
+ stream.WriteInt32L( 0 ); // spare2
+ stream.WriteInt32L( 0 ); // spare3
+ //
+ const TInt count = iEntries.Count();
+ stream.WriteInt32L(count);
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ const CMMCScBkupIndexJavaDataEntry* entry = iEntries[i];
+ stream << *entry;
+ }
+ //
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+ // Update our base class info with the offset to the index
+ SetVector( archiveDataInterface.ADICurrentArchiveVectorInfo() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::RestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexJavaData::RestoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RReadStream& stream = archiveDataInterface.ADIReadStreamUncompressedLC( Vector().Offset() );
+ //
+ stream.ReadInt32L(); // EStreamFormatVersion1
+ stream.ReadInt32L(); // spare1
+ stream.ReadInt32L(); // spare2
+ stream.ReadInt32L(); // spare3
+ //
+ const TInt count = stream.ReadInt32L();
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupIndexJavaDataEntry* entry = CMMCScBkupIndexJavaDataEntry::NewLC( stream );
+ iEntries.AppendL( entry );
+ CleanupStack::Pop( entry );
+ }
+ //
+ CleanupStack::PopAndDestroy(); // stream
+ //
+ const TMMCScBkupArchiveVector& readInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ if ( readInfo.Length() > Vector().Length() )
+ {
+ // We've read too much!
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexJavaData::EntryByHash()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexJavaDataEntry* CMMCScBkupIndexJavaData::EntryByHash( const TDesC& aHash, TDriveNumber aDrive ) const
+ {
+ CMMCScBkupIndexJavaDataEntry* ret = NULL;
+ const TInt count = iEntries.Count();
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupIndexJavaDataEntry* entry = iEntries[ i ];
+ //
+ if ( entry->Hash() == aHash && entry->Drive() == aDrive )
+ {
+ ret = entry;
+ break;
+ }
+ }
+ //
+ return ret;
+ }
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexPassiveData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexPassiveData implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexPassiveData.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+ /**
+ * Passive Data
+ * ===========
+ *
+ *
+ *
+ * Passive Data Index
+ * =================
+ *
+ * This is the format of the data written by this object.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ *
+ * 4 bytes = count of passive data entries
+ *
+ * FOR EACH DATA OWNER
+ * {
+ * 4 bytes = secure id associated with a passive data owner
+ * 4 bytes = the number of different data entries for this
+ * particular passive data owner (one for each
+ * drive that was backed up)
+ * ENTRY
+ * {
+ * 1 byte = Associated TDriveNumber of the system data
+ * 8 bytes = offset and size to passive data
+ * }
+ * }
+ *
+ *
+ **/
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPassiveData::CMMCScBkupIndexPassiveData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPassiveData::CMMCScBkupIndexPassiveData()
+: CMMCScBkupIndexWithIdentifier< TSecureId >( EMMCScBkupOwnerDataTypePassiveData )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPassiveData::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPassiveData* CMMCScBkupIndexPassiveData::NewLC()
+ {
+ CMMCScBkupIndexPassiveData* self = new(ELeave) CMMCScBkupIndexPassiveData();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexPublicDataFiles.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexPublicDataFiles implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexPublicDataFiles.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "CMMCScBkupFileInfo.h"
+#include "CMMCScBkupFileListCollection.h"
+
+
+ /**
+ * Public File Data
+ * ================
+ *
+ * This is the format of the data written by the
+ * CMMCScBkupStateArchiveOpPublicDataFiles object
+ *
+ * PUB FILE DATA for file 0
+ * PUB FILE DATA for file 1
+ * PUB FILE DATA for file n
+ *
+ * Public File Data Index
+ * ======================
+ *
+ * This is the format of the data written by this object.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ * 4 bytes = count of data owners
+ *
+ * FOR EACH PUBLIC FILE
+ * {
+ * externalised CMMCScBkupFileInfo object
+ * externalised TMMCScBkupArchiveVector (offset & compressed size) object
+ * }
+ *
+ **/
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::CMMCScBkupIndexPublicDataFiles()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPublicDataFiles::CMMCScBkupIndexPublicDataFiles()
+: CMMCScBkupIndexBase( EMMCScBkupOwnerDataTypePublicData )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::~CMMCScBkupIndexPublicDataFiles()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPublicDataFiles::~CMMCScBkupIndexPublicDataFiles()
+ {
+ iEntries.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexPublicDataFiles* CMMCScBkupIndexPublicDataFiles::NewLC()
+ {
+ CMMCScBkupIndexPublicDataFiles* self = new(ELeave) CMMCScBkupIndexPublicDataFiles();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexPublicDataFiles::AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo, const CMMCScBkupFileInfo& aFile )
+ {
+ // Create new entry
+ TMMCScBkupPublicFileEntry entry( aInfo, aFile );
+
+ // Add it to our index
+ iEntries.AppendL( entry );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::At()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupFileInfo& CMMCScBkupIndexPublicDataFiles::At( TInt aIndex, TMMCScBkupArchiveVector& aInfo ) const
+ {
+ const TMMCScBkupPublicFileEntry& entry = iEntries[ aIndex ];
+ aInfo = entry.iInfo;
+ return *entry.iFile;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::StoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexPublicDataFiles::StoreL(MMMCScBkupDriver& aDriver)
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RWriteStream stream(archiveDataInterface.ADIWriteStreamUncompressedLC());
+ //
+ const TInt count = iEntries.Count();
+ stream.WriteInt32L(count);
+ //
+ for(TInt i=0; i<count; i++)
+ {
+ const TMMCScBkupPublicFileEntry& entry = iEntries[i];
+ stream << *entry.iFile;
+ stream << entry.iInfo;
+ }
+ //
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+ // Update our base class info with the offset to the index
+ SetVector( archiveDataInterface.ADICurrentArchiveVectorInfo() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexPublicDataFiles::RestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexPublicDataFiles::RestoreL(MMMCScBkupDriver& aDriver)
+ {
+ CMMCScBkupFileListCollection& fileList = aDriver.DrvFileList();
+ //
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+ RReadStream& stream = archiveDataInterface.ADIReadStreamUncompressedLC( Vector().Offset() );
+ //
+ const TInt count = stream.ReadInt32L();
+ for(TInt i=0; i<count; i++)
+ {
+ TMMCScBkupPublicFileEntry entry;
+
+ // Reconstruct the CMMCScBkupFileInfo entry in the stream
+ CMMCScBkupFileInfo* fileInfo = CMMCScBkupFileInfo::NewLC( stream );
+
+ // Give ownership to the file list collection
+ fileList.AppendL( fileInfo );
+ CleanupStack::Pop( fileInfo );
+ entry.iFile = fileInfo;
+
+ // Then read the offset to the file...
+ stream >> entry.iInfo;
+
+ // And finally add a new record to our index, so client's can
+ // retrieve the info.
+ iEntries.AppendL( entry );
+ }
+ //
+ CleanupStack::PopAndDestroy(); // stream
+ //
+ const TMMCScBkupArchiveVector& readInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ if ( readInfo.Length() > Vector().Length() )
+ {
+ // We've read too much!
+ User::Leave( KErrCorrupt );
+ }
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexSystemData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexSystemData implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexSystemData.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+ /**
+ * System Data
+ * ===========
+ *
+ * This is the format of the data written by the
+ * CMMCScBkupStateArchiveOpSystemData object
+ *
+ *
+ * SYSTEM DATA for DO 0
+ * {
+ * SD for DO 0, 1st drive
+ * SD for DO 0, 2nd drive
+ * SD for DO 0, 'n'th drive
+ * },
+ * SYSTEM DATA for DO 1
+ * {
+ * SD for DO 0, 1st drive - (System data is only on
+ * SD for DO 0, 2nd drive two drives)
+ * },
+ * SYSTEM DATA for DO n
+ * {
+ * SD for DO 0, 1st drive - (System Data is only on one drive)
+ * }
+ *
+ * System Data Index
+ * =================
+ *
+ * This is the format of the data written by this object.
+ * The format allows the possibility of a future partial
+ * restore (hopefully).
+ *
+ *
+ * 4 bytes = count of system data entries
+ *
+ * FOR EACH DATA OWNER
+ * {
+ * 4 bytes = package id associated with a system data owner
+ * 4 bytes = the number of different system data packages
+ * for this particular system data owner (one for each
+ * drive that was backed up)
+ * ENTRY
+ * {
+ * 1 byte = Associated TDriveNumber of the system data
+ * 8 bytes = offset & length of actual registration data
+ * }
+ * }
+ *
+ *
+ **/
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexSystemData::CMMCScBkupIndexSystemData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexSystemData::CMMCScBkupIndexSystemData()
+: CMMCScBkupIndexWithIdentifier< TInt32 >( EMMCScBkupOwnerDataTypeSystemData )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexSystemData::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexSystemData* CMMCScBkupIndexSystemData::NewLC()
+ {
+ CMMCScBkupIndexSystemData* self = new(ELeave) CMMCScBkupIndexSystemData();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexWithIdentifier.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupIndexWithIdentifier implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexWithIdentifier.h"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupOperationParameters.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,490 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupOpParamsBase implementation
+*
+*
+*/
+
+#include "CMMCScBkupOperationParameters.h"
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+#include "CMMCScBkupArchiveInfo.h"
+#include "BkupEngine.hrh"
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::CMMCScBkupOpParamsBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupOpParamsBase::CMMCScBkupOpParamsBase()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::~CMMCScBkupOpParamsBase()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupOpParamsBase::~CMMCScBkupOpParamsBase()
+ {
+ delete iDriveAndOperations;
+ iArchiveInfos.ResetAndDestroy();
+ iArchiveInfos.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupOpParamsBase::ConstructL( TResourceReader& aDriveReader, TBitFlags aCategories )
+ {
+ iCategories = aCategories;
+ iDriveAndOperations = CMMCScBkupDriveAndOperationTypeManager::NewL( aDriveReader );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::DriveAndOperations()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C const CMMCScBkupDriveAndOperationTypeManager& CMMCScBkupOpParamsBase::DriveAndOperations() const
+ {
+ return *iDriveAndOperations;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::SetArchiveInfosL()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C void CMMCScBkupOpParamsBase::SetArchiveInfosL(RPointerArray<CMMCScBkupArchiveInfo>& aInfos)
+ {
+ iArchiveInfos.ResetAndDestroy();
+
+ for(TInt i = 0; i < aInfos.Count(); i++)
+ {
+ iArchiveInfos.AppendL(aInfos[i]);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::ArchiveInfos()
+//
+//
+// ---------------------------------------------------------------------------
+RMMCScBkupPointerArray<CMMCScBkupArchiveInfo>& CMMCScBkupOpParamsBase::ArchiveInfos()
+ {
+ return iArchiveInfos;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::ArchiveInfo()
+//
+//
+// ---------------------------------------------------------------------------
+const CMMCScBkupArchiveInfo& CMMCScBkupOpParamsBase::ArchiveInfo(TBitFlags aCategory) const
+ {
+ CMMCScBkupArchiveInfo* archiveInfo = NULL;
+
+ for(TInt i = 0; i < iArchiveInfos.Count(); i++)
+ {
+ archiveInfo = iArchiveInfos[i];
+ if(archiveInfo->Category() == aCategory)
+ {
+ break;
+ }
+ }
+
+ return *archiveInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBase::FileName()
+//
+//
+// ---------------------------------------------------------------------------
+const TDesC& CMMCScBkupOpParamsBase::FileName(TInt aIndex) const
+ {
+ const TDesC* ret = &KNullDesC;
+ const CMMCScBkupArchiveInfo& archiveInfo = *iArchiveInfos[aIndex];
+
+ if( archiveInfo.FileName().Length() )
+ {
+ ret = &archiveInfo.FileName();
+ }
+
+ return *ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::ReadFromResourceL()
+//
+// Read categories with associated data from resource
+// ---------------------------------------------------------------------------
+void CMMCScBkupOpParamsBackupFull::ReadFromResourceL( TResourceReader& aReader )
+ {
+ TInt count( aReader.ReadInt16() );
+
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ // Read category
+ TBitFlags category = static_cast< TBitFlags >(aReader.ReadUint32());
+
+ // Read archive name
+ const TDriveUnit driveUnit(iDrive);
+ const TDriveName driveName(driveUnit.Name());
+ TFileName name;
+ TPtrC archiveName( aReader.ReadTPtrC() );
+
+ name.Append(driveName);
+ name.Append(KBackUpFolder());
+ name.Append(archiveName);
+
+ // Read special flags
+ TBitFlags flags = static_cast< TBitFlags >(aReader.ReadUint32());
+ TBitFlags excludedFlags = static_cast< TBitFlags >(aReader.ReadUint32());
+
+ // Read SIDs belonging to category
+ TInt16 subCount = aReader.ReadInt16();
+ RArray<TSecureId> sids;
+ CleanupClosePushL( sids );
+
+ for(TInt j = 0; j < subCount; j++)
+ {
+ sids.AppendL(static_cast<TSecureId>(aReader.ReadUint32()));
+ }
+
+ // Read excluded SIDs for category
+ subCount = aReader.ReadInt16();
+ RArray<TSecureId> excludeSids;
+ CleanupClosePushL( excludeSids );
+
+ for(TInt j = 0; j < subCount; j++)
+ {
+ excludeSids.AppendL(static_cast<TSecureId>(aReader.ReadUint32()));
+ }
+
+ TEntry entry;
+ entry.iName = name;
+ CMMCScBkupArchiveInfo* archiveInfo = CMMCScBkupArchiveInfo::NewLC( entry );
+ archiveInfo->SetCategory( category );
+ archiveInfo->SetSpecialFlags( flags );
+ archiveInfo->SetExcludedSpecialFlags( excludedFlags );
+ archiveInfo->SetSIDs( sids );
+ archiveInfo->SetExcludedSIDs( excludeSids );
+
+ // If the category is specified, then add it in list of categories to be archived
+#ifdef RD_FILE_MANAGER_BACKUP
+ if( Categories().Value() & category.Value() )
+#else
+ if( category.Value() == EBUCatAllInOne )
+#endif
+ {
+ __LOG1("CMMCScBkupOpParamsBase::ReadFromResourceL() - adding category 0x%x", category.Value());
+ RMMCScBkupPointerArray<CMMCScBkupArchiveInfo>& archives = ArchiveInfos();
+ archives.AppendL( archiveInfo );
+ CleanupStack::Pop( archiveInfo );
+ }
+ else
+ {
+ __LOG1("CMMCScBkupOpParamsBase::ReadFromResourceL() - category 0x%x not included", category.Value());
+ CleanupStack::PopAndDestroy( archiveInfo );
+ }
+
+ CleanupStack::PopAndDestroy( &excludeSids );
+ CleanupStack::PopAndDestroy( &sids );
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::CMMCScBkupOpParamsBackupFull()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupOpParamsBackupFull::CMMCScBkupOpParamsBackupFull( TDriveNumber aDrive )
+ : iDrive( aDrive )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::~CMMCScBkupOpParamsBackupFull()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupOpParamsBackupFull::~CMMCScBkupOpParamsBackupFull()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupOpParamsBackupFull::ConstructL( TResourceReader& aDriveReader, TResourceReader& aCategoryReader,
+ TBitFlags aCategories )
+ {
+ CMMCScBkupOpParamsBase::ConstructL( aDriveReader, aCategories );
+ ReadFromResourceL( aCategoryReader );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupOpParamsBackupFull* CMMCScBkupOpParamsBackupFull::NewL( TResourceReader& aDriveReader, TResourceReader& aCategoryReader,
+ TDriveNumber aDrive, TBitFlags aCategories )
+ {
+ CMMCScBkupOpParamsBackupFull* self = new(ELeave) CMMCScBkupOpParamsBackupFull( aDrive );
+ CleanupStack::PushL( self );
+ self->ConstructL( aDriveReader, aCategoryReader, aCategories );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::AssociatedOpType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TMMCScBkupOperationType CMMCScBkupOpParamsBackupFull::AssociatedOpType() const
+ {
+ return EMMCScBkupOperationTypeFullBackup;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::PartType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBURPartType CMMCScBkupOpParamsBackupFull::PartType() const
+ {
+ return EBURBackupFull;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::IncrementType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBackupIncType CMMCScBkupOpParamsBackupFull::IncrementType() const
+ {
+ return EBackupBase;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::PassiveTransferType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TTransferDataType CMMCScBkupOpParamsBackupFull::PassiveTransferType() const
+ {
+ return EPassiveBaseData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::ActiveTransferType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TTransferDataType CMMCScBkupOpParamsBackupFull::ActiveTransferType() const
+ {
+ return EActiveBaseData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsBackupFull::PackageTransferType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TPackageDataType CMMCScBkupOpParamsBackupFull::PackageTransferType() const
+ {
+ return ESystemData;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::CMMCScBkupOpParamsRestoreFull()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupOpParamsRestoreFull::CMMCScBkupOpParamsRestoreFull()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::~CMMCScBkupOpParamsRestoreFull()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupOpParamsRestoreFull::~CMMCScBkupOpParamsRestoreFull()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C CMMCScBkupOpParamsRestoreFull* CMMCScBkupOpParamsRestoreFull::NewL( TResourceReader& aDriveReader, TBitFlags aCategories )
+ {
+ CMMCScBkupOpParamsRestoreFull* self = new(ELeave) CMMCScBkupOpParamsRestoreFull( );
+ CleanupStack::PushL( self );
+ self->ConstructL( aDriveReader, aCategories );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::AssociatedOpType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TMMCScBkupOperationType CMMCScBkupOpParamsRestoreFull::AssociatedOpType() const
+ {
+ return EMMCScBkupOperationTypeFullRestore;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::PartType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBURPartType CMMCScBkupOpParamsRestoreFull::PartType() const
+ {
+ return EBURRestoreFull;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::IncrementType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBackupIncType CMMCScBkupOpParamsRestoreFull::IncrementType() const
+ {
+ return EBackupBase;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::PassiveTransferType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TTransferDataType CMMCScBkupOpParamsRestoreFull::PassiveTransferType() const
+ {
+ return EPassiveBaseData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::ActiveTransferType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TTransferDataType CMMCScBkupOpParamsRestoreFull::ActiveTransferType() const
+ {
+ return EActiveBaseData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupOpParamsRestoreFull::PackageTransferType()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TPackageDataType CMMCScBkupOpParamsRestoreFull::PackageTransferType() const
+ {
+ return ESystemData;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupState.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,243 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupState implementation
+*
+*
+*/
+
+#include "CMMCScBkupState.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::CMMCScBkupState()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupState::CMMCScBkupState( MMMCScBkupDriver& aDriver, TInt aPriority )
+: CActive( aPriority ), iDriver( aDriver )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::~CMMCScBkupState()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupState::~CMMCScBkupState()
+ {
+ Cancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::RunL()
+ {
+ User::LeaveIfError(iStatus.Int());
+ //
+ PerformAsynchronousStateStepL();
+ //
+ if (!IsActive())
+ {
+ // If we've processed all the asynchronous steps, then
+ // perform the last rights on the state.
+ //
+ // If this causes a leave, then we cascade the failure
+ // to the observer - i.e. the error is treated as fatal.
+ TRAPD(err, PerformLastRightsL() );
+ CompleteObserver( err );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::DoCancel()
+ {
+ __LOG3("CMMCScBkupState::DoCancel() - START - state: 0x%08x, IsActive: %d, status: %d", StateId().iUid, IsActive(), iStatus.Int() );
+ PerformAsynchronousCancellation();
+ CompleteObserver( KErrCancel );
+ __LOG3("CMMCScBkupState::DoCancel() - END - state: 0x%08x, IsActive: %d, status: %d", StateId().iUid, IsActive(), iStatus.Int() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupState::RunError(TInt aError)
+ {
+#ifdef MMCSCBKUP_USE_BREAKPOINTS
+ __BREAKPOINT();
+#endif
+ //
+ if ( aError == KErrNoMemory || aError == KErrDiskFull || aError == KErrNotReady || aError == KErrServerTerminated || aError == KErrWrite )
+ {
+ __LOGFILE2("CMMCScBkupState::RunError() - **** - FATAL ERROR - state: 0x%08x, aError: %d - Notifying Observer (Engine)", StateId().iUid, aError );
+ CompleteObserver( aError );
+ }
+ else
+ {
+ __LOGFILE2("CMMCScBkupState::RunError() - **** - ATTEMPT TO HANDLE ERROR - state: 0x%08x, aError: %d...", StateId().iUid, aError );
+
+ const TBool errorHandled = PerformAsynchronousErrorCleanup( aError );
+
+ __LOGFILE1("CMMCScBkupState::RunError() - **** - handle error result: %d", errorHandled );
+
+ // If the cleanup callback didn't set us active again, then
+ // assume the object didn't perform any recovery. Therefore
+ // inform our observer about the error and give up.
+ if (!errorHandled || !IsActive())
+ {
+ CompleteObserver( aError );
+ }
+ }
+ //
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::ExecuteL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::ExecuteL(TRequestStatus& aObserver)
+ {
+ SetObserver(aObserver);
+ TRAPD(error, PerformStateInitL());
+
+ // If the object is active, then it is making use of asynchronous
+ // functionality, in which case we do nothing.
+ //
+ // If the object is not active or the call to PerformStateActionL left,
+ // then we complete the observer with the result of the trap
+ if (error != KErrNone || IsActive() == EFalse)
+ {
+ if (error == KErrNone)
+ {
+ PerformLastRightsL();
+ }
+ //
+ CompleteObserver(error);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::PerformAsynchronousStateStepL()
+ {
+ // Derived classes should override this if they implement
+ // asynchronous behaviour
+ User::Invariant();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::PerformAsynchronousCancellation()
+ {
+ // Derived classes are expected to implement this if they have
+ // resources to free. For calls to CompleteSelf(), no action is needed.
+ __LOG3("CMMCScBkupState::PerformAsynchronousCancellation() - ERROR - cancellation not implemented for state: 0x%08x, IsActive: %d, status: %d", StateId().iUid, IsActive(), iStatus.Int() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::PerformLastRightsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::PerformLastRightsL()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::PerformAsynchronousErrorCleanup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupState::PerformAsynchronousErrorCleanup( TInt aError )
+ {
+ (void) aError;
+ __LOGFILE2("CMMCScBkupState::PerformAsynchronousErrorCleanup() - error: %d, state id: 0x%08x", aError, StateId().iUid );
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::CompleteSelf()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::CompleteSelf( TInt aCompletionCode )
+ {
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, aCompletionCode );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::CompleteObserver()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::CompleteObserver( TInt aCompletionCode )
+ {
+ __ASSERT_ALWAYS(iObserver != NULL, User::Invariant());
+ User::RequestComplete( iObserver, aCompletionCode );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupState::SetObserver()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupState::SetObserver(TRequestStatus& aStatus)
+ {
+ __ASSERT_ALWAYS(iObserver == NULL, User::Invariant());
+ aStatus = KRequestPending;
+ iObserver = &aStatus;
+ }
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpActiveData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,467 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpActiveData implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpActiveData.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupIndexWithIdentifier.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+// Constants
+const TInt KMMCScBkupActiveDataOwnerDelayBeforeRetry = 2 * 1000000; // 2 seconds
+const TInt KMMCScBkupNumberOfAttemptsToAllowADOToBecomeReady = 4; // corresponds to 8 seconds of waiting
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::CMMCScBkupStateArchiveOpActiveData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpActiveData::CMMCScBkupStateArchiveOpActiveData( MMMCScBkupDriver& aDriver )
+: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::CMMCScBkupStateArchiveOpActiveData() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::~CMMCScBkupStateArchiveOpActiveData()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpActiveData::~CMMCScBkupStateArchiveOpActiveData()
+ {
+ Cancel();
+ //
+ iTimer.Close();
+ //
+ delete iBackupTransferObject;
+ delete iRestoreTransferObject;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpActiveData* CMMCScBkupStateArchiveOpActiveData::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpActiveData* self = new(ELeave) CMMCScBkupStateArchiveOpActiveData( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpActiveData::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpActiveData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::NextStateBackupId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpActiveData::NextStateBackupId( TBool /*aPartial*/ ) const
+ {
+ // If we still have unprocessed active data owners remaining, then
+ // we must
+ //
+ // a) check their status again - to see if they are ready, then
+ // b) process them once again via this method
+ //
+ // The 'get data owner statuses' object will trigger us again
+ // when it has performed an update of all statuses
+
+ // By default, we want to move onto the passive data...
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdArchiveOpPassiveData;
+ if (AllDataOwnersHandled() == EFalse)
+ {
+ // ... but we've still got at least one data owner who's not yet
+ // finished preparing their data... so we have to retry
+ nextState = KMMCScBkupStateIdGetDataOwnerStatuses;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::NextStateRestoreId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpActiveData::NextStateRestoreId( TBool /*aPartial*/ ) const
+ {
+ // If we still have unprocessed active data owners remaining, then
+ // we must
+ //
+ // a) check their status again - to see if they are ready, then
+ // b) process them once again via this method
+ //
+ // The 'get data owner statuses' object will trigger us again
+ // when it has performed an update of all statuses
+
+ // By default, we want to move onto the passive data...
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdArchiveOpPublicDataFiles;
+ if (AllDataOwnersHandled() == EFalse)
+ {
+ // ... but we've still got at least one data owner who's not yet
+ // finished preparing their data... so we have to retry
+ nextState = KMMCScBkupStateIdGetDataOwnerStatuses;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformStateInitBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::PerformStateInitBackupL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_BACKUP_ACT_DATA;
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformStateInitBackupL() - START");
+
+ iBackupTransferObject = CMMCScBkupWriteDataTransferRequest< TTransferDataType >::NewL(
+ Driver(),
+ *this,
+ EMMCScBkupOwnerDataTypeActiveData,
+ ESIDTransferDerivedType,
+ Driver().DrvParamsBase().ActiveTransferType()
+ );
+ CompleteSelf();
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformStateInitBackupL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformStateInitRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::PerformStateInitRestoreL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_RESTORE_ACT_DATA;
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformStateInitRestoreL() - START");
+
+ iRestoreTransferObject = CMMCScBkupReadDataTransferRequest< TTransferDataType >::NewL(
+ Driver(),
+ EMMCScBkupOwnerDataTypeActiveData,
+ Driver().DrvParamsBase().ActiveTransferType()
+ );
+
+ CompleteSelf();
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformStateInitRestoreL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt count = dataOwners.Count();
+ __LOG2("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - START - iIndexValueCurrent: %d/%d", iIndexValueCurrent, count);
+ //
+ while ( ++iIndexValueCurrent < count )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner(iIndexValueCurrent);
+
+ // Has this data owner been processed?
+ // Is the data owner even ready?
+ const TBool activeDataAlreadyProcessed = owner.CompletionStatus( EMMCScBkupOwnerDataTypeActiveData );
+ const TBool dataOwnerIsReady = ( owner.Status() == EDataOwnerReady ||
+ owner.Status() == EDataOwnerReadyNoImpl );
+ const TBool dataHasRealActiveData = ( owner.Status() == EDataOwnerReady );
+ //
+ __LOG5("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - DO: 0x%08x has status: %d, alreadyProcessed: %d, isReady: %d, dataHasRealActiveData: %d", owner.SecureId().iId, owner.Status(), activeDataAlreadyProcessed, dataOwnerIsReady, dataHasRealActiveData);
+ //
+ if (!activeDataAlreadyProcessed)
+ {
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - active data hasnt already been processed...");
+
+ if (dataOwnerIsReady)
+ {
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - data owner is ready...");
+
+ if ( dataHasRealActiveData )
+ {
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - data owner has real active data...");
+
+ // Try and obtain the active data for this client
+ __ASSERT_ALWAYS(iBackupTransferObject->IsActive() == EFalse, User::Invariant());
+ //
+ iBackupTransferObject->RequestL( owner,
+ iStatus,
+ Driver().DrvParamsBase().DriveAndOperations() );
+ SetActive();
+ break; // while loop
+ }
+ else
+ {
+ // The data owner is a hybrid - we shouldn't request data for a data owner that
+ // doesn't provide an active data interface callback implementation.
+ __LOG("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - DO is a hybrid - set completion status to ETrue");
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, ETrue );
+ }
+ }
+ else
+ {
+ // Retry a number of times, but eventually we'll give up
+ const TInt attemptsSoFar = owner.ActiveDataRetryCount();
+ owner.SetActiveDataRetryCount( attemptsSoFar + 1 );
+
+ if ( attemptsSoFar >= KMMCScBkupNumberOfAttemptsToAllowADOToBecomeReady )
+ {
+ // Give up, this DO is taking too long
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, ETrue );
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - ADO with SID: 0x%08x has taken too long to prepare, skipping", owner.SecureId().iId);
+ }
+ else
+ {
+ // DO is not yet ready, we're going to have to check its
+ // status again in a while...
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepBackupL() - attemptsSoFar %d", attemptsSoFar);
+ iAtLeastOneDataOwnerIsNotYetReady = ETrue;
+ }
+ }
+ }
+ }
+ //
+ CheckNeedToStartRetryTimerL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeActiveData );
+ CMMCScBkupIndexWithIdentifier< TSecureId >& index = static_cast< CMMCScBkupIndexWithIdentifier< TSecureId >& >( indexBase );
+ const TInt count = index.Count();
+ //
+ //
+ while ( ++iIndexValueCurrent < count )
+ {
+ // Get the associated data owner
+ const CMMCScBkupIndexEntry<TSecureId>& entry = index.At( iIndexValueCurrent );
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Identifier() );
+
+ // Has this data owner been processed?
+ // Is the data owner even ready?
+ const TBool activeDataAlreadyProcessed = owner.CompletionStatus(EMMCScBkupOwnerDataTypeActiveData);
+ const TBool dataOwnerIsReady = ( owner.Status() == EDataOwnerReady ||
+ owner.Status() == EDataOwnerReadyNoImpl );
+ //
+ if (!activeDataAlreadyProcessed)
+ {
+ if (dataOwnerIsReady)
+ {
+ __ASSERT_ALWAYS(iRestoreTransferObject->IsActive() == EFalse, User::Invariant());
+ //
+ const RArray<TMMCScBkupArchiveDriveAndVector>& subEntries = entry.Entries();
+ iRestoreTransferObject->RequestL( owner,
+ iStatus,
+ subEntries );
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepRestoreL() - trying to restore ACTIVE DATA for SID: 0x%08x", owner.SecureId().iId );
+ //
+ SetActive();
+ break; // while loop
+ }
+ else
+ {
+ // Retry a number of times, but eventually we'll give up
+ const TInt attemptsSoFar = owner.ActiveDataRetryCount();
+ owner.SetActiveDataRetryCount( attemptsSoFar + 1 );
+
+ if ( attemptsSoFar >= KMMCScBkupNumberOfAttemptsToAllowADOToBecomeReady )
+ {
+ // Give up, this DO is taking too long
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, ETrue );
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousStateStepRestoreL() - ADO with SID: 0x%08x has taken too long to prepare, skipping", owner.SecureId().iId);
+ }
+ else
+ {
+ // DO is not yet ready, we're going to have to check its
+ // status again in a while...
+ iAtLeastOneDataOwnerIsNotYetReady = ETrue;
+ }
+ }
+ }
+ }
+ //
+ CheckNeedToStartRetryTimerL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupBackup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d", aError );
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if ( iIndexValueCurrent < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, ETrue );
+
+ __LOGFILE2("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d, SID: 0x%08x - ACTIVE data skipped for DO", aError, owner.SecureId().iId );
+ }
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOGFILE1("CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::PerformAsynchronousCancellation()
+ {
+ if (iTimer.Handle() != KNullHandle )
+ {
+ iTimer.Cancel();
+ }
+ if (iBackupTransferObject)
+ {
+ iBackupTransferObject->Cancel();
+ }
+ if (iRestoreTransferObject)
+ {
+ iRestoreTransferObject->Cancel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpActiveData::PerformLastRightsBackupL() - iAtLeastOneDataOwnerIsNotYetReady %d", iAtLeastOneDataOwnerIsNotYetReady );
+
+ if ( AllDataOwnersHandled() )
+ {
+ // Only write the index if we've handled all the active data owners
+ CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeActiveData );
+ index.StoreL(Driver());
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive )
+ {
+ CMMCScBkupIndexBase& indexBase = aFooter.IndexByType( EMMCScBkupOwnerDataTypeActiveData );
+ CMMCScBkupIndexWithIdentifier< TSecureId>& index = static_cast< CMMCScBkupIndexWithIdentifier< TSecureId>& >( indexBase );
+ //
+ index.AddIndexRecordL( aInfo, aDrive, aDataOwner.SecureId() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpActiveData::CheckNeedToStartRetryTimerL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpActiveData::CheckNeedToStartRetryTimerL()
+ {
+ // We need to delay until the remaining active data owners are ready
+ const TBool processingDataHandler = IsActive();
+ if ( !processingDataHandler && !AllDataOwnersHandled() && iTimer.Handle() == KNullHandle )
+ {
+ // Implicitly, we have at least one DO that's not yet ready, and
+ // we have processed as many of the ready DO's as is possible on this
+ // cycle. Let's wait a few seconds to give the DO's a time to finish
+ // preparing and then try again. See NextStateId() for how this works.
+ User::LeaveIfError( iTimer.CreateLocal() );
+
+ __LOG("CMMCScBkupStateArchiveOpActiveData::CheckNeedToStartRetryTimerL() - SetActive");
+ SetActive();
+ const TTimeIntervalMicroSeconds32 delay(KMMCScBkupActiveDataOwnerDelayBeforeRetry);
+ iTimer.After( iStatus, delay );
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpArchiveFooter.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpArchiveFooter implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpArchiveFooter.h"
+
+// System includes
+#include <e32std.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupArchiveHeader.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveFooter::CMMCScBkupStateArchiveOpArchiveFooter()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpArchiveFooter::CMMCScBkupStateArchiveOpArchiveFooter( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpArchiveFooter::CMMCScBkupStateArchiveOpArchiveFooter() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveFooter::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpArchiveFooter* CMMCScBkupStateArchiveOpArchiveFooter::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpArchiveFooter* self = new(ELeave) CMMCScBkupStateArchiveOpArchiveFooter( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveFooter::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpArchiveFooter::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpArchiveFooter;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveFooter::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpArchiveFooter::NextStateId() const
+ {
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdOperationComplete;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ nextState = KMMCScBkupStateIdOperationComplete;
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ nextState = KMMCScBkupStateIdArchiveOpDataOwners;
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveFooter::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpArchiveFooter::PerformStateInitL()
+ {
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL()
+ {
+ CMMCScBkupArchive& archive = Driver().DrvArchive();
+ CMMCScBkupArchiveFooter& footer = archive.Footer();
+ CMMCScBkupArchiveHeader& header = archive.Header();
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ __LOG("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - EMMCScBkupOperationTypeFullBackup - storing footer..." );
+ footer.StoreL();
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ {
+ __LOG("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - EMMCScBkupOperationTypeFullRestore - restoring footer..." );
+
+ const TMMCScBkupArchiveVector& archiveVector = Driver().DrvADI().ADIOverallArchiveVectorInfo();
+ __LOG1("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - overall archive length: %d", archiveVector.Length() );
+
+ const TInt footerLengthFromHeader = header.FooterLength();
+ __LOG1("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - footer length (read from header): %d", footerLengthFromHeader );
+
+ const TInt footerStartingOffset = archiveVector.Length() - footerLengthFromHeader;
+ __LOG1("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - footer starting offset: %d", footerStartingOffset );
+
+ footer.RestoreL( footerStartingOffset );
+
+ __LOG("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - restoring all indicies");
+
+ // Restore all indicies
+ CMMCScBkupIndexBase& indexDataOwner = footer.IndexByType(EMMCScBkupOwnerDataTypeDataOwner);
+ indexDataOwner.RestoreL( Driver() );
+
+ CMMCScBkupIndexBase& indexSystem = footer.IndexByType( EMMCScBkupOwnerDataTypeSystemData );
+ indexSystem.RestoreL( Driver() );
+
+ CMMCScBkupIndexBase& indexJava = footer.IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+ indexJava.RestoreL( Driver() );
+
+ CMMCScBkupIndexBase& indexPassive = footer.IndexByType( EMMCScBkupOwnerDataTypePassiveData );
+ indexPassive.RestoreL( Driver() );
+
+ CMMCScBkupIndexBase& indexActive = footer.IndexByType( EMMCScBkupOwnerDataTypeActiveData );
+ indexActive.RestoreL( Driver() );
+
+ CMMCScBkupIndexBase& indexPublic = footer.IndexByType( EMMCScBkupOwnerDataTypePublicData );
+ indexPublic.RestoreL( Driver() );
+
+ __LOG("CMMCScBkupStateArchiveOpArchiveFooter::PerformAsynchronousStateStepL() - all indicies restored");
+
+ break;
+ }
+ default:
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ }
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpArchiveHeader.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpArchiveHeader implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpArchiveHeader.h"
+
+// System includes
+#include <e32std.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveHeader.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveHeader::CMMCScBkupStateArchiveOpArchiveHeader()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpArchiveHeader::CMMCScBkupStateArchiveOpArchiveHeader( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpArchiveHeader::CMMCScBkupStateArchiveOpArchiveHeader() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveHeader::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpArchiveHeader* CMMCScBkupStateArchiveOpArchiveHeader::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpArchiveHeader* self = new(ELeave) CMMCScBkupStateArchiveOpArchiveHeader( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveHeader::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpArchiveHeader::StateId() const
+ {
+ return KMMCScBkupStateArchiveOpArchiveHeader;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveHeader::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpArchiveHeader::NextStateId() const
+ {
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdGetDataOwners;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ nextState = KMMCScBkupStateIdGetDataOwners;
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ nextState = KMMCScBkupStateIdArchiveOpArchiveFooter;
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveHeader::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpArchiveHeader::PerformStateInitL()
+ {
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpArchiveHeader::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpArchiveHeader::PerformAsynchronousStateStepL()
+ {
+ CMMCScBkupArchive& archive = Driver().DrvArchive();
+ CMMCScBkupArchiveHeader& header = archive.Header();
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ header.StoreL(archive.Category());
+#ifdef RD_FILE_MANAGER_BACKUP
+ // Activate crc-calculation for payload data. Header crc'd separately
+ Driver().DrvADI().ADIActivateCrcCalculation(ETrue);
+#endif
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ header.RestoreL();
+ break;
+ default:
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ }
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpDataOwners.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupStateArchiveOpDataOwners implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpDataOwners.h"
+
+// System includes
+#include <e32std.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupArchive.h"
+#include "RMMCScBkupProgressSizer.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "CMMCScBkupIndexDataOwners.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::CMMCScBkupStateArchiveOpDataOwners()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpDataOwners::CMMCScBkupStateArchiveOpDataOwners( MMMCScBkupDriver& aDriver )
+: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpDataOwners::CMMCScBkupStateArchiveOpDataOwners() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::~CMMCScBkupStateArchiveOpDataOwners()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpDataOwners::~CMMCScBkupStateArchiveOpDataOwners()
+ {
+ Cancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpDataOwners* CMMCScBkupStateArchiveOpDataOwners::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpDataOwners* self = new(ELeave) CMMCScBkupStateArchiveOpDataOwners( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpDataOwners::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpDataOwners;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::NextStateBackupId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpDataOwners::NextStateBackupId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdArchiveOpArchiveFooter;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::NextStateRestoreId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpDataOwners::NextStateRestoreId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdValidateDiskSpace;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformStateInitBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpDataOwners::PerformStateInitBackupL( TBool /*aPartial*/ )
+ {
+ // Work is carried out inside asynchronous step
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformStateInitRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpDataOwners::PerformStateInitRestoreL( TBool /*aPartial*/ )
+ {
+ // Restore each data owner asynchronously
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexBase& indexBase = footer.IndexByType(EMMCScBkupOwnerDataTypeDataOwner);
+ CMMCScBkupIndexDataOwners& index = static_cast< CMMCScBkupIndexDataOwners& >( indexBase );
+ const TInt count = dataOwners.Count();
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+
+ // Externalise
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = ADI();
+ RWriteStream stream( archiveDataInterface.ADIWriteStreamUncompressedLC() );
+ stream << owner;
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+
+ // Save the offset of the data owner
+ const TMMCScBkupArchiveVector& info = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ index.AddIndexRecordL( info );
+
+ // Now move on to the next data owner
+ CompleteSelf();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexBase& indexBase = footer.IndexByType( EMMCScBkupOwnerDataTypeDataOwner );
+ CMMCScBkupIndexDataOwners& index = static_cast< CMMCScBkupIndexDataOwners& >( indexBase );
+ const TInt count = index.Count();
+ __LOG1( "CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepRestoreL() - %d data owner index records...", count );
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ const TMMCScBkupArchiveVector& entry = index.At( iIndexValueCurrent );
+ __LOG3( "CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepRestoreL() - entry[%03d] at offset: 0x%08x, length: %4d", iIndexValueCurrent, entry.Offset(), entry.Length() );
+
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = ADI();
+ RReadStream stream( archiveDataInterface.ADIReadStreamUncompressedLC( entry.Offset() ) );
+
+ // Internalize a new entry and add it to the data owner collection
+ CMMCScBkupDataOwnerInfo* dataOwner = CMMCScBkupDataOwnerInfo::NewLC( stream );
+ dataOwners.AppendL( dataOwner );
+ CleanupStack::Pop( dataOwner );
+
+ // Tidy up & check that we didn't read too much - oops
+ const TMMCScBkupArchiveVector& readInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+ if ( readInfo.Length() > entry.Length() )
+ {
+ __LOG( "CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousStateStepRestoreL() - ERROR - Read too much data! -> leave with KErrCorrupt" );
+ User::Leave( KErrCorrupt );
+ }
+ CleanupStack::PopAndDestroy(); // stream
+
+ // Continue to next entry
+ CompleteSelf();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpDataOwners::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeDataOwner );
+ index.StoreL( Driver() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformLastRightsRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpDataOwners::PerformLastRightsRestoreL( TBool /*aPartial*/ )
+ {
+ // Calculate restore byte size (for all drives)
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt64 totalDataRestoreSize = dataOwners.TotalOperationalSizeL();
+
+ // Inform progress manager
+ if(Driver().DrvLastCategory())
+ {
+ __LOG2("CMMCScBkupStateArchiveOpDataOwners::PerformLastRightsRestoreL() - report progress understood (%Ld + %Ld)",
+ totalDataRestoreSize, Driver().DrvTotalProgress());
+ Driver().DrvProgressHandler().MMCScBkupHandleProgressDomainUnderstood( totalDataRestoreSize + Driver().DrvTotalProgress());
+ }
+ else
+ {
+ __LOG2("CMMCScBkupStateArchiveOpDataOwners::PerformLastRightsRestoreL() - adding progress amount %Ld to existing %Ld)",
+ totalDataRestoreSize, Driver().DrvTotalProgress());
+ Driver().DrvStoreTotalProgress( totalDataRestoreSize );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOGFILE1("CMMCScBkupStateArchiveOpDataOwners::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+
+ // Just try to skip the data owner.
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpJavaData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,548 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpJavaData implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpJavaData.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupIndexJavaData.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::CMMCScBkupStateArchiveOpJavaData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpJavaData::CMMCScBkupStateArchiveOpJavaData( MMMCScBkupDriver& aDriver )
+: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::CMMCScBkupStateArchiveOpJavaData() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::~CMMCScBkupStateArchiveOpJavaData()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpJavaData::~CMMCScBkupStateArchiveOpJavaData()
+ {
+ Cancel();
+ //
+ delete iBackupTransferObjectMidlet;
+ delete iBackupTransferObjectMidletData;
+ delete iRestoreTransferObjectMidlet;
+ delete iRestoreTransferObjectMidletData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpJavaData* CMMCScBkupStateArchiveOpJavaData::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpJavaData* self = new(ELeave) CMMCScBkupStateArchiveOpJavaData( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpJavaData::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpJavaData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::NextStateBackupId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpJavaData::NextStateBackupId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdGetDataOwnerStatuses;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::NextStateRestoreId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpJavaData::NextStateRestoreId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdArchiveOpPassiveData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformStateInitBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformStateInitBackupL( TBool /*aPartial*/ )
+ {
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformStateInitBackupL() - START" );
+ __DEBUG_TESTING_SKIP_BACKUP_JAV_DATA;
+
+ iBackupTransferObjectMidlet = CMMCScBkupWriteDataTransferRequest< TJavaTransferType >::NewL(
+ Driver(),
+ *this,
+ EMMCScBkupOwnerDataTypeJavaData,
+ EJavaTransferDerivedType,
+ EJavaMIDlet
+ );
+
+ iBackupTransferObjectMidletData = CMMCScBkupWriteDataTransferRequest< TJavaTransferType >::NewL(
+ Driver(),
+ *this,
+ EMMCScBkupOwnerDataTypePassiveData,
+ EJavaTransferDerivedType,
+ EJavaMIDletData
+ );
+
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL( TBool /*aPartial*/ )
+ {
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL() - START" );
+ __DEBUG_TESTING_SKIP_RESTORE_JAV_DATA;
+
+
+ iRestoreTransferObjectMidlet = CMMCScBkupReadDataTransferRequest< TJavaTransferType >::NewL(
+ Driver(),
+ EMMCScBkupOwnerDataTypeJavaData,
+ EJavaMIDlet
+ );
+
+ iRestoreTransferObjectMidletData = CMMCScBkupReadDataTransferRequest< TJavaTransferType >::NewL(
+ Driver(),
+ EMMCScBkupOwnerDataTypePassiveData,
+ EJavaMIDletData
+ );
+
+ CompleteSelf();
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformStateInitRestoreL() - END" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - START - iCurrentJavaState: %d", iCurrentJavaState );
+
+ switch( iCurrentJavaState )
+ {
+ case EJavaStateIdle:
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - EJavaStateIdle");
+ BackupMidletL();
+ break;
+ case EJavaStateMidlet:
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - EJavaStateMidlet");
+ BackupMidletDataL();
+ break;
+ case EJavaStateMidletData:
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - EJavaStateMidletData");
+ iCurrentJavaState = EJavaStateIdle;
+ CompleteSelf();
+ break;
+ default:
+ break;
+ }
+
+ __LOG2("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepBackupL() - END - iCurrentJavaState: %d, IsActive: %d", iCurrentJavaState, IsActive() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - START - iCurrentJavaState: %d", iCurrentJavaState );
+
+ switch( iCurrentJavaState )
+ {
+ case EJavaStateIdle:
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - EJavaStateIdle");
+ RestoreMidletL();
+ break;
+ case EJavaStateMidlet:
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - EJavaStateMidlet");
+ RestoreMidletDataL();
+ break;
+ case EJavaStateMidletData:
+ __LOG("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - EJavaStateMidletData");
+ iCurrentJavaState = EJavaStateIdle;
+ CompleteSelf();
+ break;
+ default:
+ break;
+ }
+
+ __LOG2("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousStateStepRestoreL() - END - iCurrentJavaState: %d, IsActive: %d", iCurrentJavaState, IsActive() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup() - error: %d", aError );
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if ( iIndexValueCurrent < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeJavaData, ETrue );
+ iCurrentJavaState = EJavaStateIdle;
+
+ __LOGFILE2("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d, SID: 0x%08x - JAVA data skipped for DO", aError, owner.SecureId().iId );
+ }
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOGFILE1("CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+
+ iCurrentJavaState = EJavaStateIdle;
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformAsynchronousCancellation()
+ {
+ if (iBackupTransferObjectMidlet)
+ {
+ iBackupTransferObjectMidlet->Cancel();
+ }
+ if (iBackupTransferObjectMidletData)
+ {
+ iBackupTransferObjectMidletData->Cancel();
+ }
+ if (iRestoreTransferObjectMidlet)
+ {
+ iRestoreTransferObjectMidlet->Cancel();
+ }
+ if (iRestoreTransferObjectMidletData)
+ {
+ iRestoreTransferObjectMidletData->Cancel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+ index.StoreL( Driver() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::PerformLastRightsRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::PerformLastRightsRestoreL( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive )
+ {
+ CMMCScBkupIndexBase& indexBase = aFooter.IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+ CMMCScBkupIndexJavaData& index = static_cast< CMMCScBkupIndexJavaData& >( indexBase );
+ //
+ TJavaTransferType type = EJavaMIDlet;
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( aDataOwner.Owner().Identifier() );
+ //
+ if ( iCurrentJavaState == EJavaStateMidlet )
+ {
+ __LOG4("CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL() - hash: %S, aDrive: %c:, offset: %8d, length: %8d, type: EJavaMIDlet", hash, aDrive + 'A', aInfo.Offset(), aInfo.Length() );
+ type = EJavaMIDlet;
+ }
+ else if ( iCurrentJavaState == EJavaStateMidletData )
+ {
+ __LOG4("CMMCScBkupStateArchiveOpJavaData::AddIndexRecordL() - hash: %S, aDrive: %c:, offset: %8d, length: %8d, type: EJavaMIDletData", hash, aDrive + 'A', aInfo.Offset(), aInfo.Length() );
+ type = EJavaMIDletData;
+ }
+ //
+ index.AddIndexRecordL( aInfo, *hash, aDrive, type );
+ CleanupStack::PopAndDestroy( hash );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::BackupMidletL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::BackupMidletL()
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt count = dataOwners.Count();
+ //
+ while ( ++iIndexValueCurrent < count )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ //
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeJavaData ) == EFalse )
+ {
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( owner.Owner().Identifier() );
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::BackupMidletL() - trying to get midlet for hash: %S", hash );
+ CleanupStack::PopAndDestroy( hash );
+#endif
+
+ iBackupTransferObjectMidlet->RequestL( owner,
+ iStatus,
+ Driver().DrvParamsBase().DriveAndOperations() );
+ SetActive();
+ iCurrentJavaState = EJavaStateMidlet;
+
+ break; // while loop
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::BackupMidletDataL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::BackupMidletDataL()
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+
+ // We only need to request the midlet's passive data if it has a non-zero
+ // size.
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypePassiveData ) == EFalse )
+ {
+ if ( owner.OperationalSize( EMMCScBkupOwnerDataTypePassiveData ) > 0 )
+ {
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( owner.Owner().Identifier() );
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::BackupMidletDataL() - trying to get midlet data for hash: %S", hash );
+ CleanupStack::PopAndDestroy( hash );
+#endif
+
+ iBackupTransferObjectMidletData->RequestL( owner,
+ iStatus,
+ Driver().DrvParamsBase().DriveAndOperations() );
+ SetActive();
+ }
+ else
+ {
+ CompleteSelf();
+ }
+ }
+ else
+ {
+ CompleteSelf();
+ }
+
+ iCurrentJavaState = EJavaStateMidletData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::RestoreMidletL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::RestoreMidletL()
+ {
+ CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+ CMMCScBkupIndexJavaData& index = static_cast< CMMCScBkupIndexJavaData& >( indexBase );
+
+ const TInt count = index.Count();
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - START - %d data owners...", count );
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ __LOG2("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - getting java data index record [%03d/%03d]", iIndexValueCurrent, count);
+ const CMMCScBkupIndexJavaDataEntry& entry = index.At( iIndexValueCurrent );
+
+ // Get the associated data owner
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - trying to get data owner info for hash: %S", &entry.Hash() );
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Hash() );
+
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeJavaData ) == EFalse )
+ {
+ // Request all the java data (on all supported drives) for this
+ // particular data owner
+ __LOG3("CMMCScBkupStateArchiveOpJavaData::RestoreMidletL() - trying to restore JAVA MIDLET for hash: %S [offset: %8d, length: %8d]", &entry.Hash(), entry.MidletInfo().Offset(), entry.MidletInfo().Length() );
+
+ // Build restore entry list (will only contain one entry - the
+ // reader API forces an array interface on us, so let's do ou best
+ // to please it...)
+ const TMMCScBkupArchiveDriveAndVector driveAndVector( entry.Drive(), entry.MidletInfo() );
+ iRestoreEntries.Reset();
+ iRestoreEntries.AppendL( driveAndVector );
+
+ // Start the asynchronous restore op...
+ iRestoreTransferObjectMidlet->RequestL( owner,
+ iStatus,
+ iRestoreEntries );
+ SetActive();
+ }
+ else
+ {
+ CompleteSelf();
+ }
+
+ iCurrentJavaState = EJavaStateMidlet;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL()
+ {
+ CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeJavaData );
+ CMMCScBkupIndexJavaData& index = static_cast< CMMCScBkupIndexJavaData& >( indexBase );
+
+ const TInt count = index.Count();
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - START - %d data owners...", count );
+ //
+ if ( iIndexValueCurrent < count )
+ {
+ __LOG2("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - getting java data index record [%03d/%03d]", iIndexValueCurrent, count);
+ const CMMCScBkupIndexJavaDataEntry& entry = index.At( iIndexValueCurrent );
+
+ if ( entry.HasMidletDataInfo() )
+ {
+ // Get the associated data owner
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+
+ __LOG1("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - trying to get data owner info for hash: %S", &entry.Hash() );
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Hash() );
+
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypePassiveData ) == EFalse )
+ {
+ // Request all the java data (on all supported drives) for this
+ // particular data owner
+ __LOG3("CMMCScBkupStateArchiveOpJavaData::RestoreMidletDataL() - trying to restore JAVA MIDLET DATA for hash: %S [offset: %8d, length: %8d]", &entry.Hash(), entry.MidletDataInfo().Offset(), entry.MidletDataInfo().Length() );
+
+ // Build restore entry list (will only contain one entry - the
+ // reader API forces an array interface on us, so let's do ou best
+ // to please it...)
+ const TMMCScBkupArchiveDriveAndVector driveAndVector( entry.Drive(), entry.MidletDataInfo() );
+ iRestoreEntries.Reset();
+ iRestoreEntries.AppendL( driveAndVector );
+
+ // Start the asynchronous restore op...
+ iRestoreTransferObjectMidletData->RequestL( owner,
+ iStatus,
+ iRestoreEntries );
+ SetActive();
+ }
+ else
+ {
+ CompleteSelf();
+ }
+ }
+ else
+ {
+ CompleteSelf();
+ }
+ }
+ else
+ {
+ CompleteSelf();
+ }
+
+ iCurrentJavaState = EJavaStateMidletData;
+ }
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpPassiveData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpPassiveData implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpPassiveData.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupIndexWithIdentifier.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::CMMCScBkupStateArchiveOpPassiveData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpPassiveData::CMMCScBkupStateArchiveOpPassiveData( MMMCScBkupDriver& aDriver )
+: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpPassiveData::CMMCScBkupStateArchiveOpPassiveData() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::~CMMCScBkupStateArchiveOpPassiveData()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpPassiveData::~CMMCScBkupStateArchiveOpPassiveData()
+ {
+ Cancel();
+ //
+ delete iBackupTransferObject;
+ delete iRestoreTransferObject;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpPassiveData* CMMCScBkupStateArchiveOpPassiveData::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpPassiveData* self = new(ELeave) CMMCScBkupStateArchiveOpPassiveData( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpPassiveData::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpPassiveData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::NextStateBackupId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpPassiveData::NextStateBackupId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdArchiveOpDataOwners;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::NextStateRestoreId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpPassiveData::NextStateRestoreId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdGetDataOwnerStatuses;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformStateInitBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::PerformStateInitBackupL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_BACKUP_PAS_DATA;
+
+ iBackupTransferObject = CMMCScBkupWriteDataTransferRequest<TTransferDataType>::NewL(
+ Driver(),
+ *this,
+ EMMCScBkupOwnerDataTypePassiveData,
+ ESIDTransferDerivedType,
+ Driver().DrvParamsBase().PassiveTransferType()
+ );
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformStateInitRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::PerformStateInitRestoreL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_RESTORE_PAS_DATA;
+
+ iRestoreTransferObject = CMMCScBkupReadDataTransferRequest< TTransferDataType >::NewL(
+ Driver(),
+ EMMCScBkupOwnerDataTypePassiveData,
+ Driver().DrvParamsBase().PassiveTransferType()
+ );
+
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt count = dataOwners.Count();
+ //
+ while ( ++iIndexValueCurrent < count )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ //
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypePassiveData ) == EFalse )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepBackupL() - trying to backup DO 0x%08x", owner.SecureId().iId );
+
+ // Request all the passive data (on all supported drives) for this
+ // particular data owner
+ __ASSERT_ALWAYS( iBackupTransferObject->IsActive() == EFalse, User::Invariant() );
+ //
+ iBackupTransferObject->RequestL( owner,
+ iStatus,
+ Driver().DrvParamsBase().DriveAndOperations() );
+ SetActive();
+ break; // while loop
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypePassiveData );
+ CMMCScBkupIndexWithIdentifier< TSecureId>& index = static_cast< CMMCScBkupIndexWithIdentifier<TSecureId>& >( indexBase );
+ const TInt count = index.Count();
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ const CMMCScBkupIndexEntry<TSecureId>& entry = index.At( iIndexValueCurrent );
+ const RArray<TMMCScBkupArchiveDriveAndVector>& subEntries = entry.Entries();
+
+ // Get the associated data owner
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Identifier() );
+
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypePassiveData ) == EFalse )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepRestoreL() - trying to restore DO 0x%08x", owner.SecureId().iId );
+
+
+ // Request all the registration data (on all supported drives) for this
+ // particular data owner
+ __ASSERT_ALWAYS( iRestoreTransferObject->IsActive() == EFalse, User::Invariant() );
+ //
+ __LOG1("CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousStateStepRestoreL() - trying to restore PASSIVE DATA for SID: 0x%08x", owner.SecureId().iId );
+ //
+ iRestoreTransferObject->RequestL( owner,
+ iStatus,
+ subEntries );
+ SetActive();
+ }
+ else
+ {
+ CompleteSelf();
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupBackup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d", aError );
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if ( iIndexValueCurrent < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypePassiveData, ETrue );
+
+ __LOGFILE1("CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupBackup() - **** - PASSIVE data skipped for SID: 0x%08x", owner.SecureId().iId );
+ }
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOGFILE1("CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::PerformAsynchronousCancellation()
+ {
+ if (iBackupTransferObject)
+ {
+ iBackupTransferObject->Cancel();
+ }
+ if (iRestoreTransferObject)
+ {
+ iRestoreTransferObject->Cancel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType(EMMCScBkupOwnerDataTypePassiveData);
+ index.StoreL(Driver());
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPassiveData::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPassiveData::AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive )
+ {
+ CMMCScBkupIndexBase& indexBase = aFooter.IndexByType( EMMCScBkupOwnerDataTypePassiveData );
+ CMMCScBkupIndexWithIdentifier< TSecureId>& index = static_cast< CMMCScBkupIndexWithIdentifier< TSecureId>& >( indexBase );
+ //
+ index.AddIndexRecordL( aInfo, aDrive, aDataOwner.SecureId() );
+ __LOG3("CMMCScBkupStateArchiveOpPassiveData::AddIndexRecordL() - offset: %6d, length: %6d, secureId: 0x%08x", aInfo.Offset(), aInfo.Length(), aDataOwner.SecureId().iId );
+ }
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpPublicDataFiles.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpPublicDataFiles implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpPublicDataFiles.h"
+
+// System includes
+#include <e32std.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupConfig.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupIndexPublicDataFiles.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "CMMCScBkupFileInfo.h"
+#include "CMMCScBkupFileListCollection.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "MMCScBkupOperations.h"
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::CMMCScBkupStateArchiveOpPublicDataFiles()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpPublicDataFiles::CMMCScBkupStateArchiveOpPublicDataFiles( MMMCScBkupDriver& aDriver )
+: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpPublicDataFiles::CMMCScBkupStateArchiveOpPublicDataFiles() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpPublicDataFiles* CMMCScBkupStateArchiveOpPublicDataFiles::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpPublicDataFiles* self = new(ELeave) CMMCScBkupStateArchiveOpPublicDataFiles( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpPublicDataFiles::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpPublicDataFiles;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::NextStateBackupId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpPublicDataFiles::NextStateBackupId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdArchiveOpSystemData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::NextStateRestoreId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpPublicDataFiles::NextStateRestoreId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdOperationComplete;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformStateInitBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformStateInitBackupL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_BACKUP_PUB_DATA;
+
+ CompleteSelf();
+ SetState( EStateCommonKickOff );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformStateInitRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformStateInitRestoreL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_RESTORE_PUB_DATA;
+
+ CompleteSelf();
+ SetState( EStateCommonKickOff );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ const TState justFinishedExecutingState = State();
+ //
+ switch( justFinishedExecutingState )
+ {
+ case EStateCommonKickOff:
+ CompressingAndWritingFileL();
+ break;
+ case EStateCommonProcessingFile:
+ AddIndexRecordL();
+ break;
+ case EStateBackupAddIndexRecord:
+ SetState( EStateCommonKickOff );
+ CompleteSelf();
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ const TState justFinishedExecutingState = State();
+ //
+ switch( justFinishedExecutingState )
+ {
+ case EStateCommonKickOff:
+ DecompressingAndWritingFileL();
+ break;
+ case EStateCommonProcessingFile:
+ RestoreFileAttributesL();
+ break;
+ case EStateRestoreResetAttributes:
+ SetState( EStateCommonKickOff );
+ CompleteSelf();
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupBackup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupBackup() - **** - error: %d", aError );
+ TBool continueProcessing = ETrue;
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ const CMMCScBkupFileListCollection& fileList = Driver().DrvFileList();
+ if ( iIndexValueCurrent < fileList.Count() )
+ {
+ const CMMCScBkupFileInfo& fileInfo = fileList.Entry(iIndexValueCurrent);
+ (void) fileInfo;
+
+ __LOGFILE2("CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupBackup() - **** - error: %d, file: %S - public data skipped", aError, &fileInfo.FileName());
+
+ // Ensures that asynchronous state step is called again..
+ CompleteSelf();
+ SetState( EStateCommonKickOff );
+ }
+
+ return continueProcessing;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+ TBool continueProcessing = ETrue;
+
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexPublicDataFiles& index = static_cast<CMMCScBkupIndexPublicDataFiles&>( footer.IndexByType( EMMCScBkupOwnerDataTypePublicData ) );
+ const TInt count = index.Count();
+ //
+ if ( iIndexValueCurrent < count )
+ {
+ // Get the entry to restore
+ TMMCScBkupArchiveVector entryInfo;
+ const CMMCScBkupFileInfo& fileInfo = index.At( iIndexValueCurrent, entryInfo );
+ (void) fileInfo;
+
+ __LOGFILE2("CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousErrorCleanupRestore() - **** - error: %d, file: %S - public data skipped", aError, &fileInfo.FileName());
+
+ // Try to restore the next public file
+ //SetState( EStateCommonKickOff );
+ SetState( EStateCommonProcessingFile );
+ CompleteSelf();
+ }
+
+ return continueProcessing;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformAsynchronousCancellation()
+ {
+ switch( State() )
+ {
+ case EStateCommonProcessingFile:
+ // Asynchronous request issued to ADI.
+ Driver().DrvADI().ADIAsynchronousCancel();
+ break;
+
+ case EStateCommonKickOff:
+ case EStateBackupAddIndexRecord:
+ case EStateRestoreResetAttributes:
+ // Other states complete this objects own request status => no action
+ // needed.
+ break;
+
+ default:
+ case EStateCommonIdle:
+ ASSERT( EFalse );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypePublicData );
+ index.StoreL( Driver() );
+
+ Driver().DrvADI().ADIResetResources(EMMCScBkupOperationTypeFullBackup);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::PerformLastRightsRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::PerformLastRightsRestoreL( TBool /*aPartial*/ )
+ {
+ Driver().DrvADI().ADIResetResources(EMMCScBkupOperationTypeFullRestore);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::CompressingAndWritingFileL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::CompressingAndWritingFileL()
+ {
+ const CMMCScBkupFileListCollection& fileList = Driver().DrvFileList();
+ const TInt count = fileList.Count();
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ const CMMCScBkupFileInfo& fileInfo = fileList.Entry(iIndexValueCurrent);
+
+ __LOG1("CMMCScBkupStateArchiveOpPublicDataFiles::CompressingAndWritingFileL() - BACKUP - compressing file: %S", &fileInfo.FileName());
+
+ // Compress the file & externalise it to the archive
+ Driver().DrvADI().ADIWriteFileL( fileInfo.FileName(), iStatus );
+
+ // Indicate the state we are in
+ SetActive();
+ SetState( EStateCommonProcessingFile );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::DecompressingAndWritingFileL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::DecompressingAndWritingFileL()
+ {
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexPublicDataFiles& index = static_cast<CMMCScBkupIndexPublicDataFiles&>( footer.IndexByType( EMMCScBkupOwnerDataTypePublicData ) );
+ const TInt count = index.Count();
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ // Get the entry to restore
+ TMMCScBkupArchiveVector entryInfo;
+ const CMMCScBkupFileInfo& fileInfo = index.At( iIndexValueCurrent, entryInfo );
+
+ __LOG3("CMMCScBkupStateArchiveOpPublicDataFiles::DecompressingAndWritingFileL() - RESTORE - decompressing file: %S, offset: %8d, length: %8d", &fileInfo.FileName(), entryInfo.Offset(), entryInfo.Length());
+
+ // Restore it!
+ Driver().DrvADI().ADIReadFileL( fileInfo.FileName(), entryInfo, iStatus );
+
+ // Indicate the state we are in
+ SetActive();
+ SetState( EStateCommonProcessingFile );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::AddIndexRecordL()
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexPublicDataFiles& index = static_cast<CMMCScBkupIndexPublicDataFiles&>(footer.IndexByType(EMMCScBkupOwnerDataTypePublicData));
+ const CMMCScBkupFileListCollection& fileList = Driver().DrvFileList();
+ const CMMCScBkupFileInfo& fileInfo = fileList.Entry(iIndexValueCurrent);
+
+ // Save the offset of the data owner
+ const TMMCScBkupArchiveVector& info = Driver().DrvADI().ADICurrentArchiveVectorInfo();
+ index.AddIndexRecordL( info, fileInfo );
+
+ // And update the file info so that we can know how much compressed
+ // data must be read during restore. This allows us to report accurate
+ // progress info. See CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL()
+ // for the point when the public data size is zeroed.
+
+ // First, find the associated data owner.
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( fileInfo.SecureId() );
+
+ __LOG3("CMMCScBkupStateArchiveOpPublicDataFiles::AddIndexRecordL() - offset: %6d, length: %6d, file: %S", info.Offset(), info.Length(), &fileInfo.FileName());
+
+ // Indicate the state we are in
+ SetState( EStateBackupAddIndexRecord );
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpPublicDataFiles::RestoreFileAttributesL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpPublicDataFiles::RestoreFileAttributesL()
+ {
+ RFs& fsSession = Driver().DrvADI().ADIFsSession();
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexPublicDataFiles& index = static_cast<CMMCScBkupIndexPublicDataFiles&>( footer.IndexByType( EMMCScBkupOwnerDataTypePublicData ) );
+
+ // Get the entry who's attributes need restoring
+ TMMCScBkupArchiveVector entryInfo;
+ const CMMCScBkupFileInfo& fileInfo = index.At( iIndexValueCurrent, entryInfo );
+
+ // If file is in Photo Album Thumbnail folder
+ // or file in videocenter folder and its subfolders
+ if ( fileInfo.FileName().MatchF( KMMCScBkupMediaGalleryThumbnailFolder ) != KErrNotFound )
+ {
+ // Get folder path length
+ const TChar backslash('\\');
+ const TInt pathlength = fileInfo.FileName().LocateReverseF( backslash ) + 1;
+
+ // Set hidden attribute for Thumbnail folder.
+ // If folder does not exist, create it
+ fsSession.SetAtt( fileInfo.FileName().Left( pathlength ), KEntryAttHidden, KEntryAttNormal );
+ }
+
+ if ( fileInfo.FileName().MatchF( KMMCScBkupVideoCenterFolder ) != KErrNotFound)
+ {
+ // Get folder path length
+ const TChar backslash('\\');
+ const TInt pathlength = fileInfo.FileName().LocateReverseF( backslash ) + 1;
+
+ // Set hidden attribute for the video center's sub folder.
+ // If foler does not exist, create it
+ fsSession.SetAtt( fileInfo.FileName().Left( pathlength ), KEntryAttHidden, KEntryAttNormal );
+
+ //Manually set the videocenter main folder to be hidden
+ fsSession.SetAtt( KMMCScBkupVideoCenterFolderPath, KEntryAttHidden, KEntryAttNormal );
+ }
+ // Set the original attributes, clear the others
+ const TInt error = fsSession.SetEntry( fileInfo.FileName(),
+ fileInfo.DateTime(),
+ fileInfo.Attributes(),
+ !fileInfo.Attributes() );
+
+ (void) error;
+
+
+ // Indicate the state we are in
+ SetState( EStateRestoreResetAttributes );
+ CompleteSelf();
+ }
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpSystemData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,367 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpSystemData implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateArchiveOpSystemData.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupIndexWithIdentifier.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::CMMCScBkupStateArchiveOpSystemData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpSystemData::CMMCScBkupStateArchiveOpSystemData( MMMCScBkupDriver& aDriver )
+: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 )
+ {
+ __LOG1("CMMCScBkupStateArchiveOpSystemData::CMMCScBkupStateArchiveOpSystemData() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::~CMMCScBkupStateArchiveOpSystemData()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpSystemData::~CMMCScBkupStateArchiveOpSystemData()
+ {
+ Cancel();
+ //
+ delete iBackupTransferObject;
+ delete iRestoreTransferObject;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateArchiveOpSystemData* CMMCScBkupStateArchiveOpSystemData::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateArchiveOpSystemData* self = new(ELeave) CMMCScBkupStateArchiveOpSystemData( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpSystemData::StateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpSystemData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::NextStateBackupId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpSystemData::NextStateBackupId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdArchiveOpJavaData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::NextStateRestoreId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateArchiveOpSystemData::NextStateRestoreId( TBool /*aPartial*/ ) const
+ {
+ return KMMCScBkupStateIdArchiveOpJavaData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformStateInitBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformStateInitBackupL( TBool /*aPartial*/ )
+ {
+ __DEBUG_TESTING_SKIP_BACKUP_SYS_DATA;
+
+ iBackupTransferObject = CMMCScBkupWriteDataTransferRequest< TPackageDataType >::NewL(
+ Driver(),
+ *this,
+ EMMCScBkupOwnerDataTypeSystemData,
+ EPackageTransferDerivedType,
+ ESystemData
+ );
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL( TBool /*aPartial*/ )
+ {
+ __LOG("CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL() - START" );
+ __DEBUG_TESTING_SKIP_RESTORE_SYS_DATA;
+
+ iRestoreTransferObject = CMMCScBkupReadDataTransferRequest< TPackageDataType >::NewL(
+ Driver(),
+ EMMCScBkupOwnerDataTypeSystemData,
+ ESystemData
+ );
+
+ CompleteSelf();
+ __LOG("CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL() - END" );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt count = dataOwners.Count();
+ //
+ while ( ++iIndexValueCurrent < count )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ //
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeSystemData ) == EFalse )
+ {
+ // Request all the system data (on all supported drives) for this
+ // particular data owner
+ __ASSERT_ALWAYS( iBackupTransferObject->IsActive() == EFalse, User::Invariant() );
+ iBackupTransferObject->RequestL( owner,
+ iStatus,
+ Driver().DrvParamsBase().DriveAndOperations() );
+ SetActive();
+ break; // while loop
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeSystemData );
+ CMMCScBkupIndexWithIdentifier< TInt32 >& index = static_cast< CMMCScBkupIndexWithIdentifier< TInt32 >& >( indexBase );
+ const TInt count = index.Count();
+ __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - START - %d data owners...", count );
+ //
+ if ( ++iIndexValueCurrent < count )
+ {
+ __LOG2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - getting system data index record [%03d/%03d]", iIndexValueCurrent + 1, count);
+ const CMMCScBkupIndexEntry< TInt32 >& entry = index.At( iIndexValueCurrent );
+ iSecureId = entry.Identifier();
+
+ __LOG("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - getting sub-entries for index record...");
+ const RArray< TMMCScBkupArchiveDriveAndVector >& subEntries = entry.Entries();
+ __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - got %d sub-entries for index record", subEntries.Count());
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ for(TInt i=0; i<subEntries.Count(); i++)
+ {
+ const TMMCScBkupArchiveDriveAndVector& item = subEntries[i];
+ __LOG4("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - subentry[%2d] = %c:\\ [Offset: %8d, Length: %d] ", i, item.iDrive + 'A', item.iVector.Offset(), item.iVector.Length() );
+ }
+#endif
+
+ // Get the associated data owner
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+
+ __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - trying to supply system data for SID: 0x%08x", entry.Identifier() );
+
+ // The owner in question should be a package type object.
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.OwnerL( entry.Identifier() );
+
+ if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeSystemData ) == EFalse )
+ {
+ // The owner in question should be a package type object.
+ const TSBDerivedType ownersDerivedType = owner.Owner().Identifier().DerivedTypeL();
+ __ASSERT_ALWAYS( ownersDerivedType == EPackageDerivedType || ownersDerivedType == EPackageTransferDerivedType, User::Invariant() );
+
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ const TUid packageUid = MMCScBkupSBEUtils::PackageIdFromGenericL( owner.Owner().Identifier() );
+ __LOG2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - trying to restore SYSTEM DATA for SID: 0x%08x, packageUID: 0x%08x", entry.Identifier(), packageUid.iUid );
+#endif
+
+ // Safety check
+ __ASSERT_ALWAYS( iRestoreTransferObject->IsActive() == EFalse, User::Invariant() );
+
+ // Request all the system data (on all supported drives) for this
+ // particular data owner
+ iRestoreTransferObject->RequestL( owner,
+ iStatus,
+ subEntries );
+ SetActive();
+ }
+ else
+ {
+ CompleteSelf();
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup() - error: %d", aError );
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if ( iIndexValueCurrent < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent );
+ owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeSystemData, ETrue );
+
+ __LOGFILE2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d, SID: 0x%08x - system data skipped for DO", aError, owner.SecureId().iId );
+ }
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError )
+ {
+ (void) aError;
+ __LOGFILE1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError );
+
+ // If system data restore phase returns "not supported", let's treat it as
+ // such an error, that other data types for this data owner are not
+ // allowed to restore either.
+
+ if( aError == KErrNotSupported || aError == KErrAlreadyExists )
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupDataOwnerInfo* owner = NULL;
+ TRAPD( err, owner = &dataOwners.OwnerL( iSecureId ) );
+ if( err == KErrNone && owner )
+ {
+ owner->SetCompletionStatus( EMMCScBkupOwnerDataTypeJavaData, ETrue );
+ owner->SetCompletionStatus( EMMCScBkupOwnerDataTypePublicData, ETrue );
+ owner->SetCompletionStatus( EMMCScBkupOwnerDataTypeSystemData, ETrue );
+ owner->SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, ETrue );
+ owner->SetCompletionStatus( EMMCScBkupOwnerDataTypePassiveData, ETrue );
+
+ __LOGFILE2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d, SID: 0x%08x - all data types skipped for DO", aError, owner->SecureId().iId );
+ }
+ }
+
+ CompleteSelf();
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousCancellation()
+ {
+ if (iBackupTransferObject)
+ {
+ iBackupTransferObject->Cancel();
+ }
+ if (iRestoreTransferObject)
+ {
+ iRestoreTransferObject->Cancel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeSystemData );
+ index.StoreL( Driver() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::PerformLastRightsRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::PerformLastRightsRestoreL( TBool /*aPartial*/ )
+ {
+ Driver().DrvSecureBackupClient().AllSystemFilesRestored();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateArchiveOpSystemData::AddIndexRecordL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateArchiveOpSystemData::AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive )
+ {
+ CMMCScBkupIndexBase& indexBase = aFooter.IndexByType( EMMCScBkupOwnerDataTypeSystemData );
+ CMMCScBkupIndexWithIdentifier< TInt32 >& index = static_cast< CMMCScBkupIndexWithIdentifier< TInt32 >& >( indexBase );
+ index.AddIndexRecordL( aInfo, aDrive, aDataOwner.SecureId().iId );
+ }
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateFactory.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,332 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateFactory implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateFactory.h"
+
+// System includes
+#include <e32err.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupStateGetDataOwners.h"
+#include "CMMCScBkupStateSetPhoneMode.h"
+#include "CMMCScBkupStateRequestSizeOfBackupData.h"
+#include "CMMCScBkupStateRequestListOfPublicFiles.h"
+#include "CMMCScBkupStateGetDataOwnerStatuses.h"
+#include "CMMCScBkupStateNotifyAllSnapshotsSupplied.h"
+//
+#include "CMMCScBkupStateArchiveOpSystemData.h"
+#include "CMMCScBkupStateArchiveOpDataOwners.h"
+#include "CMMCScBkupStateArchiveOpPublicDataFiles.h"
+#include "CMMCScBkupStateArchiveOpActiveData.h"
+#include "CMMCScBkupStateArchiveOpJavaData.h"
+#include "CMMCScBkupStateArchiveOpPassiveData.h"
+#include "CMMCScBkupStateArchiveOpArchiveHeader.h"
+#include "CMMCScBkupStateArchiveOpArchiveFooter.h"
+#include "CMMCScBkupStateValidateDiskSpace.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactory::CMMCScBkupStateFactory()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateFactory::CMMCScBkupStateFactory()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactory::FactoryByOperationTypeLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateFactory* CMMCScBkupStateFactory::FactoryByOperationTypeLC( TMMCScBkupOperationType aOperationType )
+ {
+ CMMCScBkupStateFactory* factory = NULL;
+ //
+ switch(aOperationType)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ factory = CMMCScBkupStateFactoryBackup::NewL();
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ factory = CMMCScBkupStateFactoryRestore::NewL();
+ break;
+ case EMMCScBkupOperationTypePartialBackup:
+ case EMMCScBkupOperationTypePartialRestore:
+ default:
+ __ASSERT_ALWAYS(EFalse, User::Invariant());
+ break;
+ }
+ //
+ CleanupStack::PushL(factory);
+ return factory;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactoryBackup::CMMCScBkupStateFactoryBackup()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateFactoryBackup::CMMCScBkupStateFactoryBackup()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactoryBackup::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateFactoryBackup* CMMCScBkupStateFactoryBackup::NewL()
+ {
+ CMMCScBkupStateFactoryBackup* self = new(ELeave) CMMCScBkupStateFactoryBackup();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactoryBackup::GetStateLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupState* CMMCScBkupStateFactoryBackup::GetStateLC( TMMCScBkupStateId aRequiredType, MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupState* state = NULL;
+ //
+ switch(aRequiredType.iUid)
+ {
+ case KMMCScBkupStateIdValueArchiveOpArchiveHeader:
+ state = CMMCScBkupStateArchiveOpArchiveHeader::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueGetDataOwners:
+ state = CMMCScBkupStateGetDataOwners::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueSetPhoneMode:
+ state = CMMCScBkupStateSetPhoneMode::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueNotifyAllSnapshotsSupplied:
+ state = CMMCScBkupStateNotifyAllSnapshotsSupplied::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueRequestSizeOfBackupData:
+ state = CMMCScBkupStateRequestSizeOfBackupData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpDataOwners:
+ state = CMMCScBkupStateArchiveOpDataOwners::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueRequestListOfPublicFiles:
+ state = CMMCScBkupStateRequestListOfPublicFiles::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpPublicDataFiles:
+ state = CMMCScBkupStateArchiveOpPublicDataFiles::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpSystemData:
+ state = CMMCScBkupStateArchiveOpSystemData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpJavaData:
+ state = CMMCScBkupStateArchiveOpJavaData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueGetDataOwnerStatuses:
+ state = CMMCScBkupStateGetDataOwnerStatuses::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpActiveData:
+ state = CMMCScBkupStateArchiveOpActiveData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpPassiveData:
+ state = CMMCScBkupStateArchiveOpPassiveData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpArchiveFooter:
+ state = CMMCScBkupStateArchiveOpArchiveFooter::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueValidateDiskSpace:
+ state = CMMCScBkupStateValidateDiskSpace::NewL( aDriver );
+ break;
+ default:
+ case KMMCScBkupStateIdValueSupplyDataSnapshots:
+ ASSERT( EFalse );
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ CleanupStack::PushL(state);
+ return state;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactoryRestore::CMMCScBkupStateFactoryRestore()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateFactoryRestore::CMMCScBkupStateFactoryRestore()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactoryRestore::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateFactoryRestore* CMMCScBkupStateFactoryRestore::NewL()
+ {
+ CMMCScBkupStateFactoryRestore* self = new(ELeave) CMMCScBkupStateFactoryRestore();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateFactoryRestore::GetStateLC()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupState* CMMCScBkupStateFactoryRestore::GetStateLC( TMMCScBkupStateId aRequiredType, MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupState* state = NULL;
+ //
+ switch(aRequiredType.iUid)
+ {
+ case KMMCScBkupStateIdValueArchiveOpArchiveHeader:
+ state = CMMCScBkupStateArchiveOpArchiveHeader::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpArchiveFooter:
+ state = CMMCScBkupStateArchiveOpArchiveFooter::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpDataOwners:
+ state = CMMCScBkupStateArchiveOpDataOwners::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueSetPhoneMode:
+ state = CMMCScBkupStateSetPhoneMode::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpSystemData:
+ state = CMMCScBkupStateArchiveOpSystemData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueNotifyAllSnapshotsSupplied:
+ state = CMMCScBkupStateNotifyAllSnapshotsSupplied::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpJavaData:
+ state = CMMCScBkupStateArchiveOpJavaData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpPassiveData:
+ state = CMMCScBkupStateArchiveOpPassiveData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueGetDataOwnerStatuses:
+ state = CMMCScBkupStateGetDataOwnerStatuses::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpActiveData:
+ state = CMMCScBkupStateArchiveOpActiveData::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueArchiveOpPublicDataFiles:
+ state = CMMCScBkupStateArchiveOpPublicDataFiles::NewL( aDriver );
+ break;
+ case KMMCScBkupStateIdValueValidateDiskSpace:
+ state = CMMCScBkupStateValidateDiskSpace::NewL( aDriver );
+ break;
+ default:
+ ASSERT( EFalse );
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ CleanupStack::PushL(state);
+ return state;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateGetDataOwnerStatuses.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateGetDataOwnerStatuses implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateGetDataOwnerStatuses.h"
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::CMMCScBkupStateGetDataOwnerStatuses()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateGetDataOwnerStatuses::CMMCScBkupStateGetDataOwnerStatuses( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateGetDataOwnerStatuses::CMMCScBkupStateGetDataOwnerStatuses() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::~CMMCScBkupStateGetDataOwnerStatuses()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateGetDataOwnerStatuses::~CMMCScBkupStateGetDataOwnerStatuses()
+ {
+ Cancel();
+ //
+ iStatusArray.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateGetDataOwnerStatuses* CMMCScBkupStateGetDataOwnerStatuses::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateGetDataOwnerStatuses* self = new(ELeave) CMMCScBkupStateGetDataOwnerStatuses( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateGetDataOwnerStatuses::StateId() const
+ {
+ return KMMCScBkupStateIdGetDataOwnerStatuses;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateGetDataOwnerStatuses::NextStateId() const
+ {
+ return KMMCScBkupStateIdArchiveOpActiveData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateGetDataOwnerStatuses::PerformStateInitL()
+ {
+ SetState( EPrearingQuery );
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateGetDataOwnerStatuses::PerformAsynchronousStateStepL()
+ {
+ switch( State() )
+ {
+ case EPrearingQuery:
+ PrepareQueryL();
+ break;
+ case EGettingStatus:
+ Driver().DrvSecureBackupClient().SIDStatusL( iStatusArray );
+ SetState( EProcessingResults );
+ CompleteSelf();
+ break;
+ case EProcessingResults:
+ ProcessStatusResultsL();
+ break;
+ default:
+ ASSERT( EFalse );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::PrepareQueryL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateGetDataOwnerStatuses::PrepareQueryL()
+ {
+ const TDataOwnerStatus KMMCScBkupDefaultOwnerStatus = EUnset;
+ const TInt KMMCScBkupDefaultOwnerStatusError = 0;
+
+ // Build an array of all of the active data owners that we require
+ // the statuses for.
+ CMMCScBkupDataOwnerCollection& ownerCollection = Driver().DrvDataOwners();
+ const TInt count = ownerCollection.Count();
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupDataOwnerInfo& owner = ownerCollection.Owner(i);
+ //
+ if (owner.Owner().CommonSettings() & EActiveBUR)
+ {
+ const TDataOwnerAndStatus ownerStatus(
+ owner.SecureId(),
+ KMMCScBkupDefaultOwnerStatus,
+ KMMCScBkupDefaultOwnerStatusError);
+ iStatusArray.AppendL( ownerStatus );
+ __LOG1("CMMCScBkupStateGetDataOwnerStatuses::PrepareQueryL() - DO 0x%08x *is* active", owner.SecureId().iId );
+ }
+ else
+ {
+ __LOG1("CMMCScBkupStateGetDataOwnerStatuses::PrepareQueryL() - DO 0x%08x is not active", owner.SecureId().iId );
+ }
+ }
+
+ SetState( EGettingStatus );
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwnerStatuses::ProcessStatusResultsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateGetDataOwnerStatuses::ProcessStatusResultsL()
+ {
+ CMMCScBkupDataOwnerCollection& ownerCollection = Driver().DrvDataOwners();
+ const TInt count = iStatusArray.Count();
+ __LOG1("CMMCScBkupStateGetDataOwnerStatuses::ProcessStatusResultsL() - received %d entries from SBE...", count );
+ for(TInt i=0; i<count; i++)
+ {
+ const TDataOwnerAndStatus& ownerStatus = iStatusArray[i];
+ __LOG4("CMMCScBkupStateGetDataOwnerStatuses::ProcessStatusResultsL() - ownerStatus[%3d] sid: 0x%08x, status: %d, err: %d",
+ i, ownerStatus.iSID.iId, ownerStatus.iStatus, ownerStatus.iDataOwnerError );
+ //
+ CMMCScBkupDataOwnerInfo* owner = NULL;
+ TRAPD(err, owner = &ownerCollection.OwnerL( ownerStatus.iSID ));
+ if (err == KErrNone && owner)
+ {
+ owner->SetStatus( ownerStatus.iStatus );
+ }
+ }
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateGetDataOwners.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateGetDataOwners implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateGetDataOwners.h"
+
+#include <bldvariant.hrh>
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "MMCScBkupSBEUtils.h"
+
+// Constants
+const TInt KMMCScBkupDataOwnerGranularity = 20;
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwners::CMMCScBkupStateGetDataOwners()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateGetDataOwners::CMMCScBkupStateGetDataOwners( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateGetDataOwners::CMMCScBkupStateGetDataOwners() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwners::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateGetDataOwners* CMMCScBkupStateGetDataOwners::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateGetDataOwners* self = new(ELeave) CMMCScBkupStateGetDataOwners( aDriver );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwners::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateGetDataOwners::StateId() const
+ {
+ return KMMCScBkupStateIdGetDataOwners;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwners::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateGetDataOwners::NextStateId() const
+ {
+ // This is the same for backup & restore
+ return KMMCScBkupStateIdSetPhoneMode;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwners::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateGetDataOwners::PerformStateInitL()
+ {
+ // Query asynchronously
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL()
+ {
+ RMMCScBkupPointerArray<CDataOwnerInfo> dataOwners(KMMCScBkupDataOwnerGranularity);
+ CleanupClosePushL( dataOwners );
+
+ // Get data owner listing from secure backup engine
+ Driver().DrvSecureBackupClient().ListOfDataOwnersL(dataOwners);
+
+ // Inform driver of result
+#ifdef RD_FILE_MANAGER_BACKUP
+ RPointerArray<CMMCScBkupDataOwnerCollection>& dataOwnerLists = Driver().DrvDataOwnersAll();
+ TInt count = dataOwners.Count();
+
+ // Construct an info array to get introduced for every category
+ for(TInt i = count-1; i >= 0; i--)
+ {
+ // Ownership is immediately transferred to the backup owner info object
+ // so we should remove it from the array prior to passing into NewLC
+ conn::CDataOwnerInfo* sbDataOwner = dataOwners[i];
+
+ dataOwners.Remove( i ); // Ensures it won't be deleted twice
+
+ const TSBDerivedType type = sbDataOwner->Identifier().DerivedTypeL();
+ if ( type == EJavaDerivedType || type == EJavaTransferDerivedType )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( sbDataOwner->Identifier() );
+ __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Assigning java owner with hash %S for categories",
+ hash );
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Assigning data owner 0x%08x for categories",
+ MMCScBkupSBEUtils::SecureIdFromGenericL( sbDataOwner->Identifier() ).iId );
+ }
+
+ // We have to create copy of original data owner for each category, so we have to externalize it
+ RPointerArray<CDataOwnerInfo> sbDataOwnerCopies(dataOwnerLists.Count());
+ CleanupClosePushL( sbDataOwnerCopies );
+ HBufC8* dataOwner = sbDataOwner->ExternaliseL();
+ CleanupStack::PushL( dataOwner );
+ // Delete original data owner instance
+ delete sbDataOwner;
+
+ // Create copies for each category (even if they do not eventually end up to those lists)
+ for(TInt j = 0; j < dataOwnerLists.Count(); j++)
+ {
+ conn::CDataOwnerInfo* sbDataOwnerCopy = conn::CDataOwnerInfo::NewL(*dataOwner);
+ CleanupStack::PushL( sbDataOwnerCopy );
+ sbDataOwnerCopies.AppendL(sbDataOwnerCopy);
+ CleanupStack::Pop( sbDataOwnerCopy );
+ }
+ CleanupStack::PopAndDestroy( dataOwner );
+
+ // Loop through all lists and assign copied data owners there
+ for(TInt j = 0; j < dataOwnerLists.Count(); j++)
+ {
+ // Again we have to create instances for each category,
+ // because each has to have own copy of data owner
+ CMMCScBkupDataOwnerInfo* info = CMMCScBkupDataOwnerInfo::NewLC( sbDataOwnerCopies[j] );
+
+ if(dataOwnerLists[j]->AssignL( *info ))
+ {
+ CleanupStack::Pop( info );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( info );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( &sbDataOwnerCopies );
+ }
+
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ __LOG("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Data owners per categories:");
+
+ for(TInt i = 0; i < dataOwnerLists.Count(); i++)
+ {
+ __LOG2("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Category 0x%x contains %d data owners",
+ dataOwnerLists[i]->Category().iFlags, dataOwnerLists[i]->Count() );
+
+ for(TInt j = 0; j < dataOwnerLists[i]->Count(); j++)
+ {
+ CMMCScBkupDataOwnerInfo* entry = &dataOwnerLists[i]->Owner(j);
+
+ const TSBDerivedType type = entry->Owner().Identifier().DerivedTypeL();
+ if ( type == EJavaDerivedType || type == EJavaTransferDerivedType )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( entry->Owner().Identifier() );
+ __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - java data owner with hash %S",
+ hash );
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - data owner 0x%08x",
+ MMCScBkupSBEUtils::SecureIdFromGenericL( entry->Owner().Identifier() ).iId );
+ }
+ }
+ }
+#endif
+
+#else // RD_FILE_MANAGER_BACKUP
+ Driver().DrvDataOwners().AssignL( dataOwners );
+#endif // RD_FILE_MANAGER_BACKUP
+
+ CleanupStack::PopAndDestroy( &dataOwners );
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateNotifyAllSnapshotsSupplied.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateNotifyAllSnapshotsSupplied implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateNotifyAllSnapshotsSupplied.h"
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateNotifyAllSnapshotsSupplied::CMMCScBkupStateNotifyAllSnapshotsSupplied()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateNotifyAllSnapshotsSupplied::CMMCScBkupStateNotifyAllSnapshotsSupplied( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateNotifyAllSnapshotsSupplied::CMMCScBkupStateNotifyAllSnapshotsSupplied() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateNotifyAllSnapshotsSupplied::NewL()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateNotifyAllSnapshotsSupplied* CMMCScBkupStateNotifyAllSnapshotsSupplied::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateNotifyAllSnapshotsSupplied* self = new(ELeave) CMMCScBkupStateNotifyAllSnapshotsSupplied( aDriver);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateNotifyAllSnapshotsSupplied::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateNotifyAllSnapshotsSupplied::StateId() const
+ {
+ return KMMCScBkupStateIdNotifyAllSnapshotsSupplied;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateNotifyAllSnapshotsSupplied::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateNotifyAllSnapshotsSupplied::NextStateId() const
+ {
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdRequestSizeOfBackupData;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ nextState = KMMCScBkupStateIdRequestSizeOfBackupData;
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ nextState = KMMCScBkupStateIdArchiveOpSystemData;
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateNotifyAllSnapshotsSupplied::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateNotifyAllSnapshotsSupplied::PerformStateInitL()
+ {
+ Driver().DrvSecureBackupClient().AllSnapshotsSuppliedL();
+ }
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateOpAware.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,275 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateOpAware implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateOpAware.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::CMMCScBkupStateOpAware()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateOpAware::CMMCScBkupStateOpAware( MMMCScBkupDriver& aDriver, TInt aPriority )
+: CMMCScBkupState( aDriver, aPriority )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateOpAware::NextStateId() const
+ {
+ TMMCScBkupStateId state = KMMCScBkupStateIdOperationComplete;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ state = NextStateBackupId( type == EMMCScBkupOperationTypePartialBackup );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ state = NextStateRestoreId( type == EMMCScBkupOperationTypePartialRestore );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return state;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousStateStepBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousStateStepRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousCancellationBackup()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformAsynchronousCancellationBackup( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousCancellationRestore()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformAsynchronousCancellationRestore( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformLastRightsBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformLastRightsBackupL( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformLastRightsRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformLastRightsRestoreL( TBool /*aPartial*/ )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousErrorCleanupBackup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateOpAware::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt /*aError*/ )
+ {
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousErrorCleanupRestore()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateOpAware::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt /*aError*/ )
+ {
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformStateInitL()
+ {
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ PerformStateInitBackupL( type == EMMCScBkupOperationTypePartialBackup );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ PerformStateInitRestoreL( type == EMMCScBkupOperationTypePartialRestore );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformAsynchronousStateStepL()
+ {
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ PerformAsynchronousStateStepBackupL( type == EMMCScBkupOperationTypePartialBackup );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ PerformAsynchronousStateStepRestoreL( type == EMMCScBkupOperationTypePartialRestore );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformAsynchronousCancellation()
+ {
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ PerformAsynchronousCancellationBackup( type == EMMCScBkupOperationTypePartialBackup );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ PerformAsynchronousCancellationRestore( type == EMMCScBkupOperationTypePartialRestore );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformLastRightsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateOpAware::PerformLastRightsL()
+ {
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ PerformLastRightsBackupL( type == EMMCScBkupOperationTypePartialBackup );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ PerformLastRightsRestoreL( type == EMMCScBkupOperationTypePartialRestore );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateOpAware::PerformAsynchronousErrorCleanup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateOpAware::PerformAsynchronousErrorCleanup( TInt aError )
+ {
+ TBool handled = EFalse;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ case EMMCScBkupOperationTypePartialBackup:
+ handled = PerformAsynchronousErrorCleanupBackup( type == EMMCScBkupOperationTypePartialBackup, aError );
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ case EMMCScBkupOperationTypePartialRestore:
+ handled = PerformAsynchronousErrorCleanupRestore( type == EMMCScBkupOperationTypePartialRestore, aError );
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return handled;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateRequestListOfPublicFiles.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,447 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateRequestListOfPublicFiles implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateRequestListOfPublicFiles.h"
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "RMMCScBkupProgressSizer.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "CMMCScBkupFileListCollection.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::CMMCScBkupStateRequestListOfPublicFiles()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestListOfPublicFiles::CMMCScBkupStateRequestListOfPublicFiles( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateRequestListOfPublicFiles::CMMCScBkupStateRequestListOfPublicFiles() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::~CMMCScBkupStateRequestListOfPublicFiles()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestListOfPublicFiles::~CMMCScBkupStateRequestListOfPublicFiles()
+ {
+ Cancel();
+ //
+ delete iRequestObject;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestListOfPublicFiles::ConstructL()
+ {
+ iRequestObject = CMMCScBkupStateRequestSpecificPublicFileInfo::NewL(Driver());
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestListOfPublicFiles* CMMCScBkupStateRequestListOfPublicFiles::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateRequestListOfPublicFiles* self = new(ELeave) CMMCScBkupStateRequestListOfPublicFiles( aDriver );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateRequestListOfPublicFiles::StateId() const
+ {
+ return KMMCScBkupStateIdRequestListOfPublicFiles;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateRequestListOfPublicFiles::NextStateId() const
+ {
+ return KMMCScBkupStateIdValidateDiskSpace;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestListOfPublicFiles::PerformStateInitL()
+ {
+ // Set to -1 so that the first time RunL is called, we start with
+ // the data owner at index 0.
+ iCurrentDataOwnerIndex = -1;
+ CompleteSelf(KErrNone);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousStateStepL()
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if (++iCurrentDataOwnerIndex < dataOwners.Count())
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner(iCurrentDataOwnerIndex);
+
+ const TBool hasPublicFiles = (owner.Owner().PassiveSettings() & EHasPublicFiles);
+ if (hasPublicFiles)
+ {
+ // Request all the public files (on all supported drives) for this
+ // particular data owner
+ __ASSERT_ALWAYS(iRequestObject->IsActive() == EFalse, User::Invariant());
+ //
+ iRequestObject->RequestL(owner, iStatus);
+ SetActive();
+ }
+ else
+ {
+ // Try next data owner
+ CompleteSelf();
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup(TInt aError)
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup() - **** - error: %d", aError );
+
+ // Cancel requester. Its probably already inactive, but just in case...
+ PerformAsynchronousCancellation();
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if ( iCurrentDataOwnerIndex < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iCurrentDataOwnerIndex );
+ (void) owner;
+ __LOGFILE2("CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup() - **** - error: %d, SID: 0x%08x - PUBLIC data skipped for DO", aError, owner.SecureId().iId );
+
+ // Ensures that asynchronous state step is called again..
+ CompleteSelf();
+ }
+
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousCancellation()
+ {
+ if ( iRequestObject )
+ {
+ iRequestObject->Cancel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL()
+ {
+ // Now we can calculate the progress
+ TInt64 totalProgressAmount = 0;
+
+ // Calculate the total progress required for the entire backup operation
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt count = dataOwners.Count();
+ //
+ RMMCScBkupProgressSizer sizer( Driver().DrvParamsBase().DriveAndOperations() );
+ for(TInt i=0; i<count; i++)
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( i );
+ //
+ totalProgressAmount += sizer.BackupTotalProgressValueL( owner );
+ }
+
+ // Check whether all categories have been processed and either store current
+ // progress information in driver or inform progress handler about cumulative progress.
+ // If size is getting beyond file system limitation (2GB), leave with KErrxxx.
+ if(Driver().DrvLastCategory())
+ {
+ __LOG2("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - report progress understood (%Ld + %Ld)",
+ totalProgressAmount, Driver().DrvTotalProgress());
+
+ Driver().DrvStoreTotalProgress( totalProgressAmount );
+
+ if( Driver().DrvTotalProgress() > KMaxTInt )
+ {
+ __LOG1("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - leaving with KErrNotSupported due amount of data (%Ld)",
+ Driver().DrvTotalProgress());
+ Driver().DrvProgressHandler().MMCScBkupStartBackuping( EFalse );
+ User::Leave( KErrNotSupported );
+ }
+ else
+ {
+ Driver().DrvProgressHandler().MMCScBkupHandleProgressDomainUnderstood( Driver().DrvTotalProgress() );
+ }
+ }
+ else
+ {
+ __LOG2("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - adding progress amount %Ld to existing %Ld)",
+ totalProgressAmount, Driver().DrvTotalProgress());
+
+ if( (totalProgressAmount + Driver().DrvTotalProgress()) > KMaxTInt )
+ {
+ __LOG1("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - leaving due amount of data (%Ld)",
+ totalProgressAmount + Driver().DrvTotalProgress());
+ User::Leave(KErrNotSupported);
+ }
+ else
+ {
+ Driver().DrvStoreTotalProgress( totalProgressAmount );
+ }
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSpecificPublicFileInfo::CMMCScBkupStateRequestSpecificPublicFileInfo()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSpecificPublicFileInfo::CMMCScBkupStateRequestSpecificPublicFileInfo( MMMCScBkupDriver& aDriver )
+: CMMCScBkupDriveSpecificRequest( aDriver.DrvParamsBase().DriveAndOperations(), EMMCScBkupOwnerDataTypePublicData ), iDriver(aDriver)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSpecificPublicFileInfo::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSpecificPublicFileInfo* CMMCScBkupStateRequestSpecificPublicFileInfo::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateRequestSpecificPublicFileInfo* self = new (ELeave) CMMCScBkupStateRequestSpecificPublicFileInfo(aDriver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSpecificPublicFileInfo::RequestL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSpecificPublicFileInfo::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver )
+ {
+ iOwner = &aOwner;
+ CMMCScBkupDriveSpecificRequest::RequestL( aObserver );
+
+ // Start the asynchronous request.
+ CompleteSelf(KErrNone);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSpecificPublicFileInfo::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSpecificPublicFileInfo::RunL()
+ {
+ __LOG1("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - START - iStatus: %d", iStatus.Int());
+ User::LeaveIfError(iStatus.Int());
+ //
+ CDataOwnerInfo& owner = iOwner->Owner();
+ const TDriveList& ownerDrives = owner.DriveList();
+ TDriveNumber drive = EDriveA;
+ const TBool driveAvailable = NextValidDrive(drive, ownerDrives);
+ const TSecureId secureId = iOwner->SecureId();
+
+ __LOG3("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - secureId: 0x%08x, driveAvailable: %d, drive: %c", secureId.iId, driveAvailable, drive + 'A');
+
+ if (driveAvailable)
+ {
+ // This drive needs to be scanned...
+ TInt err( KErrNone );
+ RFileArray files;
+ CleanupClosePushL(files);
+
+ // Get a copy of the generic data type for which we are
+ // requesting file listings...
+ CSBGenericDataType* genericDataType = CSBSecureId::NewL( secureId );
+ CleanupStack::PushL( genericDataType );
+ TRAP( err, Driver().DrvSecureBackupClient().PublicFileListL( drive, *genericDataType, files ) );
+ if( err != KErrNone && err != KErrNotFound )
+ {
+ User::Leave( err );
+ }
+ CleanupStack::PopAndDestroy( genericDataType );
+ // Additionally we need to request list of public files registered for packages.
+ if( MMCScBkupSBEUtils::HasSystemDataL( owner ) )
+ {
+ RFileArray pkgFiles;
+ CleanupClosePushL( pkgFiles );
+ __LOG2("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - have %d files before package listing for DO, err %d", files.Count(), err);
+ TRAP( err, Driver().DrvSecureBackupClient().PublicFileListL( drive, owner.Identifier(), pkgFiles ) );
+ __LOG2("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - have %d package files for DO, err %d", files.Count(), err);
+ const TInt pkgCount = pkgFiles.Count();
+ for(TInt i = 0; i < pkgCount; i++)
+ {
+ files.AppendL( pkgFiles[i] );
+ }
+ CleanupStack::PopAndDestroy( &pkgFiles );
+ }
+
+ // Add to the file list
+ __LOG1("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - have %d files for DO", files.Count());
+ if (files.Count())
+ {
+
+ // We want to be told by the public file collection exactly which files
+ // it added... We need to do this in order to report progress as accurately
+ // as possible during the backup operation.
+ RArray< const CMMCScBkupFileInfo* > addedItems;
+ CleanupClosePushL(addedItems);
+
+ // Add them to the public data file collection
+ Driver().DrvFileList().AppendL( files, addedItems, secureId );
+
+ // For each identified file, update the data owner with the size of public data
+ const TInt count = addedItems.Count();
+ for(TInt i=0; i<count; i++)
+ {
+ const CMMCScBkupFileInfo& file = *addedItems[i];
+ const TInt size = file.Size();
+ //
+ __LOG3("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - file[%04d] = %S, size: %d", i, &file.FileName(), size);
+ iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypePublicData, drive, size );
+ }
+ //
+ CleanupStack::PopAndDestroy( &addedItems );
+ }
+ //
+ CleanupStack::PopAndDestroy( &files );
+
+ // Complete ourself to try the next drive
+ CompleteSelf( KErrNone );
+ }
+ else
+ {
+ CompleteObserverRequest( KErrNone );
+ }
+
+ __LOG("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSpecificPublicFileInfo::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSpecificPublicFileInfo::DoCancel()
+ {
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateRequestSizeOfBackupData.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,515 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateRequestSizeOfBackupData implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateRequestSizeOfBackupData.h"
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupSBEUtils.h"
+#include "TMMCScBkupOwnerDataType.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::CMMCScBkupStateRequestSizeOfBackupData()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSizeOfBackupData::CMMCScBkupStateRequestSizeOfBackupData( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateRequestSizeOfBackupData::CMMCScBkupStateRequestSizeOfBackupData() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::~CMMCScBkupStateRequestSizeOfBackupData()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSizeOfBackupData::~CMMCScBkupStateRequestSizeOfBackupData()
+ {
+ Cancel();
+ //
+ delete iRequestObject;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfBackupData::ConstructL()
+ {
+ iRequestObject = CMMCScBkupStateRequestSizeOfDataOwner::NewL( Driver() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSizeOfBackupData* CMMCScBkupStateRequestSizeOfBackupData::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateRequestSizeOfBackupData* self = new(ELeave) CMMCScBkupStateRequestSizeOfBackupData( aDriver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateRequestSizeOfBackupData::StateId() const
+ {
+ return KMMCScBkupStateIdRequestSizeOfBackupData;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateRequestSizeOfBackupData::NextStateId() const
+ {
+ return KMMCScBkupStateIdRequestListOfPublicFiles;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfBackupData::PerformStateInitL()
+ {
+ // Set to -1 so that the first time RunL is called, we start with
+ // the data owner at index 0.
+ iCurrentDataOwnerIndex = -1;
+ CompleteSelf(KErrNone);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousStateStepL()
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ const TInt count = dataOwners.Count();
+ //
+ if ( ++iCurrentDataOwnerIndex < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner(iCurrentDataOwnerIndex);
+
+ // Request all the public files (on all supported drives) for this
+ // particular data owner
+ __ASSERT_ALWAYS(iRequestObject->IsActive() == EFalse, User::Invariant());
+ //
+ __LOG3("CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousStateStepL() - START - owner[%3d/%3d], sid: 0x%08x", iCurrentDataOwnerIndex, count, owner.SecureId().iId);
+ iRequestObject->RequestL(owner, iStatus);
+ SetActive();
+ }
+ else
+ {
+ __LOG("CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousStateStepL() - END");
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousErrorCleanup()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousErrorCleanup( TInt aError )
+ {
+ (void) aError;
+ __LOG1("CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousErrorCleanup() - **** - error: %d", aError );
+ TBool continueProcessing = ETrue;
+
+ // Cancel requester. Its probably already inactive, but just in case...
+ PerformAsynchronousCancellation();
+
+ // Reset state and move to next item. Treat the current (badly behaving) item
+ // as completed/processed.
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ if ( iCurrentDataOwnerIndex < dataOwners.Count() )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iCurrentDataOwnerIndex );
+
+ (void) owner;
+ __LOGFILE2("CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousErrorCleanup() - **** - error: %d, SID: 0x%08x - SIZE OF DATA skipped for DO", aError, owner.SecureId().iId );
+
+ // Ensures that asynchronous state step is called again..
+ CompleteSelf();
+ }
+ else
+ {
+ continueProcessing = EFalse;
+ }
+ //
+ __LOG1("CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousErrorCleanup() - END - continueProcessing: %d", continueProcessing );
+ return continueProcessing;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousCancellation()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfBackupData::PerformAsynchronousCancellation()
+ {
+ if ( iRequestObject )
+ {
+ iRequestObject->Cancel();
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::CMMCScBkupStateRequestSizeOfDataOwner()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSizeOfDataOwner::CMMCScBkupStateRequestSizeOfDataOwner( MMMCScBkupDriver& aDriver )
+: CMMCScBkupDriveSpecificRequest( aDriver.DrvParamsBase().DriveAndOperations(), EMMCScBkupOwnerDataTypeAny ), iDriver(aDriver)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateRequestSizeOfDataOwner* CMMCScBkupStateRequestSizeOfDataOwner::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateRequestSizeOfDataOwner* self = new (ELeave) CMMCScBkupStateRequestSizeOfDataOwner(aDriver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::RequestL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfDataOwner::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver )
+ {
+ iOwner = &aOwner;
+ CMMCScBkupDriveSpecificRequest::RequestL( aObserver );
+
+ // Start the asynchronous request.
+ CompleteSelf(KErrNone);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfDataOwner::RunL()
+ {
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::RunL() - START - iStatus: %d, sid: 0x%08x", iStatus.Int(), iOwner->SecureId().iId);
+
+ User::LeaveIfError(iStatus.Int());
+ //
+ TDriveNumber drive = EDriveA;
+ const TDriveList& ownerDrives = iOwner->Owner().DriveList();
+ const TBool driveAvailable = NextValidDrive(drive, ownerDrives);
+ //
+ if (driveAvailable)
+ {
+ CDataOwnerInfo& owner = iOwner->Owner();
+ CSBGenericDataType& identifier = owner.Identifier();
+
+ // Size any active and passive data
+ GetActiveAndPassiveDataSizesL( owner, identifier, drive );
+
+ // Size any system package data
+ GetSystemDataSizesL( owner, identifier, drive );
+
+ // Size any java data
+ GetJavaDataSizesL( owner, identifier, drive );
+
+ // Complete ourself to try the next drive
+ CompleteSelf(KErrNone);
+ __LOG1("CMMCScBkupStateRequestSizeOfDataOwner::RunL() - END - sid: 0x%08x, checking next drive...", iOwner->SecureId().iId);
+ }
+ else
+ {
+ __LOG1("CMMCScBkupStateRequestSizeOfDataOwner::RunL() - END - sid: 0x%08x, last drive scanned => notifying observer", iOwner->SecureId().iId);
+ CompleteObserverRequest(KErrNone);
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateRequestSizeOfDataOwner::DoCancel()
+ {
+ CompleteObserverRequest( KErrCancel );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::GetActiveAndPassiveDataSizesL()
+//
+//
+// ---------------------------------------------------------------------------
+TUint CMMCScBkupStateRequestSizeOfDataOwner::GetActiveAndPassiveDataSizesL( const CDataOwnerInfo& aOwner,
+ CSBGenericDataType& /*aIdentifier*/, TDriveNumber aDrive )
+ {
+ // Passive Data
+ const TBool passiveBURSupported = MMCScBkupSBEUtils::HasPassiveDataL( aOwner );
+ const TBool passiveDataTransferAllowedForDrive = DriveAndOperations().IsDataTypeAllowedToAccessDrive( aDrive, EMMCScBkupOwnerDataTypePassiveData );
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - passiveBURSupported: %d, passiveDataTransferAllowedForDrive: %d", passiveBURSupported, passiveDataTransferAllowedForDrive );
+
+ TUint ret = 0;
+ TUint itemSize = 0;
+ if ( passiveBURSupported && passiveDataTransferAllowedForDrive )
+ {
+ const TSecureId secureId = iOwner->SecureId();
+ const TTransferDataType type = Driver().DrvParamsBase().PassiveTransferType();
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - sid: 0x%08x claims PASSIVE Data... type: %d", iOwner->SecureId().iId, type);
+
+ itemSize = GetSIDSpecificSizeL( secureId, aDrive, type );
+ iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypePassiveData, aDrive, itemSize );
+ ret += itemSize;
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - sid: 0x%08x, passive size: %8d", secureId.iId, itemSize);
+ }
+
+ // Active Data
+ const TBool activeBURSupported = MMCScBkupSBEUtils::HasActiveDataL( aOwner );
+ const TBool activeDataTransferAllowedForDrive = DriveAndOperations().IsDataTypeAllowedToAccessDrive( aDrive, EMMCScBkupOwnerDataTypeActiveData );
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - activeBURSupported: %d, activeDataTransferAllowedForDrive: %d", activeBURSupported, activeDataTransferAllowedForDrive );
+
+ if ( activeBURSupported && activeDataTransferAllowedForDrive )
+ {
+ const TSecureId secureId = iOwner->SecureId();
+ const TTransferDataType type = Driver().DrvParamsBase().ActiveTransferType();
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - sid: 0x%08x claims ACTIVE Data... type: %d", iOwner->SecureId().iId, type);
+
+
+ // Technically, we should wait for an active data owner to become ready before we ask
+ // for its sizing information. If we don't wait, we might receive KErrNotReady back
+ // from our SBE request.
+ //
+ // Currently, the MMC engine doesn't actually make any use of the active data sizing
+ // info, so we trap (and ignore) the error in this situation. In the future, we will
+ // have to change the state machine in order to request the active data statuses
+ // before the sizing can be requested.
+ itemSize = 0;
+ TRAPD(err, GetSIDSpecificSizeL( secureId, aDrive, type ));
+ __LOG3("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - sid: 0x%08x, active size: %8d, fetchError: %d", secureId.iId, itemSize, err);
+
+ if ( err == KErrNone || err == KErrNotReady )
+ {
+ err = KErrNone;
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+
+ iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypeActiveData, aDrive, itemSize );
+ ret += itemSize;
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSizesL() - sid: 0x%08x, active size: %8d", secureId.iId, itemSize);
+ }
+
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSpecificSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+TUint CMMCScBkupStateRequestSizeOfDataOwner::GetSIDSpecificSizeL( TSecureId aSecureID, TDriveNumber aDrive, TTransferDataType aDataType )
+ {
+ CSBSIDTransferType* transferType = CSBSIDTransferType::NewL( aSecureID,
+ aDrive,
+ aDataType
+ );
+ CleanupStack::PushL( transferType );
+ const TUint size = Driver().DrvSecureBackupClient().ExpectedDataSizeL( *transferType );
+ CleanupStack::PopAndDestroy( transferType );
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::GetSystemDataSizesL()
+//
+//
+// ---------------------------------------------------------------------------
+TUint CMMCScBkupStateRequestSizeOfDataOwner::GetSystemDataSizesL( const CDataOwnerInfo& aOwner, CSBGenericDataType& aIdentifier, TDriveNumber aDrive )
+ {
+ TUint size = 0;
+ //
+ const TBool systemBURSupported = MMCScBkupSBEUtils::HasSystemDataL( aOwner );
+ const TBool systemDataTransferAllowedForDrive = DriveAndOperations().IsDataTypeAllowedToAccessDrive( aDrive, EMMCScBkupOwnerDataTypeSystemData );
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetSystemDataSizesL() - systemBURSupported: %d, systemDataTransferAllowedForDrive: %d", systemBURSupported, systemDataTransferAllowedForDrive );
+
+ if ( systemBURSupported && systemDataTransferAllowedForDrive )
+ {
+ __LOG1("CMMCScBkupStateRequestSizeOfDataOwner::GetSystemDataSizesL() - sid: 0x%08x claims SYSTEM Data...", iOwner->SecureId().iId);
+
+ // Again we have to create a temporary in order to actually retrieve the info...
+ CSBPackageId* packageGeneric = static_cast<CSBPackageId*>( MMCScBkupSBEUtils::CopyLC( aIdentifier ) );
+ const TUid packageId = packageGeneric->PackageIdL();
+ //
+ const TPackageDataType type = Driver().DrvParamsBase().PackageTransferType();
+ CSBPackageTransferType* transferType = CSBPackageTransferType::NewL( packageId,
+ aDrive,
+ type
+ );
+ CleanupStack::PushL( transferType );
+ size = Driver().DrvSecureBackupClient().ExpectedDataSizeL( *transferType );
+ __LOG3("CMMCScBkupStateRequestSizeOfDataOwner::GetSystemDataSizesL() - packageId: 0x%08x, sid: 0x%08x, package size: %8d", packageId.iUid, iOwner->SecureId().iId, size);
+ CleanupStack::PopAndDestroy( transferType );
+ //
+ iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypeSystemData, aDrive, size );
+ CleanupStack::PopAndDestroy( packageGeneric );
+ }
+
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::GetJavaDataSizesL()
+//
+//
+// ---------------------------------------------------------------------------
+TUint CMMCScBkupStateRequestSizeOfDataOwner::GetJavaDataSizesL( const CDataOwnerInfo& aOwner, CSBGenericDataType& aIdentifier, TDriveNumber aDrive )
+ {
+ TUint size = 0;
+ //
+ const TBool javaBURSupported = MMCScBkupSBEUtils::HasJavaDataL( aOwner );
+ const TBool javaDataTransferAllowedForDrive = DriveAndOperations().IsDataTypeAllowedToAccessDrive( aDrive, EMMCScBkupOwnerDataTypeJavaData );
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetJavaSizesL() - javaBURSupported: %d, javaDataTransferAllowedForDrive: %d", javaBURSupported, javaDataTransferAllowedForDrive );
+
+ if ( javaBURSupported && javaDataTransferAllowedForDrive )
+ {
+ // Again we have to create a temporary in order to actually retrieve the info...
+ CSBJavaId* packageGeneric = static_cast<CSBJavaId*>(MMCScBkupSBEUtils::CopyLC( aIdentifier ));
+ const TPtrC pHash(packageGeneric->SuiteHashL());
+ __LOG1("CMMCScBkupStateRequestSizeOfDataOwner::GetJavaSizesL() - midlet hash: %S", &pHash );
+
+ const TUint midletSize = GetJavaSpecificSizeL( pHash, aDrive, EJavaMIDlet);
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetJavaSizesL() - EJavaMIDlet, sid: 0x%08x, size: %8d", iOwner->SecureId().iId, midletSize);
+
+ const TUint midletDataSize = GetJavaSpecificSizeL( pHash, aDrive, EJavaMIDletData);
+ __LOG2("CMMCScBkupStateRequestSizeOfDataOwner::GetJavaSizesL() - EJavaMIDletData, sid: 0x%08x, size: %8d", iOwner->SecureId().iId, midletDataSize);
+
+ // We put the midlet itself in the special 'java data' category (the 'system data' equivalent for
+ // java midlets).
+ iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypeJavaData, aDrive, midletSize );
+
+ // We put the midlet's data (e.g. any data files that it created) inside
+ // the 'passive data' bucket.
+ iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypePassiveData, aDrive, midletDataSize );
+
+ // Java abuses the passive data slot. We would've initially set passive data's completion status
+ // to ETrue inside CMMCScBkupDataOwnerInfo::ConstructL() as a result of receiving a Java
+ // transfer type... but we can reset it back to "not yet completed" if the midlet
+ // does indeed have some 'passive data'.
+ iOwner->SetCompletionStatus( EMMCScBkupOwnerDataTypePassiveData, ( midletDataSize == 0 ) );
+
+ CleanupStack::PopAndDestroy( packageGeneric );
+ //
+ size = midletSize + midletDataSize;
+ }
+
+ return size;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateRequestSizeOfDataOwner::GetJavaSpecificSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+TUint CMMCScBkupStateRequestSizeOfDataOwner::GetJavaSpecificSizeL( const TDesC& aHash, TDriveNumber aDrive, TJavaTransferType aDataType )
+ {
+ CSBJavaTransferType* transferType = CSBJavaTransferType::NewL( aHash,
+ aDrive,
+ aDataType
+ );
+ CleanupStack::PushL( transferType );
+ const TUint size = Driver().DrvSecureBackupClient().ExpectedDataSizeL( *transferType );
+ CleanupStack::PopAndDestroy( transferType );
+ return size;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateSetPhoneMode.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupStateSetPhoneMode implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateSetPhoneMode.h"
+
+// System includes
+#include <e32std.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateSetPhoneMode::CMMCScBkupStateSetPhoneMode()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateSetPhoneMode::CMMCScBkupStateSetPhoneMode( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver )
+ {
+ __LOG1("CMMCScBkupStateSetPhoneMode::CMMCScBkupStateSetPhoneMode() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateSetPhoneMode::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateSetPhoneMode* CMMCScBkupStateSetPhoneMode::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateSetPhoneMode* self = new(ELeave) CMMCScBkupStateSetPhoneMode( aDriver);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateSetPhoneMode::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateSetPhoneMode::StateId() const
+ {
+ return KMMCScBkupStateIdSetPhoneMode;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateSetPhoneMode::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateSetPhoneMode::NextStateId() const
+ {
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdNotifyAllSnapshotsSupplied;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ nextState = KMMCScBkupStateIdNotifyAllSnapshotsSupplied;
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ nextState = KMMCScBkupStateIdArchiveOpSystemData;
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateSetPhoneMode::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateSetPhoneMode::PerformStateInitL()
+ {
+ __LOG("CMMCScBkupStateSetPhoneMode::PerformStateInitL()" );
+ //
+ const CMMCScBkupOpParamsBase& params = Driver().DrvParamsBase();
+ //
+ Driver().DrvSecureBackupClient().SetBURModeL( params.DriveAndOperations().DriveList(),
+ params.PartType(),
+ params.IncrementType(),
+ iStatus );
+ SetActive();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateSetPhoneMode::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateSetPhoneMode::PerformAsynchronousStateStepL()
+ {
+ __LOG("CMMCScBkupStateSetPhoneMode::PerformAsynchronousStateStepL()" );
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupStateValidateDiskSpace.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2005-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: CMMCScBkupStateValidateDiskSpace implementation
+*
+*
+*/
+
+#include "CMMCScBkupStateValidateDiskSpace.h"
+
+// System includes
+#include <e32std.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupFileInfo.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupArchiveHeader.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "RMMCScBkupProgressSizer.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "CMMCScBkupFileListCollection.h"
+#include "CMMCScBkupDataOwnerCollection.h"
+#include "CMMCScBkupIndexPublicDataFiles.h"
+#include "CMMCScBkupDataStrategies.h"
+#include "MMCScBkupSBEUtils.h"
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::~CMMCScBkupStateValidateDiskSpace()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateValidateDiskSpace::~CMMCScBkupStateValidateDiskSpace()
+ {
+ iDriveSizes.Close();
+ iDriveMaxFileSizes.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::CMMCScBkupStateValidateDiskSpace()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupStateValidateDiskSpace::CMMCScBkupStateValidateDiskSpace( MMMCScBkupDriver& aDriver )
+: CMMCScBkupState( aDriver ), iCumulatedSize(0)
+ {
+ __LOG1("CMMCScBkupStateValidateDiskSpace::CMMCScBkupStateValidateDiskSpace() - 0x%08x", StateId().iUid );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMMCScBkupStateValidateDiskSpace* CMMCScBkupStateValidateDiskSpace::NewL( MMMCScBkupDriver& aDriver )
+ {
+ CMMCScBkupStateValidateDiskSpace* self = new(ELeave) CMMCScBkupStateValidateDiskSpace( aDriver );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::ConstructL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateValidateDiskSpace::ConstructL( )
+ {
+ for( TInt i = EDriveA; i<=EDriveZ; i++ )
+ {
+ const TDriveNumber drive = static_cast< TDriveNumber >( i );
+
+ // Zero-initialize max. file sizing info arrays
+ TMMCScBkupDriveAndSize newEntry( drive, 0 );
+ iDriveSizes.AppendL( newEntry );
+ TMMCScBkupDriveAndSize maxEntry( drive, 0 );
+ iDriveMaxFileSizes.AppendL( maxEntry );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::StateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateValidateDiskSpace::StateId() const
+ {
+ return KMMCScBkupStateIdValidateDiskSpace;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::NextStateId()
+//
+//
+// ---------------------------------------------------------------------------
+TMMCScBkupStateId CMMCScBkupStateValidateDiskSpace::NextStateId() const
+ {
+ TMMCScBkupStateId nextState = KMMCScBkupStateIdOperationComplete;
+ //
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ nextState = KMMCScBkupStateIdArchiveOpPublicDataFiles;
+ break;
+ case EMMCScBkupOperationTypeFullRestore:
+ nextState = KMMCScBkupStateIdSetPhoneMode;
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+ //
+ return nextState;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::PerformStateInitL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateValidateDiskSpace::PerformStateInitL()
+ {
+ CompleteSelf();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::PerformAsynchronousStateStepL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateValidateDiskSpace::PerformAsynchronousStateStepL()
+ {
+ const TMMCScBkupOperationType type = Driver().DrvOperation();
+
+ switch(type)
+ {
+ case EMMCScBkupOperationTypeFullBackup:
+ {
+ ValidateFreeSpaceBeforeBackupL();
+ break;
+ }
+ case EMMCScBkupOperationTypeFullRestore:
+ {
+ ValidateFreeSpaceBeforeRestoreL();
+ break;
+ }
+ default:
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL()
+ {
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ TInt64 uncompressedSize;
+
+ __LOG("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL() - START");
+
+ // Calculate the total progress required for the entire backup operation
+ uncompressedSize = dataOwners.TotalOperationalSizeL();
+ __LOG1("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL() - Total estimated uncompressed size for archive %Ld", uncompressedSize);
+ const TInt ownerCount = dataOwners.Count();
+
+ for( TInt i=0; i<ownerCount; i++ )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( i );
+ // Reset the size of public data to 0. We update this value
+ // with the compressed size during the compression stage. This
+ // is needed in order to create accurate restore information (since
+ // all of the data owner sizing info is written to disk).
+ // owner.ResetOperationalSize( EMMCScBkupOwnerDataTypePublicData );
+ }
+
+ // Let's check do public files fit in target drive
+ TInt driveNumber;
+ TDriveInfo driveInfo;
+ TVolumeInfo volInfo;
+ TInt8 percentFree(100);
+
+ // First get the drive number, where archive resides and then get drive's free space.
+ TInt err = ADI().ADIRawArchiveFile().Drive( driveNumber, driveInfo );
+ if( err == KErrNone)
+ {
+ err = ADI().ADIFsSession().Volume( volInfo, driveNumber );
+ if( err == KErrNone)
+ {
+ iCumulatedSize += uncompressedSize;
+
+ if(Driver().DrvLastCategory())
+ {
+ __LOG3("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL() - Final cumulated size %Ld, free size on drive %c is %Ld",
+ iCumulatedSize, driveNumber + 'A', volInfo.iFree);
+
+ if( iCumulatedSize > volInfo.iFree)
+ {
+ percentFree = TInt( (volInfo.iFree * 100 ) / iCumulatedSize ); // accurate enough, no rounding
+ }
+
+ err = Driver().DrvProgressHandler().MMCScBkupHandleFreeSpace( percentFree );
+ if( err != KErrNone )
+ {
+ // Error indicates backup creation no more allowed
+ Driver().DrvProgressHandler().MMCScBkupStartBackuping( EFalse );
+ User::Leave( err );
+ }
+ else
+ {
+ Driver().DrvProgressHandler().MMCScBkupStartBackuping( ETrue );
+ }
+ }
+ else
+ {
+ __LOG3("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL() - Cumulated size now %Ld, free size on drive %c is %Ld",
+ iCumulatedSize, driveNumber + 'A', volInfo.iFree);
+ }
+ }
+ else
+ {
+ __LOG1("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL() - Volume info error %d", err);
+ }
+ }
+
+ __LOG("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeBackupL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL()
+ {
+ CMMCScBkupArchiveFooter& footer = Driver().DrvArchive().Footer();
+ CMMCScBkupIndexPublicDataFiles& index = static_cast<CMMCScBkupIndexPublicDataFiles&>( footer.IndexByType( EMMCScBkupOwnerDataTypePublicData ) );
+ CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
+ CMMCScBkupFileListCollection& fileList = Driver().DrvFileList();
+ TInt indexValueCurrent(0);
+
+ __LOG("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - START");
+
+ const TInt ownerCount = dataOwners.Count();
+
+ // We can only make a direct comparison for public data
+ for( TInt i=0; i<ownerCount; i++ )
+ {
+ CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( i );
+ const CDataOwnerInfo& sbeDataOwner = owner.Owner();
+
+ if ( MMCScBkupSBEUtils::HasPublicDataL( sbeDataOwner ) )
+ {
+ for( TInt i = EDriveA; i<=EDriveZ; i++ )
+ {
+ const TDriveNumber drive = static_cast< TDriveNumber >( i );
+
+ const TInt64 size = owner.OperationalSize( EMMCScBkupOwnerDataTypePublicData, drive );
+ TMMCScBkupDriveAndSize& entry = iDriveSizes[ drive ];
+ entry.SetSize(entry.Size() + size);
+ __LOG4("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - DO: 0x%08x has %Ld bytes for drive %c (total %Ld)",
+ owner.SecureId().iId, size, entry.Drive() + 'A', entry.Size());
+ }
+ }
+ }
+
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ for( TInt i = EDriveA; i<=EDriveZ; i++ )
+ {
+ TMMCScBkupDriveAndSize& entry = iDriveSizes[ i ];
+ __LOG2("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Initially %Ld bytes required on drive %c",
+ entry.Size(), entry.Drive() + 'A');
+ }
+#endif
+
+ const TInt count = index.Count();
+
+ __LOG1("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Public files to compare %d", count);
+
+ // Check needed size by comparing archived public files to files in disk - decrease size if matching file found
+ while( ++indexValueCurrent < count )
+ {
+ // Get the entry to restore
+ TMMCScBkupArchiveVector entryInfo;
+ //const CMMCScBkupFileInfo& fileInfo = index.At( indexValueCurrent, entryInfo );
+ const CMMCScBkupFileInfo& fileInfo = fileList.Entry(indexValueCurrent);
+ const TDriveNumber drive = fileInfo.Drive();
+
+ __LOG2("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Archived file: %S, of size %d", &fileInfo.FileName(), fileInfo.Size());
+
+ // Check file (if any) size in disk
+ RFile64 restoreFile;
+ TInt64 fileSize = 0;
+ TInt error = restoreFile.Open(ADI().ADIFsSession(), fileInfo.FileName(), EFileShareReadersOnly | EFileRead);
+ if(error == KErrNone)
+ {
+ error = restoreFile.Size(fileSize);
+ if(error == KErrNone)
+ {
+ __LOG1("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Found matching file of size %d", fileInfo.Size());
+
+ // Take into account biggest file already on disk, because reserves that much space temporarily
+ if(iDriveMaxFileSizes[ drive ].Size() < fileSize && KMMCScBkupUseTempFile)
+ {
+ TMMCScBkupDriveAndSize& bigFile = iDriveMaxFileSizes[ drive ];
+ bigFile.SetSize(fileSize);
+ }
+ }
+ else
+ {
+ fileSize = 0;
+ __LOG1("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Error % requesting file size", error);
+ }
+
+ restoreFile.Close();
+ }
+
+ TMMCScBkupDriveAndSize& entry = iDriveSizes[ drive ];
+ entry.SetSize(entry.Size() - fileSize);
+
+ __LOG2("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - %Ld bytes required now on drive %c", entry.Size(), entry.Drive() + 'A');
+ }
+
+ __LOG("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - No estimation for private and system files");
+
+ if(Driver().DrvLastCategory())
+ {
+ TVolumeInfo volInfo;
+ TInt spaceCheck(KErrNone);
+
+ // Let user interrupt restore if necessary in future. Currently if any of drives cannot be restored, we interrupt restore.
+ for( TInt i = EDriveA; i<=EDriveZ; i++ )
+ {
+ // Check whether data fits into this drive.
+ const TDriveNumber drive = static_cast< TDriveNumber >( i );
+
+ TInt err = ADI().ADIFsSession().Volume( volInfo, drive );
+ if( err == KErrNone)
+ {
+ // Total compressed size. If this exceeds total size of drive, then restore does not succeed for sure.
+ const TInt64 size = dataOwners.DiskSpaceRequiredForRestore( drive );
+ __LOG3("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - drive %c requires %Ld + %Ld for temporary file",
+ iDriveSizes[ drive ].Drive() + 'A', iDriveSizes[ drive ].Size(), iDriveMaxFileSizes[ drive ].Size());
+
+ if ( (( iDriveSizes[ drive ].Size() + iDriveMaxFileSizes[ drive ].Size() ) > volInfo.iFree ) ||
+ ( size > volInfo.iSize ) )
+ {
+ __LOG2("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Not enough space (%Ld) on drive %c",
+ TInt(volInfo.iFree), iDriveSizes[ drive ].Drive() + 'A');
+ spaceCheck = KErrDiskFull;
+ break;
+ }
+ }
+ }
+
+ User::LeaveIfError(spaceCheck);
+ }
+ else
+ {
+ __LOG("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - Checking next category...");
+ }
+
+ __LOG("CMMCScBkupStateValidateDiskSpace::ValidateFreeSpaceBeforeRestoreL() - END");
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupTransferReadRequest.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,517 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupReadDataTransferRequestBase implementation
+*
+*
+*/
+
+#include "CMMCScBkupTransferReadRequest.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMMCScBkupDriver.h"
+#include "CMMCScBkupArchive.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "MMMCScBkupProgressObserver.h"
+#include <pathinfo.h>
+
+// Constants
+const TBool KMMCScBkupDontUpdateOpSizes = EFalse;
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::CMMCScBkupReadDataTransferRequestBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupReadDataTransferRequestBase::CMMCScBkupReadDataTransferRequestBase(
+ MMMCScBkupDriver& aDriver,
+ TMMCScBkupOwnerDataType aElementType,
+ TInt aChunkSize,
+ TInt aPriority )
+: CMMCScBkupTransferRequestBase( aDriver, aElementType, KMMCScBkupDontUpdateOpSizes, aPriority ),
+ iReadChunkSize( aChunkSize ),
+ iCurrentIndex( -1 )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::~CMMCScBkupReadDataTransferRequestBase()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupReadDataTransferRequestBase::~CMMCScBkupReadDataTransferRequestBase()
+ {
+ delete iTransferType;
+ delete iTemporaryTransferSink;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::RequestL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupReadDataTransferRequestBase::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver, const RArray<TMMCScBkupArchiveDriveAndVector>& aEntries )
+ {
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ if ( ElementType() == EMMCScBkupOwnerDataTypeJavaData )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( aOwner.Owner().Identifier() );
+ __LOG2("CMMCScBkupReadDataTransferRequestBase::RequestL() - START - reading data from SBE for JavaHash: %S, ElementType: %S", hash, &MMCScBkupLogger::DataType( ElementType() ));
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ __LOG2("CMMCScBkupReadDataTransferRequestBase::RequestL() - START - reading data from SBE for DO: 0x%08x, ElementType: %S", aOwner.SecureId().iId, &MMCScBkupLogger::DataType( ElementType() ));
+ }
+#endif
+
+ CMMCScBkupTransferRequestBase::RequestL( aOwner, aObserver );
+ //
+ if ( !iTemporaryTransferSink )
+ {
+ iTemporaryTransferSink = HBufC8::NewL( iReadChunkSize );
+ }
+ //
+ iEntries = &aEntries;
+ iCurrentIndex = -1; // Increased by one in PrepareForNextEntry
+ //
+ TState nextState = EProcessData;
+ const TBool entryAvailable = PrepareForNextEntry();
+ if ( !entryAvailable )
+ {
+ nextState = EFinished;
+ }
+ //
+ SetState( nextState );
+ CompleteSelf();
+ __LOG1("CMMCScBkupReadDataTransferRequestBase::RequestL() - END - nextState: %d", nextState);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::ProcessChunkOfDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupReadDataTransferRequestBase::ProcessChunkOfDataL()
+ {
+ __ASSERT_ALWAYS( iCurrentIndex >= 0, User::Invariant() );
+
+ TBool callAgain = EFalse;
+
+ // Do we need to move to the next entry?
+ TBool entryAvailable = ( iCurrentIndex < iEntries->Count() );
+ if ( entryAvailable )
+ {
+ // At least one more entry left to process.. but have we finished
+ // the current entry? If we've read all the data, then the
+ // answer is yes...
+ const TMMCScBkupArchiveDriveAndVector& entry = (*iEntries)[ iCurrentIndex ];
+ const TInt endOffset = entry.iVector.EndOffset();
+
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ if ( ElementType() == EMMCScBkupOwnerDataTypeJavaData )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( DataOwner().Owner().Identifier() );
+ __LOG6("CMMCScBkupReadDataTransferRequestBase::ProcessChunkOfDataL() - START - JavaHash: %S, ElementType: %S, offset: %8d, length: %8d, endOffset: %8d, drive: %c:", hash, &MMCScBkupLogger::DataType( ElementType() ), entry.iVector.Offset(), entry.iVector.Length(), endOffset, entry.iDrive + 'A' );
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ __LOG6("CMMCScBkupReadDataTransferRequestBase::ProcessChunkOfDataL() - START - DO: 0x%08x, ElementType: %S, offset: %8d, length: %8d, endOffset: %8d, drive: %c:", DataOwner().SecureId().iId, &MMCScBkupLogger::DataType( ElementType() ), entry.iVector.Offset(), entry.iVector.Length(), endOffset, entry.iDrive + 'A' );
+ }
+#endif
+
+ // Check bounds
+ if ( CurrentOffset() < 0 || CurrentOffset() > endOffset )
+ {
+ ASSERT( EFalse );
+ User::Leave( KErrCorrupt );
+ }
+ //
+ if ( iCurrentOffset == endOffset )
+ {
+ // We're done with this entry - move to the next
+ entryAvailable = PrepareForNextEntry();
+ }
+ }
+ //
+ if ( entryAvailable )
+ {
+ // We need to read more archive data in order to transfer this
+ // entry to the SBE
+ callAgain = DoProcessChunkOfDataL();
+ }
+ else
+ {
+ // No more left to process - we're finished!
+ SetState( EFinished );
+ CompleteSelf();
+ }
+ //
+ return callAgain;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::PrepareDataTransferL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupReadDataTransferRequestBase::PrepareDataTransferL()
+ {
+ __ASSERT_ALWAYS(iTransferChunkPointer != NULL, User::Invariant());
+ const CSBGenericDataType& generic = DataOwner().Owner().Identifier();
+
+ // Prepare the transfer type with a virtual function call...
+ CSBGenericTransferType* transferType = PrepareTransferTypeL( generic, CurrentDrive(),
+ DataOwner().Version());
+ delete iTransferType;
+ iTransferType = transferType;
+
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ TInt lengthOfDataReadyForTransfer = 0;
+ if ( iTransferChunkPointer != NULL )
+ {
+ lengthOfDataReadyForTransfer = iTransferChunkPointer->Length();
+ }
+
+ if ( iTransferType->DerivedTypeL() == EJavaTransferDerivedType )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( DataOwner().Owner().Identifier() );
+ __LOG5("CMMCScBkupReadDataTransferRequestBase::PrepareDataTransferL() - supplying %d bytes of data for has: %S, drive: %c, iTransferChunkPointer addr: 0x%08x, iTransferChunkPointer length: %d", lengthOfDataReadyForTransfer, hash, 'A' + CurrentDrive(), iTransferChunkPointer->Ptr(), iTransferChunkPointer->Length() );
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ const TSecureId sid = DataOwner().SecureId();
+ __LOG5("CMMCScBkupReadDataTransferRequestBase::PrepareDataTransferL() - supplying %d bytes of data for sid: 0x%08x, drive: %c, iTransferChunkPointer addr: 0x%08x, iTransferChunkPointer length: %d", lengthOfDataReadyForTransfer, sid.iId, 'A' + CurrentDrive(), iTransferChunkPointer->Ptr(), iTransferChunkPointer->Length() );
+ }
+#endif
+
+ //
+ Driver().DrvSecureBackupClient().SupplyDataL( *iTransferType, iFinishedSupplyingData, iStatus );
+ SetActive();
+
+ // Reset
+ ResetDataTransferCounter();
+ iTransferChunkPointer = NULL; // Address is retrieved from global chunk in DoProcessChunkOfDataL
+
+ __LOG("CMMCScBkupReadDataTransferRequestBase::PrepareDataTransferL() - data transmitted, waiting for request completion...");
+
+ // When the SBE informs us that it has read the data, we'll need to send it the next
+ // chunk.
+ SetState( EProcessData );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::ReadChunkL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupReadDataTransferRequestBase::ReadChunkL( TDes8& aSink, TInt aLength )
+ {
+ const TInt endOffset = CurrentReadInfo().EndOffset();
+ __LOG4("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - START - aLength: %d, endOffset: %d, iCurrentOffset: %d, sinkLength: %d", aLength, endOffset, iCurrentOffset, aSink.Length());
+ //
+ if ( iCurrentOffset >= 0 && iCurrentOffset <= endOffset )
+ {
+ if ( aLength > 0 )
+ {
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = Driver().DrvADI();
+
+ // We read based upon the current offset and the specified length
+ TPtr8 sink( iTemporaryTransferSink->Des() );
+ const TMMCScBkupArchiveVector readRequest( iCurrentOffset, aLength );
+ const TMMCScBkupArchiveVector& readResult = archiveDataInterface.ADIReadL( sink, readRequest );
+ __LOG2("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - read result - offset: %d, length: %d", readResult.Offset(), readResult.Length());
+
+ // Update offset
+ iCurrentOffset += readResult.Length();
+ aSink.Append( sink );
+ __LOG2("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - new offset (iCurrentOffset): %d, sink Length: %d", iCurrentOffset, aSink.Length());
+
+#ifdef DEBUGGING_DATA_TRANSFER
+ TRAP_IGNORE( DumpTransferDataL( archiveDataInterface.ADIFsSession(), sink) );
+#endif
+
+ if ( iCurrentOffset > CurrentReadInfo().EndOffset() )
+ {
+ __LOG("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - Fatal Error - read went beyond archive entry boundary!");
+ ASSERT( EFalse );
+ User::Leave( KErrCorrupt );
+ }
+ else
+ {
+ __LOG("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - read was okay - updating stats & reporting progress...");
+
+ // We managed to read the data okay, so let's update our stats
+ DataTransferred( readResult.Length() );
+
+ // ... and also update progress
+ Driver().DrvProgressHandler().MMCScBkupHandleProgress( readResult.Length() );
+ }
+ }
+ }
+ else
+ {
+ __LOG("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - Fatal Error - current offset out of bounds!");
+ ASSERT( EFalse );
+ User::Leave( KErrCorrupt );
+ }
+
+ __LOG("CMMCScBkupReadDataTransferRequestBase::ReadChunkL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::DoProcessChunkOfDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupReadDataTransferRequestBase::DoProcessChunkOfDataL()
+ {
+ MMMCScBkupDriver& driver = Driver();
+ const TInt startingOffset = CurrentOffset();
+ const TInt finalOffset = CurrentReadInfo().EndOffset();
+
+ // Calculate how much data is remaining
+ const TInt amountOfDataStillToBeRead = finalOffset - startingOffset;
+
+ __LOG4("CMMCScBkupReadDataTransferRequestBase::DoProcessChunkOfDataL() - START - startingOffset: 0x%08x, finalOffset: 0x%08x, amountToBeRead: %8d, iFinishedSupplyingData: %d",
+ startingOffset, finalOffset, amountOfDataStillToBeRead, iFinishedSupplyingData);
+
+ // Get a handle to the received data - but only if we don't already
+ // have a handle to it! Calling this method resets whatever is already
+ // in the transfer chunk - hence we must only call it once (at the beginning
+ // of a multi-chunked transfer)
+ if ( iTransferChunkPointer == NULL )
+ {
+ iTransferChunkPointer = &driver.DrvSecureBackupClient().TransferDataAddressL();
+ }
+
+ // How much space is available?
+ const TInt spaceAvailable = iTransferChunkPointer->MaxLength() - iTransferChunkPointer->Length();
+ const TInt amountToRead = Min( spaceAvailable, Min( iReadChunkSize, amountOfDataStillToBeRead ) );
+ __LOG2("CMMCScBkupReadDataTransferRequestBase::DoProcessChunkOfDataL() - xfer space available: %8d, amountToRead: %8d", spaceAvailable, amountToRead);
+
+ // Do the read
+ ReadChunkL( *iTransferChunkPointer, amountToRead );
+
+ // Was this the last time we needed to perform a read?
+ const TBool lastReadFromArchive = ( CurrentOffset() == finalOffset );
+ __LOG1("CMMCScBkupReadDataTransferRequestBase::DoProcessChunkOfDataL() - read data okay - lastReadFromArchive: %d", lastReadFromArchive);
+
+ // Check to see if the data sink chunk is full. If so then we need to let
+ // the SBE process what we've prepared so far, then we'll fill it with more
+ // data.
+ iFinishedSupplyingData = lastReadFromArchive;
+ TBool moreToBeRead = !lastReadFromArchive;
+ if ( !iFinishedSupplyingData && iTransferChunkPointer->Length() == iTransferChunkPointer->MaxLength() )
+ {
+ // Also cope with the boundary condition that the sink is full
+ // but we've also just given it the last byte anyway. In which case,
+ // we don't need to request a repeat transfer. This is actually
+ // all the data in one go.
+ moreToBeRead = EFalse;
+ }
+ //
+ __LOG1("CMMCScBkupReadDataTransferRequestBase::DoProcessChunkOfDataL() - END - more to read: %d", moreToBeRead);
+ return moreToBeRead;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::PrepareForNextEntry()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupReadDataTransferRequestBase::PrepareForNextEntry()
+ {
+ TBool anotherEntryAvailable = EFalse;
+
+ // Update our starting offset
+ iFinishedSupplyingData = EFalse;
+ iCurrentOffset = -1;
+ //
+ if ( ++iCurrentIndex < iEntries->Count() )
+ {
+ const TMMCScBkupArchiveVector& currentReadInfo = CurrentReadInfo();
+ iCurrentOffset = currentReadInfo.Offset();
+
+ __LOG3("CMMCScBkupReadDataTransferRequestBase::PrepareForNextEntry() - offset: %6d, length: %6d, drive: %c:", currentReadInfo.Offset(), currentReadInfo.Length(), 'A' + CurrentDrive() );
+
+ anotherEntryAvailable = ETrue;
+ }
+ //
+ return anotherEntryAvailable;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::CurrentDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TDriveNumber CMMCScBkupReadDataTransferRequestBase::CurrentDrive() const
+ {
+ return CurrentEntry().iDrive;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::CurrentReadInfo()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& CMMCScBkupReadDataTransferRequestBase::CurrentReadInfo() const
+ {
+ return CurrentEntry().iVector;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::CurrentEntry()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveDriveAndVector& CMMCScBkupReadDataTransferRequestBase::CurrentEntry() const
+ {
+ __ASSERT_ALWAYS( iCurrentIndex >= 0 && iCurrentIndex < iEntries->Count(), User::Invariant() );
+
+ // Get the next entry
+ const TMMCScBkupArchiveDriveAndVector& entry = (*iEntries)[ iCurrentIndex ];
+ return entry;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupReadDataTransferRequestBase::RunError( TInt aError )
+ {
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ const TSecureId sid = DataOwner().SecureId();
+ __LOGFILE3("CMMCScBkupReadDataTransferRequestBase::RunError() - **** - aError: %d, sid: 0x%08x, drive: %c", aError, sid.iId, 'A' + CurrentDrive() );
+#endif
+
+ TInt ret = KErrNone;
+
+ if ( aError == KErrNotFound )
+ {
+ // KErrNotFound is treated as non-fatal.
+ const TBool entryAvailable = PrepareForNextEntry();
+
+ // Try the next entry (if any)
+ TState nextState = EProcessData;
+ if ( entryAvailable )
+ {
+ __LOGFILE("CMMCScBkupReadDataTransferRequestBase::RunError() - **** - another drive available for same DO - trying the next drive...");
+ nextState = EProcessData;
+ }
+ else
+ {
+ // Done
+ __LOGFILE("CMMCScBkupReadDataTransferRequestBase::RunError() - **** - no drives let for same DO...");
+ nextState = EFinished;
+ }
+
+ SetState( nextState );
+ CompleteSelf();
+ }
+ else
+ {
+ // Everything else is fatal
+ __LOGFILE1( "CMMCScBkupReadDataTransferRequestBase::RunError() - **** - FATAL ERROR (%d)", aError );
+ ret = CMMCScBkupTransferRequestBase::RunError( aError );
+ }
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupReadDataTransferRequestBase::DumpTransferDataL()
+//
+//
+// ---------------------------------------------------------------------------
+#ifdef DEBUGGING_DATA_TRANSFER
+void CMMCScBkupReadDataTransferRequestBase::DumpTransferDataL( RFs& aFsSession, const TDesC8& aData ) const
+ {
+ TPtrC subDirectory( KNullDesC );
+ //
+ switch( ElementType() )
+ {
+ case EMMCScBkupOwnerDataTypeJavaData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataJava);
+ break;
+ case EMMCScBkupOwnerDataTypeSystemData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataSystem);
+ break;
+ case EMMCScBkupOwnerDataTypePassiveData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataPassive);
+ break;
+ case EMMCScBkupOwnerDataTypeActiveData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataActive);
+ break;
+ default:
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ //
+ const TSecureId secureId = DataOwner().SecureId();
+ _LIT(KMMCScBkupFormatDes, "%S%S");
+ TFileName transferDumpFileName;
+ const TDesC& path = PathInfo::MemoryCardRootPath();
+ transferDumpFileName.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot);
+
+ transferDumpFileName.Append( subDirectory );
+ transferDumpFileName.Append( KMMCScBkupDataTransferDebuggingPathDataRestore );
+ transferDumpFileName.AppendFormat( KMMCScBkupDataTransferDebuggingFileName, secureId.iId, 'a' + CurrentDrive() );
+ //
+ RFile64 file;
+ TInt error = KErrNone;
+ TEntry entry;
+ if ( aFsSession.Entry( transferDumpFileName, entry ) == KErrNone )
+ {
+ // Already exists - append data
+ error = file.Open( aFsSession, transferDumpFileName, EFileWrite | EFileStream | EFileShareExclusive );
+ }
+ else
+ {
+ entry.iSize = 0;
+ error = file.Create( aFsSession, transferDumpFileName, EFileWrite | EFileStream | EFileShareExclusive );
+ }
+ //
+ User::LeaveIfError( error );
+ CleanupClosePushL( file );
+ error = file.Write( entry.iSize, aData );
+ CleanupStack::PopAndDestroy( &file );
+ }
+#endif
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupTransferRequest.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupTransferRequestBase implementation
+*
+*
+*/
+
+#include "CMMCScBkupTransferRequest.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMMCScBkupDriver.h"
+#include "CMMCScBkupArchive.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::CMMCScBkupTransferRequestBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupTransferRequestBase::CMMCScBkupTransferRequestBase( MMMCScBkupDriver& aDriver, TMMCScBkupOwnerDataType aElementType, TBool aUpdateOperationalSizes, TInt aPriority )
+: CActive( aPriority ), iDriver( aDriver ), iElementType( aElementType ), iUpdateOperationalSizes( aUpdateOperationalSizes )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::~CMMCScBkupTransferRequestBase()
+//
+// C++ destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupTransferRequestBase::~CMMCScBkupTransferRequestBase()
+ {
+ Cancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::RequestL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver )
+ {
+ __ASSERT_ALWAYS( !IsActive(), User::Invariant() );
+ //
+ iDataOwner = &aOwner;
+ SetObserver( aObserver );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::SingleDriveTransferCompleteL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::SingleDriveTransferCompleteL()
+ {
+ if ( iUpdateOperationalSizes )
+ {
+ const TDriveNumber drive = CurrentDrive();
+ const TInt amount = AmountOfDataTransferred();
+ __LOG3("CMMCScBkupTransferRequestBase::SingleDriveTransferCompleteL() - drive: %c:, amount: %8d, elementType: %S", drive + 'A', amount, &MMCScBkupLogger::DataType( ElementType() ) );
+ //
+ ASSERT( drive >= EDriveA && drive <= EDriveZ );
+ }
+
+ ResetDataTransferCounter();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::TransferCompleteL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::TransferCompleteL()
+ {
+ DataOwner().SetCompletionStatus( iElementType, ETrue );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::CompleteSelf()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::CompleteSelf( TInt aCompletionCode )
+ {
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, aCompletionCode);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::SetObserver()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::SetObserver( TRequestStatus& aObserver )
+ {
+ __ASSERT_DEBUG( iObserver == NULL, User::Invariant() );
+ iObserver = &aObserver;
+ aObserver = KRequestPending;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::CompleteObserverRequest()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::CompleteObserverRequest( TInt aCompletionCode )
+ {
+ __LOG1("CMMCScBkupTransferRequestBase::CompleteObserverRequest() - aCompletionCode: %d", aCompletionCode);
+ __ASSERT_ALWAYS(iObserver != NULL, User::Invariant());
+ User::RequestComplete(iObserver, aCompletionCode);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::RunL()
+ {
+ __LOG2("CMMCScBkupTransferRequestBase::RunL() - START - iStatus: %d, iState: %d", iStatus.Int(), iState);
+
+ User::LeaveIfError( iStatus.Int() );
+ //
+ switch( State() )
+ {
+ case ETransferData:
+ __LOG("CMMCScBkupTransferRequestBase::RunL() - ETransferData");
+ PrepareDataTransferL();
+ break;
+
+ case EProcessData:
+ __LOG("CMMCScBkupTransferRequestBase::RunL() - EProcessData");
+ ProcessDataChunkL();
+ break;
+
+ case EFinished:
+ // Inform any interested derived classes
+ __LOG("CMMCScBkupTransferRequestBase::RunL() - EFinished - transfer complete....");
+ TransferCompleteL();
+
+ // Notify observer
+ __LOG("CMMCScBkupTransferRequestBase::RunL() - EFinished - complete observer...");
+ CompleteObserverRequest( KErrNone );
+ break;
+
+ default:
+ case EIdle:
+ __LOG("CMMCScBkupTransferRequestBase::RunL() - EIdle - User::Invariant()");
+ ASSERT( EFalse );
+ break;
+ }
+
+ __LOG2("CMMCScBkupTransferRequestBase::RunL() - END - iStatus: %d, iState: %d", iStatus.Int(), iState);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::DoCancel()
+ {
+ CompleteObserverRequest( KErrCancel );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupTransferRequestBase::RunError( TInt aError )
+ {
+ if ( aError != KErrNone )
+ {
+ __LOGFILE1("CMMCScBkupTransferRequestBase::RunError() - **** - ERROR (%d) -> complete observer with error code", aError);
+ }
+ //
+ CompleteObserverRequest( aError );
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupTransferRequestBase::ProcessDataChunkL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupTransferRequestBase::ProcessDataChunkL()
+ {
+ __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - START");
+
+ // Now call virtual function to do the processing
+ const TBool requiresMoreChunkProcessing = ProcessChunkOfDataL();
+ __LOG1("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - requiresMoreChunkProcessing: %d", requiresMoreChunkProcessing);
+ //
+ TState nextState = EProcessData;
+ if ( !requiresMoreChunkProcessing )
+ {
+ __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - didnt require more processing... ");
+ SingleDriveTransferCompleteL();
+ //
+ nextState = ETransferData;
+ __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - nextState is: ETransferData");
+ }
+ else
+ {
+ __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - nextState is: EProcessData");
+ }
+
+ // Must check IsActive(), since CMMCScBkupReadDataTransferRequestBase::ProcessChunkOfDataL()
+ // changes state and set's active within the ProcessChunkOfDataL callback
+ if ( !IsActive() )
+ {
+ __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - not active - completing self and changing state!");
+ SetState( nextState );
+ CompleteSelf();
+ }
+ else
+ {
+ __LOG1("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - already active - state is: %d", State());
+ }
+
+ __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - END");
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupTransferWriteRequest.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,491 @@
+/*
+* Copyright (c) 2005 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: CMMCScBkupWriteDataTransferRequestBase implementation
+*
+*
+*/
+
+#include "CMMCScBkupTransferWriteRequest.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMMCScBkupDriver.h"
+#include "CMMCScBkupArchive.h"
+#include "MMCScBkupSBEUtils.h"
+#include "RMMCScBkupProgressSizer.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+#include <pathinfo.h>
+
+
+
+#ifdef __MMCSCBKUP_DATA_LOGGING_ENABLED__
+
+static void __DebugDump( const TDesC& aFmt, const TUint8* aAddress, const TUint8* aDisplayStartAddress, TInt aLength, TInt aMaxLength)
+ {
+ const TInt maxLen = aMaxLength;
+ TInt len = aLength;
+ const TUint8* pDataAddr = aAddress;
+
+ TBuf<81> out;
+ TBuf<20> ascii;
+ TInt offset = 0;
+ const TUint8* a = pDataAddr;
+ const TUint8* displayAddress = aDisplayStartAddress;
+ //
+ while(len>0)
+ {
+ out.Zero();
+ ascii.Zero();
+ out.AppendNumFixedWidth((TUint) displayAddress, EHex, 8);
+ out.Append(_L(": "));
+
+ TUint b;
+ for (b=0; b<16; b++)
+ {
+ TUint8 c = ' ';
+ if ((pDataAddr + offset + b) < pDataAddr + maxLen)
+ {
+ c = *(pDataAddr + offset + b);
+ out.AppendNumFixedWidth(c, EHex, 2);
+ }
+ else
+ {
+ out.Append(_L(" "));
+ }
+ out.Append(' ');
+ if (c<=0x20 || c>=0x7f || c=='%')
+ c=0x2e;
+ ascii.Append(TChar(c));
+ }
+ out.Append(ascii);
+ out.ZeroTerminate();
+
+ RDebug::Print(aFmt, &out);
+
+ displayAddress += 16;
+ a += 16;
+ offset += 16;
+ len -= 16;
+ }
+ }
+
+#endif
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::CMMCScBkupWriteDataTransferRequestBase()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupWriteDataTransferRequestBase::CMMCScBkupWriteDataTransferRequestBase(
+ MMMCScBkupDriver& aDriver,
+ MMMCScBkupIndexHandler& aIndexHandler,
+ TMMCScBkupOwnerDataType aElementType,
+ TSBDerivedType aExpectedTransferType,
+ TInt aPriority )
+
+: CMMCScBkupTransferRequestBase( aDriver, aElementType, aPriority ),
+ iIndexHandler( aIndexHandler ),
+ iExpectedTransferType( aExpectedTransferType )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::~CMMCScBkupWriteDataTransferRequestBase()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupWriteDataTransferRequestBase::~CMMCScBkupWriteDataTransferRequestBase()
+ {
+ delete iTransferType;
+ if ( iStreamIsOpen )
+ {
+ iStream.Close();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::RequestL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupWriteDataTransferRequestBase::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver, const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperations )
+ {
+#ifdef __MMCSCBKUPLOGGING_ENABLED__
+ if ( ElementType() == EMMCScBkupOwnerDataTypeJavaData )
+ {
+ HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( aOwner.Owner().Identifier() );
+ __LOG2("CMMCScBkupWriteDataTransferRequestBase::RequestL() - START - reading data from SBE for JavaHash: %S, ElementType: %S", hash, &MMCScBkupLogger::DataType( ElementType() ));
+ CleanupStack::PopAndDestroy( hash );
+ }
+ else
+ {
+ __LOG2("CMMCScBkupWriteDataTransferRequestBase::RequestL() - START - reading data from SBE for DO: 0x%08x, ElementType: %S", aOwner.SecureId().iId, &MMCScBkupLogger::DataType( ElementType() ));
+ }
+#endif
+
+ iDriveAndOperations = &aDriveAndOperations;
+ CMMCScBkupTransferRequestBase::RequestL( aOwner, aObserver );
+ //
+ iDriveFilter.Reset();
+ iDriveFilter.SetPrimaryDriveFilter( iDriveAndOperations->DriveList() );
+ iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+
+ // Set us going
+ SetState( ETransferData );
+ CompleteSelf();
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::RequestL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL()
+ {
+ MMMCScBkupDriver& driver = Driver();
+ MMMCScBkupArchiveDataInterface& archiveDataInterface = driver.DrvADI();
+
+ // Get a handle to the received data
+ TBool finished = EFalse;
+ CSBGenericTransferType* receivedTransferInfo = NULL;
+ const TPtrC8& pData = driver.DrvSecureBackupClient().TransferDataInfoL( receivedTransferInfo, finished );
+ iAdditionalTransferRequired = !finished;
+
+ __LOG4("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - received: %d bytes from SBE for SID: 0x%08x, Drive: %c:, ElementType: %S", pData.Length(), DataOwner().SecureId().iId, 'A' + CurrentDrive(), &MMCScBkupLogger::DataType( ElementType() ) );
+
+ // Validate the data
+ CleanupStack::PushL( receivedTransferInfo );
+ ValidateTransferInfoL( receivedTransferInfo );
+ CleanupStack::PopAndDestroy( receivedTransferInfo );
+
+ // If we've never written any registration data before, then we must
+ // request a write stream at the current archive write pos...
+ if ( pData.Length() && !iStreamIsOpen )
+ {
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - stream isnt open - opening now..." );
+
+ iStream = archiveDataInterface.ADIWriteStreamUncompressedLC();
+ CleanupStack::Pop(); // iWriteStream - gets closed in dtor in case of leave
+ iStreamIsOpen = ETrue;
+ }
+
+ // Write the data - assumes stream already open if this is not the
+ // first time that we've received data for this drive...
+ //
+ // We don't use the externalisation operators, as we want to write
+ // only the data (no leading byte count etc).
+ if ( pData.Length() )
+ {
+ __LOG1("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - got %d bytes of data...", pData.Length() );
+
+#ifdef __MMCSCBKUP_DATA_LOGGING_ENABLED__
+ _LIT(KDumpFormat, "SBEData - %S - ");
+ __DebugDump( KDumpFormat, pData.Ptr(), pData.Ptr(), pData.Length(), pData.Length() );
+#endif
+
+ // Write the data to the stream
+ __LOG1("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - writing %d bytes to stream...", pData.Length() );
+ iStream.WriteL(pData);
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - data written OK");
+
+ // Update our stats. We overwrite any earlier estimate from the SBE
+ // with the actual values that we ultimately end up writing to the
+ // archive. This allows us to provide a more accurate restore progress
+ // experience.
+ DataTransferred( pData.Length() );
+
+#ifdef DEBUGGING_DATA_TRANSFER
+ TRAP_IGNORE( DumpTransferDataL( archiveDataInterface.ADIFsSession(), pData ) );
+#endif
+ }
+
+ // If we've received everything we can commit & close the stream
+ if ( finished )
+ {
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - finished...");
+
+ // Implicitly, if the stream is open then we have written some
+ // data to the archive. Therefore we only add an index record
+ // when the stream is open.
+ if ( iStreamIsOpen )
+ {
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - Committing stream...");
+ iStream.CommitL();
+
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - Closing stream...");
+ iStream.Close();
+ iStreamIsOpen = EFalse;
+
+ // Must store the position, as we're going to also write an index at
+ // the end of this whole process.
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - Adding index record...");
+ CMMCScBkupArchiveFooter& footer = driver.DrvArchive().Footer();
+ const TMMCScBkupArchiveVector& info = archiveDataInterface.ADICurrentArchiveVectorInfo();
+
+ // If we actually wrote something to the archive, then add an index record.
+ if (info.Length())
+ {
+ iIndexHandler.AddIndexRecordL( footer, DataOwner(), info, CurrentDrive() );
+ }
+ }
+ }
+
+ // Not yet supporting chunked transfer
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::ProcessChunkOfDataL() - END");
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL()
+ {
+ // If we must make a repeat transfer request, then we don't yet
+ // move to the next drive.
+ if ( iAdditionalTransferRequired )
+ {
+ // Must ask for more of the same data, so no need
+ // to rebuild transfer info - we just reuse it
+ RequestDataTransferL();
+ }
+ else
+ {
+ // Can move to the next drive
+ TDriveNumber drive = EDriveA;
+ const TBool driveAvailable = iDriveFilter.NextValidDrive( drive );
+ __LOG1("CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL() - current drive: %c", drive + 'A');
+ __LOG1("CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL() - driveAvailable: %d", driveAvailable);
+
+ if ( driveAvailable )
+ {
+ const TBool dataTransferAllowableForDrive = iDriveAndOperations->IsDataTypeAllowedToAccessDrive( drive, ElementType() );
+ __LOG1("CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL() - dataTransferAllowableForDrive: %d", dataTransferAllowableForDrive);
+
+ if ( dataTransferAllowableForDrive )
+ {
+ __LOG1("CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL() - making transfer request for drive: %c", drive + 'A');
+
+ // Update the current drive
+ SetCurrentDrive( drive );
+
+ // Make virtual function call to make transfer object
+ const CSBGenericDataType& generic = DataOwner().Owner().Identifier();
+ CSBGenericTransferType* transferType = PrepareTransferTypeL( generic, CurrentDrive(), DataOwner().Version() );
+ delete iTransferType;
+ iTransferType = transferType;
+
+ // We have a transfer packet, so now request data
+ RequestDataTransferL();
+ }
+ else
+ {
+ // Couldn't process this drive, let's try to find another drive.
+ // This means we don't change state this time.
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL() - not allowed to back up this drive... trying next one...");
+ CompleteSelf( KErrNone );
+ }
+ }
+ else
+ {
+ // No more drives left, we've finished!
+ __LOG("CMMCScBkupWriteDataTransferRequestBase::PrepareDataTransferL() - no more drives to process - we're finished!");
+ SetState( EFinished );
+ CompleteSelf();
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::CurrentDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TDriveNumber CMMCScBkupWriteDataTransferRequestBase::CurrentDrive() const
+ {
+ return iCurrentDrive;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::ValidateTransferInfoL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupWriteDataTransferRequestBase::ValidateTransferInfoL( CSBGenericTransferType* aInfo )
+ {
+ if ( !aInfo )
+ {
+ User::Leave( KErrCorrupt );
+ }
+
+ // Check the type is as expected
+ const TSBDerivedType type = aInfo->DerivedTypeL();
+ if ( type != iExpectedTransferType )
+ {
+ __LOG2("CMMCScBkupWriteDataTransferRequestBase::ValidateTransferInfoL() - ERROR - types dont match! type: %d vs expected: %d", type, iExpectedTransferType );
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::RequestDataTransferL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMMCScBkupWriteDataTransferRequestBase::RequestDataTransferL()
+ {
+ __LOG3("CMMCScBkupWriteDataTransferRequestBase::RequestDataTransferL() - requesting data from SBE for SID: 0x%08x, Drive: %c:, ElementType: %S", DataOwner().SecureId().iId, 'A' + CurrentDrive(), &MMCScBkupLogger::DataType( ElementType() ) );
+
+ CSBEClient& sbeClient = Driver().DrvSecureBackupClient();
+ sbeClient.RequestDataL( *iTransferType, iStatus );
+ SetActive();
+ SetState( EProcessData );
+
+ // Report the progress
+ RMMCScBkupProgressSizer progressSizer( Driver().DrvParamsBase().DriveAndOperations() );
+ progressSizer.BackupReportFixedProgressForOpL( Driver().DrvProgressHandler(), ElementType() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMMCScBkupWriteDataTransferRequestBase::RunError( TInt aError )
+ {
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+ const TSecureId sid = DataOwner().SecureId();
+ __LOGFILE3("CMMCScBkupWriteDataTransferRequestBase::RunError() - **** - aError: %d, sid: 0x%08x, drive: %c", aError, sid.iId, 'A' + CurrentDrive() );
+#endif
+
+ TInt ret = KErrNone;
+
+ // Make sure we close the stream (if we had it open)
+ if ( iStreamIsOpen )
+ {
+ iStream.Close();
+ iStreamIsOpen = EFalse;
+ }
+
+ // Now notify the observer or silently try again (depends on type of error)
+ if ( aError == KErrNotFound )
+ {
+ __LOGFILE1("CMMCScBkupWriteDataTransferRequestBase::RunError() - **** - non fatal error (%d) so trying the next drive...", aError);
+
+ // Try the next drive - if none is available, it will complete the
+ // observer as if nothing went wrong.
+ iAdditionalTransferRequired = EFalse;
+ SetState( ETransferData );
+ CompleteSelf();
+ }
+ else
+ {
+ __LOGFILE1("CMMCScBkupWriteDataTransferRequestBase::RunError() - **** - FATAL ERROR (%d)", aError);
+ ret = CMMCScBkupTransferRequestBase::RunError( aError );
+ }
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupWriteDataTransferRequestBase::DumpTransferDataL()
+//
+//
+// ---------------------------------------------------------------------------
+#ifdef DEBUGGING_DATA_TRANSFER
+void CMMCScBkupWriteDataTransferRequestBase::DumpTransferDataL( RFs& aFsSession, const TDesC8& aData ) const
+ {
+ TPtrC subDirectory( KNullDesC );
+ //
+ switch( ElementType() )
+ {
+ case EMMCScBkupOwnerDataTypeJavaData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataJava);
+ break;
+ case EMMCScBkupOwnerDataTypeSystemData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataSystem);
+ break;
+ case EMMCScBkupOwnerDataTypePassiveData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataPassive);
+ break;
+ case EMMCScBkupOwnerDataTypeActiveData:
+ subDirectory.Set(KMMCScBkupDataTransferDebuggingPathDataActive);
+ break;
+ default:
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ //
+ const TSecureId secureId = DataOwner().SecureId();
+ _LIT(KMMCScBkupFormatDes, "%S%S");
+ TFileName transferDumpFileName;
+ const TDesC& path = PathInfo::MemoryCardRootPath();
+ transferDumpFileName.Format(KMMCScBkupFormatDes, &path, &KMMCScBkupDataTransferDebuggingPathRoot);
+
+ transferDumpFileName.Append( subDirectory );
+ transferDumpFileName.Append( KMMCScBkupDataTransferDebuggingPathDataBackup );
+ transferDumpFileName.AppendFormat( KMMCScBkupDataTransferDebuggingFileName, secureId.iId, 'a' + CurrentDrive() );
+ //
+ RFile64 file;
+ TInt error = KErrNone;
+ TEntry entry;
+ if ( aFsSession.Entry( transferDumpFileName, entry ) == KErrNone )
+ {
+ // Already exists - append data
+ error = file.Open( aFsSession, transferDumpFileName, EFileWrite | EFileStream | EFileShareExclusive );
+ }
+ else
+ {
+ entry.iSize = 0;
+ error = file.Create( aFsSession, transferDumpFileName, EFileWrite | EFileStream | EFileShareExclusive );
+ }
+ //
+ User::LeaveIfError( error );
+ CleanupClosePushL( file );
+ error = file.Write( entry.iSize, aData );
+ CleanupStack::PopAndDestroy( &file );
+ }
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/MMCScBkupArchiveUtils.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,709 @@
+/*
+* Copyright (c) 2005 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: MMCScBkupArchiveUtils implementation
+*
+*
+*/
+
+#include "MMCScBkupArchiveUtils.h"
+
+// System includes
+#include <s32file.h>
+#include <s32mem.h>
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupDllUids.h"
+#include "MMCScBkupPhoneModelUtils.h"
+#include "CMMCScBkupArchiveFooter.h"
+#include "CMMCScBkupArchiveHeader.h"
+#include "MMMCScBkupArchiveDataInterface.h"
+#include "MMCScBkupArchiveFlags.h"
+
+// Constants
+const TInt8 KMMCScBkupArchiveFileFormatVersionMajor = 1;
+#ifdef RD_FILE_MANAGER_BACKUP
+const TInt8 KMMCScBkupArchiveFileFormatVersionMinor = 1;
+#else
+const TInt8 KMMCScBkupArchiveFileFormatVersionMinor = 0;
+#endif
+const TInt16 KMMCScBkupArchiveFileFormatVersionBuild = 1;
+const TUid KMMCScBkupArchiveFileFormatUid1 = { KMMCAppEngUID3 };
+const TUid KMMCScBkupArchiveFileFormatUid2 = { 0 };
+const TUid KMMCScBkupArchiveFileFormatUid3 = { 0x0BACCCCC }; // FIX
+
+ /**
+ * Fixed Header
+ * ============
+ *
+ * 12 bytes = 3 uids
+ * 4 bytes = 1 uid crc checksum
+ *
+ * ARCHIVE FILE FORMAT VERSION
+ * {
+ * 1 byte = version major
+ * 1 byte = version minor
+ * 2 bytes = version build
+ * }
+ *
+ * 4 bytes = size of footer in bytes - this is always the same
+ * fixed length, hence we can write the size here.
+ * The value can then be used to work from the back of the
+ * archive to the starting position of the footer (where
+ * most of the juicy info is).
+ *
+ * 4 bytes = archive flags
+ *
+ * 4 bytes = archive payload CRC (activated when RD_FILE_MANAGER_BACKUP)
+ *
+ * 4 bytes = archive category
+ *
+ * 4 bytes = archive header CRC (activated when RD_FILE_MANAGER_BACKUP)
+ *
+ * KMMCScSpareByteCount bytes = spare padding
+ *
+ * 1 byte = phone model version string length
+ * n bytes = phone model version string
+ *
+ *
+ *
+ * Note that we deliberately do not use the streaming chevrons
+ * as we then risk the problem of running the string through
+ * a unicode compressor first.
+ */
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ArchiveUidType()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::ArchiveUidType(TUidType& aType)
+ {
+ aType = TUidType( KMMCScBkupArchiveFileFormatUid1,
+ KMMCScBkupArchiveFileFormatUid2,
+ KMMCScBkupArchiveFileFormatUid3 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ArchiveCheckedUid()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::ArchiveCheckedUid(TCheckedUid& aCheckedUids)
+ {
+ TUidType uidType;
+ ArchiveUidType( uidType );
+ aCheckedUids.Set( uidType );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::PhoneModelFromArchiveLC()
+//
+//
+// ---------------------------------------------------------------------------
+HBufC8* MMCScBkupArchiveUtils::PhoneModelFromArchiveLC( MMMCScBkupArchiveDataInterface& aADI )
+ {
+ const TInt phoneModelOffset = OffsetOfModelInformation();
+ //
+ RReadStream stream( aADI.ADIReadStreamUncompressedLC( phoneModelOffset ) );
+ HBufC8* modelInfo = PhoneModelFromArchiveLC( stream);
+ CleanupStack::PopAndDestroy(); // stream
+ //
+ return modelInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ReadPhoneValidityInformationL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::ReadPhoneValidityInformationL( RFs& aFsSession, const TDesC& aFileName, HBufC8*& aPhoneModelData, TBitFlags& aArchiveFlags, TVersion& aArchiveVersion )
+ {
+ __ASSERT_DEBUG( aPhoneModelData == NULL, User::Invariant() );
+ //
+ RFile64 file;
+ TInt error = file.Open( aFsSession, aFileName, EFileShareReadersOnly | EFileStream | EFileRead );
+ User::LeaveIfError( error );
+ CleanupClosePushL(file);
+
+ // First, read the archive flags
+ aArchiveFlags = ReadArchiveFlagsL( file );
+
+ // Read version
+ ReadArchiveVersionL( file, aArchiveVersion );
+
+ // Then, create a stream interface to the file
+ const TInt phoneModelOffset = OffsetOfModelInformation();
+ RFileReadStream stream( file, phoneModelOffset );
+ CleanupStack::Pop( &file );
+ CleanupClosePushL( stream ); // stream takes ownership of the file now
+ //
+ HBufC8* modelInfo = PhoneModelFromArchiveLC( stream );
+
+ // Unfortunately we have to juggle the cleanup stack
+ CleanupStack::Pop( modelInfo );
+ CleanupStack::PopAndDestroy( &stream ); // also closes the file
+
+ // Done
+ aPhoneModelData = modelInfo;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ArchiveRunTimeFileFormatVersion()
+//
+//
+// ---------------------------------------------------------------------------
+TVersion MMCScBkupArchiveUtils::ArchiveRunTimeFileFormatVersion()
+ {
+ return TVersion( KMMCScBkupArchiveFileFormatVersionMajor,
+ KMMCScBkupArchiveFileFormatVersionMinor,
+ KMMCScBkupArchiveFileFormatVersionBuild );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::WriteHeaderL()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& MMCScBkupArchiveUtils::WriteHeaderL( MMMCScBkupArchiveDataInterface& aADI,
+ TBitFlags aCategory )
+ {
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - START");
+ RWriteStream stream( aADI.ADIWriteStreamUncompressedLC() );
+
+ // 16 bytes = uids + *uid* checksum
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [16] write uids + checksum");
+ TCheckedUid checkedUid;
+ ArchiveCheckedUid( checkedUid );
+ const TPtrC8 pUidAndCRC( checkedUid.Des() );
+ stream.WriteL( pUidAndCRC );
+
+ // 4 bytes = file format version
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] write version");
+ const TVersion version( ArchiveRunTimeFileFormatVersion() );
+ stream.WriteInt8L( version.iMajor );
+ stream.WriteInt8L( version.iMinor );
+ stream.WriteInt16L( version.iBuild );
+
+ // 4 bytes = Footer length - starts life as length of 0, and
+ // is then written to again later on after the footer has
+ // been exteranlised.
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] write size of footer (starts life as 0)");
+ const TInt footerLength = 0;
+ stream.WriteInt32L( footerLength );
+
+ // 4 bytes = Archive flags
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive flags (archive starts life invalid)");
+ const TUint32 defaultArchiveFlags = DefaultArchiveFlags();
+ stream.WriteUint32L( defaultArchiveFlags );
+
+ // 4 bytes = Initial payload CRC value, this will be updated with the final
+ // CRC once the entire archive has been prepared.
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive payload CRC");
+ const TUint32 initialPayloadCRC = 0;
+ stream.WriteUint32L( initialPayloadCRC );
+
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive category");
+ stream.WriteUint32L( aCategory.iFlags );
+
+ // 4 bytes = Initial header CRC value, this will be updated with the final
+ // CRC once the entire archive has been prepared.
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive header CRC");
+ const TUint32 initialHeaderCRC = 0;
+ stream.WriteUint32L( initialHeaderCRC );
+
+ // KMMCScSpareByteCount = padding, for future use
+ __LOG1("MMCScBkupArchiveUtils::WriteHeaderL() - [%d] padding/spare data", KMMCScSpareByteCount);
+ for(TInt i = 0; i < KMMCScSpareByteCount/sizeof(TInt32); i++)
+ {
+ stream.WriteInt32L( 0 );
+ }
+
+ // 1 byte = Phone model version string length
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 1] phone model length");
+ HBufC8* phoneModelString = MMCScBkupPhoneModelUtils::CurrentPhoneModelLC();
+ stream.WriteInt8L( phoneModelString->Length() );
+
+ // Then the version string itself
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [??] phone model string");
+ stream.WriteL( *phoneModelString );
+
+ // Tidy up
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - committing stream...");
+ stream.CommitL();
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - destroying stream...");
+ CleanupStack::PopAndDestroy( 2 ); // phoneModelString and stream
+
+ __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - END");
+ return aADI.ADICurrentArchiveVectorInfo();
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ReadHeaderL()
+//
+//
+// ---------------------------------------------------------------------------
+const TMMCScBkupArchiveVector& MMCScBkupArchiveUtils::ReadHeaderL( MMMCScBkupArchiveDataInterface& aADI, CMMCScBkupArchiveHeader& aHeader )
+ {
+ __LOG("MMCScBkupArchiveUtils::ReadHeaderL() - START");
+ RReadStream stream( aADI.ADIReadStreamUncompressedLC() );
+
+ // 16 bytes = uids + *uid* checksum
+ TBuf8<16> uidBuffer;
+ stream.ReadL( uidBuffer, uidBuffer.MaxLength() );
+
+ // Create a UID type objjec
+ TCheckedUid checkedUid( uidBuffer );
+ const TUidType uids( checkedUid.UidType()) ;
+ __LOG3("MMCScBkupArchiveUtils::ReadHeaderL() - uids: 0x%08x/0x%08x/0x%08x", uids[0], uids[1], uids[2] );
+ if ( uids[0] == KNullUid && uids[1] == KNullUid && uids[2] == KNullUid )
+ {
+ // Apparently, TCheckedUid sets the uids to 0 when the CRC doesn't match
+ // the value read from the file.
+ User::Leave( KErrNotSupported );
+ }
+ aHeader.SetCheckedUid( checkedUid );
+
+ // 4 bytes = file format version
+ TVersion version;
+ version.iMajor = stream.ReadInt8L();
+ version.iMinor = stream.ReadInt8L();
+ version.iBuild = stream.ReadInt16L();
+ aHeader.SetVersion( version );
+ __LOG3("MMCScBkupArchiveUtils::ReadHeaderL() - version: %3d.%3d.%6d", version.iMajor, version.iMinor, version.iBuild );
+
+ // 4 bytes = Length of footer
+ const TInt footerLength = stream.ReadInt32L();
+ aHeader.SetFooterLength( footerLength );
+ __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - footerLength: %d", footerLength);
+
+ // 4 bytes = Archive flags
+ const TUint32 archiveFlags = stream.ReadUint32L();
+ aHeader.SetArchiveFlags( archiveFlags );
+ __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archiveFlags: %d", archiveFlags);
+
+ // 4 bytes = Archive payload CRC
+ const TUint32 payloadCRC = stream.ReadUint32L();
+ __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archive payload CRC: %d", payloadCRC);
+
+ // 4 bytes = Archive Category
+ const TUint32 archiveCategory = stream.ReadUint32L();
+ __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archiveCategory: %d", archiveCategory);
+
+ // 4 bytes = Archive header CRC
+ const TUint32 headerCRC = stream.ReadUint32L();
+ __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archive header CRC: %d", headerCRC);
+
+ // KMMCScSpareByteCount of padding (spare) data. Skip for now
+ for(TInt i = 0; i < KMMCScSpareByteCount/sizeof(TInt32); i++)
+ {
+ (void) stream.ReadInt32L();
+ }
+
+ // Then the version string itself - which is handled through a separate method:
+ HBufC8* phoneModel = PhoneModelFromArchiveLC( stream );
+ aHeader.SetPhoneModelIdentifierL( *phoneModel );
+ CleanupStack::PopAndDestroy( phoneModel );
+
+ // Clean up
+ CleanupStack::PopAndDestroy(); // stream
+
+ __LOG("MMCScBkupArchiveUtils::ReadHeaderL() - END");
+ return aADI.ADICurrentArchiveVectorInfo();
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::OffsetOfModelInformation()
+//
+//
+// ---------------------------------------------------------------------------
+TInt MMCScBkupArchiveUtils::OffsetOfModelInformation()
+ {
+ return EArchiveOffsetPhoneModelStringLength;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::PhoneModelFromArchiveLC()
+//
+//
+// ---------------------------------------------------------------------------
+HBufC8* MMCScBkupArchiveUtils::PhoneModelFromArchiveLC( RReadStream& aStream )
+ {
+ const TInt length = aStream.ReadInt8L();
+
+ // Validate against preconditions
+ const TInt maxLength = MMCScBkupPhoneModelUtils::MaximumPhoneModelIdentifierLength();
+ if ( length > maxLength || length < 0 )
+ {
+ User::Leave( KErrCorrupt );
+ }
+
+ // Now try to read the model identifier
+ HBufC8* model = HBufC8::NewLC( length );
+ TPtr8 pModel( model->Des() );
+ aStream.ReadL( pModel, length );
+
+ // All done
+ return model;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::DefaultArchiveFlags()
+//
+//
+// ---------------------------------------------------------------------------
+TUint32 MMCScBkupArchiveUtils::DefaultArchiveFlags()
+ {
+ return EMMCScBkupArchiveFlagsDefault;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::SetArchiveContentAsValidL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::SetArchiveContentAsValidL( RFile64& aArchive )
+ {
+ TInt error = KErrNone;
+
+ // Calculate the offset to the archive flags:
+ const TUint archiveFlagsFileOffset = EArchiveOffsetArchiveFlags;
+
+ // Flags are four bytes. Read the existing raw flag data
+ TBuf8< KMMCScArchiveFlagsByteCount > flagData;
+ error = aArchive.Read( static_cast<TInt64>( archiveFlagsFileOffset ), flagData );
+ User::LeaveIfError( error );
+
+ // Interpret the flag data as real flags
+ RDesReadStream readStream( flagData );
+ CleanupClosePushL( readStream );
+ TUint32 archiveFlags = readStream.ReadUint32L();
+ CleanupStack::PopAndDestroy( &readStream );
+
+ // Twiddle the "archive is complete/valid" bits
+ archiveFlags |= EMMCScBkupArchiveFlagsContentValid;
+
+ // Write the flags back out the descriptor
+ flagData.Zero();
+ RDesWriteStream writeStream( flagData );
+ CleanupClosePushL( writeStream );
+ writeStream.WriteUint32L( archiveFlags );
+ writeStream.CommitL();
+ CleanupStack::PopAndDestroy( &writeStream );
+
+ // Then write them to the file itself
+ error = aArchive.Write( static_cast<TInt64>( archiveFlagsFileOffset ), flagData );
+ User::LeaveIfError( error );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::SetFooterLengthL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::SetFooterLengthL( RFile64& aArchive, TInt aLength )
+ {
+ TInt error = KErrNone;
+
+ // Calculate the offset to the footer length:
+ const TUint archiveFooterLengthOffset = EArchiveOffsetFooterLength;
+
+ // Prepare externalized representation of length
+ TBuf8< KMMCScArchiveFooterLengthByteCount > footerLengthData;
+ RDesWriteStream writeStream( footerLengthData );
+ CleanupClosePushL( writeStream );
+ writeStream.WriteInt32L( aLength );
+ writeStream.CommitL();
+ CleanupStack::PopAndDestroy( &writeStream );
+
+ // Then write them to the file itself
+ error = aArchive.Write( static_cast<TInt64>( archiveFooterLengthOffset ), footerLengthData );
+ User::LeaveIfError( error );
+ }
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ReadBkUpCategoryInformationL()
+//
+//
+// ---------------------------------------------------------------------------
+TBitFlags MMCScBkupArchiveUtils::ReadBkUpCategoryInformationL( RFs& aFsSession, const TDesC& aFileName )
+ {
+ RFile64 file;
+ TInt error = file.Open( aFsSession, aFileName, EFileShareReadersOnly | EFileStream | EFileRead );
+ User::LeaveIfError( error );
+ CleanupClosePushL(file);
+
+ // Then, create a stream interface to the file
+ RFileReadStream stream( file, EArchiveOffsetArchiveCategory );
+ CleanupStack::Pop( &file );
+ CleanupClosePushL( stream ); // stream takes ownership of the file now
+ //
+ TUint category = stream.ReadUint32L();
+
+ CleanupStack::PopAndDestroy( &stream ); // also closes the file
+
+ TBitFlags ret;
+ ret.SetValue( category );
+
+ return ret;
+ }
+
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::SetArchiveCrcsL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::SetArchiveCrcsL( RFile64& aArchive, TUint32 aCrc )
+ {
+ TInt error = KErrNone;
+
+ // Payload crc
+ SetArchiveCrcL( aArchive, aCrc, EArchiveOffsetArchivePayloadCRC );
+
+ // Calculate and write header crc also to the file
+ TBuf8< KMMCScArchivePhoneModelStringLength > length;
+ TUint32 modelLength;
+ TUint32 headerCrc = 0;
+
+ error = aArchive.Read( static_cast<TInt64>( EArchiveOffsetPhoneModelStringLength ), length );
+ User::LeaveIfError(error);
+ RDesReadStream readStream( length );
+ CleanupClosePushL( readStream );
+ modelLength = readStream.ReadUint8L();
+ CleanupStack::PopAndDestroy( &readStream );
+
+ CalculateCrcFromArchive( headerCrc, aArchive, 0, EArchiveOffsetArchiveHeaderCRC);
+ CalculateCrcFromArchive( headerCrc, aArchive, EArchiveOffsetArchiveHeaderCRC + KMMCScArchiveCrcByteCount,
+ KMMCScSpareByteCount + KMMCScArchivePhoneModelStringLength + modelLength);
+ SetArchiveCrcL( aArchive, headerCrc, EArchiveOffsetArchiveHeaderCRC );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ValidateArchiveCrcsL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupArchiveUtils::ValidateArchiveCrcsL( RFs& aFsSession, const TDesC& aFileName )
+ {
+ TBool validCrc = EFalse;
+
+ RFile64 file;
+ TInt64 size;
+
+ TInt error = file.Open( aFsSession, aFileName, EFileShareReadersOnly | EFileRead );
+
+ if ( error == KErrNone && file.Size(size) == KErrNone)
+ {
+ TBuf8< KMMCScArchiveFlagsByteCount > headerCrc;
+ TBuf8< KMMCScArchiveFlagsByteCount > payloadCrc;
+ TBuf8< KMMCScArchivePhoneModelStringLength > length;
+ TUint32 archivedHeaderCrc, calculatedHeaderCrc;
+ TUint32 archivedPayloadCrc, calculatedPayloadCrc;
+ TUint32 modelLength;
+
+ // Read crcs from header
+ error = file.Read( static_cast<TInt64>( EArchiveOffsetArchiveHeaderCRC ), headerCrc );
+ User::LeaveIfError(error);
+ error = file.Read( static_cast<TInt64>( EArchiveOffsetArchivePayloadCRC ), payloadCrc );
+ User::LeaveIfError(error);
+ error = file.Read( static_cast<TInt64>( EArchiveOffsetPhoneModelStringLength ), length );
+ User::LeaveIfError(error);
+ CleanupClosePushL( file );
+
+ RDesReadStream readStream( headerCrc );
+ CleanupClosePushL( readStream );
+ archivedHeaderCrc = readStream.ReadUint32L();
+ readStream.Close();
+ readStream.Open(payloadCrc);
+ archivedPayloadCrc = readStream.ReadUint32L();
+ readStream.Close();
+ readStream.Open(length);
+ modelLength = readStream.ReadUint8L();
+ CleanupStack::PopAndDestroy( &readStream );
+
+ // Calculate crc from header in two parts
+ calculatedHeaderCrc = 0;
+ CalculateCrcFromArchive( calculatedHeaderCrc, file, 0, EArchiveOffsetArchiveHeaderCRC);
+ CalculateCrcFromArchive( calculatedHeaderCrc, file, EArchiveOffsetArchiveHeaderCRC + KMMCScArchiveCrcByteCount,
+ KMMCScSpareByteCount + KMMCScArchivePhoneModelStringLength + modelLength);
+
+ // Calculate crc from payload and footer
+ TInt payloadSize = size - (EArchiveOffsetPhoneModelString + modelLength);
+ calculatedPayloadCrc = 0;
+ CalculateCrcFromArchive( calculatedPayloadCrc, file, EArchiveOffsetPhoneModelString + modelLength, payloadSize);
+
+ if(archivedPayloadCrc == calculatedPayloadCrc && archivedHeaderCrc == calculatedHeaderCrc)
+ {
+ validCrc = ETrue;
+ }
+ else
+ {
+ __LOG4("MMCScBkupArchiveUtils::ValidateArchiveCrcsL() - crc mismatch: %u vs. %u - %u vs. %u",
+ archivedPayloadCrc, calculatedPayloadCrc, archivedHeaderCrc, calculatedHeaderCrc);
+ }
+
+ CleanupStack::PopAndDestroy( &file );
+ }
+
+ return validCrc;
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ReadArchiveFlagsL()
+//
+//
+// ---------------------------------------------------------------------------
+TBitFlags MMCScBkupArchiveUtils::ReadArchiveFlagsL( RFile64& aArchive )
+ {
+ TInt error = KErrNone;
+
+ // Calculate the offset to the archive flags:
+ const TUint archiveFlagsFileOffset = EArchiveOffsetArchiveFlags;
+
+ // Flags are four bytes. Read the existing raw flag data
+ TBuf8< KMMCScArchiveFlagsByteCount > flagData;
+ error = aArchive.Read( static_cast<TInt64>( archiveFlagsFileOffset ), flagData );
+ User::LeaveIfError( error );
+
+ // Interpret the flag data as real flags
+ RDesReadStream readStream( flagData );
+ CleanupClosePushL( readStream );
+ TUint32 archiveFlags = readStream.ReadUint32L();
+ CleanupStack::PopAndDestroy( &readStream );
+
+ // Done
+ TBitFlags ret;
+ ret.SetValue( archiveFlags );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::ReadArchiveVersionL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::ReadArchiveVersionL( RFile64& aArchive, TVersion& aVersion )
+ {
+ TInt error = KErrNone;
+
+ // Calculate the offset to the archive flags:
+ const TUint archiveVersionFileOffset = EArchiveOffsetFileFormatVersion;
+
+ // Flags are four bytes. Read the existing raw flag data
+ TBuf8< KMMCScArchiveVersionByteCount > versionData;
+ error = aArchive.Read( static_cast<TInt64>( archiveVersionFileOffset ), versionData );
+ User::LeaveIfError( error );
+
+ // Interpret the flag data as real flags
+ RDesReadStream readStream( versionData );
+ CleanupClosePushL( readStream );
+ aVersion.iMajor = readStream.ReadInt8L();
+ aVersion.iMinor = readStream.ReadInt8L();
+ aVersion.iBuild = readStream.ReadInt16L();
+ CleanupStack::PopAndDestroy( &readStream );
+ }
+
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::SetArchiveCrcL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::SetArchiveCrcL( RFile64& aArchive, TUint32 aCrc, TUint aOffset )
+ {
+ TInt error = KErrNone;
+
+ // Prepare externalized representation of crc
+ TBuf8< KMMCScArchiveCrcByteCount > crcData;
+ RDesWriteStream writeStream( crcData );
+ CleanupClosePushL( writeStream );
+ writeStream.WriteInt32L( aCrc );
+ writeStream.CommitL();
+ CleanupStack::PopAndDestroy( &writeStream );
+
+ // Then write crc to the file itself
+ error = aArchive.Write( static_cast<TInt64>( aOffset ), crcData );
+ User::LeaveIfError( error );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupArchiveUtils::CalculateCrcFromArchive()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupArchiveUtils::CalculateCrcFromArchive( TUint32& aCrc, RFile64& aArchive, TUint32 aOffset, TUint32 aLength )
+ {
+ const TInt KBigBufSize=0x10000;
+ const TInt KMediumBufSize=0x8000;
+ const TInt KSmallBufSize=0x1000;
+
+ // Allocate as large buffer as possible for crc validation, because
+ // need to read file content in chunks for crc calculation.
+ HBufC8* bufPtr = HBufC8::New(KBigBufSize);
+
+ if ( bufPtr == NULL )
+ bufPtr = HBufC8::New(KMediumBufSize);
+ if ( bufPtr == NULL )
+ bufPtr = HBufC8::New(KSmallBufSize);
+
+ if ( bufPtr != NULL)
+ {
+ TPtr8 copyBuf = bufPtr->Des();
+ TInt64 pos = aOffset;
+ TInt size = aLength;
+
+ // Loop through archive file skipping archive crc
+ while(size)
+ {
+ TInt s;
+
+ s = Min( size, copyBuf.MaxSize() );
+
+ TInt error = aArchive.Read( pos, copyBuf, s );
+
+ if ( error == KErrNone && copyBuf.Length() != s )
+ break;
+
+ pos += s;
+ size -= s;
+ Mem::Crc32(aCrc, copyBuf.Ptr(), copyBuf.Length());
+ }
+
+ delete bufPtr;
+ }
+ }
+#endif // RD_FILE_MANAGER_BACKUP
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/MMCScBkupLogger.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2005 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: MMCScBkupLogger implementation
+*
+*
+*/
+
+#include "MMCScBkupLogger.h"
+
+// System includes
+#include <coemain.h>
+#include <e32svr.h>
+#include <flogger.h>
+
+#if defined(__MMCSCBKUPLOGGING_ENABLED__)
+
+// Constants
+const TInt KMMCScBkupLoggingMaxLogTextLength = 1024;
+const TInt KMMCScBkupLoggingMaxLogSize = 10240;
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// MMCScBkupLogger::LogRaw()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupLogger::LogRaw( const TDesC& aData )
+ {
+#if defined(__MMCSCBKUPLOGGING_MODE_FILE__)
+
+ _LIT( KMMCScBkupLoggingDir, "FMBkup" );
+ _LIT( KMMCScBkupLoggingFileName, "FMBkup.txt" );
+
+ /////////////
+ // FLOGGER
+ /////////////
+ RFileLogger::Write( KMMCScBkupLoggingDir, KMMCScBkupLoggingFileName, EFileLoggingModeAppend, aData );
+
+#elif defined(__MMCSCBKUPLOGGING_MODE_RDEBUG__)
+
+ /////////////
+ // RDEBUG
+ /////////////
+ _LIT( KLogComponentName, "[MMC] ");
+ HBufC* printBuf = HBufC::New( aData.Length() + KLogComponentName().Length() );
+ if ( printBuf )
+ {
+ TPtr pBuf( printBuf->Des() );
+ pBuf.Append( KLogComponentName );
+ pBuf.Append( aData );
+ RDebug::Print( *printBuf );
+ delete printBuf;
+ }
+ else
+ {
+ RDebug::Print( aData );
+ }
+
+#endif
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupLogger::Log()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupLogger::Log( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+
+ HBufC* buf = HBufC::New( KMMCScBkupLoggingMaxLogTextLength );
+ if ( buf )
+ {
+ TPtr pBuf( buf->Des() );
+ pBuf.FormatList(aFmt, list);
+ LogRaw( *buf );
+ delete buf;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupLogger::DataType()
+//
+//
+// ---------------------------------------------------------------------------
+const TDesC& MMCScBkupLogger::DataType( TMMCScBkupOwnerDataType aType )
+ {
+ switch( aType )
+ {
+ case EMMCScBkupOwnerDataTypeDataOwner:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypeDataOwner");
+ return KRet;
+ }
+ case EMMCScBkupOwnerDataTypeJavaData:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypeJavaData");
+ return KRet;
+ }
+ case EMMCScBkupOwnerDataTypePublicData:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypePublicData");
+ return KRet;
+ }
+ case EMMCScBkupOwnerDataTypeSystemData:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypeSystemData");
+ return KRet;
+ }
+ case EMMCScBkupOwnerDataTypeActiveData:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypeActiveData");
+ return KRet;
+ }
+ case EMMCScBkupOwnerDataTypePassiveData:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypePassiveData");
+ return KRet;
+ }
+ case EMMCScBkupOwnerDataTypeAny:
+ {
+ _LIT(KRet, "EMMCScBkupOwnerDataTypeAny");
+ return KRet;
+ }
+ default:
+ break;
+ }
+
+ _LIT(KRet, "UNKNOWN!");
+ return KRet;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupLogger::FriendlyNameForSID()
+//
+//
+// ---------------------------------------------------------------------------
+const TDesC& MMCScBkupLogger::FriendlyNameForSID( TSecureId aSID )
+ {
+ switch( aSID.iId )
+ {
+ case 0x10202be9:
+ {
+ _LIT(KRet, "[CentRep]");
+ return KRet;
+ }
+ case 0x10008d38:
+ {
+ _LIT(KRet, "[FavouritesSrv]");
+ return KRet;
+ }
+ case 0x101f51f2:
+ {
+ _LIT(KRet, "[RightsServer]");
+ return KRet;
+ }
+ case 0x101f7993:
+ {
+ _LIT(KRet, "[VpnManager]");
+ return KRet;
+ }
+ case 0x101fd288:
+ {
+ _LIT(KRet, "[EventMediator]");
+ return KRet;
+ }
+ default:
+ break;
+ }
+
+ _LIT(KRet, "");
+ return KRet;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupLogger::LogFile()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupLogger::LogFile( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+
+ HBufC* buf = HBufC::New( KMMCScBkupLoggingMaxLogTextLength );
+ if ( buf )
+ {
+ TPtr pBuf( buf->Des() );
+ pBuf.FormatList(aFmt, list);
+#ifdef _DEBUG
+ LogRaw( *buf );
+#endif
+ RFile64 file;
+ RFs& fsSession(CCoeEnv::Static()->FsSession());
+ TEntry entry;
+ TInt error;
+
+ if ( fsSession.Entry( KMMCScBkupLoggingFullPathAndName, entry ) == KErrNone )
+ {
+ error = file.Open( fsSession, KMMCScBkupLoggingFullPathAndName, EFileWrite | EFileShareExclusive );
+ }
+ else
+ {
+ entry.iSize = 0;
+ error = file.Create( fsSession, KMMCScBkupLoggingFullPathAndName, EFileWrite | EFileShareExclusive );
+ }
+
+ if(error == KErrNone)
+ {
+ TInt64 size = 0;
+
+ error = file.Size( size );
+ if(error == KErrNone && size < KMMCScBkupLoggingMaxLogSize)
+ {
+ HBufC8* buf8 = HBufC8::New( KMMCScBkupLoggingMaxLogTextLength );
+ if(buf8)
+ {
+ const TText8 KLineFeed( '\n' );
+ TPtr8 data( buf8->Des() );
+
+ data.Copy(buf->Des());
+ data.Append(KLineFeed);
+ file.Write(static_cast<TInt64>(entry.iSize), data);
+ delete buf8;
+ }
+ }
+ }
+ file.Close();
+ delete buf;
+ }
+ }
+
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/MMCScBkupPhoneModelUtils.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2005 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: MMCScBkupPhoneModelUtils implementation
+*
+*
+*/
+
+#include "MMCScBkupPhoneModelUtils.h"
+
+// User includes
+#include "MMCScBkupArchiveFlags.h"
+#include "MMCScBkupArchiveUtils.h"
+
+// System includes
+#include <sysutil.h>
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// MMCScBkupPhoneModelUtils::CurrentPhoneModelLC()
+//
+//
+// ---------------------------------------------------------------------------
+HBufC8* MMCScBkupPhoneModelUtils::CurrentPhoneModelLC()
+ {
+ HBufC8* ret = HBufC8::NewLC( MaximumPhoneModelIdentifierLength() );
+ //
+ TBuf<KSysUtilVersionTextLength> version;
+ const TInt thirdLine(3);
+ const TInt err = SysUtil::GetSWVersion( version);
+
+ if ( err == KErrNone )
+ {
+ // Assume syntax Vxx.xx\ndd-mm-yy\nNHL-vvv\n(c)
+ // Extract model version from third line
+ for(TInt i(0); i < thirdLine; i++)
+ {
+ TInt cutPos = version.Locate( '\n' );
+
+ if( cutPos == KErrNotFound )
+ {
+ break;
+ }
+ else if(i < ( thirdLine - 1 ) )
+ {
+ version.Delete( 0, cutPos + 1 );
+ }
+ else
+ {
+ cutPos = version.Locate( '\n' );
+ if( cutPos != KErrNotFound )
+ {
+ version.Delete( cutPos, (version.Length() - cutPos) );
+ }
+ ret->Des().Copy( version );
+ }
+ }
+ }
+
+ // Implicit requirement - should always be the case though
+ __ASSERT_ALWAYS( ret->Length() <= 255, User::Invariant());
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupPhoneModelUtils::MaximumPhoneModelIdentifierLength()
+//
+//
+// ---------------------------------------------------------------------------
+TInt MMCScBkupPhoneModelUtils::MaximumPhoneModelIdentifierLength()
+ {
+ return KSysUtilVersionTextLength;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupPhoneModelUtils::ArchiveRestorePermissableL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupPhoneModelUtils::ArchiveRestorePermissableL( const TDesC8& aPhoneModelData, TBitFlags aArchiveFlags, const TVersion& aArchiveVersion )
+ {
+ TBool restoreOkay = EFalse;
+
+ // Check version first
+ restoreOkay = ( aArchiveVersion.iMajor >= KMMCScBkupArchiveFileFormatFirstRestorableMajorVersion );
+
+ // Check flags next
+ if ( restoreOkay )
+ {
+ restoreOkay = ( aArchiveFlags.Value() & EMMCScBkupArchiveFlagsContentValid );
+
+ // Only check model if the flags were alright
+ if ( restoreOkay )
+ {
+ HBufC8* currentData = CurrentPhoneModelLC();
+ restoreOkay = ( aPhoneModelData.Compare( *currentData ) == 0 );
+ CleanupStack::PopAndDestroy( currentData );
+ }
+ }
+
+ // Done
+ return restoreOkay;
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/MMCScBkupSBEUtils.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,524 @@
+/*
+* Copyright (c) 2005 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: MMCScBkupSBEUtils implementation
+*
+*
+*/
+
+#include "MMCScBkupSBEUtils.h"
+
+// System includes
+#include <e32property.h>
+#include <connect/sbdefs.h>
+#include "CMMCScBkupDataOwnerInfo.h"
+
+// Namespaces
+using namespace conn;
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::SecureIdFromGenericL()
+//
+//
+// ---------------------------------------------------------------------------
+TSecureId MMCScBkupSBEUtils::SecureIdFromGenericL(const CSBGenericDataType& aGeneric)
+ {
+ TSecureId ret = 0;
+ CSBGenericDataType* nonConstOriginal = const_cast<CSBGenericDataType*>(&aGeneric);
+ const TSBDerivedType type = aGeneric.DerivedTypeL();
+ //
+ switch(type)
+ {
+ case ESIDDerivedType:
+ {
+ CSBSecureId* temp = CSBSecureId::NewL( nonConstOriginal );
+ CleanupStack::PushL( temp );
+ ret = temp->SecureIdL();
+ CleanupStack::PopAndDestroy( temp );
+ break;
+ }
+ case ESIDTransferDerivedType:
+ {
+ // First make a generic transfer type object...
+ CSBGenericTransferType* transferTypeTemp = CSBGenericTransferType::NewL( nonConstOriginal->Externalise() );
+ CleanupStack::PushL(transferTypeTemp);
+
+ // Now make instance transfer type
+ CSBSIDTransferType* temp = CSBSIDTransferType::NewL( transferTypeTemp );
+ CleanupStack::PushL(temp);
+
+ // Now get the result
+ ret = temp->SecureIdL();
+
+ // Tidy up
+ CleanupStack::PopAndDestroy(2, transferTypeTemp);
+ break;
+ }
+ case EPackageDerivedType:
+ {
+ CSBPackageId* temp = CSBPackageId::NewL( nonConstOriginal );
+ CleanupStack::PushL( temp );
+ ret = temp->SecureIdL();
+ CleanupStack::PopAndDestroy( temp );
+ break;
+ }
+ case EPackageTransferDerivedType:
+ case EJavaDerivedType:
+ case EJavaTransferDerivedType:
+ default:
+ __BREAKPOINT();
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::PackageIdFromGenericL()
+//
+//
+// ---------------------------------------------------------------------------
+TUid MMCScBkupSBEUtils::PackageIdFromGenericL(const CSBGenericDataType& aGeneric)
+ {
+ TUid ret = KNullUid;
+ CSBGenericDataType* nonConstOriginal = const_cast<CSBGenericDataType*>(&aGeneric);
+ const TSBDerivedType type = aGeneric.DerivedTypeL();
+ //
+ switch(type)
+ {
+ case EPackageDerivedType:
+ {
+ CSBPackageId* temp = CSBPackageId::NewL( nonConstOriginal );
+ CleanupStack::PushL(temp);
+ ret = temp->PackageIdL();
+ CleanupStack::PopAndDestroy(temp);
+ break;
+ }
+ case EPackageTransferDerivedType:
+ {
+ // First make a generic transfer type object...
+ CSBGenericTransferType* transferTypeTemp = CSBGenericTransferType::NewL( nonConstOriginal->Externalise() );
+ CleanupStack::PushL(transferTypeTemp);
+
+ // Now make instance transfer type
+ CSBPackageTransferType* temp = CSBPackageTransferType::NewL( transferTypeTemp );
+ CleanupStack::PushL(temp);
+
+ // Now get the result
+ ret = temp->PackageIdL();
+
+ // Tidy up
+ CleanupStack::PopAndDestroy(2, transferTypeTemp);
+ break;
+ }
+ case ESIDDerivedType:
+ case ESIDTransferDerivedType:
+ case EJavaDerivedType:
+ case EJavaTransferDerivedType:
+ default:
+ __BREAKPOINT();
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::JavaHashFromGenericLC()
+//
+//
+// ---------------------------------------------------------------------------
+HBufC* MMCScBkupSBEUtils::JavaHashFromGenericLC(const CSBGenericDataType& aGeneric)
+ {
+ HBufC* ret = NULL;
+ CSBGenericDataType* nonConstOriginal = const_cast<CSBGenericDataType*>(&aGeneric);
+ const TSBDerivedType type = aGeneric.DerivedTypeL();
+ //
+ switch(type)
+ {
+ case EJavaDerivedType:
+ {
+ CSBJavaId* temp = CSBJavaId::NewL( nonConstOriginal );
+ CleanupStack::PushL(temp);
+ ret = temp->SuiteHashL().AllocL();
+ CleanupStack::PopAndDestroy(temp);
+ CleanupStack::PushL( ret );
+ break;
+ }
+ case EJavaTransferDerivedType:
+ {
+ // First make a generic transfer type object...
+ CSBGenericTransferType* transferTypeTemp = CSBGenericTransferType::NewL( nonConstOriginal->Externalise() );
+ CleanupStack::PushL(transferTypeTemp);
+
+ // Now make a instance transfer type
+ CSBJavaTransferType* temp = CSBJavaTransferType::NewL( transferTypeTemp );
+ CleanupStack::PushL(temp);
+
+ // Now get the result
+ ret = temp->SuiteHashL().AllocL();
+
+ // Tidy up
+ CleanupStack::PopAndDestroy(2, transferTypeTemp);
+ CleanupStack::PushL( ret );
+ break;
+ }
+ case ESIDDerivedType:
+ case ESIDTransferDerivedType:
+ case EPackageDerivedType:
+ case EPackageTransferDerivedType:
+ default:
+ __BREAKPOINT();
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ if ( ret == NULL )
+ {
+ ret = KNullDesC().AllocLC();
+ }
+ //
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::CopyLC()
+//
+//
+// ---------------------------------------------------------------------------
+CSBGenericDataType* MMCScBkupSBEUtils::CopyLC(const CSBGenericDataType& aToBeCopied)
+ {
+ CSBGenericDataType* ret = NULL;
+
+ // Have to do this through poor implementation of SBE API
+ CSBGenericDataType* nonConstOriginal = const_cast<CSBGenericDataType*>(&aToBeCopied);
+ //
+ const TSBDerivedType type = nonConstOriginal->DerivedTypeL();
+ switch(type)
+ {
+ case ESIDDerivedType:
+ ret = CSBSecureId::NewL(nonConstOriginal);
+ break;
+ case EPackageDerivedType:
+ ret = CSBPackageId::NewL(nonConstOriginal);
+ break;
+ case EJavaDerivedType:
+ ret = CSBJavaId::NewL(nonConstOriginal);
+ break;
+ case ESIDTransferDerivedType:
+ case EPackageTransferDerivedType:
+ case EJavaTransferDerivedType:
+ {
+ // Must first create a generic transfer type object... sigh...
+ CSBGenericTransferType* transferType = CSBGenericTransferType::NewL( nonConstOriginal->Externalise() );
+ CleanupStack::PushL( transferType );
+ switch(type)
+ {
+ case ESIDTransferDerivedType:
+ ret = CSBSIDTransferType::NewL( transferType );
+ break;
+ case EPackageTransferDerivedType:
+ ret = CSBPackageTransferType::NewL( transferType );
+ break;
+ case EJavaTransferDerivedType:
+ ret = CSBJavaTransferType::NewL( transferType );
+ break;
+ default:
+ break;
+ }
+ CleanupStack::PopAndDestroy( transferType );
+ }
+ default:
+ break;
+ }
+ //
+ if (!ret)
+ {
+ __BREAKPOINT();
+ User::Leave(KErrNotSupported);
+ }
+ CleanupStack::PushL(ret);
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::TransferTypeLC()
+//
+//
+// ---------------------------------------------------------------------------
+CSBGenericTransferType* MMCScBkupSBEUtils::TransferTypeLC( const CSBGenericDataType& aDT, TDriveNumber aDrive,
+ TTransferDataType aTransferType, TInt aVersion )
+ {
+ CSBGenericTransferType* ret = NULL;
+
+ // Have to do this through poor implementation of SBE API
+ CSBGenericDataType* nonConstOriginal = const_cast< CSBGenericDataType* >( &aDT );
+ //
+ const TSBDerivedType type = nonConstOriginal->DerivedTypeL();
+ switch( type )
+ {
+ case ESIDDerivedType:
+ case ESIDTransferDerivedType:
+ {
+ const TSecureId secureId = SecureIdFromGenericL( aDT );
+ ret = CSBSIDTransferType::NewL( secureId, aDrive, aTransferType );
+ break;
+ }
+
+ case EPackageDerivedType:
+ {
+ TSecureId secureId = SecureIdFromGenericL( aDT );
+ if( secureId.iId == KNullUid.iUid && aVersion > CMMCScBkupDataOwnerInfo::EStreamFormatVersionFirst )
+ {
+ secureId = MMCScBkupSBEUtils::PackageIdFromGenericL( aDT );
+ }
+ ret = CSBSIDTransferType::NewL( secureId, aDrive, aTransferType );
+ break;
+ }
+
+ default:
+ case EPackageTransferDerivedType:
+ case EJavaDerivedType:
+ case EJavaTransferDerivedType:
+ __BREAKPOINT();
+ User::Leave( KErrNotSupported );
+ break;
+ }
+ //
+ CleanupStack::PushL( ret );
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::TransferTypeLC()
+//
+//
+// ---------------------------------------------------------------------------
+CSBGenericTransferType* MMCScBkupSBEUtils::TransferTypeLC(const CSBGenericDataType& aDT, TDriveNumber aDrive,
+ TPackageDataType aDataType, TInt /*aVersion*/)
+ {
+ CSBGenericTransferType* ret = NULL;
+
+ // Have to do this through poor implementation of SBE API
+ CSBGenericDataType* nonConstOriginal = const_cast<CSBGenericDataType*>(&aDT);
+ //
+ const TSBDerivedType type = nonConstOriginal->DerivedTypeL();
+ switch(type)
+ {
+ case EPackageDerivedType:
+ case EPackageTransferDerivedType:
+ {
+ const TUid packageId = PackageIdFromGenericL(aDT);
+ ret = CSBPackageTransferType::NewL(packageId, aDrive, aDataType);
+ break;
+ }
+
+ default:
+ case ESIDDerivedType:
+ case ESIDTransferDerivedType:
+ case EJavaDerivedType:
+ case EJavaTransferDerivedType:
+ __BREAKPOINT();
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ CleanupStack::PushL(ret);
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::TransferTypeLC()
+//
+//
+// ---------------------------------------------------------------------------
+CSBGenericTransferType* MMCScBkupSBEUtils::TransferTypeLC(const CSBGenericDataType& aDT, TDriveNumber aDrive,
+ TJavaTransferType aDataType, TInt /*aVersion*/)
+ {
+ CSBGenericTransferType* ret = NULL;
+
+ // Have to do this through poor implementation of SBE API
+ CSBGenericDataType* nonConstOriginal = const_cast<CSBGenericDataType*>(&aDT);
+ //
+ const TSBDerivedType type = nonConstOriginal->DerivedTypeL();
+ switch(type)
+ {
+ case EJavaDerivedType:
+ case EJavaTransferDerivedType:
+ {
+ HBufC* hash = JavaHashFromGenericLC( aDT );
+ ret = CSBJavaTransferType::NewL( *hash, aDrive, aDataType );
+ CleanupStack::PopAndDestroy( hash );
+ break;
+ }
+
+ default:
+ case ESIDDerivedType:
+ case ESIDTransferDerivedType:
+ case EPackageDerivedType:
+ case EPackageTransferDerivedType:
+ __BREAKPOINT();
+ User::Leave(KErrNotSupported);
+ break;
+ }
+ //
+ CleanupStack::PushL(ret);
+ return ret;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::PhoneIsInBackupOrRestoreModeL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupSBEUtils::PhoneIsInBackupOrRestoreModeL()
+ {
+ TBool backupInProgress = EFalse;
+ //
+ TInt value = 0;
+ const TInt error = RProperty::Get( KUidSystemCategory, KUidBackupRestoreKey, value );
+ User::LeaveIfError( error );
+ //
+ const TBURPartType partType = static_cast< TBURPartType >( value & KBURPartTypeMask );
+ if (value != 0)
+ {
+ switch(partType)
+ {
+ case EBURUnset:
+ case EBURNormal:
+ break;
+ case EBURBackupFull:
+ case EBURBackupPartial:
+ case EBURRestoreFull:
+ case EBURRestorePartial:
+ backupInProgress = ETrue;
+ break;
+ }
+ }
+ //
+ return backupInProgress;
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::EndBackupOrRestoreL()
+//
+//
+// ---------------------------------------------------------------------------
+void MMCScBkupSBEUtils::EndBackupOrRestoreL( CSBEClient& aSBEClient )
+ {
+ TDriveList nullDriveList;
+ aSBEClient.SetBURModeL( nullDriveList, EBURNormal, ENoBackup);
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::HasSystemDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupSBEUtils::HasSystemDataL( const CDataOwnerInfo& aDataOwner )
+ {
+ const TSBDerivedType type = aDataOwner.Identifier().DerivedTypeL();
+ const TBool systemDataType = ( type == EPackageDerivedType ||
+ type == EPackageTransferDerivedType );
+ const TBool hasSystemData = ( aDataOwner.CommonSettings() & EHasSystemFiles );
+ //
+ return ( systemDataType && hasSystemData );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::HasJavaDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupSBEUtils::HasJavaDataL( const CDataOwnerInfo& aDataOwner )
+ {
+ const TSBDerivedType type = aDataOwner.Identifier().DerivedTypeL();
+ const TBool javaDataType = ( type == EJavaDerivedType ||
+ type == EJavaTransferDerivedType );
+ const TBool hasSystemData = ( aDataOwner.CommonSettings() & EHasSystemFiles );
+
+ // Java abuses the "has system files flag" - this has been confirmed
+ // with Symbian.
+ return ( javaDataType && hasSystemData );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::HasPassiveDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupSBEUtils::HasPassiveDataL( const CDataOwnerInfo& aDataOwner )
+ {
+ const TSBDerivedType type = aDataOwner.Identifier().DerivedTypeL();
+ const TBool passiveDataType = ( type == ESIDDerivedType ||
+ type == ESIDTransferDerivedType ||
+ type == EPackageDerivedType ||
+ type == EPackageTransferDerivedType );
+ const TBool hasPassiveData = ( aDataOwner.CommonSettings() & EPassiveBUR );
+ //
+ return ( passiveDataType && hasPassiveData );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::HasActiveDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupSBEUtils::HasActiveDataL( const CDataOwnerInfo& aDataOwner )
+ {
+ const TSBDerivedType type = aDataOwner.Identifier().DerivedTypeL();
+ const TBool activeDataType = ( type == ESIDDerivedType ||
+ type == ESIDTransferDerivedType ||
+ type == EPackageDerivedType ||
+ type == EPackageTransferDerivedType );
+ const TBool hasActiveData = ( aDataOwner.CommonSettings() & EActiveBUR );
+ //
+ return ( activeDataType && hasActiveData );
+ }
+
+
+// ---------------------------------------------------------------------------
+// MMCScBkupSBEUtils::HasPublicDataL()
+//
+//
+// ---------------------------------------------------------------------------
+TBool MMCScBkupSBEUtils::HasPublicDataL( const CDataOwnerInfo& aDataOwner )
+ {
+ const TSBDerivedType type = aDataOwner.Identifier().DerivedTypeL();
+ const TBool publicDataType = ( type == ESIDDerivedType ||
+ type == ESIDTransferDerivedType ||
+ type == EPackageDerivedType ||
+ type == EPackageTransferDerivedType );
+ const TBool hasPublicData = ( aDataOwner.PassiveSettings() & EHasPublicFiles );
+ //
+ return ( hasPublicData && publicDataType );
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/RMMCScBkupArchiveStreams.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2005 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: RMMCScBkupArchiveReadStream implementation
+*
+*
+*/
+
+#include "RMMCScBkupArchiveStreams.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "CMMCScBkupArchiveDataManager.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::RMMCScBkupArchiveBuf()
+//
+//
+// ---------------------------------------------------------------------------
+RMMCScBkupArchiveBuf::RMMCScBkupArchiveBuf()
+: iADM(NULL)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::AttachL()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveBuf::AttachL( CMMCScBkupArchiveDataManager& aADM, RFile64& aFile, TInt aPos, TBool aForWrite )
+ {
+ //__LOG3("RMMCScBkupArchiveBuf::AttachL() - START - aFile: 0x%08x, aPos: %d, aForWrite: %d", aFile.SubSessionHandle(), aPos, aForWrite);
+
+ // Prevent RFileBuf from resetting our file handle
+ RFile64 file(aFile);
+ RFileBuf::Attach(file, aPos);
+
+ // We save the attach pos so that we can update the ADM with the final
+ // length of data that was read or written...
+ iInfo.Reset();
+ iInfo.SetOffset(aPos);
+
+ iWriteMode = aForWrite;
+ iADM = &aADM;
+
+ //__LOG("RMMCScBkupArchiveBuf::AttachL() - END");
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::Close()
+//
+//
+// ---------------------------------------------------------------------------
+EXPORT_C void RMMCScBkupArchiveBuf::Close()
+ {
+ //__LOG1("RMMCScBkupArchiveBuf::Close() - START - File: 0x%08x", File().SubSessionHandle());
+
+ TRAP_IGNORE(DoSynchL());
+ Detach();
+ Reset();
+
+ //__LOG1("RMMCScBkupArchiveBuf::Close() - END - File: 0x%08x", File().SubSessionHandle());
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::IsOpen()
+//
+//
+// ---------------------------------------------------------------------------
+TBool RMMCScBkupArchiveBuf::IsOpen() const
+ {
+ return (File().SubSessionHandle() != KNullHandle);
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::DoRelease()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveBuf::DoRelease()
+ {
+ //__LOG1("RMMCScBkupArchiveBuf::DoRelease() - START - File: 0x%08x", File().SubSessionHandle());
+
+ TRAP_IGNORE( UpdateInfoL() );
+ Detach();
+ RFileBuf::DoRelease();
+
+ //__LOG1("RMMCScBkupArchiveBuf::DoRelease() - END - File: 0x%08x", File().SubSessionHandle());
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::DoSynchL()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveBuf::DoSynchL()
+ {
+ //__LOG1("RMMCScBkupArchiveBuf::DoSynchL() - START - File: 0x%08x", File().SubSessionHandle());
+
+ RFileBuf::DoSynchL();
+ UpdateInfoL();
+
+ //__LOG1("RMMCScBkupArchiveBuf::DoSynchL() - END - File: 0x%08x", File().SubSessionHandle());
+ }
+
+
+#ifdef RD_FILE_MANAGER_BACKUP
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::DoWriteL()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveBuf::DoWriteL(const TAny* aPtr,TInt aLength)
+ {
+ iADM->CalculateCrc(aPtr, aLength);
+ RFileBuf::DoWriteL(aPtr, aLength);
+ }
+#endif
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveBuf::UpdateInfoL()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveBuf::UpdateInfoL()
+ {
+ //__LOG1("RMMCScBkupArchiveBuf::UpdateInfoL() - START - File: 0x%08x", File().SubSessionHandle());
+
+ // Update our stats
+ if ( iADM && File().SubSessionHandle() != KNullHandle )
+ {
+ TStreamPos pos;
+ if ( iWriteMode )
+ {
+ pos = TellL( MStreamBuf::EWrite );
+ //__LOG("RMMCScBkupArchiveBuf::UpdateInfoL() - write mode...");
+ }
+ else
+ {
+ pos = TellL( MStreamBuf::ERead );
+ //__LOG("RMMCScBkupArchiveBuf::UpdateInfoL() - read mode...");
+ }
+ //
+ const TInt currentOffset = pos.Offset();
+ const TInt length = currentOffset - iInfo.Offset();
+
+ //__LOG1("RMMCScBkupArchiveBuf::UpdateInfoL() - currentOffset: %8d", currentOffset);
+ //__LOG1("RMMCScBkupArchiveBuf::UpdateInfoL() - length: %8d", length);
+ iInfo.SetLength( length );
+
+ // Inform ADM of final info
+ iADM->SetCurrentVector( iInfo );
+ }
+
+ //__LOG1("RMMCScBkupArchiveBuf::UpdateInfoL() - END - File: 0x%08x", File().SubSessionHandle());
+ }
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveReadStream::OpenLC()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveReadStream::OpenLC( CMMCScBkupArchiveDataManager& aADM, RFile64& aArchiveFile, TInt aPos )
+ {
+ CleanupClosePushL( *this );
+ //
+ iSource.AttachL( aADM, aArchiveFile, aPos, EFalse );
+ RReadStream::Attach( &iSource );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveReadStream::IsOpen()
+//
+//
+// ---------------------------------------------------------------------------
+TBool RMMCScBkupArchiveReadStream::IsOpen() const
+ {
+ return iSource.IsOpen();
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveWriteStream::OpenLC()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupArchiveWriteStream::OpenLC( CMMCScBkupArchiveDataManager& aADM, RFile64& aArchiveFile, TInt aPos )
+ {
+ CleanupClosePushL( *this );
+ //
+ iSink.AttachL( aADM, aArchiveFile, aPos, ETrue );
+ RWriteStream::Attach( &iSink );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupArchiveWriteStream::IsOpen()
+//
+//
+// ---------------------------------------------------------------------------
+TBool RMMCScBkupArchiveWriteStream::IsOpen() const
+ {
+ return iSink.IsOpen();
+ }
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/RMMCScBkupProgressSizer.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2005-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: RMMCScBkupProgressSizer implementation
+*
+*
+*/
+
+#include "RMMCScBkupProgressSizer.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+
+// Constants
+const TInt KMMCScBkupWeightingFactor = 10000;
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::RMMCScBkupProgressSizer()
+//
+// C++ constructor.
+// ---------------------------------------------------------------------------
+RMMCScBkupProgressSizer::RMMCScBkupProgressSizer( const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperationTypes )
+: iDriveAndOperationTypes( aDriveAndOperationTypes ), iDriveFilter( aDriveAndOperationTypes.DriveList() )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::BackupTotalProgressValueL()
+//
+// Calculate the total amount of progress steps that a particular data owner
+// requires. This method can only be called after all of the sizing info
+// has been obtained from the SBE
+// ---------------------------------------------------------------------------
+TInt64 RMMCScBkupProgressSizer::BackupTotalProgressValueL( const CMMCScBkupDataOwnerInfo& aDataOwner )
+ {
+ __LOG(" ");
+ __LOG1("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - START - DO: 0x%08x", aDataOwner.SecureId().iId);
+ TInt64 totalStepCount = 0;
+
+ //////////////////////////////////////////////////////////////////////
+ // THESE ELEMENTS HAVE PSEUDO-PROGRESS - that is, the report a fixed
+ // number of progress nibbles per operation. For example:
+ //
+ // TYPE DRIVE PROGRESS
+ // =======================================
+ // ACTIVE (C:) 1 x 2000
+ // PASSIVE (C:) 1 x 2000
+ // SYSTEM (C:, E:) 2 x 2000
+ // JAVA (C:) 1 x 2000
+ // PUBLIC (C: = 12k) 12 x 1024
+ // ----------------------------------------
+ // total 10000 + (12 x 1024)
+ //
+ //////////////////////////////////////////////////////////////////////
+
+ const CDataOwnerInfo& sbeDataOwner = aDataOwner.Owner();
+
+ // Passive data
+ if ( MMCScBkupSBEUtils::HasPassiveDataL( sbeDataOwner ) )
+ {
+ const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypePassiveData );
+ __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - passive - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+ totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+ }
+
+ // Active data
+ if ( MMCScBkupSBEUtils::HasActiveDataL( sbeDataOwner ) )
+ {
+ const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypeActiveData );
+ __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - active - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+ totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+ }
+
+ // System data
+ if ( MMCScBkupSBEUtils::HasSystemDataL( sbeDataOwner ) )
+ {
+ const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypeSystemData );
+ __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - system - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+ totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+ }
+
+ // Java data
+ if ( MMCScBkupSBEUtils::HasJavaDataL( sbeDataOwner ) )
+ {
+ const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypeJavaData );
+ __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - java - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+ totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+ }
+
+
+ ///////////////////////////////////
+ // PUBLIC REPORTS ACTUAL SIZING
+ ///////////////////////////////////
+
+ // Public data
+ if ( MMCScBkupSBEUtils::HasPublicDataL( sbeDataOwner ) )
+ {
+ const TInt64 size = AmountOfPublicDataToBeRestoredL( aDataOwner );
+ __LOG1("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - public - %Ld of progress", size);
+ totalStepCount += size;
+ }
+
+ //
+ __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - END - DO: 0x%08x, totalStepCount: %8Ld", aDataOwner.SecureId().iId, totalStepCount);
+ return totalStepCount;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::BackupReportFixedProgressForOpL()
+//
+//
+// ---------------------------------------------------------------------------
+void RMMCScBkupProgressSizer::BackupReportFixedProgressForOpL( MMMCScBkupProgressObserver& aProgressManager, TMMCScBkupOwnerDataType aType )
+ {
+ switch( aType )
+ {
+ case EMMCScBkupOwnerDataTypeSystemData:
+ case EMMCScBkupOwnerDataTypeActiveData:
+ case EMMCScBkupOwnerDataTypePassiveData:
+ case EMMCScBkupOwnerDataTypeJavaData:
+ __LOG2("RMMCScBkupProgressSizer::BackupReportFixedProgressForOpL() - aType: %d, amount: %d ", aType, KMMCScBkupWeightingFactor );
+ aProgressManager.MMCScBkupHandleProgress( KMMCScBkupWeightingFactor );
+ break;
+ default:
+ case EMMCScBkupOwnerDataTypeDataOwner:
+ case EMMCScBkupOwnerDataTypePublicData:
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::RestoreCombinedDataSizeL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 RMMCScBkupProgressSizer::RestoreCombinedDataSizeL( const CMMCScBkupDataOwnerInfo& aOwner )
+ {
+ TInt64 size = 0;
+ //
+ iDriveFilter.Reset();
+ iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+ //
+ TDriveNumber drive = EDriveA;
+ while ( iDriveFilter.NextValidDrive( drive ) )
+ {
+ for( TInt i=0; i<EMMCScBkupOwnerDataTypeCount; i++ )
+ {
+ const TMMCScBkupOwnerDataType dataType = static_cast< TMMCScBkupOwnerDataType > ( i );
+ const TBool allowedForDrive = iDriveAndOperationTypes.IsDataTypeAllowedToAccessDrive( drive, dataType );
+ //
+ if ( allowedForDrive )
+ {
+ // Get the amount of data for this drive
+ size += aOwner.OperationalSize( dataType, drive );
+ }
+ }
+ }
+ //
+ return size;
+ }
+
+
+
+
+
+
+
+
+
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::NumberOfDriveOpsRequiredL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt RMMCScBkupProgressSizer::NumberOfDriveOpsRequiredL( const CMMCScBkupDataOwnerInfo& aOwner, TMMCScBkupOwnerDataType aType )
+ {
+ TInt count = 0;
+ //
+ iDriveFilter.Reset();
+ iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+ //
+ TDriveNumber drive = EDriveA;
+ while ( iDriveFilter.NextValidDrive( drive ) )
+ {
+ const TBool allowedForDrive = iDriveAndOperationTypes.IsDataTypeAllowedToAccessDrive( drive, aType );
+ //
+ if ( allowedForDrive )
+ {
+ ++count;
+ }
+ }
+ //
+ return count;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::AmountOfPublicDataToBeRestoredL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt64 RMMCScBkupProgressSizer::AmountOfPublicDataToBeRestoredL( const CMMCScBkupDataOwnerInfo& aOwner )
+ {
+ TInt64 size = 0;
+ //
+ iDriveFilter.Reset();
+ iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+ //
+ TDriveNumber drive = EDriveA;
+ while ( iDriveFilter.NextValidDrive( drive ) )
+ {
+ const TBool allowedForDrive = iDriveAndOperationTypes.IsDataTypeAllowedToAccessDrive( drive, EMMCScBkupOwnerDataTypePublicData );
+ //
+ if ( allowedForDrive )
+ {
+ // Get the amount of data for this drive
+ size += aOwner.OperationalSize( EMMCScBkupOwnerDataTypePublicData, drive );
+ }
+ }
+ //
+ return size;
+ }
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/TMMCScBkupArchiveVector.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2005 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: TMMCScBkupArchiveVector implementation
+*
+*
+*/
+
+#include "TMMCScBkupArchiveVector.h"
+
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupArchiveVector::ExternalizedSize()
+//
+//
+// ---------------------------------------------------------------------------
+
+TInt TMMCScBkupArchiveVector::ExternalizedSize()
+ {
+ return 20; // 4 bytes for offset, 4 bytes for length, 4 bytes stream version, 4 bytes spare1, 4 bytes spare2
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupArchiveVector::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+
+void TMMCScBkupArchiveVector::ExternalizeL(RWriteStream& aStream) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( Offset() );
+ aStream.WriteInt32L( Length() );
+ aStream.WriteInt32L( 0 ); // Spare1
+ aStream.WriteInt32L( 0 ); // Spare2
+ }
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupArchiveVector::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+
+void TMMCScBkupArchiveVector::InternalizeL(RReadStream& aStream)
+ {
+ aStream.ReadInt32L(); // stream format version
+ iOffset = aStream.ReadInt32L();
+ iLength = aStream.ReadInt32L();
+ aStream.ReadInt32L(); // Spare1
+ aStream.ReadInt32L(); // Spare2
+ //
+ if (iOffset < 0 || iLength < 0)
+ {
+ User::Leave(KErrCorrupt);
+ }
+ }
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupArchiveDriveAndVector::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupArchiveDriveAndVector::InternalizeL( RReadStream& aStream )
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ aStream.ReadInt32L(); // spare3
+ //
+ iDrive = static_cast<TDriveNumber>( aStream.ReadUint8L() );
+ aStream >> iVector;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupArchiveDriveAndVector::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupArchiveDriveAndVector::ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ aStream.WriteInt32L( 0 ); // spare3
+ //
+ aStream.WriteUint8L( iDrive );
+ aStream << iVector;
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/TMMCScBkupDriveAndSize.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2005-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: TMMCScBkupDriveAndSize implementation
+*
+*
+*/
+
+#include "TMMCScBkupDriveAndSize.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveAndSize::InternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupDriveAndSize::InternalizeL( RReadStream& aStream )
+ {
+ aStream.ReadInt32L(); // EStreamFormatVersion1
+ aStream.ReadInt32L(); // spare1
+ aStream.ReadInt32L(); // spare2
+ //
+ iDrive = static_cast<TDriveNumber>( aStream.ReadUint8L() );
+
+ iSize = aStream.ReadInt32L();
+ // If 64-bit handling will be supported in the future.
+ // That will mean in practice a break in archive file format.
+ /*
+ if ( format == EStreamFormatVersion1 )
+ {
+ iSize = aStream.ReadInt32L();
+ }
+ else
+ {
+ iSize = aStream.ReadReal64L();
+ }
+ */
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveAndSize::ExternalizeL()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupDriveAndSize::ExternalizeL( RWriteStream& aStream ) const
+ {
+ aStream.WriteInt32L( EStreamFormatVersion1 );
+ aStream.WriteInt32L( 0 ); // spare1
+ aStream.WriteInt32L( 0 ); // spare2
+ //
+ aStream.WriteUint8L( iDrive );
+ aStream.WriteInt32L( iSize );
+ //aStream.WriteReal64L( iSize ); // If 64-bit handling will be supported in the future.
+ // That will mean in practice a break in archive file format.
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/TMMCScBkupDriveFilter.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2005 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: TMMCScBkupDriveFilter implementation
+*
+*
+*/
+
+#include "TMMCScBkupDriveFilter.h"
+
+// Constants
+const TInt KMMCScBkupInitialDriveIndex = -1;
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveFilter::Reset()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupDriveFilter::Reset()
+ {
+ iCurrentDrive = KMMCScBkupInitialDriveIndex;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveFilter::SetPrimaryDriveFilter()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupDriveFilter::SetPrimaryDriveFilter( const TDriveList& aDriveList )
+ {
+ iPrimaryDriveList = aDriveList;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveFilter::SetSecondaryDriveFilter()
+//
+//
+// ---------------------------------------------------------------------------
+void TMMCScBkupDriveFilter::SetSecondaryDriveFilter( const TDriveList& aDriveList )
+ {
+ iSecondaryDriveList = aDriveList;
+ iHaveSecondaryList = ETrue;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveFilter::NextValidDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TBool TMMCScBkupDriveFilter::NextValidDrive( TDriveNumber& aDrive )
+ {
+ // Always move to the next drive before checking its availability.
+ // FindValidDrive takes care of ensuring the value falls within A-Z
+ // range.
+ ++iCurrentDrive;
+
+ // Do we have an available primary drive?
+ TBool driveAvailable = EFalse;
+ while( iCurrentDrive >= EDriveA && iCurrentDrive <= EDriveZ )
+ {
+ TDriveNumber drive;
+ driveAvailable = FindValidDrive( iPrimaryDriveList, drive );
+ if ( driveAvailable && iHaveSecondaryList )
+ {
+ // Verify against secondary drive list also...
+ const TBool makeOnlyOneDirectAttempt = ETrue;
+ driveAvailable = FindValidDrive( iSecondaryDriveList, drive, makeOnlyOneDirectAttempt );
+ }
+ else if (!driveAvailable)
+ {
+ // No more primary drives left, so we're done here.
+ break;
+ }
+
+ // Did we find a match on (just) the primary drive, or then
+ // the primary and secondary drive lists combined?
+ if (driveAvailable)
+ {
+ // Yes, match found - we're finished here.
+ aDrive = drive;
+ break;
+ }
+ else
+ {
+ // Try to search for the next drive that matches both the
+ // primary and secondary lists (if supported)
+ ++iCurrentDrive;
+ }
+ }
+ //
+ return driveAvailable;
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveFilter::CurrentDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TDriveNumber TMMCScBkupDriveFilter::CurrentDrive() const
+ {
+ return static_cast< TDriveNumber >( iCurrentDrive );
+ }
+
+
+// ---------------------------------------------------------------------------
+// TMMCScBkupDriveFilter::FindValidDrive()
+//
+//
+// ---------------------------------------------------------------------------
+TBool TMMCScBkupDriveFilter::FindValidDrive( const TDriveList& aList, TDriveNumber& aDrive, TBool aOneAttemptOnly )
+ {
+ // If we've already reached Z then there isn't any sense in continuing
+ // as all drives have been processed.
+ TBool driveAvailable = EFalse;
+
+ // Keep checking drives until we go past Z
+ while( iCurrentDrive >= EDriveA && iCurrentDrive <= EDriveZ )
+ {
+ if ( aList[ iCurrentDrive ] != 0 )
+ {
+ // Found an available drive
+ aDrive = static_cast< TDriveNumber >( iCurrentDrive );
+ driveAvailable = ETrue;
+ break;
+ }
+ else if ( aOneAttemptOnly )
+ {
+ break;
+ }
+
+ // Try next drive
+ ++iCurrentDrive;
+ }
+ //
+ return driveAvailable;
+ }
+
+
+
+
Binary file filemanager/cenrep/keys_s60filemanager.xls has changed
Binary file filemanager/conf/s60filemanager.confml has changed
Binary file filemanager/conf/s60filemanager_1020506B.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/FileManager.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2002-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: Project specification of FileManager
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "FileManagerUID.h"
+MACRO _F32_STRICT_64_BIT_MIGRATION
+
+TARGET filemanager.exe
+TARGETTYPE exe
+EPOCSTACKSIZE 0x5000
+EPOCHEAPSIZE 0x20000 0x800000 // Min 128KB, Max 8MB
+UID KEPOCAppUID2 KFileManagerUID3
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_APPLICATION DiskAdmin AllFiles PowerMgmt
+
+SOURCEPATH ../App/src
+SOURCE CFileManagerApplication.cpp
+SOURCE CFileManagerDocument.cpp
+SOURCE CFileManagerAppUi.cpp
+SOURCE CFileManagerFileSelectionFilter.cpp
+SOURCE CFileManagerStringCache.cpp
+SOURCE CFileManagerViewBase.cpp
+SOURCE CFileManagerContainerBase.cpp
+SOURCE CFileManagerFileListContainer.cpp
+SOURCE CFileManagerFoldersView.cpp
+SOURCE Cfilemanagersearchresultsview.cpp
+SOURCE CFileManagerMainView.cpp
+SOURCE CFileManagerMemoryStoreView.cpp
+#ifdef RD_FILE_MANAGER_BACKUP
+SOURCE CFileManagerBackupView.cpp
+SOURCE CFileManagerRestoreView.cpp
+SOURCE CFileManagerSettingListContainer.cpp
+SOURCE CFileManagerTaskScheduler.cpp
+SOURCE CFileManagerSchBackupHandler.cpp
+#endif // RD_FILE_MANAGER_BACKUP
+
+START RESOURCE ../data/FileManager.rss
+TARGETPATH APP_RESOURCE_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+START RESOURCE ../data/FileManager_reg.rss
+DEPENDS filemanager.rsg
+// Do not change the UID below.
+TARGETPATH /private/10003a3f/apps
+END
+
+USERINCLUDE . ../App/inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE . ../View/inc ../Engine/inc
+
+LIBRARY euser.lib cone.lib apparc.lib
+LIBRARY eikcore.lib eikctl.lib eikcoctl.lib
+LIBRARY avkon.lib
+LIBRARY commonengine.lib
+LIBRARY filemanagerview.lib filemanagerengine.lib
+LIBRARY commondialogs.lib
+LIBRARY bafl.lib
+LIBRARY sendui.lib
+LIBRARY memstatepopup.lib
+LIBRARY hlplch.lib
+LIBRARY efsrv.lib
+LIBRARY aknskins.lib
+LIBRARY gdi.lib
+LIBRARY drmhelper.lib
+LIBRARY charconv.lib
+LIBRARY ecom.lib
+LIBRARY centralrepository.lib
+#ifdef RD_FILE_MANAGER_BACKUP
+LIBRARY ws32.lib
+LIBRARY schsvr.lib
+LIBRARY apgrfx.lib
+LIBRARY eikdlg.lib
+#endif // RD_FILE_MANAGER_BACKUP
+LIBRARY caf.lib
+LIBRARY commonui.lib
+LIBRARY servicehandler.lib
+LIBRARY platformenv.lib
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/FileManagerEngine.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2002-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: Project specification of FileManagerEngine
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "FileManagerUID.h"
+MACRO _F32_STRICT_64_BIT_MIGRATION
+
+TARGET filemanagerengine.dll
+TARGETTYPE dll
+UID KEPOCStaticDllUID2 KFileManagerUID3
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL
+
+
+START RESOURCE ../Engine/data/FileManagerEngine.rss
+TARGETPATH RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+SOURCEPATH ../Engine/src
+SOURCE CFileManagerEngine.cpp
+#ifndef RD_MULTIPLE_DRIVE
+SOURCE CFileManagerFolderEntry.cpp
+#endif // RD_MULTIPLE_DRIVE
+SOURCE Cfilemanagerfolderarray.cpp
+SOURCE CFileManagerItemProperties.cpp
+SOURCE CFilemanagerMimeIconArray.cpp
+SOURCE CFileManagerActiveExecute.cpp
+SOURCE CFileManagerIRReceiver.cpp
+SOURCE CFileManagerFileSystemIterator.cpp
+SOURCE Cfilemanagerindexiterator.cpp
+SOURCE CfilemanageractiveDelete.cpp
+SOURCE CFileManagerRefresher.cpp
+SOURCE Cfilemanagerfilesystemevent.cpp
+SOURCE Cfilemanageractivesize.cpp
+SOURCE CFileManagerUtils.cpp
+SOURCE CfilemanagerActiveCount.cpp
+SOURCE CFileManagerItemFilter.cpp
+SOURCE TFileManagerDriveInfo.cpp
+SOURCE CFileManagerDocHandler.cpp
+SOURCE CFileManagerThreadWrapper.cpp
+SOURCE CFileManagerRemovableDriveHandler.cpp
+SOURCE CFileManagerRemoteDriveHandler.cpp
+SOURCE CFileManagerPropertySubscriber.cpp
+#ifdef RD_FILE_MANAGER_BACKUP
+SOURCE CFileManagerBackupSettingsFull.cpp
+SOURCE CFileManagerRestoreSettingsFull.cpp
+#else // RD_FILE_MANAGER_BACKUP
+SOURCE CFileManagerBackupSettings.cpp
+SOURCE CFileManagerRestoreSettings.cpp
+#endif // RD_FILE_MANAGER_BACKUP
+SOURCE CFileManagerActiveBase.cpp
+SOURCE CFileManagerActiveRename.cpp
+SOURCE CFileManagerFeatureManager.cpp
+
+USERINCLUDE . ../Engine/inc ../GFLM/inc ../bkupengine/inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/connect
+
+LIBRARY euser.lib
+LIBRARY gflm.lib
+LIBRARY efsrv.lib
+LIBRARY bafl.lib
+LIBRARY cone.lib
+LIBRARY irobex.lib
+LIBRARY esock.lib
+LIBRARY irda.lib
+LIBRARY sysutil.lib
+LIBRARY featmgr.lib
+LIBRARY commonengine.lib
+//LIBRARY MGXMediaFileApi.lib
+LIBRARY tzclient.lib
+LIBRARY caf.lib
+LIBRARY drmdcf.lib
+LIBRARY commonui.lib
+LIBRARY apparc.lib
+LIBRARY apmime.lib
+LIBRARY avkon.lib
+LIBRARY platformenv.lib
+LIBRARY filemanagerbkupengine.lib
+LIBRARY apgrfx.lib
+LIBRARY ws32.lib
+LIBRARY rsfwmountman.lib
+LIBRARY centralrepository.lib
+#ifdef __KEEP_DRM_CONTENT_ON_PHONE
+#ifdef FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+LIBRARY distributablechecker.lib
+#endif // FILE_MANAGER_USE_DISTRIBUTABLECHECKER
+#endif // __KEEP_DRM_CONTENT_ON_PHONE
+LIBRARY directorylocalizer.lib
+//LIBRARY mgexternalservices.lib
+LIBRARY eikcore.lib
+LIBRARY drmutility.lib
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/FileManagerUID.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006 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: File Manager UID definitions
+*
+*/
+
+
+#ifndef __FILEMANAGERUID_H__
+#define __FILEMANAGERUID_H__
+
+
+// MACROS
+
+/// File Manager application UID3
+#define KFileManagerUID3 0x101F84EB
+
+/// File Manager scheduled backup module UID3
+#define KFileManagerSchBkupUID3 0x2000B182
+
+//
+// Common system UIDs
+//
+#define KEPOCAppUID2 0x100039ce
+#define KEPOCStaticDllUID2 0x1000008d
+
+
+#endif // __FILEMANAGERUID_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/FileManagerView.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2002-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: Project specification of FileManagerView
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "FileManagerUID.h"
+MACRO _F32_STRICT_64_BIT_MIGRATION
+
+TARGET filemanagerview.dll
+TARGETTYPE dll
+UID KEPOCStaticDllUID2 KFileManagerUID3
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL
+
+START RESOURCE ../View/data/FileManagerView.rss
+TARGETPATH RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+SOURCEPATH ../View/src
+SOURCE CFileManagerIconArray.cpp
+SOURCE CFileManagerPopupBase.cpp
+SOURCE CFileManagerInfoPopup.cpp
+SOURCE Cfilemanagerfoldernavigationpane.cpp
+SOURCE Cfilemanagerfoldernamequerydlg.cpp
+SOURCE CFileManagerFileNameQueryDlg.cpp
+SOURCE CFileManagerFullOmaDrmInfo.cpp
+SOURCE FileManagerDlgUtils.cpp
+SOURCE CFileManagerCheckBoxSettingPage.cpp
+SOURCE CFileManagerMMCInfoPopup.cpp
+SOURCE CFileManagerGlobalDlgFull.cpp
+SOURCE CFileManagerGlobalQueryDlg.cpp
+
+USERINCLUDE . ../View/inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE . ../Engine/inc
+
+LIBRARY euser.lib cone.lib
+LIBRARY eikcore.lib eikcoctl.lib eikdlg.lib
+LIBRARY avkon.lib
+LIBRARY egul.lib
+LIBRARY bafl.lib
+LIBRARY commonengine.lib
+LIBRARY filemanagerengine.lib
+LIBRARY aknskins.lib
+LIBRARY drmhelper.lib
+LIBRARY efsrv.lib
+LIBRARY cdlengine.lib
+LIBRARY aknicon.lib
+LIBRARY gdi.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY aknnotify.lib
+LIBRARY memstatepopup.lib
+LIBRARY drmrights.lib
+LIBRARY drmuihandling.lib
+
+// ----------- Touch feedback additions start
+#ifdef RD_TACTILE_FEEDBACK
+LIBRARY touchfeedback.lib
+#endif //RD_TACTILE_FEEDBACK
+// ----------- Touch feedback additions end
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/GFLM.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2002-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: Project specification of GFLM
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "../GFLM/inc/GFLMUid.h"
+MACRO _F32_STRICT_64_BIT_MIGRATION
+
+TARGET gflm.dll
+TARGETTYPE DLL
+UID KSymbianDLLUid2 KGflmUid3
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL
+
+
+SOURCEPATH ../GFLM/src
+SOURCE CGflmNavigatorModel.cpp
+SOURCE CGflmFileListModel.cpp
+SOURCE CGflmItemGroupImpl.cpp
+SOURCE CGflmItemLocalizer.cpp
+SOURCE CGflmGroupItem.cpp
+SOURCE CGflmGlobalActionItem.cpp
+SOURCE CGflmFileSystemItem.cpp
+SOURCE CGflmDirectoryListingCache.cpp
+SOURCE CGflmFileRecognizer.cpp
+SOURCE CGflmDriveResolver.cpp
+SOURCE GflmUtils.cpp
+SOURCE CGflmDriveItem.cpp
+SOURCE CGflmFileFinder.cpp
+SOURCE CGflmFileFinderItem.cpp
+
+SOURCEPATH ../GFLM/data
+START RESOURCE GflmFileExtensionMimeTypes.rss
+HEADER
+TARGETPATH RESOURCE_FILES_DIR
+END
+
+USERINCLUDE ../GFLM/inc
+USERINCLUDE ../Engine/inc // For debug definitions
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY apgrfx.lib // RApaLsSession
+LIBRARY apmime.lib // TDataType
+LIBRARY bafl.lib
+LIBRARY efsrv.lib
+LIBRARY euser.lib
+LIBRARY directorylocalizer.lib
+
+#ifdef RD_MULTIPLE_DRIVE
+LIBRARY platformenv.lib
+#endif // RD_MULTIPLE_DRIVE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/backup_registration.xml Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,8 @@
+<?xml version="1.0" standalone="yes" ?>
+<backup_registration>
+<public_backup>
+ <include_directory name="C:\data" />
+ <include_directory name="F:\" />
+</public_backup>
+<restore requires_reboot="no" />
+</backup_registration>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2002-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: Build information file for project FileManager
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+// Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+//Configuration tool migration
+../conf/s60filemanager.confml APP_LAYER_CONFML(s60filemanager.confml)
+../conf/s60filemanager_1020506B.crml APP_LAYER_CRML(s60filemanager_1020506b.crml)
+
+../group/backup_registration.xml z:/private/101f84eb/backup_registration.xml
+
+../rom/FileManager.iby CORE_APP_LAYER_IBY_EXPORT_PATH(FileManager.iby)
+../rom/FileManagerResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(FileManagerResources.iby)
+../loc/FileManager.loc APP_LAYER_LOC_EXPORT_PATH(FileManager.loc)
+
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+ OPTION TARGETFILE filemanager.mif
+ OPTION HEADERFILE filemanager.mbg
+#ifdef RD_MULTIPLE_DRIVE
+ OPTION SOURCES \
+ -c8,1 qgn_prop_mmc_memc -c8,1 qgn_prop_phone_memc -c8,1 qgn_prop_memc_phone_tab \
+ -c8,1 qgn_prop_memc_mmc_tab -c8,1 qgn_prop_folder_tab -c8,1 qgn_prop_memc_phone_tab2 \
+ -c8,1 qgn_prop_memc_mmc_tab2 -c8,8 qgn_prop_file_swf_small -c8,8 qgn_prop_fmgr_phone_memc_sub \
+ -c8,8 qgn_prop_fmgr_mmc_sub -c8,8 qgn_prop_fmgr_mmc_no_sub -c8,8 qgn_prop_fmgr_backup_sub \
+ -c8,8 qgn_indi_connection_on_add -c8,8 qgn_menu_fmgr_remote_drive -c8,8 qgn_prop_fmgr_remote_drive_tab \
+ -c8,8 qgn_prop_folder_empty -c8,8 qgn_indi_mmc_add -c8,8 qgn_prop_fmgr_ms_sub \
+ -c8,8 qgn_prop_memc_ms_tab -c8,8 qgn_prop_usb_memc_sub.svg -c8,8 qgn_prop_usb_memc_tab
+#else
+ OPTION SOURCES \
+ -c8,1 qgn_prop_mmc_memc -c8,1 qgn_prop_phone_memc -c8,1 qgn_prop_memc_phone_tab \
+ -c8,1 qgn_prop_memc_mmc_tab -c8,1 qgn_prop_folder_tab -c8,1 qgn_prop_memc_phone_tab2 \
+ -c8,1 qgn_prop_memc_mmc_tab2 -c8,8 qgn_prop_file_swf_small -c8,8 qgn_prop_fmgr_phone_memc_sub \
+ -c8,8 qgn_prop_fmgr_mmc_sub -c8,8 qgn_prop_fmgr_mmc_no_sub -c8,8 qgn_prop_fmgr_backup_sub \
+ -c8,8 qgn_indi_connection_on_add -c8,8 qgn_menu_fmgr_remote_drive -c8,8 qgn_prop_fmgr_remote_drive_tab \
+ -c8,8 qgn_prop_folder_empty -c8,8 qgn_indi_mmc_add
+#endif
+END
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+ OPTION TARGETFILE filemanager_aif.mif
+ OPTION SOURCES -c8,8 qgn_menu_fmgr
+END
+
+
+
+PRJ_MMPFILES
+/*
+ #ifdef RD_MULTIPLE_DRIVE
+ gnumakefile fmgr_icons_multiple_drive_dc.mk
+ #else // RD_MULTIPLE_DRIVE
+ gnumakefile fmgr_icons_merge_dc.mk
+ #endif // RD_MULTIPLE_DRIVE
+
+ #ifdef __SCALABLE_ICONS
+ gnumakefile fmgr_icons_aif_scalable_dc.mk
+ #else
+ gnumakefile fmgr_icons_aif_bitmaps_dc.mk
+ #endif
+*/
+
+GFLM.mmp
+filemanagerbkupengine.mmp
+#ifdef RD_FILE_MANAGER_BACKUP
+ filemanagerschbkup.mmp
+#endif // RD_FILE_MANAGER_BACKUP
+FileManagerEngine.mmp
+FileManagerView.mmp
+FileManager.mmp
+filemanagerbkupchecker.mmp
+filemanageraiwprovider.mmp
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/filemanageraiwprovider.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,49 @@
+/*
+* 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: Project definition file for project filemanageraiwprovider
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+MACRO _F32_STRICT_64_BIT_MIGRATION
+TARGET filemanageraiwprovider.dll
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x200110F8
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../aiwprovider/src
+SOURCE filemanageraiwprovider.cpp
+
+USERINCLUDE .
+USERINCLUDE ../aiwprovider/inc
+USERINCLUDE ../Engine/inc
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH ../aiwprovider/data
+START RESOURCE 200110F8.rss
+TARGET filemanageraiwprovider.rsc
+END
+
+LIBRARY euser.lib
+LIBRARY apparc.lib
+LIBRARY ws32.lib
+LIBRARY apgrfx.lib
+LIBRARY ecom.lib
+LIBRARY servicehandler.lib
+LIBRARY avkon.lib
+LIBRARY centralrepository.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/filemanagerbkupchecker.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2006 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: Project definition file for project filemanagerbkupchecker
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+MACRO _F32_STRICT_64_BIT_MIGRATION
+
+TARGET filemanagerbkupplugin.dll
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x10205078
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../bkupchecker/src
+SOURCE filemanagerbkupchecker.cpp
+USERINCLUDE . ../bkupchecker/inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE ../Engine/inc
+
+SOURCEPATH ../bkupchecker/data
+START RESOURCE 10205078.rss
+TARGET filemanagerbkupplugin.rsc
+END
+
+START RESOURCE filemanagerbkupchecker.rss
+TARGET filemanagerbkupchecker.rsc
+TARGETPATH RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY bafl.lib
+LIBRARY apfile.lib
+LIBRARY akncapserverclient.lib
+LIBRARY eikcore.lib
+LIBRARY apparc.lib
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/filemanagerbkupengine.mmh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2006 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: Project definition header file for project FileManagerBkupEngine
+*
+*/
+
+SOURCE CMMCScBkupArchive.cpp
+SOURCE CMMCScBkupArchiveDataManager.cpp
+SOURCE CMMCScBkupArchiveFooter.cpp
+SOURCE CMMCScBkupArchiveHeader.cpp
+SOURCE CMMCScBkupArchiveInfo.cpp
+SOURCE CMMCScBkupBufferManagers.cpp
+SOURCE CMMCScBkupDataOwnerCollection.cpp
+SOURCE CMMCScBkupDataOwnerInfo.cpp
+SOURCE CMMCScBkupDataStrategies.cpp
+SOURCE CMMCScBkupDriveSpecificRequest.cpp
+SOURCE CMMCScBkupEngine.cpp
+SOURCE CMMCScBkupEngineImpl.cpp
+SOURCE CMMCScBkupFileInfo.cpp
+SOURCE CMMCScBkupFileListCollection.cpp
+SOURCE CMMCScBkupIndexBase.cpp
+SOURCE CMMCScBkupIndexDataOwners.cpp
+SOURCE CMMCScBkupIndexActiveData.cpp
+SOURCE CMMCScBkupIndexPassiveData.cpp
+SOURCE CMMCScBkupIndexPublicDataFiles.cpp
+SOURCE CMMCScBkupIndexJavaData.cpp
+SOURCE CMMCScBkupIndexSystemData.cpp
+SOURCE CMMCScBkupIndexWithIdentifier.cpp
+SOURCE CMMCScBkupOperationParameters.cpp
+SOURCE CMMCScBkupState.cpp
+SOURCE CMMCScBkupStateArchiveOpActiveData.cpp
+SOURCE CMMCScBkupStateArchiveOpArchiveFooter.cpp
+SOURCE CMMCScBkupStateArchiveOpArchiveHeader.cpp
+SOURCE CMMCScBkupStateArchiveOpDataOwners.cpp
+SOURCE CMMCScBkupStateArchiveOpPassiveData.cpp
+SOURCE CMMCScBkupStateArchiveOpPublicDataFiles.cpp
+SOURCE CMMCScBkupStateArchiveOpSystemData.cpp
+SOURCE CMMCScBkupStateArchiveOpJavaData.cpp
+SOURCE CMMCScBkupStateFactory.cpp
+SOURCE CMMCScBkupStateGetDataOwners.cpp
+SOURCE CMMCScBkupStateGetDataOwnerStatuses.cpp
+SOURCE CMMCScBkupStateOpAware.cpp
+SOURCE CMMCScBkupStateRequestListOfPublicFiles.cpp
+SOURCE CMMCScBkupStateRequestSizeOfBackupData.cpp
+SOURCE CMMCScBkupStateSetPhoneMode.cpp
+SOURCE CMMCScBkupStateNotifyAllSnapshotsSupplied.cpp
+SOURCE CMMCScBkupStateValidateDiskSpace.cpp
+SOURCE CMMCScBkupTransferReadRequest.cpp
+SOURCE CMMCScBkupTransferRequest.cpp
+SOURCE CMMCScBkupTransferWriteRequest.cpp
+SOURCE CMMCScBkupDriveAndOperationTypeManager.cpp
+SOURCE CMMCScBkupDriveDataSizeManager.cpp
+SOURCE MMCScBkupArchiveUtils.cpp
+SOURCE MMCScBkupPhoneModelUtils.cpp
+SOURCE MMCScBkupSBEUtils.cpp
+SOURCE MMCScBkupLogger.cpp
+SOURCE RMMCScBkupArchiveStreams.cpp
+SOURCE RMMCScBkupProgressSizer.cpp
+SOURCE TMMCScBkupArchiveVector.cpp
+SOURCE TMMCScBkupDriveFilter.cpp
+SOURCE TMMCScBkupDriveAndSize.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/filemanagerbkupengine.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2006 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: Project definition file for project FileManagerBkupEngine
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../bkupengine/inc/MMCScBkupDllUids.h"
+MACRO _F32_STRICT_64_BIT_MIGRATION
+
+TARGET filemanagerbkupengine.dll
+TARGETTYPE dll
+UID KEPOCDLLUID2 KMMCAppEngUID3
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL DiskAdmin AllFiles PowerMgmt
+
+SOURCEPATH ../bkupengine/src
+#include "filemanagerbkupengine.mmh"
+
+USERINCLUDE ../bkupengine/inc
+
+APP_LAYER_SYSTEMINCLUDE
+//SYSTEMINCLUDE /epoc32/include/connect
+
+LIBRARY sbeclient.lib
+LIBRARY euser.lib
+LIBRARY ezlib.lib
+LIBRARY bafl.lib
+LIBRARY efsrv.lib
+LIBRARY sysutil.lib
+LIBRARY commonengine.lib
+LIBRARY featmgr.lib
+LIBRARY estor.lib
+LIBRARY centralrepository.lib
+LIBRARY platformenv.lib
+LIBRARY cone.lib
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/group/filemanagerschbkup.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2006 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: Project definition file for project FileManagerSchBkup
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "FileManagerUID.h"
+MACRO _F32_STRICT_64_BIT_MIGRATION
+TARGET filemanagerschbkup.exe
+TARGETTYPE exe
+UID KEPOCAppUID2 KFileManagerSchBkupUID3
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_APPLICATION
+
+SOURCEPATH ../schbkup/src
+SOURCE filemanagerschbackupmain.cpp
+SOURCE filemanagerschbackuptask.cpp
+SOURCE filemanagerschsubscriber.cpp
+
+USERINCLUDE . ../schbkup/inc ../Engine/inc
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY estor.lib
+LIBRARY schsvr.lib
+LIBRARY ws32.lib
+LIBRARY apgrfx.lib
+LIBRARY apparc.lib
+LIBRARY centralrepository.lib
Binary file filemanager/help/data/xhtml.zip has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/help/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 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:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>
+PRJ_EXPORTS
+:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite
+
+../inc/fmgr.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/fmgr.hlp.hrh)
+../rom/filemanagerhelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(filemanagerhelps_variant.iby)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/help/inc/fmgr.hlp.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+//
+// fmgr.hlp.hrh generated by CSXHelp Utilities.
+//
+
+#ifndef __FMGR_HLP_HRH__
+#define __FMGR_HLP_HRH__
+
+_LIT(KFMGR_HLP_MEM_STORE_VIEW, "FMGR_HLP_MEM_STORE_VIEW"); //
+_LIT(KFMGR_HLP_MAIN_VIEW, "FMGR_HLP_MAIN_VIEW"); //
+_LIT(KFMGR_HLP_SEARCH_RESULTS, "FMGR_HLP_SEARCH_RESULTS"); //
+_LIT(KFMGR_HLP_BACKUP_VIEW, "FMGR_HLP_BACKUP_VIEW"); //
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/help/rom/filemanagerhelps_variant.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef __FILEMANAGERHELPS_VARIANT_IBY__
+#define __FILEMANAGERHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F84EB\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x101F84EB\contents.zip)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F84EB\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x101F84EB\index.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F84EB\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x101F84EB\keywords.xml)
+ data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F84EB\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x101F84EB\meta.xml)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/loc/FileManager.loc Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,2131 @@
+/*
+* Copyright (c) 2002-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: Localization strings for project FileManager
+*
+*/
+
+
+/*
+ The syntax of a logical name entry in this file is the following:
+
+ // d:context description (line 1)
+ // d:context description (line N)
+ // l:layout id
+ // w:
+ // r:release information
+ //
+ #define qtn_<?feature_or_application>_?freetext "?text"
+
+ where
+ "qtn_" starts a logical name. Note: "text_" has been used in
+ old logical names, but is deprecated.
+ "?feature/application" is 2-5 lower-case characters and/or numbers
+ identifying the larger context of the display text.
+ "?freetext" is the free text portion of the logical name.
+ It may contain only lower-case letters ('a' to 'z'), numbers
+ ('0' to '9'), and the underscore ('_'). The total length of
+ the logical name does must not exceed 50 characters.
+ "d:" Starts a description line clarifying the entry's context with
+ information like:
+ - Is a word a verb in imperative or is it a noun? (For instance,
+ what does "Set" mean?)
+ - What will replace %U (unicode text parameter) or %N (number
+ parameter) included in texts? (For instance, is it a phone
+ number or an e-mail address?)
+ "l:" Starts a layout id information (one line).
+ "P" and "No" are symbols in LAF's information table
+ - "P" is parent pane or current pane
+ - "No" is reference number in table
+ "r:" Starts a release information: one line indicating in which
+ S60 release the text was used for the first time.
+
+ Refer to the S60 localization instructions for more information.
+
+ Examples:
+
+// d:Command in options list in short term memories.
+// d:Opens the call list view that is focused.
+// l:list_single_popup_menu_pane_1
+// r:3.1
+//
+#define text_logs_stm_cmd_open "Open"
+
+// d:Title pane text in converter main state.
+// l:title_pane_1
+// r:3.0
+//
+#define qtn_cnv_title "Converter"
+
+// d:Prompt text for currency data query in converter.
+// l:popup_query_data_window_1
+// r:4.0
+//
+#define qtn_cnv_edit_name_prompt "Currency name"
+
+// d:Active call is terminated and a held call becomes active.
+// d:Operation is confirmed with this info note.
+// d:%U stands for the call identification of the activated call.
+// l:popup_note_window_1
+// r:3.1
+//
+#define qtn_multc_unhold_done_note "%U active"
+
+*/
+
+// LOCALISATION STRINGS
+
+//d:Title pane text in File Manager main state.
+//d:Application name.
+//l:title_pane_t2/opt9
+//w:
+//r:3.0
+//
+#define qtn_fmgr_main_title "File Manager"
+
+//d:Caption string for AIF file (short)
+//l:cell_app_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_fmgr_grid "File Manager"
+
+//d:Caption string for AIF file (long)
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_fmgr_list "File Manager"
+
+//d:Command in options list
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_fmgr_options_find_file "Find"
+
+//d:Command in options list
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_album_cmd_receive_via_ir "Receive via infrared"
+
+//d:Title text for info popup (when focus is on file)
+//l:heading_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_heading_file "File details:"
+
+//d:Title text for info popup (when focus is on folder)
+//l:heading_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_heading_fldr "Folder details:"
+
+//d:Title text for info popup (when focus is on link)
+//l:heading_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_heading_link "Link details:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_fldr_default "Folder:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_contain_fldr "Sub folders:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_contain_file "Files:"
+
+//d:data item text for the info popup listbox when focus is on default folder.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_fmgr_info_def_fldr_text "Default folder"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_swins_lsh2_apps_name "Name:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_swins_lsh2_apps_type "Type:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_album_datim_date "Date:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_album_datim_time "Time:"
+
+//d:heading item text for the info popup listbox
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_album_litxt_size "Size:"
+
+//d:Title text for memory state popup
+//l:heading_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_fmgr_mstate_heading "Memory state:"
+
+//d:Information note text
+//d:if focused file type is not supported, this text is shown
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_error_unsupport "File is unsupported and can't be opened"
+
+//d:Information note text
+//d:if focused file type is not supported, this text is shown
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_error_cant_open "File can't be opened"
+
+//d:Information note text
+//d:if user tries to delete default folder, this text is shown
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_error_del_def_fldr "The folder is used as default folder for some other application. You can't delete it."
+
+//d:Information note text
+//d:if user tries to delete a file that is currently in use, this text is shown
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_error_delete_file_open "The file is currently open. Can't be deleted"
+
+//d:Prompt text in common file dialog
+//d:shown when user is prompted to select memory to be searched
+//l:heading_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_fmgr_find_prtx "Look in:"
+
+//d:a prompt for entering text to be searched
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.0
+//
+#define qtn_fmgr_find_dataq_prtx "Searched text:"
+
+//d:text displayed in wait dialog when searching files
+//l:popup_note_wait_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_wnote_search "Searching"
+
+//d:text displayed in search view if there are no results
+//l:main_list_empty_pane
+//w:
+//r:3.0
+//
+#define qtn_fmgr_search_not_found "No found files or folders"
+
+//d: a progress note when connecting to other device before receiving a file
+//l: popup_note_wait_window
+//w:
+//r:3.0
+//
+#define qtn_ir_connecting "Connecting via infrared"
+
+//d:text displayed in progress dialog when receiving file
+//l:popup_note_wait_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_note_receive_ir "Receiving file %N%"
+
+//d:Separates folder icons in navipane when subfolders are browsed.
+//d:only for __SERIES60_MMC
+//l:list_cale_time_pane_t2/opt10
+//w:
+//r:3.0
+//
+#define qtn_memc_main_separator "\\"
+
+//d:End character for navipane when subfolders are browsed beyond the maximum
+//d:navigation depth
+//l:list_cale_time_pane_t2/opt10
+//w:
+//r:3.0
+//
+#define qtn_memc_main_end "..."
+
+//d:Information note text
+//d: User is trying to delete a folder, one file is open in that folder so it cannot be deleted and this text is shown
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_error_del_fldr_open_1 "The folder contains open file. Folder can't be deleted"
+
+//d:Information note text
+//d: User is trying to delete a folder, several files are open in that folder so it cannot be deleted
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_fmgr_error_del_fldr_open_se "The folder contains several open files. Folder can't be deleted"
+
+///////////////////////////////////////////////////////////////
+// DRM view info, these are also introduced in Rights Manager.
+///////////////////////////////////////////////////////////////
+
+//d: This is displayed in view info popup
+//d: Type of rights, play
+//l: navi_navi_text_pane_srt_t1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det2_play "Play"
+
+//d: This is displayed in view info popup
+//d: Type of rights, display
+//l: navi_navi_text_pane_srt_t1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det2_display "Display"
+
+//d: This is displayed in view info popup
+//d: Type of rights, execute
+//l: navi_navi_text_pane_srt_t1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det2_execute "Execute"
+
+//d: This is displayed in view info popup
+//d: Type of rights, print
+//l: navi_navi_text_pane_srt_t1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det2_print "Print"
+
+//d: This is displayed in view info popup
+//d: Full Rights label. In parentheses there will be either play, display, execute or print word
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_full_x "Rights (%U)"
+
+//d: This is displayed in view info popup
+//d: Full Rights data, unlimited usage
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_unlimited "Unlimited"
+
+//d: This is displayed in view info popup
+//d: Count label. In parentheses there will be either play, display, execute or print word
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_utl_x "Times left (%U)"
+
+//d: This is displayed in view info popup
+//d: Count data. 1 count
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_1_count "1 count"
+
+//d: This is displayed in view info popup
+//d: Count data. more than 1 count
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_n_counts "%N counts"
+
+//d: This is displayed in view info popup
+//d: Interval label, which is not activated. In parentheses there will be either play,
+// display, execute or print word
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_uts_x "Times status (%U)"
+
+//d: This is displayed in view info popup
+//d: Interval data. Not activated
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_not_act "Not activated"
+
+//d: This is displayed in view info popup
+//d: Interval time left label. In parentheses there will be either play,
+// display, execute or print word
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_udl_x "Time left (%U)"
+
+//d: This is displayed in view info popup
+//d: Interval data. One measurement
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_inter "%U"
+
+//d: This is displayed in view info popup
+//d: Interval data. Two measurement
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_inter_two "%0U, %1U"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 year.
+//d:Other quantities of time may follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_one "1 year"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of years of an interval
+//d:It is used for period of years ending with 1 from 21 (21, 31, 41,etc.)
+//d:It reports that the time constraint for this type of object is %N years.
+//d:Other quantities of time may follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_one_final "%N years"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of years of an interval
+//d:It is used for period of years ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-24, 32-34, etc.)
+//d:It reports that the time constraint for this type of object is %N years.
+//d:Other quantities of time may follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_two_four "%N years"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of years of an interval
+//d:It is used for period of years ending from 5 to 0 plus range between 11 and
+//d:14 (5-20, 25-30, 35-40, etc.)
+//d:It reports that the time constraint for this type of object is %N years.
+//d:Other quantities of time may follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_five_zero "%N years"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 month.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_months_one "1 month"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of months of an interval
+//d:It is used for period from two to four months
+//d:It reports that the time constraint for this type of object is %N months.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_months_two_four "%N months"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of months of an interval
+//d:It is used for period greater than four months
+//d:It reports that the time constraint for this type of object is %N months.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_months_five_zero "%N months"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 day.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_one "1 day"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of days of an interval
+//d:It is used for a period of 21 days
+//d:It reports that the time constraint for this type of object is %N days.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_one_final "%N days"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of days of an interval
+//d:It is used for period of days ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-24)
+//d:It reports that the time constraint for this type of object is %N days.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_two_four "%N days"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of days of an interval
+//d:It is used for period of days ending from 5 to 0 plus range between 11 and
+//d:14 (5-20, 25-30)
+//d:It reports that the time constraint for this type of object is %N days.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_five_zero "%N days"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 hour.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_one "1 hour"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of hours of an interval
+//d:It is used for a period of 21 hours
+//d:It reports that the time constraint for this type of object is %N hours.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_one_final "%N hours"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of hours of an interval
+//d:It is used for period of hours ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-23)
+//d:It reports that the time constraint for this type of object is %N hours.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_two_four "%N hours"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of hours of an interval
+//d:It is used for a period included from 5 to 20 hours
+//d:It reports that the time constraint for this type of object is %N hours.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_five_zero "%N hours"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 minute.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_one "1 minute"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of minutes of an interval
+//d:It is used for period of minutes ending with 1 from 21 (21, 31, 41, 51)
+//d:It reports that the time constraint for this type of object is %N minutes.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_one_final "%N minutes"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of minutes of an interval
+//d:It is used for period of minutes ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-24, 32-34, 42-44, 52-54)
+//d:It reports that the time constraint for this type of object is %N minutes.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_two_four "%N minutes"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of minutes of an interval
+//d:It is used for period of minutes ending from 5 to 0 plus range between 11
+//d:and 14 (5-20, 25-30, 35-40, 45-50, 53-59)
+//d:It reports that the time constraint for this type of object is %N minutes.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_five_zero "%N minutes"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 second.
+//d:Other quantities of time may precede.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_one "1 second"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of seconds of an interval
+//d:It is used for period of seconds ending with 1 from 21 (21, 31, 41, 51)
+//d:It reports that the time constraint for this type of object is %N seconds.
+//d:Other quantities of time may precede.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_one_final "%N seconds"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of seconds of an interval
+//d:It is used for period of seconds ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-24, 32-34, 42-44, 52-54)
+//d:It reports that the time constraint for this type of object is %N seconds.
+//d:Other quantities of time may precede.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_two_four "%N seconds"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of seconds of an interval
+//d:It is used for period of minutes ending from 5 to 0 plus range between 11
+//d:and 14 (5-20, 25-30, 35-40, 45-50, 53-59)
+//d:It reports that the time constraint for this type of object is %N seconds.
+//d:Other quantities of time may precede.
+//l:list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_five_zero "%N seconds"
+
+//d: This is displayed in view info popup
+//d: Date and time label. Beginning time. In parentheses there will be either play,
+// display, execute or print word
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_rvf_x "Valid from (%U)"
+
+//d: This is displayed in view info popup
+//d: Date and time label. Ending time. In parentheses there will be either play,
+// display, execute or print word
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_rvt_x "Valid until (%U)"
+
+//d: This is displayed in view info popup
+//d: Sending label.
+//l: list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_cs "Content sending"
+
+//d: This is displayed in view info popup
+//d: Sending data. Item sending is allowed
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_allowed "Allowed"
+
+//d: This is displayed in view info popup
+//d: Sending data. Item sending is forbidden
+//l: list_double_pane_t2_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_forbid "Forbidden"
+
+//d:First line of first entry of Details View listbox
+//d:It indicates the current status of the selected Right Object
+//d:Second line is qtn_drm_mgr_det_valid or qtn_drm_mgr_det_exp
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_stat "Status"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:Second line is qtn_drm_mgr_det_inter or qtn_drm_mgr_det_inter_two, meaning
+//d:a quantity of time that specifies how long this object can be used.
+//l:list_double_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_accum_time_left "Usage time left"
+
+//d:Title pane text in main view
+//l:title_pane_t2/opt9
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_title_pane "Activation Keys"
+
+//d:Menu item used in Group view to see the details of a Media Object.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_group_mo_view_det "View details"
+
+///////////////////////////////////////////////////////////////
+// End of DRM view info logical names
+///////////////////////////////////////////////////////////////
+
+//d:Warning note
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fm_warning_file_extension "If file extension is changed file may become unusable"
+
+//d:Phone memory name in main page, item data
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_main_phone "Phone memory"
+
+//d:Default memory card name in main page, item data
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_main_card_default "Memory card"
+
+//d:Caption string.
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_title_phone_mem "Phone memory"
+
+//d:Caption string.
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_title_mem_card "Memory card"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_eject "Eject"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_organise "Organise"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_details "Details"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_card "Memory card"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_card_password "Memory card password"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_set_password "Set"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_change_passwd "Change"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_remove_passwd "Remove"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_card_name "Name"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_card_rename "Rename"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_card_format "Format"
+
+//d:Caption string for memory card details popup
+//l:heading_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_memcard_info_heading "Memory card details"
+
+//d:This is displayed in memory card details info popup
+//l:list_single_heading_pane_t2_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_card_info_name "Name"
+
+//d:This is displayed in memory card details info popup
+//l:list_single_heading_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_card_info_default_name "Memory card"
+
+//d:This is displayed in memory card details info popup
+//l:list_single_heading_pane_t2_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_card_info_size "Capacity"
+
+//d:This is displayed in memory card details info popup
+//l:list_single_heading_pane_t2_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_card_info_used "Used"
+
+//d:This is displayed in memory card details info popup
+//l:list_single_heading_pane_t2_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_card_info_free "Free"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_card_details "Memory card"
+
+
+// OPTIONS MENU TEXTS
+
+//d:Options menu command.
+//d:Start backup.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_memc_options_backup "Backup to memory card"
+
+//d:Options menu command.
+//d:Start restore.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_memc_options_restore "Restore from memory card"
+
+//d:Options menu command.
+//d:Start format.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_memc_options_format "Format memory card"
+
+//d:Options menu command.
+//d:Unlock card.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_memc_options_unlock "Unlock memory card"
+
+
+// BACKUP TEXTS
+
+//d:Backup confirmation.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_query1 "Do you want to make a backup to memory card?"
+
+//d:Backup confirmation, earlier backup exists.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_query2 "Do you want to make a backup to memory card? Previous backup will be overwritten."
+
+//d:Confirmation for continuing, when there's little space.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_query3 "There might not be enough space on memory card, do you want to continue?"
+
+//d:Not enough space error.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_enoughspace "There isn’t enough space on the memory card! (Backup can’t be done)"
+
+//d:Progress note text.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_inprogress "Backup is in progress!"
+
+//d:Completion note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_completed "Backup is completed!"
+
+//d:Notify about files not backed up.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_info1 "%N files could not be backed up!"
+
+//d:Notify about a file not backed up.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_backup_info2 "1 file could not be backed up!"
+
+
+
+// RESTORE TEXTS
+
+//d:Restore confirmation.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_restore_query1 "Do you want to restore backup files to phone memory?"
+
+//d:Not enough space error.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_restore_enoughspace "There isn’t enough space to restore the entire memory card! (Restore can’t be done)"
+
+//d:Progress note text.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+//
+#define qtn_memc_restore_inprogress "Restore is in progress! Avoid using other applications during restore."
+
+//d:Completion note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_restore_completed "Restore is completed!"
+
+//d:Notify about files not restored
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_restore_info1 "%N files could not be restored!"
+
+//d:Notify about a file not restored
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_restore_info2 "1 file could not be restored!"
+
+
+// FORMAT TEXTS
+
+//d:Format confirmation.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_format_query1 "Do you want to format the memory card? (Data will be erased)"
+
+//d:Progress note text.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+//
+#define qtn_memc_format_inprogress "Format is in progress!"
+
+//d:Completion note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_format_completed "Format is completed!"
+
+
+// MMC NAME TEXTS
+
+//d:Default memory card label to be written to MMC.
+//d:Limited by FAT to maximum of 11 ascii characters.
+//d:Limited by FAT to maximum of 5 characters in Chinese variant.
+//l:query_popup_data_pane_t1/opt4
+//w:
+//r:3.1
+//
+#define qtn_memc_mmc_default_label "Mcard"
+
+//d:Card name query.
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.1
+//
+#define qtn_memc_name_prompt "Card name:"
+
+//d:Illegal characters note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_name_note1 "Illegal characters! Use only letters and numbers."
+
+//d:Name changed note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_name_note2 "The card name has been changed!"
+
+
+// SET PASSWORD TEXTS
+
+//d:Password query.
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.1
+//
+#define qtn_memc_set_password_prompt1 "New password:"
+
+//d:Password confirmation query.
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.1
+//
+#define qtn_memc_set_password_prompt2 "Confirm new password:"
+
+//d:The passwords don't match.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_set_password_error "The passwords don’t match, try again!"
+
+//d:Password set note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_set_password_info "The password has been set!"
+
+
+// CHANGE PASSWORD TEXTS
+
+//d:Old password query.
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.1
+//
+#define qtn_memc_change_pwd_prompt1 "Old password:"
+
+//d:Wrong password note, changing password.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_change_pwd_error1 "The password is incorrect, try again!"
+
+//d:Password changed note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_change_pwd_info "The password has been changed!"
+
+//d:Wrong password note, unlocking.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_unlock_pwd_error "The password is incorrect, try again!"
+
+
+// REMOVE PASSWORD TEXTS
+
+//d:Remove password query.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_remove_pwd_query "Do you want to remove the password? Memory card becomes unlocked."
+
+//d:Password removed note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_remove_pwd_info "The password has been removed!"
+
+
+// PASSWORD QUERY TEXTS
+
+//d:Password query.
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.1
+//
+#define qtn_memc_remove_pwd_prompt "Password:"
+
+//d:Unlock password query.
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.1
+//
+#define qtn_memc_unlock_pwd_prompt "Password:"
+
+
+// ERROR CASE TEXTS
+
+//d:Corrupt note.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_memorycard_error "Memory card is corrupted!"
+
+//d:General error.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_gen_error "Error occurred, operation cancelled!"
+
+//d:Format error. Memory card in use.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_memc_format_card_used "Formatting failed. Memory card used by other application."
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_rd_opt_connect "Connect"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_rd_opt_disconnect "Disconnect"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_opt_remote_drives "Remote drives"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_opt_rd_settings "Settings"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_opt_rd_new_drive "Map new drive"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_opt_rd_delete_drive "Delete drive"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_file_details "File"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_folder_details "Folder"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_memory_details "Memory"
+
+// REMOTE DRIVE ERRORS
+
+//d:Text in confirmation query when deleting a drive
+//l:popup_note_window
+//w:
+//r:3.1
+#define qtn_rd_query_delete_drive "Delete configuration for %U?"
+
+//d:Error text when remote drive is not connected.
+//l:main_list_empty_pane
+//w:
+//r:3.1
+//
+#define qtn_fmgr_empty_remote_drive "(Not connected)"
+
+//d:This is displayed in memory card details info popup
+//l:list_single_heading_pane_t2_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_card_info_data "%N %U"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_rd_opt_refresh "Refresh"
+
+//d:Information note text
+//d:if focused file is not supported remotely, this text is shown
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_infonote_unable_open_remotely "Unable to open the file remotely. Copy file to phone and try opening it again."
+
+//d:Backup name in main page, item data
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_main_backup "Backup"
+
+//d:Backup caption string.
+//l:title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_title "Backup"
+
+//d:Backup setting item title
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_contents "Backup contents"
+
+//d:Backup setting item title
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_scheduling "Backup scheduling"
+
+//d:Backup setting item title
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_weekday "Weekday"
+
+//d:Backup setting item title
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_time "Time"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_backup_now "Backup now"
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_fmgr_options_restore "Restore"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_all "All"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_selected "%N selected"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_settings "Settings"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_messages "Messages"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_contacts "Contacts"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_calendar "Calendar"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_bookmarks "Bookmarks"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_content_userfiles "User files"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_no_scheduling "No scheduling"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_daily "Daily"
+
+//d:Backup setting item value
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_weekly "Weekly"
+
+//d:Backup confirmation.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_query "Create backup to %U?"
+
+//d:Backup confirmation.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_query_exists "Create backup to %U? Existing data will be overwritten."
+
+//d:Scheduled backup inprogress note.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_scheduled_backup_progress "Scheduled backup. Do not remove %U"
+
+//d:Backup confirmation.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_tight_memory "%U may not contain enough space. Continue anyway?"
+
+//d:No space for backup note
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_destination_full "Not enough space in %U. Backup cancelled."
+
+//d:Scheduled backup error note
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_scheduled_backup_error "Backup was scheduled but destination memory store was unavailable."
+
+//d:Restore caption string.
+//l:title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_title "Restore"
+
+//d:Restore item name.
+//l:list_double_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_settings "Settings"
+
+//d:Restore item name.
+//l:list_double_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_messages "Messages"
+
+//d:Restore item name.
+//l:list_double_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_contacts "Contacts"
+
+//d:Restore item name.
+//l:list_double_large_graphic_pane_t1
+//
+#define qtn_fmgr_restore_calendar "Calendar"
+
+//d:Restore item name.
+//l:list_double_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_bookmarks "Bookmarks"
+
+//d:Restore item name.
+//l:list_double_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_userfiles "User files"
+
+//d:Restore item name.
+//l:main_list_empty_pane
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_no_backups "No backup items available"
+
+//d:Restore confirmation
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_query "Restore selected backed up content to phone memory?"
+
+//d:Restore error
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_restore_space_error "Not enough space for restore"
+
+//d:Scheduled backup query.
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_scheduled_backup_query "Scheduled backup is starting. Continue?"
+
+//d:Backup setting item title
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_backup_destination "Backup destination"
+
+//d:Prompt text in common file dialog
+//d:shown when user is prompted to select memory to be backup target
+//l:heading_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_fmgr_select_backup_destination "Select destination:"
+
+//d:Progress note text.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+//
+#define qtn_fmgr_progress_preparing_backup "Preparing for backup."
+
+//d:Progress note text.
+//l:popup_note_wait_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_progress_preparing_restore "Preparing for restoring."
+
+//d:General error.
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_error_corrupted_backup_file "Backup file is corrupted. Operation cancelled."
+
+//d:Error note for unavailable backup destination
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_error_backup_memorycard_not_available "Backup destination is not available."
+
+//d:Application launch prevented during backup info text
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_backup_applaunch_prevented "Cannot start application during backup"
+
+//d:Application launch prevented during restore info text
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_restore_applaunch_prevented "Cannot start application during restore"
+
+//d:Format query when memory card in use.
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_format_query2 "Memory card in use by other application. Proceed anyway?"
+
+//d:error note; not able to add a new drive
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_rd_error_max_drives "Maximum number of remote drives configured. Remove old configurations to create new."
+
+//d:Device memory name in main page, item data
+//d:%U is the drive letter
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_main_device_memory "%U Device memory"
+
+//d:Mass storage name in main page, item data
+//d:%U is the drive letter
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_main_mass_storage "%U Mass storage"
+
+//d:Memory card in main page, item data
+//d:%U is the drive letter
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_main_memory_card_default "%U Memory card"
+
+//d:Named memory card in main page, item data
+//d:%0U is the drive letter and %1U is the name of the memory card
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_main_named_memory_card "%0U %1U"
+
+//d:Caption string.
+//d:%U is the drive letter
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_title_device_memory "%U Device memory"
+
+//d:Caption string.
+//d:%U is the drive letter
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_title_mass_storage "%U Mass storage"
+
+//d:Caption string.
+//d:%0U is the drive letter and %1U is the name of the memory card
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_title_named_memory_card "%0U %1U"
+
+//d:Caption string.
+//d:%U is the drive letter
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_title_memory_card_default "%U Memory card"
+
+//d:Error text when mass storage is in use
+//l:main_list_empty_pane
+//w:
+//r:3.2
+//
+#define qtn_memc_mass_storage_in_use "(Memory is in use)"
+
+//d:Error text when mass storage is corrupted
+//l:main_list_empty_pane
+//w:
+//r:3.2
+//
+#define qtn_memc_mass_storage_corrupted "(Memory is corrupted)"
+
+//d:Named memory card eject confirmation query.
+//d:%0U is the drive letter and %1U is the name of the memory card
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_conf_eject_multiple "Eject %0U %1U? Some applications will be closed."
+
+//d:Memory card eject confirmation query.
+//d:%U is the drive letter
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_conf_eject_multiple_defaultname "Eject %U memory card? Some applications will be closed."
+
+//d:Swap named memory card note.
+//d:%0U is the drive letter and %1U is the name of the memory card
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_info_eject_multiple "Remove %0U %1U and press OK."
+
+//d:Swap memory card note.
+//d:%U is the drive letter
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_info_eject_multiple_defaultname "Remove %U memory card and press OK."
+
+//d:Password query for named memory card.
+//d:%0U is the drive letter and %1U is the name of the memory card
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.2
+//
+#define qtn_memc_unlock_password_multiple "Password for %0U %1U:"
+
+//d:Password query for memory card.
+//d:%U is the drive letter
+//l:popup_query_data_window_t3/opt2
+//w:
+//r:3.2
+//
+#define qtn_memc_unlock_password_multiple_defaultname "Password for %U memory card:"
+
+//d:Information note text
+//d:%U is the drive letter
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_multiple_memc_read_only "Unable to perform operation. %U memory card is read only."
+
+//d:Information note text
+//d:%U is the drive letter
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memc_memory_card_corrupted_multiple "%U memory card is corrupted."
+
+//d:Options menu command.
+//d:Start mass storage format.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_format_mass "Format mass storage"
+
+//d:Mass storage format query
+//d:%U is the drive letter
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_format_mass_query1 "Format %U mass storage. Data will be deleted during formatting."
+
+//d:Progress note text
+//l:popup_note_wait_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_mass_format_inprogress "Formatting mass storage"
+
+//d:Completion note.
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_mass_format_completed "Formatting complete"
+
+//d:Format query when mass storage is in use
+//l:popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_format_mass_query2 "Mass storage in use by other application. Proceed anyway?"
+
+//d:Possible second line for first entry of Details View listbox
+//l:list_double_pane_t2_cp2
+//w:
+//r:5.0
+//
+#define qtn_drm_mgr_det_not_valid_yet "Activation key not valid yet"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1/opt1
+//w:
+//r:5.0
+//
+#define qtn_fmgr_options_sort_by_match "By match"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1/opt1
+//w:
+//r:5.0
+//
+#define qtn_fmgr_options_sort_by_name "By name"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1/opt1
+//w:
+//r:5.0
+//
+#define qtn_fmgr_options_sort_by_type "By type"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1/opt1
+//w:
+//r:5.0
+//
+#define qtn_fmgr_options_sort_recent_first "Most recent first"
+
+//d:Options menu command.
+//l:list_single_popup_submenu_pane_t1/opt1
+//w:
+//r:5.0
+//
+#define qtn_fmgr_options_sort_largest_first "Largest first"
+
+//d:Scheduled backup info note
+//l:popup_note_window
+//w:
+//r:5.0
+//
+#define qtn_fmgr_scheduled_backup_cancelled_ps "Power saving is active, scheduled backup is cancelled."
+
+//d:Options menu command.
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:5.0
+//
+#define qtn_fmgr_options_sort_submenu "Sort"
+
+//d:Free memory amount in main page, item data
+//d:%0U is the size and %1U is the unit, for example 15.5 MB
+//l:list_double_large_graphic_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_free_memory_var_units "Free: %0U %1U"
+
+//d:Free memory unit in main page, item data
+//l:list_double_large_graphic_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_units_byte "B"
+
+//d:Free memory unit in main page, item data
+//l:list_double_large_graphic_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_units_kilobyte "kB"
+
+//d:Free memory unit in main page, item data
+//l:list_double_large_graphic_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_units_megabyte "MB"
+
+//d:Free memory unit in main page, item data
+//l:list_double_large_graphic_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_units_gigabyte "GB"
+
+//d: Note when there is not enough memory to execute operation on device memory.
+//d: %U is the drive letter of the drive.
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memlo_not_enough_device_memory "Not enough memory to perform operation. Delete some data from %U Device memory."
+
+//d: Note when there is not enough memory to execute operation on memory card.
+//d:%0U is the drive letter and %1U is the name of the memory card
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memlo_not_enough_memory_card_name "Not enough memory to perform operation. Delete some data from %0U %1U."
+
+//d: Note when there is not enough memory to execute operation on memory card.
+//d: %U is the drive letter of the drive.
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memlo_not_enough_memory_card_defaultname "Not enough memory to perform operation. Delete some data from %U Memory card."
+
+//d: Note when there is not enough memory to execute operation on mass storage.
+//d: %U is the drive letter of the drive.
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_memlo_not_enough_mass_memory "Not enough memory to perform operation. Delete some data from %U Mass storage."
+
+//d: Primary text for an unnamed USB memory storage.
+//d: %U is the drive letter of the drive.
+//l: list_double_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_main_usb_default "%U USB memory"
+
+//d: When the view is on the root of an unnamed USB memory.
+//d: %U is the drive letter of the drive.
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_title_usb_default "%U USB memory"
+
+//d: Main view Options menu item.
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_memory_sub "Memory storage"
+
+//d: Memory storage submenu items
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_unlock_memory "Unlock memory"
+
+//d: Memory storage submenu items
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_memory_storage_details "Details"
+
+//d: Memory storage submenu items
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_set_memc_passwd "Set password"
+
+//d: Memory storage submenu items
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_change_memc_passwd "Change password"
+
+//d: Memory storage submenu items
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_remove_memc_passwd "Remove password"
+
+//d: Default name of the query when naming or renaming a memory store
+//l: query_popup_data_pane_t1/opt4
+//w:
+//r:3.2
+//
+#define qtn_fmgr_usb_memory_default_name "USB memory"
+
+//d: confirmation query text when want to format USB memory
+//d: %0U is the drive letter, %1U is the drive name.
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_usb_memory_format_query "Format USB memory %0U %1U? All data will be deleted."
+
+//d: progress text when formatting memory storage
+//l: popup_note_wait_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_formatting_memory_progress "Formatting memory storage"
+
+//d: Prompt text of the query when naming or renaming a memory store
+//l: popup_query_data_window_t3/opt2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_memory_name_prompt "Memory storage name"
+
+//d: After a successful operation of naming or renaming
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_confirm_memory_name_changed "Memory storage name changed"
+
+//d: confirmation text if memory used when want to format the memory store
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_memory_in_use_format "Memory storage is being used by another application. Proceed anyway?"
+
+//d: Backup view Options menu if backup exists
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_options_delete_backup "Delete backup"
+
+//d: Delete backup view title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.2
+//
+#define qtn_fmgr_delete_backup_title "Delete backup"
+
+//d: query text when want to delete backup content
+//l: popup_note_window
+//w:
+//r:3.2
+//
+#define qtn_fmgr_delete_backup_query "Delete selected backup content?"
+
+//d: backup content
+//d: %U is the drive letter of the drive.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_backup_content_device_memory "Files from %U Device memory"
+
+//d: backup content
+//d: %U is the drive letter of the drive.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_fmgr_backup_content_mass_storage "Files from %U Mass storage"
+
+//d: restore content
+//d: %U is the drive letter of the drive.
+//l: list_double_graphic_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_restore_device_memory "Files from %U Device memory"
+
+//d: restore content
+//d: %U is the drive letter of the drive.
+//l: list_double_graphic_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_fmgr_restore_mass_storage "Files from %U Mass storage"
+
+//d:Error text when memory is not available
+//l:main_list_empty_pane
+//w:
+//r:3.2
+//
+#define qtn_memc_not_available "(Memory is not available)"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/rom/FileManager.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2002-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: Image description file for project File Manager
+*
+*/
+
+
+#ifndef __FILEMANAGER_IBY__
+#define __FILEMANAGER_IBY__
+
+S60_APP_EXE(FileManager)
+S60_APP_AIF_ICONS(FileManager)
+S60_APP_AIF_RSC(FileManager)
+
+ECOM_PLUGIN(filemanagerbkupplugin.dll, 0x10205078.rsc)
+ECOM_PLUGIN(filemanageraiwprovider.dll, 0x200110F8.rsc)
+
+file=ABI_DIR\BUILD_DIR\FILEMANAGERENGINE.DLL SHARED_LIB_DIR\FileManagerEngine.dll
+file=ABI_DIR\BUILD_DIR\FILEMANAGERVIEW.DLL SHARED_LIB_DIR\FileManagerView.dll
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,FileManager)
+file=ABI_DIR\BUILD_DIR\GFLM.dll SHARED_LIB_DIR\GFLM.dll
+data=DATAZ_\RESOURCE_FILES_DIR\GflmFileExtensionMimeTypes.rsc RESOURCE_FILES_DIR\GflmFileExtensionMimeTypes.rsc
+
+file=ABI_DIR\BUILD_DIR\filemanagerbkupengine.dll SHARED_LIB_DIR\filemanagerbkupengine.dll
+#ifdef RD_FILE_MANAGER_BACKUP
+ file=ABI_DIR\BUILD_DIR\filemanagerschbkup.exe SHARED_LIB_DIR\filemanagerschbkup.exe
+#endif // RD_FILE_MANAGER_BACKUP
+
+data=DATAZ_\private\101F84EB\backup_registration.xml private\101F84EB\backup_registration.xml
+
+#endif // __FILEMANAGER_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/rom/FileManagerResources.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2002-2006 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: Image description file for File Manager resources
+*
+*/
+
+
+#ifndef __FILEMANAGERRESOURCES_IBY__
+#define __FILEMANAGERRESOURCES_IBY__
+
+REM Filemanager Localized Data
+
+data=DATAZ_\RESOURCE_FILES_DIR\FILEMANAGERENGINE.rsc RESOURCE_FILES_DIR\FILEMANAGERENGINE.rsc
+data=DATAZ_\RESOURCE_FILES_DIR\FILEMANAGERVIEW.rsc RESOURCE_FILES_DIR\FILEMANAGERVIEW.rsc
+data=DATAZ_\APP_RESOURCE_DIR\FILEMANAGER.rsc APP_RESOURCE_DIR\FileManager.rsc
+data=DATAZ_\RESOURCE_FILES_DIR\filemanagerbkupchecker.rsc RESOURCE_FILES_DIR\filemanagerbkupchecker.rsc
+
+#endif // __FILEMANAGERRESOURCES_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/schbkup/inc/filemanagerschbackuptask.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2006 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: Handles file manager scheduled backup task start
+*
+*/
+
+
+#ifndef C_FILEMANAGERSCHBACKUPTASK_H
+#define C_FILEMANAGERSCHBACKUPTASK_H
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include "filemanagerschobserver.h"
+
+
+// FORWARD DECLARATIONS
+class CScheduledTask;
+class CFileManagerSchSubscriber;
+class CRepository;
+
+
+// CLASS DECLARATION
+/**
+ * This class handles scheduled backup task start functionality
+ *
+ * @since S60 3.1
+ */
+class CFileManagerSchBackupTask : public CActive,
+ public MFileManagerSchObserver
+ {
+
+public:
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerSchBackupTask* NewL( const CScheduledTask& aTask );
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerSchBackupTask();
+
+private: // From CActive
+ void RunL();
+
+ void DoCancel();
+
+ TInt RunError( TInt aError );
+
+private: // From FileManagerSchObserver
+ void NotifyKeyChangeOrTimeoutL(
+ const TUid& aCategory,
+ const TUint aKey,
+ const TBool aTimeout );
+
+private: // New methods
+ /**
+ * Constructors
+ */
+ CFileManagerSchBackupTask();
+
+ void ConstructL( const CScheduledTask& aTask );
+
+ /**
+ * Starts backup task start procedure
+ */
+ void StartL();
+
+ /**
+ * Exists backup task start procedure
+ */
+ void Exit();
+
+ /**
+ * Retries backup task start procedure
+ */
+ void Retry();
+
+ /**
+ * Starts file manager to run backup
+ */
+ void StartFileManagerL();
+
+ /**
+ * Checks is backup required
+ */
+ TBool CheckBackupRequired();
+
+ /**
+ * Checks phone state is it ok to start backup
+ */
+ TBool CheckPhoneStateL();
+
+private: // Data
+ /**
+ * Backup weekday, given from originator
+ */
+ TInt iDay;
+
+ /**
+ * Subscriber to observe phone and backup start states
+ * Own.
+ */
+ CFileManagerSchSubscriber* iSubscriber;
+
+ /**
+ * Pointer to file manager settings in CenRep
+ * Own.
+ */
+ CRepository* iCenRep;
+
+ /**
+ * Start attempts left
+ */
+ TInt iAttemptsLeft;
+
+ };
+
+
+#endif // C_FILEMANAGERSCHBACKUPTASK_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/schbkup/inc/filemanagerschobserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2006 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: Observes subscribed notifications
+*
+*/
+
+
+#ifndef M_FILEMANAGERSCHOBSERVER_H
+#define M_FILEMANAGERSCHOBSERVER_H
+
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+/**
+ * This class observes subscribed notifications
+ *
+ * @since S60 3.1
+ */
+class MFileManagerSchObserver
+ {
+
+public:
+ /**
+ * Handles notification
+ *
+ * @since S60 3.1
+ * @param aCategory Subcribed category uid
+ * @param aKey Subcribed key id
+ * @param aTimeout Is triggered by timeout or actual event
+ */
+ virtual void NotifyKeyChangeOrTimeoutL(
+ const TUid& aCategory,
+ const TUint aKey,
+ const TBool aTimeout ) = 0;
+
+ };
+
+#endif // M_FILEMANAGERSCHOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/schbkup/inc/filemanagerschsubscriber.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2006 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: Handles P&S and CenRep notifications
+*
+*/
+
+
+#ifndef C_FILEMANAGERSCHSUBSCRIBER_H
+#define C_FILEMANAGERSCHSUBSCRIBER_H
+
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+
+
+// FORWARD DECLARATIONS
+class MFileManagerSchObserver;
+class CRepository;
+
+
+// CLASS DECLARATION
+/**
+ * This class handles P&S and CenRep notifications
+ *
+ * @since S60 3.1
+ */
+class CFileManagerSchSubscriber : public CActive
+ {
+
+public:
+ /** Type of subscribed notifications */
+ enum TType
+ {
+ ESubscribePS = 0,
+ ESubscribeCR
+ };
+
+ /**
+ * Two-phased constructor.
+ */
+ static CFileManagerSchSubscriber* NewL(
+ MFileManagerSchObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TType aType,
+ const TInt aTimeoutSecs );
+
+ /**
+ * Destructor
+ */
+ ~CFileManagerSchSubscriber();
+
+private: // New methods
+ /**
+ * Constructors
+ */
+ CFileManagerSchSubscriber(
+ MFileManagerSchObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TType aType,
+ const TInt aTimeoutSecs );
+
+ void ConstructL();
+
+ /**
+ * Subscribes notification
+ */
+ void SubscribeL();
+
+ /**
+ * Timeout callback
+ * @param aPtr Pointer to subcriber
+ * @return System wide error code
+ */
+ static TInt TimeoutCB( void* aPtr );
+
+ /**
+ * Handles timeout
+ */
+ void Timeout();
+
+private: // From CActive
+ void RunL();
+
+ TInt RunError( TInt aError );
+
+ void DoCancel();
+
+private: // Data
+ /**
+ * Reference to observer interface
+ * Not own.
+ */
+ MFileManagerSchObserver& iObserver;
+
+ /**
+ * Pointer to CenRep
+ * Own.
+ */
+ CRepository* iCenRep;
+
+ /**
+ * Handle to PS
+ */
+ RProperty iProperty;
+
+ /**
+ * Category Uid
+ */
+ TUid iCategory;
+
+ /**
+ * Key id
+ */
+ TUint iKey;
+
+ /**
+ * Subscriber type
+ */
+ TType iType;
+
+ /**
+ * Timeout seconds
+ */
+ TInt iTimeoutSecs;
+
+ /**
+ * Timer for timeout
+ * Own.
+ */
+ CPeriodic* iTimer;
+
+ /**
+ * Indicates timeout status
+ */
+ TBool iTimeout;
+
+ };
+
+#endif // C_FILEMANAGERSCHSUBSCRIBER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/schbkup/src/filemanagerschbackupmain.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2006 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: Launches file manager scheduled backup task
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <f32file.h>
+#include <s32file.h>
+#include <schtask.h>
+#include "FileManagerDebug.h"
+#include "filemanagerschbackuptask.h"
+
+
+// CONSTANTS
+_LIT_SECURE_ID( KTaskSchedulerSID, 0x10005399 );
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// StartSchTaskL
+// ---------------------------------------------------------------------------
+//
+LOCAL_C void StartSchTaskL( RFile& aTaskFile )
+ {
+ INFO_LOG( "StartSchTaskL()-Started" )
+
+ // Create and install the active scheduler we need
+ CActiveScheduler* scheduler = new ( ELeave ) CActiveScheduler();
+ CleanupStack::PushL( scheduler );
+ CActiveScheduler::Install( scheduler );
+
+ // Get scheduled task parameters
+ CFileStore* store = CDirectFileStore::FromLC( aTaskFile );
+ RStoreReadStream instream;
+ instream.OpenLC( *store, store->Root() );
+
+ TInt count( instream.ReadInt32L() );
+ if ( !count )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ // Create the task to be started
+ CScheduledTask* task = CScheduledTask::NewLC( instream );
+ CFileManagerSchBackupTask* fmTask =
+ CFileManagerSchBackupTask::NewL( *task );
+ CleanupStack::PopAndDestroy( task );
+ CleanupStack::PopAndDestroy( &instream );
+ CleanupStack::PopAndDestroy( store );
+
+ // Start scheduler to handle the backup launch.
+ // This call exists after backup launch has finished.
+ CActiveScheduler::Start();
+
+ // Cleanup the task and scheduler
+ delete fmTask;
+ CleanupStack::PopAndDestroy( scheduler );
+
+ INFO_LOG( "StartSchTaskL()-Finished" )
+ }
+
+
+// ======== GLOBAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// E32Main
+// ---------------------------------------------------------------------------
+//
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+
+ INFO_LOG( "FileManagerSchBackup-E32Main()-Started" )
+
+ TInt err( KErrPermissionDenied );
+
+ // Check process creator and start scheduled task
+ if( User::CreatorSecureId() == KTaskSchedulerSID )
+ {
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+ if ( cleanupStack )
+ {
+ INFO_LOG( "FileManagerSchBkup-E32Main()-Adopt task file" )
+
+ RFile file;
+ err = file.AdoptFromCreator(
+ TScheduledTaskFile::FsHandleIndex(),
+ TScheduledTaskFile::FileHandleIndex() );
+ if ( err == KErrNone )
+ {
+ TRAP( err, StartSchTaskL( file ) );
+ file.Close();
+ }
+ delete cleanupStack;
+ }
+ else
+ {
+ err = KErrNoMemory;
+ }
+ }
+
+ LOG_IF_ERROR1( err, "FileManagerSchBackup-E32Main()-Error=%d", err )
+
+ INFO_LOG( "FileManagerSchBackup-E32Main()-Finished" )
+
+ __UHEAP_MARKEND;
+
+ return err;
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/schbkup/src/filemanagerschbackuptask.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,474 @@
+/*
+* Copyright (c) 2006-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: Handles file manager scheduled backup task start
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <schtask.h>
+#include <w32std.h>
+#include <apgtask.h>
+#include <apgcli.h>
+#include <apgwgnam.h>
+#include <apacmdln.h>
+#include <centralrepository.h>
+#include <ctsydomainpskeys.h>
+#include <UsbWatcherInternalPSKeys.h>
+#include <usbpersonalityids.h>
+#include <DataSyncInternalPSKeys.h>
+#include <connect/sbdefs.h>
+#include "filemanagerschbackuptask.h"
+#include "filemanagerschsubscriber.h"
+#include "FileManagerUID.h"
+#include "FileManagerDebug.h"
+#include "FileManagerSchDefinitions.h"
+#include "FileManagerPrivateCRKeys.h"
+
+using namespace conn;
+
+// CONSTANTS
+const TUid KUidFileManager = { KFileManagerUID3 };
+_LIT_SECURE_ID( KFileManagerSID, KFileManagerUID3 );
+const TInt KStartStateChangeTimeoutSecs = 30;
+const TInt KPhoneStateChangeTimeoutSecs = 120;
+const TInt KNumAttempts = -1; // Try forever
+
+
+// ======== 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;
+ }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::CFileManagerSchBackupTask
+// ---------------------------------------------------------------------------
+//
+CFileManagerSchBackupTask::CFileManagerSchBackupTask() :
+ CActive( EPriorityStandard ),
+ iDay( KErrNotFound ),
+ iAttemptsLeft( KNumAttempts )
+ {
+ FUNC_LOG
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::NewL
+// ---------------------------------------------------------------------------
+//
+CFileManagerSchBackupTask* CFileManagerSchBackupTask::NewL(
+ const CScheduledTask& aTask )
+ {
+ FUNC_LOG
+
+ CFileManagerSchBackupTask* self =
+ new ( ELeave ) CFileManagerSchBackupTask();
+ CleanupStack::PushL( self );
+ self->ConstructL( aTask );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::~CFileManagerSchBackupTask
+// ---------------------------------------------------------------------------
+//
+CFileManagerSchBackupTask::~CFileManagerSchBackupTask()
+ {
+ FUNC_LOG
+
+ delete iSubscriber;
+ delete iCenRep;
+ Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::RunL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::RunL()
+ {
+ StartL();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::DoCancel()
+ {
+ delete iSubscriber;
+ iSubscriber = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::RunError()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerSchBackupTask::RunError(
+#ifdef FILE_MANAGER_ERROR_LOG_ENABLED
+ TInt aError
+#else // FILE_MANAGER_ERROR_LOG_ENABLED
+ TInt /*aError*/
+#endif // FILE_MANAGER_ERROR_LOG_ENABLED
+ )
+ {
+ ERROR_LOG1( "CFileManagerSchBackupTask::RunError()-Error=%d", aError )
+
+ // Try again
+ Retry();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::ConstructL( const CScheduledTask& aTask )
+ {
+ FUNC_LOG
+
+ INFO_LOG1( "CFileManagerTaskScheduler::ConstructL()-Repeat=%d",
+ aTask.Info().iRepeat )
+
+ CActiveScheduler::Add( this );
+
+ // Check task creator
+ if( aTask.SecurityInfo().iSecureId.iId != KFileManagerSID )
+ {
+ User::Leave( KErrPermissionDenied );
+ }
+
+ // Get pointer to file manager settings
+ iCenRep = CRepository::NewL( KCRUidFileManagerSettings );
+
+ // Get backup weekday if given from originator
+ const HBufC& data( aTask.Data() );
+ if ( data.Length() )
+ {
+ TLex parse;
+ parse.Assign( data );
+ User::LeaveIfError( parse.Val( iDay ) );
+ }
+
+ Retry();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::CheckBackupRequired
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerSchBackupTask::CheckBackupRequired()
+ {
+ TBool ret( ETrue );
+
+ // Check schedule type
+ TInt scheduling( 0 );
+ iCenRep->Get( KFileManagerBackupScheduling, scheduling );
+ if ( scheduling == EFileManagerBackupScheduleNone )
+ {
+ // Backup is not required
+ ret = EFalse;
+ }
+
+ // Check weekday
+ if ( ret && iDay != KErrNotFound )
+ {
+ TTime time;
+ time.HomeTime();
+ if ( time.DayNoInWeek() != iDay )
+ {
+ // Backup is not required today
+ ret = EFalse;
+ }
+ }
+
+ if ( !ret )
+ {
+ INFO_LOG( "CFileManagerSchBackupTask::CheckBackupRequired()-No" )
+ Exit();
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::CheckPhoneStateL
+// ---------------------------------------------------------------------------
+//
+TBool CFileManagerSchBackupTask::CheckPhoneStateL()
+ {
+ // Check call state
+ TInt callState( 0 );
+ RProperty::Get(
+ KPSUidCtsyCallInformation, KCTsyCallState, callState );
+ if ( callState != EPSCTsyCallStateNone )
+ {
+ INFO_LOG1( "CFileManagerSchBackupTask::CheckPhoneStateL()-callState=%d",
+ callState )
+
+ // Set subscriber to wait call to finish
+ iSubscriber = CFileManagerSchSubscriber::NewL(
+ *this,
+ KPSUidCtsyCallInformation,
+ KCTsyCallState,
+ CFileManagerSchSubscriber::ESubscribePS,
+ KPhoneStateChangeTimeoutSecs );
+ return EFalse;
+ }
+
+ // Check usb transfer state
+ TInt usbState( 0 );
+ RProperty::Get(
+ KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbState );
+ if ( usbState == KUsbPersonalityIdMS )
+ {
+ INFO_LOG( "CFileManagerSchBackupTask::CheckPhoneStateL()-Usb transfer on" )
+
+ // Set subscriber to wait usb transfer to finish
+ iSubscriber = CFileManagerSchSubscriber::NewL(
+ *this,
+ KPSUidUsbWatcher,
+ KUsbWatcherSelectedPersonality,
+ CFileManagerSchSubscriber::ESubscribePS,
+ KPhoneStateChangeTimeoutSecs );
+ return EFalse;
+ }
+
+ // Check synchronization state
+ TInt syncState( 0 );
+ RProperty::Get(
+ KPSUidDataSynchronizationInternalKeys, KDataSyncStatus, syncState );
+ if ( syncState > 0 )
+ {
+ INFO_LOG( "CFileManagerSchBackupTask::CheckPhoneStateL()-Synchronization on" )
+
+ // Set subscriber to wait usb transfer to finish
+ iSubscriber = CFileManagerSchSubscriber::NewL(
+ *this,
+ KPSUidDataSynchronizationInternalKeys,
+ KDataSyncStatus,
+ CFileManagerSchSubscriber::ESubscribePS,
+ KPhoneStateChangeTimeoutSecs );
+ return EFalse;
+ }
+
+ // Check backup/restore (e.g. PC Suite initiated) state
+ TInt burState( 0 );
+ RProperty::Get(
+ KUidSystemCategory, KUidBackupRestoreKey, burState );
+
+ const TBURPartType partType = static_cast< TBURPartType >
+ ( burState & KBURPartTypeMask );
+
+ if ( partType != EBURUnset && partType != EBURNormal )
+ {
+ INFO_LOG( "CFileManagerSchBackupTask::CheckPhoneStateL()-Backup/restore on" )
+
+ // Set subscriber to wait backup or restore to finish
+ iSubscriber = CFileManagerSchSubscriber::NewL(
+ *this,
+ KUidSystemCategory,
+ KUidBackupRestoreKey,
+ CFileManagerSchSubscriber::ESubscribePS,
+ KPhoneStateChangeTimeoutSecs );
+ return EFalse;
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::StartL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::StartL()
+ {
+ FUNC_LOG
+
+ delete iSubscriber;
+ iSubscriber = NULL;
+
+ if ( !CheckBackupRequired() )
+ {
+ return;
+ }
+ if ( !CheckPhoneStateL() )
+ {
+ return;
+ }
+
+ // Set backup starting state
+ iCenRep->Set(
+ KFileManagerLastSchBackupStatus,
+ EFileManagerSchBackupStatusStarting );
+
+ // Set subscriber to watch backup start success
+ iSubscriber = CFileManagerSchSubscriber::NewL(
+ *this,
+ KCRUidFileManagerSettings,
+ KFileManagerLastSchBackupStatus,
+ CFileManagerSchSubscriber::ESubscribeCR,
+ KStartStateChangeTimeoutSecs );
+
+ // Start file manager for backup and ensure that it starts properly
+ StartFileManagerL();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::Exit
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::Exit()
+ {
+ FUNC_LOG
+
+ Cancel();
+ CActiveScheduler::Stop();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::Retry
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::Retry()
+ {
+ if ( iAttemptsLeft != 0 )
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ SetActive();
+
+ if ( iAttemptsLeft > 0 )
+ {
+ --iAttemptsLeft;
+ }
+ }
+ else
+ {
+ Exit();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::StartFileManagerL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::StartFileManagerL()
+ {
+ FUNC_LOG
+
+ RWsSession wsSession;
+ User::LeaveIfError( wsSession.Connect() );
+ CleanupClosePushL( wsSession );
+ // Backup cannot be done from embedded file manager.
+ // Backup operation closes the app where file manager is started and
+ // the backup operation stops because file manager gets closed as well.
+ TInt wgId( 0 );
+ if ( FindStandaloneAppL( wsSession, KUidFileManager, wgId ) )
+ {
+ // Notify running standalone file manager to start backup
+ HBufC8* param8 = HBufC8::NewLC( KSchBackupTaskName().Length() );
+ TPtr8 paramPtr( param8->Des() );
+ paramPtr.Copy( KSchBackupTaskName );
+ wsSession.SendMessageToWindowGroup(
+ wgId,
+ TUid::Uid( KUidApaMessageSwitchOpenFileValue ),
+ *param8 );
+ CleanupStack::PopAndDestroy( param8 );
+ }
+ else
+ {
+ // Start standalone file manager for backup
+ TApaAppInfo appInfo;
+ RApaLsSession apaLsSession;
+ User::LeaveIfError( apaLsSession.Connect() );
+ CleanupClosePushL( apaLsSession );
+ User::LeaveIfError( apaLsSession.GetAppInfo(
+ appInfo, KUidFileManager ) );
+ CApaCommandLine* apaCmdLine = CApaCommandLine::NewLC();
+ apaCmdLine->SetExecutableNameL( appInfo.iFullName );
+ apaCmdLine->SetCommandL( EApaCommandBackground );
+ TThreadId fmThreadId;
+ User::LeaveIfError( apaLsSession.StartApp(
+ *apaCmdLine, fmThreadId ) );
+ CleanupStack::PopAndDestroy( apaCmdLine );
+ CleanupStack::PopAndDestroy( &apaLsSession );
+ }
+ CleanupStack::PopAndDestroy( &wsSession );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchBackupTask::NotifyKeyChangeOrTimeoutL
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchBackupTask::NotifyKeyChangeOrTimeoutL(
+ const TUid& aCategory,
+ const TUint aKey,
+ const TBool aTimeout )
+ {
+ FUNC_LOG
+
+ if ( aCategory == KCRUidFileManagerSettings &&
+ aKey == KFileManagerLastSchBackupStatus &&
+ !aTimeout )
+ {
+ // Backup was started, the task starter can be finished
+ Exit();
+ }
+ else
+ {
+ // Backup was not started, try starting it again
+ Retry();
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/schbkup/src/filemanagerschsubscriber.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2006 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: Handles P&S and CenRep notifications
+*
+*/
+
+
+
+// INCLUDES
+#include <centralrepository.h>
+#include "filemanagerschsubscriber.h"
+#include "filemanagerschobserver.h"
+#include "FileManagerDebug.h"
+
+
+// CONSTANTS
+const TUint32 KMicroSecsPerSec = 1000000;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::NewL()
+// ---------------------------------------------------------------------------
+//
+CFileManagerSchSubscriber* CFileManagerSchSubscriber::NewL(
+ MFileManagerSchObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TType aType,
+ const TInt aTimeoutSecs )
+ {
+ CFileManagerSchSubscriber* self =
+ new (ELeave)CFileManagerSchSubscriber(
+ aObserver, aCategory, aKey, aType, aTimeoutSecs );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchSubscriber::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+
+ if ( iType == ESubscribePS )
+ {
+ User::LeaveIfError( iProperty.Attach( iCategory, iKey ) );
+ }
+ else
+ {
+ iCenRep = CRepository::NewL( iCategory );
+ }
+
+ SubscribeL();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::SubscribeL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchSubscriber::SubscribeL()
+ {
+ iTimeout = EFalse;
+
+ if ( iType == ESubscribePS )
+ {
+ iProperty.Subscribe( iStatus );
+ }
+ else
+ {
+ User::LeaveIfError( iCenRep->NotifyRequest( iKey, iStatus ) );
+ }
+
+ if ( iTimeoutSecs > 0 )
+ {
+ delete iTimer;
+ iTimer = NULL;
+
+ iTimer = CPeriodic::NewL( EPriorityStandard );
+ TUint32 us( iTimeoutSecs * KMicroSecsPerSec );
+ iTimer->Start( us, us, TCallBack( TimeoutCB, this ) );
+ }
+
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::TimeoutCB()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerSchSubscriber::TimeoutCB( void* aPtr )
+ {
+ CFileManagerSchSubscriber* self =
+ static_cast< CFileManagerSchSubscriber* >( aPtr );
+
+ self->Timeout();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::Timeout()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchSubscriber::Timeout()
+ {
+ delete iTimer;
+ iTimer = NULL;
+
+ Cancel();
+
+ // Set timeout status
+ iTimeout = ETrue;
+
+ // Complete
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::CFileManagerSchSubscriber()
+// ---------------------------------------------------------------------------
+//
+CFileManagerSchSubscriber::CFileManagerSchSubscriber(
+ MFileManagerSchObserver& aObserver,
+ const TUid& aCategory,
+ const TUint aKey,
+ const TType aType,
+ const TInt aTimeoutSecs ) :
+ CActive( EPriorityStandard ),
+ iObserver( aObserver ),
+ iCategory( aCategory),
+ iKey( aKey ),
+ iType( aType ),
+ iTimeoutSecs ( aTimeoutSecs )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::RunL()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchSubscriber::RunL()
+ {
+ // If timeout, no need to resubscribe
+ if ( !iTimeout )
+ {
+ SubscribeL();
+ }
+
+ iObserver.NotifyKeyChangeOrTimeoutL( iCategory, iKey, iTimeout );
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CFileManagerSchSubscriber::DoCancel()
+ {
+ delete iTimer;
+ iTimer = NULL;
+
+ if ( iType == ESubscribePS )
+ {
+ iProperty.Cancel();
+ }
+ else
+ {
+ iCenRep->NotifyCancel( iKey );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::RunError()
+// ---------------------------------------------------------------------------
+//
+TInt CFileManagerSchSubscriber::RunError( TInt aError )
+ {
+ ERROR_LOG1( "CFileManagerSchSubscriber::RunError()-Error=%d", aError )
+ return aError;
+ }
+
+// ---------------------------------------------------------------------------
+// CFileManagerSchSubscriber::~CFileManagerSchSubscriber()
+// ---------------------------------------------------------------------------
+//
+CFileManagerSchSubscriber::~CFileManagerSchSubscriber()
+ {
+ Cancel();
+ iProperty.Close();
+ delete iCenRep;
+ delete iTimer;
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/files_plat/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006 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: Includes all the Domain API specific bld.inf files, which
+* export files.
+*
+*/
+
+
+
+#include "../memory_scan_popup_ui_api/group/bld.inf"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/files_plat/memory_scan_popup_ui_api/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2009 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: File that exports the files belonging to
+: Memory Scan Popup UI API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/CMemStatePopup.h APP_LAYER_PLATFORM_EXPORT_PATH(cmemstatepopup.h)
+../inc/MSPUtil.h APP_LAYER_PLATFORM_EXPORT_PATH(msputil.h)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/files_plat/memory_scan_popup_ui_api/inc/CMemStatePopup.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2006 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:
+* Memory State Popup.
+*
+*
+*/
+
+
+#ifndef __CMEMORYSTATEPOPUP_H__
+#define __CMEMORYSTATEPOPUP_H__
+
+// SYSTEM INCLUDES
+#include <e32base.h>
+
+// USER INCLUDES
+#include "MSPUtil.h"
+
+// CONSTANTS
+const TText KRightToLeftMark = 0x200F;
+
+// CLASS DEFINITION
+class CMemStatePopup : public CBase
+ {
+ public:
+ // Destructor
+ virtual ~CMemStatePopup( );
+
+ private:
+ // C++ constructors
+ CMemStatePopup( );
+
+ public:
+ /**
+ * Launches the memory scan popup
+ * @param aDrive The drive to be scanned
+ * @param aTitle Title of the popup
+ */
+ IMPORT_C static void RunLD( TDriveNumber aDrive, TDesC& aTitle );
+
+ /**
+ * Get an instance of CMSPUtil class, containing the unit text array
+ * @param aUtil Reference to a CMSPUtil pointer,
+ * updated to point to the instance created
+ */
+ IMPORT_C static void GetUtilL( CMSPUtil*& aUtil );
+
+ private:
+ // Not implemented
+ CMemStatePopup( const CMemStatePopup& );
+ CMemStatePopup& operator=( CMemStatePopup& );
+
+ private:
+ };
+
+#endif // __CMEMORYSTATEPOPUP_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/files_plat/memory_scan_popup_ui_api/inc/MSPUtil.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,85 @@
+/*
+* 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:
+* Utility class for Memory State Popup.
+*
+*
+*/
+
+
+#ifndef __CMSPUTIL_H__
+#define __CMSPUTIL_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+
+
+// CLASS DEFINITION
+
+class CMSPUtil : public CBase
+ {
+ public:
+ /**
+ * Static constructor.
+ * @param aArray Array of unit texts.
+ * @return Pointer to an instance of CMSPUtil.
+ */
+ static CMSPUtil* NewL( CDesCArrayFlat* aArray );
+
+ /**
+ * Virtual D'tor.
+ */
+ virtual ~CMSPUtil( );
+
+ protected:
+ /**
+ * Default c'tor, protected to prevent using directly.
+ */
+ CMSPUtil( );
+
+ public:
+ /**
+ * Type of unit.
+ */
+ enum TUnitType
+ {
+ EByte = 0,
+ EKiloByte,
+ EMegaByte,
+ EGigaByte,
+ ETeraByte
+ };
+
+ public:
+ /**
+ * Solves the correct unit for given data size.
+ * @param aNumber Amount of data to be solved, changed accordingly.
+ * @return Unit text descriptor.
+ */
+ IMPORT_C TPtrC SolveUnitAndSize( TInt64& aNumber );
+
+ private:
+ /**
+ * Solves the correct unit for given data size, used internally.
+ * @param aNumber Amount of data to be solved, changed accordingly.
+ * @param aUnit Unit text index in unit array.
+ */
+ void SolveUnitAndSize( TInt64& aNumber, TInt& aUnit );
+
+ private:
+ CDesCArrayFlat* iUnitArray;
+ };
+
+#endif // __CMSPUTIL_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/files_plat/memory_scan_popup_ui_api/memory_scan_popup_ui_api.metaxml Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="3fb9277e3611d81e27f94c61495a3e70" dataversion="2.0">
+ <name>Memory Scan Popup UI API</name>
+ <description>An interface for showing a pop-up dialog about the memory status of the user data area or memory card.</description>
+ <type>c++</type>
+ <collection>filesystemuis</collection>
+ <libs>
+ <lib name="memstatepopup.lib" />
+ </libs>
+ <release category="platform"/>
+ <attributes>
+ <!-- This indicates wether the api provedes separate html documentation -->
+ <!-- or is the additional documentation generated from headers. -->
+ <!-- If you are unsuere then the value is "no" -->
+ <htmldocprovided>no</htmldocprovided>
+ <adaptation>no</adaptation>
+ </attributes>
+</api>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006 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: bld for filesystemuis
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+#include "../memscaneng/group/bld.inf"
+#include "../memstatepopup/group/bld.inf"
+
+
+PRJ_TESTMMPFILES
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/bwins/MemScanClientU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,11 @@
+EXPORTS
+ ??0RMemScanClient@@QAE@XZ @ 1 NONAME ; RMemScanClient::RMemScanClient(void)
+ ?Close@RMemScanClient@@QAEXXZ @ 2 NONAME ; void RMemScanClient::Close(void)
+ ?Connect@RMemScanClient@@QAEHXZ @ 3 NONAME ; int RMemScanClient::Connect(void)
+ ?DataGroupsL@RMemScanClient@@QBEPAVCDesC16Array@@XZ @ 4 NONAME ; class CDesC16Array * RMemScanClient::DataGroupsL(void) const
+ ?RequestScanEvents@RMemScanClient@@QAEXAAHAAVTRequestStatus@@@Z @ 5 NONAME ; void RMemScanClient::RequestScanEvents(int &, class TRequestStatus &)
+ ?RequestScanEventsCancel@RMemScanClient@@QAEXXZ @ 6 NONAME ; void RMemScanClient::RequestScanEventsCancel(void)
+ ?Scan@RMemScanClient@@QAEHW4TDriveNumber@@@Z @ 7 NONAME ; int RMemScanClient::Scan(enum TDriveNumber)
+ ?ScanInProgress@RMemScanClient@@QBEHXZ @ 8 NONAME ; int RMemScanClient::ScanInProgress(void) const
+ ?ScanResultL@RMemScanClient@@QBEPAV?$CArrayFix@_J@@XZ @ 9 NONAME ; class CArrayFix<long long> * RMemScanClient::ScanResultL(void) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/bwins/msengu.def Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,11 @@
+EXPORTS
+ ??1CMseng@@UAE@XZ @ 1 NONAME ; CMseng::~CMseng(void)
+ ?CancelL@CMseng@@QAEXXZ @ 2 NONAME ; void CMseng::CancelL(void)
+ ?DataGroupsL@CMseng@@QBEPAVCDesC16Array@@XZ @ 3 NONAME ; class CDesC16Array * CMseng::DataGroupsL(void) const
+ ?DiskInfoL@CMseng@@QBEXAA_J0W4TDriveNumber@@@Z @ 4 NONAME ; void CMseng::DiskInfoL(long long &, long long &, enum TDriveNumber) const
+ ?MemInfoL@CMseng@@SAXAA_J0@Z @ 5 NONAME ; void CMseng::MemInfoL(long long &, long long &)
+ ?NewL@CMseng@@SAPAV1@AAVMMsengUIHandler@@@Z @ 6 NONAME ; class CMseng * CMseng::NewL(class MMsengUIHandler &)
+ ?ScanInProgress@CMseng@@QBEHXZ @ 7 NONAME ; int CMseng::ScanInProgress(void) const
+ ?ScanL@CMseng@@QAEXW4TDriveNumber@@@Z @ 8 NONAME ; void CMseng::ScanL(enum TDriveNumber)
+ ?ScanResultL@CMseng@@QBEPAV?$CArrayFix@_J@@XZ @ 9 NONAME ; class CArrayFix<long long> * CMseng::ScanResultL(void) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/clientinc/memscanclient.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2006-2006 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: Memory Scan Client
+*
+*/
+
+
+#ifndef __MEMSCANCLIENT_H__
+#define __MEMSCANCLIENT_H__
+
+#include <e32std.h>
+#include <f32file.h> // TDriveNumber
+#include <badesca.h> // Descriptor arrays
+
+#include "memscanclientserver.h"
+
+// ---------------------------------------------------------------------------
+// Client
+// ---------------------------------------------------------------------------
+
+class RMemScanClient : public RSessionBase
+ {
+public:
+ IMPORT_C RMemScanClient();
+ IMPORT_C TInt Connect();
+ IMPORT_C void Close();
+
+public: // API
+ IMPORT_C TInt Scan(const TDriveNumber aDrive);
+ IMPORT_C CDesCArray* DataGroupsL() const;
+ IMPORT_C void RequestScanEvents( TInt& aError, TRequestStatus& aRequestStatus );
+ IMPORT_C void RequestScanEventsCancel();
+ IMPORT_C TBool ScanInProgress( ) const;
+ IMPORT_C CArrayFix<TInt64>* ScanResultL() const;
+
+private:
+ TPtr8 iScanEventPackagePointer;
+ };
+
+
+#endif //__MEMSCANCLIENT_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/clientsrc/memscanclient.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2006-2006 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: Memory Scan Client
+*
+*/
+
+
+
+// SYSTEM INCLUDES
+#include <e32svr.h>
+#include <s32mem.h> // RBufReadStream
+
+// USER INCLUDES
+#include "memscanclient.h"
+#include "memscanutils.h" // traces
+
+
+// Standard server startup code
+//
+static TInt StartServer()
+ {
+ TRACES( RDebug::Print(_L("MemScanClient: Starting server...")) );
+
+ RProcess server;
+ TInt r=server.Create(KMemScanServImg,KNullDesC);
+
+ if (r!=KErrNone)
+ {
+ TRACES( RDebug::Print(_L("MemScanClient: server start failed %d"),r) );
+ return r;
+ }
+ TRequestStatus stat;
+ server.Rendezvous(stat);
+ if (stat!=KRequestPending)
+ server.Kill(0); // abort startup
+ else
+ server.Resume(); // logon OK - start the server
+ TRACES( RDebug::Print(_L("MemScanClient: Started")) );
+ User::WaitForRequest(stat); // wait for start or death
+ // we can't use the 'exit reason' if the server panicked as this
+ // is the panic 'reason' and may be '0' which cannot be distinguished
+ // from KErrNone
+ r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+ server.Close();
+ return r;
+ }
+
+EXPORT_C RMemScanClient::RMemScanClient()
+: iScanEventPackagePointer( NULL, 0, 0 )
+ {
+ }
+
+
+// This is the standard retry pattern for server connection
+EXPORT_C TInt RMemScanClient::Connect()
+ {
+ TVersion version(KMemScanServMajor, KMemScanServMinor, KMemScanServBuild);
+ TInt retry=2;
+ for (;;)
+ {
+ TInt r=CreateSession(KMemScanServName, version, 1);
+ if (r!=KErrNotFound && r!=KErrServerTerminated)
+ return r;
+ if (--retry==0)
+ return r;
+ r=StartServer();
+ if (r!=KErrNone && r!=KErrAlreadyExists)
+ return r;
+ }
+ }
+
+EXPORT_C void RMemScanClient::Close()
+ {
+ RSessionBase::Close(); //basecall
+ }
+
+
+// ***************************************************************************
+// Client Server functions
+// ***************************************************************************
+
+
+// ---------------------------------------------------------------------------
+// RMemScanClient::DataGroupsL()
+//
+// ---------------------------------------------------------------------------
+EXPORT_C CDesCArray* RMemScanClient::DataGroupsL() const
+ {
+ // Ask server to externalize the data group array to buffer
+ // and to provide size of buffer
+ TPckgBuf<TInt> bufferSize;
+ User::LeaveIfError(SendReceive( EMemScanPrepareDataGroups, TIpcArgs(&bufferSize) ));
+
+ // Create a buffer of sufficient size in order to fetch the
+ // buffer from the server
+ CBufBase* buffer = CBufFlat::NewL( bufferSize() ); //buffer granularity
+ CleanupStack::PushL( buffer );
+ buffer->ResizeL( bufferSize() ); //buffer size
+
+ // Now fetch the transfer buffer from the server
+ TPtr8 pBuffer(buffer->Ptr(0));
+ User::LeaveIfError(SendReceive( EMemScanGetDataGroups, TIpcArgs(&pBuffer) ));
+
+ // *** Start internalizing the buffer ***
+
+ RBufReadStream stream(*buffer);
+ CleanupClosePushL(stream);
+
+ // Read the number of data groups from the beginning of the stream
+ const TInt count = stream.ReadInt32L();
+
+ // Create the array for the data group names with appropriate granularity
+ CDesCArray* dataGroupNameArray = new (ELeave) CDesCArrayFlat(count);
+ CleanupStack::PushL( dataGroupNameArray );
+
+
+ // Read each group name to array
+ for(TInt i=0; i<count; i++)
+ {
+ // Read number of bytes in varying length descriptor
+ const TInt length = stream.ReadInt32L();
+ // Read datagroup name
+ HBufC* group = HBufC::NewLC( stream, length );
+ dataGroupNameArray->AppendL( *group );
+ CleanupStack::PopAndDestroy( group );
+ }
+
+ // *** Internalizing done ***
+
+ CleanupStack::Pop( dataGroupNameArray );
+ CleanupStack::PopAndDestroy( &stream );
+ CleanupStack::PopAndDestroy( buffer );
+
+
+ return dataGroupNameArray;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMemScanClient::ScanResultL()
+//
+// ---------------------------------------------------------------------------
+EXPORT_C CArrayFix<TInt64>* RMemScanClient::ScanResultL() const
+ {
+ // Ask server to externalize the scan result array to buffer
+ // and to provide size of buffer
+ TPckgBuf<TInt> bufferSize;
+ User::LeaveIfError(SendReceive(EMemScanPrepareScanResults, TIpcArgs( &bufferSize )));
+
+ // Create a buffer of sufficient size in order to fetch the
+ // buffer from the server
+ CBufBase* buffer = CBufFlat::NewL( bufferSize() ); //buffer granularity
+ CleanupStack::PushL( buffer );
+ buffer->ResizeL( bufferSize() ); //buffer size
+
+ // Now fetch the transfer buffer from the server
+ TPtr8 pBuffer(buffer->Ptr(0));
+ TIpcArgs args(&pBuffer);
+ User::LeaveIfError(SendReceive( EMemScanGetScanResults, args ));
+
+ // *** Start internalizing the buffer ***
+
+ RBufReadStream stream(*buffer);
+ CleanupClosePushL(stream);
+
+ // Read the number of results from the beginning of the stream
+ const TInt count = stream.ReadInt32L();
+
+ // Create the result array with such granularity
+ // that reallocations do not happen
+ CArrayFix<TInt64>* resultArray = new (ELeave) CArrayFixFlat<TInt64>(count);
+ CleanupStack::PushL(resultArray);
+
+
+ // Read scan results for each data group and write them to result array
+ for(TInt i=0; i<count; i++)
+ {
+ TInt64 result;
+ stream >> result;
+ resultArray->AppendL(result);
+ }
+
+ // *** Internalizing done ***
+
+ CleanupStack::Pop( resultArray );
+ CleanupStack::PopAndDestroy( &stream );
+ CleanupStack::PopAndDestroy( buffer );
+
+
+ return resultArray;
+ }
+
+// ---------------------------------------------------------------------------
+// RMemScanClient::Scan()
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TInt RMemScanClient::Scan(TDriveNumber aDrive)
+ {
+ TInt err = SendReceive( EMemScanStartScan, TIpcArgs( aDrive ) );
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMemScanClient::RequestScanEvents()
+//
+// ---------------------------------------------------------------------------
+EXPORT_C void RMemScanClient::RequestScanEvents( TInt& aError, TRequestStatus& aRequestStatus )
+ {
+ iScanEventPackagePointer.Set( (TUint8*) &aError, sizeof(TInt), sizeof(TInt) );
+
+ TIpcArgs args( &iScanEventPackagePointer );
+ SendReceive( EMemScanRequestScanEvents, args, aRequestStatus );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMemScanClient::RequestScanEventsCancel()
+//
+// ---------------------------------------------------------------------------
+EXPORT_C void RMemScanClient::RequestScanEventsCancel()
+ {
+ // There is nothing client can do if cancelling went wrong,
+ // so we don't return any error
+ SendReceive( EMemScanRequestScanEventsCancel );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RMemScanClient::ScanInProgress()
+//
+// ---------------------------------------------------------------------------
+EXPORT_C TBool RMemScanClient::ScanInProgress() const
+ {
+ TBool result = EFalse;
+ TInt err = SendReceive(EMemScanInProgress);
+ if( err < 0 )
+ {
+ result = EFalse;
+ }
+ else
+ {
+ result = static_cast<TBool> (err);
+ }
+ return result;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/data/mseng.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,807 @@
+/*
+* Copyright (c) 2005-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 file contains all the resources for the module.
+*
+*/
+
+
+#include "mseng.hrh"
+#include "mseng.rh"
+#include <mseng.loc>
+#include <eikon.rh>
+#include <pathconfiguration.hrh>
+
+NAME MENG
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf="mseng"; }
+
+/**
+* The directories that are scanned on internal drive (C:).
+*/
+RESOURCE DIRECTORYARRAY c_directories
+ {
+ directories=
+ {
+ text_phone_memory_root_path
+ };
+ }
+
+/**
+* The directories that are scanned on removable drive.
+*/
+RESOURCE DIRECTORYARRAY e_directories
+ {
+ directories=
+ {
+ text_memory_card_root_path
+ };
+ }
+
+/**
+* The directories that are recursively NOT scanned on internal drive,
+* even if they are subdirectories of a root directory
+*/
+RESOURCE DIRECTORYARRAY c_excluded_directories
+ {
+ directories=
+ {
+ // Not really needed since this is not under scanning root dir,
+ // but BAFL panics if the array is left empty...
+ "?:\\private\\",
+ "?:\\resource\\",
+ "?:\\sys\\",
+ "?:\\system\\"
+ };
+ }
+
+/**
+* The directories that are recursively NOT scanned on removable drive.
+* These directories will be set to hidden.
+*/
+RESOURCE DIRECTORYARRAY e_excluded_directories
+ {
+ directories=
+ {
+ "?:\\private\\",
+ "?:\\resource\\",
+ "?:\\sys\\",
+ "?:\\system\\"
+ };
+ }
+
+/**
+* The files on internal drive (C:) that are not scanned by uid or ext,
+* for example because they are located outside the
+* normally scanned filesystem part (directoryarray).
+*/
+RESOURCE EXTRADATAFILES c_extradatafiles
+ {
+ extradatafile=
+ {
+ EXTRADATAFILE
+ {
+ datagroup=EGroupDocuments;
+ filepath="?:\\private\\100012a5\\DBS_101F8878_Notepad.dat";
+ // Note: Documents created outside Notepad
+ // are scanned separately by extensions.
+ },
+
+ EXTRADATAFILE
+ {
+ datagroup=EGroupCalendar;
+ filepath="?:\\private\\10003a5b\\calendar";
+ },
+ EXTRADATAFILE
+ {
+ datagroup=EGroupContacts;
+ filepath="?:\\private\\10003a73\\Contacts.cdb";
+ }
+ };
+ }
+
+/**
+* The files on E drive that are not scanned by uid or ext,
+* for example because they are located outside the
+* normally scanned filesystem part (directoryarray).
+*/
+RESOURCE EXTRADATAFILES e_extradatafiles
+ {
+ extradatafile=
+ {
+ // No current database files on E drive
+ };
+ }
+
+/**
+* Another special case are the directories on internal (C:) drive, where all files,
+* regardless of their type, belong to the same data group.
+*/
+RESOURCE SPECIAL_DATADIRS c_special_datadirs
+ {
+ special_datadir=
+ {
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupMessages;
+ path="?:\\private\\1000484b\\Mail2\\";
+ excludeddatafiles=
+ {
+ "Index",
+ "00100000",
+ "00001000"
+ };
+ },
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupMidpJava;
+ path="?:\\private\\102033E6\\MIDlets\\";
+ // Note: Midlets outside private dirs are scanned by extensions
+ excludeddatafiles=
+ {
+ };
+ },
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupNativeApps;
+ path="?:\\private\\10202dce\\";
+ // Note: Sis-packages outside private dirs are scanned by extensions
+ excludeddatafiles=
+ {
+ "preInstalledAppsCache.dat"
+ };
+ }
+ };
+ }
+
+/**
+* Another special case are the directories on removable drive, where all
+* files regardless of their type, belong to the same data group.
+*/
+RESOURCE SPECIAL_DATADIRS e_special_datadirs
+ {
+ special_datadir=
+ {
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupContacts;
+ path=text_memory_card_contacts_path;
+ excludeddatafiles=
+ {
+ };
+ },
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupMessages;
+ path="?:\\private\\1000484b\\Mail2\\";
+ excludeddatafiles=
+ {
+ "Index",
+ "00100000",
+ "00001000"
+ };
+ },
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupMidpJava;
+ path="?:\\private\\102033E6\\MIDlets\\";
+ // Note: Midlets outside private dirs are scanned by extensions
+ excludeddatafiles=
+ {
+ };
+ },
+ SPECIAL_DATADIR
+ {
+ datagroup=EGroupNativeApps;
+ path="?:\\private\\10202dce\\";
+ // Note: Sis-packages outside private dirs are scanned by extensions
+ excludeddatafiles=
+ {
+ "preInstalledAppsCache.dat"
+ };
+ }
+ };
+ }
+
+/**
+* The resources for UIDs.
+* This array creates the mapping between TUidTypes enumeration
+* and the actual application UIDs.
+* Take care that all UIDs from TUidTypes are handled here.
+*
+* These MUST be in the same order as in enum TUidTypes!
+* Otherwise will panic on construction.
+*
+*/
+RESOURCE UIDARRAY uidarray
+ {
+ uidtypeelements=
+ {
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeMultimedia;
+ uid=0x100058E1; // from mmsconst.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeSMTP;
+ uid=0x10001028; // from miutset.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypePOP3;
+ uid=0x10001029; // from miutset.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeIMAP4;
+ uid=0x1000102A; // from miutset.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeSMS;
+ uid=0x1000102C; // from miutset.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeFax;
+ uid=0x1000102B; // from miutset.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeIr;
+ uid=0x100053A4; // from irobutil.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidMsgTypeBt;
+ uid=0x10009ED5; // from btmsgtypeuid.h
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidTest1;
+ uid=0x0123456A; // TEST
+ },
+ UIDTYPEELEMENT
+ {
+ uidtype=EUidTest2;
+ uid=0x0123456B; // TEST
+ }
+ };
+ }
+
+/**
+* The resources for filename extensions.
+* This array creates the mapping between TExtTypes enumeration
+* and the actual filename extensions.
+* Take care that all extensions from TExtTypes are handled here.
+*
+* These MUST be in the same order as in enum TExtTypes!
+* Otherwise will panic on construction.
+*
+*/
+RESOURCE EXTARRAY extarray
+ {
+ exttypeelements=
+ {
+
+ // ---------- Image types ----------
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExtBmp;
+ extension="*.bmp";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtGif;
+ extension="*.gif";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJpe;
+ extension="*.jpe";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJpeg;
+ extension="*.jpeg";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJpg;
+ extension="*.jpg";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtOta;
+ extension="*.ota";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtPng;
+ extension="*.png";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtTif;
+ extension="*.tif";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtTiff;
+ extension="*.tiff";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtWbmp;
+ extension="*.wbmp";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtWmf;
+ extension="*.wmf";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJp2;
+ extension="*.jp2";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJpg2;
+ extension="*.jpg2";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJp3;
+ extension="*.jp3";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtIco;
+ extension="*.ico";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtVcf;
+ extension="*.vcf";
+ },
+
+ // ---------- Sound types ----------
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExtAac;
+ extension="*.aac";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtAmr;
+ extension="*.amr";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtAu;
+ extension="*.au";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtAwb;
+ extension="*.awb";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtMid;
+ extension="*.mid";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtMp3;
+ extension="*.mp3";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtRa;
+ extension="*.ra";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtRmf;
+ extension="*.rmf";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtRng;
+ extension="*.rng";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtSnd;
+ extension="*.snd";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtWav;
+ extension="*.wav";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtWve;
+ extension="*.wve";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtWma;
+ extension="*.wma";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtM4a;
+ extension="*.m4a";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtOtt;
+ extension="*.ott";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtMxmf;
+ extension="*.mxmf";
+ },
+
+ // ---------- Java file types -----
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJad;
+ extension="*.jad";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtJar;
+ extension="*.jar";
+ },
+
+ // ---------- Native file types -----
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExtSis;
+ extension="*.sis";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtSisx;
+ extension="*.sisx";
+ },
+
+ // ---------- Video types ----------
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExt3gp;
+ extension="*.3gp";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtMp4;
+ extension="*.mp4";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtNim;
+ extension="*.nim";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtRm;
+ extension="*.rm";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtRv;
+ extension="*.rv";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtWmv;
+ extension="*.wmv";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExt3g2;
+ extension="*.3g2";
+ },
+
+ // ---------- Document types ----------
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExtDoc;
+ extension="*.doc";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtPdf;
+ extension="*.pdf";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtPps;
+ extension="*.pps";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtPpt;
+ extension="*.ppt";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtTxt;
+ extension="*.txt";
+ },
+ EXTTYPEELEMENT
+ {
+ exttype=EExtXls;
+ extension="*.xls";
+ },
+
+ // ---------- Calendar types ----------
+
+ EXTTYPEELEMENT
+ {
+ exttype=EExtVcs;
+ extension="*.vcs";
+ }
+ };
+ }
+
+/**
+* The data group names.
+* This array creates the mapping between TDataGroups enumeration
+* and the localized strings that are displayed to the user.
+* Take care that all groups from TDataGroups are handled here.
+* The localized strings are in the localization file mseng.loc.
+*
+* These MUST be in the same order as in enum TDataGroups!
+* Otherwise mseng will panic on construction.
+*
+*/
+RESOURCE DATAGROUPNAMEARRAY datagroupnamearray
+ {
+ datagroupnameelements=
+ {
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupAllDeviceData;
+ groupname=qtn_swins_ls1_memory_all;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupFreeMemory;
+ groupname=qtn_swins_ls1_memory_free;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupCalendar;
+ groupname=qtn_swins_ls1_memory_calendar;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupContacts;
+ groupname=qtn_swins_ls1_memory_contacts;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupMessages;
+ groupname=qtn_swins_ls1_memory_msgs;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupImages;
+ groupname=qtn_swins_ls1_memory_imgs;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupSoundFiles;
+ groupname=qtn_swins_ls1_memory_souds;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupVideos;
+ groupname=qtn_swins_ls1_memory_videos;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupDocuments;
+ groupname=qtn_swins_ls1_memory_docs;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupMidpJava;
+ groupname=qtn_swins_ls1_memory_midpjava;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupNativeApps;
+ groupname=qtn_swins_ls1_memory_sis;
+ },
+ DATAGROUPNAMEELEMENT
+ {
+ grouptype=EGroupOthers;
+ groupname=qtn_swins_ls1_memory_others;
+ }
+ };
+ }
+
+/**
+* List of UIDs belonging to each data group.
+*
+* This array includes for, each data group
+* (enum TDataGroups), the list of UIDs (enum TUidTypes)
+* belonging to that data group.
+*/
+RESOURCE DATAGROUPUIDARRAY datagroupuidarray
+ {
+ datagroupuids=
+ {
+ DATAGROUPUIDS
+ {
+ datagroup=EGroupMessages;
+ uids=
+ {
+ EUidMsgTypeMultimedia,
+ EUidMsgTypeSMTP,
+ EUidMsgTypePOP3,
+ EUidMsgTypeIMAP4,
+ EUidMsgTypeSMS,
+ EUidMsgTypeFax,
+ EUidMsgTypeIr,
+ EUidMsgTypeBt
+ };
+ },
+ DATAGROUPUIDS
+ {
+ datagroup=EGroupDocuments;
+ uids=
+ {
+ EUidTest1,
+ EUidTest2
+ };
+ }
+ };
+ }
+
+/**
+* List of extension belonging to each data group.
+*
+* This array includes for, each data group
+* (enum TDataGroups),the list of filename extensions
+* (enum TExtTypes) belonging to that data group.
+*/
+RESOURCE DATAGROUPEXTARRAY datagroupextarray
+ {
+ datagroupexts=
+ {
+ DATAGROUPEXTS
+ {
+ datagroup=EGroupImages;
+ exts=
+ {
+ EExtBmp,
+ EExtGif,
+ EExtJpe,
+ EExtJpeg,
+ EExtJpg,
+ EExtOta,
+ EExtPng,
+ EExtTif,
+ EExtTiff,
+ EExtWbmp,
+ EExtWmf,
+ EExtJp2,
+ EExtJpg2,
+ EExtJp3,
+ EExtIco,
+ EExtVcf
+ };
+ },
+ DATAGROUPEXTS
+ {
+ datagroup=EGroupSoundFiles;
+ exts=
+ {
+ EExtAac,
+ EExtAmr,
+ EExtAu,
+ EExtAwb,
+ EExtMid,
+ EExtMp3,
+ EExtRa,
+ EExtRmf,
+ EExtRng,
+ EExtSnd,
+ EExtWav,
+ EExtWve,
+ EExtWma,
+ EExtM4a,
+ EExtOtt,
+ EExtMxmf
+ };
+ },
+ DATAGROUPEXTS
+ {
+ // Note: Midlet installation folder scanned separately.
+ datagroup=EGroupMidpJava;
+ exts=
+ {
+ EExtJad,
+ EExtJar
+ };
+ },
+ DATAGROUPEXTS
+ {
+ // Note: Sis pre-installation folder and registry scanned separately.
+ datagroup=EGroupNativeApps;
+ exts=
+ {
+ EExtSis,
+ EExtSisx
+ };
+ },
+ DATAGROUPEXTS
+ {
+ datagroup=EGroupVideos;
+ exts=
+ {
+ EExt3gp,
+ EExtMp4,
+ EExtNim,
+ EExtRm,
+ EExtRv,
+ EExtWmv,
+ EExt3g2
+ };
+ },
+ DATAGROUPEXTS
+ {
+ // Note: Notepad database scanned separately.
+ datagroup=EGroupDocuments;
+ exts=
+ {
+ EExtDoc,
+ EExtPdf,
+ EExtPps,
+ EExtPpt,
+ EExtTxt,
+ EExtXls
+ };
+ },
+ DATAGROUPEXTS
+ {
+ // Note: Calendar private-folder scanned separately.
+ datagroup=EGroupCalendar;
+ exts=
+ {
+ EExtVcs
+ };
+ }
+ };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/eabi/MemScanClientU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,12 @@
+EXPORTS
+ _ZN14RMemScanClient17RequestScanEventsERiR14TRequestStatus @ 1 NONAME
+ _ZN14RMemScanClient23RequestScanEventsCancelEv @ 2 NONAME
+ _ZN14RMemScanClient4ScanE12TDriveNumber @ 3 NONAME
+ _ZN14RMemScanClient5CloseEv @ 4 NONAME
+ _ZN14RMemScanClient7ConnectEv @ 5 NONAME
+ _ZN14RMemScanClientC1Ev @ 6 NONAME
+ _ZN14RMemScanClientC2Ev @ 7 NONAME
+ _ZNK14RMemScanClient11DataGroupsLEv @ 8 NONAME
+ _ZNK14RMemScanClient11ScanResultLEv @ 9 NONAME
+ _ZNK14RMemScanClient14ScanInProgressEv @ 10 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/eabi/msengU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,29 @@
+EXPORTS
+ _ZN6CMseng4NewLER15MMsengUIHandler @ 1 NONAME
+ _ZN6CMseng5ScanLE12TDriveNumber @ 2 NONAME
+ _ZN6CMseng7CancelLEv @ 3 NONAME
+ _ZN6CMseng8MemInfoLERxS0_ @ 4 NONAME
+ _ZN6CMsengD0Ev @ 5 NONAME
+ _ZN6CMsengD1Ev @ 6 NONAME
+ _ZN6CMsengD2Ev @ 7 NONAME
+ _ZNK6CMseng11DataGroupsLEv @ 8 NONAME
+ _ZNK6CMseng11ScanResultLEv @ 9 NONAME
+ _ZNK6CMseng14ScanInProgressEv @ 10 NONAME
+ _ZNK6CMseng9DiskInfoLERxS0_12TDriveNumber @ 11 NONAME
+ _ZTI13CMsengScanner @ 12 NONAME ; #<TI>#
+ _ZTI15CMsengInfoArray @ 13 NONAME ; #<TI>#
+ _ZTI17CMsengFileScanner @ 14 NONAME ; #<TI>#
+ _ZTI17CMsengScannerBase @ 15 NONAME ; #<TI>#
+ _ZTI20CMsengFileExtScanner @ 16 NONAME ; #<TI>#
+ _ZTI20CMsengFindAllScanner @ 17 NONAME ; #<TI>#
+ _ZTI22CMsengDirectoryScanner @ 18 NONAME ; #<TI>#
+ _ZTI6CMseng @ 19 NONAME ; #<TI>#
+ _ZTV13CMsengScanner @ 20 NONAME ; #<VT>#
+ _ZTV15CMsengInfoArray @ 21 NONAME ; #<VT>#
+ _ZTV17CMsengFileScanner @ 22 NONAME ; #<VT>#
+ _ZTV17CMsengScannerBase @ 23 NONAME ; #<VT>#
+ _ZTV20CMsengFileExtScanner @ 24 NONAME ; #<VT>#
+ _ZTV20CMsengFindAllScanner @ 25 NONAME ; #<VT>#
+ _ZTV22CMsengDirectoryScanner @ 26 NONAME ; #<VT>#
+ _ZTV6CMseng @ 27 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2006 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 file provides the information required for building the
+* whole of a memscaneng.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+ DEFAULT
+
+
+PRJ_EXPORTS
+ ../clientinc/memscanclient.h |../../inc/memscanclient.h
+ ../serverinc/memscanclientserver.h |../../inc/memscanclientserver.h
+ ../serverinc/msenguihandler.h |../../inc/msenguihandler.h
+ ../rom/Mseng.iby CORE_APP_LAYER_IBY_EXPORT_PATH(Mseng.iby )
+ ../rom/MsengResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(MsengResources.iby )
+ ../loc/mseng.loc APP_LAYER_LOC_EXPORT_PATH(mseng.loc)
+
+PRJ_MMPFILES
+ memscanserv.mmp
+ memscanclient.mmp
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/group/memscanclient.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2006 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 is project specification file for the Memory Scan Client.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET memscanclient.dll
+TARGETTYPE dll
+UID 0x1000008D 0x102073FD
+VENDORID VID_DEFAULT
+
+CAPABILITY CAP_GENERAL_DLL
+
+SOURCEPATH ../clientsrc
+SOURCE memscanclient.cpp
+
+USERINCLUDE . ../clientinc ../serverinc
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY euser.lib
+LIBRARY estor.lib
+LIBRARY bafl.lib // Descriptor arrays
+
+
+
+
+// End of File
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/group/memscanserv.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006-2006 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: Project definition file for project memscaneng
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET memscanserv.exe
+TARGETTYPE exe
+UID 0x100039CE 0x102073FC
+VENDORID VID_DEFAULT
+CAPABILITY CAP_SERVER AllFiles
+
+SOURCEPATH ../serversrc
+SOURCE memscanserv.cpp
+SOURCE mseng.cpp
+SOURCE msengscanner.cpp
+SOURCE msenginfoarray.cpp
+SOURCE msengscannerbase.cpp
+SOURCE msengdirectoryscanner.cpp
+SOURCE msengfilescanner.cpp
+SOURCE msengfileextscanner.cpp
+SOURCE msengfindallscanner.cpp
+SOURCE msengregistryscanner.cpp
+SOURCE msengsisxinfo.cpp
+
+START RESOURCE ../data/mseng.rss
+TARGETPATH RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+USERINCLUDE . ../serverinc
+
+APP_LAYER_SYSTEMINCLUDE
+//SYSTEMINCLUDE /epoc32/include/swi
+
+LIBRARY euser.lib
+LIBRARY efsrv.lib
+LIBRARY estor.lib
+LIBRARY bafl.lib // Resource files
+LIBRARY sisregistryclient.lib
+
+//Uncomment this line to show the RDebug::Print()
+// MACRO __SHOW_RDEBUG_PRINT_
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/loc/mseng.loc Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,90 @@
+/*
+* 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:
+* This file contains the localised strings for memscaneng
+*
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+// d: Name for data group consisting of calendar and entries.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_calendar "Calendar data"
+
+// d: Name for data group consisting of phonebook entries.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_contacts "Contacts data"
+
+// d: Name for data group consisting of notepad documents and
+// d: plain text files, ms word documents (?) etc.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_docs "Documents"
+
+// d: Name for data group consisting of messages (SMS, MMS, e-mail, fax)
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_msgs "Messages"
+
+// d: Name for data group consisting of all image files.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_imgs "Images"
+
+// d: Name for data group consisting of all sound files.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_souds "Sound files"
+
+// d: Name for data group consisting of Java environment
+// d: and installed Midlets.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_midpjava "MIDP programs"
+
+// d: all_device_data == total_memory - free_memory
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_all "All device data"
+
+// d: Amount of free memory available in the device.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_free "Free memory"
+
+// d: Name for data group consisting of all video files.
+// l: list_single_heading_pane_t1_cp2
+//
+#define qtn_swins_ls1_memory_videos "Videos"
+
+//d: Name for data group consisting of SIS applications
+//l: list_single_heading_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_swins_ls1_memory_sis "SIS programs"
+
+//d: Name for data group consisting of other files
+//l: list_single_heading_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_swins_ls1_memory_others "Other files"
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/rom/Mseng.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006-2006 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: Image description file for project memscaneng
+*
+*/
+
+
+#ifndef __MSENG_IBY__
+#define __MSENG_IBY__
+
+// Memory Scan Engine, Server and Client
+
+file=ABI_DIR\BUILD_DIR\MemScanServ.exe PROGRAMS_DIR\MemScanServ.exe
+file=ABI_DIR\BUILD_DIR\MemScanClient.dll SHARED_LIB_DIR\MemScanClient.dll
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/rom/MsengResources.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2006-2006 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: Image description file for project memscaneng
+*
+*/
+
+
+#ifndef __MSENG_RESOURCES_IBY__
+#define __MSENG_RESOURCES_IBY__
+
+//Resource file(s) for Memory Scan Engine
+
+data=DATAZ_\RESOURCE_FILES_DIR\mseng.rsc RESOURCE_FILES_DIR\mseng.rsc
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/memscanclientserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2006-2006 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: Memory Scan Client/Server definitions
+*
+*/
+
+
+
+#ifndef __MEMSCANCLIENTSERVER_H__
+#define __MEMSCANCLIENTSERVER_H__
+
+
+_LIT(KMemScanServName,"memscanserv");
+_LIT(KMemScanServImg,"memscanserv"); // EXE name
+_LIT(KMemScanServerPanicCategory, "MemScanServer");
+
+const TUid KMemScanServUid3={0x10207386};
+
+const TInt KMemScanServMajor = 1;
+const TInt KMemScanServMinor = 0;
+const TInt KMemScanServBuild = 0;
+
+const TInt KMesArg0 = 0;
+
+// Language specific buffer size is assumed to vary between 80-150
+const TInt KMemScanServTransferBufferExpandSize = 50;
+
+enum TMemScanEvent
+ {
+ EMemScanEventScanningStarted = 0,
+ EMemScanEventScanningFinished,
+ EMemScanEventScanningError
+ };
+
+// when modifying these, notice the server's policy
+enum TMemScanServMessages
+ {
+ EMemScanStartScan,
+ EMemScanPrepareDataGroups,
+ EMemScanGetDataGroups,
+ EMemScanInProgress,
+ EMemScanRequestScanEvents,
+ EMemScanRequestScanEventsCancel,
+ EMemScanPrepareScanResults,
+ EMemScanGetScanResults
+ };
+
+enum TMemScanServerClientPanic
+ {
+ EMemScanServerPanicRequestedScanEventsTwice = 0,
+ };
+
+#endif// __MEMSCANCLIENTSERVER_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/memscanserv.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2006-2006 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: Memory Scan Server
+*
+*/
+
+
+#ifndef __MEMSCANSERV_H__
+#define __MEMSCANSERV_H__
+
+// SYSTEM INCLUDES
+#include <e32base.h>
+
+// USER INCLUDES
+#include "memscanclientserver.h"
+#include "msenguihandler.h"
+#include "mseng.h"
+
+
+
+// --------------------------------------------------------------------------
+// Server's policy here
+// --------------------------------------------------------------------------
+
+//Total number of ranges
+const TUint KMemScanServRangeCount = 2;
+
+//Definition of the ranges of IPC numbers
+const TInt KMemScanServRanges[KMemScanServRangeCount] =
+ {
+ 0, // ECapabilityReadUserData
+ /*
+ 0 EMemScanStartScan,
+ 1 EMemScanPrepareDataGroups,
+ 2 EMemScanGetDataGroups,
+ 3 EMemScanInProgress,
+ 4 EMemScanRequestScanEvents,
+ 5 EMemScanRequestScanEventsCancel,
+ 6 EMemScanPrepareScanResults,
+ 7 EMemScanGetScanResults
+ */
+
+ 8 // ENotSupported - Non implemented function end of range check
+ };
+
+//Policy to implement for each of the above ranges
+const TUint8 KMemScanServElementsIndex[KMemScanServRangeCount] =
+ {
+ 0, // 0th range: Policy 0 in Elements
+ CPolicyServer::ENotSupported // 1st range: Out of range IPC
+ };
+
+//Specific capability checks
+const CPolicyServer::TPolicyElement KMemScanServElements[] =
+ {
+ // Policy 0: Fail call if ReadUserData not present
+ {_INIT_SECURITY_POLICY_C1(ECapabilityReadUserData), CPolicyServer::EFailClient}
+ };
+
+//Package all the above together into a policy
+const CPolicyServer::TPolicy KMemScanServPolicy =
+ {
+ CPolicyServer::EAlwaysPass, // All connect attempts should pass
+ KMemScanServRangeCount, // Number of ranges
+ KMemScanServRanges, // Ranges array
+ KMemScanServElementsIndex, // Elements<->Ranges index
+ KMemScanServElements, // Array of elements
+ };
+
+
+
+// --------------------------------------------------------------------------
+// Server's panic codes here
+// --------------------------------------------------------------------------
+enum TMemScanServPanic
+ {
+ EPanicGeneral,
+ EPanicIllegalFunction
+ };
+
+void PanicClient(const RMessagePtr2& aMessage,TMemScanServPanic aPanic);
+
+
+// --------------------------------------------------------------------------
+// Auto shutdown class (standard pattern)
+// --------------------------------------------------------------------------
+class CShutdown : public CTimer
+ {
+ enum TMemScanShutdown
+ {
+ EMemScanServShutdownDelay=0x200000
+ };
+public:
+ inline CShutdown();
+ inline void ConstructL();
+ inline void Start();
+private:
+ void RunL();
+ };
+
+// --------------------------------------------------------------------------
+// Server
+// --------------------------------------------------------------------------
+
+class CMemScanServ : public CPolicyServer
+ {
+public:
+ static CServer2* NewLC();
+ void AddSession();
+ void DropSession();
+private:
+ CMemScanServ();
+ void ConstructL();
+ CSession2* NewSessionL( const TVersion& aVersion,
+ const RMessage2& aMessage) const;
+
+private:
+ TInt iSessionCount;
+ CShutdown iShutdown;
+ };
+
+
+
+// --------------------------------------------------------------------------
+// Event object
+// --------------------------------------------------------------------------
+struct TMemScanEventPackage
+ {
+ TMemScanEvent iEvent;
+ TInt iError;
+ };
+
+
+// --------------------------------------------------------------------------
+// Session
+// --------------------------------------------------------------------------
+class CMemScanServSession : public CSession2, public MMsengUIHandler
+ {
+public:
+ CMemScanServSession();
+ void CreateL();
+ private:
+ ~CMemScanServSession();
+ inline CMemScanServ& Server();
+ void ServiceL(const RMessage2& aMessage);
+ void ServiceError(const RMessage2& aMessage,TInt aError);
+
+
+private: // Client <-> server functions
+ void MemScanL(const RMessage2& aMessage);
+ void RequestScanEventsL(const RMessage2& aMessage);
+ void RequestScanEventsCancel(const RMessage2& aMessage);
+ void ScanInProgress(const RMessage2& aMessage);
+ void PrepareDataGroupsL(const RMessage2& aMessage);
+ void GetDataGroupsL(const RMessage2& aMessage);
+ void PrepareScanResultsL(const RMessage2& aMessage);
+ void GetScanResultsL(const RMessage2& aMessage);
+
+private: // Internal utility functions
+ void SendEventToClientL( TMemScanEvent aEventType, TInt aError=KErrNone );
+ void AddNewEventToBufferL( TMemScanEvent aEventType, TInt aError);
+ TBool IsEventReady() const;
+ void DeliverOldestEventToClientL();
+
+private: //From MMsengUIHandler
+ void StartL();
+ void QuitL(TInt aReason);
+ void ErrorL(TInt aError);
+
+private: // Member variables
+ CMseng* iMseng;
+ RMessagePtr2 iScanEventMessage;
+ RArray< TMemScanEventPackage > iEventBuffer;
+ CBufBase* iTransferBuffer;
+ };
+
+
+
+#endif // __MEMSCANSERV_H__
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/memscanutils.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2006-2006 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: Memory Scan Utils
+*
+*/
+
+
+#ifndef __MEMSCANUTILS_H__
+#define __MEMSCANUTILS_H__
+
+
+// Macro for printing debug traces without ifdefs
+#ifdef _DEBUG
+#define TRACES(x) x
+#else
+#define TRACES(x)
+#endif
+
+
+#endif // __MEMSCANUTILS_H__
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/mseng.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2006 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:
+* The actual "engine".
+*
+*/
+
+
+#ifndef CMSENG_H
+#define CMSENG_H
+
+
+// SYSTEM INCLUDES
+#include <data_caging_path_literals.hrh>
+#include <badesca.h> // descriptor arrays
+#include <f32file.h> // enum TDriveNumber
+#include <stringresourcereader.h>
+#include <barsc2.h> // CResourceFile
+#include <barsread2.h> // RResourceReader
+
+
+// USER INCLUDES
+#include "msenguihandler.h"
+
+
+// FORWARD DECLARATIOS
+class CMsengScanner;
+class RFs;
+class MMsengUIHandler;
+
+
+// CONSTANTS
+
+// Resource file path
+_LIT(KMsengRscFilePath,"Z:mseng.rsc");
+
+
+// DATA TYPES
+
+/**
+* Type definition to handle arrays of integers
+* more conveniently
+*/
+typedef CArrayFixFlat<TInt> CIntArray;
+
+
+// CLASS DECLARATION
+
+/**
+* The actual "engine".
+* This is the class which the UI instantiates.
+*/
+class CMseng :public CBase
+ {
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ * @param aUIHandler Reference to a class implementing MMsengUIHandler interface
+ */
+ IMPORT_C static CMseng* NewL(MMsengUIHandler& aUIHandler);
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CMseng();
+
+ public: // New functions
+
+ /**
+ * Get the data groups.
+ * @return CDesCArray* containing the names of the data groups.
+ */
+ IMPORT_C CDesCArray* DataGroupsL() const;
+
+ /**
+ * Get the scan result. This array contains exacly one
+ * integer per data group.
+ * @return Array of integers.
+ */
+ IMPORT_C CArrayFix<TInt64>* ScanResultL() const;
+
+ /**
+ * Is there scanning going on?
+ * @return ETrue if there is scanning going on, otherwise EFalse.
+ */
+ IMPORT_C TBool ScanInProgress() const;
+
+ /**
+ * Get the amount of total and free space on a disk
+ * @param aTotal Amount of total space in bytes in substituted here.
+ * @param aFree Amount of free space in bytes in substituted here.
+ * @param aVolume Disk identifier, e.g. 'C'
+ */
+ IMPORT_C void DiskInfoL(TInt64& aTotal, TInt64& aFree, const TDriveNumber aVolume) const;
+
+ /**
+ * Get the amount of total and free RAM.
+ * @param aTotal Amount of total RAM in bytes in substituted here.
+ * @param aTotal Amount of free RAM in bytes in substituted here.
+ */
+ IMPORT_C static void MemInfoL(TInt64& aTotal, TInt64& aFree);
+
+ /**
+ * Start scanning memory.
+ * This means starting the actual work of the engine. Starts scanning,
+ * which runs until finished.
+ *
+ * The scanning is only supported for drives C and E, otherwise
+ * leave occurs with error KErrNotSupported.
+ *
+ * NOTE: the support for scanning E drive is not properly tested.
+ * It is assumed to have the same directory structure than in C.
+ *
+ * @param aDrive the drive to be scanned
+ */
+ IMPORT_C void ScanL(TDriveNumber aDrive);
+
+ /**
+ * Cancel ongoing scanning operation.
+ */
+ IMPORT_C void Cancel();
+
+ /**
+ * Check whether internal drive.
+ * @param aDrv Drive to be chanked.
+ * @return ETrue if internal drive, otherwise EFalse.
+ */
+ static TBool IsInternalDrive( RFs& aFs, const TInt aDrv );
+
+ /**
+ * Check whether removable drive.
+ * @param aDrv Drive to be chanked.
+ * @return ETrue if internal drive, otherwise EFalse.
+ */
+ static TBool IsRemovableDrive( RFs& aFs, const TInt aDrv );
+
+ private:
+
+ /**
+ * C++ default constructor is prohibited.
+ */
+ CMseng(MMsengUIHandler& aUIHandler);
+
+ /**
+ * By default Symbian OS constructor is private.
+ *
+ * Initialize iResultArray by reading the the data group
+ * names from resource file and setting all result values to zero.
+ * Initialize iDataGroupUidArray and iDataGroupExtArray
+ * from resource file.
+ */
+ void ConstructL();
+
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CMseng( const CMseng& );
+ // Prohibit assigment operator if not deriving from CBase.
+ CMseng& operator= ( const CMseng& );
+
+
+ private: // Data members
+
+ MMsengUIHandler& iUIHandler;
+ CMsengScanner* iScanner;
+
+ // Number of data groups
+ TInt iNumberOfDataGroups;
+
+ // These arrays are needed to when calculating the result.
+ // They are indexed using values from enum TDataGroups.
+ // This creates the mapping between data groups and the
+ // UIDs and extensions belonging to a particular data group
+ CArrayPtrFlat<CIntArray>* iDataGroupUidArray;
+ CArrayPtrFlat<CIntArray>* iDataGroupExtArray;
+
+ RFs iFsSession;
+ CResourceFile* iResFile;
+ mutable TInt64 iFreeMemory;
+
+ };
+
+#endif // CMSENG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/mseng.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2004-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 file contains configuration data for Memory scan Engine
+*
+*
+*/
+
+
+#ifndef MSENG_HRH
+#define MSENG_HRH
+
+// INCLUDES
+#include <bldvariant.hrh>
+
+// CONSTANTS
+
+// Folders to scan:
+// All root folders are listed in mseng.rss
+// All of their subfolders are also scanned.
+
+// DATA TYPES
+
+/**
+* The UID types scanned. Not currently used, but may be needed.
+*
+* The UID:s matching TUidTypes enumeration are
+* in the resource file mseng.rss
+* Care must be taken that every UID type has
+* corresponding resource struct in mseng.rss
+*/
+enum TUidTypes
+ {
+ EUidMsgTypeMultimedia = 0,
+ EUidMsgTypeSMTP,
+ EUidMsgTypePOP3,
+ EUidMsgTypeIMAP4,
+ EUidMsgTypeSMS,
+ EUidMsgTypeFax,
+ EUidMsgTypeIr,
+ EUidMsgTypeBt,
+ EUidTest1,
+ EUidTest2
+ };
+
+
+/**
+* The filename extension types scanned.
+*
+* The strings matching TExtTypes enumeration are
+* in the resource file mseng.rss
+* Care must be taken that every extension type
+* has corresponding resource struct in mseng.rss
+*/
+enum TExtTypes
+ {
+ // Image types
+ EExtBmp = 0,
+ EExtGif,
+ EExtJpe,
+ EExtJpeg,
+ EExtJpg,
+ EExtOta,
+ EExtPng,
+ EExtTif,
+ EExtTiff,
+ EExtWbmp,
+ EExtWmf,
+ EExtJp2,
+ EExtJpg2,
+ EExtJp3,
+ EExtIco,
+ EExtVcf,
+ // Sound types
+ EExtAac,
+ EExtAmr,
+ EExtAu,
+ EExtAwb,
+ EExtMid,
+ EExtMp3,
+ EExtRa,
+ EExtRmf,
+ EExtRng,
+ EExtSnd,
+ EExtWav,
+ EExtWve,
+ EExtWma,
+ EExtM4a,
+ EExtOtt,
+ EExtMxmf,
+ // Java file types
+ EExtJad,
+ EExtJar,
+ // Native installation file types
+ EExtSis,
+ EExtSisx,
+ // Video types
+ EExt3gp,
+ EExtMp4,
+ EExtNim,
+ EExtRm,
+ EExtRv,
+ EExtWmv,
+ EExt3g2,
+ // Document types
+ EExtDoc,
+ EExtPdf,
+ EExtPps,
+ EExtPpt,
+ EExtTxt,
+ EExtXls,
+ // Calendar types
+ EExtVcs
+ };
+
+/**
+* The data groups. (These are what is displayed to the user).
+*
+* The strings matching TExtTypes enumeration are
+* in the resource file mseng.rss
+* Care must be taken that every extension type
+* has corresponding resource in mseng.rss
+*
+* The names are shown to the user in the order
+* as enumerated here.
+*/
+enum TDataGroups
+ {
+ EGroupAllDeviceData = 0,
+ EGroupFreeMemory,
+ EGroupCalendar,
+ EGroupContacts,
+ EGroupMessages,
+ EGroupImages,
+ EGroupSoundFiles,
+ EGroupVideos,
+ EGroupDocuments,
+ EGroupMidpJava,
+ EGroupNativeApps,
+ EGroupOthers
+ };
+
+#endif // MSENG.HRH
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/mseng.rh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,211 @@
+/*
+* 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:
+* This file contains declarations for resources of memscaneng.
+* The file can be included only in resource file.
+*
+*
+*/
+
+
+// INCLUDES
+#include "mseng.hrh"
+
+// STRUCTURE DEFINITIONS
+
+
+// ---------------------------------------------------------
+// DIRECTORYARRAY
+//
+// The directories that are scanned (array of dir paths)
+// ---------------------------------------------------------
+//
+STRUCT DIRECTORYARRAY
+ {
+ LTEXT directories[];
+ }
+
+// ---------------------------------------------------------
+// UIDTYPEELEMENT
+//
+// This struct maps one UID type from enum TUidTypes
+// to the value of the UID.
+// ---------------------------------------------------------
+//
+STRUCT UIDTYPEELEMENT
+ {
+ BYTE uidtype;
+ LONG uid;
+ }
+
+// ---------------------------------------------------------
+// UIDARRAY
+//
+// This array contain all the used UID type elements.
+// ---------------------------------------------------------
+//
+STRUCT UIDARRAY
+ {
+ STRUCT uidtypeelements[];
+ }
+
+// ---------------------------------------------------------
+// EXTTYPEELEMENT
+//
+// This struct maps one extension type from enum TExtTypes
+// to the string representing the extension
+// ---------------------------------------------------------
+//
+STRUCT EXTTYPEELEMENT
+ {
+ BYTE exttype;
+ LTEXT extension;
+ }
+
+// ---------------------------------------------------------
+// EXTARRAY
+//
+// This array contain all the extension type elements used.
+// ---------------------------------------------------------
+//
+STRUCT EXTARRAY
+ {
+ STRUCT exttypeelements[];
+ }
+
+// ---------------------------------------------------------
+// DATAGROUPNAMEELEMENT
+//
+// This struct maps one data group from enum TDataGroups
+// to the actual string representing the name of
+// the data group
+// ---------------------------------------------------------
+//
+STRUCT DATAGROUPNAMEELEMENT
+ {
+ BYTE grouptype;
+ LTEXT groupname;
+ }
+
+// ---------------------------------------------------------
+// DATAGROUPNAMEARRAY
+//
+// This array contains all data group names
+// ---------------------------------------------------------
+//
+STRUCT DATAGROUPNAMEARRAY
+ {
+ STRUCT datagroupnameelements[];
+ }
+
+// ---------------------------------------------------------
+// DATAGROUPUIDS
+//
+// List of UIDs belonging to a data group.
+// ---------------------------------------------------------
+//
+STRUCT DATAGROUPUIDS
+ {
+ BYTE datagroup;
+ BYTE uids[];
+ }
+
+// ---------------------------------------------------------
+// DATAGROUPUIDARRAY
+//
+// This array includes for, each data group,
+// (enum TDataGroups), the list of UIDs (enum TUidTypes)
+// belonging to that data group.
+// ---------------------------------------------------------
+//
+STRUCT DATAGROUPUIDARRAY
+ {
+ STRUCT datagroupuids[];
+ }
+
+// ---------------------------------------------------------
+// DATAGROUPEXTS
+//
+// List of extension belonging to a data group.
+// ---------------------------------------------------------
+//
+STRUCT DATAGROUPEXTS
+ {
+ BYTE datagroup;
+ BYTE exts[];
+ }
+
+// ---------------------------------------------------------
+// DATAGROUPEXTARRAY
+//
+// This array includes for, each data group,
+// (enum TDataGroups), the list of extension
+// (enum TExtTypes) belonging to that data group.
+// ---------------------------------------------------------
+//
+STRUCT DATAGROUPEXTARRAY
+ {
+ STRUCT datagroupexts[];
+ }
+
+// ---------------------------------------------------------
+// EXTRADATAFILE
+//
+// Specific file that is scanned separately from
+// normal uid or ext scanning.
+// ---------------------------------------------------------
+//
+STRUCT EXTRADATAFILE
+ {
+ BYTE datagroup;
+ LTEXT filepath;
+ }
+
+// ---------------------------------------------------------
+// EXTRADATAFILES
+//
+// Specific files that is scanned separately from
+// normal uid or ext scanning.
+// ---------------------------------------------------------
+//
+STRUCT EXTRADATAFILES
+ {
+ STRUCT extradatafile[];
+ }
+
+// ---------------------------------------------------------
+// SPECIAL_DATADIR
+//
+// A directory, where all files belong to the same
+// data group.
+// ---------------------------------------------------------
+STRUCT SPECIAL_DATADIR
+ {
+ BYTE datagroup;
+ LTEXT path;
+ LTEXT excludeddatafiles[];
+ }
+
+// ---------------------------------------------------------
+// SPECIAL_DATADIRS
+//
+// This array of above defined special directories.
+//
+// ---------------------------------------------------------
+STRUCT SPECIAL_DATADIRS
+ {
+ STRUCT special_datadir[];
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengdirectoryscanner.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,125 @@
+/*
+* 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:
+* Scan directories.
+*
+*/
+
+
+#ifndef MSENGDIRECTORYSCANNER_H
+#define MSENGDIRECTORYSCANNER_H
+
+// USER INCLUDES
+#include "msengscannerbase.h"
+
+
+// CLASS DECLARATION
+
+/**
+* This class identifies all subdirectories based upon a given root path
+*/
+class CMsengDirectoryScanner : public CMsengScannerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CMsengDirectoryScanner(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray, RFs& aFsSession);
+
+ /**
+ * Destructor.
+ */
+ ~CMsengDirectoryScanner();
+
+ /**
+ *
+ */
+ enum TScanDirectoryResult
+ {
+ EContinueToNextDirectory = 0,
+ EContinueProcessingCurrentDirectory
+ };
+
+ public: // New functions
+
+ /**
+ * Start the scan operation.
+ */
+ void ScanL(const CDesCArray& aRootDirs);
+
+ protected: // From CMsengScannerBase
+
+ /**
+ * Do one incremental scanning step
+ */
+ virtual TStepResult PerformStepL();
+
+ protected: // New framework
+
+ /**
+ * This is called when one directory needs scanning
+ */
+ virtual TScanDirectoryResult ScanDirectoryL(const TDesC& aDirectory, RFs& aFsSession) = 0;
+
+ /**
+ * Use this function to add a new directory to the list of
+ * directories which require scanning
+ */
+ void AppendDirectoryL(const TDesC& aDirectory);
+
+ private:
+
+ /**
+ *
+ */
+ enum TState
+ {
+ EExpandingRootDirs = 0,
+ EParsingExpandedList,
+ EScanningSubDirs
+ };
+
+ private:
+
+ /**
+ *
+ */
+ TState iState;
+
+ /**
+ *
+ */
+ TInt iCurrentIndex;
+
+ /**
+ *
+ */
+ CDirScan* iScanner;
+
+ /**
+ *
+ */
+ TInt iNumberOfRootDirectories;
+
+ /**
+ *
+ */
+ CDesCArray* iDirectoryList;
+ };
+
+#endif // MSENGDIRECTORYSCANNER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengfileextscanner.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2006 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:
+* Scanner class used to scan file system by filename extensions.
+*
+*/
+
+
+#ifndef MSENGFILEEXTSCANNER_H
+#define MSENGFILEEXTSCANNER_H
+
+// INCLUDES
+#include "msengfilescanner.h"
+
+// CLASS DECLARATION
+
+/**
+* Scanner class used to scan file system by filename extension.
+*/
+class CMsengFileExtScanner : public CMsengFileScanner
+ {
+ public: // Constructors and destructor
+
+ /**
+ * constructor
+ */
+ static CMsengFileExtScanner* NewL(
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession);
+
+ /**
+ * Destructor.
+ */
+ ~CMsengFileExtScanner();
+
+ public: // New functions
+
+ /**
+ *
+ */
+ virtual CDir* FindFilesL(const TDesC& aDirectory, TBool& aMoveToNextDirectory);
+
+ /**
+ *
+ */
+ virtual TLocationResponse HandleLocatedEntryL(const TDesC& aFullFileNameAndPath,
+ const TEntry& aEntry);
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CMsengFileExtScanner(
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession);
+
+ private:
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CMsengFileExtScanner( const CMsengFileExtScanner& );
+ // Prohibit assigment operator if not deriving from CBase.
+ CMsengFileExtScanner& operator= ( const CMsengFileExtScanner& );
+
+ /**
+ *
+ */
+ TInt iCurrentExtensionIndex;
+
+ /**
+ *
+ */
+ TBool iMoveToNextDirectory;
+ };
+
+#endif // MSENGFILEEXTSCANNER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengfilescanner.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2006 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:
+* Scan files.
+*
+*/
+
+
+#ifndef MSENGFILESCANNER_H
+#define MSENGFILESCANNER_H
+
+// USER INCLUDES
+#include "msengdirectoryscanner.h"
+
+// CLASS DECLARATION
+
+/**
+* This class identifies all files in a given directory based upon a
+* directory specification.
+*/
+class CMsengFileScanner : public CMsengDirectoryScanner
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CMsengFileScanner(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray, RFs& aFsSession);
+
+
+ /**
+ * Destructor.
+ */
+ ~CMsengFileScanner();
+
+ public:
+
+ /**
+ *
+ */
+ enum TLocationResponse
+ {
+ EEntryWasProcessed = 0,
+ EEntryWasDiscarded
+ };
+
+ protected: // From CMsengDirectoryScanner
+
+ /**
+ * Scan this directory for files matching a subclass' criteria
+ */
+ virtual TScanDirectoryResult ScanDirectoryL(const TDesC& aDirectory, RFs& aFsSession);
+
+ /**
+ * Ask the subclass to populate a CDir object with a list of files matching
+ * chosen criteria
+ */
+ virtual CDir* FindFilesL(const TDesC& aDirectory, TBool& aMoveToNextDirectory) = 0;
+
+ /**
+ * Inform the subclass of a matching entry
+ */
+ virtual TLocationResponse HandleLocatedEntryL(const TDesC& aFullFileNameAndPath,
+ const TEntry& aEntry) = 0;
+ };
+
+#endif // MSENGFILESCANNER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengfindallscanner.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2006 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:
+* Scanner class used to scan file system by filename extension
+*
+*
+*/
+
+
+#ifndef MSENGFINDALLSCANNER_H
+#define MSENGFINDALLSCANNER_H
+
+// INCLUDES
+#include "msengfilescanner.h"
+
+// CLASS DECLARATION
+
+/**
+* Scanner class used to scan file system by filename extension.
+*/
+class CMsengFindAllScanner : public CMsengFileScanner
+ {
+ public: // Constructors and destructor
+
+ /**
+ * constructor
+ */
+ static CMsengFindAllScanner* NewL(
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession);
+
+
+ /**
+ * Destructor.
+ */
+ ~CMsengFindAllScanner();
+
+ public: // New functions
+
+ /**
+ *
+ */
+ virtual CDir* FindFilesL(const TDesC& aDirectory, TBool& aMoveToNextDirectory);
+
+ /**
+ *
+ */
+ virtual TLocationResponse HandleLocatedEntryL(const TDesC& aFullFileNameAndPath,
+ const TEntry& aEntry);
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CMsengFindAllScanner(
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession);
+
+ private:
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CMsengFindAllScanner( const CMsengFindAllScanner& );
+ // Prohibit assigment operator if not deriving from CBase.
+ CMsengFindAllScanner& operator= ( const CMsengFindAllScanner& );
+ };
+
+#endif // MSENGFINDALLSCANNER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msenginfoarray.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2006 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:
+* An utility class to handle the UIDs and filename extensions used to
+* identify data types. It is also used to store the results per data type.
+*
+*/
+
+
+#ifndef CMSENGINFOARRAY_H
+#define CMSENGINFOARRAY_H
+
+// INCLUDES
+#include <badesca.h>
+#include <f32file.h>
+
+// FORWARD DECLARATIONS
+class CResourceFile;
+class RResourceReader;
+
+
+// CLASS DECLARATION
+
+/**
+* An utility class to handle the UIDs and filename extensions
+* used to identify data types. It is also used to store
+* the results per data type
+*/
+class CMsengInfoArray : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CMsengInfoArray* NewL(TDriveNumber aDrive,
+ TInt aNumberOfDataGroups,
+ RFs& aFsSession,
+ CResourceFile& aResFile);
+
+ /**
+ * Destructor.
+ */
+ ~CMsengInfoArray();
+
+ public: // New functions
+
+ /**
+ * Get the scan results per UID.
+ * @return Pointer to the array of scan results per UID.
+ */
+ inline CArrayFix<TInt64>* UidResults() const;
+
+ /**
+ * Get the scan results per filename extension.
+ * @return Pointer to the array of scan results per extension.
+ */
+ inline CArrayFix<TInt64>* ExtResults() const;
+
+ /**
+ * Get the scan results per data group.
+ * @return Pointer to the array of scan results per group.
+ */
+ inline CArrayFix<TInt64>* GroupResults() const;
+
+ /**
+ * Get UIDs to be scanned for.
+ * @return Pointer to the array of UIDs.
+ */
+ inline const CArrayFix<TUid>& Uids() const;
+
+ /**
+ * Get the extensions to be scanned for.
+ * @return Pointer to the array of filename extensions.
+ */
+ inline const CDesCArray& Exts() const;
+
+ /**
+ * Get the directories to be scanned.
+ * @return Pointer to the array of directory paths.
+ */
+ inline const CDesCArray& Dirs() const;
+
+ /**
+ * Get the special data directories to be scanned.
+ * @return Pointer to the array data dir - data group pairs.
+ */
+ inline const CDesCArray& DataDirs() const;
+
+ /**
+ *
+ *
+ */
+ inline const CArrayFix<TInt>& DataDirGroups() const;
+
+ /**
+ * Get the files excluded from directory to be scanned.
+ */
+ inline const CArrayPtrFlat<CDesCArray>& DataDirExcludedFiles() const;
+
+ /**
+ * Get the drive that is currently scanned
+ * @return Drive current drive
+ */
+ inline const TDriveNumber CurrentDrive() const;
+
+ /**
+ * Add new file size to the result array.
+ * @param aUid The file UID type in question
+ * @param aSize Size of the file
+ */
+ inline void AddSizeByUidL(TInt aUid, TInt aSize);
+
+ /**
+ * Add new file size to the result array.
+ * @param aExt Filename extension type in question
+ * @param aSize Size of the file
+ */
+ inline void AddSizeByExtL(TInt aExt, TInt aSize);
+
+ /**
+ * Add scan result af a specific data group.
+ * @param aGroupIndex Data group in question
+ * @param aSize Size of the file
+ */
+ inline void AddSizeByGroupL(TInt aGroupIndex, TInt aSize);
+
+ /**
+ * Query if the directory is in the list of directories to be
+ * excluded from scanning, or is a subdirectory of one
+ * @param aDirectory Path of the directory
+ * @return TBool
+ */
+ TBool IsExcludedDir(const TDesC& aDirectory) const;
+
+ /**
+ * This function is otherwise similar to BaflUtils::FolderExists, but
+ * it also ETrue for drive root (e.g. "c:\")
+ * @param aFs File server session
+ * @param aDirectory Path of the directory
+ */
+ TBool FolderExists(RFs& aFs, const TDesC& aPath);
+
+ /**
+ * Query if the directory is in the list of directories to be
+ * excluded from scanning, or is a subdirectory of one
+ * @param aDirectory Path of the directory
+ * @return TBool
+ */
+ TBool IsSpecialDir(const TDesC& aDirectory) const;
+
+
+ private:
+
+ /**
+ * C++ default constructor is prohibited.
+ */
+ CMsengInfoArray(TDriveNumber aDrive);
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL(TInt aNumberOfDataGroups, RFs& aFsSession, CResourceFile& aResFile);
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CMsengInfoArray( const CMsengInfoArray& );
+ // Prohibit assigment operator if not deriving from CBase.
+ CMsengInfoArray& operator= ( const CMsengInfoArray& );
+
+ private: // Data
+ // Root directories for scanning
+ CDesCArray* iDirArray;
+
+ // Directories that are excluded from the normal scan
+ CDesCArray* iExcludedDirArray;
+
+ // Directories scanned as a whole excluding listed files
+ CDesCArray* iDataDirArray;
+ CArrayFix<TInt>* iDataDirGroupArray;
+ CArrayPtrFlat<CDesCArray>* iDataDirExclArray;
+
+ // The drive that is currently scanned
+ TDriveNumber iCurrentScannedDrive;
+
+ // The following arrays are indexed using values from enumerations
+ // TUidTypes and TExtTypes
+
+ // Results are inserted into these arrays
+ CArrayFix<TInt64>* iUidResultArray;
+ CArrayFix<TInt64>* iExtResultArray;
+ CArrayFix<TInt64>* iGroupResultArray;
+
+ // UIDs and extensions, which are searched,
+ // are in these two arrays
+ CArrayFix<TUid>* iUidArray;
+ CDesCArray* iExtArray;
+ };
+
+#include "msenginfoarray.inl"
+
+#endif // CMSENGINFOARRAY_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msenginfoarray.inl Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,88 @@
+/*
+* 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: Inline definition for CMsengInfoArray
+*
+*
+*/
+
+
+inline CArrayFix<TInt64>* CMsengInfoArray::UidResults() const
+ {
+ return iUidResultArray;
+ }
+
+inline CArrayFix<TInt64>* CMsengInfoArray::ExtResults() const
+ {
+ return iExtResultArray;
+ }
+
+inline CArrayFix<TInt64>* CMsengInfoArray::GroupResults() const
+ {
+ return iGroupResultArray;
+ }
+
+inline const CArrayFix<TUid>& CMsengInfoArray::Uids() const
+ {
+ return *iUidArray;
+ }
+
+inline const CDesCArray& CMsengInfoArray::Exts() const
+ {
+ return *iExtArray;
+ }
+
+inline const CDesCArray& CMsengInfoArray::Dirs() const
+ {
+ return *iDirArray;
+ }
+
+inline const CDesCArray& CMsengInfoArray::DataDirs() const
+ {
+ return *iDataDirArray;
+ }
+
+inline const CArrayFix<TInt>& CMsengInfoArray::DataDirGroups() const
+ {
+ return *iDataDirGroupArray;
+ }
+
+inline const CArrayPtrFlat<CDesCArray>& CMsengInfoArray::DataDirExcludedFiles() const
+ {
+ return *iDataDirExclArray;
+ }
+
+inline const TDriveNumber CMsengInfoArray::CurrentDrive() const
+ {
+ return iCurrentScannedDrive;
+ }
+
+inline void CMsengInfoArray::AddSizeByUidL(TInt aUid, TInt aSize)
+ {
+ // The array must have been initialized to contain zeros!
+ (*iUidResultArray)[aUid] += aSize;
+ }
+
+inline void CMsengInfoArray::AddSizeByExtL(TInt aExt, TInt aSize)
+ {
+ // The array must have been initialized to contain zeros!
+ (*iExtResultArray)[aExt] += aSize;
+ }
+
+inline void CMsengInfoArray::AddSizeByGroupL(TInt aGroupIndex, TInt aSize)
+ {
+ // The array must have been initialized to contain zeros!
+ (*iGroupResultArray)[aGroupIndex] += aSize;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengregistryscanner.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2006 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: Memory scan engine registry scanning
+*
+*/
+
+
+#ifndef MSENGREGISTRYSCANNER_H
+#define MSENGREGISTRYSCANNER_H
+
+// USER INCLUDES
+#include "msengscannerbase.h"
+
+
+// CLASS DECLARATION
+
+/**
+* This class represents a registry scanner.
+*
+* @since 3.2
+*/
+class CMsengRegistryScanner : public CMsengScannerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ *
+ * @param aDrive - Drive to be scanned.
+ */
+ static CMsengRegistryScanner* NewL( TDriveNumber aDrive, MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray, RFs& aFsSession);
+
+ /**
+ * Destructor.
+ */
+ ~CMsengRegistryScanner();
+
+ public: // New functions
+
+ /**
+ * Starts the scan operation.
+ * @since S60 3.2
+ */
+ void Scan();
+
+ protected: // Functions from base classes
+
+ /**
+ * From CMsengScannerBase
+ * Do one incremental scanning step
+ *
+ * @since S60 3.2
+ */
+ virtual TStepResult PerformStepL();
+
+
+ private:
+
+ CMsengRegistryScanner(TDriveNumber aDrive, MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray, RFs& aFsSession);
+
+ void ScanSisRegistryL();
+
+ private: // Internal enumerations
+
+ /**
+ *
+ */
+ enum TRegistryType
+ {
+ ERegistrySisx,
+ ERegistryLast
+ };
+
+ private: // Data
+
+ TRegistryType iType;
+ TDriveNumber iDrive;
+ };
+
+#endif // MSENGREGISTRYSCANNER
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengscanner.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2006 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:
+* CMsengScanner is the class that mostly controls the operation
+* of Memory Scan Engine. It CMsengScannerBase-derived active objects
+* to perform scanning operations.
+*
+*/
+
+
+#ifndef CMSENGSCANNER_H
+#define CMSENGSCANNER_H
+
+// SYSTEM INCLUDES
+#include <barsc2.h> // CResourceFile
+#include <barsread2.h> // RResourceReader
+
+// USER INCLUDES
+#include "msengscanobserver.h"
+#include "msenginfoarray.h"
+
+
+// FORWARD DECLARATIONS
+class MMsengUIHandler;
+class CMsengFileExtScanner;
+class CMsengFindAllScanner;
+class CMsengRegistryScanner;
+
+
+// CLASS DECLARATION
+
+/**
+* CMsengScanner controls the scanning operation.
+*/
+class CMsengScanner : public CBase, public MMsengScannerObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CMsengScanner(MMsengUIHandler& aUIHandler, CResourceFile& aResFile);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMsengScanner();
+
+ public: // New functions
+
+ /**
+ *
+ */
+ void Cancel();
+
+ /**
+ *
+ */
+ TBool HaveActiveScanners() const;
+
+ /**
+ * Start scanning (creates a new thread).
+ * @param aDrive the drive which is scanned
+ * @paran aNumberOfDataGroups
+ * @return KErrInUse if the scanning is already going on;
+ * KErrNone otherwise
+ */
+ TInt ScanL(TDriveNumber aDrive, TInt aNumberOfDataGroups, RFs& FsSession);
+
+ /**
+ * Get scan results per UID.
+ * @return Pointer to an array containing results per UID.
+ */
+ inline const CArrayFix<TInt64>* UidResults() const;
+
+ /**
+ * Get scan results per filename extension.
+ * @return Pointer to an array containing results per ext.
+ */
+ inline const CArrayFix<TInt64>* ExtResults() const;
+
+ /**
+ * Get scan results per data group.
+ * @return Pointer to an array containing results per group.
+ */
+ inline const CArrayFix<TInt64>* GroupResults() const;
+
+ /**
+ *
+ */
+ inline const TDriveNumber CurrentDrive() const;
+
+ public: // From MMsengScannerObserver
+
+ /**
+ *
+ * @param aEvent event that is handled
+ */
+ void HandleScannerEventL(TScannerEvent aEvent,
+ const CMsengScannerBase& aScanner, TInt aError=KErrNone);
+
+ private:
+
+ /**
+ * Do some simple scanning before actual work.
+ * @param aDrive the drive to be scanned
+ * @param aFsSession reference to file server session
+ */
+ void PreScanL(TDriveNumber aDrive, RFs& aFsSession);
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CMsengScanner( const CMsengScanner& );
+ // Prohibit assigment operator if not deriving from CBase.
+ CMsengScanner& operator= ( const CMsengScanner& );
+
+ private: // Data
+
+ // External objects
+ MMsengUIHandler& iUIHandler;
+ CMsengInfoArray* iScanArray;
+ CResourceFile& iResFile;
+
+ // Owned objects
+ CMsengFileExtScanner* iFileExtScanner;
+ CMsengFindAllScanner* iFindAllScanner;
+ CMsengRegistryScanner* iRegistryScanner;
+ };
+
+#include "msengscanner.inl"
+
+#endif // CMSENGSCANNER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengscanner.inl Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* 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: Inline definition for CMsengScanner
+*
+*
+*/
+
+
+inline const CArrayFix<TInt64>* CMsengScanner::UidResults() const
+ {
+ return iScanArray->UidResults();
+ }
+
+inline const CArrayFix<TInt64>* CMsengScanner::ExtResults() const
+ {
+ return iScanArray->ExtResults();
+ }
+
+inline const CArrayFix<TInt64>* CMsengScanner::GroupResults() const
+ {
+ return iScanArray->GroupResults();
+ }
+
+inline const TDriveNumber CMsengScanner::CurrentDrive() const
+ {
+ return iScanArray->CurrentDrive();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengscannerbase.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2006 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:
+* Base class for scanner classes.
+*
+*
+*/
+
+
+#ifndef MSENGSCANNERBASE_H
+#define MSENGSCANNERBASE_H
+
+
+
+
+// USER INCLUDES
+#include "mseng.hrh"
+#include "msenginfoarray.h"
+#include "msengscanobserver.h"
+
+
+
+// CONSTANTS
+const TInt KDirectoryListGranularity = 10;
+
+// CLASS DECLARATION
+
+/**
+* Base class for scanner classes.
+*
+*/
+class CMsengScannerBase : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ *
+ */
+ enum TStepResult
+ {
+ ECompleteRequest = 0,
+ ERequestIssuedInternally,
+ EScanComplete
+ };
+
+ /**
+ * C++ default constructor.
+ */
+ CMsengScannerBase(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aInfoArray, RFs& aFsSession);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMsengScannerBase();
+
+ protected: // Internal functions
+
+ /**
+ * Do one incremental scanning step
+ */
+ virtual TStepResult PerformStepL() = 0;
+
+ /**
+ * Complete this active object's request and set it active again
+ */
+ void CompleteRequest(TInt aCode = KErrNone);
+
+ /**
+ * Add new value in bytes to the amount of data found with this UID.
+ * @param aUid The UID type.
+ * @param aSize The size of the file with this UID.
+ */
+ inline void AddSizeByUidL(TUidTypes aUid, TInt aSize);
+
+ /**
+ * Add new value in bytes to the amount of data found with this UID.
+ * @param aUid The UID type.
+ * @param aSize The size of the file with this UID.
+ */
+ inline void AddSizeByExtL(TExtTypes aExt, TInt aSize);
+
+ /**
+ * Query if the directory is in the list of directories to be
+ * excluded from scanning, or is a subdirectory of one.
+ * @param aDirectory Path of the directory
+ */
+ inline TBool IsExcludedDir(const TDesC& aDirectory);
+
+ /**
+ * Query if the directory is in the list of directories to be
+ * excluded from scanning, or is a subdirectory of one.
+ * @param aDirectory Path of the directory
+ */
+ inline TBool IsSpecialDir(const TDesC& aDirectory);
+
+ /**
+ * Access the file server session
+ */
+ inline RFs& FsSession();
+
+ /**
+ * Access the information array
+ */
+ inline CMsengInfoArray& InfoArray();
+
+ /**
+ * Access the observer of this scanner
+ */
+ inline MMsengScannerObserver& ScannerObserver();
+
+ private: // from CActive
+
+ /**
+ *
+ */
+ virtual void RunL();
+
+ /**
+ *
+ */
+ virtual void DoCancel();
+
+ /**
+ *
+ */
+ virtual TInt RunError(TInt aError);
+
+ private:
+
+ // Prohibit copy constructor if not deriving from CBase.
+ CMsengScannerBase( const CMsengScannerBase& );
+ // Prohibit assigment operator if not deriving from CBase.
+ CMsengScannerBase& operator= ( const CMsengScannerBase& );
+
+
+ private:
+
+ MMsengScannerObserver& iObserver;
+ CMsengInfoArray& iInfoArray;
+ RFs& iFsSession;
+ };
+
+#include "msengscannerbase.inl"
+
+#endif // CMSENGSCANNERBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengscannerbase.inl Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* 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: Inline definition for CMsengScannerBase
+*
+*
+*/
+
+
+inline void CMsengScannerBase::AddSizeByUidL(TUidTypes aUid, TInt aSize)
+ {
+ iInfoArray.AddSizeByUidL(aUid, aSize);
+ }
+
+inline void CMsengScannerBase::AddSizeByExtL(TExtTypes aExt, TInt aSize)
+ {
+ iInfoArray.AddSizeByExtL(aExt, aSize);
+ }
+
+inline TBool CMsengScannerBase::IsExcludedDir(const TDesC& aDirectory)
+ {
+ return iInfoArray.IsExcludedDir(aDirectory);
+ }
+
+inline TBool CMsengScannerBase::IsSpecialDir(const TDesC& aDirectory)
+ {
+ return iInfoArray.IsSpecialDir(aDirectory);
+ }
+
+inline RFs& CMsengScannerBase::FsSession()
+ {
+ return iFsSession;
+ }
+
+inline CMsengInfoArray& CMsengScannerBase::InfoArray()
+ {
+ return iInfoArray;
+ }
+inline MMsengScannerObserver& CMsengScannerBase::ScannerObserver()
+ {
+ return iObserver;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengscanobserver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,56 @@
+/*
+* 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:
+* An interface class used by the scanning thread to send
+* events to the CMsengScanner instance that created the thread.
+*
+*/
+
+
+#ifndef MSENGSCANOBSERVER_H
+#define MSENGSCANOBSERVER_H
+
+// CLASS REFERENCED
+class CMsengScannerBase;
+
+// CLASS DECLARATION
+
+/**
+*
+*/
+class MMsengScannerObserver
+ {
+ public:
+
+ /**
+ *
+ */
+ enum TScannerEvent
+ {
+ EScannerEventScanComplete = 0,
+ EScannerEventScanError
+ };
+
+ public:
+
+ /**
+ *
+ */
+ virtual void HandleScannerEventL(
+ TScannerEvent aEvent, const CMsengScannerBase& aScanner, TInt aRrror=KErrNone) = 0;
+ };
+
+#endif // MSENGSCANOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msengsisxinfo.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2006 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: Memory scanning engine registry scanning
+*
+*/
+
+
+#ifndef MSENGSISXINFO_H
+#define MSENGSISXINFO_H
+
+// CLASS DECLARATION
+
+/**
+* This class represents a sis registry entry.
+*
+* @since 3.2
+*/
+class CMsengSisxInfo : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Constructor.
+ *
+ * @param aEntry - Sis registry entry.
+ * @param aDrive - Drive we are interested in
+ */
+ static CMsengSisxInfo* NewL( Swi::RSisRegistryEntry& aEntry, TDriveNumber aDrive );
+
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMsengSisxInfo();
+
+ public: // New functions
+
+
+ public: // Functions from base classes
+
+ /**
+ * From CAppMngrAppInfo, Get location of the application.
+ *
+ * @since 3.2
+ * @return Application location.
+ */
+ TBool RequestedLocation() const;
+
+
+ private:
+
+ /**
+ * 2nd phase constructor.
+ *
+ * @since 3.2
+ * @param aEntry - Sis registry entry.
+ * @param aDrive - Drive scanning is requested for.
+ */
+ void ConstructL( Swi::RSisRegistryEntry& aEntry, TDriveNumber aDrive );
+
+ private: // Data
+ HBufC* iFileName; // Own
+ RPointerArray<HBufC> iFiles;
+
+ TBool iRequestedLocation;
+ TUid iUid;
+ };
+
+#endif // MSENGSISXINFO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serverinc/msenguihandler.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006 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:
+* A pure virtual interface class used by the UI to handle events from
+* the Memory Scan Engine.
+*
+*/
+
+
+#ifndef MMSENGUIHANDLER_H
+#define MMSENGUIHANDLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+
+// FORWARD DECLARATIONS
+class CMsengInfoArray;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* An interface class used by the engine to send information to the calling class.
+*/
+class MMsengUIHandler
+ {
+ public: // New functions
+
+ /**
+ * The engine tells that it has successfully initialized itself and
+ * started the scanning operation.
+ */
+ virtual void StartL()=0;
+
+ /**
+ * The last method called when the scanning is either finished or canceled.
+ * @param aReason The quit reason, can be KErrNone or KErrCancel.
+ */
+ virtual void QuitL(TInt aReason)=0;
+
+ /**
+ * The engine notifies the calling class if some error has happened
+ * @param aError Error code.
+ */
+ virtual void ErrorL(TInt aError)=0;
+ };
+
+#endif // MMSENGUIHANDLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/memscanserv.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,621 @@
+/*
+* Copyright (c) 2006-2006 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: Memory Scan Server
+*
+*/
+
+
+
+// SYSTEM INCLUDES
+#include <e32svr.h>
+#include <s32mem.h> // RBufWriteStream
+
+// USER INCLUDES
+#include "memscanserv.h"
+#include "memscanutils.h" // traces
+
+
+// ---------------------------------------------------------------------------
+// Server startup code
+// ---------------------------------------------------------------------------
+
+// Perform all server initialisation, in particular creation of the
+// scheduler and server and then run the scheduler
+//
+static void RunServerL()
+ {
+ // naming the server thread after the server helps to debug panics
+ User::LeaveIfError(User::RenameThread(KMemScanServName));
+
+ // create and install the active scheduler we need
+ CActiveScheduler* scheduler=new(ELeave) CActiveScheduler;
+ CleanupStack::PushL(scheduler);
+ CActiveScheduler::Install(scheduler);
+ // create the server (leave it on the cleanup stack)
+ CMemScanServ::NewLC();
+ // Initialisation complete, now signal the client
+
+ RProcess::Rendezvous(KErrNone);
+
+ // Ready to run
+ TRACES( RDebug::Print(_L("MemScanServ: server fully running")) );
+ CActiveScheduler::Start();
+ // Cleanup the server and scheduler
+ CleanupStack::PopAndDestroy(2, scheduler);
+ }
+
+// Server process entry-point
+TInt E32Main()
+ {
+ __UHEAP_MARK;
+ TRACES( RDebug::Print(_L("MemScanServ: E32Main")) );
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+ TInt r=KErrNoMemory;
+ if (cleanup)
+ {
+ TRAP(r,RunServerL());
+ delete cleanup;
+ }
+ __UHEAP_MARKEND;
+ return r;
+ }
+
+// RMessagePtr2::Panic() also completes the message. This is:
+// (a) important for efficient cleanup within the kernel
+// (b) a problem if the message is completed a second time
+void PanicClient(const RMessagePtr2& aMessage,TMemScanServPanic aPanic)
+ {
+ _LIT(KPanic,"MemScanServ");
+ aMessage.Panic(KPanic,aPanic);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CShutDown
+// ---------------------------------------------------------------------------
+inline CShutdown::CShutdown()
+ :CTimer(-1)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+inline void CShutdown::ConstructL()
+ {
+ CTimer::ConstructL();
+ }
+
+inline void CShutdown::Start()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: starting shutdown timeout")) );
+ After(EMemScanServShutdownDelay);
+ }
+
+void CShutdown::RunL()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: server timeout ... closing")) );
+ CActiveScheduler::Stop();
+ }
+
+// ---------------------------------------------------------------------------
+// CMemScanServ
+// ---------------------------------------------------------------------------
+inline CMemScanServ::CMemScanServ()
+ :CPolicyServer(0, KMemScanServPolicy, ESharableSessions)
+ {
+ }
+
+CServer2* CMemScanServ::NewLC()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServ::NewLC")) );
+ CMemScanServ* self=new(ELeave) CMemScanServ;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// 2nd phase construction - ensure the timer and server objects are running
+void CMemScanServ::ConstructL()
+ {
+ StartL(KMemScanServName);
+ iShutdown.ConstructL();
+ // ensure the server still exits even if the 1st client fails to connect
+ if( !iShutdown.IsActive() )
+ {
+ iShutdown.Start();
+ }
+ }
+
+
+// Create a new client session.
+CSession2* CMemScanServ::NewSessionL(const TVersion& aVersion, const RMessage2&) const
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServ::NewSessionL")) );
+
+ // Client-Server version check
+ TVersion version(KMemScanServMajor, KMemScanServMinor, KMemScanServBuild);
+ if( !User::QueryVersionSupported( version, aVersion ) )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ return new (ELeave) CMemScanServSession();
+ }
+
+// A new session is being created
+// Cancel the shutdown timer if it was running
+void CMemScanServ::AddSession()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServ::AddSession")) );
+ ++iSessionCount;
+ iShutdown.Cancel();
+ }
+
+// A session is being destroyed
+// Start the shutdown timer if it is the last session.
+void CMemScanServ::DropSession()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServ::DropSession")) );
+ if (--iSessionCount==0)
+ {
+ if( !iShutdown.IsActive() )
+ {
+ iShutdown.Start();
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession
+// ---------------------------------------------------------------------------
+inline CMemScanServSession::CMemScanServSession()
+ {
+ TRACES( RDebug::Print(_L("MemScanServer: CMemScanServSession::CMemScanServSession")); )
+ }
+
+inline CMemScanServ& CMemScanServSession::Server()
+ {
+ return *static_cast<CMemScanServ*>(const_cast<CServer2*>(CSession2::Server()));
+ }
+
+// 2nd phase construct for sessions - called by the CServer framework
+void CMemScanServSession::CreateL()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServSession::CreateL")); )
+ Server().AddSession();
+
+ // Create a transfer buffer
+ iTransferBuffer = CBufFlat::NewL(KMemScanServTransferBufferExpandSize);
+ }
+
+CMemScanServSession::~CMemScanServSession()
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServSession::~CMemScanServSession")); )
+
+
+ delete iTransferBuffer;
+ delete iMseng;
+
+
+ iEventBuffer.Close();
+ Server().DropSession();
+ }
+
+
+// Handle a client request.
+// Leaving is handled by CMemScanServSession::ServiceError() which reports
+// the error code to the client
+void CMemScanServSession::ServiceL(const RMessage2& aMessage)
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServSession::ServiceL; %d"),aMessage.Function()); )
+ switch (aMessage.Function())
+ {
+ case EMemScanPrepareDataGroups:
+ {
+ PrepareDataGroupsL( aMessage );
+ break;
+ }
+ case EMemScanGetDataGroups:
+ {
+ GetDataGroupsL( aMessage );
+ break;
+ }
+ case EMemScanStartScan:
+ {
+ MemScanL( aMessage );
+ break;
+ }
+ case EMemScanPrepareScanResults:
+ {
+ PrepareScanResultsL( aMessage );
+ break;
+ }
+ case EMemScanGetScanResults:
+ {
+ GetScanResultsL( aMessage );
+ break;
+ }
+ case EMemScanRequestScanEvents:
+ {
+ RequestScanEventsL( aMessage );
+ break;
+ }
+ case EMemScanRequestScanEventsCancel:
+ {
+ RequestScanEventsCancel( aMessage );
+ break;
+ }
+ case EMemScanInProgress:
+ {
+ ScanInProgress( aMessage );
+ break;
+ }
+
+ default:
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServSession::ServiceL; %d"),aMessage.Function()); )
+ PanicClient(aMessage,EPanicIllegalFunction);
+ break;
+ }
+
+ }
+ }
+
+// Handle an error from CMemScanServSession::ServiceL()
+void CMemScanServSession::ServiceError(const RMessage2& aMessage,TInt aError)
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServSession::ServiceError %d"),aError); )
+ CSession2::ServiceError(aMessage,aError);
+ }
+
+
+// ***************************************************************************
+// Internal utility functions
+// ***************************************************************************
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::PrepareDataGroupsL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::PrepareDataGroupsL(const RMessage2& aMessage)
+ {
+ // Create scan engine if it does not exist
+ if(!iMseng)
+ {
+ iMseng = CMseng::NewL(*this);
+ }
+
+ // Get data group name array
+ CDesCArray* dataGroupArray = iMseng->DataGroupsL();
+ CleanupStack::PushL(dataGroupArray);
+
+
+ // *** Start externalizing the data group array to transfer buffer
+
+ // Clear the buffer
+ iTransferBuffer->Reset();
+
+ // Set buffer for the stream
+ RBufWriteStream stream(*iTransferBuffer);
+ CleanupClosePushL(stream);
+
+ // Write number of fields in array to stream
+ TInt count = dataGroupArray->MdcaCount();
+ stream.WriteInt32L(count);
+
+ // Write each field in array to stream
+ for(TInt i=0; i<count; i++)
+ {
+ TInt length = dataGroupArray->MdcaPoint(i).Length();
+ stream.WriteInt32L(length); // writes datagroup name length to stream
+ const TPtrC group = dataGroupArray->MdcaPoint(i);
+ stream << group; // writes one datagroup to stream
+ }
+
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(&stream);
+ CleanupStack::PopAndDestroy(dataGroupArray);
+
+ // *** externalizing done
+
+
+ // Write the size of transfer buffer back to client
+ TPckgBuf<TInt> size(iTransferBuffer->Size());
+ aMessage.WriteL(0, size);
+
+ // complete the message
+ aMessage.Complete( KErrNone );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::GetDataGroupsL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::GetDataGroupsL(const RMessage2& aMessage)
+ {
+ // Get the prepared data groups
+ aMessage.WriteL( KMesArg0, iTransferBuffer->Ptr(0));
+
+ aMessage.Complete( KErrNone );
+ }
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::PrepareScanResultsL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::PrepareScanResultsL(const RMessage2& aMessage)
+ {
+ // Get scan results from server
+ CArrayFix<TInt64>* resultArray = iMseng->ScanResultL();
+ CleanupStack::PushL(resultArray);
+
+ // *** Start externalizing the result array to transfer buffer
+
+ // Clear the buffer
+ iTransferBuffer->Reset();
+
+ // Set buffer for the stream
+ RBufWriteStream stream(*iTransferBuffer);
+ CleanupClosePushL(stream);
+
+ // Write number of fields in array to stream
+ TInt count = resultArray->Count();
+ stream.WriteInt32L(count);
+
+ // Write each field in array to stream
+ for(TInt i=0; i<count; i++)
+ {
+ const TInt64 result = resultArray->At(i);
+ stream << result; // writes one data result to stream
+ }
+
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(&stream);
+ CleanupStack::PopAndDestroy(resultArray);
+
+ // *** externalizing done
+
+
+ // Write the size of transfer buffer back to client
+ TPckgBuf<TInt> size(iTransferBuffer->Size());
+ aMessage.WriteL(0, size);
+
+
+ aMessage.Complete( KErrNone );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::GetScanResultsL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::GetScanResultsL(const RMessage2& aMessage)
+ {
+ // Get the prepared scan results
+ aMessage.WriteL( KMesArg0, iTransferBuffer->Ptr(0));
+
+ aMessage.Complete( KErrNone );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::MemScanL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::MemScanL(const RMessage2& aMessage)
+ {
+ TRACES( RDebug::Print(_L("MemScanServ: CMemScanServSession::ScanL")); )
+
+ // Get the first integer parameter of message
+ TDriveNumber drive = TDriveNumber(aMessage.Int0());
+
+ iMseng->ScanL( drive );
+ aMessage.Complete( KErrNone );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::RequestScanEventsL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::RequestScanEventsL(const RMessage2& aMessage)
+ {
+ if ( iScanEventMessage.IsNull() )
+ {
+ // We want check that the client hasn't requested scan events
+ // twice in a row. The client is only allowed to have one
+ // scan event request outstanding at any given time.
+ //
+ // Since the iScanEventMessage was null (i.e. its not been
+ // initialised) then its safe to store the client's message
+ // for completion later on when the scan engine has a real event.
+
+ // Save the clients message for later until we receive an
+ // event callback from the scan engine.
+ iScanEventMessage = aMessage;
+
+ // If we have at least one event ready to send to the client, then
+ // we deliver it to the client immediately. This could be possible
+ // if the client is slow to process an earlier event.
+ const TBool haveAtLeastOneEventPending = IsEventReady();
+ if ( haveAtLeastOneEventPending )
+ {
+ // We must deliver the oldest event to the client.
+ DeliverOldestEventToClientL(); // this will complete aMessage immediately.
+ }
+ }
+ else
+ {
+ // The client has already asked for scan events as we still
+ // have an existing (valid) iScanEventMessage object.
+ //
+ // This would imply a programming error in the client code
+ // so we punish the client by panicking it.
+ aMessage.Panic( KMemScanServerPanicCategory, EMemScanServerPanicRequestedScanEventsTwice );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::RequestScanEventsCancel()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::RequestScanEventsCancel(const RMessage2& aMessage)
+ {
+ // We only are able to cancel a client request if the client actually
+ // requested something.
+ // We can check whether a request is pending by using the IsNull method
+ // on our outstanding request object ("iScanEventMessage").
+ if ( iScanEventMessage.IsNull() == EFalse )
+ {
+ // The client has made a request, and we need to cancel it.
+ iScanEventMessage.Complete( KErrCancel );
+ }
+
+
+ // If the client wants to cancel events, we should also empty
+ // the event buffer.
+ iEventBuffer.Reset();
+
+ aMessage.Complete( KErrNone );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::ScanInProgress()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::ScanInProgress(const RMessage2& aMessage)
+ {
+ TBool scanInProgress = iMseng->ScanInProgress();
+ aMessage.Complete(static_cast<TInt> (scanInProgress));
+ }
+
+
+
+// From MMsengUIHandler:
+// ===========================================================================
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::StartL()
+// ---------------------------------------------------------------------------
+void CMemScanServSession::StartL()
+ {
+ SendEventToClientL( EMemScanEventScanningStarted );
+ }
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::QuitL()
+// ---------------------------------------------------------------------------
+void CMemScanServSession::QuitL(TInt aReason)
+ {
+ SendEventToClientL( EMemScanEventScanningFinished, aReason );
+ }
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::Error()
+// ---------------------------------------------------------------------------
+void CMemScanServSession::ErrorL(TInt aError)
+ {
+ SendEventToClientL( EMemScanEventScanningError, aError );
+ }
+
+// ===========================================================================
+
+
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::SendEventToClientL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::SendEventToClientL( TMemScanEvent aEventType,
+ TInt aError )
+ {
+ // We need to tell the client about the event that has taken place.
+ // The client event API expects to receive the event type, i.e. what
+ // kind of "thing" just happened, and also any associated error value
+ // (e.g. "Nothing went wrong" or, "we ran out of memory").
+
+ AddNewEventToBufferL( aEventType, aError );
+ DeliverOldestEventToClientL();
+ }
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::AddNewEventToBufferL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::AddNewEventToBufferL( TMemScanEvent aEventType,
+ TInt aError )
+ {
+ TMemScanEventPackage event;
+ event.iEvent = aEventType;
+ event.iError = aError;
+
+ // Add the event to the event buffer. We will send this event to the
+ // client when the client is ready to accept it.
+ iEventBuffer.AppendL( event );
+ }
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::IsEventReady()
+//
+// ---------------------------------------------------------------------------
+TBool CMemScanServSession::IsEventReady() const
+ {
+ // Returns whether we have at least one event in the buffer ready to send
+ // to the client.
+ const TInt count = iEventBuffer.Count();
+ return ( count > 0 );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanServSession::DeliverOldestEventToClientL()
+//
+// ---------------------------------------------------------------------------
+void CMemScanServSession::DeliverOldestEventToClientL()
+ {
+ // Fetch the oldest event from the buffer and deliver it
+ // to the client.
+ if ( iScanEventMessage.IsNull() == EFalse && IsEventReady() )
+ {
+ // This next block of code converts the error number to look like
+ // a descriptor, since this is the only way of writing to the
+ // client's address space.
+ //
+ // We check that the client actually requested scan events before
+ // we try and write to its address space. If we don't do this
+ // then the kernel will panic our code with KERN-SVR 0
+ // ("you're trying to use a null message object")
+ const TMemScanEventPackage& event = iEventBuffer[ 0 ];
+
+ TPckgC<TInt> associatedErrorAsDescriptor( event.iError );
+ iScanEventMessage.WriteL( 0, associatedErrorAsDescriptor );
+
+ // Now that we have written the error value, its safe to complete
+ // the clients asynchronous request which will end up calling
+ // the client's RunL method.
+ iScanEventMessage.Complete( event.iEvent );
+
+ // We've delivered the oldest event to the client, so now
+ // its safe to discard it.
+ iEventBuffer.Remove( 0 );
+ }
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/mseng.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,567 @@
+/*
+* Copyright (c) 2006-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:
+* The actual "engine".
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+
+// SYSTEM INCLUDES
+#include <mseng.rsg>
+#include <bautils.h>
+
+// USER INCLUDES
+#include "mseng.h"
+#include "mseng.hrh"
+#include "msengscanner.h"
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMseng::CMseng()
+//
+// C++ default constructor. Can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+
+
+
+CMseng::CMseng( MMsengUIHandler& aUIHandler ) :
+ iUIHandler(aUIHandler),
+ iFreeMemory(0)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::NewL()
+//
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+
+EXPORT_C CMseng* CMseng::NewL(MMsengUIHandler& aUIHandler)
+ {
+ CMseng* self = new (ELeave) CMseng(aUIHandler);
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::ConstructL()
+//
+// Symbian OS default constructor can leave.
+// ---------------------------------------------------------------------------
+
+void CMseng::ConstructL()
+ {
+ #ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("** CMseng::ConstructL()... starting **"));
+ #endif // __SHOW_RDEBUG_PRINT_
+
+ // Connect to File Server
+ User::LeaveIfError(iFsSession.Connect());
+
+ // Open the resource file
+ TParse* fp = new(ELeave) TParse();
+ fp->Set(KMsengRscFilePath, &KDC_RESOURCE_FILES_DIR, NULL);
+ TFileName fileName( fp->FullName() );
+ delete fp;
+
+
+ BaflUtils::NearestLanguageFile( iFsSession, fileName );
+ //
+ TEntry entry;
+ User::LeaveIfError( iFsSession.Entry( fileName, entry ) );
+ // if file does not exist, leaves with KErrNotFound
+
+ iResFile = CResourceFile::NewL( iFsSession, fileName, 0, entry.iSize );
+
+ iResFile->ConfirmSignatureL();
+
+
+ /////////////////////////////////////////////////////////
+ //create data structures and initialize them from resource file
+
+ TInt index = -1; // index used in for-loops
+ TInt subindex = -1; // index used in for-loops inside another for-loop
+ TInt length = -1; // length of resource array being read
+ TInt sublength = -1; // length of sub-array inside array resource
+
+ RResourceReader theReader;
+ theReader.OpenLC( iResFile, DATAGROUPNAMEARRAY );
+
+
+ //the first WORD contains the number of elements in the resource
+ iNumberOfDataGroups = theReader.ReadInt16L();
+
+ CleanupStack::PopAndDestroy( &theReader );
+
+
+
+ /////////////////////////////////////////////////////////
+ // Read the resource containing the data needed to create
+ // mapping between data groups and UIDs
+ //
+ theReader.OpenLC( iResFile, DATAGROUPUIDARRAY );
+
+ //the first WORD contains the number of elements in the resource
+ length = theReader.ReadInt16L();
+
+
+ // Create array with such granularity that reallocation is unnecessary
+ // initialize array to contain null pointers
+ iDataGroupUidArray = new (ELeave) CArrayPtrFlat<CIntArray>(iNumberOfDataGroups);
+ for(index=0; index<iNumberOfDataGroups; index++)
+ {
+ iDataGroupUidArray->AppendL(NULL);
+ }
+ TInt groupindex; // value from enum TDataGroups
+ // Read the array resource
+ for(index=0; index<length; index++)
+ {
+ // Read one enum TDataGroups value
+ groupindex = theReader.ReadInt8L();
+
+ // Read the sub-array. First WORD contains array length.
+ sublength = theReader.ReadInt16L();
+
+ // Create new CUidArray with appropriate granularity
+ // and insert it into the main array
+ CIntArray* subarray = new (ELeave) CIntArray(iNumberOfDataGroups);
+ CleanupStack::PushL(subarray);
+ if( groupindex < iDataGroupUidArray->Count() )
+ {
+ iDataGroupUidArray->At(groupindex) = subarray;
+ }
+
+ // Read the subarray resource
+ for(subindex=0; subindex<sublength; subindex++)
+ {
+ // uidtype matches one value fron enum TUidTypes
+ TInt uidtype = theReader.ReadInt8L();
+ if( groupindex < iDataGroupUidArray->Count() )
+ {
+ iDataGroupUidArray->At(groupindex)->InsertL(subindex,uidtype);
+ }
+ }
+ CleanupStack::Pop( subarray );
+ }
+ CleanupStack::PopAndDestroy( &theReader );
+
+ /////////////////////////////////////////////////////////
+ // Read the resource containing the data needed to create
+ // mapping between data groups and extensions
+ //
+ theReader.OpenLC( iResFile, DATAGROUPEXTARRAY );
+
+ //the first WORD contains the number of elements in the resource
+ length = theReader.ReadInt16L();
+ // Create array with such granularity that reallocation is unnecessary
+ // Initialize it to contain null pointers, since some cells can leave empty
+ iDataGroupExtArray = new (ELeave) CArrayPtrFlat<CIntArray>(iNumberOfDataGroups);
+ for(index=0; index<iNumberOfDataGroups; index++)
+ {
+ iDataGroupExtArray->AppendL(NULL);
+ }
+ // Read the array resource
+ for(index=0; index<length; index++)
+ {
+ // Read one enum TDataGroups value
+ groupindex = theReader.ReadInt8L();
+ // Read the sub-array. First WORD contains array length.
+ sublength = theReader.ReadInt16L();
+ // Create new CIntArray with appropriate granularity
+ // and insert it into the main array
+ CIntArray* subarray = new (ELeave) CIntArray(sublength);
+ CleanupStack::PushL(subarray);
+ if( groupindex < iDataGroupExtArray->Count() )
+ {
+ iDataGroupExtArray->At(groupindex) = subarray;
+ }
+
+ // Read the subarray resource
+ for(subindex=0; subindex<sublength; subindex++)
+ {
+ // exttype matches one value fron enum TUidTypes
+ TInt exttype = theReader.ReadInt8L();
+ if( groupindex < iDataGroupExtArray->Count() )
+ {
+ iDataGroupExtArray->At(groupindex)->InsertL(subindex,exttype);
+ }
+ }
+ CleanupStack::Pop( subarray );
+ }
+
+ CleanupStack::PopAndDestroy( &theReader );
+
+ //instantiate scanner
+ iScanner = new (ELeave) CMsengScanner(iUIHandler, *iResFile);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMseng::~CMseng()
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+
+EXPORT_C CMseng::~CMseng()
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("** CMseng::~CMseng(). Finished. **"));
+#endif // __SHOW_RDEBUG_PRINT_
+
+ delete iScanner;
+
+ // Pointer arrays: elements must be deleted before deleting array
+ if(iDataGroupUidArray)
+ {
+ iDataGroupUidArray->ResetAndDestroy();
+ }
+ delete iDataGroupUidArray;
+
+
+ if(iDataGroupExtArray)
+ {
+ iDataGroupExtArray->ResetAndDestroy();
+ }
+ delete iDataGroupExtArray;
+
+
+ delete iResFile;
+
+ iFsSession.Close();
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CMseng::DataGroupsL()
+//
+// Get a descriptor array containing the names of the data groups.
+// ---------------------------------------------------------------------------
+
+EXPORT_C CDesCArray* CMseng::DataGroupsL() const
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMseng::GetDataGroupsL() called."));
+#endif // __SHOW_RDEBUG_PRINT_
+
+
+ // Create the array for the data group names with appropriate granularity
+ CDesCArray* dataGroupNameArray = new (ELeave) CDesCArrayFlat(iNumberOfDataGroups);
+ CleanupStack::PushL(dataGroupNameArray);
+
+ // Read the resource containing data group names
+ // and put them to resultArray
+
+ RResourceReader theReader;
+ theReader.OpenLC( iResFile, DATAGROUPNAMEARRAY );
+
+
+ // The first WORD contains the number of elements in the resource
+ // (actually this is already in iNumberOfDataGroups)
+
+ TInt length = theReader.ReadInt16L();
+ __ASSERT_DEBUG(iNumberOfDataGroups == length, User::Panic(_L("CMseng::DataGroupsL"), KErrGeneral));
+
+ // Read the data group names from resource file and insert to array
+ TInt groupindex; // value from enum TDataGroups
+ for(TInt index=0; index<length; index++)
+ {
+ groupindex = theReader.ReadInt8L();
+ TPtrC name = theReader.ReadTPtrCL();
+ // Copy the name to the right place in the array
+ dataGroupNameArray->InsertL(groupindex, name);
+ }
+ CleanupStack::PopAndDestroy( &theReader );
+
+ // Return the array of data groups
+ CleanupStack::Pop( dataGroupNameArray );
+
+#ifdef __SHOW_RDEBUG_PRINT_
+// print the data group array
+ RDebug::Print(_L("Printing the Data Groups:"));
+ for(TInt k = 0; k < dataGroupNameArray->Count(); k++)
+ {
+ HBufC* groupName = dataGroupNameArray->MdcaPoint(k).AllocL();
+ RDebug::Print( _L(" %d: %S"), k, groupName);
+ delete groupName;
+ }
+#endif // __SHOW_RDEBUG_PRINT_
+
+ return dataGroupNameArray;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::ScanResultL()
+//
+// Returns an array of scan results
+// ---------------------------------------------------------------------------
+
+EXPORT_C CArrayFix<TInt64>* CMseng::ScanResultL() const
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMseng::ScanResultL() called. Starting to calculate result..."));
+#endif // __SHOW_RDEBUG_PRINT_
+
+ // Create the result array (with such granularity that reallocations do not happen)
+ CArrayFix<TInt64>* resultArray = new (ELeave) CArrayFixFlat<TInt64>(iNumberOfDataGroups);
+ CleanupStack::PushL(resultArray);
+
+ // Get result arrays from scanner
+ const CArrayFix<TInt64>* extResultArray = iScanner->ExtResults();
+ const CArrayFix<TInt64>* uidResultArray = iScanner->UidResults();
+ const CArrayFix<TInt64>* groupResultArray = iScanner->GroupResults();
+
+ // Initialize the result array from the array of initial result
+ for (TInt i = 0; i < iNumberOfDataGroups; i++)
+ {
+ if( i < groupResultArray->Count() )
+ {
+ resultArray->AppendL(groupResultArray->At(i));
+ }
+ }
+
+ //Calculate the results and put them to the array
+
+ // Find results for each data group
+ for(TInt groupindex = 0; groupindex < iNumberOfDataGroups; groupindex++)
+ {
+ // For one data group, the UIDs belonging to this group are listed in
+ // iDataGroupExtArray. For each of these UIDs, add the result to the total result.
+
+ // If the examined data group does not have associated UIDs,
+ // iDataGroupUidArray->At(groupindex) is a NULL pointer.
+ if(iDataGroupUidArray->At(groupindex))
+ {
+ TInt count = iDataGroupUidArray->At(groupindex)->Count();
+ for(TInt uidindex = 0; uidindex < count; uidindex++)
+ {
+ resultArray->At(groupindex) +=
+ uidResultArray->At( iDataGroupUidArray->At(groupindex)->At(uidindex) );
+ }
+ }
+
+ // The extension results are collected in a similar manner
+
+ // If the examined data group does not have associated UIDs,
+ // iDataGroupUidArray->At(groupindex) is a NULL pointer
+ if(iDataGroupExtArray->At(groupindex))
+ {
+ TInt count = iDataGroupExtArray->At(groupindex)->Count();
+ for(TInt extindex = 0; extindex < count; extindex++)
+ {
+ resultArray->At(groupindex) +=
+ extResultArray->At( iDataGroupExtArray->At(groupindex)->At(extindex) );
+ }
+ }
+ }
+ // Calculate "Free memory" and "All device data"
+ TInt64 totalMemory;
+ TInt64 freeMemory;
+ DiskInfoL(totalMemory, freeMemory, iScanner->CurrentDrive());
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMseng::ScanresultL(): iFreeMemory %d, freeMemory %d"), (TUint32)iFreeMemory, (TUint32)freeMemory);
+#endif
+ // For some reason there is sometimes 16 kB difference in free memory when scanning started
+ // vs. scanning ended (16 kB more at the end of scanning) and latter one is incorrect.
+ // That is why free memory detected in the beginning of scanning taken into account.
+ if(iFreeMemory)
+ {
+ freeMemory = iFreeMemory;
+ }
+ else
+ {
+ iFreeMemory = freeMemory;
+ }
+
+ // "Free memory" is the memory currently available
+ resultArray->At(EGroupFreeMemory) = freeMemory;
+ // "All Device Data" is all memory used
+ resultArray->At(EGroupAllDeviceData) = (totalMemory - freeMemory);
+
+ // Calculate how much files not falling to any predefined category consume
+ TInt64 others( 0 );
+ for( TInt i = EGroupCalendar; i < iNumberOfDataGroups; i++ )
+ {
+ others += resultArray->At( i );
+ }
+
+ // This should never happen, but just in case check that negative count is not established.
+ if( resultArray->At(EGroupAllDeviceData) - others < 0 )
+ {
+ resultArray->At( EGroupOthers ) = 0;
+ }
+ else
+ {
+ resultArray->At( EGroupOthers ) = resultArray->At(EGroupAllDeviceData) - others;
+ }
+
+// write the result array to log file
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMseng::ScanresultL(): current result array -"));
+ // note that the log macros cannot handle TInt64
+ for(TInt k = 0; k < resultArray->Count(); k++)
+ {
+ const TInt KMaxChars = 32;
+ TBuf<KMaxChars> num;
+ num.Num(resultArray->At(k));
+ RDebug::Print(num);
+ }
+#endif // __SHOW_RDEBUG_PRINT_
+
+ CleanupStack::Pop( resultArray );
+ return resultArray;
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::ScanInProgress()
+//
+// Return ETrue if there is scanning going on, otherwise EFalse.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CMseng::ScanInProgress() const
+ {
+ if(iScanner)
+ {
+ return iScanner->HaveActiveScanners();
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::DiskInfoL
+//
+// Retrieves information about disk usage.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMseng::DiskInfoL(TInt64& aTotal, TInt64& aFree, const TDriveNumber aVolume) const
+ {
+
+ TVolumeInfo vinfo;
+ User::LeaveIfError(iFsSession.Volume(vinfo, aVolume));
+ aTotal = TInt64(vinfo.iSize);
+ aFree = TInt64(vinfo.iFree);
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::MemInfoL
+//
+// Retrieves information about RAM usage.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMseng::MemInfoL(TInt64& aTotal, TInt64& aFree)
+ {
+ TMemoryInfoV1Buf membuf;
+ User::LeaveIfError(UserHal::MemoryInfo(membuf));
+ TMemoryInfoV1 minfo = membuf();
+ aTotal = minfo.iTotalRamInBytes;
+ aFree = minfo.iFreeRamInBytes;
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::ScanL()
+//
+// First scan the specific data files.
+// Then scan directories that are scanned for the
+// size of all files. Then call scanner's ScanL.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMseng::ScanL(TDriveNumber aDrive)
+ {
+ __ASSERT_ALWAYS( (CMseng::IsInternalDrive(iFsSession, aDrive)
+ || CMseng::IsRemovableDrive(iFsSession, aDrive)), User::Leave(KErrNotSupported) );
+
+ // Scanning started.
+ iUIHandler.StartL();
+
+ // Start scanning memory, check that not already doing it
+ TInt err = iScanner->ScanL(aDrive, iNumberOfDataGroups, iFsSession);
+ if(err != KErrNone) // can be only KErrNone or KErrInUse
+ {
+ iUIHandler.ErrorL(KErrInUse);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMseng::Cancel()
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CMseng::Cancel()
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMseng::Cancel() called. canceling scanning..."));
+#endif // __SHOW_RDEBUG_PRINT_
+
+ iScanner->Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CMseng::IsInternalDrive
+// -----------------------------------------------------------------------------
+//
+TBool CMseng::IsInternalDrive( RFs& aFs, TInt aDrv )
+ {
+ TDriveInfo drvInfo;
+ if ( aFs.Drive( drvInfo, aDrv ) == KErrNone )
+ {
+ if ( !( drvInfo.iDriveAtt & KDriveAttInternal ) &&
+ drvInfo.iDriveAtt & ( KDriveAttRemovable | KDriveAttRemote ) )
+ {
+ return EFalse;
+ }
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+// -----------------------------------------------------------------------------
+// CMseng::IsRemovableDrive
+// -----------------------------------------------------------------------------
+//
+TBool CMseng::IsRemovableDrive( RFs& aFs, TInt aDrv )
+ {
+ TDriveInfo drvInfo;
+ if ( aFs.Drive( drvInfo, aDrv ) == KErrNone )
+ {
+ if ( !( drvInfo.iDriveAtt & KDriveAttRemovable ) )
+ {
+ return EFalse;
+ }
+ }
+ else
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengdirectoryscanner.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2006 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:
+* Scan directories
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <bautils.h>
+
+// USER INCLUDES
+#include "msengdirectoryscanner.h"
+
+
+// CONSTANTS
+_LIT(KMsengPathDelimiter, "\\");
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CMsengDirectoryScanner::CMsengDirectoryScanner()
+//
+// Default C++ constructor
+// ---------------------------------------------------------------------------
+CMsengDirectoryScanner::CMsengDirectoryScanner(
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession )
+: CMsengScannerBase(aObserver, aScanArray, aFsSession)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengDirectoryScanner::~CMsengDirectoryScanner()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengDirectoryScanner::~CMsengDirectoryScanner()
+ {
+ delete iDirectoryList;
+ delete iScanner;
+ }
+
+
+
+
+
+
+
+// ---------------------------------------------------------------------------
+// CMsengDirectoryScanner::ScanL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengDirectoryScanner::ScanL(const CDesCArray& aRootDirs)
+ {
+ if (iDirectoryList)
+ {
+ iDirectoryList->Reset();
+ }
+ else
+ {
+ iDirectoryList = new(ELeave) CDesCArraySeg(KDirectoryListGranularity);
+ }
+ if (!iScanner)
+ {
+ iScanner = CDirScan::NewL(FsSession());
+ }
+ // Copy existing directories over
+ const TInt count = iNumberOfRootDirectories = aRootDirs.Count();
+ for(TInt i=0; i<count; i++)
+ {
+ // Make sure the copied root dirs exist. Otherwise the RunL()
+ // would leave with KErrPathNotFound. After having the list
+ // of root dirs, all scanned dirs are taken from the list obtained
+ // by a CDirScan instance and are thus known to exist because
+ if( InfoArray().FolderExists(FsSession(),aRootDirs[i]) )
+ {
+ iDirectoryList->AppendL(aRootDirs[i]);
+#ifdef __SHOW_RDEBUG_PRINT_
+ TPtrC dir = aRootDirs[i];
+ RDebug::Print(_L("Root directory: %S"), &dir);
+#endif // __SHOW_RDEBUG_PRINT_
+ }
+ else
+ {
+ iNumberOfRootDirectories--;
+ }
+ }
+
+ // Start the scan going
+ CompleteRequest();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengDirectoryScanner::PerformStepL()
+//
+//
+// ---------------------------------------------------------------------------
+CMsengScannerBase::TStepResult CMsengDirectoryScanner::PerformStepL()
+ {
+ TStepResult result = ECompleteRequest;
+ RFs& fsSession = FsSession();
+
+ // Expand the root directories to a full list of
+ // subdirectories
+ if (iState == EExpandingRootDirs)
+ {
+ if (iCurrentIndex >= iNumberOfRootDirectories)
+ {
+ // Finished scanning for the subdirectories.
+ // Reset the current index so that we pass all the directories
+ // (including the root paths) to the subclasses.
+ iCurrentIndex = 0;
+ iState = EScanningSubDirs;
+ }
+ else
+ {
+ const TPtrC pFolder(iDirectoryList->MdcaPoint(iCurrentIndex++));
+
+ // Do the recursive scanning: First set scan data.
+ iScanner->SetScanDataL(
+ pFolder,
+ KEntryAttDir|KEntryAttMatchExclusive,
+ ESortNone,
+ CDirScan::EScanDownTree
+ );
+
+ // Add all the located subdirectories to the array
+ iState = EParsingExpandedList;
+ }
+ }
+ else if (iState == EParsingExpandedList)
+ {
+ CDir* list = NULL;
+ iScanner->NextL(list);
+
+ if (list)
+ {
+ CleanupStack::PushL(list);
+
+ const TPtrC pFullPath(iScanner->FullPath());
+ TFileName file;
+
+ const TInt count = list->Count();
+ for(TInt i=0; i<count; i++)
+ {
+ const TPtrC pEntry((*list)[i].iName);
+ file = pFullPath;
+ file += pEntry;
+ file += KMsengPathDelimiter;
+#ifdef __SHOW_RDEBUG_PRINT_
+ // Don't add text, all print space (256 chars) may be required
+ RDebug::Print(_L("%S"), &file);
+#endif // __SHOW_RDEBUG_PRINT_
+ AppendDirectoryL(file);
+ }
+ //
+ CleanupStack::PopAndDestroy(list);
+ }
+ else
+ {
+ // No more processing to do in this state
+ iState = EExpandingRootDirs;
+ }
+ }
+ else if (iState == EScanningSubDirs)
+ {
+ // Scan this folder
+ if (iCurrentIndex < iDirectoryList->Count())
+ {
+ const TPtrC pFolder(iDirectoryList->MdcaPoint(iCurrentIndex));
+ const TScanDirectoryResult scanDirectoryResult =
+ ScanDirectoryL(pFolder, fsSession);
+
+ // Check whether we continue with this directory next time
+ if (scanDirectoryResult == EContinueToNextDirectory)
+ {
+ iCurrentIndex++;
+ }
+ }
+ else
+ {
+ // All directories scanned now
+ result = EScanComplete;
+ }
+ }
+
+ // Return the response back to the base scanner
+ return result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengDirectoryScanner::AppendDirectoryL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengDirectoryScanner::AppendDirectoryL(const TDesC& aDirectory)
+ {
+ // Append the directory to the directory list,
+ // unless it is listed as excluded directory
+ if( IsSpecialDir(aDirectory) || !IsExcludedDir(aDirectory) )
+ {
+ iDirectoryList->AppendL(aDirectory);
+ }
+ else
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("Dir is excluded! %S"), &aDirectory);
+#endif // __SHOW_RDEBUG_PRINT_
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengfileextscanner.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-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:
+* Scanner class used to scan file system by filename extensions.
+*
+*/
+
+
+// USER INCLUDES
+#include "msengfileextscanner.h"
+#include "msenguihandler.h"
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CMsengFileExtScanner::CMsengFileExtScanner()
+//
+// C++ default constructor. Can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+CMsengFileExtScanner::CMsengFileExtScanner(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+: CMsengFileScanner(aObserver, aScanArray, aFsSession), iMoveToNextDirectory(ETrue)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFileExtScanner::NewL()
+//
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+CMsengFileExtScanner* CMsengFileExtScanner::NewL(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+ {
+ CMsengFileExtScanner* self =
+ new (ELeave) CMsengFileExtScanner(aObserver, aScanArray, aFsSession);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFileExtScanner::~CMsengFileExtScanner()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengFileExtScanner::~CMsengFileExtScanner()
+ {
+ }
+
+
+
+
+// ---------------------------------------------------------------------------
+// CMsengFileExtScanner::FindFilesL()
+//
+// ---------------------------------------------------------------------------
+//
+CDir* CMsengFileExtScanner::FindFilesL(const TDesC& aDirectory, TBool& aMoveToNextDirectory)
+ {
+
+ // iMoveToNextDirectory is true only when starting to handle the
+ // current directory. Reset iCurrentExtensionIndex.
+ if(iMoveToNextDirectory)
+ {
+ iCurrentExtensionIndex = -1;
+ iMoveToNextDirectory = EFalse;
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("Entering directory:"));
+ RDebug::Print(_L("%S"), &aDirectory);
+#endif // __SHOW_RDEBUG_PRINT_
+ }
+
+ // This function performs a search for each file in the directory by extension.
+ iCurrentExtensionIndex++;
+ const TPtrC pCurrentExtension(InfoArray().Exts()[iCurrentExtensionIndex]);
+
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("Searching files with extension %d"), iCurrentExtensionIndex);
+#endif // __SHOW_RDEBUG_PRINT_
+
+ // Get a list of results for this directory
+ CDir* results = NULL;
+ TParse parse;
+ TInt error;
+
+ const TInt pathlength = pCurrentExtension.Length() + aDirectory.Length();
+ if ( pathlength > KMaxFileName )
+ {
+ error = KErrNotFound;
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("Path too long, files with extension %d do not fit to directory"),
+ iCurrentExtensionIndex);
+#endif // __SHOW_RDEBUG_PRINT_
+ }
+
+ else
+ {
+ FsSession().Parse(pCurrentExtension, aDirectory, parse);
+ error = FsSession().GetDir(parse.FullName(), KEntryAttMaskSupported|KEntryAttAllowUid,
+ ESortNone, results);
+ }
+
+ if (error == KErrNotFound)
+ {
+ results = NULL;
+ }
+
+ // Should we move onto searching the next directory
+ // Yes, if this was the last extension.
+ const TInt extensionCount = InfoArray().Exts().Count();
+ iMoveToNextDirectory = (iCurrentExtensionIndex >= extensionCount-1);
+ aMoveToNextDirectory = iMoveToNextDirectory;
+
+ // Return populated (or potentially NULL) list.
+ return results;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFileExtScanner::HandleLocatedEntryL()
+//
+//
+// ---------------------------------------------------------------------------
+//
+CMsengFileScanner::TLocationResponse CMsengFileExtScanner::HandleLocatedEntryL(
+ const TDesC& aFullFileNameAndPath, const TEntry& aEntry)
+ {
+ TLocationResponse response = EEntryWasDiscarded;
+ const TInt KUidLocation = 2;
+ TUid fileUid = aEntry[KUidLocation];
+
+ if ( fileUid == KNullUid )
+ {
+ // Check whether extension found in special data dir
+ TBool addSize( ETrue );
+ TInt dataDirCount = InfoArray().DataDirs().Count();
+ for(TInt i=0; i < dataDirCount; i++)
+ {
+ TPtrC dataDirPath = InfoArray().DataDirs().MdcaPoint(i);
+
+ if(aFullFileNameAndPath.Length() >= dataDirPath.Length())
+ {
+ TFileName currentPath;
+ currentPath.Copy(aFullFileNameAndPath.Left(dataDirPath.Length()));
+
+ // Compare whether folder matches
+ if(!currentPath.CompareF(dataDirPath))
+ {
+ addSize = EFalse;
+ break;
+ }
+ }
+ }
+
+ if( addSize )
+ {
+ // Add size of object
+ InfoArray().AddSizeByExtL(iCurrentExtensionIndex, aEntry.iSize);
+
+#ifdef __SHOW_RDEBUG_PRINT_
+ const TInt pathlength = aFullFileNameAndPath.Length();
+
+ if ( pathlength < KMaxFileName )
+ {
+ RDebug::Print(_L("File: %S, extension number: %d, size: %d"),
+ &aFullFileNameAndPath, iCurrentExtensionIndex, aEntry.iSize);
+ }
+ else
+ {
+ RDebug::Print(_L("File: see next line, extension number: %d, size: %d"),
+ iCurrentExtensionIndex, aEntry.iSize );
+ RDebug::Print(_L("Can not print %d characters long file name"), pathlength );
+ }
+#endif // __SHOW_RDEBUG_PRINT_
+
+ // We processed this one
+ response = EEntryWasProcessed;
+ }
+ }
+ else
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("Handling file: %S, file Uid: 0x%x"),
+ &aFullFileNameAndPath, fileUid.iUid);
+#endif // __SHOW_RDEBUG_PRINT_
+
+ // Make sure other than native applications are not calculated
+ if( iCurrentExtensionIndex == EExtSis || iCurrentExtensionIndex == EExtSisx )
+ {
+ InfoArray().AddSizeByExtL(iCurrentExtensionIndex, aEntry.iSize);
+ }
+ }
+
+ return response;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengfilescanner.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2006 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:
+* Scanner class used to scan file system by file UID.
+*
+*/
+
+
+// USER INCLUDES
+#include "msengfilescanner.h"
+
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CMsengFileScanner::CMsengFileScanner()
+//
+// Constructor
+// ---------------------------------------------------------------------------
+CMsengFileScanner::CMsengFileScanner(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+: CMsengDirectoryScanner(aObserver, aScanArray, aFsSession)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFileScanner::~CMsengFileScanner()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+
+CMsengFileScanner::~CMsengFileScanner()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFileScanner::ScanDirectoryL()
+//
+//
+// ---------------------------------------------------------------------------
+CMsengDirectoryScanner::TScanDirectoryResult CMsengFileScanner::ScanDirectoryL
+ (const TDesC& aDirectory, RFs& /*aFsSession*/)
+ {
+ TBool moveToNextDirectory = ETrue;
+ CDir* results = FindFilesL(aDirectory, moveToNextDirectory);
+ if (results)
+ {
+ CleanupStack::PushL(results);
+
+ // Go through all files in the list and tell subclass
+ TFileName file;
+ const TInt count = results->Count();
+ for(TInt i=0; i<count; i++)
+ {
+ const TEntry& entry = (*results)[i];
+ file = aDirectory;
+ file += entry.iName;
+
+ // Tell subclass about identified file
+ const TLocationResponse response = HandleLocatedEntryL(file, entry);
+ }
+ CleanupStack::PopAndDestroy(results);
+ }
+
+
+ // Should we request that we move onto the next directory in the list
+ TScanDirectoryResult response = EContinueToNextDirectory;
+ if (!moveToNextDirectory)
+ {
+ response = EContinueProcessingCurrentDirectory;
+ }
+ return response;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengfindallscanner.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2006 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:
+* Scanner class used to scan file system by filename extension
+*
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <f32file.h>
+
+// USER INCLUDES
+#include "msengfindallscanner.h"
+#include "msenguihandler.h"
+#include "memscanutils.h"
+
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CMsengFindAllScanner::CMsengFindAllScanner()
+//
+// C++ default constructor. Can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+CMsengFindAllScanner::CMsengFindAllScanner(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+: CMsengFileScanner(aObserver, aScanArray, aFsSession)
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengFindAllScanner::NewL()
+//
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+CMsengFindAllScanner* CMsengFindAllScanner::NewL(
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+ {
+ CMsengFindAllScanner* self = new (ELeave) CMsengFindAllScanner(aObserver,
+ aScanArray, aFsSession);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFindAllScanner::~CMsengFindAllScanner()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengFindAllScanner::~CMsengFindAllScanner()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFindAllScanner::FindFilesL()
+//
+//
+// ---------------------------------------------------------------------------
+CDir* CMsengFindAllScanner::FindFilesL(const TDesC& aDirectory, TBool& aMoveToNextDirectory)
+ {
+ TRACES( RDebug::Print(_L("CMsengFindAllScanner::FindFilesL(%S)"), &aDirectory) );
+
+ // Get a list of results for this directory
+ CDir* results;
+ const TInt error = FsSession().GetDir(aDirectory,
+ KEntryAttMaskSupported|KEntryAttAllowUid, ESortNone, results);
+ if (error == KErrNotFound)
+ {
+ results = NULL;
+ }
+
+ // Always move onto searching the next directory
+ aMoveToNextDirectory = ETrue;
+
+ // Return populated (or potentially NULL) list.
+ return results;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengFindAllScanner::HandleLocatedEntryL()
+//
+//
+// ---------------------------------------------------------------------------
+CMsengFileScanner::TLocationResponse CMsengFindAllScanner::HandleLocatedEntryL(
+ const TDesC& aFullFileNameAndPath, const TEntry& aEntry)
+ {
+ // Figure out the data group by comparing the start of the path
+
+ TInt dataDirCount = InfoArray().DataDirs().Count();
+ for(TInt i=0; i < dataDirCount; i++)
+ {
+ TPtrC dataDirPath = InfoArray().DataDirs().MdcaPoint(i);
+ if(aFullFileNameAndPath.Length() >= dataDirPath.Length())
+ {
+ TFileName currentPath;
+ currentPath.Copy(aFullFileNameAndPath.Left(dataDirPath.Length()));
+
+ // Compare whether folder matches
+ if(!currentPath.Compare(dataDirPath))
+ {
+ TBool isExcluded = EFalse;
+ TInt fileLength = aFullFileNameAndPath.Length() - dataDirPath.Length();
+ TInt excludedFiles = 0;
+ if(InfoArray().DataDirExcludedFiles().Count())
+ {
+ excludedFiles = InfoArray().DataDirExcludedFiles().At(i)->MdcaCount();
+ }
+
+ currentPath.Copy(aFullFileNameAndPath.Right(fileLength));
+
+ TRACES( RDebug::Print(_L("Check file %S"), ¤tPath) );
+
+ for(TInt j=0; j < excludedFiles; j++)
+ {
+ TRACES
+ (
+ TPtrC file = InfoArray().DataDirExcludedFiles().At(i)->MdcaPoint(j);
+ RDebug::Print(_L("Comparing to excluded file %S"), &file);
+ );
+
+ if(!currentPath.Compare(
+ InfoArray().DataDirExcludedFiles().At(i)->MdcaPoint(j)))
+ {
+ isExcluded = ETrue;
+ break;
+ }
+ }
+
+ if(!isExcluded)
+ {
+ // Add size of object when file is not in list of excluded files
+ if(InfoArray().DataDirGroups().Count())
+ {
+ TInt group = InfoArray().DataDirGroups().At(i);
+ InfoArray().AddSizeByGroupL(group, aEntry.iSize);
+
+ TRACES
+ (
+ RDebug::Print(_L("File %S belongs to group: %d"),
+ &aFullFileNameAndPath, group)
+ );
+ }
+ }
+ }
+ }
+ }
+
+ // We processed this one
+ return EEntryWasProcessed;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msenginfoarray.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,389 @@
+/*
+* Copyright (c) 2006-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:
+* An utility class to handle the UIDs and filename extensions used to
+* identify data types. It is also used to store the results per data type.
+*
+*/
+
+
+
+// SYSTEM INCLUDES
+#include <mseng.rsg>
+#include <bautils.h>
+#include <barsc.h> // RResourceFile
+
+// USER INCLUDES
+#include "msenginfoarray.h"
+#include "mseng.h" // KMsengRscFilePath
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::CMsengInfoArray()
+//
+// C++ default constructor is prohibited
+// ---------------------------------------------------------------------------
+CMsengInfoArray::CMsengInfoArray(TDriveNumber aDrive)
+: iCurrentScannedDrive(aDrive)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::NewL()
+//
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+CMsengInfoArray* CMsengInfoArray::NewL(TDriveNumber aDrive,
+ TInt aNumberOfDataGroups,
+ RFs& aFsSession,
+ CResourceFile& aResFile)
+ {
+ CMsengInfoArray* self = new (ELeave) CMsengInfoArray(aDrive);
+
+ CleanupStack::PushL( self );
+ self->ConstructL(aNumberOfDataGroups, aFsSession, aResFile);
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::ConstructL()
+//
+// Symbian OS default constructor can leave.
+// ---------------------------------------------------------------------------
+void CMsengInfoArray::ConstructL(TInt aNumberOfDataGroups,
+ RFs& aFsSession,
+ CResourceFile& aResFile)
+ {
+ // Create data structures and initialize them
+ // using values from enumerations TUidTypes and TExtTypes
+ // and data from the resource file mseng.rss
+
+ TInt index = -1; // index used in for-loops
+ TInt length = -1; // length of resource array being read
+
+ RResourceReader theReader;
+
+ theReader.OpenLC( &aResFile, UIDARRAY );
+
+ //the first WORD contains the number of elements in the resource
+ length = theReader.ReadInt16L();
+
+ // Create the array with appropriate granularity
+ iUidResultArray = new (ELeave) CArrayFixFlat<TInt64>(length);
+
+ // Initialize the array to contain zeros
+ for(index=0; index<length; index++)
+ {
+ iUidResultArray->InsertL(index, 0);
+ }
+
+ // Next, create the array for the actual UIDs
+ // and read them from the resource file
+ iUidArray = new (ELeave) CArrayFixFlat<TUid>(length);
+ for(index=0; index<length; index++)
+ {
+ const TInt typeindex = theReader.ReadInt8L();
+ const TUid uid = TUid::Uid(theReader.ReadInt32L());
+ //
+ iUidArray->InsertL(typeindex, uid);
+ }
+ CleanupStack::PopAndDestroy(&theReader);
+
+ // Read extarray in a similar way
+ theReader.OpenLC( &aResFile, EXTARRAY );
+
+
+ //the first WORD contains the number of elements in the resource
+ length = theReader.ReadInt16L();
+
+ // Create the array with appropriate granularity
+ iExtResultArray = new (ELeave) CArrayFixFlat<TInt64>(length);
+ // Initialize the array to contain zeros
+ for(index=0; index<length; index++)
+ {
+ iExtResultArray->InsertL(index, 0);
+ }
+ // Next, create the array for the actual extensions
+ // and read them from the resource file
+ iExtArray = new (ELeave) CDesCArrayFlat(length);
+ for(index=0; index<length; index++)
+ {
+ TInt typeindex = theReader.ReadInt8L();
+ TPtrC ext = theReader.ReadTPtrCL();
+
+ iExtArray->InsertL(typeindex, ext);
+ }
+ CleanupStack::PopAndDestroy( &theReader );
+
+ // Create the array for results per group
+ iGroupResultArray = new (ELeave) CArrayFixFlat<TInt64>(aNumberOfDataGroups);
+ // Initialize the array to contain zeros
+ for(index=0; index<aNumberOfDataGroups; index++)
+ {
+ iGroupResultArray->InsertL(index, 0);
+ }
+
+ // The directories to be scanned. Depends of which drive is scanned,
+ // and the directories that are scanned as a whole (and excluded in the normal scan)
+ _LIT(KPanic,"MSENG");
+ __ASSERT_ALWAYS((CMseng::IsInternalDrive(aFsSession, iCurrentScannedDrive)
+ || CMseng::IsRemovableDrive(aFsSession, iCurrentScannedDrive)),
+ User::Panic(KPanic, KErrNotSupported));
+
+ if(CMseng::IsInternalDrive(aFsSession, iCurrentScannedDrive))
+ {
+ theReader.OpenLC( &aResFile, C_DIRECTORIES );
+ iDirArray = theReader.ReadDesCArrayL();
+ CleanupStack::PopAndDestroy( &theReader );
+ //
+ theReader.OpenLC( &aResFile, C_EXCLUDED_DIRECTORIES );
+ iExcludedDirArray = theReader.ReadDesCArrayL();
+ CleanupStack::PopAndDestroy( &theReader );
+ //
+ theReader.OpenLC( &aResFile, C_SPECIAL_DATADIRS );
+ // reading later...
+
+ }
+ else if(CMseng::IsRemovableDrive(aFsSession, iCurrentScannedDrive))
+ {
+ theReader.OpenLC( &aResFile, E_DIRECTORIES );
+ iDirArray = theReader.ReadDesCArrayL();
+ CleanupStack::PopAndDestroy( &theReader );
+ //
+ theReader.OpenLC( &aResFile, E_EXCLUDED_DIRECTORIES );
+ iExcludedDirArray = theReader.ReadDesCArrayL();
+ CleanupStack::PopAndDestroy( &theReader );
+ //
+ theReader.OpenLC( &aResFile, E_SPECIAL_DATADIRS );
+ // reading later...
+
+ }
+
+ // Apply correct drive letter in directory array names
+ TInt dirCount = iDirArray->Count();
+ for (TInt i=0; i<dirCount; i++)
+ {
+ HBufC* dirName = iDirArray->MdcaPoint(i).AllocLC();
+ TPtr ptrName = dirName->Des();
+ TBuf<1> drive;
+ TChar ch;
+
+ if ( RFs::DriveToChar( iCurrentScannedDrive, ch ) == KErrNone )
+ {
+ drive.Append(ch);
+ ptrName.Replace(0, drive.Length(), drive);
+ }
+ iDirArray->Delete(i);
+ iDirArray->InsertL(i, ptrName);
+ CleanupStack::PopAndDestroy(dirName);
+ }
+
+ // Apply correct drive letter in excluded directory array names
+ TInt exDirCount = iExcludedDirArray->Count();
+ for (TInt i=0; i<exDirCount; i++)
+ {
+ HBufC* dirName = iExcludedDirArray->MdcaPoint(i).AllocLC();
+ TPtr ptrName = dirName->Des();
+ TBuf<1> drive;
+ TChar ch;
+
+ if ( RFs::DriveToChar( iCurrentScannedDrive, ch ) == KErrNone )
+ {
+ drive.Append(ch);
+ ptrName.Replace(0, drive.Length(), drive);
+ }
+ iExcludedDirArray->Delete(i);
+ iExcludedDirArray->InsertL(i, ptrName);
+ CleanupStack::PopAndDestroy(dirName);
+ }
+
+ //the first WORD contains the number of elements in the resource
+ length = theReader.ReadInt16L();
+
+ // Create the arrays for special data dirs
+ iDataDirArray = new (ELeave) CDesCArrayFlat(length);
+ iDataDirGroupArray = new (ELeave) CArrayFixFlat<TInt>(length);
+ iDataDirExclArray = new (ELeave) CArrayPtrFlat<CDesCArray>(length);
+
+ // Read the array resource
+ for(TInt i=0; i<length; i++)
+ {
+ TInt groupindex = theReader.ReadInt8L();
+ TChar ch;
+ HBufC* name = theReader.ReadHBufCL();
+ CleanupStack::PushL(name);
+ TPtr ptrName = name->Des();
+ TBuf<1> drive;
+ TBool driveValid = EFalse;
+
+ if ( RFs::DriveToChar( iCurrentScannedDrive, ch ) == KErrNone )
+ {
+ driveValid = ETrue;
+ drive.Append(ch);
+ ptrName.Replace(0, drive.Length(), drive);
+ }
+
+ // Next WORD contains the number of excluded files
+ TInt lengthExcl = theReader.ReadInt16L();
+ TBool folderExists = EFalse;
+
+ // Add directory to the list to be scanned
+ if(driveValid && BaflUtils::FolderExists(aFsSession, ptrName))
+ {
+ folderExists = ETrue;
+ iDataDirArray->AppendL(ptrName);
+ iDataDirGroupArray->AppendL(groupindex);
+ iDataDirExclArray->AppendL(NULL);
+
+ CDesCArray* subarray = new (ELeave) CDesCArrayFlat( Max(lengthExcl, 1) );
+ const TInt dirCount = iDataDirExclArray->Count();
+ iDataDirExclArray->At(dirCount-1) = subarray;
+ }
+
+ for(TInt j=0; j<lengthExcl; j++)
+ {
+ TPtrC nameExcl = theReader.ReadTPtrCL();
+
+ // Append special file only if folder exists
+ if(folderExists)
+ {
+ const TInt dirCount = iDataDirExclArray->Count();
+ iDataDirExclArray->At(dirCount-1)->AppendL( nameExcl );
+ }
+ }
+
+ // If there was an error, we can assume it was because
+ // the folder does not exist, and ignore the error.
+ CleanupStack::PopAndDestroy( name );
+ }
+ CleanupStack::PopAndDestroy( &theReader );
+
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMsengInfoArray constructed. Printing current configuration.\n Extensions:"));
+ for(TInt j=0; j < Exts().Count(); j++)
+ {
+ HBufC* ext = Exts().MdcaPoint(j).AllocL();
+ RDebug::Print(_L(" %d: %S"), j, ext);
+ delete ext;
+ }
+ RDebug::Print(_L(" UIDs:"));
+ for(TInt k=0; k < Uids().Count(); k++)
+ {
+ TUidName uid;
+ uid = Uids().At(k).Name();
+ RDebug::Print(_L(" %d: %S"), k, &uid);
+ }
+#endif // __SHOW_RDEBUG_PRINT_
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::~CMsengInfoArray()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengInfoArray::~CMsengInfoArray()
+ {
+ // delete data structures
+ delete iUidResultArray;
+ delete iExtResultArray;
+ delete iGroupResultArray;
+ delete iUidArray;
+ delete iExtArray;
+ delete iDirArray;
+ delete iExcludedDirArray;
+ delete iDataDirArray;
+ delete iDataDirGroupArray;
+ if(iDataDirExclArray)
+ {
+ iDataDirExclArray->ResetAndDestroy();
+ }
+ delete iDataDirExclArray;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::IsExcludedDir()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMsengInfoArray::IsExcludedDir(const TDesC& aDirectory) const
+ {
+ TInt count = iExcludedDirArray->Count();
+ for(TInt i=0; i<count; i++)
+ {
+ if(aDirectory.FindF(iExcludedDirArray->MdcaPoint(i)) == 0)
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::FolderExists()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMsengInfoArray::FolderExists(RFs& aFs, const TDesC& aPath)
+ {
+ TBool result = EFalse;
+
+ if(BaflUtils::FolderExists(aFs, aPath))
+ {
+ result = ETrue;
+ }
+ // BaflUtils::FolderExists return KErrBadName, if called with
+ // only drive letter (like "c:\")
+ else
+ {
+ TChar driveLetter;
+ if( RFs::DriveToChar(CurrentDrive(), driveLetter) == KErrNone)
+ {
+ TBuf<1> driveName;
+ driveName.Append(driveLetter);
+ TInt cmp = aPath.CompareF(BaflUtils::RootFolderPath(driveName));
+ result = (cmp == 0);
+ }
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengInfoArray::IsSpecialDir()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMsengInfoArray::IsSpecialDir(const TDesC& aDirectory) const
+ {
+ TInt count = iDataDirArray->Count();
+ for(TInt i=0; i<count; i++)
+ {
+ if(aDirectory.FindF(iDataDirArray->MdcaPoint(i)) == 0)
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengregistryscanner.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2006 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: Memory scan engine registry scanning
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <swi/sisregistryentry.h>
+#include <swi/sisregistrysession.h>
+#include <AknUtils.h>
+
+#include <SWInstApi.h>
+#include <swi/sisregistrypackage.h>
+#include <CUIDetailsDialog.h>
+#include <SWInstDefs.h>
+#include <StringLoader.h>
+#include <mseng.rsg>
+
+// USER INCLUDES
+#include "msengregistryscanner.h"
+#include "msengsisxinfo.h"
+#include "memscanutils.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// CMsengRegistryScanner::CMsengRegistryScanner()
+//
+// Default C++ constructor
+// ---------------------------------------------------------------------------
+CMsengRegistryScanner::CMsengRegistryScanner(
+ TDriveNumber aDrive,
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+ : CMsengScannerBase(aObserver, aScanArray, aFsSession),
+ iType( ERegistrySisx ),
+ iDrive( aDrive )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengRegistryScanner::NewL()
+//
+// Two-phased constructor
+// ---------------------------------------------------------------------------
+CMsengRegistryScanner* CMsengRegistryScanner::NewL(
+ TDriveNumber aDrive,
+ MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aScanArray,
+ RFs& aFsSession)
+ {
+ CMsengRegistryScanner* self = new (ELeave) CMsengRegistryScanner(aDrive,
+ aObserver, aScanArray, aFsSession);
+
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengRegistryScanner::~CMsengRegistryScanner()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengRegistryScanner::~CMsengRegistryScanner()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengRegistryScanner::Scan()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengRegistryScanner::Scan()
+ {
+ // Start the scan going
+ CompleteRequest();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengRegistryScanner::PerformStepL()
+//
+//
+// ---------------------------------------------------------------------------
+CMsengScannerBase::TStepResult CMsengRegistryScanner::PerformStepL()
+ {
+ TStepResult result = ECompleteRequest;
+
+ // Scan requested registry
+ switch( iType )
+ {
+ case ERegistrySisx:
+ {
+ ScanSisRegistryL( );
+ iType = ERegistryLast;
+ break;
+ }
+ case ERegistryLast:
+ default:
+ {
+ // That's all we had to do
+ result = EScanComplete;
+ break;
+ }
+ }
+
+ // Return the response back to the base scanner
+ return result;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengRegistryScanner::ScanSisRegistryL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengRegistryScanner::ScanSisRegistryL()
+ {
+ Swi::RSisRegistrySession regSession;
+ CleanupClosePushL(regSession);
+ User::LeaveIfError( regSession.Connect() );
+
+ RArray<TUid> uids;
+ CleanupClosePushL(uids);
+ regSession.InstalledUidsL( uids );
+
+ RPointerArray<Swi::CSisRegistryPackage> augmentations;
+
+ TInt totalSize(0);
+
+ for ( TInt index(0); index < uids.Count(); index++ )
+ {
+ Swi::RSisRegistryEntry entry;
+ CleanupClosePushL(entry);
+ User::LeaveIfError( entry.Open( regSession, uids[index] ) );
+
+ //All packages are from installed packages
+ CMsengSisxInfo* appObj = CMsengSisxInfo::NewL( entry, iDrive );
+ CleanupStack::PushL( appObj );
+ TInt baseSize( 0 );
+ baseSize = entry.SizeL();
+
+ TRACES
+ (
+ RDebug::Print(_L("ScanSisRegistryL, IsPresent, %d"), TInt( entry.IsPresentL()));
+ RDebug::Print(_L("ScanSisRegistryL, IsInRom, %d"), TInt( entry.IsInRomL()));
+ );
+
+ // Only show if not in rom
+ if ( !entry.IsInRomL() && entry.IsPresentL() && appObj->RequestedLocation() )
+ {
+ // Get possible augmentations
+ entry.AugmentationsL( augmentations );
+ for ( TInt i( 0 ); i < augmentations.Count(); i++ )
+ {
+ Swi::RSisRegistryEntry augmentation;
+ CleanupClosePushL( augmentation );
+ augmentation.OpenL( regSession, *augmentations[i] );
+ // Only show if not in rom
+ if ( !augmentation.IsInRomL() && augmentation.IsPresentL() )
+ {
+ // Append the size to the total size
+ baseSize += augmentation.SizeL();
+ }
+ CleanupStack::PopAndDestroy( &augmentation );
+ }
+ totalSize += baseSize;
+ }
+
+ augmentations.ResetAndDestroy();
+
+ CleanupStack::PopAndDestroy( appObj );
+ CleanupStack::PopAndDestroy( &entry );
+ }
+
+ InfoArray().AddSizeByGroupL(EGroupNativeApps, totalSize);
+
+ CleanupStack::PopAndDestroy(&uids);
+ CleanupStack::PopAndDestroy(®Session);
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengscanner.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2006 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 is the class that is in control most of the time.
+* It instantiates CMsengScannerBase derived scanner classes
+* to do the job.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <bautils.h>
+#include <mseng.rsg>
+
+// USER INCLUDES
+#include "msengscanner.h"
+#include "msengfileextscanner.h"
+#include "msengfindallscanner.h"
+#include "msengregistryscanner.h"
+#include "msenguihandler.h"
+#include "mseng.h"
+
+
+// LOCAL CONSTANTS AND MACROS
+#ifdef _DEBUG
+_LIT(KClassName, "CMsengScanner");
+#endif
+
+// ================= MEMBER FUNCTIONS ========================================
+
+// ---------------------------------------------------------------------------
+// CMsengScanner::CMsengScanner()
+//
+// C++ default constructor. Can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+CMsengScanner::CMsengScanner(MMsengUIHandler& aUIHandler, CResourceFile& aResFile) :
+iUIHandler(aUIHandler), iResFile(aResFile)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScanner::~CMsengScanner()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengScanner::~CMsengScanner()
+ {
+ delete iScanArray;
+ delete iFileExtScanner;
+ delete iFindAllScanner;
+ delete iRegistryScanner;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CMsengScanner::Cancel()
+//
+// ---------------------------------------------------------------------------
+//
+void CMsengScanner::Cancel()
+ {
+ iFileExtScanner->Cancel();
+ iFindAllScanner->Cancel();
+ iRegistryScanner->Cancel();
+ TRAP_IGNORE( iUIHandler.QuitL(KErrCancel) );
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScanner::HaveActiveScanners()
+//
+// ---------------------------------------------------------------------------
+//
+TBool CMsengScanner::HaveActiveScanners() const
+ {
+ const TBool isActive =
+ (iFileExtScanner && iFileExtScanner->IsActive())
+ || (iFindAllScanner && iFindAllScanner->IsActive())
+ || (iRegistryScanner && iRegistryScanner->IsActive())
+ ;
+ return isActive;
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScanner::ScanL()
+//
+// ---------------------------------------------------------------------------
+//
+TInt CMsengScanner::ScanL(TDriveNumber aDrive, TInt aNumberOfDataGroups, RFs& aFsSession)
+ {
+ if(HaveActiveScanners())
+ {
+ return KErrInUse;
+ }
+
+ // Create data structures; delete the old ones
+ CMsengInfoArray* infoArray = CMsengInfoArray::NewL( aDrive,
+ aNumberOfDataGroups,
+ aFsSession, iResFile );
+
+ delete iScanArray;
+ iScanArray = infoArray;
+
+ // Do some scanning tasks not include in ScanL
+ PreScanL(aDrive, aFsSession);
+
+ // Start the scan by filename extension
+ iFileExtScanner = CMsengFileExtScanner::NewL(*this, *iScanArray, aFsSession);
+ iFileExtScanner->ScanL(iScanArray->Dirs());
+
+ // Start scanning data dirs (including messages)
+ iFindAllScanner = CMsengFindAllScanner::NewL(*this, *iScanArray, aFsSession);
+ iFindAllScanner->ScanL(iScanArray->DataDirs());
+
+ // Start the scan from registries
+ iRegistryScanner = CMsengRegistryScanner::NewL( aDrive, *this, *iScanArray, aFsSession );
+ iRegistryScanner->Scan();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// MsengScanner::HandleScannerEventL()
+//
+// Handle the events from scanning
+// ---------------------------------------------------------------------------
+//
+void CMsengScanner::HandleScannerEventL(TScannerEvent aEvent,
+ const CMsengScannerBase& /*aScanner*/,
+ TInt aError)
+ {
+#ifdef __SHOW_RDEBUG_PRINT_
+ RDebug::Print(_L("CMsengScanner::HandleScannerEventL() called with event: %d"), aEvent);
+#endif // __SHOW_RDEBUG_PRINT_
+
+ switch(aEvent)
+ {
+ case MMsengScannerObserver::EScannerEventScanComplete:
+ // This scanner object has finished all of its scanning.
+ // If all the others are finished too,
+ // then we tell the UI that scanning is complete.
+ if (!HaveActiveScanners())
+ {
+ iUIHandler.QuitL(KErrNone);
+ }
+ break;
+
+ case MMsengScannerObserver::EScannerEventScanError:
+ // An error has happened
+ iUIHandler.ErrorL(aError);
+ break;
+
+ default:
+ // should never happen
+ __ASSERT_DEBUG(EFalse,User::Panic(KClassName, KErrGeneral));
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScanner::PreScanL()
+//
+// ---------------------------------------------------------------------------
+//
+void CMsengScanner::PreScanL(TDriveNumber aDrive, RFs& aFsSession)
+ {
+ // Before actual scanning, check the sizes of the few extra
+ // data files that are not scanned in normal way.
+
+ RResourceReader theReader;
+
+ TBool somethingToDo = EFalse;
+ if(CMseng::IsInternalDrive(aFsSession, aDrive))
+ {
+ theReader.OpenLC( &iResFile, C_EXTRADATAFILES );
+ somethingToDo = ETrue;
+ }
+ else if(CMseng::IsRemovableDrive(aFsSession, aDrive))
+ {
+ theReader.OpenLC( &iResFile, E_EXTRADATAFILES );
+ somethingToDo = ETrue;
+ }
+ if(somethingToDo)
+ {
+ //the first WORD contains the number of elements in the resource
+ const TInt length = theReader.ReadInt16L();
+
+ // Read the array resource,
+ TInt groupindex; // value from enum TDataGroups
+ for(TInt i=0; i<length; i++)
+ {
+ groupindex = theReader.ReadInt8L();
+ HBufC* name = theReader.ReadHBufCL();
+ TChar ch;
+ if ( RFs::DriveToChar( aDrive, ch ) == KErrNone )
+ {
+ CleanupStack::PushL(name);
+ TPtr ptrName = name->Des();
+ TBuf<1> drive;
+ drive.Append(ch);
+ ptrName.Replace(0, drive.Length(), drive);
+
+ // check the size of the file whose path was in the resource.
+ TEntry file;
+ TInt err = aFsSession.Entry(ptrName, file);
+ if (err == KErrNone)
+ {
+ TInt size = file.iSize;
+ iScanArray->AddSizeByGroupL(groupindex, size);
+ }
+
+ CleanupStack::PopAndDestroy(name);
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&theReader);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengscannerbase.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2006 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:
+* Virtual base class for the scanner classes.
+*
+*/
+
+
+
+// USER INCLUDES
+#include "msengscannerbase.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMsengScannerBase::CMsengScannerBase()
+//
+// C++ default constructor. Can NOT contain any code, that might leave.
+// ---------------------------------------------------------------------------
+CMsengScannerBase::CMsengScannerBase(MMsengScannerObserver& aObserver,
+ CMsengInfoArray& aInfoArray,
+ RFs& aFsSession
+ )
+: CActive(CActive::EPriorityStandard), iObserver(aObserver),
+ iInfoArray(aInfoArray), iFsSession(aFsSession)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScannerBase::~CMsengScannerBase()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+CMsengScannerBase::~CMsengScannerBase()
+ {
+ Cancel();
+ }
+
+
+
+
+// ---------------------------------------------------------------------------
+// CMsengScannerBase::CompleteRequest()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengScannerBase::CompleteRequest(TInt aCode)
+ {
+ if (!IsActive())
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, aCode);
+ SetActive();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScannerBase::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengScannerBase::RunL()
+ {
+ // Do one scanning step
+ const TStepResult result = PerformStepL();
+
+ switch(result)
+ {
+ case ECompleteRequest:
+ {
+ CompleteRequest();
+ break;
+ }
+
+ case EScanComplete:
+ {
+ iObserver.HandleScannerEventL(
+ MMsengScannerObserver::EScannerEventScanComplete, *this);
+ break;
+ }
+
+ case ERequestIssuedInternally:
+ default:
+ {
+ // Not used, but maybe needed for messaging if some asynchronous
+ // service is used which completes iStatus by itself.
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMsengScannerBase::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMsengScannerBase::DoCancel()
+ {
+ // Nothing to do here
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMsengScannerBase::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMsengScannerBase::RunError(TInt aError)
+ {
+ // Implementation for EScannerEventScanError cannot leave at the moment,
+ // but lets trap if implementation changes
+ TRAP_IGNORE(iObserver.HandleScannerEventL(
+ MMsengScannerObserver::EScannerEventScanError, *this, aError));
+ return KErrNone;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memscaneng/serversrc/msengsisxinfo.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2006 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: Utility class for accessing sis-registry
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <swi/sisregistryentry.h>
+#include <swi/sisregistrysession.h>
+#include <AknUtils.h>
+#include <SWInstApi.h>
+#include <swi/sisregistrypackage.h>
+#include <CUIDetailsDialog.h>
+#include <SWInstDefs.h>
+#include <StringLoader.h>
+#include <mseng.rsg>
+
+// USER INCLUDES
+#include "msengsisxinfo.h"
+#include "memscanutils.h"
+
+// constants
+_LIT( KDriveC, "C");
+_LIT( KDriveZ, "Z");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMsengSisxInfo::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CMsengSisxInfo::ConstructL( Swi::RSisRegistryEntry& aEntry, TDriveNumber aDrive )
+ {
+ TInt err;
+ TChar driveLetter;
+ RFs::DriveToChar(aDrive, driveLetter);
+ driveLetter.UpperCase();
+ const TInt KDriveLength = 1;
+ TBuf<KDriveLength> driveName;
+ driveName.Append(driveLetter);
+
+ TRAP(err, aEntry.FilesL(iFiles));
+
+ // Get the name of the app
+ HBufC* packageName = aEntry.PackageNameL();
+ CleanupStack::PushL( packageName );
+ TParse parse;
+
+ parse.SetNoWild( *packageName, NULL, NULL );
+ iFileName = parse.Name().AllocL();
+ CleanupStack::PopAndDestroy(packageName);
+ TPtr tmpPtr2 = iFileName->Des();
+ TRACES( RDebug::Print( _L("CMsengSisxInfo::ConstructL - %S"), &tmpPtr2 ); );
+
+ // Get Location
+ TChar selectedDrive( aEntry.SelectedDriveL() );
+ selectedDrive.UpperCase();
+ iRequestedLocation = EFalse;
+
+ if( selectedDrive == driveLetter )
+ {
+ // Phone memory
+ iRequestedLocation = ETrue;
+ }
+ else
+ {
+ // Check the disk from files
+ // if all have C, the software is installed to phone
+ // else it is installed to memory card
+ TInt count = iFiles.Count();
+
+ TInt allFilesInCZ = 0;
+ for ( TInt index = 0; index < count; index++ )
+ {
+ TPtrC firstChar = iFiles[index]->Des().Left(1);
+ TRACES( RDebug::Print( _L("Checking location of %S"), iFiles[index]); );
+
+ if ( ( firstChar.CompareF( KDriveC ) == KErrNone ) ||
+ ( firstChar.CompareF( KDriveZ ) == KErrNone ) )
+ {
+ allFilesInCZ++;
+ }
+ }
+
+ if ( allFilesInCZ == count && (driveName.CompareF( KDriveC ) == KErrNone ) )
+ {
+ // Phone memory
+ iRequestedLocation = ETrue;
+ }
+ }
+
+ TRACES( RDebug::Print( _L("Requested location %d"), iRequestedLocation); );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMsengSisxInfo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMsengSisxInfo* CMsengSisxInfo::NewL( Swi::RSisRegistryEntry& aEntry,
+ TDriveNumber aDrive )
+ {
+ CMsengSisxInfo* self = new ( ELeave ) CMsengSisxInfo( );
+ CleanupStack::PushL( self );
+ self->ConstructL( aEntry, aDrive );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMsengSisxInfo::~CMsengSisxInfo
+// Destructor.
+// -----------------------------------------------------------------------------
+CMsengSisxInfo::~CMsengSisxInfo()
+ {
+ delete iFileName;
+ iFiles.ResetAndDestroy();
+ iFiles.Close();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CAppMngrSisxInfo::RequestedLocation
+// Get location of the application.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CMsengSisxInfo::RequestedLocation() const
+ {
+ return iRequestedLocation;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/BWINS/MEMSTATEPOPUPU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,5 @@
+EXPORTS
+ ?GetUtilL@CMemStatePopup@@SAXAAPAVCMSPUtil@@@Z @ 1 NONAME ; void CMemStatePopup::GetUtilL(class CMSPUtil * &)
+ ?RunLD@CMemStatePopup@@SAXW4TDriveNumber@@AAVTDesC16@@@Z @ 2 NONAME ; void CMemStatePopup::RunLD(enum TDriveNumber, class TDesC16 &)
+ ?SolveUnitAndSize@CMSPUtil@@QAE?AVTPtrC16@@AA_J@Z @ 3 NONAME ; class TPtrC16 CMSPUtil::SolveUnitAndSize(long long &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/EABI/MemStatePopupU.DEF Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,9 @@
+EXPORTS
+ _ZN14CMemStatePopup5RunLDE12TDriveNumberR7TDesC16 @ 1 NONAME
+ _ZN14CMemStatePopup8GetUtilLERP8CMSPUtil @ 2 NONAME
+ _ZN8CMSPUtil16SolveUnitAndSizeERx @ 3 NONAME
+ _ZTI14CMemStatePopup @ 4 NONAME ; #<TI>#
+ _ZTI8CMSPUtil @ 5 NONAME ; #<TI>#
+ _ZTV14CMemStatePopup @ 6 NONAME ; #<VT>#
+ _ZTV8CMSPUtil @ 7 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/group/MemStatePopup.mmp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2006 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 is project specification file for the Memory State Popup.
+*
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET memstatepopup.dll
+TARGETTYPE dll
+UID 0x1000008d 0x101F4672
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL
+
+START RESOURCE ../group/MemStatePopup.rss
+TARGETPATH RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END
+
+SOURCEPATH ../src
+
+SOURCE CMemStatePopup.cpp
+SOURCE cmemstatepopupimpl.cpp
+SOURCE MSPUtil.cpp
+SOURCE cmemscaneventreceiver.cpp
+
+
+USERINCLUDE ../group ../inc
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE ../../inc
+
+LIBRARY euser.lib
+LIBRARY bafl.lib
+LIBRARY cone.lib
+LIBRARY avkon.lib
+LIBRARY eikcoctl.lib
+LIBRARY commonengine.lib
+LIBRARY efsrv.lib
+LIBRARY memscanclient.lib
+
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/group/MemStatePopup.rss Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2005 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:
+* Resources for memory state popup
+*
+*/
+
+
+#include <eikon.rh>
+#include <avkon.rh>
+
+#include <eikon.rsg>
+#include <avkon.rsg>
+#include <avkon.mbg>
+#include <AvkonIcons.hrh>
+
+#include <memstatepopup.loc>
+
+
+// RESOURCE IDENTIFIER
+NAME MSTP // 4 letter ID
+
+// COMPULSORY SIGNATURE
+RESOURCE RSS_SIGNATURE { }
+
+// MEMORY SCAN WAIT NOTE
+RESOURCE DIALOG r_memstate_wait_note
+ {
+ flags = EAknWaitNoteFlags;
+ buttons = R_AVKON_SOFTKEYS_CANCEL;
+ items =
+ {
+ DLG_LINE
+ {
+ type = EAknCtNote;
+ id = EGeneralNote;
+ control= AVKON_NOTE
+ {
+ layout = EWaitLayout;
+ singular_label = qtn_swins_note_mem_wait;
+ imagefile = AVKON_ICON_FILE;
+ imageid = EMbmAvkonQgn_note_progress;
+ imagemask = EMbmAvkonQgn_note_progress_mask;
+ animation =R_QGN_GRAF_WAIT_BAR_ANIM;
+ };
+ }
+ };
+ }
+
+
+RESOURCE TBUF r_unit_formatter
+ {
+ buf = qtn_swins_lsh2_format;
+ }
+
+RESOURCE ARRAY r_array_units
+ {
+ items =
+ {
+ LBUF { txt = qtn_swins_lsh2_plain_byte; },
+ LBUF { txt = qtn_swins_lsh2_plain_kilobyte; },
+ LBUF { txt = qtn_swins_lsh2_plain_megabyte; },
+ LBUF { txt = qtn_swins_lsh2_plain_gigabyte; }
+ };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006-2006 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: Build information file for project memscaneng
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+ ../rom/MemStatePopup.iby CORE_APP_LAYER_IBY_EXPORT_PATH(MemStatePopup.iby )
+ ../rom/MemStatePopupResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(MemStatePopupResources.iby)
+ ../loc/MemStatePopup.loc APP_LAYER_LOC_EXPORT_PATH(MemStatePopup.loc)
+
+PRJ_PLATFORMS
+ DEFAULT
+
+PRJ_MMPFILES
+ MemStatePopup.mmp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/inc/MSPPanic.hrh Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,35 @@
+/*
+* 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:
+* MemStatePopup Panics.
+*
+*/
+
+
+
+#ifndef __MSPPANIC_HRH__
+#define __MSPPANIC_HRH__
+
+_LIT( KPanicMSP, "MemoryStatePopup" );
+
+// UI panics
+enum MSPPanic
+ {
+ EInvalidParameter
+ };
+
+#endif // __MAUIPANIC_HRH__
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/inc/cmemscaneventreceiver.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2006 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:
+* Memory Scan Event Receiver
+*
+*
+*/
+
+#ifndef CMEMSCANEVENTRECEIVER_H
+#define CMEMSCANEVENTRECEIVER_H
+
+// SYSTEM INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <memscanclient.h>
+
+
+class MMsengUIHandler;
+
+
+NONSHARABLE_CLASS(CMemScanEventReceiver) : public CActive
+ {
+ public:
+ static CMemScanEventReceiver* NewL( MMsengUIHandler& aUIHandler );
+ ~CMemScanEventReceiver();
+
+ private:
+ CMemScanEventReceiver( MMsengUIHandler& aUIHandler );
+ void ConstructL();
+
+ public: // API
+ CDesCArray* DataGroupsL() const;
+ CArrayFix<TInt64>* ScanResultL() const;
+ TBool ScanInProgress() const;
+ TInt ScanL(TDriveNumber aDrive);
+
+ private: // From CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError );
+
+ private: // Internal functions
+ void RegisterForScanEvents();
+
+ private: // Data members
+ MMsengUIHandler& iUIHandler;
+ RMemScanClient iScanClient;
+ TInt iEventError;
+ };
+
+
+#endif // CMEMSCANEVENTRECEIVER_H
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/inc/cmemstatepopupimpl.h Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2006 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: Memory state popup implementation
+*
+*/
+
+
+#ifndef __CMEMORYSTATEPOPUPIMPL_H__
+#define __CMEMORYSTATEPOPUPIMPL_H__
+
+// SYSTEM INCLUDES
+#include <e32base.h>
+#include <AknWaitDialog.h>
+#include <ConeResLoader.h>
+#include <msenguihandler.h>
+
+// FORWARD DECLARATIONS
+class CAknPopupList;
+class CAknSingleHeadingPopupMenuStyleListBox;
+class CMemScanEventReceiver;
+class CMSPUtil;
+
+// CLASS DEFINITION
+NONSHARABLE_CLASS(CMemStatePopupImpl) :
+ public CActive,
+ public MMsengUIHandler,
+ public MProgressDialogCallback
+ {
+ public:
+ // Destructor
+ virtual ~CMemStatePopupImpl( );
+
+ private:
+ // Second phase
+ void ConstructL( );
+
+ // C++ constructors
+ CMemStatePopupImpl( TDriveNumber aDrive, const TDesC& aTitle );
+ CMemStatePopupImpl( );
+
+ public:
+ /**
+ * Launches the memory scan popup
+ * @param aDrive The drive to be scanned
+ * @param aTitle Title of the popup
+ */
+ static void RunLD( TDriveNumber aDrive, const TDesC& aTitle );
+
+ /**
+ * Get an instance of CMSPUtil class, containing the unit text array
+ * @param aUtil Reference to a CMSPUtil pointer,
+ * updated to point to the instance created
+ */
+ static void GetUtilL( CMSPUtil*& aUtil );
+
+ public:
+ // From MMsengUIHandler
+ void StartL( );
+ void QuitL( TInt /*aReason*/ );
+ void ErrorL( TInt aError );
+
+ // From MProgressDialogCallback
+ virtual void DialogDismissedL( TInt /*aButtonId*/ );
+
+ private:
+
+ // From CActive
+ void RunL();
+ void DoCancel();
+
+ /**
+ * Starts observing drive dismounts.
+ */
+ void StartObserver( );
+
+ /**
+ * Construct popup and ready it for use.
+ */
+ void ConstructPopupL( );
+
+ /**
+ * Shows wait dialog and start scanning.
+ */
+ void ExecuteL( );
+
+ /**
+ * Refresh the data shown in listbox.
+ */
+ void RefreshL( );
+
+ /**
+ * Set the results to zero.
+ */
+ void NullifyResults( );
+
+ /**
+ * Opens the resource and reads unit array from it.
+ */
+ void OpenResourceAndReadArrayL( );
+
+ private:
+ // Not implemented
+ CMemStatePopupImpl( const CMemStatePopupImpl& );
+ CMemStatePopupImpl& operator=( CMemStatePopupImpl& );
+
+ private:
+ /**
+ * Container class used to prevent all pointer events
+ * passing from listbox to popup-list.
+ */
+ NONSHARABLE_CLASS(CMemStateListBox) : public CAknSingleHeadingPopupMenuStyleListBox
+ {
+ public:
+ // Destructor
+ virtual ~CMemStateListBox( ) {};
+ };
+
+ private:
+ CDesCArray* iGroupNames;
+ CArrayFix< TInt64 >* iScanResults;
+ CDesCArray* iListModel;
+ CMemStateListBox* iListBox;
+ CAknWaitDialog* iWaitDialog;
+ TBool iFinished;
+ TDriveNumber iDrive;
+ CAknPopupList* iPopup;
+ TDesC* iTitle;
+ CCoeEnv& iCoeEnv;
+ RConeResourceLoader iResLoader;
+ CMSPUtil* iUtil;
+ TBool iOwnsUtil;
+ CMemScanEventReceiver* iEventReceiver;
+ };
+
+#endif // __CMEMORYSTATEPOPUPIMPL_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/loc/MemStatePopup.loc Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2005 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 is a localisation file for Memory State Popup
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+//d:Memory state dialog wait note.
+//l:popup_note_wait_window
+//
+#define qtn_swins_note_mem_wait "Scanning memory. Please wait."
+
+//d:Unit formatter, %N is the amount of data and %U is one of the units below.
+//l:list_single_heading_pane_t2
+//
+#define qtn_swins_lsh2_format "%0N %1U"
+
+//d:Unit name for byte.
+//l:list_single_heading_pane_t2
+//
+#define qtn_swins_lsh2_plain_byte "B"
+
+//d:Unit name for kilobyte.
+//l:list_single_heading_pane_t2
+//
+#define qtn_swins_lsh2_plain_kilobyte "kB"
+
+//d:Unit name for megabyte.
+//l:list_single_heading_pane_t2
+//
+#define qtn_swins_lsh2_plain_megabyte "MB"
+
+//d:Unit name for gigabyte.
+//l:list_single_heading_pane_t2
+//
+#define qtn_swins_lsh2_plain_gigabyte "GB"
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/rom/MemStatePopup.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2006-2006 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: Image description file for project memstatepopup
+*
+*/
+
+
+#ifndef __MEMSTATEPOPUP_IBY__
+#define __MEMSTATEPOPUP_IBY__
+
+// Memory State Popup
+file=ABI_DIR\BUILD_DIR\MemStatePopup.dll SHARED_LIB_DIR\MemStatePopup.dll
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/rom/MemStatePopupResources.iby Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006-2006 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: Image description file for project memstatepopup
+*
+*/
+
+
+#ifndef __MEMSTATEPOPUP_RESOURCES_IBY__
+#define __MEMSTATEPOPUP_RESOURCES_IBY__
+
+//Resource file(s) for Memory State Popup
+
+data=DATAZ_\RESOURCE_FILES_DIR\MemStatePopup.rsc RESOURCE_FILES_DIR\MemStatePopup.rsc
+
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/src/CMemStatePopup.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2006 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: Definition for CMemStatePopup
+*
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <e32std.h>
+#include <AknProgressDialog.h>
+#include <aknlists.h>
+#include <ConeResLoader.h>
+#include <bautils.h>
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <MemStatePopup.rsg>
+#include <f32file.h>
+
+// USER INCLUDES
+#include "cmemstatepopup.h"
+#include "cmemstatepopupimpl.h"
+#include "cmemscaneventreceiver.h"
+
+// ---------------------------------------------------------------------------
+
+CMemStatePopup::CMemStatePopup( )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+
+CMemStatePopup::~CMemStatePopup( )
+ {
+ }
+
+
+
+// ---------------------------------------------------------------------------
+
+EXPORT_C void CMemStatePopup::RunLD( TDriveNumber aDrive, TDesC& aTitle )
+ {
+ CMemStatePopupImpl::RunLD( aDrive, aTitle );
+ }
+
+// ---------------------------------------------------------------------------
+
+EXPORT_C void CMemStatePopup::GetUtilL( CMSPUtil*& aUtil )
+ {
+ CMemStatePopupImpl::GetUtilL( aUtil );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/src/MSPUtil.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,109 @@
+/*
+* 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: CMSPUtil Implementation
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include "MSPPanic.hrh"
+#include "msputil.h"
+
+// ---------------------------------------------------------------------------
+
+CMSPUtil* CMSPUtil::NewL( CDesCArrayFlat* aArray )
+ {
+ __ASSERT_DEBUG( aArray,
+ User::Panic( KPanicMSP, EInvalidParameter ) );
+ CMSPUtil* self = new( ELeave ) CMSPUtil;
+ self->iUnitArray = aArray;
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+
+CMSPUtil::~CMSPUtil( )
+ {
+ if(!iUnitArray)
+ {
+ iUnitArray->Delete( 0, iUnitArray->Count( ) );
+ }
+ delete iUnitArray;
+ }
+
+// ---------------------------------------------------------------------------
+
+CMSPUtil::CMSPUtil( ): iUnitArray( NULL )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMSPUtil::SolveUnitAndSize( TInt64& aNumber, TInt& aUnit )
+ {
+ TInt count( iUnitArray->Count( ) );
+ const TInt KMaxDigits = 10000;
+ const TInt KKiloByte = 1024;
+ const TInt KRoundLimit = 512;
+ const TInt KShiftValue = 10;
+ aUnit = EByte;
+
+ // If number is 1024 or more, it can be divided and unit changed
+ while( aNumber >= 1024 && (aUnit + 1) < count )
+ {
+ // Show kilobytes and megabytes with 4 digits
+ if( ( aUnit == EKiloByte || aUnit == EMegaByte ) && aNumber < KMaxDigits )
+ {
+ break;
+ }
+ // Check how the rounding should be done
+ if( aNumber % KKiloByte < KRoundLimit )
+ {
+ // Round downwards
+ aNumber >>= KShiftValue; // 2^10 = 1024
+ }
+ else
+ {
+ aNumber = ( aNumber >> KShiftValue ) + 1;
+ }
+ aUnit++; // Next enum
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+
+EXPORT_C TPtrC CMSPUtil::SolveUnitAndSize( TInt64& aNumber )
+ {
+ TInt unitType( EByte );
+ SolveUnitAndSize( aNumber, unitType );
+ if( unitType >= iUnitArray->Count() )
+ {
+ if( iUnitArray->Count() )
+ {
+ unitType = iUnitArray->Count() - 1;
+ }
+ else
+ {
+ unitType = 0;
+ }
+ }
+
+ return ( *iUnitArray )[ unitType ];
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/src/cmemscaneventreceiver.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2006 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:
+* Memory Scan Event Receiver
+*
+*
+*/
+
+
+
+// SYSTEM INCLUDES
+#include <msenguihandler.h>
+
+
+// USER INCLUDES
+#include "cmemscaneventreceiver.h"
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::CMemScanEventReceiver()
+//
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+CMemScanEventReceiver::CMemScanEventReceiver( MMsengUIHandler& aUIHandler )
+: CActive(EPriorityStandard), iUIHandler(aUIHandler)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+CMemScanEventReceiver* CMemScanEventReceiver::NewL( MMsengUIHandler& aUIHandler )
+ {
+ CMemScanEventReceiver* self = new( ELeave ) CMemScanEventReceiver( aUIHandler );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::ConstructL()
+//
+// Destructor
+// ---------------------------------------------------------------------------
+void CMemScanEventReceiver::ConstructL()
+ {
+ User::LeaveIfError( iScanClient.Connect() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::~CMemScanEventReceiver()
+//
+//
+// ---------------------------------------------------------------------------
+CMemScanEventReceiver::~CMemScanEventReceiver()
+ {
+ Cancel();
+ iScanClient.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::RunL()
+//
+//
+// ---------------------------------------------------------------------------
+void CMemScanEventReceiver::RunL()
+ {
+ User::LeaveIfError( iStatus.Int() );
+
+ switch( iStatus.Int() )
+ {
+ case EMemScanEventScanningStarted:
+ {
+ iUIHandler.StartL();
+ break;
+ }
+
+ case EMemScanEventScanningFinished:
+ {
+ iUIHandler.QuitL(iEventError);
+ break;
+ }
+
+ case EMemScanEventScanningError:
+ {
+ iUIHandler.ErrorL(iEventError);
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+
+ RegisterForScanEvents();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::DoCancel()
+//
+//
+// ---------------------------------------------------------------------------
+void CMemScanEventReceiver::DoCancel()
+ {
+ iScanClient.RequestScanEventsCancel();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::RunError()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMemScanEventReceiver::RunError( TInt /*aError*/ )
+ {
+ RegisterForScanEvents();
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::DataGroupsL()
+//
+//
+// ---------------------------------------------------------------------------
+CDesCArray* CMemScanEventReceiver::DataGroupsL() const
+ {
+ CDesCArray* dataGroupArray = iScanClient.DataGroupsL();
+ return dataGroupArray;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::ScanResultL()
+//
+//
+// ---------------------------------------------------------------------------
+CArrayFix<TInt64>* CMemScanEventReceiver::ScanResultL() const
+ {
+ CArrayFix<TInt64>* scanResultArray = iScanClient.ScanResultL();
+ return scanResultArray;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::ScanInProgress()
+//
+//
+// ---------------------------------------------------------------------------
+TBool CMemScanEventReceiver::ScanInProgress() const
+ {
+ return iScanClient.ScanInProgress();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::ScanL()
+//
+//
+// ---------------------------------------------------------------------------
+TInt CMemScanEventReceiver::ScanL(TDriveNumber aDrive)
+ {
+ RegisterForScanEvents();
+
+ return iScanClient.Scan(aDrive);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMemScanEventReceiver::RegisterForScanEvents()
+//
+//
+// ---------------------------------------------------------------------------
+void CMemScanEventReceiver::RegisterForScanEvents()
+ {
+ Cancel();
+
+ // We request events from the server. When the server has an event
+ // for us, it will complete our request status (iStatus) with an
+ // event type (i.e. one of the TMemScanEvent enumerations) and
+ // also ensures that iEventError is updated with any associated error
+ // value. This will then cause the RunL method to be called.
+ iScanClient.RequestScanEvents( iEventError, iStatus );
+ SetActive();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filesystemuis/memstatepopup/src/cmemstatepopupimpl.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,415 @@
+/*
+* Copyright (c) 2006 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: Memory state popup implementation
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <e32std.h>
+#include <AknProgressDialog.h>
+#include <aknlists.h>
+#include <ConeResLoader.h>
+#include <bautils.h>
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <MemStatePopup.rsg>
+#include <f32file.h>
+#include <data_caging_path_literals.hrh>
+
+// USER INCLUDES
+#include "msputil.h"
+#include "cmemstatepopup.h"
+#include "cmemstatepopupimpl.h"
+#include "cmemscaneventreceiver.h"
+
+// CONSTANTS
+_LIT( KDirAndFile,"Z:MemStatePopup.RSC" );
+_LIT( KMemListSeparator, "\t" );
+
+// Max length of a list row
+// Has to be big enough to hold "%N %U"
+const TInt KListItemMaxLength = 32;
+
+// ---------------------------------------------------------------------------
+
+CMemStatePopupImpl::~CMemStatePopupImpl( )
+ {
+ Cancel();
+ // Close the resource
+ iResLoader.Close( );
+
+ if( iWaitDialog )
+ {
+ iWaitDialog->SetObserver( NULL );
+ delete iWaitDialog;
+ }
+
+ delete iEventReceiver; // deletes also scan engine and server
+
+ delete iGroupNames;
+ delete iListModel;
+ delete iListBox;
+ delete iScanResults;
+
+
+ if( iOwnsUtil )
+ {
+ // Delete only if the actual dialog was launched
+ delete iUtil;
+ }
+
+ // Try to delete also iPopup in case of leave
+ // Must call CBase's destructor
+ // because CAknPopupList destructor is protected
+ delete ( CBase* ) iPopup;
+ }
+
+// ---------------------------------------------------------------------------
+
+CMemStatePopupImpl::CMemStatePopupImpl( TDriveNumber aDrive, const TDesC& aTitle ) :
+ CActive(EPriorityStandard),
+ iFinished( EFalse ),
+ iDrive( aDrive ),
+ iTitle( const_cast<TDesC*> (&aTitle) ),
+ iCoeEnv( *CCoeEnv::Static( ) ),
+ iResLoader( iCoeEnv ),
+ iOwnsUtil( ETrue )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// ---------------------------------------------------------------------------
+
+// Used by GetUtilL
+CMemStatePopupImpl::CMemStatePopupImpl( ) :
+ CActive(EPriorityStandard),
+ iFinished( EFalse ),
+ iDrive( EDriveC ),
+ iCoeEnv( *CCoeEnv::Static( ) ),
+ iResLoader( iCoeEnv ),
+ iOwnsUtil( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::ConstructL( )
+ {
+ OpenResourceAndReadArrayL( );
+
+ // Instantiate event receiver, memory scan engine and server
+ iEventReceiver = CMemScanEventReceiver::NewL( *this );
+
+ // Get data group names from engine
+ iGroupNames = iEventReceiver->DataGroupsL( );
+
+ // Create popup
+ ConstructPopupL( );
+
+ // Create wait dialog
+ iWaitDialog = new( ELeave ) CAknWaitDialog(
+ reinterpret_cast< CEikDialog** >( &iWaitDialog ) );
+ iWaitDialog->SetCallback( this );
+ iWaitDialog->PrepareLC( R_MEMSTATE_WAIT_NOTE );
+
+ StartObserver();
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::RunLD( TDriveNumber aDrive, const TDesC& aTitle )
+ {
+ CMemStatePopupImpl* self = new( ELeave ) CMemStatePopupImpl( aDrive, aTitle );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+
+ // Run the actual process
+ self->ExecuteL( );
+
+ CleanupStack::PopAndDestroy( self );
+ }
+
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::GetUtilL( CMSPUtil*& aUtil )
+ {
+ CMemStatePopupImpl* self = new( ELeave ) CMemStatePopupImpl;
+ CleanupStack::PushL( self );
+
+ // Read the unit array from resource
+ self->OpenResourceAndReadArrayL( );
+ aUtil = self->iUtil; // iUtil is not deleted
+
+ CleanupStack::PopAndDestroy( self );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::StartL( )
+ {
+#ifdef _DEBUG
+ RDebug::Print( _L( "Scanning started!" ) );
+#endif
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::QuitL( TInt /*aReason*/ )
+ {
+#ifdef _DEBUG
+ RDebug::Print( _L( "Scanning ended!" ) );
+#endif
+ if( !iFinished )
+ {
+ // Tell waitdialog that it can quit now
+ iWaitDialog->ProcessFinishedL( );
+ iFinished = ETrue;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::ErrorL( TInt aError )
+ {
+#ifdef _DEBUG
+ RDebug::Print( _L( "Error scanning memory: %d" ), aError );
+#endif
+
+ // getting rid of UREL compiler warning
+ if( !aError )
+ {
+ aError = KErrNone;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::DialogDismissedL( TInt aButtonId )
+ {
+
+ // Cancel is pressed while scanning is in progress
+ if( iEventReceiver->ScanInProgress( ) )
+ {
+ iFinished = ETrue;
+ iEventReceiver->Cancel( ); // Stop scanning
+ }
+
+ // Cancel is pressed while wait note is on screen (scanning may be completed)
+ if( aButtonId == EAknSoftkeyCancel ) // instead of EAknSoftkeyDone
+ {
+ iPopup->CancelPopup( ); // Remove memory state popup from screen
+ return;
+ }
+
+ // Get the new result array
+ delete iScanResults;
+ iScanResults = NULL;
+ TRAPD( err, iScanResults = iEventReceiver->ScanResultL( ) );
+ if( err != KErrNone )
+ {
+ iPopup->CancelPopup( ); // Remove memory state popup from screen
+ return;
+ }
+ RefreshL( );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::ConstructPopupL( )
+ {
+ iListBox = new( ELeave ) CMemStateListBox( );
+
+ iPopup = CAknPopupList::NewL( iListBox, R_AVKON_SOFTKEYS_OK_EMPTY,
+ AknPopupLayouts::EMenuGraphicHeadingWindow );
+ iPopup->SetTitleL( *iTitle );
+
+ // Set up listbox
+ iListBox->ConstructL( iPopup, EAknListBoxViewerFlags );
+
+ // Create listbox model and give the model to the listbox
+ iListModel = new( ELeave ) CDesCArraySeg( iGroupNames->Count( ) );
+
+ // Create scroll indicator
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame( )->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ iListBox->Model( )->SetItemTextArray( iListModel );
+ iListBox->Model( )->SetOwnershipType( ELbmDoesNotOwnItemArray );
+ iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::ExecuteL( )
+ {
+ // Show wait dialog
+ iWaitDialog->RunLD( );
+
+ // Start the scanning
+ User::LeaveIfError(iEventReceiver->ScanL( iDrive ));
+
+ // Get the result array
+ iScanResults = iEventReceiver->ScanResultL( );
+
+ // Set all results zero, so that no actual results are shown
+ // before the scan is done.
+ NullifyResults( );
+
+ // Update the list with initial values (0's)
+ RefreshL( );
+
+ // Show popup
+ iPopup->ExecuteLD( );
+ iPopup = NULL; // Has to be set NULL because deleted in destructor
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::RefreshL( )
+ {
+ //TBuf< KListItemMaxLength > result;
+ TBuf< KListItemMaxLength > unitText;
+ TBuf< KListItemMaxLength > tempText;
+ TPtrC unit;
+ TInt64 res64( 0 );
+ TInt count( iScanResults ? iScanResults->Count( ) : 0 );
+ TInt maxGroupName(0);
+
+ for( TInt i = 0; i < iGroupNames->Count(); i++ )
+ {
+ if( maxGroupName < ( *iGroupNames )[ i ].Length() )
+ {
+ maxGroupName = ( *iGroupNames )[ i ].Length();
+ }
+ }
+
+ // Allocate memory for size, unit text and actual group name
+ HBufC* result = HBufC::NewLC( maxGroupName + 2*KListItemMaxLength );
+ TPtr resultPtr( result->Des() );
+ HBufC* unitFormatter = StringLoader::LoadLC( R_UNIT_FORMATTER, &iCoeEnv );
+
+ iListModel->Reset( );
+
+ // Go through the result array and append to the model as text
+ for( TInt i = 0; i < count; i++ )
+ {
+ res64 = ( *iScanResults )[ i ];
+
+ unit.Set( iUtil->SolveUnitAndSize( res64 ) );
+ StringLoader::Format( tempText, *unitFormatter, 0, I64INT( res64 ) );
+ StringLoader::Format( unitText, tempText, 1, unit );
+ resultPtr.Zero( );
+
+ // The actual listbox row is constructed here
+ // iListModel is just an array of descriptors
+ if ( User::Language() == ELangArabic )
+ {
+ resultPtr.Append( KRightToLeftMark );
+ }
+ resultPtr.Append( unitText );
+ resultPtr.Append( KMemListSeparator );
+ if( i < iGroupNames->Count() )
+ {
+ resultPtr.Append( ( *iGroupNames )[ i ] );
+ }
+ else
+ {
+ resultPtr.Append( ( *iGroupNames )[ 0 ] );
+ }
+ iListModel->AppendL( resultPtr );
+ }
+
+ CleanupStack::PopAndDestroy( unitFormatter );
+ CleanupStack::PopAndDestroy( result );
+
+ // Update the listbox
+ iListBox->HandleItemAdditionL( );
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::NullifyResults( )
+ {
+ // Set all results to zero
+ if( iScanResults )
+ {
+ TInt count( iScanResults->Count( ) );
+ for( TInt t = 0; t < count; t++ )
+ {
+ ( *iScanResults )[ t ] = 0;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+
+void CMemStatePopupImpl::OpenResourceAndReadArrayL( )
+ {
+ // Open dll resource
+
+ TParse* fp = new(ELeave) TParse();
+ fp->Set(KDirAndFile, &KDC_RESOURCE_FILES_DIR, NULL);
+ TFileName fileName( fp->FullName() );
+ delete fp;
+
+ BaflUtils::NearestLanguageFile( iCoeEnv.FsSession( ),
+ fileName );
+ iResLoader.OpenL( fileName );
+
+ // Read localised unit texts from resource
+ TResourceReader reader;
+ iCoeEnv.CreateResourceReaderLC( reader, R_ARRAY_UNITS );
+ CDesCArrayFlat* units = reader.ReadDesCArrayL( );
+ CleanupStack::PushL( units );
+ iUtil = CMSPUtil::NewL( units ); // Give the array to the util class
+ CleanupStack::Pop( units );
+ CleanupStack::PopAndDestroy(); // Private HBufC8* variable
+ // of CreateResourceReaderLC()
+ }
+
+// ---------------------------------------------------------------------------
+void CMemStatePopupImpl::RunL()
+ {
+ TVolumeInfo volInfo;
+ TInt err = iCoeEnv.FsSession().Volume( volInfo, iDrive );
+ if(err != KErrNone)
+ {
+ iPopup->CancelPopup( );
+ }
+ else
+ {
+ StartObserver();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+void CMemStatePopupImpl::DoCancel()
+ {
+ iCoeEnv.FsSession().NotifyChangeCancel();
+ }
+
+// ---------------------------------------------------------------------------
+void CMemStatePopupImpl::StartObserver()
+ {
+ if ( IsActive() )
+ {
+ Cancel();
+ }
+ iCoeEnv.FsSession().NotifyChange( ENotifyDisk, iStatus );
+ SetActive();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2006-2009 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: Master blf for files
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+#include "../deviceencryption/group/bld.inf"
+#include "../files_plat/group/bld.inf"
+#include "../filemanager/group/bld.inf"
+#include "../filesystemuis/group/bld.inf"
+
+
+PRJ_TESTMMPFILES
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+ <!ENTITY layer_real_source_path "sf/app/files" >
+]>
+
+<SystemDefinition name="files" schema="1.4.0">
+ <systemModel>
+ <layer name="app_layer">
+ <module name="files">
+ <unit name="files" unitID="presdo.files" bldFile="&layer_real_source_path;/group" mrp="" />
+ </module>
+ </layer>
+ </systemModel>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+ <package id="files" name="File Manager Apps" levels="support apps">
+ <collection id="filemanager" name="File Manager" level="apps">
+ <component id="filemanager_help" filter="s60" name="File Manager Help">
+ <unit bldFile="filemanager/help/group"/>
+ </component>
+ <component id="filemanager_build" filter="s60" name="File Manager Build">
+ <unit bldFile="filemanager/group"/>
+ </component>
+ </collection>
+ <collection id="filesystemuis" name="File System UIs" level="support">
+ <component id="memscaneng" filter="s60" name="Memory Scan Server">
+ <unit bldFile="filesystemuis/memscaneng/group"/>
+ </component>
+ <component id="memstatepopup" filter="s60" name="Memory State Popup">
+ <unit bldFile="filesystemuis/memstatepopup/group"/>
+ </component>
+ </collection>
+ <collection id="files_info" name="File Manager Apps Info" level="apps">
+ <component id="files_plat" filter="s60" name="File Manager Apps Platform Interfaces" class="api">
+ <unit bldFile="files_plat/group"/>
+ </component>
+ </collection>
+ </package>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+ name CDATA #REQUIRED
+ schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+ name CDATA #REQUIRED
+ levels CDATA #IMPLIED
+ span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+ name CDATA #REQUIRED
+ level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+ unitID ID #REQUIRED
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ bldFile CDATA #REQUIRED
+ priority CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+ name CDATA #REQUIRED
+ version CDATA #REQUIRED
+ late (Y|N) #IMPLIED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+ name ID #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+ name ID #REQUIRED
+ abldTarget CDATA #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+ name ID #REQUIRED
+ abldOption CDATA #REQUIRED
+ description CDATA #REQUIRED
+ enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+ command CDATA #REQUIRED
+ targetList IDREFS #IMPLIED
+ unitParallel (Y | N | y | n) #REQUIRED
+ targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+ name CDATA #REQUIRED
+ cwd CDATA #REQUIRED
+ command CDATA #REQUIRED>