terminalsecurity/SCP/SCPTimestampPlugin/src/SCPUserInf.cpp
branchRCL_3
changeset 26 19bba8228ff0
child 27 5cc2995847ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/terminalsecurity/SCP/SCPTimestampPlugin/src/SCPUserInf.cpp	Wed Sep 01 12:27:42 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2000 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: CSCPUserInf implementation
+*
+*/
+
+#include "SCPUserInf.h"
+#include <SCPTimestampPluginLang.rsg>
+
+#include <AknGlobalNote.h>
+#include <aknnotewrappers.h>
+#include "SCPDebug.h"
+
+#include <hal.h>
+// For wipe
+#include <starterclient.h>
+#include <syslangutil.h>
+#include <rfsClient.h>
+#include "DMUtilClient.h"
+CSCPUserInf::CSCPUserInf() :
+    CActive(EPriorityStandard) // Standard priority
+    {
+    }
+
+CSCPUserInf* CSCPUserInf::NewLC()
+    {
+    CSCPUserInf* self = new (ELeave) CSCPUserInf();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+CSCPUserInf* CSCPUserInf::NewL()
+    {
+    CSCPUserInf* self = CSCPUserInf::NewLC();
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+void CSCPUserInf::ConstructL()
+    {
+    //User::LeaveIfError(iTimer.CreateLocal()); // Initialize timer
+    Dprint( (_L("CSCPUserInf::ConstructL()") ));
+    CActiveScheduler::Add(this); // Add to scheduler
+    }
+
+CSCPUserInf::~CSCPUserInf()
+    {
+    Cancel(); // Cancel any request, if outstanding
+    //iTimer.Close(); // Destroy the RTimer object
+    // Delete instance variables if any
+	if (idispText)
+    delete idispText;
+    }
+
+void CSCPUserInf::DoCancel()
+    {
+    //iTimer.Cancel();
+    }
+
+void CSCPUserInf::StartL(TDesC& aString)
+    {
+	idispText = HBufC16::NewL( aString.Length() );
+    idispText->Des().Append(aString);
+    Cancel(); // Cancel any request, just to be sure
+    iState = EGlobalConf;
+    Dprint( (_L("CSCPUserInf::StartL()") ));
+    TRequestStatus* aStatus = &iStatus;
+    User::RequestComplete(aStatus, KErrNone);
+    SetActive(); // Tell scheduler a request is active
+    }
+	
+void CSCPUserInf::DoRfsL()
+	{
+	Cancel(); // Cancel any request, just to be sure
+    iState = ERfs;
+    Dprint( (_L("CSCPUserInf::DoRfsL()") ));
+    TRequestStatus* aStatus = &iStatus;
+    User::RequestComplete(aStatus, KErrNone);
+	// This will give the control back to SecUi
+    SetActive(); // Tell scheduler a request is active
+    }
+
+void CSCPUserInf::RunL()
+    {
+	
+    Dprint( (_L("CSCPUserInf::RunL()") ));
+	if (iState == EGlobalConf)
+	{
+	Dprint( (_L("CSCPUserInf::EGlobalConf") ));
+    TRAP_IGNORE(                                            
+		TRequestStatus status;
+		    TPtr16 bufDes = idispText->Des();                    
+		CAknGlobalNote* lInfoNote = CAknGlobalNote :: NewLC();
+		lInfoNote->SetSoftkeys(R_AVKON_SOFTKEYS_OK_EMPTY__OK);
+		lInfoNote->SetAnimation(R_QGN_NOTE_WARNING_ANIM);
+		lInfoNote->ShowNoteL(status, EAknGlobalInformationNote, bufDes);
+		lInfoNote->SetPriority(ECoeWinPriorityAlwaysAtFront + 1);
+		    User::WaitForRequest( status );
+		CleanupStack::PopAndDestroy(1); // note
+			);
+	}
+	else if (iState == ERfs)
+	{
+	Dprint( (_L("CSCPUserInf::ERfs") ));
+    // Mark MMC card to be formatted also in bootup
+	RDMUtil util;
+	if ( util.Connect() == KErrNone )
+	    {        
+        TInt err = util.MarkMMCWipe();
+		Dprint( (_L("CSCPUserInf::rfsClient.markmmc for wipe") ));
+        if( err != KErrNone )
+        	{
+        	// even if not successfull we try to reset as much as possible -> continue
+        	Dprint( ( _L( "CSCPUserInf::WipeDeviceL(): FAILED to mark MMC wipe: %d"), err ) );        	
+        	}    
+        util.Close();
+	    }	
+	
+	// In case of deep level RFS, set the default language code
+	// here, before RFS reboot.
+	
+	TInt language( 0 );
+	Dprint( (_L("CSCPUserInf::Language") ));
+	// If default language is not found, we reset anyway
+	if ( SysLangUtil::GetDefaultLanguage( language ) == KErrNone )
+	{
+	HAL::Set( HALData::ELanguageIndex, language );
+	Dprint( (_L("CSCPUserInf::HAL,set") ));
+	}
+
+    // Reboot with RFS reason  
+    Dprint( (_L("CSCPUserInf::rfsClient.Reboot with RFS reason") ));
+	RStarterSession startersession;
+	if( startersession.Connect() == KErrNone )
+		{
+		startersession.Reset( RStarterSession::EDeepRFSReset );
+		Dprint( (_L("CSCPUserInf::rfsClient.starter reset") ));
+		startersession.Close();
+		}
+    
+    TInt ret;	
+    if ( ret != KErrNone )
+		{
+		Dprint( ( _L( "CSCPUserInf::WipeDeviceL(): Rfs FAILED: %d"), ret ) );
+		}  
+	Dprint( (_L("CSCPUserInf::out of ERfs") ));
+	}	
+    }
+	
+TInt CSCPUserInf::RunError(TInt /*aError */)
+    {
+    return KErrNone;
+    }