phonebookui/Phonebook2/USIMExtension/inc/CPsu2CharConv.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/USIMExtension/inc/CPsu2CharConv.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,158 @@
+/*
+* 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:  A class for converting characters and checking if the data is
+*                too long.
+*
+*/
+
+
+#ifndef CPSU2CHARCONV_H
+#define CPSU2CHARCONV_H
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <f32file.h>
+#include <charconv.h>
+
+// FORWARD DECLARATIONS
+class RFs;
+class CCnvCharacterSetConverter;
+
+// CLASS DECLARATION
+class CPsu2CharConv : public CBase
+    {
+    public:
+
+        /**
+        * Two-phased constructor.
+        *
+        * @param aFs an open file system session
+        * @param aCharacterSet The character set to use. See charconv.h.
+        * @return a new instance of this class
+        */
+        static CPsu2CharConv* NewL( RFs& aFs, const TUint aChacterSet );
+        
+        /**
+        * Two-phased constructor.
+        *
+        * @param aFs an open file system session
+        * @param aCharacterSet The character set to use. See charconv.h.
+        * @return a new instance of this class
+        */
+        static CPsu2CharConv* NewLC( RFs& aFs, const TUint aChacterSet );
+        
+        /**
+         * Destructor.
+         */
+        ~CPsu2CharConv();
+
+    public: // Data structures
+
+        /// Used for indicating contact field validity
+        /// from (U)SIM store point of view
+        enum TPsu2FieldValidity
+            {
+            /// It's OK to add the field to the entry
+            EOk,
+            /// The data is too long for this field type
+            ETooLong
+            };
+
+    public: // Interface
+
+        void SetDownGradeLf( CCnvCharacterSetConverter::
+                TDowngradeForExoticLineTerminatingCharacters aDowngrade );
+
+        /**
+         * Checks contact field validity.
+         *
+         * @param aData         The data to be saved to the field.
+         * @param aMaxLength    Maximum length of the field.
+         * @param aValidity     Contains the validity value afterwards.
+         * @return  A pointer to the given data. The length depends
+         *          on aValidity. If ETooLong, the pointer points to
+         *          the aData but the length is cut. Can be used to add
+         *          the data to the entry without problems. In other cases
+         *          the pointer points to the given aData and
+         *          the length is same.
+         */
+        TPtrC CheckFieldValidityL(
+                const TDesC& aData, 
+                TInt aMaxLength,
+                TPsu2FieldValidity& aValidity );
+
+        /**
+         * Checks unicode descriptor data length with the current character set
+         * so that conversion from unicode to 8-bit descriptor will not exceed
+         * the given maximum length. Returns either the given descriptor or a
+         * truncated descriptor that can be converted to an 8-bit descriptor
+         * with the given maximum length.
+         *
+         * @param aData         The data to be saved to the field.
+         * @param aMaxLength    Maximum allowed length of the field for the
+         *                      converted data.
+         * @param aUnconvertedCount On return, contains the count of
+         *          characters that could not be converted.
+         * @return  A pointer to the given data. The pointer points to the
+         *          aData but the length is truncated to the length that allows
+         *          making the conversion so that the result length does not
+         *          exceed aMaxLength that was given as a parameter.
+         */
+        TPtrC CheckFieldLengthL(
+                const TDesC& aData, 
+                TInt aMaxLength,
+                TInt& aUnconvertedCount );
+
+        /**
+         * To check if the text includes unicode characters.
+         * @param aText The text to be checked.
+         * @return ETrue if the text included unicode characters.
+         *          EFalse otherwise.
+         */
+        TBool IsUnicodeL( const TDesC& aText );
+
+    private:    // Construction
+        
+        /**
+        * Constructor.
+        */
+        CPsu2CharConv( RFs& aFs, const TUint aChacterSet );
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+         * Checks some special cases to need if extra space needs to be
+         * reserved for the data when saving to (U)SIM.
+         * @param aData The data to be saved to (U)SIM.
+         * @param aConvertedLength The length of the conversion. The function
+         *          increases this if any extra space needs to be reserved.
+         */
+        void ReviseLength(
+                const TDesC& aData, TInt& aConvertedLength );
+
+    private:    // Data
+        /// A file system session for characted converter
+        RFs iFs;
+        /// Own: Symbian's character converter
+        CCnvCharacterSetConverter* iConverter;
+        /// Character set identier as given to the constructors
+        TUint iCharacterSetIdentifier;
+	};
+
+#endif // CPSU2CHARCONV_H
+
+// End of File