--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiutils/inc/cphonerecoverysystem.h Fri Jun 04 10:19:18 2010 +0100
@@ -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