securitydialogs/lockapp/inc/lockappstatecontrol.h
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/securitydialogs/lockapp/inc/lockappstatecontrol.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,322 @@
+/*
+* 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:  Controls lock states (keyguard locked/unlocked, devicelock)
+ *
+*/
+
+
+#ifndef __LOCKAPPSTATECONTROL_H__
+#define __LOCKAPPSTATECONTROL_H__
+
+// INCLUDES
+#include "lockappobserverlist.h"
+#include "lockappstatecontrolinterface.h"
+#include "lockappobserverinterface.h"
+#include <lockappclientserver.h>
+
+// FORWARD DECLARATIONS
+class CLockAppBaseControl;
+class CLockAppIdleControl;
+class CLockAppKeyguardControl;
+class CLockAppDevicelockControl;
+class CLockAppEcsDetector;
+class CLockAppPubSubObserver;
+class CAknIncallBubble;
+
+/**
+ *  CLockAppStateControl class is the main locking state control class. 
+ *  Class is derived from CLockAppObserverList observer list class. 
+ *  Does not own visible user interface, but directs window server events like 
+ *  key events to window-owning child controls (keyguard ui, emergency support). 
+ *  All lock state changes should be handled through this class.
+ *
+ *  @lib    lockapp
+ *  @since  5.0
+ *  @author Joona Petrell
+ *  @author Tamas Koteles
+ */
+class CLockAppStateControl : public CLockAppObserverList, public MLockAppStateControl,
+		public MLockAppObserverInterface
+	{
+	public:
+
+		/**
+		 * Two-phased constructor.
+		 */
+		static CLockAppStateControl* NewL( );
+
+		/**
+		 * Destructor.
+		 */
+		~CLockAppStateControl( );
+
+	private:
+
+		/**
+		 * C++ default constructor.
+		 */
+		CLockAppStateControl( );
+
+		/**
+		 * Second phase constructor allowed to fail (leave).
+		 */
+		void ConstructL( );
+
+	public:
+
+		/**
+		 * Activate keyguard lock.
+		 *
+		 * @param aWithNote if "keys locked" note is shown
+		 * @return KErrAlreadyExists if already enabled
+		 *         KErrPermissionDenied if devicelock is activated
+		 *         KErrNone if succeeded
+		 */
+		TInt EnableKeyguardL( TBool aWithNote );
+
+		/**
+		 * Dectivate keyguard lock.
+		 *
+		 * @param aWithNote if "keys active" note is shown.
+		 * @return KErrAlreadyExists if already disabled
+		 *         KErrPermissionDenied if devicelock is activated
+		 *         KErrNone if succeeded
+		 */
+		TInt DisableKeyguardL( TBool aWithNote );
+
+		/**
+		 * Activate devicelock.
+		 *
+		 * @param aReason the device locking reason.
+		 * @return KErrAlreadyExists if already enabled.
+		 *         KErrNone if succeeded
+		 */
+		TInt EnableDevicelockL( TDevicelockReason aReason = EDevicelockManual );
+
+		/**
+		 * Dectivate devicelock.
+		 *
+		 * @return KErrAlreadyExists if already disabled
+		 *         KErrPermissionDenied if keyguard is activated
+		 *         KErrNone if succeeded
+		 */
+		TInt DisableDevicelockL( );
+
+		/**
+		 * Offer to enable keyguard by showing "offerkeylock" note.
+		 * @return KErrPermissionDenied if keyguard/devicelock already activated
+		 *         KErrNone if succeeded
+		 */
+		TInt OfferKeyguard( );
+
+		/**
+		 * Offer to enable keyguard by showing "offerkeylock" note.
+		 * 
+		 * @return KErrNone if succeeded
+		 *         KErrPermissionDenied if keyguard not enabled
+		 */
+		TInt ShowKeysLockedNote( );
+
+		/**
+		 * External access to lock state
+		 *
+		 * @return Current lock state
+		 */
+		TLockStatus LockStatus( ) const;
+
+		/**
+		 * External access to lock environment
+		 *
+		 * @return Current environment state mask
+		 */
+		TUint EnvironmentStatus( ) const;
+
+		/**
+		 * Only used for internal testing.
+		 * @return error code
+		 */
+		TInt ExecuteInternalTest( );
+
+	public:
+		// From MLockAppObserverInterface
+
+		/**
+		 * Handle Central Repository observer callback.
+		 */
+		void HandleCenRepNotify( TUid aCenRepUid, TUint32 aKeyId, TInt aValue );
+
+		/**
+		 * Handle Publish & Subscribe observer callback.
+		 */
+		void HandlePubSubNotify( TUid aPubSubUid, TUint aKeyId, TInt aValue );
+
+	public:
+		// from CCoeControl
+
+		TInt CountComponentControls( ) const;
+
+		CCoeControl* ComponentControl( TInt aIndex ) const;
+
+		TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+		void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination );
+
+		void HandleResourceChange( TInt aType );
+
+	private:
+
+		/**
+		 * Creates the second "visibility gate" window group.
+		 */
+		void CreateVisibilityGateWgL( );
+
+		/**
+		 * Logs the telephony P&S call state.
+		 */
+		void PrintCallState( TInt aValue );
+
+		/**
+		 * Update the environment variable with the event.
+		 * @return ETrue if the environment value has changed
+		 *         EFalse otherwise
+		 */
+		TBool HandleEnvironmentChange( TUint aEventMask, TBool aEnable );
+
+		/**
+		 * Check if given transition is valid.
+		 * @return KErrNone if transition is legal
+		 *         KErrAlreadyExists if LockApp already is in requested state
+		 *         KErrPermissionDenied if illegal transition
+		 */
+		TInt CheckIfLegal( TLockAppMessageReason aReason );
+
+		/**
+		 * Handle lock state change. Should only called from
+		 * method PostStatusChangeL.
+		 *
+		 * @param aLockStatus The new lock state
+		 */
+		void HandleLockStatusChangedL( TLockStatus aLockStatus );
+
+		void BringForward( TBool aForeground );
+
+		/**
+		 * Mute/Unmute key sounds when phone is locked/unlocked.
+		 * 
+		 * @param aMuteSounds mute switch
+		 */
+		void MuteSounds( TBool aMuteSounds );
+
+		/**
+		 * Prescreen key events for special cases before giving them to child controls.
+		 */
+		TKeyResponse PreCheckKeyEvents( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+		/**
+		 * Power key needs to always activate lights.
+		 */
+		void CheckForPowerKeyLights( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+		/**
+		 * Green and Red keys should be passed to Phone during phone call.
+		 * @return ETrue if the keys have been forwarded
+		 *         EFalse otherwise
+		 */
+		TBool CheckForPhoneKeys( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+	private:
+
+		/**
+		 * Internal lock state.
+		 */
+		TLockStatus iLockStatus;
+
+		/**
+		 * Current control;
+		 */
+		CLockAppBaseControl* iCurrentControl;
+
+		/**
+		 * Idle UI.
+		 * Owned by superclass.
+		 */
+		CLockAppIdleControl* iIdle; // owned by superclass
+
+		/**
+		 * Keyguard UI.
+		 * Owned by superclass.
+		 */
+		CLockAppKeyguardControl* iKeyguard; // owned by superclass
+
+		/**
+		 * Autolock UI
+		 * Owned by superclass. 
+		 */
+		CLockAppDevicelockControl* iDevicelock;
+
+		/**
+		 * Emergency call detector with emergency note.
+		 * Owned by superclass.
+		 */
+		CLockAppEcsDetector* iLockEcsDetector;
+
+		/**
+		 * PubSub observers
+		 */
+		CLockAppPubSubObserver* iPSScreenSaverObserver;
+		CLockAppPubSubObserver* iPSTelephonyObserver;
+		CLockAppPubSubObserver* iPSGripObserver;
+		CLockAppPubSubObserver* iPSFPSObserver;
+
+		/**
+		 * Application's main window group - Event gate
+		 */
+		RWindowGroup& iWGEventGate;
+
+		/**
+		 * Visibility gate (owned)
+		 */
+		RWindowGroup iWGVisibilityGate;
+
+		/**
+		 * Incall Bubble. (owned)
+		 */
+		CAknIncallBubble* iIncallBubble;
+
+	private:
+
+		/**
+		 *  feature manager keys
+		 */
+		TBool iFeatureNoPowerkey;
+
+		/**
+		 * Offset value used to free reserved localization resources
+		 */
+		TInt iResourceFileOffset;
+
+		/**
+		 * if sounds are muted
+		 */
+		TBool iSoundsMuted;
+
+		/**
+		 * Environment state descriptor bit-mask
+		 */
+		TUint iEnvState;
+
+	};
+
+#endif // __LOCKAPPSTATECONTROL_H__
+// End of File