--- /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