phoneapp/phoneuiutils/inc/cphonerecoverysystem.h
changeset 0 5f000ab63145
child 21 92ab7f8d0eab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiutils/inc/cphonerecoverysystem.h	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,263 @@
+/*
+* 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:  Manager to recover important operations.
+*
+*/
+
+
+#ifndef CPHONERECOVERYSYSTEM_H
+#define CPHONERECOVERYSYSTEM_H
+
+// INCLUDES
+#include    <coemain.h>
+#include    <e32base.h>
+#include    "ctelerecoverysystem.h"
+
+// CONSTANTS
+const TInt KNullId = -1;
+const TInt KIdContainerSize = 10;
+
+// MACROS     
+
+
+// DATA TYPES
+typedef TInt TPhoneRecoveryId;
+typedef TInt8 TPhoneRecoveryPriority;
+
+typedef TPhoneRecoveryId TRecoveryId;
+typedef TPhoneRecoveryPriority TRecoveryPriority;
+
+
+
+// FORWARD DECLARATIONS
+class CPhoneTimer;
+//class CTeleRecoverySystem;
+
+// CLASS DECLARATION
+
+/**
+*  If an operation fails, phone application may be leaved to incorrect states. 
+*  By using recovery system, failed operation will be tried again some time 
+*  later. This may enhance the robustness of phone application.
+* 
+*  Return value from callback function
+*  KErrNone: EStateIdle
+*  KErrNoMemory, KErrInUse, KErrServerTerminated, KErrServerBusy, KErrNotRead,
+*  KErrAccessDenied, KErrLocked, KErrDiskFull, KErrTimedOut: EStateWaiting
+*  Otherwise: EStatePending
+*  If call back function leaves, then the error of leave is used as return 
+*  value.
+*  Note: In the recovery callback function, CPhoneRecoverySystem::AddL(...) or
+*  CPhoneRecoverySystem::Add(...) should never be called. 
+*  
+*  @since 1.0
+*/
+class CPhoneRecoverySystem 
+    : public CCoeStatic
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * First call initializes the singleton object. Subsequent calls return
+        * instance.
+        * @return the created instance.
+        */
+        IMPORT_C static CPhoneRecoverySystem* Instance();
+
+        /**
+        * Destructor.
+        */
+        ~CPhoneRecoverySystem();
+       
+    public: // new function
+
+        /**
+        * Adds a new item with given priority & state. Returns Null id if it
+        * failed. Same item must not be added twice. Callback's return value
+        * indicates how many steps there are to be done, 0 - no more steps. 
+        * Error code or leave - failure.
+        * Priority indicates importantance of the action.
+        *
+        * @param aCallBack callback.
+        * @param aPriority priority.
+        * @param aState start state.
+        * @return identifier.
+        */
+        TRecoveryId Add( TCallBack aCallBack, 
+            TRecoveryPriority aPriority, 
+            CTeleRecoverySystem::TRecoveryState aState );
+
+        /**
+        * Add a new item to the recovery system. The function may leave if
+        * OOM. 
+        *
+        * @param aCallBack callback.
+        * @param aPriority priority.
+        * @param aState start state.
+        * @return identifier.
+        */
+        IMPORT_C TRecoveryId AddL( TCallBack aCallBack,
+            TRecoveryPriority aPriority,
+            CTeleRecoverySystem::TRecoveryState aState );
+    
+        /**
+        * Removes item.
+        *
+        * @param aId identifier of the item to be removed.
+        */
+        IMPORT_C static void Remove( TRecoveryId aId );
+    
+        /**
+        * Sets state. Note: The timer will not be started if the state is
+        * set to be waiting.
+        *
+        * @param aId identifier.
+        * @param aState new state.
+        */
+        void SetState( TRecoveryId aId, 
+        	CTeleRecoverySystem::TRecoveryState aState );
+    
+        /**
+        * Resets pending recovery actions back to waiting.
+        */
+        void ResetPending();
+    
+        /**
+        * Recovers one step or all steps synchronously. Even if it's solved
+        * it should call the method.
+        *
+        * @param aId identifier.
+        * @param aPriority priority.
+        * @param aAllSteps ETrue if all steps need to be run.
+        * @return error code.
+        */
+        IMPORT_C TInt RecoverNow( TRecoveryId aId, 
+            TRecoveryPriority aPriority, 
+            TBool aAllSteps = EFalse );
+
+        /**
+        * Informs that precondition has been satisfied.
+        */
+        IMPORT_C void EnablePreconditionL();
+
+                        
+       /**
+        * Create tele recovery system
+        */    
+        CTeleRecoverySystem* CreateRecoverySystemL();
+
+    private: // New functions
+
+        /**
+        * Removes recovery id item.
+        *
+        * @param aId identifier of the item to be removed.
+        */
+        void RemoveId( TRecoveryId aId );
+    
+    private: // private structures
+        
+        // Defines structure containing information
+        // of a recovery item.
+        class TRecoveryItem
+            {
+            public:
+                // Identifier
+                TRecoveryId iId;
+                // Callback
+                TCallBack iCallBack;
+                // Priority
+                TRecoveryPriority iPriority;
+                // State
+                CTeleRecoverySystem::TRecoveryState iState;
+            };
+
+    private: //private function
+
+        /**
+        * Two-phased constructor.
+        * @return new instance.
+        */
+        static CPhoneRecoverySystem* NewL();
+
+        /**
+        * C++ constructor.
+        */
+        CPhoneRecoverySystem();
+         
+        /**
+        * Adds id to container which holds all the ids this singleton
+        * has given out via AddL method.
+        * @param aId - Id to be added in container
+        * @exception -1 (KErrNoSpace) is thrown if there isn't room in the container
+        */
+		void AddIdToContainer( TRecoveryId aId );
+		
+		/**
+		* Removes given id from the container which holds all the ids this singleton
+		* has given out via AddL method.
+		* @param aId - Id to be removed from container
+		*/
+		void RemoveFromContainer( TRecoveryId aId );
+		
+		/**
+		* This is called from destructor. Method removes all the ids from recovery
+		* system that are hold within container. This is done this way because
+		* this singleton object is actually destructed by coeenv before some of
+		* object's clients' destructor is called where it would try to remove
+		* id from the recovery system. Now this way we do not leak any resources.
+		*/
+		void RemoveAllIdsFromContainer();
+
+
+    private:    // Data  
+           
+        // Timer for recovery
+        CPhoneTimer* iTimer;
+
+        // Timer for recovery all steps
+        CPhoneTimer* iAllStepsTimer;
+
+        // Id counter for TRecoveryId
+        TInt iIdCounter;
+
+        // Count the ticks
+        TInt iTickCounter;
+
+#ifdef _DEBUG
+        // Debug: to prevent modification of recovery system in 
+        // recovery callback.
+        TBool iIsCallBack;
+#endif // _DEBUG
+
+        // ETrue if precondition ok
+        TBool iPrecondOk;
+
+        // ETrue if precondition SIM ok
+        TBool iPrecondSimOk;
+
+        // Keycount - recovery counter is checked only after some keypresses
+        TInt iKeyCount;
+        
+        // Reference to Tele recovery system.
+        CTeleRecoverySystem* iRecoverySystem;
+        
+        // Container for allocated recovery ids
+        TFixedArray< TInt, KIdContainerSize > iIdContainer;
+
+    };
+
+#endif      // CPHONERECOVERYSYSTEM_H   
+            
+// End of File