omadm/omadmappui/OmaDmCPPlugin/src/OmaDMCPPlugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:12 +0200
changeset 0 3ce708148e4d
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007 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:  Device updates Ecom plugin Implementation.
*
*/


//System Includes
#include <e32std.h>
#include <implementationproxy.h>
#include <StringLoader.h>
#include <bautils.h>
#include <AknsUtils.h>
#include <gulicon.h>
#include <akntitle.h>
#include <e32property.h>
// Required only for embedded app
#include <AknNullService.h>
#include <apgtask.h>
#include <flogger.h>
#include <nsmldmsync.mbg>
#include <omadmcppluginresource.rsg>
// User includes
#include "OmaDMCPPlugin.h"
#include "NSmlDMSyncApp.h"
#include "nsmldmsyncinternalpskeys.h"
#include <gsprivatepluginproviderids.h>

_LIT(KOmaDmIconFileName, "Z:\\resource\\apps\\nsmldmsync.mif");
_LIT(KOmaDmResFileName,  "Z:\\resource\\OmaDmCPPluginResource.rsc" );

// ---------------------------------------------------------------------------------------------
// OmaDmCPPlugin::NewLC
// returns an object of OmaDmCPPlugin
// ---------------------------------------------------------------------------------------------
//
CGSPluginInterface* COmaDmCPPlugin::NewL()
	{
	
	COmaDmCPPlugin* self = new(ELeave) COmaDmCPPlugin();
    CleanupStack::PushL(self);
    self->ConstructL();
	CleanupStack::Pop(self);
	return (CGSPluginInterface*) self;
	}

// ---------------------------------------------------------------------------------------------
// OmaDmCPPlugin::Id()
// returns the view id
// ---------------------------------------------------------------------------------------------
//
TUid COmaDmCPPlugin::Id() const
	{
      return TUid::Uid( KUidOmaDmCPPluginDll );	
	}

// ---------------------------------------------------------------------------------------------
// OmaDmCPPlugin::ConstructL
// ---------------------------------------------------------------------------------------------
//	
void COmaDmCPPlugin::ConstructL()
	{
	BaseConstructL();
    env = CEikonEnv::Static();

	TFileName fileName(KOmaDmResFileName);
	
	BaflUtils::NearestLanguageFile(env->FsSession(), fileName);

	iResId = env->AddResourceFileL(fileName);
	}


// ---------------------------------------------------------------------------------------------
// OmaDmCPPlugin::OmaDmCPPlugin
// ---------------------------------------------------------------------------------------------
//    
COmaDmCPPlugin::COmaDmCPPlugin()
	{
    // Nothing
	}

// ---------------------------------------------------------------------------------------------
// COmaDmCPPlugin::~COmaDmCPPlugin
// ---------------------------------------------------------------------------------------------
//
COmaDmCPPlugin::~COmaDmCPPlugin()
	{
		TInt value =0;
		TInt r1=RProperty::Get(KPSUidNSmlDMSyncApp,KNSmlDMSyncUiLaunchKey,value);   
		if(value ==2 && r1 == KErrNone)
		{
		 CloseDmUi();
		} 
    if (iResId)
	   {
        env->DeleteResourceFile(iResId);
	   }	
	if ( iNullService )
        {
            delete iNullService;
            iNullService = NULL;
        }
	}

// ---------------------------------------------------------------------------------------------
// COmaDmCPPlugin::GetCaptionL
// returns the caption to be shown in GS view
// ---------------------------------------------------------------------------------------------
//
void COmaDmCPPlugin::GetCaptionL( TDes& aCaption ) const
	{	
	StringLoader::Load( aCaption, R_OMADM_CP_TITLE);
	}

// ---------------------------------------------------------------------------------------------
// COmaDmCPPlugin::CreateIconL
// Returns the icon to be shown in GS view
// ---------------------------------------------------------------------------------------------
CGulIcon* COmaDmCPPlugin::CreateIconL( const TUid /*aIconType*/ )
	{
	CFbsBitmap* bitmap = NULL;
    CFbsBitmap* mask = NULL;                                               
 
    MAknsSkinInstance* instance = AknsUtils::SkinInstance();    
    AknsUtils::CreateIconL(instance, KAknsIIDQgnPropCpDevUpdate, bitmap, mask,
    					KOmaDmIconFileName,
    					EMbmNsmldmsyncQgn_prop_cp_dev_update,
    				EMbmNsmldmsyncQgn_prop_cp_dev_update_mask);
    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
    icon->SetBitmapsOwnedExternally( EFalse );
    bitmap = NULL;
    mask = NULL;      
    return icon;    
	}


// -----------------------------------------------------------------------------
// COmaDmCPPlugin::PluginProviderCategory
// -----------------------------------------------------------------------------
//
TInt COmaDmCPPlugin::PluginProviderCategory() const
	{
    return KGSPluginProviderInternal;
	}

// -----------------------------------------------------------------------------
// COmaDmCPPlugin::ItemType()
// -----------------------------------------------------------------------------
//
TGSListboxItemTypes COmaDmCPPlugin::ItemType()
	{
    return EGSItemTypeSettingDialog;
	}


// -----------------------------------------------------------------------------
// COmaDmCPPlugin::HandleSelection()
// -----------------------------------------------------------------------------
//
void COmaDmCPPlugin::HandleSelection(
    const TGSSelectionTypes /*aSelectionType*/ )
	{    
	TRAP_IGNORE( OpenDmAppL() );    
	}

// -----------------------------------------------------------------------------
// COmaDmCPPlugin::OpenDmAppL()
// -----------------------------------------------------------------------------
//
void COmaDmCPPlugin::OpenDmAppL()
	{   
	static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
   	static _LIT_SECURITY_POLICY_C1(KAllowWriteDeviceDataPolicy, ECapabilityWriteDeviceData);
    TInt r=RProperty::Define(KPSUidNSmlDMSyncApp,KNSmlDMSyncUiLaunchKey,RProperty::EInt,KAllowAllPolicy,KAllowWriteDeviceDataPolicy);
    TInt value=2;
	if ( r!=KErrNone && r!=KErrAlreadyExists )
       {
       User::LeaveIfError(r);
       }    
       
    RWsSession ws;
    User::LeaveIfError( ws.Connect() );
    CleanupClosePushL( ws );
    // Find the task with uid
    TApaTaskList taskList(ws);
    TApaTask task = taskList.FindApp( KUidSmlSyncApp );
    
    if ( task.Exists() )
        {    	    
        task.BringToForeground();        
        }
    else
        {
        // Launch DM application as embedded.        
        TInt r1=RProperty::Set(KPSUidNSmlDMSyncApp,KNSmlDMSyncUiLaunchKey,value);         
        iNullService = CAknNullService::NewL( KUidSmlSyncApp, this );        
        }
    CleanupStack::PopAndDestroy();  // ws
    
	}

// -----------------------------------------------------------------------------
// COmaDmCPPlugin::DoActivateL
// -----------------------------------------------------------------------------
//
void COmaDmCPPlugin::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
                                  TUid /*aCustomMessageId*/,
                                  const TDesC8& /*aCustomMessage*/ )
	{
    // Nothing
	}

// -----------------------------------------------------------------------------
// COmaDmCPPlugin::DoDeactivate
// -----------------------------------------------------------------------------
//
void COmaDmCPPlugin::DoDeactivate()
	{
    // Closing embedded app
    if ( iNullService )
        {
            delete iNullService;
            iNullService = NULL;
        }
    
	}


// Constants
const TImplementationProxy KImplementationTable[] = 
	{
    IMPLEMENTATION_PROXY_ENTRY( KUidOmaDmCPPluginImpl, COmaDmCPPlugin::NewL ) // used by GS plugin
	};

// ---------------------------------------------------------------------------
// ImplementationGroupProxy
// Gate/factory function
// ---------------------------------------------------------------------------
//
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(  TInt& aTableCount )
	{
	aTableCount = sizeof( KImplementationTable ) 
                / sizeof( TImplementationProxy );
	return KImplementationTable;
	}
// ---------------------------------------------------------------------------------------------
// OmaDmCPPlugin::CloseDmUi
// closes DM Ui
// ---------------------------------------------------------------------------------------------	
void COmaDmCPPlugin:: CloseDmUi()
{
	  
    RWsSession ws  = CEikonEnv::Static()->WsSession();
    TApaTaskList taskList( ws );
    TApaTask task = taskList.FindApp( KUidSmlSyncApp  );
      if (task.Exists())
      {
    	task.EndTask();
      }
	
}	
// End of File