pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpProvisioningDocument.cpp
changeset 0 3ce708148e4d
child 2 a5fecba4b1e4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpProvisioningDocument.cpp	Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,379 @@
+/*
+* Copyright (c) 2004-2006 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: Implementation of PnPMS components
+*
+*/
+
+
+// INCLUDE FILES
+#include <AknGlobalNote.h>              // for CAknGlobalNote
+#include <AknGlobalConfirmationQuery.h> // for CAknGlobalConfirmationQuery
+#include <textresolver.h>
+#include <AknQueryDialog.h>
+#include <aknnotewrappers.h>
+#include <StringLoader.h>
+#include <PnpProvisioning.rsg>
+#include <apgcli.h>
+#include <e32uid.h>
+#include <CWPEngine.h>      // Using WAP provisioning engine
+#include <e32math.h>
+
+#include "PnpProvisioningDocument.h"
+#include "PnpProvisioningAppUi.h"
+#include "NHeadWrapperParser.h"
+#include "PnpLogger.h"
+#include "PnpProvisioningSaver.h"
+
+
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// constructor
+CPnpProvisioningDocument::CPnpProvisioningDocument(CEikApplication& aApp)
+: CAknDocument(aApp)    
+    {
+    LOGSTRING( "CPnpProvisioningDocument()" );
+    }
+
+// destructor
+CPnpProvisioningDocument::~CPnpProvisioningDocument()
+    {
+    LOGSTRING( "~CPnpProvisioningDocument()" );
+    delete iProvisioningData;
+    delete iNHwrParser;
+    //delete iPeriodic;
+    LOGSTRING( "~CPnpProvisioningDocument() done" );
+    }
+
+// EPOC default constructor can leave.
+void CPnpProvisioningDocument::ConstructL()
+    {
+    LOGSTRING( "CPnpProvisioningDocument::ConstructL" );
+    }
+
+// Two-phased constructor.
+CPnpProvisioningDocument* CPnpProvisioningDocument::NewL(
+        CEikApplication& aApp)     // CPnpProvisioningApp reference
+    {
+    LOGSTRING( "CPnpProvisioningDocument::NewL" );
+    CPnpProvisioningDocument* self = new (ELeave) CPnpProvisioningDocument( aApp );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+    
+// ----------------------------------------------------
+// CPnpProvisioningDocument::CreateAppUiL()
+// constructs CPnpProvisioningAppUi
+// ----------------------------------------------------
+//
+CEikAppUi* CPnpProvisioningDocument::CreateAppUiL()
+    {
+    LOGSTRING( "CreateAppUiL" );
+    iAppUi = new (ELeave) CPnpProvisioningAppUi;
+    return iAppUi;
+    }
+
+
+void CPnpProvisioningDocument::OpenFileL( CFileStore*& /*aFileStore*/, RFile& aFile )
+    {
+    LOGSTRING( "CPnpProvisioningDocument::OpenFileL (CFileStore*& /*aFileStore*/, RFile& aFile)" );
+    TFileName fileName;
+    aFile.Name( fileName );
+    LOGTEXT( fileName );
+
+    TRAPD( err, DoHandleFileL( aFile ) );
+    if( err != KErrNone )
+        {
+        LOGSTRING2( "error in DoHandleFileL: %i", err );
+        User::Leave( err );
+        }
+    iReady = ETrue;
+    }
+
+
+// ----------------------------------------------------
+// CPnpProvisioningDocument::OpenFileL
+// Overrides CAknDocument::OpenFileL to support document file
+// ----------------------------------------------------
+//
+CFileStore* CPnpProvisioningDocument::OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs)
+    {
+    LOGSTRING( "CPnpProvisioningDocument::OpenFileL (TBool aDoOpen,const TDesC& aFilename,RFs& aFs)" );
+
+    CFileStore* store = NULL;
+    store = CAknDocument::OpenFileL( aDoOpen, aFilename, aFs );
+    LOGSTRING2( "store:%i", store );
+    LOGSTRING2( "aDoOpen:%i", aDoOpen );
+    
+    iReady = ETrue;
+
+    return store;
+    }
+
+// ----------------------------------------------------
+// CPnpProvisioningDocument::RestoreL()
+// restore data from persistent store
+// ----------------------------------------------------
+//      
+void CPnpProvisioningDocument::RestoreL(const CStreamStore& /*aStore*/, const CStreamDictionary& /*aStreamDic*/)
+    {
+    }
+
+// ----------------------------------------------------
+// CPnpProvisioningDocument::StoreL()
+// store data to persistent store
+// ----------------------------------------------------
+//          
+void CPnpProvisioningDocument::StoreL(CStreamStore& /*aStore*/, CStreamDictionary& /*aStreamDic*/) const
+    {
+    }
+
+// ----------------------------------------------------
+// CPnpProvisioningDocument::HandleFileL
+// ----------------------------------------------------
+void CPnpProvisioningDocument::HandleFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs)
+    {
+    LOGSTRING( "CPnpProvisioningDocument::HandleFileL" );
+    LOGSTRING( "aFilename:" );
+    LOGTEXT( aFilename );
+
+    if(aDoOpen)
+        {
+        LOGSTRING( "aDoOpen" );
+
+        RFile file;
+        if(file.Open(aFs, aFilename,EFileRead)==KErrNone)
+            {
+            LOGSTRING( "File opened" );
+            CleanupClosePushL( file );
+            DoHandleFileL( file );
+            CleanupStack::PopAndDestroy(); // file.Close();
+            }
+        }
+    else
+        {
+        LOGSTRING( "aDoOpen was false" );
+        User::Leave( KErrGeneral );
+        }
+    LOGSTRING( "Exiting HandleFileL" );
+    }
+
+// ----------------------------------------------------
+// CPnpProvisioningDocument::DoHandleFileL
+// ----------------------------------------------------
+void CPnpProvisioningDocument::DoHandleFileL( RFile& aFile )
+    {
+    LOGSTRING( "CPnpProvisioningDocument::DoHandleFileL" );
+    TInt filesize = 0;
+    aFile.Size( filesize );
+    delete iProvisioningData;
+    iProvisioningData = 0;
+    iProvisioningData = HBufC8::NewL( filesize );
+    TPtr8 ptr = iProvisioningData->Des();
+    User::LeaveIfError( aFile.Read( ptr, filesize ) );
+    LOGSTRING( "Exiting DoHandleFileL" );
+    }
+
+// ----------------------------------------------------
+// CPnpProvisioningDocument::SaveSettingsL
+// ----------------------------------------------------
+
+THttpProvStates::TProvisioningStatus CPnpProvisioningDocument::SaveSettingsL()
+    {
+    LOGSTRING( "CPnpProvisioningDocument::SaveSettingsL" ); 
+    
+    THttpProvStates::TProvisioningStatus status = THttpProvStates::EStatusOk;
+
+    if( !iProvisioningData )
+        {
+        User::Leave( THttpProvStates::EStatusWrapperParsingFailed );
+        }
+
+    iNHwrParser = CNHeadWrapperParser::NewL( *iProvisioningData );
+    TInt err = iNHwrParser->Parse();
+    if( err != THttpProvStates::EStatusOk )
+        {
+        LOGSTRING2( "err from parse:%i", err ); 
+        User::Leave( err );
+        }
+
+    TPtrC8 content = iNHwrParser->GetContentL();
+
+    // Create WPEngine
+    CWPEngine* wpengine = CWPEngine::NewL();
+    CleanupStack::PushL( wpengine );
+
+    LOGSTRING( "wpengine->ImportDocumentL" );
+    TRAPD( result, wpengine->ImportDocumentL( content ) );
+    User::LeaveIfError( result );
+    LOGSTRING( "wpengine->ImportDocumentL ok" );
+
+    LOGSTRING( "wpengine->PopulateL" );
+    wpengine->PopulateL();
+    LOGSTRING( "wpengine->PopulateL success" );
+
+    // Empty messages are not supported
+    if( wpengine->ItemCount() == 0 )
+        {
+        LOGSTRING("No items in provisioning message!");
+        User::Leave( THttpProvStates::EStatusWrapperParsingFailed );
+        }
+        
+
+    TInt numSaved( 0 );
+    CPnpProvisioningSaver* saver = new(ELeave) CPnpProvisioningSaver( *wpengine, EFalse );
+    TInt retValue( KErrNone );
+    LOGSTRING("saver created");
+    // dismiss waitdialog, saver will show own waitdialog
+    iAppUi->WaitDialogDismissedL(EAknSoftkeyEmpty);
+  
+    TRAPD( saverErr, retValue = saver->ExecuteLD( numSaved ) );
+    
+    if( retValue == KErrCancel )
+        {
+        User::Leave( THttpProvStates::EStatusRejected ); // User cancelled
+        }
+    else if( saverErr != KErrNone || retValue != KErrNone )
+        {
+        User::Leave( THttpProvStates::EStatusStorageFailed );
+        }    
+
+    // check if service activation is enabled if yes then display notes specific to application
+    // settings
+	TBool activate(EFalse);
+     
+    // If activation enable follow different UI Flow
+    // UI Flow requires changes if any other application requires
+    // service UI flow to be changed as of now applicable only for
+    // Email service activation
+    activate =  iAppUi -> ServiceActivationEnabledL();
+
+
+    LOGSTRING( "saver executed" );
+    if( numSaved >= 0 )
+        {
+        LOGSTRING( "numSaved >= 0" );
+        // Check if any setting should be made default
+        TBool setAsDefault( EFalse );
+        TInt itemCount( wpengine->ItemCount() );
+        for( TInt i( 0 ); i < itemCount && !setAsDefault; i++ )
+            {
+            // 1. Set as default if there was no "Provisioning Activation" header
+            // in the head wrapper or if the header asks to make the settings default
+            // 2. Also check if the settings _can_ be set as default at all
+            if( wpengine->CanSetAsDefault( i ) )
+                {
+                LOGSTRING( "set as default" );
+                setAsDefault = ETrue;
+                }
+            }
+
+        // The default value is "ask from user" (if there is no Provisioning-Activation
+        // header in the head wrapper, it should be asked from the user)
+        TProvisioningActivation activation = iNHwrParser->GetProvisioningActivation();
+
+        if( activation == EProvisioningActivationOff )
+            {
+            setAsDefault = EFalse;
+            }
+        else if( activation == EProvisioningActivationUser )
+            {
+            LOGSTRING( "Ask confirmation for saving as default" );
+	     		
+	     		if(!activate)
+ 	     		{
+            // Ask confirmation from the user before saving as default settings
+            HBufC* msgDefault = CEikonEnv::Static()->AllocReadResourceLC(
+                R_TEXT_SET_DEFAULT ); 
+                
+            CAknGlobalConfirmationQuery* query2 = CAknGlobalConfirmationQuery::NewL();
+            CleanupStack::PushL( query2 );
+            TRequestStatus status2;
+            query2->ShowConfirmationQueryL(
+                status2, 
+                *msgDefault, 
+                R_AVKON_SOFTKEYS_YES_NO__YES,
+                R_QGN_NOTE_QUERY_ANIM);
+                
+            User::WaitForRequest( status2 );
+            CleanupStack::PopAndDestroy( 2 );
+            
+            if( status2 != EAknSoftkeyYes )
+                {
+                setAsDefault = EFalse; // User rejected
+                }
+	      	}
+	      	else // service activation enabled
+	      	{
+			   	setAsDefault = ETrue;	
+	      	}
+            }
+
+        if( setAsDefault )
+            {
+            LOGSTRING( "create setter" );
+            CPnpProvisioningSaver* setter = new(ELeave) CPnpProvisioningSaver( *wpengine, ETrue );          
+            TInt numSet( 0 );
+            LOGSTRING( "setter->ExecuteLD" );
+            setter->ExecuteLD( numSet );
+            }
+
+		// Display note to user that settings are saved successfully
+		// This note is generic not incase service activation is disabled
+		if(!activate)
+		{
+        // All settings saved
+        HBufC* msgTextSaved = CEikonEnv::Static()->
+            AllocReadResourceLC( R_TEXT_SAVED ); 
+
+        CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
+        CleanupStack::PushL( globalNote );
+        globalNote->ShowNoteL( EAknGlobalInformationNote , *msgTextSaved );
+        CleanupStack::PopAndDestroy( 2 );
+        }
+        else
+        {
+        CPnpServiceActivation *service = CPnpServiceActivation::NewLC();
+        service->DisplayAppSpecNoteL();
+        CleanupStack::PopAndDestroy();
+       	}
+         
+    }
+    else
+        {
+        User::Leave( THttpProvStates::EStatusStorageFailed );
+        }
+
+    LOGSTRING( "exiting SaveSettingsL" );
+    CleanupStack::PopAndDestroy(wpengine);
+    LOGSTRING( "PopAndDestroy(wpengine) done" );
+
+    return status;
+    }
+
+const TDesC8& CPnpProvisioningDocument::GetReportUrlL()
+    {
+    if( !iNHwrParser )
+        {
+        User::Leave( KErrNotFound );
+        }
+    return( iNHwrParser->GetReportUrlL() );
+    }
+
+// End of File