uifw/AknGlobalUI/OldStyleNotif/Inc/AknSoftNotificationPlugin.h
changeset 0 2f259fa3e83a
child 10 9f56a4e1b8ab
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AknGlobalUI/OldStyleNotif/Inc/AknSoftNotificationPlugin.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2002-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:  Class header for CAknSoftNotificationSubject.
+*
+*/
+
+#ifndef __AKNSOFTNOTIFICATIONPLUGIN_H__
+#define __AKNSOFTNOTIFICATIONPLUGIN_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <eiknotapi.h>
+#include <eikcmobs.h>
+#include <aknnotedialog.h>
+#include <aknstaticnotedialog.h>
+#include <AknNotifyStd.h>
+#include <AknMediatorFacade.h> // Not the best for the purpose but will do just fine.
+#include <SecondaryDisplay/AknSecondaryDisplayDefs.h>
+#include <AknNotify.h>
+#include "AknSystemPopup.h"
+#include "AknGroupedNotifierNote.h"
+#include "AknNotifierControllerPlugin.h"
+#include "aknprivatesoftnotificationparameters.h"
+#include "aknmessagereaderlongpressdetector.h" // MAknGroupedNoteObserver    
+
+class CAknSmsViewerLauncher;
+class RDesReadStream;
+class CAknSoftNotificationSubject;
+class CAknDynamicSoftNoteEventManager;
+
+class TSoftNoteEntry
+    {
+public:
+    TSoftNoteEntry() : iType(ENoSoftNotification), iId(0), iCount(0), iCustomId(0) {};
+    TAknSoftNotificationType iType;
+    TInt iId;
+    TInt iCount;
+    TInt iCustomId;
+    };
+
+// Stack entry for Custom Soft Notifications.
+class CCustomNotifParams;
+
+NONSHARABLE_CLASS(AknSoftNoteSDObserver) : public MAknDialogMediatorObserver
+    {
+public: 
+    TAknDialogMediatorObserverCommand MediatorCommandL( TUid, TUid, TInt, const TDesC8& aData );
+    void NotifyMediatorExit(){}
+    void SetSoftNotificationSubject( CAknSoftNotificationSubject* aSubject );
+private:
+    CAknSoftNotificationSubject* iSubject;    
+    };
+
+/**
+ * Soft notification plugin to EikSrv.
+ */
+NONSHARABLE_CLASS(CAknSoftNotificationSubject) : 
+    public CBase, 
+    public MEikSrvNotifierBase2, 
+    public MAknGroupedNotifierNoteObserver, 
+    public MAknKeyLockObserver,
+    public MSoftNotificationObserver,
+    public MAknMessageNotifierObserver
+    {
+public:  // Constructors and destructor
+    static CAknSoftNotificationSubject* NewL(
+        MAknKeyLockController* aKeyLockObserver,
+        CAknGlobalNoteSubject* aGlobalNoteController);
+        
+public: // Functions from base classes        
+    /**
+     * From MAknKeyLockController 
+     * Called when the status of keylock changes.
+     *
+     * @param aStatus the new status of the keylock.
+     */
+    virtual void KeyLockStatusChange(TKeyLockStatus aStatus);
+    
+    /**
+     * From MEikSrvNotifierBase.
+     * Method to release the EikSrv plugin
+     */
+    void Release();
+
+    /**
+     * From MEikSrvNotifierBase. 
+     * Method for registering the EikSrv plugin.
+     *
+     * @return TNotifierInfo Struct containing the plugin priorities etc.
+     */
+    TNotifierInfo RegisterL();
+
+    /**
+     * From MEikSrvNotifierBase. 
+     * Method for getting the notifier info.
+     * 
+     * @return TNotifierInfo Struct containing the plugin priorities etc.
+     */
+    TNotifierInfo Info() const;
+
+    /**
+     * From MEikSrvNotifierBase. 
+     * Method for starting the plugin. Synchronous version.
+     *
+     * @param aBuffer Buffer containing the parameters for the plugin, packaged in 
+     *                TPckg<SAknSoftNotificationParams>.
+     * @return This method will return KNullDesC.
+     */
+    TPtrC8 StartL(const TDesC8& aBuffer);
+
+    /**
+     * From MEikSrvNotifierBase.
+     * Method for starting the plugin. Asynchronous version.
+     *
+     * @param aBuffer Buffer containing parameters for the plugin, packaged in 
+     *                TPckg<SAknSoftNotificationParams>.
+     * @param aReplySlot Return value of any type. Not used in this case.
+     * @param aMessage RMessage to notify that the execution has ended.
+     */
+    void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+
+    /**
+     * From MEikSrvNotifierBase.
+     * Method for cancelling the plugin execution.
+     */
+    void Cancel();
+
+    /**
+     * From MEikSrvNotifierBase. 
+     * Method for updating the plugin while execution is in progress.
+     *
+     * @param aBuffer Buffer containing parameters for the plugin, packaged in 
+     *                TPckg<SAknSoftNotificationParams>.
+     * @return This method will return KNullDesC.
+     */
+    TPtrC8 UpdateL(const TDesC8& aBuffer);
+
+    /**
+     * From MEikSrvNotifierBase.
+     * This method is not used but is required because of pure virtuality in base class.
+     *
+     * @param aBuffer Buffer containing parameters for this plugin.
+     */
+    void HandleMessageL(const TDesC8& aBuffer);
+        
+    /**
+     * From MAknGroupedNotifierNoteObserver.
+     * Called when user has pressed a key in the grouped soft notification dialog.
+     *
+     * @param aCommandId The id of the button the user pressed.
+     * @param aSelectedItem The item that was selected when the user pressed a key.
+     */
+    void GroupedNoteCompletedL(TInt aCommandId, TAknGroupedNotifierItem aSelectedItem = EMaxItem);
+
+    /**
+     * From MAknGroupedNotifierNoteObserver.
+     * Support for adding new items to grouped form.
+     *
+     * @since S60 3.0     
+     * @param aText Array into which add new texts (item amount cannot be changed after this).
+     * @param aOrder KeyArray for list to manage its entries, which must be uniqued (at a time) 
+     *               and these must not collide with fixed values defined in 
+     *               TAknGroupedNotifierItem. 
+     */
+    void AddItemsL(CDesCArray& aTexts, CArrayFix<TInt>& aOrder);
+    
+    /**
+     * From MAknGroupedNotifierNoteObserver.
+     * Custom soft notifications may have custom softkeys. This method returns the softkeys
+     * and the accept softkey id for the given custom notification.
+     *
+     * @since S60 3.1
+     * @param aCustomItem A custom notification for which to search softkeys.
+     * @param aSoftkeyResourceId On return, the softkeys resource identifier.
+     * @param aAcceptKeyId On return, the key that is used to accept the grouped notifier item, 
+     *        i.e. to launch the handler application.
+     * @param aLeftSoftkey Custom text for left softkey.
+     * @param aRightSoftkey Custom text for right softkey.
+     */      
+    void SoftkeysForCustomItem(TAknGroupedNotifierItem aCustomItem, TInt& aSoftkeyResourceId, 
+        TInt& aAcceptKeyId, TDes& aLeftSoftkey, TDes& aRightSoftkey);
+
+    // From MSoftNotificationObserver
+    void SoftNoteCompleted(TInt aId, TInt aCommand);
+    TBool ShowSoftNoteL(TInt aPriority, const TDesC& aText);
+    TBool CancelSoftNote(TInt aPriority);
+
+public: // from MAknMessageNotifierObserver
+
+    /**
+     * From MAknMessageNotifierObserver. 
+     * 
+     * @return true if shown notifier is a message or a email 
+     */
+    TBool MessageNotifierShown();
+
+    /**
+     * From MAknMessageNotifierObserver. 
+     * 
+     * @return CEikButtonGroupContainer of the grouped note
+     */
+    CEikButtonGroupContainer* ButtonGroupContainer();
+    
+private:
+    void ConstructL();
+
+    ~CAknSoftNotificationSubject();
+
+    /**
+     * The constructor is private. 
+     */
+    CAknSoftNotificationSubject(
+        MAknKeyLockController* aKeyLockObserver,
+        CAknGlobalNoteSubject* aGlobalNoteController);
+
+    void HandleNotifierMessageL(const TDesC8& aBuffer, TInt& aNoteId );
+
+    /**
+     * The following method is called after the notifier has been started to reflect the changes
+     * to the UI mechanism. The parameter aType is the most recently requested soft notification 
+     * type.
+     */
+    void UpdateNoteL(TAknSoftNotificationType aType, const TDesC& aText, TInt aCount, TInt aCountChanged);
+
+    void DisplayUngroupedNotifierL(
+        TAknSoftNotificationType aType, 
+        const TDesC& aText, 
+        TInt aCount = 0);
+
+    void RemoveByType(TAknSoftNotificationType aType, TInt aId = 0);
+
+    TAknSoftNotificationType TypeFromId(TInt aId);
+    void CompleteId(TInt aId);
+    void ScheduleGroupedNotifierL();
+    void DoSoftNoteCompletedL(TInt aId, TInt aCommand);
+
+    /**
+     * A helper method to show the grouped soft notification dialog.
+     */
+    void ShowGroupedNotificationL();
+    
+    /**
+     * Helper method to find out if a grouped soft notification should be formed.
+     */
+    TBool IsGroupedFormed();
+
+    void LaunchSelectNetworkAppL();
+    void LaunchUSSDAppL();
+    void LaunchMissedCallsAppL();
+    void LaunchNewMessagesAppL();
+    void LaunchNewMailAppL();
+    void LaunchNewCbsAppL();
+    void LaunchNewVoiceMailAppL(TInt aType);
+    
+    void LaunchViewL(
+        const TVwsViewId& aViewId, 
+        TUid aCustomMessageId, 
+        const TDesC8& aCustomMessage);
+
+    void SaveSoftNotificationsL();
+    void SaveNoteL(RWriteStream& aFile, TSoftNoteEntry& aEntry);
+
+    void LoadAndQueueSoftNotesL();
+    void LoadAndQueueNoteL(RReadStream& aStream);
+
+    void ClearAllNotes();
+
+    /**
+     * Method for resetting user inactivity timers (e.g. screen saver timer).
+     */
+    void ReportUserActivity();
+
+    TBool CheckIfAlreadyExists(TAknSoftNotificationType aType);
+
+    TBool AutoLockEnabled();
+
+    void SetNcnFlag(TBool aValue);
+    static TInt HandleNcnFlagStateChange(TAny *aPtr);
+
+    void HandleCustomNoteCompletedL(CCustomNotifParams* aParams, TInt aCommand);
+    
+    /**
+     * Called when custom note has been canceled by the user.
+     * 
+     * @param aParams Custom notification data.
+     * @param aCommand Command that canceled the notification.
+     */
+    void HandleCustomNoteCanceledL( CCustomNotifParams* aParams, TInt aCommand );
+    
+private: // Data
+    TNotifierInfo iInfo;
+    MAknKeyLockController* iKeyLockController;
+    CAknGlobalNoteSubject* iGlobalNoteController;
+    
+    // The array keeps track of unselected soft notifications in priority order.
+    TInt iSoftNotificationAmounts[EMaxSoftNotification];
+
+    CArrayFixFlat<TSoftNoteEntry>* iSoftNoteEntryList;    
+    TAknSoftNotificationType iLatestType;
+    
+    CAknGroupedNotifierNote* iGroupedNote;
+    CAknSmsViewerLauncher* iSmsViewer;
+
+    /// Some of the data of CCustomNotifParams is referred from 
+    /// CAknGlobalNoteSubject. Make sure the source is not deleted before
+    /// referrer is removed.
+    CCustomNotifParams* iCustomNoteParamsStack;
+
+    friend class AknSoftNoteSDObserver;
+    
+private: // New member functions.
+    CCustomNotifParams* SeekCustomNoteForId(TInt aID, TBool aSeekByGNoteId = EFalse);
+    void AddNewCustomNoteL(RDesReadStream& readStream, TInt aCount, TBool aNewNote = EFalse );
+    void AddNewCustomNoteL(RReadStream& readStream, TInt aCount, TBool aNewNote = EFalse );
+    void RemoveCustomNoteForId(TInt aID, TBool aSeekByGNoteId = EFalse);
+    void LaunchNewIMAppL();
+    
+    /**
+     * Load unique identifier from persistent store.
+     */
+    void LoadUniqueIdL();
+    /**
+     * Save unique identifier to persistent store.
+     */
+    void StoreUniqueIdL();
+    /**
+     * Increases unique identifier counter and finds next free identifier.
+     * @return Next free unique identifier.
+     */
+    TInt GenerateUniqueId();
+    /**
+     * Write response from given parameters.
+     * @param aResponse Response buffer to write into.
+     * @param aNoteId Notification id to write. 
+     */
+    void WriteResponse( TDes8& aResponse, TInt aNoteId ) const;
+
+private: // New member data.
+    TBool iNotificationsSaved;
+    CIdle* iIdle;
+    static TInt SetIdleStateFalse(TAny* aThis);
+    TBool iKeysLocked;
+    
+public: // To allow static method above access this.
+    TBool iIdleStateActive;
+    
+private:
+    CAknMediatorFacade* iCoverClient;
+    AknSoftNoteSDObserver iObsStub;
+    /// Unique dynamic soft notification counter.
+    TInt iUniqueIdCounter;
+    /// Dynamic soft notification response buffer. Space for TInt (32bit).
+    TBuf8<4> iResponseMsg;
+    /// Not own. Dynamic soft notification event manager.
+    CAknDynamicSoftNoteEventManager* iDynamicSoftNoteManager;
+    /// Own. Central Repository to read messaging settings. 
+    CRepository* iMessagingRepository;
+    };
+
+#endif // __AKNSOFTNOTIFICATIONPLUGIN_H__
+
+// End of File