camerauis/cameraapp/generic/common/inc/CamUtility.h
branchRCL_3
changeset 24 bac7acad7cb3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/common/inc/CamUtility.h	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2007-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:  Utility functions for the Camera Application*
+*/
+
+
+
+
+#ifndef CAMUTILITY_H
+#define CAMUTILITY_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <CAknMemorySelectionSettingPage.h>
+ 
+#include <bldvariant.hrh>
+#include "CamPSI.h"	// Product Specific Information
+#include "CamSettings.hrh"  // for TCamMediaStorage
+#include "CamSettingsInternal.hrh"
+#include "camlogging.h"
+#include "camconfigurationtypes.h"
+
+#ifndef CAMERAAPP_PLUGIN_BUILD
+#include "CamResourceIDs.h"
+#endif //CAMERAAPP_PLUGIN_BUILD
+
+#include <driveinfo.h>
+
+// CONSTANTS
+/* estimated average image sizes */
+const TInt KCamImageSize3MP = 750000; 
+const TInt KCamImageSize2MP = 475000;
+const TInt KCamImageSize1_3MP = 325000;
+const TInt KCamImageSize1MP = 90000;
+const TInt KCamImageSizeVGA = 56500;
+
+const TInt KCamLocationTrailStopped = 0;
+const TInt KCamLocationTrailNoValidData = 1;
+const TInt KCamLocationTrailSearchingDevice = 2;
+const TInt KCamLocationTrailGPSDataAvail = 3;
+
+// A multiple of the image size is kept as a buffer to ensure that a
+// complex last image can be captured
+const TInt KCamImageDataBufferMultiplier = 1;
+
+// Name of the server that takes foreground when charger is inserted
+_LIT( KAknCapServer, "akncapserver" );
+// Location data notification windows use this server.
+_LIT( KAknNotifyServer, "aknnfysrv"    );
+
+// Phonebook server
+_LIT( KPbkServer, "Pbk2ServerApp" );
+
+// DATA TYPES
+/**
+* Memory card status, as returned by MemoryCardStatus()
+*/
+enum TCamMemoryCardStatus
+    {
+    ECamMemoryCardNotInserted,
+    ECamMemoryCardLocked,
+    ECamMemoryCardInserted
+    };
+
+#ifndef CAMERAAPP_PLUGIN_BUILD
+#define ROID(resource_id)               (CamUtility::ResourceOrientationID(resource_id))
+
+// Capture tone resources
+_LIT( KCamCaptureTone1,      "z:\\system\\sounds\\digital\\cameraappCapture1.wav"  );
+_LIT( KCamCaptureTone2,      "z:\\system\\sounds\\digital\\cameraappCapture2.wav"  );
+_LIT( KCamCaptureTone3,      "z:\\system\\sounds\\digital\\cameraappCapture3.wav"  );
+_LIT( KCamCaptureTone4,      "z:\\system\\sounds\\digital\\cameraappCapture4.wav"  );
+_LIT( KCamBurstCaptureTone1,      "z:\\system\\sounds\\digital\\cameraappCaptureShort1.wav"  );
+_LIT( KCamBurstCaptureTone2,      "z:\\system\\sounds\\digital\\cameraappCaptureShort2.wav"  );
+_LIT( KCamBurstCaptureTone3,      "z:\\system\\sounds\\digital\\cameraappCaptureShort3.wav"  );
+_LIT( KCamBurstCaptureTone4,      "z:\\system\\sounds\\digital\\cameraappCaptureShort4.wav"  );
+_LIT( KCamVideoStartTone,    "z:\\system\\sounds\\digital\\cameraappStart.wav"     );
+_LIT( KCamVideoPauseTone,    "z:\\system\\sounds\\digital\\cameraappStop.wav"      );
+_LIT( KCamVideoStopTone,     "z:\\system\\sounds\\digital\\cameraappStop.wav"      );
+_LIT( KCamAutoFocusComplete, "z:\\system\\sounds\\digital\\cameraappFocusSucc.wav" );
+_LIT( KCamSelfTimerTone, "z:\\system\\sounds\\digital\\cameraappSelfTimer.wav" );
+
+#endif //CAMERAAPP_PLUGIN_BUILD
+
+// CLASS DECLARATION
+
+/**
+* Application wide utility functions
+*
+*  @since 2.8
+*/
+
+class CamUtility
+    {
+    public : // New functions
+
+        /**
+        * Get free space in selected memory
+        * @since 2.8
+        * @param aMemory memory card or internal memory
+        * @param aCriticalLevel The critical threshold on the specified drive 
+        * @return free space in selected memory (in bytes)
+        */
+        static TInt64 MemoryFree( 
+                    DriveInfo::TDefaultDrives aMemory,
+                    TInt aCriticalLevel = 0 );
+
+        /**
+        * Returns the memory card status.
+        * @since 2.8
+        * @return the status.
+        */
+        static TCamMemoryCardStatus MemoryCardStatus();
+
+        /**
+        * Get drive number for memory card.
+        * @since 2.8
+        * @return drive number for memory card
+        */
+        static TInt MemoryCardDrive();
+
+        /**
+        * Get drive number for phone memory.
+        * @since 2.8
+        * @return drive number for phone memory
+        */
+        static TInt PhoneMemoryDrive();
+
+
+        /**
+        * Get drive number for mass storage memory.
+        * @since 3.2
+        * @return drive number for mass storage memory
+        */
+        static TInt MassMemoryDrive();
+    
+        /**
+        * Get drive type for a given drive number.
+        * @since 3.2
+        * @return DriveInfo::TDefaultDrives type for the drive number
+        */
+    	static TInt GetDriveTypeFromDriveNumber( TInt aDrive );
+
+        /**
+        * Map camera storage location to memory selection dialog storage location
+        * @param aStorage The camera storage location to map 
+        * @since 3.0
+        * @return the memory selection dialog's mapped memory storage location value
+        */
+        static TInt MapToSettingsListMemory( TInt aStorage );
+        
+        /**
+        * Map memory selection dialog storage location to camera storage location 
+        * @param aStorage The settings list memory location to map 
+        * @since 3.0
+        * @return the camera storage location mapped from the memory selection dialog's location value
+        */
+        static TInt MapFromSettingsListMemory( TInt aStorage );
+
+        /**
+        * Suggest a new unique filename 
+        * @since 2.8
+        * @param aFilePath (in/out) drive and path for file name 
+        *                     (must include trailing '\')
+        *                     On return contains the full path and
+        *                     generated file name with extension
+        * @param aFilename    (in/out) filename (without path or extension)
+        * @param aSuggestedNumeral number initially appended to the name to ensure
+        *                     uniqueness, the actual number used may be higher
+        * @param aExt         file extension (".jpg" or ".3gp")
+        */
+        static void GetUniqueNameL( TDes& aFilePath, 
+                         TDes& aFilename, 
+                         TInt aSuggestedNumeral,
+                         const TDesC& aExt );
+
+        /**
+        * Generate a image file name based on base name and counter.
+        * @since 2.8
+        * @param aCounter image counter [1...]
+        * @param aBaseName name base 
+        * @param aFilename descriptor to hold the generated file name.
+        *                  Does not include path or extension. Example:
+        *                  "Image(001)"
+        */
+        static void FormatFileName( TUint aCounter,
+                             const TDesC& aBaseName,
+                             TDes& aFilename );
+
+        /** 
+        * Checks if given filename contains illegal characters or
+        * is otherwise illegal.
+        * @since 2.8
+        * @param aFilename descriptor that holds file name to check.
+        */
+        static TBool CheckFileNameValidityL( const TDesC& aFilename );
+
+        /** 
+        * Generate a file name based on date and counter.
+        * @since 2.8
+        * @param aFilename descriptor to hold the generated file name.
+        *                  Does not include path or extension. Example:
+        *                  "240305(001)"
+        */
+        static void FormatDateFileNameL( TDes& aFilename );
+
+        /** 
+        * Format current date into given descriptor in a format
+        * suitable for file names.        
+        * @since 2.8
+        * @param aBuffer the buffer to receive the formatted date.
+        */
+        static void GetCurrentDateForNameBaseL( TDes& aBuffer );
+
+
+        /** 
+        * Return the path and filename of the application MBM file
+        * @since 2.8
+        * @param aResName Populated with path and filename of MBM file
+        */
+        static void ResourceFileName( TDes& aResName );
+
+		/**
+		* Return Product Specific Information in the form of a TInt
+		* @since 2.8
+		* @param aKey The enumeration key identifying the data required
+		* @param aValue A reference to TInt that will hold the data
+		* @return KErrNone if successful, KErrNotSupported if no valid data.
+		*/		
+		static TInt GetPsiInt( TCamPsiKey aKey, TInt& aValue );
+
+		/**
+		* Return Product Specific Information in the form of a TInt array
+		* @since 3.0
+		* @param aKey The enumeration key identifying the data required
+		* @param aValue A reference to a TInt array that will hold the data
+		* @return KErrNone if successful, KErrNotSupported if no valid data.
+		*/		
+		static TInt GetPsiIntArrayL( TCamPsiKey aKey, RArray<TInt>& aValue );
+        
+        /**
+		* Return Product Specific Information in the form of a TInt
+		* @since 2.8
+		* @param aKey The enumeration key identifying the data required
+		* @param aValue A reference to TInt that will hold the data
+		* @return KErrNone if successful, KErrNotSupported if no valid data.
+		*/		
+		static TInt GetCommonPsiInt( TCamPsiKey aKey, TInt& aValue );
+
+		/**
+		* Return Product Specific Information in the form of a TAny*
+		* @since 2.8
+		* @param aKey The enumeration key identifying the data required
+		* @param aValue A pointer to where the data should be copied to.
+		*        note, data is Mem::Copied, so sufficient space must be
+		*        available in the buffer passed in to "aValue"
+		* @return KErrNone if successful, KErrNotSupported if no valid data.
+		*/
+        static TInt GetPsiAnyL( TCamPsiKey aKey, TAny* aValue );
+
+		/**
+		* Return maximum size for an MMS message
+		* @since 2.8
+		* @return The maximum size
+		*/
+        static TInt MaxMmsSizeInBytesL();
+
+		/**
+		* Compares two strings.
+		* @since 2.8
+		* @param aFirst The first string.
+		* @param aSecond The second string
+        * @return ETrue if the strings are equivalent.
+		*/
+        static TBool CompareIgnoreCase( const TDesC& aFirst, 
+                                      const TDesC& aSecond );
+
+		/**
+		* Deletes a video clip.
+		* @since 2.8
+		* @param aFilename The filename of the video clip
+		*/
+        static void DeleteVideoL( const TDesC& aFilename );
+
+		/**
+		* Deletes an image.
+		* @since 2.8
+		* @param aFilename The filename of the image
+		*/
+        static void DeleteStillImageL( const TDesC& aFilename );
+
+		/**
+		* Returns the thumbnail path for an image.
+		* @since 2.8
+		* @param aImagePath The path of the image
+		* @param aThumbnailPath The path of the thumbnail image
+		*/
+        static void GetThumbnailPath( const TDesC& aImagePath, 
+                                            TDes& aThumbnailPath );
+
+		/**
+		* Renames a still image.
+		* @since 2.8
+		* @param aOldPath The old path of the image
+		* @param aNewName The new name of the image
+		* @param aNewPath Receives the new path of the image.
+		*/
+        static void RenameStillImageL( const TDesC& aOldPath,
+                                              const TDesC& aNewName,
+                                              TDes& aNewPath );
+
+		/**
+		* Takes a window group ID and a group name.  Checks to see if the
+        * window group referred to by the ID has a name containing the 
+        * window group name string.
+		* @since 3.0
+		* @param aWindowId ID of the window group
+		* @param aWindowGroupName Name to check for
+        * @return ETrue if ID matches name
+		*/
+        static TBool IdMatchesName( TInt aWindowId, const TDesC& aWindowGroupName );
+            
+		/**
+		* Returns the correct resource ID for the current orientation
+		* @since 3.0
+		* @param aDefaultResourceID The resource ID for the default orientation
+		* @return The new resource ID
+		*/
+		
+        static TInt ResourceOrientationID( TInt aDefaultResourceID );
+        
+        /**
+        * Map light sensitivity id to ISO rating value.
+        * 
+        */
+        static TInt MapLightSensitivity2IsoValueL( TCamLightSensitivityId aLightSensitivityId, RArray<TInt>& aSupportedValues );
+
+        /**
+        * Map UI sharpness setting id to Camera sharpness setting value.
+        *
+        */
+        static TInt MapSharpnessId2SharpnessValueL( TCamImageSharpnessId aSharpnessId );
+
+        /**
+        * Obtain resource id for specific video reoslution 
+        * (for primary camera)
+        * @since 3.0
+        * @param aResolution video reoslution
+        * @return resource id
+        */
+        static TInt MapVideoQualityToViewFinderRes( TCamVideoResolution aResolution );
+                                                   
+		/**
+		* Determines if the battery power is good
+		* @since 3.0
+		* @return ETrue if the battery is OK, and EFalse if it is 
+		*         low or almost empty
+		*/
+		static TBool IsBatteryPowerOK();
+
+		/**
+		* Determines if the battery power is empty
+		* @since 3.0
+		* @return ETrue if the battery is Empty 
+		*/
+		static TBool IsBatteryPowerEmpty();
+		        
+		/**
+		* Determines if the battery is being charged
+		* @since 3.0
+		* @return ETrue if the battery is charging
+		*/
+		static TBool IsBatteryCharging();
+
+        /**
+        * Determines if LocationTrail is started
+        * @return ETrue if LocationTrail is started
+        */
+        static TBool IsLocationAware();
+
+        /**
+        * Replaces original bitmap by bitmap with alpha channel.
+        * @since S60 5.0
+        * @param aBmp, bitmap 
+        * @param aMask, mask 
+        * @param aColor, Color used instead of white.  
+        */                                    
+        static void SetAlphaL( CFbsBitmap*& aBmp, CFbsBitmap*& aMask, 
+                               TRgb aColor = KRgbWhite );
+        
+    /**
+    * Determines if USB is active
+    * @return ETrue if USB is active
+    */
+    static TBool IsUsbActive();
+    
+    /**
+    * Determines if the device has a NHD display.
+    * This method is meant to be used with the layouts only
+    * @return ETrue if NHD (640 x 360) display
+    */
+    static TBool IsNhdDevice();
+
+    /**
+    * Determines device qwerty-mode state.
+    * This method is meant to be used with secondary camera.
+    * @return ETrue if qwerty keyboard is open
+    */
+    static TBool IsQwertyOpen(); 
+
+    /**
+    * Get layout rectangle for given resolution in given mode.
+    * @param aMode ECamControllerVideo or ECamControllerImage.
+    * @param aResolution Resolution enumeration from 
+    * CCamAppController::GetCurrentVideoResolution or
+    * CCamAppController::GetCurrentImageResolution depending 
+    * on the mode.
+    *                    
+    */
+    static TRect ViewfinderLayout( TCamCameraMode aMode,
+                                   TInt           aResolution );
+
+  private:
+                                   
+    /**
+    * Helper method for ViewfinderLayout.
+    */
+    static TAknWindowLineLayout ViewfinderLayoutTouch( TCamCameraMode aMode,
+                                                       TInt           aResolution );
+
+    /**
+    * Helper method for ViewfinderLayout.
+    */
+    static TAknWindowLineLayout ViewfinderLayoutNonTouch( TCamCameraMode aMode,
+                                                          TInt           aResolution );
+
+
+    };
+
+#endif      // CAMUTILITY_H 
+            
+// End of File