--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/psln/Inc/PslnUi.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,555 @@
+/*
+* Copyright (c) 2002-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: Personalisation application UI class.
+*
+*/
+
+
+#ifndef C_PSLNUI_H
+#define C_PSLNUI_H
+
+#include <aknViewAppUi.h>
+#ifndef RD_CONTROL_PANEL
+#include <akntabgrp.h>
+#include <akntabobserver.h>
+#endif //RD_CONTROL_PANEL
+#include <AknsSrvClient.h>
+#include <e32property.h>
+
+class CAknNavigationControlContainer;
+class CAknNavigationDecorator;
+class MAknBackgroundProcess;
+#ifndef RD_CONTROL_PANEL
+class CAknTabGroup;
+#endif //RD_CONTROL_PANEL
+class CPslnMainView;
+class CPslnPluginHandler;
+class CPslnFWPluginInterface;
+class CPslnIdleTaskCreateViews;
+class CPslnModel;
+class CPslnPropertySubscriber;
+class CPslnGeneralThemeView;
+
+
+/**
+ * 'AppUi' class.
+ *
+ * @since S60 v2.0
+ */
+class CPslnUi : public CAknViewAppUi,
+ public MAknsSkinChangeObserver
+#ifndef RD_CONTROL_PANEL
+ ,public MAknTabObserver
+#endif //RD_CONTROL_PANEL
+ {
+
+public:
+
+ /**
+ * C++ default constructor
+ */
+ CPslnUi();
+
+ /**
+ * Symbian default constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ ~CPslnUi();
+
+ /**
+ * From CEikAppUi.
+ * Takes care of command handling.
+ * @param aCommand command to be handled
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * From CEikAppUi.
+ * Handles a change to the application's resources
+ * which are shared across the environment.
+ * @param aType type of resources that have changed.
+ */
+ void HandleResourceChangeL( TInt aType );
+
+ /**
+ * From CAknViewAppUi.
+ * Activates a specified application view, without passing any message.
+ * The function leaves if activation of the view fails.
+ * @param aViewId Identifier of the view to activate.
+ */
+ void ActivateLocalViewL( TUid aViewId );
+
+ /**
+ * From MAknsSkinChangeObserver.
+ * Called by the skin server when skin content is changed and the
+ * connected client wants to be informed.
+ *
+ * @since 2.0
+ */
+ void SkinContentChanged();
+
+ /**
+ * From MAknsSkinChangeObserver.
+ * Called by the skin server to indicate that the current skin
+ * configuration has changed.
+ *
+ * @param aReason Reason code.
+ *
+ * @since 2.5
+ */
+ void SkinConfigurationChanged(
+ const TAknsSkinStatusConfigurationChangeReason aReason );
+
+ /**
+ * From MAknsSkinChangeObserver.
+ * Called by the skin server to indicate that the available
+ * skin packages have changed.
+ *
+ * @param aReason Reason code.
+ *
+ * @since 2.5
+ */
+ void SkinPackageChanged(
+ const TAknsSkinStatusPackageChangeReason aReason );
+
+ /**
+ * Returns pointer to Psln model which is owned by the AppUi.
+ *
+ * @return Psln model.
+ */
+ CPslnModel* Model() const;
+
+ /**
+ * Updates Tab index. If the parameters are not given, tab is set
+ * according to active selection in Main View.
+ *
+ * @param aMyId Uid of the active view.
+ * @param aMyTabIndex Index of the active tab.
+ * @since 3.1
+ */
+ void UpdateTabIndex( const TInt aMyId = KErrNotFound,
+ const TInt aMyTabIndex = KErrNotFound );
+
+ /**
+ * Creates the given view.
+ * @since 3.1
+ * @param aViewUid Uid of view to be created.
+ */
+ void CreateViewL( TUid aViewUid );
+
+ /**
+ * Returns application's CAknNavigationControlContainer.
+ * @since 3.1
+ * @return CAknNavigationControlContainer.
+ */
+ CAknNavigationControlContainer* NaviContainer() const;
+
+ /**
+ * Returns tab group.
+ * @since 3.1
+ * @return CAknNavigationDecorator.
+ */
+ CAknNavigationDecorator* PslnTabGroup();
+
+ /**
+ * Returns pointer to ECOM plugin handler which is owned by the AppUi.
+ * @since 3.1
+ * @return ECOM plugin handler.
+ */
+ CPslnPluginHandler* PluginHandler() const;
+
+ /**
+ * Add new view to Ui Class.
+ * @since 3.1
+ * @param aNewView new view to add to Ui class.
+ */
+ void AddNewViewL( CAknView* aNewView );
+
+ /**
+ * Indicate from caller class that Ui-class has now all the applicable views.
+ * @since 3.1
+ */
+ void AllViewsDone();
+
+ /**
+ * Handles errors when settings wallpapers.
+ * @param aError error code received from WallpaperUtils API.
+ */
+ void HandleImageErrorsL( TInt aError );
+
+#ifndef RD_CONTROL_PANEL
+ /**
+ * From MAknTabObserver.
+ * Takes care of tab handling.
+ * @since 3.1
+ * @param aIndex tab to be handled
+ */
+ void TabChangedL( TInt aIndex );
+#endif //RD_CONTROL_PANEL
+
+ /**
+ * Create views when application is idle.
+ * @since 3.1
+ */
+ void LoadViewsWhenIdleL();
+
+ /**
+ * Constructs tab group, containing all static views and
+ * ECOM plugin views.
+ * @since 3.1
+ */
+ void ConstructTabGroupL();
+
+ /**
+ * Toggles screen blanker on/off.
+ * @param aToggleValue ETrue activates screen blanker; EFalse removes it.
+ * @param aStatusPaneVisible indicates if the blanker should cover the
+ * statuspane as well. This is irrelevant, when removing the blanker.
+ * @since 3.1
+ */
+ void ToggleScreenBlankerL(
+ const TBool& aToggleValue,
+ const TBool& aStatusPaneVisible,
+ const TBool& aRealAct = ETrue );
+
+ /**
+ * Indicates if the UI class has deployed the skin already and is ready to
+ * receive further skin activation related commands.
+ * @return ETrue when UI class can handle a new skin activation related
+ * command, otherwise EFalse,
+ */
+ TBool IsReadyToHandleCommands();
+
+ /**
+ * Handles exit command correctly when leave occurs in application exit.
+ */
+ void HandleCmdExitLeave();
+
+ /**
+ * Sets title back to default (application name).
+ */
+ void SetTitleToDefaultL();
+
+ /**
+ * Binary flags to indicate if view is going to be created.
+ * Statuses are valid irregardless if view has, or has not
+ * been already created. These values cannot change dynamically.
+ *
+ */
+ enum TPslnViewSupport
+ {
+ EPslnScreensaverView = 0x00000001,
+ EPslnWallpaperView = 0x00000002
+ };
+
+ /**
+ * Gets view creation statuses as a bitmask.
+ * See TPslnViewSupport for optional views whose statuses
+ * can be inquiried.
+ * To check if a view is supported, check flag value.
+ * E.g. TBitflags views = ViewSupport();
+ * if ( views.IsSet( EPslnScreensaverView ) )
+ * {
+ * // Screensaver view is supported
+ * ...
+ *
+ * @return bitmask containing view support status.
+ */
+ TBitFlags ViewSupport();
+
+ void SetDRMProtectedSkinInSkinList(
+ const TBool& aProtectedSkinInList );
+
+ /**
+ * USB Callback.
+ */
+ static TInt USBCallBackL(TAny* aPtr);
+
+ /**
+ * USB Attach State.
+ * @return ETrue when USB already attached, otherwise EFalse,
+ */
+ TBool USBAttachState();
+
+private:
+
+ /**
+ * From CCoeAppUi.
+ * Handles events sent to the application by the window server.
+ * @param The event that occurred.
+ * @param The control that the event occurred in.
+ * (For key events this is the applications window group.)
+ */
+ void HandleWsEventL(
+ const TWsEvent& aEvent,
+ CCoeControl* aDestination );
+
+ /**
+ * From CEikAppUi.
+ * Key event handler.
+ */
+ virtual TKeyResponse HandleKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * @see SkinConfigurationChanged, same functionality, but
+ * leaving internal method.
+ */
+ void SkinConfigurationChangedL(
+ const TAknsSkinStatusConfigurationChangeReason aReason );
+
+ /* Activates skin. */
+ void ActivateSkinL();
+
+ /* Activates sounds in skin. */
+ void ActivateSoundsL();
+
+ /* Downloads skin. */
+ void DownloadSkinL();
+
+ /* Creates wait dialog and shows it */
+ void CreateAndShowWaitWrapperL(
+ MAknBackgroundProcess& aTask,
+ const TInt aResourceID, const TDesC& aString,
+ const TBool aShowImmediately = ETrue );
+
+#ifndef RD_CONTROL_PANEL
+ /* Adds given view plugin to TabGrp */
+ void AddPluginToTabL( CPslnFWPluginInterface& aPlugin );
+#endif //!RD_CONTROL_PANEL
+
+ /* Handles exit command. */
+ void HandleCmdExitL();
+
+ /* Shows error note. */
+ void ShowErrorNoteL( HBufC& aErrorBuf ) const;
+
+ /**
+ * Callback when idle time occurs.
+ */
+ static TInt DoCreateWaitNoteL( TAny* aAny );
+
+ /* Creates and shows wait note. */
+ void DoCreateWaitNoteL();
+
+ /* Activates skin, cannot leave. */
+ TInt ActivateSkin( const TInt aPslnStatus );
+
+#ifndef RD_CONTROL_PANEL
+ /* Non-leaving version of AddPluginToTabL. */
+ TInt AddPluginToTab( CPslnFWPluginInterface& aPlugin );
+#endif //!RD_CONTROL_PANEL
+
+ /* Set internal state to post-skin-deployment.*/
+ void SkinDeployedL();
+
+ /**
+ * Creates model instance.
+ * @since 3.1
+ */
+ void CreateModelL();
+
+ /**
+ * Callback when idle time occurs for skin activation.
+ */
+ static TInt DoActivateSkinL( TAny* aAny );
+
+ /**
+ * Activates skin
+ */
+ void DoActivateSkinL();
+
+// INLINE METHODS
+
+ /* Checks if internal state is on or off. */
+ inline TBool GetStatus( TInt aInternalState ) const;
+
+ /* Sets internal state on. Includes check that state is now off. */
+ inline void SetStateOn( TInt aInternalState );
+
+ /* Sets internal state off. Includes check that state is now on. */
+ inline void SetStateOff( TInt aInternalState );
+
+ /**
+ * Handle USB Callback.
+ */
+ void HandleUSBCallBackL();
+
+private: // data
+
+ /**
+ * Psln Model.
+ * Own.
+ */
+ CPslnModel* iModel;
+
+ /**
+ * Navigation Pane.
+ * Not own.
+ */
+ CAknNavigationControlContainer* iNaviPane;
+
+ /**
+ * Frame for tabgroup.
+ * Own.
+ */
+ CAknNavigationDecorator* iDecoratedTabGroup;
+
+ /**
+ * Main view.
+ * Not own (application framework 'owns' this).
+ */
+ CPslnMainView* iMainView;
+
+ /**
+ * ECOM view plugin handler.
+ * Own.
+ */
+ CPslnPluginHandler* iPluginHandler;
+
+ /**
+ * Internal status of Psln. The specific states are:
+ *
+ * EPslnCreated
+ * Psln has this status when default constructor
+ * has been called. It's set off, once all views
+ * have been added.
+ * EPslnSoundActivationPending
+ * Psln has this status when skin server about to activate
+ * sounds included in skin package. It is set off when
+ * activation is finished.
+ * EPslnListUpdateNeeded
+ * Psln has this status when skin list needs updating.
+ * EPslnWallpaperViewCreated
+ * This state is active when wallpaper view has been created.
+ * It is initially off and set on when either view is loaded
+ * due to idle activity, or when needed.
+ * EPslnScreenSaverViewCreated
+ * This state is active when screensaver view has been created.
+ * It is initially off and set on when either view is loaded
+ * due to idle activity, or when needed.
+ * EPslnGeneralViewCreated
+ * This state is active when general theme view has been created.
+ * It is initially off and set on when either view is loaded
+ * due to idle activity, or when needed.
+ * EPslnSkinActivated
+ * User has opted to activate a skin. This state prevails until
+ * skin server indicates that skin changes has been deployed.
+ * EPslnTabGroupCreated
+ * This state is active when tab group has been created.
+ * It is initially off and set on when either any other view is
+ * activated (other than main) or with time due to idle activity.
+ * EPslnModelCreated
+ * This state is active when model has been created.
+ * It is initially off and set on when either any other view is
+ * activated (other than main) or with time due to idle activity.
+ * EPslnSkinChangeRequested
+ * This state is active when user has indicated that he/she would
+ * would like to change the active skin (i.e. preview or actual
+ * activation). It is initially off and is set on when user selects
+ * Apply for the skin from General Theme view.
+ * It is again set off when skin server indicates that skin was
+ * either activated, or there was an error.
+ * This differs from EPslnSkinActivated in that this is purely tied
+ * to user activity.
+ * EPslnViewSupportChecked
+ * This state indicates that the view support has been checked.
+ * It is set active once, the view support status has been checked
+ * for the first time.
+ * EPslnNoScreenSaverView
+ * This state indicates that there is no Screensaver view in the
+ * application. View statuses are set when ViewSupport is called.
+ * EPslnNoWallpaperView
+ * This state indicates that there is no Wallpaper view in the
+ * application. View statuses are set when ViewSupport is called.
+ */
+ enum TPslnStatus {
+ EPslnCreated = 0x00000001,
+ EPslnProtectedSkinInList = 0x00000002,
+ //Not used = 0x00000004,
+ EPslnSoundActivationPending = 0x00000008,
+ EPslnListUpdateNeeded = 0x00000010,
+ EPslnWallpaperViewCreated = 0x00000020,
+ EPslnScreenSaverViewCreated = 0x00000040,
+ EPslnGeneralViewCreated = 0x00000080,
+ EPslnSkinActivated = 0x00000200,
+ EPslnTabGroupCreated = 0x00000400,
+ EPslnModelCreated = 0x00000800,
+ EPslnSkinChangeRequested = 0x00001000,
+ EPslnViewSupportChecked = 0x00002000,
+ EPslnNoScreenSaverView = 0x00004000,
+ EPslnNoWallpaperView = 0x00008000
+ };
+ TInt iPslnUiStatus;
+
+#ifndef RD_CONTROL_PANEL
+ /**
+ * Tab group.
+ * Not own - owned by iDecoratedTabGroup.
+ */
+ CAknTabGroup* iTabGroup;
+#endif //RD_CONTROL_PANEL
+
+ /**
+ * Creates views when application is idle.
+ * Own.
+ */
+ CPslnIdleTaskCreateViews* iIdleTask;
+ /**
+ *
+ */
+ CIdle* iIdleActivateSkin;
+
+ /**
+ *
+ */
+ CIdle* iIdleUpdateSkin;
+
+ /**
+ * USB Watch Property.
+ */
+ RProperty iEnableUSBWatchProperty;
+
+
+ /**
+ * USB Watch Property Subscriber.
+ * Own.
+ */
+ CPslnPropertySubscriber* iUSBWatchSubscriber;
+
+ /**
+ * USB Attached.
+ */
+ TBool iUSBAttached;
+
+ /**
+ * General Theme view.
+ * Not own (application framework 'owns' this).
+ */
+ CPslnGeneralThemeView* iGeneralThemeView;
+
+ };
+
+// Inline methods.
+#include "pslnui.inl"
+
+#endif // C_PSLNUI_H
+
+// End of File
+