diff -r 000000000000 -r 1e05558e2206 usbuis/usbuinotif/src/usbnotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbuis/usbuinotif/src/usbnotifier.cpp Thu Dec 17 09:14:30 2009 +0200 @@ -0,0 +1,318 @@ +/* + * Copyright (c) 2005-2009 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: Declares USB UI notifiers base class. + * + */ + +// INCLUDE FILES +#include // Eikon environment +#include // BAFL utils (for language file) +#include // Localisation stringloader +#include +#include +#include +#include +#include + +#include "usbnotifier.h" // Own class +#include "usbuinotifdebug.h" +#include "AknKeyLock.h" //RAknKeyLock +// CONSTANTS + +// ================= MEMBER FUNCTIONS ========================================= + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::CBTNotifierBase +// C++ default constructor can NOT contain any code, that +// might leave. Sets the AOs priority and puts +// itself to the active scheduler stack. +// ---------------------------------------------------------------------------- +// +CUSBUINotifierBase::CUSBUINotifierBase() : + CActive( EPriorityStandard ) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::Default constructor()")); + CActiveScheduler::Add( this ); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::ConstructL +// Symbian 2nd phase constructor can leave. +// Create registry object and open resource file. +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::ConstructL() + { + iEikEnv = CEikonEnv::Static(); + iAppsKeyBlocked = EFalse; + iKeylockChanged = EFalse; + + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ConstructL()")); + TFileName filename; + + const TDriveNumber KStoreDrive = EDriveZ; + TDriveUnit driveUnit( KStoreDrive ); + TDriveName drive = driveUnit.Name(); + filename.Insert( 0, drive ); + + filename += KDC_RESOURCE_FILES_DIR; // From data_caging_path_literals.hrh + filename += KResourceFileName; + BaflUtils::NearestLanguageFile( iEikEnv->FsSession(), filename ); + iResourceFileFlag = iEikEnv->AddResourceFileL( filename ); + + FeatureManager::InitializeLibL(); + iCoverDisplaySupported = FeatureManager::FeatureSupported( + KFeatureIdCoverDisplay ); + FeatureManager::UnInitializeLib(); + + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ConstructL() completed")); + } + +// ---------------------------------------------------------------------------- +// Destructor. +// ---------------------------------------------------------------------------- +// +CUSBUINotifierBase::~CUSBUINotifierBase() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::Destructor")); + //Make sure that the request is completed. Note that inside the destructor, + //this virtual function call is to the local CUSBUINotifierBase::Cancel, + //not to any possibly derived class implementation. + Cancel(); + iEikEnv->DeleteResourceFile( iResourceFileFlag ); + + // Complete the RMessage2 if needed + // + CompleteMessage( KErrDied ); + + // Activate apps -key again (if not previously activated yet) + SuppressAppSwitching( EFalse ); + + // Restore the keylock if not restored before (caused by Leave). + // If the Keylock is restored already, the function does nothing. + RestoreKeylock(); + + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::Destructor completed")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::Release +// Release itself. Call to destructor. +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::Release() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::Release()")); + delete this; + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::Info +// Return registered information. +// ---------------------------------------------------------------------------- +// +CUSBUINotifierBase::TNotifierInfo CUSBUINotifierBase::Info() const + { + FTRACE(FPrint(_L("[USBUINOTIF]\t CUSBUINotifierBase::Info() id %d channel %d priority %d"), iInfo.iUid, iInfo.iChannel, iInfo.iPriority )); + return iInfo; + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::StartL +// Synchronic notifier launch. Does nothing +// ---------------------------------------------------------------------------- +// +TPtrC8 CUSBUINotifierBase::StartL(const TDesC8& /*aBuffer*/) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::StartL()")); + + TPtrC8 ret( KNullDesC8 ); + return (ret); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::StartL +// Asynchronic notifier launch. +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::StartL(const TDesC8& aBuffer, TInt aReplySlot, + const RMessagePtr2& aMessage) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::StartL()")); + TRAPD( err, GetParamsL( aBuffer, aReplySlot, aMessage )); + if (err) + { + aMessage.Complete( err ); + iNeedToCompleteMessage = EFalse; + User::Leave( err ); + } + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::StartL completed()")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::Cancel +// Cancelling method. +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::Cancel() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::Cancel()")); + CActive::Cancel(); + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::Cancel completed()")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::UpdateL +// Notifier update. Not supported. +// ---------------------------------------------------------------------------- +// +TPtrC8 CUSBUINotifierBase::UpdateL(const TDesC8& /*aBuffer*/) + { + TPtrC8 ret( KNullDesC8 ); + return (ret); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::DoCancel +// This method will be called by framework (CActive) +// if active object is still active. +// Does nothing here. +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::DoCancel() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::DoCancel()")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::RunError +// This method is called if any leaving has been occured +// during RunL. Optional method for CActive derived objects. +// ---------------------------------------------------------------------------- +// +TInt CUSBUINotifierBase::RunError(TInt aError) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RunError()")); + + // Activate apps -key again (if not previously activated yet) + // + SuppressAppSwitching( EFalse ); + + // Write error message to caller + // + CompleteMessage( aError ); + + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RunError() completed")); + + return aError; + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::SuppressAppSwitching +// +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::SuppressAppSwitching(TBool aEnable) + { + FTRACE(FPrint(_L("[USBUINOTIF]\t CUSBUINotifierBase::SuppressAppSwitching() %d"), aEnable)); + + if (iAppsKeyBlocked != aEnable) + { + TInt err = iAknServer.ConnectAndSendAppsKeySuppress( aEnable ); // error is stored only for logging purposes + iAppsKeyBlocked = aEnable; + FTRACE(FPrint(_L("[USBUINOTIF]\t CUSBUINotifierBase::SuppressAppSwitching() ConnectAndSendAppsKeySuppress returned %d"), err )); + } + + if (!iAppsKeyBlocked) + { + iAknServer.Close(); // close the connection once we have re-enabled swithcing + } + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::SuppressAppSwitching() completed")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::CompleteMessage +// Check if message needs to be completed and complete it. +// ---------------------------------------------------------------------------- +// +void CUSBUINotifierBase::CompleteMessage(TInt aReason) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::CompleteMessage()")); + if (iNeedToCompleteMessage) + { + iMessage.Complete( aReason ); + iNeedToCompleteMessage = EFalse; + } + iReplySlot = 0; + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::CompleteMessage() completed")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::DisableKeylock +// ---------------------------------------------------------------------------- +// Turn off the keyguard if it was on. +// +void CUSBUINotifierBase::DisableKeylock() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::DisableKeylock()")); + RAknKeylock2 keylock; + iKeylockChanged = EFalse; + if (KErrNone == keylock.Connect()) + { + if (keylock.IsKeyLockEnabled()) //Check and save the keylock status + { + keylock.DisableWithoutNote();// Unlock + iKeylockChanged = ETrue; + } + keylock.Close(); + } + else + { + FLOG( _L( "[USBUINOTIF]\t CUSBUINotifierBase::DisableKeylock() fail caused by RAknKeylock2::Connect()") ); + } + + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::DisableKeylock() completed")); + } + +// ---------------------------------------------------------------------------- +// CUSBUINotifierBase::RestoreKeylock +// ---------------------------------------------------------------------------- +// Restore the keyguard on. +// +void CUSBUINotifierBase::RestoreKeylock() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock()")); + if (iKeylockChanged) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock(): iKeylockChanged true")); + RAknKeylock2 keylock; + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock(): RAknKeyLock2 initialized")); + if (KErrNone == keylock.Connect()) + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock(): RAknKeyLock2::Connect() complete")); + keylock.EnableWithoutNote();// Lock back + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock(): RAknKeyLock2::EnableWithoutNote() complete")); + keylock.Close(); + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock(): RAknKeyLock2::Close() complete")); + iKeylockChanged = EFalse; + } + else + { + FLOG( _L( "[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock() fail caused by RAknKeylock2::Connect()") ); + } + } + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::RestoreKeylock() completed")); + } + +// End of File