diff -r 25fce757be94 -r e02eb84a14d2 usbuis/usbuinotif/src/usbuinotifotgerror.cpp --- a/usbuis/usbuinotif/src/usbuinotifotgerror.cpp Tue Aug 31 16:13:57 2010 +0300 +++ b/usbuis/usbuinotif/src/usbuinotifotgerror.cpp Wed Sep 01 12:20:49 2010 +0100 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007, 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2010 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" @@ -17,16 +17,21 @@ // INCLUDE FILES -#include // dialog -#include +#include // Eikon environment +#include // BAFL utils (for language file) +#include // Unicode character conversion utilities +#include // Localisation stringloader +#include +#include +#include + #include // pck +#include // Own resources +#include // Dialog index for cover UI + #include "usbuinotifotgerror.h" // Own class definition #include "usbuinotifdebug.h" // Debugging macros -// CONSTANTS -/** granularity for allocating error strings */ -const TInt KUsbOtgErrorGranularity = 7; - // ================= MEMBER FUNCTIONS ========================================= @@ -51,7 +56,7 @@ // ---------------------------------------------------------------------------- // CUsbUiNotifOtgError::CUsbUiNotifOtgError() : - iStringIds(NULL) + iStringIds( KUsbUiNotifOtgGeneralQueryGranularity) { } @@ -64,29 +69,21 @@ //Make sure that the request is completed. Note that inside the destructor, //this virtual function call is to local CUsbUiNotifOtgError::Cancel, //not to any possibly derived class implementation. - delete iStringIds; Cancel(); + delete iDialerWatcher; + delete iQuery; } void CUsbUiNotifOtgError::ConstructL() { CUSBUINotifierBase::ConstructL(); - iStringIds = new (ELeave) CDesCArrayFlat(KUsbOtgErrorGranularity); - _LIT(KCurrentLimit, "txt_usb_info_error_in_usb_connection_disconnect_d"); - _LIT(KTooMuchCurrent, "txt_usb_info_unsupported_usb_device_disconnect_de"); - _LIT(KUnsupported, "txt_usb_info_unsupported_usb_device_disconnect_de"); - _LIT(KHubUnsupported, "txt_usb_info_hubs_are_not_supported_disconnect_us"); - _LIT(KUnRecoverable, "txt_usb_info_error_in_usb_connection_disconnect_d"); - _LIT(KAttachTimeOut, "txt_usb_info_remove_usb_cable_or_connect_a_device"); - _LIT(KNotEnoughMemory, "txt_usb_info_memory_full_close_some_applications"); - iStringIds->AppendL( KCurrentLimit); - iStringIds->AppendL( KTooMuchCurrent); - iStringIds->AppendL( KUnsupported); - iStringIds->AppendL( KHubUnsupported); - iStringIds->AppendL( KUnRecoverable); - iStringIds->AppendL( KAttachTimeOut); - iStringIds->AppendL( KNotEnoughMemory); - + iStringIds.AppendL( R_USB_OTG_ERROR_CURRENT_LIMIT); + iStringIds.AppendL( R_USB_OTG_ERROR_TOO_MUCH_CURRENT_REQUIRED); + iStringIds.AppendL( R_USB_OTG_ERROR_UNSUPPORTED); + iStringIds.AppendL( R_USB_OTG_ERROR_HUB_UNSUPPORTED); + iStringIds.AppendL( R_USB_OTG_ERROR_UNRECOVERABLE); + iStringIds.AppendL( R_USB_OTG_ERROR_ATTACH_TIMEDOUT); + iStringIds.AppendL( R_USB_ERROR_MEMORY_NOT_ENOUGH); } // ---------------------------------------------------------------------------- @@ -107,47 +104,74 @@ // Jump to RunL as soon as possible. // ---------------------------------------------------------------------------- // -void CUsbUiNotifOtgError::StartDialogL(const TDesC8& aBuffer, TInt aReplySlot, +void CUsbUiNotifOtgError::GetParamsL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage) { - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::StartDialogL")); - if (iReplySlot != 0 || iNeedToCompleteMessage) + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::GetParamsL")); + if (iQuery || iReplySlot != 0 || iNeedToCompleteMessage) { User::Leave( KErrInUse ); } - - InitializeTextResolver(); + + // Get parameters + // - TInt errorId = 0; - TPckgC pckg( errorId ); + TPckgC pckg( iErrorId ); pckg.Set( aBuffer ); - errorId = pckg(); + iErrorId = pckg(); - FTRACE(FPrint(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::GetParamsL iErrorId: %d"), errorId )); - if ( errorId < 0 || errorId >= iStringIds->MdcaCount()) + FTRACE(FPrint(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::GetParamsL iErrorId: %d"), iErrorId )); + if ( iErrorId < 0 || iErrorId >= iStringIds.Count() ) { User::Leave( KErrArgument); } + iMessage = aMessage; iNeedToCompleteMessage = ETrue; - iReplySlot = aReplySlot; - - if (iQuery) - { - delete iQuery; - iQuery = NULL; - } + iReplySlot = aReplySlot; + + SetActive(); + iStatus = KRequestPending; + TRequestStatus* stat = &iStatus; + User::RequestComplete( stat, KErrNone ); - iQuery = CHbDeviceMessageBoxSymbian::NewL( - CHbDeviceMessageBoxSymbian::EWarning, this); - iQuery->SetTimeout(0); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(iStringIds->MdcaPoint(errorId) ); - iQuery->SetTextL(*stringHolder); - iQuery->ShowL(); - CleanupStack::PopAndDestroy( stringHolder ); - - - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::StartDialogL completed")); + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::GetParamsL() completed")); + } + +// ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::RunL +// Ask user response and return it to caller. +// ---------------------------------------------------------------------------- +// +void CUsbUiNotifOtgError::RunL() + { + 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(); + if (!iDismissed) + { + SuppressAppSwitching( EFalse ); + RestoreKeylock(); + delete iDialerWatcher; + iDialerWatcher = NULL; + CompleteMessage( returnValue ); + } + + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::RunL() completed")); } // ---------------------------------------------------------------------------- @@ -157,44 +181,93 @@ // 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) { - iQuery->Close(); delete iQuery; iQuery = NULL; } - CUSBUINotifierBase::Cancel(); - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel() completed")); } + // ---------------------------------------------------------------------------- -// Call back function to observe device message box closing. +// CUsbUiNotifOtgError::DialerActivated +// Release all own resources (member variables) // ---------------------------------------------------------------------------- // -void CUsbUiNotifOtgError::MessageBoxClosed( - const CHbDeviceMessageBoxSymbian* /*aMessageBox*/, - CHbDeviceMessageBoxSymbian::TButtonId aButton) +void CUsbUiNotifOtgError::DialerActivated() { - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::MessageBoxClosed")); - int returnValue = KErrNone; - - //iQuery will be deleted in Cancel. If Cancel is not called, it will be - //deleted next time the query is shown. + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::AppKeyPressed()")); + if ( iQuery ) + { + iDismissed=ETrue; + Cancel(); + } + } - if (aButton == CHbDeviceMessageBoxSymbian::EAcceptButton) - { - returnValue = KErrNone; - } - else +// ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::ReActivateDialog +// Release all own resources (member variables) +// ---------------------------------------------------------------------------- +// +void CUsbUiNotifOtgError::ReActivateDialog() + { + FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ReActivateDialog()")); + if ( !IsActive()) { - returnValue = KErrCancel; + SetActive(); + iStatus = KRequestPending; + TRequestStatus* stat = &iStatus; + User::RequestComplete( stat, KErrNone ); } - - CompleteMessage( returnValue ); - - FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::MessageBoxClosed completed")); } +// ---------------------------------------------------------------------------- +// CUsbUiNotifOtgError::QueryUserResponseL +// Show query dialog. +// ---------------------------------------------------------------------------- +// +TInt CUsbUiNotifOtgError::QueryUserResponseL() + { + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::QueryUserResponseL")); + TInt returnValue = KErrNone; + TInt resourceId = R_USB_QUERY_OTG_ERROR; + if (iDismissed) + { + iQuery = CAknQueryDialog::NewL(); + } + else + { + iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone ); + } + + + iDismissed=EFalse; + if (iCoverDisplaySupported) + { + iQuery->PublishDialogL( iErrorId, KUsbUiNotifOtgError ); + } + HBufC *stringHolder = StringLoader::LoadLC( iStringIds[iErrorId] ); + + TInt keypress = iQuery->ExecuteLD( resourceId, *stringHolder ); + + CleanupStack::PopAndDestroy( stringHolder ); + + iQuery = NULL; // Dialog destroyed + + returnValue = keypress ? KErrNone : KErrCancel; //OK? + + FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::QueryUserResponseL completed")); + return returnValue; + } // End of File