voipplugins/accountcreationplugin/src/accountcreationplugin.cpp
branchRCL_3
changeset 22 d38647835c2e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voipplugins/accountcreationplugin/src/accountcreationplugin.cpp	Wed Sep 01 12:29:57 2010 +0100
@@ -0,0 +1,397 @@
+/*
+* Copyright (c) 2007-2009 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:  Source file for CAccountCreationPlugin
+ *
+*/
+
+#include <eikenv.h>
+#include <bautils.h>
+#include <pathinfo.h>
+#include <SWInstApi.h>
+#include <SWInstDefs.h>
+#include <aknViewAppUi.h>
+#include <AknQueryDialog.h> 
+#include <StringLoader.h>
+#include <accountcreationplugin.rsg>
+#include <data_caging_path_literals.hrh>
+
+#include "accountcreationplugin.h"
+#include "accountcreationpluginlogger.h"
+#include "acpproviderlistview.h"
+#include "accountcreationpluginconstants.h"
+#include "accountcreationplugin.hrh"
+
+const TUid KAIAppUid = { 0x102750F0 }; // active idle application uid        
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::CAccountCreationPlugin
+// ---------------------------------------------------------------------------
+//
+CAccountCreationPlugin::CAccountCreationPlugin()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::ConstructL()
+    {
+    ACPLOG( "CAccountCreationPlugin::ConstructL begin" );
+
+    // Load resource file to the memory.
+    // This when going to ROM (PhoneMemoryRootPath is used only for testing).
+    TFileName resourceFile = 
+        TParsePtrC( PathInfo::RomRootPath() ).Drive();
+
+    resourceFile.Append( KDC_RESOURCE_FILES_DIR );
+    resourceFile.Append( KResourceFilename );
+    BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), 
+        resourceFile );
+    iResourceOffset = CCoeEnv::Static()->AddResourceFileL( resourceFile );
+
+    // Create handle to AIW Service Handler.
+    iServiceHandler = CAiwServiceHandler::NewL();
+
+    iEikEnv = CEikonEnv::Static();
+    
+    iCBEventParamList = CAiwGenericParamList::NewL();
+    iCBEventParamList->Reset();
+
+    ACPLOG( "CAccountCreationPlugin::ConstructL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::NewL
+// ---------------------------------------------------------------------------
+//
+CAccountCreationPlugin* CAccountCreationPlugin::NewL()
+    {
+    CAccountCreationPlugin* self = new ( ELeave ) CAccountCreationPlugin;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::~CAccountCreationPlugin
+// ---------------------------------------------------------------------------
+//
+CAccountCreationPlugin::~CAccountCreationPlugin()
+    {
+    ACPLOG( "CAccountCreationPlugin::~CAccountCreationPlugin begin" );
+
+    delete iServiceHandler;
+
+    if ( iResourceOffset )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );
+        }
+ 
+	iEikEnv = NULL;
+	delete iCBEventParamList;
+
+    ACPLOG( "CAccountCreationPlugin::~CAccountCreationPlugin end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::SendInitializedCallbackL
+// Sends AIW service command when plugin initialization is completed. 
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::SendInitializedCallbackL() const
+    {
+    ACPLOG( "CAccountCreationPlugin::SendInitializedCallbackL begin" );
+
+    MAiwNotifyCallback* callback = 
+        const_cast<MAiwNotifyCallback*>( iNotifyCallback );
+
+    // Uid of ACP.
+    TAiwVariant variant( KAccountCreationPluginUid );
+    TAiwGenericParam genericParamUid( EGenericParamError, variant );
+    CAiwGenericParamList& paramList = iServiceHandler->InParamListL();
+    paramList.AppendL( genericParamUid );
+    variant.Reset();
+
+    // Localized name of ACP.
+    HBufC* localizedName = StringLoader::LoadLC( R_ACP_NAME_IN_CUSTOMER_APP );     
+    variant.Set( localizedName->Des() );
+    TAiwGenericParam genericParamName( EGenericParamError, variant );
+    paramList.AppendL( genericParamName );
+    CleanupStack::PopAndDestroy( localizedName );
+    variant.Reset();
+
+    // Place of ACP in customer application.
+    TInt32 placing( 0 );
+    variant.Set( placing );
+    TAiwGenericParam genericParamPlace( EGenericParamError, variant );
+    paramList.AppendL( genericParamPlace );
+	
+    // Send callback to the customer application.
+    callback->HandleNotifyL( 
+        KAiwCmdCSCUiExtensionPlugins,
+        KAiwEventStarted,
+        *iCBEventParamList,
+        paramList );
+
+    ACPLOG( "CAccountCreationPlugin::SendInitializedCallbackL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::SendCompletedCallbackL
+// Sends AIW service command when plugin is stopped its work.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::SendCompletedCallbackL() const
+    {
+    ACPLOG( "CAccountCreationPlugin::SendCompletedCallbackL begin" );
+
+    MAiwNotifyCallback* callback = 
+        const_cast<MAiwNotifyCallback*>( iNotifyCallback );
+
+    // Uid of ACP.
+    TAiwVariant variant( KAccountCreationPluginUid );
+    TAiwGenericParam genericParamUid( EGenericParamError, variant );
+    CAiwGenericParamList& paramList = iServiceHandler->InParamListL();
+    paramList.AppendL( genericParamUid );
+
+    // Send callback to the customer application.
+    callback->HandleNotifyL( 
+        KAiwCmdCSCUiExtensionPlugins,
+        KAiwEventStopped,
+        *iCBEventParamList,
+        paramList );
+
+    ACPLOG( "CAccountCreationPlugin::SendCompletedCallbackL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::SendErrorCallbackL
+// Sends AIW service command when plugin error is reached.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::SendErrorCallbackL() const
+    {
+    ACPLOG( "CAccountCreationPlugin::SendErrorCallbackL begin" );
+
+    MAiwNotifyCallback* callback = 
+        const_cast<MAiwNotifyCallback*>( iNotifyCallback );
+
+    // UID of ACP.
+    TAiwVariant variant( KAccountCreationPluginUid );
+    TAiwGenericParam genericParamUid( EGenericParamError, variant );
+    CAiwGenericParamList& paramList = iServiceHandler->InParamListL();
+    paramList.AppendL( genericParamUid );
+
+    // Send callback to the customer application.
+    callback->HandleNotifyL( 
+        KAiwCmdCSCUiExtensionPlugins,
+        KAiwEventError,
+        *iCBEventParamList,
+        paramList );
+
+    ACPLOG( "CAccountCreationPlugin::SendErrorCallbackL end" );
+    }    
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::CompareUids
+// Compares AIW service command connected uid to our plugin uid.
+// ---------------------------------------------------------------------------
+//
+TBool CAccountCreationPlugin::CompareUids( 
+    const CAiwGenericParamList& aOutParamList ) const
+    {
+    TInt index = 0;
+    TBool commandForUs( EFalse );
+    if ( 0 < aOutParamList.Count() )
+        {
+        // Take out the first parameter which is uid of the target plugin.                   
+        const TAiwGenericParam* genericParam = NULL; 
+        genericParam = aOutParamList.FindFirst( index,
+                                                EGenericParamError,
+                                                EVariantTypeTUid );
+        if ( genericParam )
+            {
+            if ( KAccountCreationPluginUid == genericParam->Value().AsTUid() )
+                {
+                commandForUs = ETrue; // Request is for us.
+                }
+            }
+        }
+
+    ACPLOG2( "CAccountCreationPlugin::CompareUids: forUs=%d", commandForUs );
+    return commandForUs;  
+    }  
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::LaunchPluginUiL
+// Launches ACP UI.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::LaunchPluginUiL()
+    {
+    ACPLOG( "CAccountCreationPlugin::LaunchPluginUiL begin" );
+ 
+        CAknViewAppUi* ui = 
+            static_cast<CAknViewAppUi*> ( static_cast<CAknAppUi*>
+                ( iEikEnv->EikAppUi() ) );
+
+
+    // Create provider list view and activate it.
+    if ( NULL == iProviderListView )
+        {
+            iProviderListView = CAcpProviderListView::NewL( *this,
+                                                            iLaunchedFromAI,
+															*iEikEnv );
+        
+        ui->AddViewL( iProviderListView ); // Ownership is transferred.
+        }
+    
+    if ( iLaunchedFromAI )
+        {
+        TVwsViewId tvwsViewId( KAIAppUid, TUid::Uid( 1 ) );
+        ui->ActivateViewL( tvwsViewId );
+        }
+    
+    iProviderListView->DownloadProviderListL();
+
+    ACPLOG( "CAccountCreationPlugin::LaunchPluginUiL end" );
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::HandleServiceCmdL
+// From class CAiwServiceIfBase.
+// Handles AIW service events from customer application.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::HandleServiceCmdL( 
+    const TInt& /*aCmdId*/,
+    const CAiwGenericParamList& /*aInParamList*/,
+    CAiwGenericParamList& aOutParamList,
+    TUint aCmdOptions,
+    const MAiwNotifyCallback* aCallback )
+    {
+    ACPLOG2( 
+        "CAccountCreationPlugin::HandleServiceCmdL: cmd=%d", aCmdOptions );
+    
+      if ( aCallback )
+        {
+        iNotifyCallback = aCallback;
+        }
+    
+    if ( aCmdOptions == ELaunchedFromAI )
+        {
+        iLaunchedFromAI = ETrue;
+        aCmdOptions = EExecute; 
+        }
+    
+    switch ( aCmdOptions )
+        {
+        case EInitialize: // Initialization.
+            {
+            SendInitializedCallbackL();
+            break;
+            }
+        case EExecute: // Execution.
+            {
+            // Check that service event is meant to us and launch plugin.
+            if ( CompareUids( aOutParamList ) )
+                {
+                LaunchPluginUiL();
+                }
+            break;
+            }
+        default: // Not supported.
+            {
+            User::Leave( KErrNotSupported );
+            break;    
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::InitialiseL
+// From class MAccountCreationPluginObserver.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::InitialiseL( 
+    MAiwNotifyCallback& /*aFrameworkCallback*/,
+    const RCriteriaArray& /*aInterest*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::NotifyAiwEventL
+// From class MAccountCreationPluginObserver.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::NotifyAiwEventL( TInt aError )
+    {
+    ACPLOG2( "CAccountCreationPlugin::NotifyAiwEventL: error=%d", aError );
+
+    // In case of error, send error callback to customer application.
+    if ( aError )
+        {
+        SendErrorCallbackL();
+        }
+    // If successful event retrieved, send completed callback to customer.    
+    else
+        {
+        SendCompletedCallbackL();
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CAccountCreationPlugin::NotifySISDownloaded
+// From class MAccountCreationPluginObserver.
+// ---------------------------------------------------------------------------
+//
+void CAccountCreationPlugin::NotifySISDownloaded( TDesC& aFileName )
+    {
+    ACPLOG( "CAccountCreationPlugin::NotifySISDownloaded IN" );
+    
+    // Create the installer.
+    SwiUI::RSWInstLauncher launcher; 
+    SwiUI::TInstallOptions options;
+    SwiUI::TInstallOptionsPckg optionsPckg;  
+
+    // Set necessary options.
+    options.iUpgrade = SwiUI::EPolicyNotAllowed;
+    options.iOCSP = SwiUI::EPolicyNotAllowed;
+    options.iUntrusted = SwiUI::EPolicyNotAllowed; 
+    options.iCapabilities = SwiUI::EPolicyNotAllowed;               
+    optionsPckg = options;  
+
+    TInt err = launcher.Connect();
+
+    // Check whether connected or not.
+    if ( err == KErrNone )
+        {           
+        ACPLOG( "CAccountCreationPlugin::NotifySISDownloaded INSTALL 1" );
+        
+        // Launch the installer and install requested file on phone.
+        launcher.Install( aFileName, optionsPckg );
+        
+        ACPLOG( "CAccountCreationPlugin::NotifySISDownloaded INSTALL 2" );
+        }
+    
+    TRAP_IGNORE( SendCompletedCallbackL() );
+    
+    launcher.Close();
+    
+    ACPLOG( "CAccountCreationPlugin::NotifySISDownloaded OUT" );
+    }
+
+// End of file.