diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ccapplication/ccapp/inc/ccaappview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccaappview.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,376 @@ +/* +* Copyright (c) 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 responsible handling the views + * +*/ + + +#ifndef C_CCAAPPVIEW_H +#define C_CCAAPPVIEW_H + +#include +#include +#include + +#include +#include + +// FORWARD DECLARATIONS +class CCCAppStatusPaneHandler; +class CCCAAppAppUi; +class MVPbkStoreContact; +class MCCAppPluginsContactObserver; + +/** + * CCCAppView + * + * @code + * @endcode + * + * @lib ccaapp + * @since S60 v5.0 + */ +class CCCAppView : + public CBase, + public MCCAppContactFieldDataObserver, + public MCCAppEngine + { +#ifdef __CCAPPUNITTESTMODE + friend class ut_CCCAppView; +#endif// __CCAPPUNITTESTMODE + +public: + /** + * Two-phased constructor. + */ + static CCCAppView* NewL( CCCAAppAppUi& aAppUi ); + + /** + * Destructor. + */ + ~CCCAppView(); + + +public: // From MCCAppEngine + + /** + * From MCCAppEngine + */ + void CCAppContactEventL(); + + /** + * From MCCAppEngine + */ + void AddObserverL( MCCAppPluginsContactObserver& aObserver ); + + /** + * From MCCAppEngine + */ + void RemoveObserver( MCCAppPluginsContactObserver& aObserver ); + + /** + * From MCCAppEngine + */ + MCCAParameter& Parameter(); + + /** + * From MCCAppEngine + */ + void ShowPluginL( TUid aUid ); + + /** + * From MCCAppEngine + */ + void HidePluginL( TUid aUid ); + +private:// from MCCAppContactFieldDataObserver + + /** + * from MCCAppContactFieldDataObserver + */ + void ContactFieldDataObserverNotifyL( + MCCAppContactFieldDataObserver::TParameter& aParameter ); + + /** + * from MCCAppContactFieldDataObserver + */ + void ContactFieldDataObserverHandleErrorL( + TInt aState, TInt aError ); + +private: + /** + * Constructor. + */ + CCCAppView( CCCAAppAppUi& aAppUi ); + void ConstructL(); + +public: // Implementation + + /** + * Activates the plugin view. + * AppUi exits in case it receives error. + * + * @since S60 v5.0 + * @param aUid is the uid of the plugin preferred to be visible 1st + * @return possible error code + */ + TInt StartView( const TUid aUid ); + + /** + * Changes the plugin view. + * AppUi exits in case it receives error. + * + * @since S60 v5.0 + * @param aForward next/previous plugin + * @return possible error code + */ + TInt ChangeView( TBool aForward ); + + /** + * TabChangedL is called after the tab is + * succesfully changed by CAknTabGroup. + * TabChangedL activates corresponding plugin. + * + * @since S60 v5.0 + * @param aIndex of plugin to be activated + */ + void TabChangedL( TInt aIndex ); + + /** + * Returns the AppUi reference + * + * @since S60 v5.0 + * @return reference to CCCAAppAppUi + */ + CCCAAppAppUi& AppUi(); + + /** + * Returns the Eikon Enviroment reference + * + * @since S60 v5.0 + * @return reference to CEikonEnv + */ + CEikonEnv& EikonEnv(); + + /** + * Returns the CCCAppPluginLoader reference + * + * @since S60 v5.0 + * @return reference to CCCAppPluginLoader + */ + CCCAppPluginLoader& PluginLoader(); + + /** + * Tries to handle most of the cases when plugin + * leaves in critical point. Panics are out of our + * reach. + * + * In practise "bad boy" is removed from plugin + * array and the 1st plugin in the array is then + * activated. + * + * Handles the cases if leave occurs in one of the + * following plugin methods: + * - NewL / ConstructL + * - PreparePluginViewL + * - NewContainerL + * - DoActivateL + * + * DoActivateL call happens in Avkon fw and by + * default the last working view is set to be + * active. To keep the functionality similar + * (and simple) in most cases, CIdle callback + * ResetViewL() is used. + * + * Since recovering should not be everyday use case, + * implementation is a compromise. Recovering + * functionality is not recursive. If the plugin + * failing is the 1st one, application is closed. + * + * @since S60 v5.0 + */ + void RecoverFromBadPluginL(); + + /** + * @return ETrue if active plug-in is busy with some processing, + * EFalse otherwise + */ + TBool CurrentPluginBusy(); + +private: //New + + /** + * Activates plugin itself + * + * @since S60 v5.0 + * @param aPluginDataInFocus is the data of plugin to be activated + */ + void ActivatePluginL( CCCAppPluginData& aPluginDataInFocus ); + + /** + * Updates the titlepane based on contact data notifications. + * See also ContactFieldDataObserverNotifyL. + * + * @since S60 v5.0 + * @param aContactField is contact data field + */ + void ContactFieldFetchedNotifyL( + CCmsContactField& aContactField ); + + /** + * Activates the plugin view. Leaves in case of errors. + * + * @since S60 v5.0 + * @param aUid is the uid of the plugin preferred to be visible 1st + */ + void StartViewL( const TUid aUid ); + + /** + * Changes the plugin view. Leaves in case of errors. + * + * @since S60 v5.0 + * @param aForward next/previous plugin + */ + void ChangeViewL( TBool aForward ); + + /** + * CIdle-callback for resetting the view. + * See RecoverFromBadPluginL. + * + * @since S60 v5.0 + */ + static TInt ResetViewL( TAny* aSelf ); + + /** + * Check other plugin visibilities. + * + * @since S60 v5.0 + */ + void CheckOtherPluginVisibilitiesL(); + + /** + * Check other plugin visibilities. + * + * @since S60 v5.0 + * @param aPluginToFocus + */ + void StartPluginL(TInt aPluginToFocus); + + /** + * Shows plugin. + * + * @since S60 v5.0 + * @param aUid + */ + void PerformShowPluginL( TUid aUid ); + + /** + * Hides plugin. + * + * @since S60 v5.0 + * @param aUid + */ + void PerformHidePluginL( TUid aUid ); + + /** + * Callback function for CIdle object that calls ConstructDelayedL(). + * + * @since S60 v5.0 + * @param aContainer + */ + static TInt ConstructDelayedCallbackL( TAny* aContainer ); + + /** + * Performs time consuming construction operations once. + * + * @since S60 v5.0 + */ + void DoConstructDelayedL(); + + + /** + * Performs the synch between the tabs & the Visible Plugins + * + * @since S60 v5.0 + */ + void SynchPluginVisibilityWithTabAfterDelayedStartL(); + +private: //Data + + /** + * Status pane handler. + * Own. + */ + CCCAppStatusPaneHandler* iPaneHandler; + + /** + * Reference to AppUi + * Not own. + */ + CCCAAppAppUi& iAppUi; + + /** + * Pointer to pluginloader + * Own. + */ + CCCAppPluginLoader* iPluginLoader; + + /** + * Boolean for monitoring is view change currently in progress. + * Own. + */ + TBool iViewChangeInProgress; + + /** + * Pointer to CMS contact fetcher wrapper + * Own. + */ + CCCAppCmsContactFetcherWrapper* iCmsWrapper; + + /** + * Pointer to CIdle in cases of recovering + * Own. + */ + CIdle* iViewResetter; + + /** + * Pointer to observers. + * Not owed. + */ + RPointerArray iObservers; + + /** + * Members and pointers for functionality to control delayed + * lazy plugin initialisation during construction. + */ + CIdle* iDelayedConstructor; + TBool iDelayedStarting; + + enum TDelayState + { + EDelayedCreateTabs = 0, + EDelayedCheckVisibilities, + EDelayedCheckVisibilitiesOk, + EDelayedFinish + }; + TInt iDelayState; + TInt iDelayedPluginVisibilityCheck; + TBool iDelayedVisibilityChanged; + + //has a list of plugins which needs tobe synched + RArray iPluginUidToBeSynchd; + }; + +#endif // C_CCAAPPVIEW_H +