diff -r 000000000000 -r 164170e6151a securitydialogs/lockapp/src/lockappbasecontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/lockapp/src/lockappbasecontrol.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,277 @@ +/* +* 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: Base control for logical UI components + * +*/ + + +#include "lockappbasecontrol.h" +#include "lockappkeycapturecontroller.h" +#include "lockapputils.h" + +#include +#include +#include +#include // CAknSmallIndicator +#include + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +CLockAppBaseControl::CLockAppBaseControl( MLockAppStateControl& aStateControl ) : + iStateControl(aStateControl), iWindowGroup( iEikonEnv->RootWin()) + { + RDebug::Printf( "%s %s (%u) 1=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 1 ); + } + +// --------------------------------------------------------------------------- +// Second phase constructor. +// --------------------------------------------------------------------------- +void CLockAppBaseControl::ConstructL( ) + { + RDebug::Printf( "%s %s (%u) 1=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, 1 ); + iKeyPattern = CLockAppKeyPattern::NewL( ); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +CLockAppBaseControl::~CLockAppBaseControl( ) + { + CancelNote( ); + if ( iActive ) + { + TRAP_IGNORE(HandleDeActivateEventL( NULL )); + } + delete iCba; + delete iKeyPattern; + } + +// --------------------------------------------------------------------------- +// Setup key pattern matcher. +// --------------------------------------------------------------------------- +TBool CLockAppBaseControl::SetupKeyPatternsWithPolicyL( TLockPolicyType aType ) + { + INFO_1( "CLockAppBaseControl::SetupKeyPatternsL( type=%d )", aType ); + TBool ret(EFalse); + __ASSERT_DEBUG( iKeyPattern, DoPanic(ELockIllegalState)); + if ( iKeyPattern ) + { + CKeyLockPolicyApi* keylockPolicy = CKeyLockPolicyApi::NewL( aType ); + + // if the keylockpolicy has keycombinations + if ( keylockPolicy->HasConfiguration( ) ) + { + // TESTING1! + INFO( "CLockAppBaseControl::SetupKeyPatternsWithPolicyL - HasConfiguration!" ); + + TUint32 index(0), k1(0), k2(0); + while ( keylockPolicy->GetKeyCombination( index, k1, k2 )== KErrNone ) + { + // TESTING2! + INFO( "CLockAppBaseControl::SetupKeyPatternsWithPolicyL - key combination found!" ); + + // add each combination to our pattern matcher + iKeyPattern->AddPattern( k1, k2 ); + index++; + } + + ret = ETrue; + INFO_1( "CLockAppBaseControl::SetupKeyPatternsL: added %d patterns", index ); + } + delete keylockPolicy; + } + return ret; + } + +// --------------------------------------------------------------------------- +// Show note +// --------------------------------------------------------------------------- +void CLockAppBaseControl::ShowNote( CLockAppLockedNote* aNote, const TInt aTimeout, + const CAknNoteDialog::TTone aTone ) + { + if ( aNote ) + { + // cancel the current note if any + if ( iCurrentNote != aNote ) + { + CancelNote( ); + iCurrentNote = aNote; + } + iCurrentNote->ShowNote( aTimeout, aTone ); + } + } + +// --------------------------------------------------------------------------- +// Cancel currently shown note +// --------------------------------------------------------------------------- +void CLockAppBaseControl::CancelNote( ) + { + if ( iCurrentNote ) + { + if ( iCurrentNote->IsVisible( ) ) + { + iCurrentNote->CancelNote( ); + } + iCurrentNote = NULL; + } + } + +// --------------------------------------------------------------------------- +// Internal lock state has been changed. +// --------------------------------------------------------------------------- +void CLockAppBaseControl::HandleLockStatusChangedL( TLockStatus aStatus ) + { + switch ( aStatus ) + { + case ELockNotActive: + break; + case EKeyguardActive: + break; + case EDevicelockActive: + break; + default: + DoPanic( ELockPanicGeneral ); + break; + } + } + +// --------------------------------------------------------------------------- +// Handle activate event +// --------------------------------------------------------------------------- +void CLockAppBaseControl::HandleActivateEventL( TUint /*aEnvMask*/ ) + { + __ASSERT_DEBUG( !iActive, DoPanic(ELockIllegalState)); + if ( !iActive ) + { + iActive = ETrue; + } + } + +// --------------------------------------------------------------------------- +// Handle de-activate event +// --------------------------------------------------------------------------- +void CLockAppBaseControl::HandleDeActivateEventL( TUint /*aEnvMask*/ ) + { + __ASSERT_DEBUG( iActive, DoPanic(ELockIllegalState)); + if ( iActive ) + { + iActive = EFalse; + } + } + +// --------------------------------------------------------------------------- +// Capture/uncapture primary keys +// --------------------------------------------------------------------------- +void CLockAppBaseControl::CapturePrimaryKeys( const TBool aCapture ) + { + RDebug::Printf( "%s %s (%u) aCapture=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, aCapture ); + RDebug::Printf( "%s %s (%u) iKeyPattern=%x", __FILE__, __PRETTY_FUNCTION__, __LINE__, iKeyPattern ); + if ( iKeyPattern ) + { + if ( aCapture ) + { + // capture primary keys + TUint32 index( 0), primaryKey( 0), secondaryKey( 0); + while (iKeyPattern->GetPattern( index, primaryKey, secondaryKey )== KErrNone ) + { + CLockAppKeyCaptureController::CaptureKey( primaryKey, 0, EKeyCaptureUpAndDownEvents ); + index++; + } + } + else + { + // uncapture primary keys + TUint32 index( 0), primaryKey( 0), secondaryKey( 0); + while (iKeyPattern->GetPattern( index, primaryKey, secondaryKey )== KErrNone ) + { + CLockAppKeyCaptureController::ReleaseKey( primaryKey ); + index++; + } + } + } + } + +// --------------------------------------------------------------------------- +// Bring keyguard cba forwards/backwards. +// --------------------------------------------------------------------------- +void CLockAppBaseControl::ShowCba( const TBool aShow ) + { + if ( iCba ) + { + RDrawableWindow* cbaWindow = iCba->ButtonGroup()->AsControl()->DrawableWindow( ); + if ( aShow ) + { + cbaWindow->SetNonFading( ETrue ); + cbaWindow->SetOrdinalPosition( 0 ); + iCba->MakeVisible( ETrue ); + } + else + { + // hide the window + iCba->MakeVisible( EFalse ); + } + } + } + +// --------------------------------------------------------------------------- +// Method used for capturing/releasing pointer events when key lock is enabled. +// Capturing is done using button/cba group window. +// --------------------------------------------------------------------------- +void CLockAppBaseControl::SetPointerEventCapture(const TBool aEnable ) + { +#ifdef RD_SCALABLE_UI_V2 + if ( AknLayoutUtils::PenEnabled( )&& iCba ) + { + // cba captures all pointer events + RDrawableWindow* cbaWindow = iCba->ButtonGroup()->AsControl()->DrawableWindow( ); + if ( aEnable ) + { + cbaWindow->SetPointerCapture( RWindowBase::TCaptureDragDrop ); + } + else + { + cbaWindow->SetPointerCapture( RWindowBase::TCaptureDisabled ); + } + cbaWindow->ClaimPointerGrab( aEnable ); + } +#endif // RD_SCALABLE_UI_V2 + } + +// --------------------------------------------------------------------------- +// Set Keyguard indicator on Idle. +// --------------------------------------------------------------------------- +void CLockAppBaseControl::SetKeyguardIndicatorStateL( const TBool aEnable ) + { + CAknSmallIndicator* theIndicator = CAknSmallIndicator::NewLC( TUid::Uid( EAknIndicatorKeyguard ) ); + if ( aEnable ) + { + theIndicator->SetIndicatorStateL( EAknIndicatorStateOn ); + } + else + { + theIndicator->SetIndicatorStateL( EAknIndicatorStateOff ); + } + CleanupStack::PopAndDestroy( theIndicator ); + } + +// --------------------------------------------------------------------------- +// Handle environment changes (Screensaver, Telephony, etc.) +// --------------------------------------------------------------------------- +void CLockAppBaseControl::HandleEnvironmentChange( TUint /*aEnvMask*/, TUint /*aEventMask*/ ) + { + // no implementation needed - virtual function + } + +// END OF FILE