pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpProvisioningAppUi.cpp
changeset 18 7d11f9a6646f
parent 4 75a71fdb4c92
child 21 c707676bf59f
--- a/pnpmobileservices/pnpms/PnP/PnpProvisioningAppSrc/PnpProvisioningAppUi.cpp	Tue Feb 02 00:03:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,640 +0,0 @@
-/*
-* 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 <avkon.hrh>
-#include <apgcli.h>
-#include <textresolver.h>
-#include <rconnmon.h>
-#include <ApUtils.h>
-#include <PnpProvisioning.rsg>
-#include <browseruisdkcrkeys.h>         // for KCRUidBrowser
-#include <AknGlobalNote.h>              // for CAknGlobalNote
-#include <AknGlobalConfirmationQuery.h> // for CAknGlobalConfirmationQuery
-
-#include "PnpProvisioningApp.h"
-#include "PnpProvisioningAppUi.h"
-#include "PnpProvisioningDocument.h"
-#include "pnpprovisioning.hrh"
-#include "PnpLogger.h"
-#include "cwaitdialogmonitor.h"
-
-
-_LIT( KQuestionMark, "?" );
-_LIT( KAmpersand, "&" );
-_LIT( KStatus, "Status=" );
-_LIT( KSpace, " " );
-
-const TUint KCallbackDelay = 1000000;
-
-
-
-// ================= MEMBER FUNCTIONS =======================
-//
-// ----------------------------------------------------------
-// CPnpProvisioningAppUi::ConstructL()
-// 
-// ----------------------------------------------------------
-//
-void CPnpProvisioningAppUi::ConstructL()
-    {
-    LOGSTRING( "CPnpProvisioningAppUi::ConstructL" );
-    BaseConstructL( ENoScreenFurniture );
-    //send to backround
-    TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
-    TApaTask task = taskList.FindApp( KUidPnpProvisioning );
-    task.SendToBackground();
-    this->StatusPane()->MakeVisible( EFalse );
-    HideApplicationFromFSW();
-    
-    CEikonEnv::Static()->AddForegroundObserverL( *this );
-    
-    // if service activation enabled allow automatic settings configuration instead
-    // of showing confirmation notes
-
-    TBool activationenabled = ServiceActivationEnabledL();
-    
-    if(!activationenabled)
-    {
-    HBufC* msgConfirmSave = CEikonEnv::Static()->AllocReadResourceLC(
-            R_TEXT_QUERY); 
-            
-        CAknGlobalConfirmationQuery* query = CAknGlobalConfirmationQuery::NewL();
-        CleanupStack::PushL( query );
-        TRequestStatus statusSave;
-        query->ShowConfirmationQueryL(
-            statusSave, 
-            *msgConfirmSave, 
-            R_AVKON_SOFTKEYS_YES_NO__YES,
-            R_QGN_NOTE_QUERY_ANIM);
-            
-        User::WaitForRequest( statusSave );
-        CleanupStack::PopAndDestroy( 2 );
-        
-        if( statusSave != EAknSoftkeyYes )
-            {
-            LOGSTRING("User rejected");
-            Exit();
-            }
-    }
-    ResolveApL( iApInUse );
-    
-    ShowWaitNoteL();
-
-    iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard  );
-    iPeriodic->Start( KCallbackDelay, KCallbackDelay, TCallBack(CPnpProvisioningAppUi::PeriodicCallback, this) );
-    LOGSTRING( "CPnpProvisioningAppUi::ConstructL - done" );
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::~CPnpProvisioningAppUi()
-// Destructor
-// Frees reserved resources
-// ----------------------------------------------------
-//
-CPnpProvisioningAppUi::~CPnpProvisioningAppUi()
-    {
-    LOGSTRING( "~CPnpProvisioningAppUi" );
-
-    // iPeriodic is deleted in the document's destructor
-    if( iPeriodic )
-        {
-        iPeriodic->Cancel();
-        delete iPeriodic;
-        }
-    if (iDoorObserver)
-        {
-        LOGSTRING( "calling iDoorObserver->NotifyExit" );
-        iDoorObserver->NotifyExit(MApaEmbeddedDocObserver::ENoChanges);
-        }
-        
-    if( iGlobalWaitNote )
-        {
-        delete iGlobalWaitNote;
-        }
-        
-    if( iWaitDialogMonitor )
-        {
-        iWaitDialogMonitor->Cancel();
-        delete iWaitDialogMonitor;
-        }
-    LOGSTRING( "~CPnpProvisioningAppUi done" );
-   }
-
-// ------------------------------------------------------------------------------
-// CPnpProvisioningAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
-//  This function is called by the EIKON framework just before it displays
-//  a menu pane. Its default implementation is empty, and by overriding it,
-//  the application can set the state of menu items dynamically according
-//  to the state of application data.
-// ------------------------------------------------------------------------------
-//
-void CPnpProvisioningAppUi::DynInitMenuPaneL(
-    TInt /*aResourceId*/,CEikMenuPane* /*aMenuPane*/)
-    {
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::HandleKeyEventL(
-//     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
-// takes care of key event handling
-// ----------------------------------------------------
-//
-TKeyResponse CPnpProvisioningAppUi::HandleKeyEventL(
-    const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
-    {
-    return EKeyWasNotConsumed;
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::HandleCommandL(TInt aCommand)
-// takes care of command handling
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::HandleCommandL(TInt aCommand)
-    {
-    switch ( aCommand )
-        {
-        case EAknSoftkeyBack:
-        case EEikCmdExit:
-            {
-            Exit();
-            break;
-            }
-
-        default:
-            break;      
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CPnpProvisioningAppUi::HandleGainingForeground
-//
-// -----------------------------------------------------------------------------
-//
-void CPnpProvisioningAppUi::HandleGainingForeground()
-    {
-    LOGSTRING( "CPnpProvisioningAppUi::HandleGainingForeground" );
-    TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
-    TApaTask task = taskList.FindApp( KUidPnpProvisioning );
-    if( task.Exists() )
-        {
-        task.SendToBackground();
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CPnpProvisioningAppUi::HandleLosingForeground
-//
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CPnpProvisioningAppUi::HandleLosingForeground()
-    {
-    LOGSTRING( "CPnpProvisioningAppUi::HandleLosingForeground" );
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::RedirectL
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::RedirectL( const TDesC& aUrl, THttpProvStates::TProvisioningStatus  aStatus )
-    {
-    // do the redirect thing
-    LOGSTRING( "RedirectL" );
-
-    // Parameters are separated by space
-    // 1st parameter: type of the further parameters
-    // 2nd parameter: URL or  the uid of bookmark/saved deck/pushed deck.
-    // 3rd parameter: Access point Uid (in decimal format).
-    // the 3rd parameter is optional, and only for specifying AP for URL-s
-
-    HBufC* param = HBufC::NewLC( 300 );
-    TPtr paramPtr = param->Des();
-    paramPtr.Copy( _L( "4 " ) );
-    
-    
-    paramPtr.Append( aUrl );
-
-    // Assume there might already be parameters in the URL given
-    if( aUrl.Find( KQuestionMark ) != KErrNotFound )
-        {
-        paramPtr.Append( KAmpersand );
-        }
-    else
-        {
-        paramPtr.Append( KQuestionMark );
-        }
-
-    paramPtr.Append( KStatus );
-    paramPtr.AppendNum( (TInt) aStatus );
-
-    // Only give a valid AP
-    if( iApInUse != 0 )
-        {
-        paramPtr.Append( KSpace );
-        paramPtr.AppendNumUC( iApInUse );
-        }
-
-#ifdef _DEBUG
-    LOGSTRING( "redirecting params:" );
-    for( TInt i(0); i < paramPtr.Length(); i += 128 )
-        {
-        LOGTEXT( paramPtr .Right( paramPtr .Length() - i ) );
-        }
-#endif
-
-    TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
-    TApaTask task = taskList.FindApp( KCRUidBrowser );
-    if ( task.Exists() )
-        {
-        LOGSTRING( "redirecting browser" );
-        HBufC8* param8 = HBufC8::NewLC( param->Length() );
-        param8->Des().Append( *param );
-        task.SendMessage( TUid::Uid( 0 ), *param8 ); // Uid is not used
-        //task.BringToForeground();     
-        CleanupStack::PopAndDestroy( param8 );
-        }
-    else 
-        {
-        LOGSTRING( "Could not find browser" );
-        RApaLsSession   appArcSession;
-        User::LeaveIfError(appArcSession.Connect());    // connect to AppArc server
-        TThreadId id;
-        appArcSession.StartDocument( *param, KCRUidBrowser, id );
-        appArcSession.Close();
-        }
-    CleanupStack::PopAndDestroy( param ); // param
-    LOGSTRING( "calling Exit()" ); 
-    Exit();
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::ResolveApL
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::ResolveApL( TUint32& aAp )
-    {
-    LOGSTRING("Trying to get AP used");
-
-
-    // PnPProvisioning app might be started by browsing to a service using
-    // PAOS filter 
-    // -> OnlineSupport app that normally sets the AP to DB might not have been
-    // used. It is also possible that the AP that OnlineSupport app used has
-    // been removed.
-
-    // So we try to use the AP currently in use first; if none is in use read the AP
-    // from shared data / cenrep.
-
-    RConnectionMonitor connMon;
-    connMon.ConnectL();
-    CleanupClosePushL( connMon );
-    TUint connectionCount(0);
-    TRequestStatus status( KRequestPending );
-    connMon.GetConnectionCount( connectionCount, status );
-    // No user interaction possible at this point so no need to make the call asynchronously
-    User::WaitForRequest( status );
-    LOGSTRING("Trying to get AP used - 2");
-
-    for( TUint i(1); i <= connectionCount; i++ )
-        {
-        LOGSTRING("Trying to get AP used - 3");
-        TUint connectionId(0);
-        TUint subConnectionCount(0);
-        TInt err = connMon.GetConnectionInfo( i, connectionId, subConnectionCount );
-        if( err != KErrNone )
-            {
-            LOGSTRING2( "err %i", err );
-            }
-
-        LOGSTRING("Trying to get AP used - 4");
-        TUint ap(0);
-        TRequestStatus status2( KRequestPending );
-        connMon.GetUintAttribute( connectionId, 0, KIAPId, ap, status2 );
-        User::WaitForRequest( status2 );
-        if( status2.Int() != KErrNone )
-            {
-            LOGSTRING2( "err %i", status2.Int() );
-            }
-        LOGSTRING("Trying to get AP used - 5");
-        if( ap != 0 )
-            {
-            LOGSTRING2("Trying to get AP used - found: %i", ap );
-
-            CCommsDatabase* commDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
-            CleanupStack::PushL( commDb );
-            CApUtils* utils = CApUtils::NewLC( *commDb );
-            //aAp = utils->WapIdFromIapIdL( ap );
-            LOGSTRING2( "wap id: %i", aAp );
-            
-            // In some cases the connection has to be reset after saving
-            // provisioned settings
-            TInt err = connMon.SetBoolAttribute( 0, 0, KConnectionStopAll, ETrue );
-            LOGSTRING2( "Connection stop error: %i", err );
-            CleanupStack::PopAndDestroy( utils );
-            CleanupStack::PopAndDestroy( commDb );
-            CleanupStack::PopAndDestroy(); // connMon.Close()
-            LOGSTRING("Trying to get AP used - done");
-            return;
-            }
-        }
-    CleanupStack::PopAndDestroy(); // connMon.Close()
-    }
-    
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::DoExit()
-// exits app.
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::DoExit()
-    {
-    LOGSTRING( "DoExit" );
-    Exit();
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::PeriodicCallback
-// ----------------------------------------------------
-//
-TInt CPnpProvisioningAppUi::PeriodicCallback( TAny* aPtr )
-    {
-    TRAPD( err, ( (CPnpProvisioningAppUi*)aPtr )->DoPeriodicCallbackL( aPtr ) );
-    if( err != KErrNone )
-        {
-        LOGSTRING2( "Error in DoPeriodicCallBackL: %i", err );
-        if( err == KLeaveExit )
-            User::Leave( KLeaveExit );
-        }
-    return KErrNone;
-    }
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::DoPeriodicCallbackL
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::DoPeriodicCallbackL( TAny* aPtr )
-    {
-    LOGSTRING( "CPnpProvisioningAppUi::PeriodicCallback" );
-
-    CPnpProvisioningAppUi* ui = (CPnpProvisioningAppUi*)aPtr;
-    CPnpProvisioningDocument* document = (CPnpProvisioningDocument*)ui->Document();
-    TInt leavestatus = KErrNone;
-    TInt noRedirect = 0;
-    THttpProvStates::TProvisioningStatus status = THttpProvStates::EStatusOk;
-
-    LOGSTRING( "CPnpProvisioningAppUi::PeriodicCallback - Is doc ready?" );
-
-    if( !(document->Ready()) )
-        {
-        LOGSTRING( "Document not ready yet" );
-        User::Leave( KErrNotReady );
-        }
-
-    ui->iPeriodic->Cancel();
-    // document->SetPeriodic( ui->iPeriodic );
-    TRAP( leavestatus, status = document->SaveSettingsL() );
-    if( leavestatus != KErrNone )
-        {
-        LOGSTRING2( "SaveSettingsL leave code: %i", leavestatus );
-        
-        if( leavestatus == THttpProvStates::EStatusRejected )
-            {
-            // user has cancelled
-            ui->DoExit();
-            }
-        else
-            {
-            ui->ShowErrorNoteL();
-            }
-        }
-
-    LOGSTRING( "CPnpProvisioningAppUi::PeriodicCallback - get report url" );
-
-    // try to get the redirect url
-    TBuf<512> url;
-    TRAPD( err, url.Copy( document->GetReportUrlL().Left(512) ) );
-    if( err != KErrNone )
-        {
-        LOGSTRING2( "no report url:%i", err );
-        
-        TerminateBrowserL(err, noRedirect);
-        
-        ui->DoExit();
-        }
-    else
-        {
-        if( status != THttpProvStates::EStatusOk )
-            {
-            LOGSTRING( "CPnpProvisioningAppUi::PeriodicCallback - do redirect" );
-            
-            TerminateBrowserL(KErrGeneral, noRedirect);
-            if(noRedirect == 1)
-            ui->DoExit();
-            ui->RedirectL( url, status );
-            }
-        else if( leavestatus != KErrNone )
-            {
-            LOGSTRING( "CPnpProvisioningAppUi::PeriodicCallback - do redirect with leave status" );
-            
-            TerminateBrowserL(leavestatus, noRedirect);
-            if(noRedirect == 1)
-            ui->DoExit();
-            
-            ui->RedirectL( url, THttpProvStates::TProvisioningStatus( leavestatus ) );
-            }
-        else
-            {
-            LOGSTRING2( "Provisioning status: %i", status );
-
-            // Since Plat sec there is no need to restart Browser after provisioning
-            // has been done.
-            // In some cases the connection has to be reset, though
-            // (it is done in ResolveApL)
-            LOGSTRING( "Making redirect" );
-            
-           //Before Making redirect check if application launched PNPMS.
-           //If application has not launched PNPMS client then do redirect
-           // otherwise call for Service Activation and launch choosen application
-           // closing browser
-           
-        
-          		TerminateBrowserL(KErrNone,noRedirect);
-          		
-	    		if(noRedirect == 1)
-            		  ui->DoExit();
-	    		
-            
-            ui->RedirectL( url, THttpProvStates::EStatusOk );
-            }
-        }
-
-    LOGSTRING( "CPnpProvisioningAppUi::PeriodicCallback - done" );
-    }
-    
-//// ----------------------------------------------------
-// CPnpProvisioningAppUi::ServiceActivationEnabled()
-// ----------------------------------------------------
-//
-TBool CPnpProvisioningAppUi::ServiceActivationEnabledL()
-{
-	CPnpProvUtil *provUtil = CPnpProvUtil::NewLC();
-	TUint32 uidval = 0;
-	TRAPD(err, uidval = provUtil->GetApplicationUidL());
-		              
-	CleanupStack::PopAndDestroy();    //provutil     
-
-	if(uidval && !err)
-        {
-	 	return ETrue;
-	}
-	
-	return EFalse;
-	
-}
-
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::TerminateBrowserIfErrorL()
-// ----------------------------------------------------
-//
-
-void CPnpProvisioningAppUi::TerminateBrowserL(TInt aError, TInt& aNoRedirect)
-{
-	    // Terminate browser and launch choosen application based on status of
-      // aNoRedirect status
-      // If error status is KErrNone  the application is launched closing browser
-      // If there are errors then terminate browser without launching application
-	
-	    	CPnpProvUtil *provUtil = CPnpProvUtil::NewLC();
-        CPnpServiceActivation *serviceActivate = CPnpServiceActivation::NewLC();
-    		TUint32 uidval = 0;
-		
-				TRAPD(err, uidval = provUtil->GetApplicationUidL());
-                      
-        if(uidval && !err)
-        {
-            if(aError == KErrNone)
-            	TRAP_IGNORE(serviceActivate->LaunchApplicationL());
-          	
-          	TRAP_IGNORE(serviceActivate->KillBrowserL());
-						TRAP_IGNORE(provUtil -> SetApplicationUidL(0));
-			
-	   				// Interger value is required in case of handling multiple cases in redirection
-	   				// With current implementation only 2 values are supported 0 and 1
-	   				aNoRedirect = 1;	
-			
-			 	
-        }
-        
-        CleanupStack::PopAndDestroy(2);
-        
-        
-}
-
-
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::ShowErrorNoteL()
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::ShowErrorNoteL()
-    {
-    HBufC* msgTextSaved = CEikonEnv::Static()->
-            AllocReadResourceLC( R_TEXT_CANNOT_SAVE ); 
-
-    CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
-    CleanupStack::PushL( globalNote );
-    globalNote->ShowNoteL( EAknGlobalErrorNote , *msgTextSaved );
-    CleanupStack::PopAndDestroy( 2 );
-    }
-    
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::ShowWaitNoteL()
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::ShowWaitNoteL()
-    {
-    HBufC* msgText = CEikonEnv::Static()->
-        AllocReadResourceLC( R_TEXT_WAIT_SAVING ); 
-
-    if (iWaitDialogMonitor)
-        {
-        iWaitDialogMonitor->Cancel();
-        delete iWaitDialogMonitor;
-        iWaitDialogMonitor = NULL;
-        }
-    // instantiate the active object CGlobalConfirmationObserver
-    iWaitDialogMonitor = CWaitDialogMonitor::NewL( *this );
-    
-    // SetActive
-    iWaitDialogMonitor->Start();
-    
-    if (!iGlobalWaitNote)
-        {
-        iGlobalWaitNote = CAknGlobalNote::NewL();
-        }
-
-     iGlobalWaitNote->SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY);
-    iGlobalWaitNote->ShowNoteL(
-        iWaitDialogMonitor->iStatus,
-        EAknGlobalWaitNote,
-        *msgText );
-    
-    CleanupStack::PopAndDestroy( msgText );
-    }
-    
-// ----------------------------------------------------
-// CPnpProvisioningAppUi::WaitDialogDismissedL()
-// ----------------------------------------------------
-//
-void CPnpProvisioningAppUi::WaitDialogDismissedL( const TInt aStatusCode )
-    {
-    LOGSTRING2( "CPnpProvisioningAppUi::WaitDialogDismissedL aStatus is %i",aStatusCode );
-    LOGSTRING2( "iWaitDialogMonitor->iStatus is %i" , iWaitDialogMonitor->iStatus.Int() );
-    if( aStatusCode == EAknSoftkeyCancel || aStatusCode == EAknSoftkeyExit ||
-    			aStatusCode == KErrCancel ) //End key results in KErrCancel
-        {
-        // user cancelled
-        LOGSTRING( "CPnpProvisioningAppUi::WaitDialogDismissedL - user cancelled" );
-        Exit();
-        }
-//Handling End Key
-    if(aStatusCode == EAknSoftkeyEmpty && iWaitDialogMonitor->iStatus == KErrCancel )
-    	{
-    	LOGSTRING( "End key or User cancel done, but DOc tries to close instead of RunL of iWaitDialogMonitor " );
-    	//Exit();
-    	iWaitDialogMonitor->Cancel();
-    	User::Leave( THttpProvStates::EStatusRejected );
-    	}
-        
-    if( iGlobalWaitNote )
-        {
-        delete iGlobalWaitNote;
-        iGlobalWaitNote = NULL;
-        }
-        
-    if( iWaitDialogMonitor )
-        {
-        iWaitDialogMonitor->Cancel();
-        delete iWaitDialogMonitor;
-        iWaitDialogMonitor = NULL;
-        }
-    }
-
-// End of File