securitydialogs/keylockpolicyapi/inc/keylockpolicyapiimpl.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:  Keylock policy implementation
 *
*/


#ifndef ___CKEYLOCKPOLICYAPIIMPL__
#define ___CKEYLOCKPOLICYAPIIMPL__

#include <w32std.h>
#include <e32base.h>
#include <cenrepnotifyhandler.h>
#include "keylockpolicyapi.h"

/**
 * Keylock policy component supports three policy types:
 *
 * EPolicyActivateKeyguard keys used for keyguard locking
 * EPolicyDeactivateKeyguard keys used for keyguard unlocking
 * EPolicyDevicelockQuery keys used for showing devicelock query
 */

/**
 *  CKeyLockPolicyApi. Trough CKeyLockPolicyApi users can
 *
 *  @lib keylockpolicy.lib
 *  @since 3.2
 */
class CKeyLockPolicyApiImpl : public CBase, public MCenRepNotifyHandlerCallback
	{
public:

	/**
	 * Use this to create keylock policy
	 * @param TLockPolicyType aType the policy used
	 */
	static CKeyLockPolicyApiImpl* NewL( TLockPolicyType aType );

	/**
	 * Destructor.
	 */
	~CKeyLockPolicyApiImpl( );

	/**
	 * If no policy has been defined for the type it cannot be used.
	 * @return ETrue if has succesfully loaded policy
	 */
	TBool HasConfiguration( );

	/**
	 * Activates support for keyguard feature so  the phone keys cannot
	 * be locked with keyguard. Does not affect the devicelock.
	 * @return standard Symbian error code
	 */
	TInt EnableKeyguardFeature( );

	/**
	 * Disables support for keyguard feature so the phone keys cannot
	 * be locked with keyguard. Does not affect the devicelock.
	 * @return standard Symbian error code
	 */
	TInt DisableKeyguardFeature( );

	/**
	 * Whether keyguard feature is currently enabled or disabled.
	 * @return ETrue if keyguard can be locked.
	 */
	TBool static KeyguardAllowed( );

	/**
	 * Adds a key combination for the policy type defined in the construction.
	 *
	 * @param TUint scan code for primary key
	 * @param TUint scan code for secondary key
	 * @return standard Symbian error code
	 */
	TInt AddKeyCombination(TUint32 aPrimaryKey, TUint32 aSecondaryKey );

	/**
	 * Removes a key combination for the policy type defined in the construction.
	 *
	 * @param TUint scan code for primary key
	 * @param TUint scan code for secondary key
	 * @return standard Symbian error code
	 */
	TInt RemoveKeyCombination(TUint32 aPrimaryKey, TUint32 aSecondaryKey );

	/**
	 * Retrieve a key combination on the given index.
	 *
	 * @param TInt aIndex index on the list that stores key combinations
	 * @param TUint key code for primary key
	 * @param TUint key code for secondary key
	 * @return standard Symbian error code
	 */
	TInt GetKeyCombination(TInt aIndex, TUint32 &aPrimaryKey, TUint32 &aSecondaryKey );

	/**
	 * Clears all the defined key combinations from the policy.
	 *
	 * @return standard Symbian error code
	 */
	TInt ClearKeycombinations( );

	/**
	 * Handles Key events, returns ETrue the key events match any of the
	 * defined key combinations. Only uses scancodes with type EEventKeyDown.
	 *
	 * @param TKeyEvent aKeyEvent the actual key event
	 * @param TEventCode aType the type of the received key event
	 * @return ETrue if a match was found.
	 */
	TBool HandleKeyEventL(const TKeyEvent& aKeyEvent, const TEventCode aType );

	/**
	 * Returns true if primary button is pressed and note should be shown.
	 * @return boolean true if primary key is pressed.
	 */
	TBool PrimaryKeyPressed( );

	/**
	 * Returns Primary key scan code that has been pressed last.
	 * @return scan code value of the primary key if found, NULL if not
	 */
	TUint GetLastPrimaryKey( );

private:

	/**
	 * C++ default constructor (private so cannot be derived).
	 * @param TLockPolicyType aType the policy (TLockPolicyType) used
	 */
	CKeyLockPolicyApiImpl( TLockPolicyType aType );

	/**
	 * Second constructor initializes the policy
	 */
	void ConstructL( );

	TInt SetKeyCombination(TUint32 aPrimaryKey, TUint32 aSecondaryKey, TInt aIndex );

	TInt FindKeyCombinationIndex(TUint32 aPrimaryKey, TUint32 aSecondaryKey, TInt &aIndex );

	TInt GetNewKeyCombinationIndex(TInt &aIndex );

	/**
	 * From @c MCenRepNotifyHandlerCallback. Changes in the observed
	 * central repository keys are communicated trough this method.
	 * @param TUint32 aId central repository key
	 * @param TInt aNewValue the new value
	 */
	void HandleNotifyInt( TUint32 aId, TInt aNewValue );

	/**
	 * A call back to the keylock timer
	 * param TAny aSelf a pointer to the parent class
	 */
	static TInt HandleKeyLockTimerTimeout(TAny* aSelf );

private:

	// handle to central repository
	CRepository* iRep;

	// defined configuration
	RArray<TUint> iPrimaryKeys;
	RArray<TUint> iSecondaryKeys;
	RArray<TUint> iWaitingKeys;

	// defined timeout
	TUint iTimeout;

	// first key pressed
	TBool iPrimaryKeyDown;

	// index of last primary key in the policy
	TUint iLastPrimaryKeyIndex;

	// key configuration mask
	TUint iMask;

	// current policy mode
	TUint iMode;

	// initialized policy type
	TUint iType;

	// if the keyguard is allowed or not
	TUint iAllowed;

	// if the keylock policy exists
	TBool iInitialised;

	// timer used between primary and secondary keys
	CPeriodic* iKeyLockTimer;

	// notifies the changes in keyguard block
	CCenRepNotifyHandler* iAllowNotif;

	// notifies the changes in mode
	CCenRepNotifyHandler* iModeNotif;
	};

#endif // ___CKEYLOCKPOLICYAPIIMPL__