phoneapp/phoneuiutils/inc/cphonecenrepproxy.h
changeset 0 5f000ab63145
child 21 92ab7f8d0eab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiutils/inc/cphonecenrepproxy.h	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,383 @@
+/*
+* 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:  Proxy for the connection to central repository.
+*
+*/
+
+
+#ifndef __CPHONECENREPPROXY_H
+#define __CPHONECENREPPROXY_H
+
+//  INCLUDES
+#include <coemain.h>
+#include <e32base.h>
+#include <centralrepository.h>
+#include <cenrepnotifyhandler.h>
+
+// CONSTANTS
+class MPhoneCenRepObserver;
+class CPhoneCenRepEventHandler;
+
+// FORWARD DECLARATIONS
+class TPhoneCmdParamAppInfo;
+
+/**
+*  CPhoneCenRepProxy is an API used as proxy for phone application to get/set
+*  and observe central repository settings.
+*
+*  How to get some setting?
+*  ---------------------------
+*  example code:
+*  TBuf<100> value;
+*  CPhoneCenRepProxy::Instance()->GetString( uid, key, value ); 
+*  
+*  uid and key should be retrieved from <Module Name>InternalCRKeys.h
+*  
+*  How to set any settings
+*  --------------------------------------
+*  example code:
+*  TInt value = 10;
+*  CPhoneCenRepProxy::Instance()->SetInt( uid, key, value );
+*
+*  How to observe any settings
+*  --------------------------------------
+*  example code:
+* 
+*  class CPhoneSomeManager : private MPhoneCenRepObserver
+*      {
+*      ...
+*      virtual void HandleCenRepChangeL( 
+*          const TUid& aUid, 
+*          const TUint aId );
+*      ....
+*      }
+*
+*  CPhoneSomeManager::SomeFunctionL
+*      {
+*      CPhoneCenRepProxy::Instance()->NotifyChangeL( uid1, id1, this );
+*
+*      CPhoneCenRepProxy::Instance()->NotifyChangeL( uid2, id2, this );
+*      }
+*  
+*  CPhoneSomeManager::HandleCenRepChangeL( 
+*      const TUid& aUid,
+*      const TUint aId )
+*      {
+*      switch( aId )
+*          {
+*          case ESetting1:
+*              .... //do something
+*          case ESetting2:
+*              .... //do something
+*          default:
+*              .... //panic in debug
+*          }
+*      }
+*
+*  //The CancelAllNotifies() should be always called before destroy the object
+*  CPhoneSomeManager::~CPhoneSomeManager()
+*      {
+*      CPhoneCenRepProxy::Instance()->CancelAllNotifies( this );
+*      }
+*
+*/
+
+
+// CLASS DECLARATION
+
+class CPhoneCenRepProxy : 
+    public CCoeStatic 
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * First call initializes the singleton object. Subsequent calls return
+        * created instance.
+        * @return the created instance.
+        */
+        IMPORT_C static CPhoneCenRepProxy* Instance();
+
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CPhoneCenRepProxy();
+
+    public: // New Functions
+
+        /**
+        * Cancel all requests by the observer. This function should always be 
+        * call before an object is destroyed. During shutdown, this singleton
+        * may be deleted before the classes that observe it. If this happens, the
+        * routine will just return since of requests have already been cancelled.
+        * @param aObserver
+        */
+        IMPORT_C static void CancelAllNotifies( 
+            MPhoneCenRepObserver* aObserver );
+        
+        /**
+        * Set integer value of setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aValue the value associated with the central repository ID
+        */
+        IMPORT_C TInt SetInt( 
+            const TUid& aUid, 
+            const TUint aId,
+            const TInt aValue );
+        
+        /**
+        * Set string value of setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aValue the value associated with the central repository ID
+        * @return refer to SharedDataClient.h for detail explanation
+        */
+        IMPORT_C TInt SetString( 
+            const TUid& aUid, 
+            const TUint aId,
+            const TDesC& aValue );
+            
+        /**
+        * Set real value of setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aValue the value associated with the central repository ID
+        */
+        IMPORT_C TInt SetReal( 
+            const TUid& aUid, 
+            const TUint aId,
+            const TReal aValue );
+        
+        /**
+        * Get integer value of setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aValue the value associated with the central repository ID
+        */
+        IMPORT_C TInt GetInt( 
+            const TUid& aUid, 
+            const TUint aId, 
+            TInt& aValue ) const;
+
+        /**
+        * Get string value of setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aValue the value associated with the central repository ID
+        */
+        IMPORT_C TInt GetString( 
+            const TUid& aUid, 
+            const TUint aId, 
+            TDes& aValue ) const;
+            
+        /**
+        * Get real value of setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aValue the value associated with the central repository ID
+        */
+        IMPORT_C TInt GetReal( 
+            const TUid& aUid, 
+            const TUint aId, 
+            TReal& aValue ) const;
+            
+        /**
+        * Notify the change of the setting
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aObserver The pointer to the observer to handle the change 
+        *     notification
+        */
+        IMPORT_C void NotifyChangeL( 
+            const TUid& aUid, 
+            const TUint aId, 
+            MPhoneCenRepObserver* aObserver );
+
+        /**
+        * Cancel request. If you don't want to receive notification of the 
+        * setting you issued before, call this function.
+        * @param aObserver The observer that have issued request before
+        * @param aId The setting which is to be canceled
+        */
+        IMPORT_C void CancelNotify( 
+            MPhoneCenRepObserver* aObserver,
+            const TUint aId );
+        
+        /**
+        * Return boolean value that states whether or not 
+        * the indicated feature is supported.
+        * @param aFeatureId the feature that is inspected (see values from 
+        *        TelephonyVariant.hrh)
+        * @return whether or not the feature is supported.
+        */
+        IMPORT_C TBool IsTelephonyFeatureSupported( const TInt aFeatureId );
+
+        /**
+        * Return boolean value that states whether or not 
+        * the indicated feature is supported.
+        * @param aFeatureId the feature that is inspected (see values from 
+        *        PhoneUIVariant.hrh)
+        * @return whether or not the feature is supported.
+        */
+        IMPORT_C TBool IsPhoneUIFeatureSupported( const TInt aFeatureId );
+        
+        /**
+         * Get keys from given value range
+         * @param aUid identifing the central repository UID.
+         * @param aPartial partial key to be found
+         * @param aMask mask for partial key
+         * @param aValues reference to array object for found keys
+         * @return KErrNone if successful, system wide error code otherwise.
+         */
+        IMPORT_C TInt Find(
+        		const TUid& aUid,
+        	    const TUint32 aPartial, 
+        	    const TUint32 aMask,
+        	    RArray<TUint32>& aValues ) const;
+        
+        /**
+        * Fetches values from central repository
+        * @param aAppInfo reference to object containing info for 
+        * application launching
+        * @param aCode ascii value of the pressed key
+        * @param aAppParam application parameter
+        * @param aValuesFetched ETrue if values fetched ok
+        */
+        IMPORT_C void FetchValuesFromCenRepL( TPhoneCmdParamAppInfo& aAppInfo, 
+       		 							TKeyCode aCode,
+       		 							HBufC8* aAppParam, TBool& aValuesFetched );
+
+
+    public: // New methods
+
+        /**
+        * Handle notifications from central repository observers
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        */
+        void HandleNotify( 
+            const TUid& aUid, 
+            const TUint aId );
+
+    private:
+
+        /**
+        * Two-phased constructor.
+        * @return new instance.
+        */
+        static CPhoneCenRepProxy* NewL();
+        
+        /**
+        * C++ default constructor.
+        */
+        CPhoneCenRepProxy();
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+    private:
+
+        /**
+        * Find the observer for specific setting on aUid and aId
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aFromIndex find next observer interested in this setting after 
+        *               aIndex
+        * @return The index of the observer if it's found and KErrNotFound if 
+        *         not
+        */
+        TInt FindByUidId( 
+            const TUid& aUid, 
+            const TUint aId, 
+            TInt aFromIndex = 0 );
+        
+        /**
+        * Find the specific Observer
+        * @param aObserver The pointer of the observer
+        * @param aId central repository ID.
+        * @return The index in iObserverArray. KErrNotFound if can't find the 
+                  specific observer
+        */
+        TInt FindByObserverId( 
+            const MPhoneCenRepObserver* aObserver,
+            const TUint aId );
+
+        /**
+        * Finds observer by uid, key and observer.
+        * @param aUid identifing the central repository UID.
+        * @param aId central repository ID.
+        * @param aObserver The pointer of the observer
+        */
+        TInt FindByUidIdObserver( 
+            const TUid& aUid, 
+            const TUint aId, 
+            MPhoneCenRepObserver* aObserver );
+            
+        /**
+        * Returns Telephony variant read-only data.
+        * @return error code.
+        */
+        TInt GetTelephonyVariantData();  
+
+        /**
+        * Returns PhoneUI variant read-only data.
+        * @return error code.
+        */
+        TInt GetPhoneUIVariantData();  
+
+        /**
+        * Cancel all request by the observer. 
+        * @param aObserver
+        */
+        void CancelAllObserverNotifies( MPhoneCenRepObserver* aObserver );
+        
+        /**
+        * Cancel all requests from all observers.
+        */
+        void CancelAllNotifies();
+        
+    private:    // Data
+
+        // Defines information of one observer.
+        class TCenRepObserverTag
+            {
+            public:
+                TUid iUid;
+                TUint iId;
+                MPhoneCenRepObserver* iObserver;
+            };
+
+        // Owned array of observers.
+        CArrayFixFlat<TCenRepObserverTag>* iObserverArray;
+
+        // Central Repository event handlers.
+        CPhoneCenRepEventHandler* iCenRepAccessoryEventHandler;
+        CPhoneCenRepEventHandler* iCenRepNetworkEventHandler;
+        CPhoneCenRepEventHandler* iCenRepThemesEventHandler;
+        CPhoneCenRepEventHandler* iCenRepLanguageEventHandler;
+        CPhoneCenRepEventHandler* iCenRepQwertyEventHandler;
+        CPhoneCenRepEventHandler* iCenRepKDRMHelperEventHandler;
+
+        //Local Telephony variant read-only data.
+        TInt iTelephonyVariantReadOnlyValues;
+
+        //Local PhoneUI variant read-only data.
+        TInt iPhoneUIVariantReadOnlyValues;
+    };
+
+#endif      // __CPHONECENREPPROXY_H
+            
+// End of File