idlefw/plugins/shortcutplugin/inc/caiscutengine.h
changeset 0 79c6a41cd166
child 1 844b978f8d5e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/plugins/shortcutplugin/inc/caiscutengine.h	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,667 @@
+/*
+* Copyright (c) 2005-2006 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:  Shortcut plug-in engine class.
+*
+*/
+
+
+#ifndef CAISCUTENGINE_H
+#define CAISCUTENGINE_H
+
+#include <apgnotif.h>                   // For MApaAppListServObserver
+#include <msvapi.h>                     // For MMsvSessionObserver
+#include <FavouritesDb.h>               // For RFavouritesDb
+#include <FavouritesDbObserver.h>       // For MFavouritesDbObserver
+#include <ConeResLoader.h>
+#ifdef __WEB_WIDGETS
+#include <WidgetRegistryClient.h>
+#endif
+
+#include <aiutility.h>
+
+#include "aiscutdefs.h"
+#include "taiscutparser.h"
+#include "aicontentpublisher.h"
+
+class CCoeEnv;
+class CVwsSessionWrapper;
+class CActiveFavouritesDbNotifier;
+class CAiScutPlugin;
+class CAiScutShortcut;
+class CRepository;
+class CAiScutRepositoryWatcher;
+class CAiScutTargetShutter;
+class CKeyLockPolicyApi;
+
+/**
+ * Defines the different scenarios of shortcut access checking.
+ */
+enum TScutAccessCheckType
+{
+    EScutCheckMailbox,
+    EScutCheckApp,
+    EScutCheckBkm,
+    EScutCheckAll
+};
+
+/**
+ * Defines which default can be used, when daulting is needed (uninstall/mem card removed)
+ */
+enum TScutDefault
+{
+    EScutUserDefined = 0,
+    EScutDefaultToPlatform,
+    EScutDefaultToTheme
+};
+
+enum TScutLockKey
+    {
+    EScutFirstLockKey,
+    EScutSecondLockKey
+};
+
+/**
+ *  Shortcut plug-in engine class.
+ *
+ *  Handles most of plug-in activity.
+ *
+ *  @since S60 v3.2
+ */
+class CAiScutEngine : public CBase
+                    , public MMsvSessionObserver
+                    , public MApaAppListServObserver
+                    , public MFavouritesDbObserver
+{
+
+public:
+
+    /**
+     * First phase contructor.
+     *
+     * @since S60 v3.2
+     * @param aPlugin Reference to the main plug-in class
+     */
+    static CAiScutEngine* NewL(CAiScutPlugin& aPlugin);
+
+    virtual ~CAiScutEngine();
+
+    // from base class MMsvSessionObserver
+
+    /**
+     * Handles an event from the message server
+     *
+     * @since S60 v3.2
+     * @param aEvent Indicates the event type.
+     * @param aArg1 Event type-specific argument value
+     * @param aArg2 Event type-specific argument value
+     * @param aArg3 Event type-specific argument value
+     */
+    void HandleSessionEventL(
+        TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+    // from base class MApaAppListServObserver
+
+    /**
+     * From MApaAppListServObserver.
+     * Handles a change in the application list
+     *
+     * @since S60 v3.2
+     * @param aEvent Event id
+     */
+    void HandleAppListEvent(TInt aEvent);
+
+    /**
+     * Resumes the engine
+     *
+     * @since S60 v3.2
+     */
+    virtual void ResumeL(TBool aPublishAll, TAiTransitionReason aReason);
+
+    /**
+     * Suspends the engine
+     *
+     * @since S60 v3.2
+     */
+    void Suspend();
+
+    /**
+     *
+     */
+    static TInt HandleShortcutsChanged(TAny* aPtr);
+
+    /**
+     *
+     */
+    static TInt HandleHiddenAppsChanged(TAny* aPtr);
+
+    /**
+     *
+     */
+    TBool IsHidden(const TUid& aAppUid) const;
+
+    /**
+     * Handles an event sent by the AI framework
+     *
+     * @since S60 v3.2
+     * @param aEvent Event (service) id
+     * @param aParam Event parameter(s)
+     */
+    virtual void HandleAiEventL(TInt aEvent, const TDesC& aParam);
+
+    /**
+     * Called by the timer. Retries the access check for shortcuts.
+     *
+     * @since S60 v3.2
+     */
+    void RetryAccessCheck();
+
+    /**
+     * Checks if application is midlet or widget.
+     * @param aUid Application uid
+     * @since S60 v3.2
+     */
+    TBool IsNonNative(const TUid& aUid);
+    
+    TBool IsHiddenFromFSW( const TUid& aAppUid );
+#ifdef __WEB_WIDGETS
+    /**
+     * Ask client session if given UID is widget.
+     */
+    TBool IsWidget(const TUid& aUid);
+#endif
+
+    /**
+     * Handles call state changes (non-static version).
+     *
+     * @since S60 v3.2
+     */
+    void HandleCallStateChange();
+
+    /**
+     * Merges the user defined shortcuts with the defaults.
+     * @param aType  shortcut type
+     * @param aRecreateAll forces the recreation of shortcuts
+     * @since S60 v3.2
+     */
+    void MergeShortcuts(TShortcutType aType, TBool aRecreateAll);
+
+    /**
+     *Get Application title
+     */
+    TBool GetAppTitle(
+        const TUid&         aAppUid,
+        const TUid&         aViewId,
+        TDes&               aTitle,
+        TAiScutAppTitleType aType);
+
+    /**
+     * Returns the application architecture server session owned by the engine
+     *
+     * @since S60 v3.2
+     * @return Reference to RApaLsSession
+     */
+    inline RApaLsSession& ApaSession();
+
+    /**
+     * Returns reference to the bookmark database owned by the engine
+     *
+     * @since S60 v3.2
+     * @return Reference to RFavouritesDb
+     */
+    inline RFavouritesDb& FavouritesDb();
+
+    /**
+     * Returns the message server session owned by the engine
+     *
+     * @since S60 v3.2
+     * @return Pointer to CMsvSession
+     */
+    inline CMsvSession* MsvSession();
+
+    /**
+     * Returns a pointer to view server session wrapper.
+     *
+     * @since S60 v3.2
+     * @return Pointer to view server session wrapper
+     */
+    inline CVwsSessionWrapper* VwsSession();
+
+    /**
+     * Returns a pointer to the coe environment
+     *
+     * @since S60 v3.2
+     * @return Pointer to coe environment
+     */
+    inline CCoeEnv* Env();
+
+    /**
+     * Creates the shortcuts merging the defaults with user defined ones.
+     *
+     * @since S60 v3.2
+     */
+    void CreateShortcutsL();
+
+protected:
+
+
+    /**
+     * C++ constructor
+     *
+     * @since S60 v3.2
+     * @param aPlugin Reference to the main plug-in class
+     */
+    CAiScutEngine(CAiScutPlugin& aPlugin);
+
+    void ConstructL();
+
+protected:
+
+    /**
+     * Merges the user defined shortcuts with the defaults.
+     * Leaving version
+     * @param aType  shortcut type
+     * @param aRecreateAll forces the recreation of shortcuts
+     * @since S60 v3.2
+     */
+    void MergeShortcutsL(TShortcutType aType, TBool aRecreateAll);
+
+    /**
+     * Checks shortcut accessibility. If the AppArc server or message server
+     * respond that they are not ready, a timer is launched to check later.
+     *
+     * @since S60 v3.2
+     * @param aCheckType Specifies which kind of shortcuts should check its access
+     * @param aPublishAll All shortcuts are published
+     */
+    void CheckAccessAndPublish(TInt aCheckType, TBool aPublishAll);
+
+    /**
+     * Tells each shortcut to check whether or not its target is accessible.
+     * Shortcuts will revert to the default setting if the user setting is
+     * not accessible.
+     *
+     * @since S60 v3.2
+     * @param aCheckType Specifies which kind of shortcuts should check its access
+     * @param aPublishAll All shortcuts are published
+     */
+    void CheckAccessAndPublishL(TInt aCheckType, TBool aPublishAll);
+
+    /**
+     * Finds the shortcut object with the given id
+     *
+     * @since S60 v3.2
+     * @param aId Shortcut id
+     * @return Shortcut index or KErrNotFound
+     */
+    TInt FindShortcutIndex(TInt32 aId);
+
+    /**
+     * Handles the shortcut launch by index.
+     *
+     * @since S60 v3.2
+     * @param aParam Index of the shortcut to launch
+     */
+    void HandleLaunchByIndexL(const TDesC& aParam);
+
+    /**
+     * Handles the special launching of a shortcut. The 
+     * launching can be done based on the location of 
+     * the shortcut (sk, toolbar item etc) or based on the
+     * application it points to. Currently when this function is
+     * called to a shortcut that points to appshell the fastswap
+     * window is opened
+     * 
+     * @since s60 v5.0
+     * @param aParam Index of the shortcut to perform the special launch
+     */
+    void HandleLaunchByIndexAlternateL(const TDesC& aParam);
+    /**
+     * Handles the shortcut launch by value
+     *
+     * @since S60 v3.2
+     * @param aParam Value of the shortcut to launch
+     */
+    void HandleLaunchByValueL(const TDesC& aParam);
+
+    /**
+     * Shows the plug-in settings dialog.
+     *
+     * @since S60 v3.2
+     */
+    void ShowSettingsL(const TDesC& aParam);
+
+    /**
+     * Shows the plug-in setting.
+     *
+     * @since S60 v5.0
+     */
+    void ShowSettingL(const TDesC& aParam);
+    
+    /**
+     * Opens the fast swap window
+     * 
+     * @since S60 v5.0
+     */
+    void OpenFastSwap();
+    /**
+     * Handles PS commands from WSPlugin.
+     *
+     * @since S60 v3.2
+     */
+    static TInt HandlePSCommand(TAny* aAny);
+
+    /**
+     * Handles call state changes.
+     *
+     * @since S60 v3.2
+     */
+    static TInt CallStateChangeCallback(TAny* aPtr);
+
+    /**
+     * Callback for delay timer
+     */
+    static TInt DelayTimerCallBack(TAny *aSelf );
+        
+    
+    /**
+     * Get soft key uid
+     *
+     * @since S60 v3.2
+     * @param aSoftkeyId shortcut index
+     */
+    TUid SoftkeyUid(TUint32 aSoftkeyId);
+
+    /**
+     *Check softkey delay is required
+     *
+     * @since S60 v3.2
+     * @param AppUid application uid     
+     */
+    TBool IsDelayRequired(TUid aAppUid);
+
+    /**
+     * Handles PS commands from WSPlugin (leaving version).
+     *
+     * @since S60 v3.2
+     */
+    void DoHandlePSCommandL();
+
+    /**
+     * Activates phone/video call application
+     *
+     * @since S60 v3.2
+     */
+    void ActivateTopMostApp();
+
+    /**
+     * Check MsvSession is Needed
+     */
+    TBool IsMsvSessionNeeded();
+
+    /**
+     * Check Bookmark Observer is Needed
+     */
+    TBool IsBookmarkObserverNeeded();
+
+    /**
+     * Load application titles list
+     */
+    void LoadAppTitleListL();
+
+    /**
+     * Get hidden applications
+     */
+    void GetHiddenAppsL();
+    
+    void CheckForThemeDefaultReinstalledL();
+
+    TBool IsLockKey( TInt aScanCode, TScutLockKey aLockKey ) const;
+
+    TInt AddOverrideIcon( TAiScutIcon &aIcon );
+
+    /**
+     * Starts a delay timer that calls HandleLaunchByIndexL() after
+     * a short delay. Delay is read from cenrep with the key KAIKeyLockTimeout
+     * 
+     * @param aParam The parameter to pass to HandleLaunchByIndexL()
+     * 
+     */
+    void DelayedLaunchByIndexL( const TDesC &aParam );
+private: // From MFavouritesDbObserver
+
+    /**
+     * Handles database event.
+     * @param aEvent Database event.
+     */
+    void HandleFavouritesDbEventL(RDbNotifier::TEvent aEvent);
+
+protected:  // data
+
+    /**
+     * Shortcut objects.
+     * Own.
+     */
+    RAiShortcutArray                iShortcuts;
+
+    /**
+     * Shortcut objects for storing theme default scuts.
+     * Own.
+     */
+    RAiShortcutInfoArray            iThemeShortcuts;
+    
+    /**
+     * Flags for shortcuts to indicate whether platform or theme default is used.
+     */
+    RArray<TScutDefault>            iDefaultUsed;
+
+    /**
+     * Central Repository session.
+     * Own.
+     */
+    CRepository*                    iRepository;
+
+    /**
+     * Notifier for changes in the application list
+     * (installations / uninstallations).
+     * Own.
+     */
+    CApaAppListNotifier*            iAppNotifier;
+
+    /**
+     * Notifier for changes in the shortcut settings.
+     * Own.
+     */
+    CAiScutRepositoryWatcher*       iSettingsNotifier;
+
+    /**
+     * Message server session.
+     * Own.
+     */
+    CMsvSession*                    iMsvSession;
+
+    /**
+     * Timer that performs the availability check after a given delay.
+     * Own
+     */
+    CPeriodic*                      iTimer;
+
+    /**
+     * Reference to the plug-in.
+     * Not own.
+     */
+    CAiScutPlugin&                  iPlugin;
+
+    /**
+     * Application architecture server session.
+     */
+    RApaLsSession                   iApaSession;
+
+    /**
+     * Bookmark database session.
+     * Own.
+     */
+    RFavouritesSession              iBookmarkSess;
+
+    /**
+     * Bookmark database.
+     * Own.
+     */
+    RFavouritesDb                   iBookmarkDb;
+
+    /**
+     * Bookmark database change observer.
+     * Own.
+     */
+    CActiveFavouritesDbNotifier*    iBookmarkDbObserver;
+
+    /**
+     * View server session wrapper.
+     * Own
+     */
+    CVwsSessionWrapper*             iVwsSession;
+
+    /**
+     * Flag to indicate that all shortcus are to be published. Used when resuming.
+     */
+    TBool                           iPublishAll;
+
+    /**
+     *Call key event observer
+     * Own
+     */
+    MAiPSPropertyObserver*          iKeyEventObserver;
+
+    /**
+     * Call state PS observer.
+     * Own.
+     */
+    MAiPSPropertyObserver*          iCallStateObserver;
+
+    /**
+     * Call state
+     */
+    TBool                           iActiveCall;
+
+    /**
+     * First keylock key
+     */
+    TInt                            iFirstLockKey;
+
+    /**
+     * First keylock key pressed flag to ensure first lock has been
+     * pressed when skipping key lock. Enabling the correct response to
+     * skip command.
+     */
+    TBool                           iFirstLockKeyPressed;
+
+    /**
+     * Second keylock key
+     */
+    TInt                            iSecondLockKey;
+
+    /**
+     * Resource loader for common text resources.
+     */
+    RConeResourceLoader             iResourceLoaderTexts;
+
+    /**
+     * Resource loader for sendui text resources.
+     */
+    RConeResourceLoader             iResourceLoaderSendUi;
+
+    /**
+     * Coe environment.
+     * Not own.
+     */
+    CCoeEnv*                        iEnv;
+
+    /**
+     * Array of UIDs which are hidden from the TARM
+     */
+    RArray<TUid>                    iHiddenApps;
+
+    /**
+     * Central repository object for Hidden Apps
+     * Own
+     */
+    CRepository*                    iHiddenAppsRepository;
+
+    /**
+     * Central repository change handler for Hidden Apps
+     * Own
+     */
+    CAiScutRepositoryWatcher*       iHiddenAppsNotifier;
+
+    /**
+     * Application titles list
+     */
+    RArray<TAiScutAppTitleEntry>    iAppTitleList;
+
+    /**
+     * Own
+     */
+    CAiScutTargetShutter*           iScutShutter;
+
+    /**
+     *
+     */
+    TBool                           iSoftkeyAppRunning;
+    
+#ifdef __WEB_WIDGETS
+    /**
+     * Widget registry client session to check if UID means widget.
+     */
+    RWidgetRegistryClientSession    iWidgetRegistry;
+    TBool                           iWidgetRegistryConnected;
+#endif
+    /**
+    * for parsing the icon overrides and softkeys
+    */
+    TAiScutParser                   iParser;
+
+    /**
+     * Override icons and softkeyicons are held here
+     */
+    RArray <TAiScutIcon>    iIcons;
+
+    /**
+     * For checking keylock buttons
+     * Own
+     */
+    CKeyLockPolicyApi *iKeylockApi;
+    /**
+     * Timer user to delay the launching
+     * of specific shortcuts.
+     * Own
+     */
+    CPeriodic *iDelayTimer;
+    
+    /**
+     * Command passed to HandleLaunchByIndexL()
+     * when delayed launching is used
+     * Own
+     */
+    HBufC    *iDelayedLaunchCmd;
+    
+    /**
+     * Delayed launching delay. Read from cenrep
+     */
+    TInt iDelayTimerDelay;
+};
+
+#include "caiscutengine.inl"
+
+#endif // CAISCUTENGINE_H
+
+// End of File.