coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp
changeset 0 2e3d3ce01487
child 19 924385140d98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/memorycard/sysapdriveunlockhandler.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2007 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:  Drive unlock handler implementation
+ *
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <f32file.h>
+#include <e32property.h>
+#include <UikonInternalPSKeys.h>
+#include "sysapdriveunlockhandler.h"
+#include "sysapdrivelist.h"
+#include "SysApAppUi.h"
+#include "SysAp.hrh"
+
+// ============================ MEMBER FUNCTIONS =============================
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::CSysApDriveUnlockHandler
+// ---------------------------------------------------------------------------
+//
+CSysApDriveUnlockHandler* CSysApDriveUnlockHandler::NewL(
+        CSysApDriveList& aSysApDriveList,
+        CSysApAppUi& aSysApAppUi,
+        const TBool aMemoryCardLockSupported )
+    {
+    return new ( ELeave ) CSysApDriveUnlockHandler(
+        aSysApDriveList,
+        aSysApAppUi,
+        aMemoryCardLockSupported );
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::CSysApDriveUnlockHandler
+// ---------------------------------------------------------------------------
+//
+CSysApDriveUnlockHandler::CSysApDriveUnlockHandler(
+        CSysApDriveList& aSysApDriveList,
+        CSysApAppUi& aSysApAppUi,
+        const TBool aMemoryCardLockSupported ) :
+    iSysApDriveList( aSysApDriveList ),
+    iSysApAppUi( aSysApAppUi ),
+    iMemoryCardLockSupported( aMemoryCardLockSupported )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::~CSysApDriveUnlockHandler
+// ---------------------------------------------------------------------------
+//
+CSysApDriveUnlockHandler::~CSysApDriveUnlockHandler()
+    {
+    TRACES( RDebug::Print(
+        _L( "CSysApDriveUnlockHandler::~CSysApDriveUnlockHandler" ) ) );
+
+    iIgnoreQueryResult = ETrue;
+    delete iQueryShowCB;
+    delete iMemoryCardDialog;
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::StartUnlock
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::StartUnlock()
+    {
+    TBool isOngoing( IsQueryOngoing() );
+
+    TRACES( RDebug::Print(
+        _L( "CSysApMCSysApMMCUnlockObserver::StartUnlock: ongoing: %d" ),
+        isOngoing ) );
+
+    if ( isOngoing )
+        {
+        return;
+        }
+    TRAPD( err, DoStartQueryIfNeededL() );
+    if ( err != KErrNone )
+        {
+        DoStopUnlock( err );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::StopUnlock
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::StopUnlock( TInt aDrive )
+    {
+    TBool isOngoing( IsQueryOngoing() );
+
+    TRACES( RDebug::Print(
+        _L( "CSysApMCSysApMMCUnlockObserver::StopUnlock: ongoing: %d, drive: %d" ),
+        isOngoing, iDriveToUnlock ) );
+
+    if ( !isOngoing || iDriveToUnlock != aDrive )
+        {
+        return;
+        }
+    // Stop current query and continue with other locked memory cards
+    iSysApDriveList.MarkDriveUnlockQueryShown( iDriveToUnlock );
+    DoStopUnlock( KErrNone );
+    TRAPD( err, DoStartQueryIfNeededL() );
+    if ( err != KErrNone )
+        {
+        DoStopUnlock( err );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::UnlockComplete
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::UnlockComplete( TInt aResult )
+    {
+    TRACES( RDebug::Print(
+        _L( "CSysApMCSysApMMCUnlockObserver::UnlockComplete: ignore: %d, drive: %d, result: %d" ),
+        iIgnoreQueryResult, iDriveToUnlock, aResult ) );
+
+    if ( iIgnoreQueryResult || iDriveToUnlock == KErrNotFound )
+        {
+        return;
+        }
+
+    // Handle default memory card functionality
+    if ( iDriveToUnlock == iSysApDriveList.DefaultMemoryCard() )
+        {
+        if ( aResult == KErrNone )
+            {
+            RProperty::Set( KPSUidUikon, KUikMMCInserted, 1 );
+            }
+        else
+            {
+            RProperty::Set( KPSUidUikon, KUikMMCInserted, 0 );
+            }
+        }
+
+    // Mark handled and start next query
+    iSysApDriveList.MarkDriveUnlockQueryShown( iDriveToUnlock );
+    DoStartQueryAsyncIfNeeded();
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::QueryShowCB
+// ---------------------------------------------------------------------------
+//
+TInt CSysApDriveUnlockHandler::QueryShowCB( TAny* aPtr )
+    {
+    CSysApDriveUnlockHandler* self =
+        static_cast< CSysApDriveUnlockHandler* >( aPtr );
+    TRAPD( err, self->ShowUnlockQueryL() );
+    if ( err != KErrNone )
+        {
+        self->DoStopUnlock( err );
+        }
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::ShowUnlockQueryL
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::ShowUnlockQueryL()
+    {
+    TRACES( RDebug::Print(
+        _L( "CSysApMCSysApMMCUnlockObserver::ShowUnlockQueryL: drive: %d" ),
+        iDriveToUnlock ) );
+
+    if ( !iMemoryCardDialog )
+        {
+        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
+// ---------------------------------------------------------------------------
+//
+TBool CSysApDriveUnlockHandler::IsQueryOngoing() const
+    {
+    return ( iMemoryCardDialog || iQueryShowCB );
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::DoStartQueryIfNeededL
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::DoStartQueryIfNeededL()
+    {
+    iDriveToUnlock = iSysApDriveList.DriveToUnlock();
+    if ( iDriveToUnlock == KErrNotFound )
+        {
+        return;
+        }
+    if ( iMemoryCardLockSupported )
+        {
+        ShowUnlockQueryL();
+        }
+    else
+        {
+        iSysApAppUi.ShowQueryL( ESysApMemoryCardLockedNote );
+        iSysApDriveList.MarkDriveUnlockQueryShown( iDriveToUnlock );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::DoStartQueryAsyncIfNeeded
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::DoStartQueryAsyncIfNeeded()
+    {
+    iDriveToUnlock = iSysApDriveList.DriveToUnlock();
+    if ( iDriveToUnlock == KErrNotFound )
+        {
+        DoStopUnlock( KErrNone );
+        return;
+        }
+    delete iQueryShowCB;
+    iQueryShowCB = NULL;
+    iQueryShowCB = new CAsyncCallBack(
+        TCallBack( QueryShowCB, this ), CActive::EPriorityStandard );
+    if ( iQueryShowCB )
+        {
+        iQueryShowCB->CallBack();
+        }
+    else
+        {
+        DoStopUnlock( KErrNoMemory );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSysApDriveUnlockHandler::DoStopUnlock
+// ---------------------------------------------------------------------------
+//
+void CSysApDriveUnlockHandler::DoStopUnlock( TInt aError )
+    {
+    if ( aError != KErrNone )
+        {
+        TRACES( RDebug::Print(
+            _L( "CSysApMCSysApMMCUnlockObserver::DoStopUnlock: error: %d" ),
+            aError ) );
+        }
+    iIgnoreQueryResult = ETrue;
+    delete iMemoryCardDialog;
+    iMemoryCardDialog = NULL;
+    delete iQueryShowCB;
+    iQueryShowCB = NULL;
+    iIgnoreQueryResult = EFalse;
+    }
+
+// End of File