# HG changeset patch # User Shabe Razvi # Date 1265640812 0 # Node ID 1d095efe60a1d8ab82b59e8b765e3cb3706015c7 # Parent 7e15987c450072d930a73570d3fdd4195b69cf8e# Parent 7b8d21bf0d05e758cafc8e17fdf86da7c1fe1c41 Merge diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbclasses/group/bld.inf --- a/usbclasses/group/bld.inf Mon Feb 01 19:00:30 2010 +0000 +++ b/usbclasses/group/bld.inf Mon Feb 08 14:53:32 2010 +0000 @@ -23,9 +23,4 @@ //#include "../sicdusbplugin/group/bld.inf" //#include "../ptpserver/group/bld.inf" #include "../pictbridgeengine/group/bld.inf" -//Wusan@20091210: DEF143281: sf build break because of -// msmmplugin & usbhidclassdriver do not contribute to. -//PS, this comment and the below 2 line will be deleted after review! -//#include "../msmmplugin/group/bld.inf" -//#include "../usbhidclassdriver/group/bld.inf" #include "../usbphoneasmodem/group/bld.inf" diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbengines/usbwatcher/group/usbwatcherserver.mmp --- a/usbengines/usbwatcher/group/usbwatcherserver.mmp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbengines/usbwatcher/group/usbwatcherserver.mmp Mon Feb 08 14:53:32 2010 +0000 @@ -37,6 +37,8 @@ SOURCE cusbdevicelock.cpp SOURCE cusbdevconstarter.cpp SOURCE cusbglobalsystemstateobserver.cpp +SOURCE tusbindicatorhandler.cpp + USERINCLUDE ../inc diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbengines/usbwatcher/inc/cusbwatcher.h --- a/usbengines/usbwatcher/inc/cusbwatcher.h Mon Feb 01 19:00:30 2010 +0000 +++ b/usbengines/usbwatcher/inc/cusbwatcher.h Mon Feb 08 14:53:32 2010 +0000 @@ -30,7 +30,7 @@ #include "debug.h" #include "musbwatchernotify.h" #include "cusbwatchersession.h" - +#include "tusbindicatorhandler.h" class CUsbActiveState; @@ -438,7 +438,16 @@ * OTG Watcher */ CUsbOtgWatcher* iOtgWatcher; //OTG - + + /* + * USB indicator handler to handle device side indicator + */ + TUsbIndicatorHandler iUsbIndicatorHandler; + + /* + * Starting mode is normal? + */ + TBool iNormalStart; }; #include "cusbwatcher.inl" diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbengines/usbwatcher/inc/tusbindicatorhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbengines/usbwatcher/inc/tusbindicatorhandler.h Mon Feb 08 14:53:32 2010 +0000 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 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: Header file for class TUsbIndicatorHandler +* +*/ + + +#ifndef TUSBINDICATORHANDLER_H +#define TUSBINDICATORHANDLER_H + +#include +#include + + +/** +* USB indicator handler class for device side. +* +* This class shows USB indicator when device state changes to Configured, +* and hides USB indicator when device leaves Configured state. Suspended + * state does not change the indicator. +* +* @since TB9.2 +*/ +NONSHARABLE_CLASS( TUsbIndicatorHandler ) + { + +public: + /** + * Constructor + */ + TUsbIndicatorHandler(); + + /** + * Set USB indicator (On/Off, maybe more in future) according to + * the change of USB device state + * + * @param aStateOld previous USB device state + * @param aStateNew current USB device state + */ + void HandleDeviceStateChange( TUsbDeviceState aStateOld, + TUsbDeviceState aStateNew ); + +private: + /** + * Show USB indicator (On/Off, maybe more in future) + * + * @since TB9.2 + * @param aUsbIndicatorState the state of the indicator, 0: OFF, 1: ON + */ + void ShowUsbIndicator( TInt aUsbIndicatorState ); + +private: + /** + * The device state before suspend. + * Used to filter out suspend from others; + */ + TUsbDeviceState iDevStateB4Suspend; + + ///////////////////////////////////////////////////////////////////////// + // Test code + friend class CtTUsbIndicatorHandler; + TBool iUsbIndicator; + // + ///////////////////////////////////////////////////////////////////////// + + }; + + +#endif // TUSBINDICATORHANDLER_H + +// End of File diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbengines/usbwatcher/src/cusbactivestate.cpp --- a/usbengines/usbwatcher/src/cusbactivestate.cpp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbengines/usbwatcher/src/cusbactivestate.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -95,13 +95,25 @@ LOG_FUNC LEAVEIFERROR( iStatus.Int() ); // Close process if error happens here - LOG2( "DeviceState change: %d ==> %d", iPreviousState, iCurrentState ); + TUsbDeviceState newState = iCurrentState; iUsbMan.DeviceStateNotification( KUsbAllStates, iCurrentState, iStatus ); SetActive(); - iOwner.StateChangeNotify( iPreviousState, newState ); - iPreviousState = newState; + + // Notify only if there is a change + if ( newState != iPreviousState ) + { + LOG2( "USB device state changed: %d ==> %d", iPreviousState, + newState ); + iOwner.StateChangeNotify( iPreviousState, newState ); + iPreviousState = newState; + } + else + { + LOG2("USB device change ignored: %d -> %d", iPreviousState, + newState ); + } } // ---------------------------------------------------------------------------- diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbengines/usbwatcher/src/cusbwatcher.cpp --- a/usbengines/usbwatcher/src/cusbwatcher.cpp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbengines/usbwatcher/src/cusbwatcher.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -222,7 +222,14 @@ { LOG_FUNC - if( IsDeviceA() ) // Will be handled by UsbOtgWatcher + // Handling USB indicator. This is valid for both A- and B-device cases. + // Not show USB indicator in charging mode + if ( iNormalStart ) + { + iUsbIndicatorHandler.HandleDeviceStateChange( aStateOld, aStateNew ); + } + + if ( IsDeviceA() ) // Will be handled by UsbOtgWatcher { LOG( "Device state change ignored by UsbWatcher in A-device state" ); return; @@ -533,13 +540,6 @@ LOG2( "aPersonalityId=%d, aNonBlocking=%d", aPersonalityId, aNonBlocking ); - if( IsDeviceA() ) - { - LOG( "SetPersonality not allowed in A-device state" ); - Notify( KErrAccessDenied ); - return; - } - // Check if personality is exist TBool found = EFalse; @@ -679,17 +679,21 @@ { LOG_FUNC - if( IsDeviceA() ) - { - LOG( "Not allowed in A-device state" ); - Notify( KErrAccessDenied ); - return; - } TUsbDeviceState state = iActiveState->CurrentState(); - LOG1( "Device state : %d", state ); + LOG2( "IsDeviceA: %d, Device state : %d", IsDeviceA(), state ); - if( state != EUsbDeviceStateUndefined ) + // As A-device, only cenrep will be updated for the reasons of + // - In A-host state, device state will be undefined + // - In A-peripheral state, personality change can not happen otherwise + // the connection will be lost + if ( IsDeviceA() || ( EUsbDeviceStateUndefined == state ) ) + { + // if no connection -> just save the setting + LOG( "CUsbWatcher::SwitchPersonality: Notify" ); + Notify( KErrNone ); + } + else { switch ( iState ) { @@ -722,12 +726,6 @@ break; } } - else - { - // if no connection -> just save the setting - LOG( "CUsbWatcher::SwitchPersonality: Notify" ); - Notify( KErrNone ); - } } // ---------------------------------------------------------------------------- @@ -743,6 +741,7 @@ if( iState == EUsbIdle ) { iStarted = EFalse; + iNormalStart = EFalse; if( globalState == ESwStateCharging ) { LOG( "Global state: charging" ); @@ -770,6 +769,7 @@ ( ESwStateNormalBTSap == globalState ) )) { LOG( "Global state: normal" ); + iNormalStart = ETrue; if( ! iUsbDeviceLock->Locked() ) { iGlobalStateObserver->Cancel(); diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbengines/usbwatcher/src/tusbindicatorhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbengines/usbwatcher/src/tusbindicatorhandler.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 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: This implements TUsbIndicatorHandler class. +* +*/ + + +#include +#include // SAknNotifierPackage +#include //EAknIndicatorUSBConnection +#include "tusbindicatorhandler.h" +#include "debug.h" + +// --------------------------------------------------------------------------- +// C++ Constructor +// --------------------------------------------------------------------------- +// +TUsbIndicatorHandler::TUsbIndicatorHandler() + : iDevStateB4Suspend( EUsbDeviceStateUndefined ) + , iUsbIndicator(EFalse) + { + } + +// --------------------------------------------------------------------------- +// Change USB Indicator +// --------------------------------------------------------------------------- +// +void TUsbIndicatorHandler::HandleDeviceStateChange( TUsbDeviceState aStateOld, + TUsbDeviceState aStateNew ) + { + LOG_FUNC + + LOG2( "USB device state changed: %d ==> %d", aStateOld, aStateNew ); + + if ( EUsbDeviceStateConfigured == aStateNew ) // Entering configed state + { + // filter out case of configed -> suspended -> configed + if ( ( EUsbDeviceStateSuspended != aStateOld ) || + ( EUsbDeviceStateConfigured != iDevStateB4Suspend) ) + { + ShowUsbIndicator( ETrue ); + } + } + else if ( EUsbDeviceStateSuspended == aStateNew ) + // If current state is suspend, we do not change the indicator, but save + // the previous state + { + iDevStateB4Suspend = aStateOld; + } + else // New device state is not configured, nor suspended + { + // Hide USB indicator if previous state is either configured, or + // suspended AND state before is not configured + if( ( EUsbDeviceStateConfigured == aStateOld ) || + ( ( EUsbDeviceStateSuspended == aStateOld ) && + ( EUsbDeviceStateConfigured == iDevStateB4Suspend ) ) ) + { + ShowUsbIndicator( EFalse ); + } + } + } + +// --------------------------------------------------------------------------- +// Show USB Indicator +// --------------------------------------------------------------------------- +// +void TUsbIndicatorHandler::ShowUsbIndicator( TInt aUsbIndicatorState ) + { + LOG_FUNC + + iUsbIndicator = aUsbIndicatorState; + LOG1( "USB indicator state %d", aUsbIndicatorState ); + RNotifier notifier; + TInt err = notifier.Connect(); + if ( KErrNone == err ) + { + TPckgBuf< SAknNotifierPackage > pckg; + pckg().iParamData.iSmallIndicatorUid = + TUid::Uid( EAknIndicatorUSBConnection ); + pckg().iParamData.iValue = aUsbIndicatorState ? + EAknIndicatorStateOn : EAknIndicatorStateOff ; + notifier.StartNotifier( KAknSmallIndicatorUid, pckg ); + notifier.Close(); + } + else + { + LOG1( "RNotifier::Connect error: %d", err ); + } + } + +// End of file diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/group/usbuinotif.mmp --- a/usbuis/usbuinotif/group/usbuinotif.mmp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/group/usbuinotif.mmp Mon Feb 08 14:53:32 2010 +0000 @@ -33,6 +33,10 @@ SOURCE usbuinotifotgwarning.cpp SOURCE usbuinotifotgerror.cpp SOURCE usbuinotifmsmmerror.cpp +SOURCE usbuinotifdialerwatcher.cpp + + + // ECom resource file START RESOURCE ../data/102068DC.rss TARGET usbuinotif.rsc @@ -74,6 +78,8 @@ LIBRARY aknnotifierwrapper.lib // Avkon's notifier wrapper LIBRARY apparc.lib LIBRARY akncapserverclient.lib // for suppressing the application key +LIBRARY viewcli.lib +LIBRARY featmgr.lib DEBUGLIBRARY flogger.lib // File logging services diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/inc/usbuincableconnectednotifier.h --- a/usbuis/usbuinotif/inc/usbuincableconnectednotifier.h Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/inc/usbuincableconnectednotifier.h Mon Feb 08 14:53:32 2010 +0000 @@ -120,6 +120,16 @@ * C++ default constructor. */ CUSBUICableConnectedNotifier(); + + /** + * Waiter for canceling notifier. Canceling is not posible when note is visible + */ + CActiveSchedulerWait iNoteWaiter; + + /** + * Note visible + */ + TBool iNoteVisible; }; #endif // USBUINCABLECONNECTEDNOTIFIER_H diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/inc/usbuinotifdialerwatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbuis/usbuinotif/inc/usbuinotifdialerwatcher.h Mon Feb 08 14:53:32 2010 +0000 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 2007, 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 dialer activation watcher class + * +*/ + +#ifndef C_USBUINOTIFDIALERWATCHER_H +#define C_USBUINOTIFDIALERWATCHER_H + +#include +#include +#include +#include + + +/** + * Dialer activation callback + * + * This class specifies the functions when dialer is activated + * or note can be reactivated + * + */ +class MDialerNotifier + { +public: + /** + * The function to be when Dialaer is activated + * + */ + virtual void DialerActivated() = 0; + + /** + * The function to be when Dialaer is deactivated + * and note can be shown again + * + */ + virtual void ReActivateDialog() = 0; + }; + +/** + * + * This class will check if application key is pressed when error note is active. + * When application key is pressed dialer view is activated and error notifier is + * informed so it can dismis dialog. When dialer is deactivated error notifier is + * notified that dialog can be again shown. + * + */ +NONSHARABLE_CLASS( CUsbuinotifDialerWatcher): public CCoeControl, + public MVwsSessionWrapperObserver + + { +public: + /** + * Two-phased constructor. + * @param aDialerKeyNotifier Callback interface for dialer activation/deactivation + * @return dialer watcher + */ + + static CUsbuinotifDialerWatcher* NewL( MDialerNotifier* aDialerNotifier ); + + /** + * Two-phased constructor. + * @param aDialerKeyNotifier Callback interface for dialer activation/deactivation + * @return dialer watcher + */ + static CUsbuinotifDialerWatcher* NewLC( MDialerNotifier* aDialerNotifier ); + + /** + * Destructor + */ + virtual ~CUsbuinotifDialerWatcher(); + +private: + + /** + * From CCoeControl + * @param aKeyEvent Key Event + * @param aType Type of event + */ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); + +private: + + /** + * From MVwsSessionWrapperObserver + * @param aEvent View event + */ + void HandleViewEventL(const TVwsViewEvent &aEvent); + + +private: + + /** + * Constructor + * @param aDialerKeyNotifier Callback interface for dialer activation/deactivation + */ + CUsbuinotifDialerWatcher( MDialerNotifier* aDialerKeyNotifier ); + + /** + * Two-phased constructor. + */ + void ConstructL(); + +private: + // Member variables + + /** + * The observer for this objects events + * Not own. + */ + MDialerNotifier* iNotify; + + /** + * The observer for this objects events + * Own. + */ + CVwsSessionWrapper* iwsSession; + + /** + * Is notifier allready notified. + */ + TBool iNotified; + }; +#endif // C_USBUINOTIFDIALERWATCHER_H diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/inc/usbuinotifmsmmerror.h --- a/usbuis/usbuinotif/inc/usbuinotifmsmmerror.h Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/inc/usbuinotifmsmmerror.h Mon Feb 08 14:53:32 2010 +0000 @@ -23,6 +23,8 @@ #include "usbnotifier.h" // Base class #include // AVKON component +#include "usbuinotifdialerwatcher.h" + #define KUsbUiNotifOtgGeneralQueryGranularity 3 // CLASS DECLARATION @@ -32,7 +34,7 @@ * * @lib */ -NONSHARABLE_CLASS(CUsbUiNotifMSMMError) : public CUSBUINotifierBase +NONSHARABLE_CLASS(CUsbUiNotifMSMMError) : public CUSBUINotifierBase, public MDialerNotifier { public: @@ -95,6 +97,23 @@ */ void GetParamsL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + +private: + + /** + * From MDialerNotifier + * The function to be when Dialaer is activated + * + */ + void DialerActivated(); + + /** + * From MDialerNotifier + * The function to be when Dialaer is deactivated + * and note can be shown again + * + */ + void ReActivateDialog(); private: @@ -121,5 +140,14 @@ CAknQueryDialog* iQuery; RArray iStringIds; TInt iErrorId; + /** + * Dialer watcher + * Own. + */ + CUsbuinotifDialerWatcher* iDialerWatcher; + /** + * Dialog is dismissed. + */ + TBool iDismissed; }; #endif // USBUINOTIFMSMMERROR_H diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/inc/usbuinotifotgerror.h --- a/usbuis/usbuinotif/inc/usbuinotifotgerror.h Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/inc/usbuinotifotgerror.h Mon Feb 08 14:53:32 2010 +0000 @@ -23,6 +23,8 @@ #include "usbnotifier.h" // Base class #include // AVKON component +#include "usbuinotifdialerwatcher.h" + #define KUsbUiNotifOtgGeneralQueryGranularity 3 // CLASS DECLARATION @@ -32,7 +34,7 @@ * * @lib */ -NONSHARABLE_CLASS(CUsbUiNotifOtgError) : public CUSBUINotifierBase +NONSHARABLE_CLASS(CUsbUiNotifOtgError) : public CUSBUINotifierBase, public MDialerNotifier { public: // Constructors and destructor @@ -85,6 +87,23 @@ */ void GetParamsL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage); + +private: + + /** + * From MDialerNotifier + * The function to be when Dialaer is activated + * + */ + void DialerActivated(); + + /** + * From MDialerNotifier + * The function to be when Dialaer is deactivated + * and note can be shown again + * + */ + void ReActivateDialog(); private: @@ -111,5 +130,14 @@ CAknQueryDialog* iQuery; RArray iStringIds; TInt iErrorId; + /** + * Dialer watcher + * Own. + */ + CUsbuinotifDialerWatcher* iDialerWatcher; + /** + * Dialog is dismissed. + */ + TBool iDismissed; }; #endif // USBUINOTIFOTGERROR_H diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/src/usbuincableconnectednotifier.cpp --- a/usbuis/usbuinotif/src/usbuincableconnectednotifier.cpp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/src/usbuincableconnectednotifier.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -75,7 +75,8 @@ // might leave. // ---------------------------------------------------------------------------- // -CUSBUICableConnectedNotifier::CUSBUICableConnectedNotifier() +CUSBUICableConnectedNotifier::CUSBUICableConnectedNotifier(): + iNoteVisible(EFalse) { FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::default constructor")); } @@ -145,7 +146,7 @@ void CUSBUICableConnectedNotifier::RunL() { FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::RunL")); - + iNoteVisible = ETrue; DisableKeylock(); SuppressAppSwitching(ETrue); RunQueryL(); @@ -163,7 +164,12 @@ void CUSBUICableConnectedNotifier::Cancel() { FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::Cancel() ")); - + // Not allowed to cancel this one before note is closed. + if ( iNoteVisible ) + { + iNoteWaiter.Start(); + } + CompleteMessage(KErrCancel); CUSBUINotifierBase::Cancel(); @@ -212,10 +218,10 @@ TFileName usbUiIconFilename( KFileDrive ); usbUiIconFilename += KDC_APP_BITMAP_DIR; usbUiIconFilename += KUSBUIconFileName; + iNoteVisible = ETrue; CAknDiscreetPopup::ShowGlobalPopupL(*header,*description, KAknsIIDQgnPropUsb, AknIconUtils::AvkonIconFileName(), - EMbmAvkonQgn_prop_usb, EMbmAvkonQgn_prop_usb_mask,KAknDiscreetPopupDurationLong, EUSBUICmdDiscreetTapped,( MEikCommandObserver* ) this); - - CompleteMessage(KErrCancel); + EMbmAvkonQgn_prop_usb, EMbmAvkonQgn_prop_usb_mask,KAknDiscreetPopupDurationLong, EUSBUICmdDiscreetTapped,( MEikCommandObserver* ) this); + CleanupStack::PopAndDestroy(description); CleanupStack::PopAndDestroy(header); @@ -252,6 +258,13 @@ TUidType uidtype(KExecutableImageUid, TUid::Uid(0x00),TUid::Uid(KUSBUIUid)); CreateChosenViewL(KUSBExe(),uidtype); } + case EAknDiscreetPopupCmdClose: + if ( iNoteWaiter.IsStarted() ) + { + iNoteWaiter.AsyncStop(); + } + iNoteVisible = EFalse; + CompleteMessage( KErrCancel ); break; default: diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/src/usbuinotifdialerwatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbuis/usbuinotif/src/usbuinotifdialerwatcher.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -0,0 +1,128 @@ +/* +* Copyright (c) 2007, 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: USB dialer activation watcher class + * +*/ + + +#include +#include +#include +#include +#include + + +#include "usbuinotifdialerwatcher.h" +#include "debug.h" +#include "usbuinotifdebug.h" + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CUsbuinotifDialerWatcher* CUsbuinotifDialerWatcher::NewL( MDialerNotifier* aDialerNotifier ) + { + FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher::NewL")) + CUsbuinotifDialerWatcher* self = CUsbuinotifDialerWatcher::NewLC( aDialerNotifier); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CUsbuinotifDialerWatcher* CUsbuinotifDialerWatcher::NewLC( MDialerNotifier* aDialerNotifier ) + { + FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher::NewLC")) + CUsbuinotifDialerWatcher* self = new ( ELeave ) CUsbuinotifDialerWatcher( aDialerNotifier ); + CleanupStack::PushL( self ); + self->ConstructL( ); + return self; + } + +// --------------------------------------------------------------------------- +// CUsbuinotifDialerWatcher() +// --------------------------------------------------------------------------- +// +CUsbuinotifDialerWatcher::CUsbuinotifDialerWatcher( MDialerNotifier* aDialerNotifier ) : + iNotify( aDialerNotifier ) + { + FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher::CUsbuinotifDialerWatcher")) + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CUsbuinotifDialerWatcher::~CUsbuinotifDialerWatcher() + { + FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher Destructor")) + CCoeAppUi* appui=CEikonEnv::Static()->AppUi(); + appui->RemoveFromStack(this); + delete iwsSession; + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CUsbuinotifDialerWatcher::ConstructL() + { + FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher ConstructL")); + CCoeAppUi* appui=CEikonEnv::Static()->AppUi(); + appui->AddToStackL(this,ECoeStackPriorityCba); + } + +// --------------------------------------------------------------------------- +// HandleViewEventL() +// --------------------------------------------------------------------------- +// +void CUsbuinotifDialerWatcher::HandleViewEventL(const TVwsViewEvent& /*aEvent*/) + { + FLOG((_L("[USBUINOTIF]\t HandleViewEventL "))); + + if ( !iNotified ) + { + iNotify->ReActivateDialog(); + iNotified=ETrue; + } + FLOG(_L("[USBUINOTIF]\t HandleViewEventL Done")); + } + +// --------------------------------------------------------------------------- +// OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CUsbuinotifDialerWatcher::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode /*aType*/) + { + if (aKeyEvent.iScanCode == EStdKeyApplication0) + { + if ( !iwsSession ) + { + iwsSession = CVwsSessionWrapper::NewL(*this); + } + iNotified=EFalse; + const TVwsViewId viewId(KScutDiallerUid, KScutDiallerViewId ); + TUid msgId = KScutDiallerViewCommand; + iwsSession->CreateActivateViewEvent( viewId, msgId, KNullDesC8 ); + CCoeAppUi* appui=CEikonEnv::Static()->AppUi(); + iNotify->DialerActivated(); + iwsSession->NotifyNextDeactivation(viewId); + } + + return EKeyWasNotConsumed; + } + diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/src/usbuinotifmsmmerror.cpp --- a/usbuis/usbuinotif/src/usbuinotifmsmmerror.cpp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/src/usbuinotifmsmmerror.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -24,6 +24,7 @@ #include #include #include +#include #include // pck #include // Own resources @@ -67,6 +68,8 @@ //this virtual function call is to local CUsbUiNotifMSMMError::Cancel, //not to any possibly derived class implementation. Cancel(); + delete iDialerWatcher; + delete iQuery; } void CUsbUiNotifMSMMError::ConstructL() @@ -141,16 +144,28 @@ { FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::RunL")); TInt returnValue = KErrNone; - + FeatureManager::InitializeLibL(); + if ( FeatureManager::FeatureSupported( KFeatureIdFfKeypadNoSendKey ) ) + { + if (!iDialerWatcher) + { + iDialerWatcher = CUsbuinotifDialerWatcher::NewL(this); + } + } + iDismissed=EFalse; DisableKeylock(); SuppressAppSwitching( ETrue ); //Excute dialog and check return value returnValue = QueryUserResponseL(); - - SuppressAppSwitching( EFalse ); - RestoreKeylock(); - CompleteMessage( returnValue ); + if (!iDismissed) + { + SuppressAppSwitching( EFalse ); + RestoreKeylock(); + delete iDialerWatcher; + iDialerWatcher = NULL; + CompleteMessage( returnValue ); + } FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::RunL() completed")); } @@ -163,17 +178,56 @@ void CUsbUiNotifMSMMError::Cancel() { FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::Cancel")); + // If dialog is not dismissed this is normal cancel and if query + // doesn't exsist notifier is canceled during dismission + if (!iDismissed || !iQuery ) + { + delete iDialerWatcher; + iDialerWatcher = NULL; + CompleteMessage( KErrCancel ); + } if (iQuery) { delete iQuery; iQuery = NULL; } - CompleteMessage( KErrCancel ); + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::Cancel() completed")); } // ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::DialerActivated +// Release all own resources (member variables) +// ---------------------------------------------------------------------------- +// +void CUsbUiNotifMSMMError::DialerActivated() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::AppKeyPressed()")); + if ( iQuery ) + { + iDismissed=ETrue; + Cancel(); + } + } + +// ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::ReActivateDialog +// Release all own resources (member variables) +// ---------------------------------------------------------------------------- +// +void CUsbUiNotifMSMMError::ReActivateDialog() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ReActivateDialog()")); + if ( !IsActive()) + { + SetActive(); + iStatus = KRequestPending; + TRequestStatus* stat = &iStatus; + User::RequestComplete( stat, KErrNone ); + } + } +// ---------------------------------------------------------------------------- // CUsbUiNotifMSMMError::QueryUserResponseL // Show query dialog. // ---------------------------------------------------------------------------- @@ -183,9 +237,17 @@ FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::QueryUserResponseL")); TInt returnValue = KErrNone; TInt resourceId = R_USB_QUERY_OTG_ERROR; - - iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone ); - + if (iDismissed) + { + iQuery = CAknQueryDialog::NewL(); + } + else + { + iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone ); + } + + + iDismissed=EFalse; if (iCoverDisplaySupported) { iQuery->PublishDialogL( iErrorId, KUsbUiNotifMsmmError ); diff -r 7b8d21bf0d05 -r 1d095efe60a1 usbuis/usbuinotif/src/usbuinotifotgerror.cpp --- a/usbuis/usbuinotif/src/usbuinotifotgerror.cpp Mon Feb 01 19:00:30 2010 +0000 +++ b/usbuis/usbuinotif/src/usbuinotifotgerror.cpp Mon Feb 08 14:53:32 2010 +0000 @@ -23,6 +23,7 @@ #include // Localisation stringloader #include #include +#include #include // pck #include // Own resources @@ -66,6 +67,8 @@ //this virtual function call is to local CUsbUiNotifOtgError::Cancel, //not to any possibly derived class implementation. Cancel(); + delete iDialerWatcher; + delete iQuery; } void CUsbUiNotifOtgError::ConstructL() @@ -133,16 +136,29 @@ { FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::RunL")); TInt returnValue = KErrNone; - + FeatureManager::InitializeLibL(); + if ( FeatureManager::FeatureSupported( KFeatureIdFfKeypadNoSendKey ) ) + { + if (!iDialerWatcher) + { + iDialerWatcher = CUsbuinotifDialerWatcher::NewL(this); + } + } + FeatureManager::UnInitializeLib(); + iDismissed=EFalse; DisableKeylock(); SuppressAppSwitching( ETrue ); //Excute dialog and check return value returnValue = QueryUserResponseL(); - - SuppressAppSwitching( EFalse ); - RestoreKeylock(); - CompleteMessage( returnValue ); + if (!iDismissed) + { + SuppressAppSwitching( EFalse ); + RestoreKeylock(); + delete iDialerWatcher; + iDialerWatcher = NULL; + CompleteMessage( returnValue ); + } FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::RunL() completed")); } @@ -154,15 +170,54 @@ // void CUsbUiNotifOtgError::Cancel() { - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel")); + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel")); + + // If dialog is not dismissed this is normal cancel and if query + // doesn't exsist notifier is canceled during dismission + if (!iDismissed || !iQuery ) + { + delete iDialerWatcher; + iDialerWatcher = NULL; + CompleteMessage( KErrCancel ); + } if (iQuery) { delete iQuery; iQuery = NULL; } - CompleteMessage( KErrCancel ); + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel() completed")); + } - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel() completed")); +// ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::DialerActivated +// Release all own resources (member variables) +// ---------------------------------------------------------------------------- +// +void CUsbUiNotifOtgError::DialerActivated() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::AppKeyPressed()")); + if ( iQuery ) + { + iDismissed=ETrue; + Cancel(); + } + } + +// ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::ReActivateDialog +// Release all own resources (member variables) +// ---------------------------------------------------------------------------- +// +void CUsbUiNotifOtgError::ReActivateDialog() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ReActivateDialog()")); + if ( !IsActive()) + { + SetActive(); + iStatus = KRequestPending; + TRequestStatus* stat = &iStatus; + User::RequestComplete( stat, KErrNone ); + } } // ---------------------------------------------------------------------------- @@ -175,9 +230,17 @@ FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::QueryUserResponseL")); TInt returnValue = KErrNone; TInt resourceId = R_USB_QUERY_OTG_ERROR; - - iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone ); - + if (iDismissed) + { + iQuery = CAknQueryDialog::NewL(); + } + else + { + iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone ); + } + + + iDismissed=EFalse; if (iCoverDisplaySupported) { iQuery->PublishDialogL( iErrorId, KUsbUiNotifOtgError );