securitydialogs/lockapp/inc/lockappdevicelockcontrol.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

/*
* 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:  Devicelock UI
 *
*/


#ifndef LOCKAPPDEVICELOCKCONTROL_H
#define LOCKAPPDEVICELOCKCONTROL_H

// INCLUDES
#include "lockappbasecontrol.h"
#include "lockappobserverinterface.h"
#include <etelmm.h>
#include <rmmcustomapi.h>
#include <LockDomainCRKeys.h>

// FORWARD DECLARATIONS
class CLockAppDevicelockContainer;
class CUserActivityManager;
class CLockAppPubSubObserver;
class CLockAppCenRepObserver;

/**
 *  CLockAppDevicelockControl represents the devicelock state in the state machine.
 *  Window-owning compound control that provides visible user interface,
 *  shows the lock bitmap by its child container, handles all events 
 *  and asks for security code if "unlock" is pressed.
 *
 *  @lib    lockapp
 *  @since  5.0
 *  @author Joona Petrell
 *  @author Tamas Koteles
 *  @see    CLockAppBaseControl
 *  @see    CLockAppDevicelockContainer
 *  @see    MLockAppStateControl
 *  @see    CUserActivityManager
 *  @see    CLockAppPubSubObserver
 *  @see    CLockAppCenRepObserver
 */
class CLockAppDevicelockControl : public CLockAppBaseControl, public MEikCommandObserver,
		public MLockAppObserverInterface
	{
	public:

		/**
		 * Two-phased constructor.
		 */
		static CLockAppDevicelockControl* NewL( MLockAppStateControl& aStateControl,
				RWindowGroup& aWg );

		/**
		 * Destructor.
		 */
		~CLockAppDevicelockControl( );
		
		/**
		 * Finalize the construction by connecting to Phone side.
		 */
		void CLockAppDevicelockControl::ConnectToPhoneL( RWindowGroup& aWg );

		/**
		 * Is it allowed to activate control.
		 */
		TBool ActivationAllowedL( TDevicelockReason aReason );

		/**
		 * is it allowed to deactivate control.
		 */
		TBool DeActivationAllowedL( );

		virtual void HandleActivateEventL( TUint aEnvMask );

		virtual void HandleDeActivateEventL( TUint aEnvMask );

		virtual void HandleEnvironmentChange( TUint aEnvMask, TUint aEventMask );

		/**
		 * Set the reason for devicelock.
		 */
		void SetLockingReason( TDevicelockReason aReason );

	private:

		/**
		 * Constructor for performing 1st stage construction
		 */
		CLockAppDevicelockControl( MLockAppStateControl& aStateControl );

		/**
		 * 2nd stage construction
		 */
		void ConstructL( RWindowGroup& aWg );

		void DefinePubSubKeysL( );

		void HandleUnlockCommandL( );

	public:

		/**
		 * 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:

		void HandleResourceChange( TInt aType );

		TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );

	private:

		TInt CountComponentControls( ) const;

		CCoeControl* ComponentControl( TInt aIndex ) const;

	private:

		/*
		 * Checks whether we are booting from a Hidden Reset
		 */
		TBool IsHiddenReset( );

		/*
		 * Checks whether the pin is blocked.
		 */
		TBool IsPinBlocked( );

		/*
		 * Checks whether TARM admin flag is set (optionally unsets it).
		 */
		TBool TarmAdminFlag( TBool unSetFlag );

		TBool ETelActivationAllowed( );

		// Get autolock timeout (in seconds)
		TInt GetAutoLockTimeout( );

		// Starts monitoring user activity
		void StartActivityMonitoringL( );

		// Gets new autolock period and starts monitoring user activity
		void ResetInactivityTimeout( );

		// Stop monitoring user activity.
		void StopActivityMonitoring( );

		// Handles Active event. Called by ActivityManager
		static TInt HandleActiveEventL( TAny* aPtr );

		// Handles Inactive event. Called by ActivityManager
		static TInt HandleInactiveEventL( TAny* aPtr );

		// Set custom status pane visible/invisible
		void ShowStatusPane( const TBool aVisible );

	private:

		/**
		 * From @c MEikCommandObserver. Dialogs and CBA send
		 * UI commands to parent using method ProcessCommandL.
		 *
		 * @param aCommandId Command to be handled
		 */
		void ProcessCommandL( TInt aCommandId );

	private:

		/*****************************************************
		 *    S60 Customer / ETel
		 *    S60 ETel API
		 *****************************************************/

		RTelServer iTelServer;
		int iTelServerInitialized;
		RMobilePhone iPhone;
		int iPhoneInitialized;
		RMmCustomAPI iCustomPhone;
		int iCustomPhoneInitialized;

		/**
		 * Devicelock auto-locking timeout observer 
		 * (value in minutes)
		 */
		CLockAppCenRepObserver* iCRAutoLockTime;

		/**
		 * Devicelock status publisher.
		 * (Permamanent setting: On/Off)
		 */
		CLockAppCenRepObserver* iCRAutoLockStatus;

		/**
		 * Autolock state PubSub publisher.
		 * (Runtime setting)
		 */
		CLockAppPubSubObserver* iPSAutolockState; 

		/**
		 * User activity manager/observer
		 */
		CUserActivityManager* iActivityManager;

		/**
		 * Background image container control
		 */
		CLockAppDevicelockContainer* iContainer;

		/**
		 * Feature manager value for CDMA protocol
		 */
		TBool iFeatureProtocolCdma;

		/**
		 * Is security code query shown
		 */
		TBool iShowingSecCodeQuery;

	};

#endif // LOCKAPPDEVICELOCKCONTROL_H