coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp
branchRCL_3
changeset 19 924385140d98
parent 0 2e3d3ce01487
child 20 c2c61fdca848
--- a/coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp	Thu Aug 19 10:05:08 2010 +0300
+++ b/coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp	Tue Aug 31 15:24:25 2010 +0300
@@ -53,7 +53,8 @@
         const TBool aMemoryCardLockSupported ) :
     iSysApDriveList( aSysApDriveList ),
     iSysApAppUi( aSysApAppUi ),
-    iMemoryCardLockSupported( aMemoryCardLockSupported )
+    iMemoryCardLockSupported( aMemoryCardLockSupported ),
+    iMemCardPwdDialog(NULL)
     {
     }
 
@@ -67,8 +68,12 @@
         _L( "CSysApDriveUnlockHandler::~CSysApDriveUnlockHandler" ) ) );
 
     iIgnoreQueryResult = ETrue;
-    delete iQueryShowCB;
-    delete iMemoryCardDialog;
+    if (iMemCardPwdDialog!=NULL)
+        {
+        //MemoryCardDialog already exist
+        delete iMemCardPwdDialog;
+        iMemCardPwdDialog = NULL;
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -77,16 +82,6 @@
 //
 void CSysApDriveUnlockHandler::StartUnlock()
     {
-    TBool isOngoing( IsQueryOngoing() );
-
-    TRACES( RDebug::Print(
-        _L( "CSysApMCSysApMMCUnlockObserver::StartUnlock: ongoing: %d" ),
-        isOngoing ) );
-
-    if ( isOngoing )
-        {
-        return;
-        }
     TRAPD( err, DoStartQueryIfNeededL() );
     if ( err != KErrNone )
         {
@@ -150,7 +145,6 @@
 
     // Mark handled and start next query
     iSysApDriveList.MarkDriveUnlockQueryShown( iDriveToUnlock );
-    DoStartQueryAsyncIfNeeded();
     }
 
 // ---------------------------------------------------------------------------
@@ -175,19 +169,23 @@
 //
 void CSysApDriveUnlockHandler::ShowUnlockQueryL()
     {
+    iDriveToUnlock = iSysApDriveList.DriveToUnlock();
     TRACES( RDebug::Print(
         _L( "CSysApMCSysApMMCUnlockObserver::ShowUnlockQueryL: drive: %d" ),
         iDriveToUnlock ) );
 
-    if ( !iMemoryCardDialog )
+    if (iMemCardPwdDialog!=NULL)
         {
-        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 );
-        }
-    }
+        //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") ) );    
+}
 
 // ---------------------------------------------------------------------------
 // CSysApDriveUnlockHandler::IsQueryOngoing
@@ -195,7 +193,7 @@
 //
 TBool CSysApDriveUnlockHandler::IsQueryOngoing() const
     {
-    return ( iMemoryCardDialog || iQueryShowCB );
+    return 0; 
     }
 
 // ---------------------------------------------------------------------------
@@ -205,10 +203,19 @@
 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();
@@ -216,6 +223,13 @@
     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 );
         }
     }
@@ -232,18 +246,6 @@
         DoStopUnlock( KErrNone );
         return;
         }
-    delete iQueryShowCB;
-    iQueryShowCB = NULL;
-    iQueryShowCB = new CAsyncCallBack(
-        TCallBack( QueryShowCB, this ), CActive::EPriorityStandard );
-    if ( iQueryShowCB )
-        {
-        iQueryShowCB->CallBack();
-        }
-    else
-        {
-        DoStopUnlock( KErrNoMemory );
-        }
     }
 
 // ---------------------------------------------------------------------------
@@ -258,12 +260,117 @@
             _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