diff -r 924385140d98 -r c2c61fdca848 coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp --- a/coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp Tue Aug 31 15:24:25 2010 +0300 +++ b/coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp Wed Sep 01 12:24:48 2010 +0100 @@ -53,8 +53,7 @@ const TBool aMemoryCardLockSupported ) : iSysApDriveList( aSysApDriveList ), iSysApAppUi( aSysApAppUi ), - iMemoryCardLockSupported( aMemoryCardLockSupported ), - iMemCardPwdDialog(NULL) + iMemoryCardLockSupported( aMemoryCardLockSupported ) { } @@ -68,12 +67,8 @@ _L( "CSysApDriveUnlockHandler::~CSysApDriveUnlockHandler" ) ) ); iIgnoreQueryResult = ETrue; - if (iMemCardPwdDialog!=NULL) - { - //MemoryCardDialog already exist - delete iMemCardPwdDialog; - iMemCardPwdDialog = NULL; - } + delete iQueryShowCB; + delete iMemoryCardDialog; } // --------------------------------------------------------------------------- @@ -82,6 +77,16 @@ // void CSysApDriveUnlockHandler::StartUnlock() { + TBool isOngoing( IsQueryOngoing() ); + + TRACES( RDebug::Print( + _L( "CSysApMCSysApMMCUnlockObserver::StartUnlock: ongoing: %d" ), + isOngoing ) ); + + if ( isOngoing ) + { + return; + } TRAPD( err, DoStartQueryIfNeededL() ); if ( err != KErrNone ) { @@ -145,6 +150,7 @@ // Mark handled and start next query iSysApDriveList.MarkDriveUnlockQueryShown( iDriveToUnlock ); + DoStartQueryAsyncIfNeeded(); } // --------------------------------------------------------------------------- @@ -169,23 +175,19 @@ // void CSysApDriveUnlockHandler::ShowUnlockQueryL() { - iDriveToUnlock = iSysApDriveList.DriveToUnlock(); TRACES( RDebug::Print( _L( "CSysApMCSysApMMCUnlockObserver::ShowUnlockQueryL: drive: %d" ), iDriveToUnlock ) ); - if (iMemCardPwdDialog!=NULL) + if ( !iMemoryCardDialog ) { - //PowerMenu already exist - delete iMemCardPwdDialog; - iMemCardPwdDialog = NULL; - } - TRACES( RDebug::Print(_L("CSysApAppUi::HandleKeyEventL, JEELani 01") ) ); - iMemCardPwdDialog = CHbDeviceInputDialogSymbian::NewL(); - TRACES( RDebug::Print(_L("CSysApAppUi::HandleKeyEventL, JEELani 02") ) ); - iMemCardPwdDialog->ShowL(); - TRACES( RDebug::Print(_L("CSysApAppUi::HandleKeyEventL, JEELani 03") ) ); -} + CAknMemoryCardDialog* mmcDialog = CAknMemoryCardDialog::NewLC( this ); + iMemoryCardDialog = mmcDialog; // temporary variable used for hiding codescanner error + iMemoryCardDialog->SetSelfPointer( &iMemoryCardDialog ); + TDriveNumber drive( static_cast< TDriveNumber >( iDriveToUnlock ) ); + iMemoryCardDialog->UnlockCardLD( drive, ETrue ); + } + } // --------------------------------------------------------------------------- // CSysApDriveUnlockHandler::IsQueryOngoing @@ -193,7 +195,7 @@ // TBool CSysApDriveUnlockHandler::IsQueryOngoing() const { - return 0; + return ( iMemoryCardDialog || iQueryShowCB ); } // --------------------------------------------------------------------------- @@ -203,19 +205,10 @@ void CSysApDriveUnlockHandler::DoStartQueryIfNeededL() { iDriveToUnlock = iSysApDriveList.DriveToUnlock(); - if ( iDriveToUnlock == KErrNotFound ) { - _LIT(KChargingNote,"Phone does not found drive to unlock"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KChargingNote); - TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString return; } - if ( iMemoryCardLockSupported ) { ShowUnlockQueryL(); @@ -223,13 +216,6 @@ else { iSysApAppUi.ShowQueryL( ESysApMemoryCardLockedNote ); - _LIT(KChargingNote,"Phone does not support locked memory cards"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KChargingNote); - TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString iSysApDriveList.MarkDriveUnlockQueryShown( iDriveToUnlock ); } } @@ -246,6 +232,18 @@ DoStopUnlock( KErrNone ); return; } + delete iQueryShowCB; + iQueryShowCB = NULL; + iQueryShowCB = new CAsyncCallBack( + TCallBack( QueryShowCB, this ), CActive::EPriorityStandard ); + if ( iQueryShowCB ) + { + iQueryShowCB->CallBack(); + } + else + { + DoStopUnlock( KErrNoMemory ); + } } // --------------------------------------------------------------------------- @@ -260,117 +258,12 @@ _L( "CSysApMCSysApMMCUnlockObserver::DoStopUnlock: error: %d" ), aError ) ); } - ReleaseMemoryForInputCardDialog(); iIgnoreQueryResult = ETrue; + delete iMemoryCardDialog; + iMemoryCardDialog = NULL; + delete iQueryShowCB; + iQueryShowCB = NULL; iIgnoreQueryResult = EFalse; } -void CSysApDriveUnlockHandler::ReleaseMemoryForInputCardDialog() - { - if (iMemCardPwdDialog!=NULL) - { - //MemoryCardDialog already exist - delete iMemCardPwdDialog; - iMemCardPwdDialog = NULL; - } - } - -TInt CSysApDriveUnlockHandler::CheckMemoryDialogIfNeeded() - { - TRACES( RDebug::Print(_L( "CSysApDriveUnlockHandler::CheckMemoryDialogIfNeeded(): Begin" ))); - TDriveNumber drive( static_cast< TDriveNumber >( iDriveToUnlock ) ); - TRACES( RDebug::Print(_L( "CSysApDriveUnlockHandler::CheckMemoryDialogIfNeeded()" ))); - TPtrC aStringPointer11 = iMemCardPwdDialog->getTextL(); - ConvertCharactersToPwd(aStringPointer11,iPassword); - - if(!aStringPointer11.Length()) - { - return EFalse; // It meant user has pressed OK without password - } - - TRACES( RDebug::Print(_L( "CSysApMCSysApMMCUnlockObserver::RunL; iPassword %S" ),&iPassword)); - CEikonEnv* eikEnv = CEikonEnv:: Static(); - TInt err = eikEnv->FsSession().UnlockDrive(drive,iPassword,ETrue); - ReleaseMemoryForInputCardDialog(); - - if ( err == KErrNone) - { - TRACES( RDebug::Print(_L( "CSysApAppUi::ReleaseMemoryCardCustomDialogMemory(), Drive Unlocked Succesfully" ))); - _LIT(KUnlockNote,"The memory is unlocked!"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KUnlockNote); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString - return ETrue; - } - else if( err == KErrAccessDenied ) - { - TRACES( RDebug::Print(_L( "CSysApAppUi::ReleaseMemoryCardCustomDialogMemory(), Password InCorrect" ))); - _LIT(KUnlockDeniedNote,"The password is incorrect, try again!"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KUnlockDeniedNote); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString - return EFalse; - } - else if( err == KErrAlreadyExists ) - { - TRACES( RDebug::Print(_L( "CSysApAppUi::ReleaseMemoryCardCustomDialogMemory(), Already been Drive Unlocked" ))); - _LIT(KUnlockAlreadyExistNote,"The disk has already been unlocked!"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KUnlockAlreadyExistNote); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString - return ETrue; - } - else if( err == KErrNotSupported ) - { - TRACES( RDebug::Print(_L( "CSysApAppUi::ReleaseMemoryCardCustomDialogMemory(), Media does not support password locking." ))); - _LIT(KUnlockNotSupporrtedNote,"The media does not support password locking!"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KUnlockNotSupporrtedNote); - TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString - return ETrue; - } - else - { - // check for error -18 what it is . - _LIT(KUnlockOperationCancelNote,"Error occurred, operation cancelled!"); - HBufC* aString = HBufC16::NewLC(150); - TPtrC aStringPointer = aString->Des(); - aStringPointer.Set(KUnlockOperationCancelNote); - TRACES( RDebug::Print( _L("CSysApWsClient::RunL(): Key EEventKeyUp 01") ) ); - iSysApAppUi.ShowExampleUiNoteL( aStringPointer ); - CleanupStack::PopAndDestroy(); // aString - return ETrue; - } -} - -HBufC8* CSysApDriveUnlockHandler::Convert16to8L(TDesC16& aStr)//const - { - - HBufC8* newFrom1 = HBufC8::NewL(aStr.Length()); - - newFrom1->Des().Copy(aStr); - - return newFrom1; - } - -void CSysApDriveUnlockHandler::ConvertCharactersToPwd(TDesC& aWord, TDes8& aConverted) -{ - aConverted.FillZ(aConverted.MaxLength()); - aConverted.Zero(); - - if (aWord.Length()) - { - aConverted.Copy( (TUint8*)(&aWord[0]), aWord.Size() ); - } -} - // End of File