securitydialogs/lockapp/src/lockappidlecontrol.cpp
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:  Idle (unlocked) UI
 *
*/


#include "lockappidlecontrol.h"
#include "lockappstatecontrolinterface.h"
#include "lockapputils.h"
#include "lockapplockednote.h" // keyguard notes
#include "lockappkeycapturecontroller.h"

#include <avkon.rsg> // general avkon resources

#include <aknnotpi.rsg> // keyguard spesific resources

#include <featmgr.h> // feature manager

// from keyguard ui spesification, 6 sec.
const TInt KAknOfferKeyguardTimeout = 6000000;

// Asterisk key code for the keylock
const TUint KStdKeyAsterisk = 42;
//const TUint KAknChineseAsterisk = 0xFF0A;

// ---------------------------------------------------------------------------
// Standard Symbian OS construction sequence
// ---------------------------------------------------------------------------
CLockAppIdleControl* CLockAppIdleControl::NewL(MLockAppStateControl& aStateControl )
    {
    CLockAppIdleControl* self = new (ELeave) CLockAppIdleControl( aStateControl );
    CleanupStack::PushL( self );
    self->ConstructL( );
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// Constructor passes the reference of the main state control.
// ---------------------------------------------------------------------------
CLockAppIdleControl::CLockAppIdleControl( MLockAppStateControl& aStateControl ) :
    CLockAppBaseControl( aStateControl )
    {
    }

// ---------------------------------------------------------------------------
// Destructor.
// ---------------------------------------------------------------------------
CLockAppIdleControl::~CLockAppIdleControl( )
    {
    delete iOfferLockNote;
    }

// ---------------------------------------------------------------------------
// Idle UI constructor reserves localized resources, configures itself
// using CenRep and FeatureManager and reserves child controls.
// ---------------------------------------------------------------------------
void CLockAppIdleControl::ConstructL( )
    {
    INFO( "CLockAppIdleControl::ConstructL started" );
    CLockAppBaseControl::ConstructL( );

    iOfferLockNote = new (ELeave) CLockAppLockedNote(this);
    iOfferLockNote->ConstructSleepingNoteL( R_KEYLOCK_OFFER_LOCK_NOTE );
    iOfferLockNote->ButtonGroupContainer().ButtonGroup()->AsControl()->DrawableWindow()->SetOrdinalPosition( 0, 2 );
    
    // Setup key pattern matcher
    if ( !SetupKeyPatternsWithPolicyL( EPolicyActivateKeyguard ) )
        {
        INFO( "CLockAppIdleControl::ConstructL - No CenRep policy defined" );
        iKeyPattern->AddPattern( EStdKeyDevice0, KStdKeyAsterisk ); // LSK + *
        }
#ifdef __WINS__
    iKeyPattern->AddPattern( EStdKeyDevice0, EStdKeyNkpAsterisk ); // LSK + *
#endif
                                                                                                                                                                                                           
    INFO( "CLockAppIdleControl::ConstructL completed" );
    }

// ---------------------------------------------------------------------------
// Offers keylock.
// ---------------------------------------------------------------------------
void CLockAppIdleControl::OfferKeyLock( )
    {
    ShowNote( iOfferLockNote, (CAknNoteDialog::TTimeout)KAknOfferKeyguardTimeout, CAknNoteDialog::ENoTone );
    }

// ---------------------------------------------------------------------------
// Cancels offering keylock.
// ---------------------------------------------------------------------------
void CLockAppIdleControl::CancelOfferKeyLock( )
    {
    CancelNote( );
    }

// ---------------------------------------------------------------------------
// Activate control
// ---------------------------------------------------------------------------
void CLockAppIdleControl::HandleActivateEventL( TUint aEnvMask )
    {  
		RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 );
    CLockAppBaseControl::HandleActivateEventL( aEnvMask );
    }

// ---------------------------------------------------------------------------
// DeActivate control
// ---------------------------------------------------------------------------
void CLockAppIdleControl::HandleDeActivateEventL( TUint aEnvMask )
    {
    CLockAppBaseControl::HandleDeActivateEventL( aEnvMask );
    CancelOfferKeyLock( );
    }

// ---------------------------------------------------------------------------
// Idle UI key events are handled trough here.
// ---------------------------------------------------------------------------
TKeyResponse CLockAppIdleControl::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode /*aType*/ )
    {
		RDebug::Printf( "%s %s (%u) aKeyEvent.iCode=%x 1=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aKeyEvent.iCode, 1 );
    TKeyResponse keyResponse = EKeyWasNotConsumed;
    if ( iActive )
        {
        if ( iOfferLockNote->IsVisible( ) )
            {
            // if keylock has been offered
            switch ( aKeyEvent.iCode )
                {
                case EKeyOK:
                    iStateControl.EnableKeyguardL( ETrue );
                    keyResponse = EKeyWasConsumed;
                    break;
                case EKeyLeftArrow:
                case EKeyRightArrow:
                case EKeyUpArrow:
                case EKeyDownArrow:
                case EKeyApplication:
                    keyResponse = EKeyWasConsumed;
                    break;
                default:
                    break;
                }
            }
        else
            {
            // keys pressed normally in idle - however keys are not captured
            // this is where locking policy could be monitored to check keyguard activation
            /*if ( aType == EEventKeyDown )
                {
                switch ( iKeyPattern->HandleKeyEvent( aKeyEvent.iScanCode ) )
                    {
                    case EPatternNoMatch:
                    case EPatternPrimaryMatch:
                        break;
                    case EPatternSecondaryMatch:
                        iStateControl.EnableKeyguardL( ETrue );
                        keyResponse = EKeyWasConsumed;
                        break;
                    default:
                        break;
                    }
                }
            */
            }
        }
    return keyResponse;
    }

// ---------------------------------------------------------------------------
// Handle UI commands received from the child controls
// ---------------------------------------------------------------------------
void CLockAppIdleControl::ProcessCommandL(TInt aCommandId )
    {
    // handle command
		RDebug::Printf( "%s %s (%u) value=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 0 );
    switch ( aCommandId )
        {
        case EAknSoftkeyLock:
            {
            // user has accepted offer keyguard enquiry - lock keys
            iStateControl.EnableKeyguardL( ETrue );
            }
            break;
        case EAknSoftkeyExit:
        case KNoteCmdFocusLost:
            {
            // user has declined offer keyguard enquiry -  cancel offer
            CancelOfferKeyLock( );
            }
            break;
        default:
            break;
        }
    }

TInt CLockAppIdleControl::CountComponentControls( ) const
    {
    return 0;
    }

CCoeControl* CLockAppIdleControl::ComponentControl(TInt /*aIndex*/) const
    {
    return NULL;
    }

// ---------------------------------------------------------------------------
// Notification if layout changes.
// ---------------------------------------------------------------------------
void CLockAppIdleControl::HandleResourceChange(TInt aType )
    {
    CCoeControl::HandleResourceChange( aType );
    }