upnpsettings/appwizard/inc/cupnpappwizard.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsettings/appwizard/inc/cupnpappwizard.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,517 @@
+/*
+* Copyright (c) 2008 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:      Header file for the Setup wizard class
+*
+*/
+
+
+
+
+
+
+#ifndef CUPNPAPPWIZARD
+#define CUPNPAPPWIZARD
+
+// INCLUDES
+#include <e32base.h>
+#include <AknWaitNoteWrapper.h>  // base class MAknBackgroundProcess
+
+#include "upnpfilesharingengine.h" //CUPnPFileSharingEngine & THomeConnectMediaType
+#include "upnpfilesharingengineobserver.h" //MUPnPFileSharingEngineObserver
+
+
+
+// CONSTANTS
+const TInt KUPnPAlwaysAskInd = 0;
+const TInt KUPnPCreateNewInd = 1;
+
+
+// FORWARD DECLARATIONS
+class CAknViewAppUi;
+class CUPnPSettingsEngine;
+class CEikonEnv;
+class CUPnPMultiselectionUi;
+// CLASS DECLARATION
+
+/**
+ * CUPnPAppWizard class
+ *
+ * Class implementing the functionality of the setup wizard
+ * @since S60 v3.1
+ * @lib upnpappwizard.lib
+ */
+class CUPnPAppWizard : public CBase,
+                       private MUPnPFileSharingEngineObserver,
+                       MAknBackgroundProcess
+    {
+public:     // Constructors and destructor
+
+    enum TSharingStarting
+        {
+        ENotActive,
+        EStartingSharing,
+        ESharingStarted
+        };
+
+    enum TShareArrayState
+        {
+        ESetMarked,
+        EResetArray,
+        EAddToArray
+        };
+    
+    /**
+     * Two-phased constructor.
+     * @since S60 v3.1
+     * @param aFirstStepText, Text for the first wizard step, owned by \
+client. If length of the aFirstStepText is 0 default text is used
+     * @param aEng, Pointer to filesharing engine instance
+     */
+    IMPORT_C static CUPnPAppWizard* NewL( const TDesC& aFirstStepText,
+                                          CUPnPFileSharingEngine* aEng );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CUPnPAppWizard();
+
+public:     // New functions
+
+    /**
+     * Starts wizard
+     *
+     * @since S60 v3.1
+     * @return TInt, Error code
+     */
+    IMPORT_C TInt StartL();
+
+    /**
+	 * Modifies iShareImgAndVideoArray and iShareMusicArray arrays
+	 *
+	 * @param aArrayState
+	 * @param aValue
+	 * @param aUiDlg
+	 */
+    void ModifyMarkedArrayL( TShareArrayState aArrayState 
+    		               , TInt aValue = 0
+    		               , CUPnPMultiselectionUi* aUiDlg = NULL );
+
+private:
+    /**
+     * CSelectionStorage class
+     *
+     * Private class for user selections and handling their 
+     * storage and retrieval
+     * @since S60 v3.1
+     */
+    NONSHARABLE_CLASS( CSelectionStorage ) : public CBase
+        {
+        public :
+
+        enum TSharingStartResult
+            {
+            ESharingStarted,
+            ENothingToShare,
+            ESharingStartFailed
+            };
+        /**
+        * C++ default constructor
+        * @param aSetEng. Pointer to CUPnPSettingsEngine, not owned
+        * @param aFileEng. Pointer to CUPnPFileSharingEngine, not owned
+        */
+        CSelectionStorage( CUPnPSettingsEngine* aSetEng,
+                       CUPnPFileSharingEngine* aFileEng );
+        /**
+        * Destructor.
+        */
+        virtual ~CSelectionStorage();
+
+        /**
+        * Store locally users selected device name
+        * @since S60 v3.1
+        * @param aDeviceName. The new name
+        */
+        void SetDeviceNameL( TDes& aDeviceName );
+
+        /**
+        * Get device name from local store of from cenrep
+        * @since S60 v3.1
+        * @param aDeviceName. Descriptor to store the name
+        * @return success of the operation
+        */
+        TInt GetDeviceNameL( TDes& aDeviceName );
+
+        /**
+        * Sets the IAP id of the user selected IAP
+        * @since S60 v3.1
+        * @param aIapId. Iap id of the selected IAP
+        * @param aIndexForUi, Index of the iap in UI list
+        */
+        void SetIapId( const TInt aIapId,
+                   const TInt aIndexForUi );
+        /**
+        * Function for getting the iapid from local storage or from cenrep
+        * @since S60 v3.1
+        * @param aIapId. Iap id of the selected IAP
+        * @return success of the operation
+        */
+        TInt GetIapId( TInt& aIapId );
+
+        /**
+        * Initialize Iap name and iap id arrays with some fixed texts
+        * @since S60 v3.1
+        * @param aIapNameArr. Array pointer for the names
+        * @param aIApIdArr. Array pointer for iap IDs
+        */
+        void InitializeIapArraysL( CDesCArray* aIapNameArr,
+                               RArray<TInt64>& aIapIdArr ) const;
+
+        /**
+        * Stores the user selections from filesharing popus to local storage
+        * @since S60 v3.1
+        * @param aMedia. Type of media
+        * @param aSelections. Array of the selections user has made.
+        * Stored only locally
+        */
+        void SetSharedContent( THomeConnectMediaType aMedia,
+                               CArrayFix<TInt>* aSelections );
+
+        /**
+        * Stores the devicename and IAP from local store to cenrep
+        * @since S60 v3.1
+        * @return success of the operation
+        */
+        TInt StoreSettingsL();
+        
+        /**
+        * Stores the selected image and video albums from local store to 
+        * cenrep
+        * @since S60 v3.2
+        * @return error code
+        */
+        TInt ImageStoreSharedFilesL();       
+
+        /**
+        * Gets the users sharing selections as indexes from local storage
+        * @since S60 v3.1
+        * @param aMedia. The kind of selections to get
+        * @param aSelections. Array for selections
+        */
+        void GetSelectionsL( 
+        THomeConnectMediaType aMedia,
+        CArrayFix<TInt>* aSelections );
+
+        /**
+        * Determines if the is need to start sharing
+        * @since S60 v3.1
+        * @return ETrue if sharing needs to be activated.
+        */
+        TBool HasSomethingToShare() const;
+
+        /** 
+        * Gets the currently selected IAP index for the listbox UI
+        * @since S60 v3.1
+        * @param aCurrentSelection. The new current selection
+        * @param aIapIdArr. Array of IAP ids of the IAPs shown in listbox
+
+        */
+        void GetCurrentSelection( TInt& aCurrentSelection,
+                              RArray<TInt64>& aIapIdArr );
+
+        /** 
+        * Gets the WAP iap associated to given IAPid
+        * @since S60 v3.1
+        * @param aIAPId. Id to match
+        * @return. The id of the corresponding WAP record
+        */
+        TInt ConvertIAPIdL( TInt aIAPId );
+                       
+    private :
+        /**
+        * Pointer to UPnP settings engine
+        * Not owned
+        */
+        CUPnPSettingsEngine* iSetEng;
+
+        /**
+        * Pointer to UPnP File sharing engine
+        * Not owned
+        */
+        CUPnPFileSharingEngine* iFileEng;
+
+        /**
+        * Pointer to UPnP device name
+        * Not owned
+        */
+        HBufC* iDeviceName;
+        
+        /**
+        * Users selected IAP id
+        *
+        */
+        TInt iIapId;
+
+        /**
+        * Index for home network UI, to show the correct item as selected 
+        *
+        */
+        TInt iIndexForUi;
+        
+        /**
+        * The selection of Image& video sharing for Home Network UI
+        */
+        TBool iVisualImageSelection;
+        
+        /**
+        * The selection of music sharing for Home Network UI
+        */
+        TBool iVisualMusicSelection;
+        
+        /**
+        * The Array of the selected indexes user has made for sharing images 
+        * and videos
+        * owned
+        */
+        CArrayFix<TInt>* iImageSelectionArray;
+        /**
+        * The Array of the selected indexes user has made for sharing music 
+        * owned
+        */
+        CArrayFix<TInt>* iMusicSelectionArray;       
+        
+        };
+
+
+    /**
+     * Internal states of wizard 
+     */
+    enum TWizardStep
+        {
+        EInfo1 = 0,
+        EInfo2,
+        EDeviceName,
+        EInfo4,
+        EAccessPoint,
+        EInfo6,
+        EShareImages,
+        EShareMusic,
+        EInfo9,
+        EStoreSettings,
+        EFinished
+        };
+
+    /**
+     * C++ default constructor
+     */
+    CUPnPAppWizard();
+
+    /**
+     * Show the information note with OK BACK buttons
+     * @since S60 v3.1
+     * @param TInt, resource ID
+     * @return keycode of the button user has pressed.
+     */
+    TInt ShowInfoStepL( TInt aMain ) const;
+
+    /**
+     * Show the first step. The text is given in constructor
+     * @param TInt, resource ID
+     * @return keycode of the button user has pressed.
+     */
+    TInt ShowFirstStepL( TInt aMain ) const;
+    /**
+     * Shows popup with text and header and edit box
+     * @since S60 v3.1
+     * @param TInt, resource ID
+     * @return keycode of the button user has pressed.
+     */
+    TInt ShowTextStepL( TInt aMain );
+
+    /**
+     * Show the information note without buttons
+     * @since S60 v3.1
+     * @param TInt, resource ID
+
+     */
+    void ShowInfoNoteL( TInt aMain ) const;
+
+    /**
+     * Show the UI dialog with selection list
+     * @since S60 v3.1
+     * @param TInt, resource ID
+     * @return keycode of the button user has pressed.
+     */
+    TInt ShowListStepL( TInt aMain );
+
+
+    /**
+     * Determines the next wizard step
+     * @since S60 v3.1
+     * @param TInt& The keycode of the users selection from previous dialog
+
+     */
+    void SetNextStep( const TInt& aSelection );
+
+    /**
+     * Shows the step for setting shared content
+     * @since S60 v3.1
+     * @param TInt, resource ID
+     * @return keycode of the button user has pressed.
+     */
+    TInt ShowMultiselectionStepL( TInt aText );
+
+    /**
+     * Show error note with given resource id
+     * @since S60 v3.1
+     * @param TInt, resource ID
+     */
+    void ShowErrorNoteL( TInt aMain ) const;
+
+    /**
+     * Show wait note with given resource id
+     * @since S60 v3.1
+     * @param TInt, resource ID
+     */
+    void ShowWaitNoteL( TInt aMain );
+
+private: //From MUPnPFileSharingEngineObserver
+    /**
+     * Function informs when file sharing was enabled or disabled
+     * @since S60 3.1
+     * @param aEngine File sharing engine
+     * @param aError, error code
+     * @param aPhase ETrue if current phase is sharing activation,
+     * otherwise EFalse
+     */
+    void HandleSharingStatus( 
+        CUPnPFileSharingEngine& aEngine, 
+        TInt aError,
+        TBool aPhase );
+
+    /**
+     * Callback to inform if connection has been lost
+     * @since S60 3.1
+     * @param aEngine File sharing engine
+     */ 
+    void HandleSharingConnectionLost( 
+        CUPnPFileSharingEngine& aEngine );
+
+private:
+    /** 
+     * Shows progress note to indicate progress of sharing files
+     * @since S60 v3.1
+     * @param TInt, The number of objects
+     */
+    void  ShowProgressNoteL( TInt aObjectCount );
+
+    /**
+     * Called when waitnote wrapper is finished
+     * From MProgressDialogCallback
+     */
+    void DialogDismissedL( TInt aButtonId );
+
+    /**
+     * EPOC default constructor.
+     */
+    void ConstructL( const TDesC& aFirstStepText, 
+                     CUPnPFileSharingEngine* aEng );
+
+    void StepL();
+
+    TBool IsProcessDone() const;
+
+    /**
+     * Display info note after starting sharing content
+     * @since S60 v3.1
+     * @param TInt, Id of note header resource
+     * @param TInt, Id of note message resource
+     * @param TInt, Id of note resource
+     */
+    void DisplayInfoL(
+        TInt aHeaderResourceId,
+        TInt aMessageResourceId,
+        TInt aDialogResourceId );
+
+
+private:    // Data
+
+    CAknViewAppUi* iAppUi;  // Not owned
+    TInt iResFileOffset;   // Resource file offset
+    CEikonEnv* iCoeEnv; // Not owned
+    /**
+     * The position of the wizard
+     */
+    TInt iStep;
+    /**
+     * The class for retrieving and setting shared items
+     */
+    CUPnPFileSharingEngine* iFileEng;
+    /**
+     * The class for setting  the IAP id and deviceName
+     */
+    CUPnPSettingsEngine* iSetEng;
+    /**
+     * The storage for the user selections
+     */
+    CSelectionStorage* iSelections;
+    
+    /**
+     * Wait used in asynchronous operations
+     * Started when there is operation ongoing in filesharingengine
+     */
+    CActiveSchedulerWait iWait;
+
+    /** 
+     * Array for IAP names
+     */
+    CDesCArray* iIapNameArr;
+    
+    /**
+     * Status of the sharing when starting wizard
+     * ETrue = Sharing on
+     */
+    TBool iSharingState;
+   
+    /**
+     * Text for the first wizard step 
+     *
+     */
+    HBufC* iFirstStepText;
+
+    /** 
+     * Indicator if starting sharing is ongoing
+     */
+    TInt iStartingSharing;
+
+    TBool iDialogDismissed;
+    
+    /**
+     * stores indexes if img and/or video is shared marked 
+     */
+    CArrayFix<TInt>* iShareImgAndVideoArray;
+    
+    /**
+     * stores indexes if music is shared marked 
+     */
+    CArrayFix<TInt>* iShareMusicArray;
+    
+    /**
+     * Flag the FeatureManager is initialized or not
+     */
+    TBool iFeatureManagerInitialized;    
+    };
+
+#endif  // CUPNPAPPWIZARD
+
+// End of File