Merge tags.
/*
* Copyright (c) 2006, 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:
*
*/
#include <S32MEM.H>
// User includes
#include "WidgetRegistry.h"
#include "WidgetRegistryConstants.h"
#include "widgetregistryserver.h"
#include "WidgetRegistryConstants.h"
#include "WidgetRegistrySession.h"
CWidgetRegistry* CWidgetRegistryServerSession::iWidgetRegistry = 0;
// ============================================================================
// CWidgetRegistryServerSession::CWidgetRegistryServerSession()
// C++ constructor
//
// @since 3.1
// ============================================================================
//
CWidgetRegistryServerSession::CWidgetRegistryServerSession()
{
}
// ============================================================================
// CWidgetRegistryServerSession::~CWidgetRegistryServerSession()
// Destructor
//
// @since 3.1
// ============================================================================
//
CWidgetRegistryServerSession::~CWidgetRegistryServerSession()
{
CWidgetRegistryServer* server( static_cast<CWidgetRegistryServer*>(
const_cast<CServer2*>( Server() ) ) );
if ( server && server->SessionCount() <= 0 )
{
delete iWidgetRegistry;
iWidgetRegistry = NULL;
iRfs.Close(); // after delete registry because registry/mmc refs it
}
}
// ============================================================================
// CWidgetRegistryServerSession::CreateL()
// Called by the CServer framework
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::CreateL()
{
CWidgetRegistryServer* server;
server = static_cast<CWidgetRegistryServer*>(
const_cast<CServer2*>( Server() ) );
User::LeaveIfNull ( server );
if ( !iWidgetRegistry )
{
User::LeaveIfError( iRfs.Connect() );
iWidgetRegistry = CWidgetRegistry::NewL( iRfs );
}
server->AddSession();
}
// ============================================================================
// CWidgetRegistryServerSession::ConstructL()
// ConstructL method
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::ConstructL(
CWidgetRegistryServer& /*aServer*/,
const RMessage2& /*aMessage*/ )
{
if ( !iWidgetRegistry )
{
User::LeaveIfError( iRfs.Connect() );
iRfs.CreatePrivatePath( EDriveC );
iRfs.SetSessionToPrivate( EDriveC );
iRfs.ShareProtected();
iWidgetRegistry = CWidgetRegistry::NewL( iRfs );
}
}
// ============================================================================
// CWidgetRegistryServerSession::NewL()
//
// @since 3.1
// ============================================================================
//
CWidgetRegistryServerSession* CWidgetRegistryServerSession::NewL(
CWidgetRegistryServer& aServer, const RMessage2& aMessage )
{
CWidgetRegistryServerSession* self;
self = new ( ELeave ) CWidgetRegistryServerSession();
CleanupStack::PushL( self );
self->ConstructL( aServer, aMessage );
CleanupStack::Pop( self );
return self;
}
// ============================================================================
// CWidgetRegistryServerSession::ServiceL()
// Handles messages from client
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::ServiceL( const RMessage2& aMessage )
{
TBool retBool( EFalse );
TInt len = 0;
TInt uid = 0;
TInt count = 0;
TInt policyId = 0;
TInt error;
const TInt function = aMessage.Function();
// TBD seems like we should trap leaves and return error codes so
// as not to exit the server
switch ( function )
{
case EOpCodeRegisterWidget:
OpRegisterWidgetL( aMessage );
aMessage.Complete( KErrNone );
break;
case EOpCodeWidgetExists:
retBool = OpWidgetExists( aMessage );
aMessage.Complete( retBool );
break;
case EOpCodeIsWidget:
retBool = OpIsWidget( aMessage );
aMessage.Complete( retBool );
break;
case EOpCodeIsWidgetRunning:
retBool = OpIsWidgetRunning( aMessage );
aMessage.Complete( retBool );
break;
case EOpWidgetSapiAccessState:
retBool = OpWidgetSapiAccessState( aMessage );
aMessage.Complete( retBool );
break;
case EOpCodeIsWidgetInMiniView:
retBool = OpIsWidgetInMiniView( aMessage );
aMessage.Complete( retBool );
break;
case EOpCodeIsWidgetInFullView:
retBool = OpIsWidgetInFullView( aMessage );
aMessage.Complete( retBool );
break;
case EOpCodeIsWidgetPromptNeeded:
retBool = OpIsWidgetPromptNeeded( aMessage );
aMessage.Complete( retBool );
break;
case EOpCodeWidgetCount:
count = OpWidgetCount( aMessage );
aMessage.Complete( count );
break;
case EOpCodeInstalledWidgetsPhase1:
len = OpInstalledWidgetsPhase1L( aMessage );
aMessage.Complete( len );
break;
case EOpCodeInstalledWidgetsPhase2:
len = OpInstalledWidgetsPhase2L( aMessage );
aMessage.Complete( len );
break;
case EOpCodeRunningWidgetsPhase1:
len = OpRunningWidgetsPhase1L( aMessage );
aMessage.Complete( len );
break;
case EOpCodeRunningWidgetsPhase2:
len = OpRunningWidgetsPhase2L( aMessage );
aMessage.Complete( len );
break;
case EOpCodeGetWidgetBundleId:
len = OpGetWidgetBundleId( aMessage );
aMessage.Complete( len );
break;
case EOpCodeGetWidgetBundleName:
len = OpGetWidgetBundleName( aMessage );
aMessage.Complete( len );
break;
case EOpCodeGetWidgetPropertyValue:
error = OpGetWidgetPropertyValueL( aMessage );
aMessage.Complete( error );
break;
case EOpCodeGetWidgetPath:
len = OpGetWidgetPath( aMessage );
aMessage.Complete( len );
break;
case EOpCodeGetWidgetUid:
uid = OpGetWidgetUid( aMessage );
aMessage.Complete( uid );
break;
case EOpCodeGetWidgetUidForUrl:
uid = OpGetWidgetUidForUrl( aMessage );
aMessage.Complete( uid );
break;
case EOpCodeDeRegisterWidget:
OpDeRegisterWidgetL( aMessage );
aMessage.Complete( KErrNone );
break;
case EOpCodeGetAvailableUid:
uid = OpGetAvailableUidL( aMessage );
aMessage.Complete( uid );
break;
case EOpCodeSetActive:
OpSetActive( aMessage );
aMessage.Complete( KErrNone );
break;
case EOpCodeWidgetRegistryDisconnect:
OpDisconnect( aMessage );
aMessage.Complete( KErrNone );
break;
case EOpCodeGetLprojName:
len = OpGetLprojNameL( aMessage );
aMessage.Complete( len );
break;
case EOpCodeSecurityPolicyId:
policyId = OpSecurityPolicyId( aMessage );
aMessage.Complete( policyId );
break;
case EOpCodeSetWidgetInMiniView:
OpSetMiniView( aMessage );
aMessage.Complete( KErrNone );
break;
case EOpCodeSetWidgetInFullView:
OpSetFullView( aMessage );
aMessage.Complete( KErrNone );
break;
case EOpCodeSetWidgetPromptNeeded:
OpSetPromptNeeded( aMessage );
aMessage.Complete( KErrNone );
break;
default:
User::Leave( KErrNotSupported );
break;
}
}
// ============================================================================
// CWidgetRegistryServerSession::ServiceError()
// Handles leaves from ServiceL()
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::ServiceError( const RMessage2& aMessage,
TInt aError )
{
const TInt function = aMessage.Function();
// supply the correct error return message params for each opcode
switch ( function )
{
// TODO many of these opcodes have no provision for proper
// error signalling and need to be reworked to communicate
// error codes
case EOpCodeRegisterWidget:
aMessage.Complete( aError );
break;
case EOpCodeWidgetExists:
aMessage.Complete( EFalse );
break;
case EOpCodeIsWidget:
aMessage.Complete( EFalse );
break;
case EOpCodeIsWidgetRunning:
aMessage.Complete( EFalse );
break;
case EOpCodeIsWidgetInMiniView:
aMessage.Complete( EFalse );
break;
case EOpCodeIsWidgetInFullView:
aMessage.Complete( EFalse );
break;
case EOpCodeIsWidgetPromptNeeded:
aMessage.Complete( EFalse );
break;
case EOpCodeWidgetCount:
aMessage.Complete( 0 );
break;
case EOpCodeInstalledWidgetsPhase1:
aMessage.Complete( 0 );
break;
case EOpCodeInstalledWidgetsPhase2:
aMessage.Complete( 0 );
break;
case EOpCodeRunningWidgetsPhase1:
aMessage.Complete( 0 );
break;
case EOpCodeRunningWidgetsPhase2:
aMessage.Complete( 0 );
break;
case EOpCodeGetWidgetBundleId:
aMessage.Complete( 0 );
break;
case EOpCodeGetWidgetBundleName:
aMessage.Complete( 0 );
break;
case EOpCodeGetWidgetPropertyValue:
aMessage.Complete( aError );
break;
case EOpCodeGetWidgetPath:
aMessage.Complete( 0 );
break;
case EOpCodeGetWidgetUid:
aMessage.Complete( KNullUid.iUid );
break;
case EOpCodeGetWidgetUidForUrl:
aMessage.Complete( KNullUid.iUid );
break;
case EOpCodeDeRegisterWidget:
aMessage.Complete( aError );
break;
case EOpCodeGetAvailableUid:
aMessage.Complete( KNullUid.iUid );
break;
case EOpCodeSetActive:
aMessage.Complete( aError );
break;
case EOpCodeWidgetRegistryDisconnect:
aMessage.Complete( aError );
break;
case EOpCodeGetLprojName:
aMessage.Complete( 0 );
break;
case EOpCodeSecurityPolicyId:
aMessage.Complete( 0 );
break;
case EOpCodeSetWidgetInMiniView:
aMessage.Complete( EFalse );
break;
case EOpCodeSetWidgetInFullView:
aMessage.Complete( EFalse );
break;
case EOpCodeSetWidgetPromptNeeded:
aMessage.Complete( EFalse );
break;
case EOpWidgetSapiAccessState:
aMessage.Complete( EFalse );
break;
default:
aMessage.Complete( aError );
break;
}
}
// ============================================================================
// CWidgetRegistryServerSession::OpRegisterWidgetL()
// Registers the widget
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpRegisterWidgetL(
const RMessage2& aMessage )
{
// ARGS: 0 -> descriptor to buf of serialized property values
TInt l = aMessage.GetDesMaxLength( 0 );
HBufC8* msgData = HBufC8::NewLC( l );
TPtr8 readPtr( msgData->Des() );
aMessage.ReadL( 0, readPtr );
RDesReadStream stream( *msgData );
CleanupClosePushL( stream );
iWidgetRegistry->RegisterWidgetL( stream );
CleanupStack::PopAndDestroy( 2 ); //stream, msgData,
return KErrNone;
}
// ============================================================================
// CWidgetRegistryServerSession::OpIsWidget()
// Returns true if the given UId falls within the range allocated for widgets
//
// @since 3.1
// ============================================================================
//
TBool CWidgetRegistryServerSession::OpIsWidget(
const RMessage2& aMessage )
{
TInt uid = 0;
TBool retVal( EFalse );
uid = aMessage.Int0();
retVal = iWidgetRegistry->IsWidget( TUid::Uid( uid ) );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpWidgetExists()
// Returns true if the widget with the given UId has been installed.
//
// @since 3.1
// ============================================================================
//
TBool CWidgetRegistryServerSession::OpWidgetExists(
const RMessage2& aMessage )
{
TBool retVal( EFalse );
TBuf<KWidgetRegistryVal> bundleId;
TInt len = aMessage.Int1();
if ( len < 1 || len > KWidgetRegistryVal )
{
return retVal;
}
bundleId.SetLength( len );
TRAP_IGNORE( aMessage.ReadL( 0, bundleId ) )
retVal = iWidgetRegistry->WidgetExists( bundleId );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpIsWidgetRunning()
// Returns running status of the widget with the given UId.
//
// @since 3.1
// ============================================================================
//
TBool CWidgetRegistryServerSession::OpIsWidgetRunning(
const RMessage2& aMessage )
{
TInt uid = 0;
TBool retVal( EFalse );
uid = aMessage.Int0();
retVal = iWidgetRegistry->IsWidgetRunning( TUid::Uid( uid ) );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpWidgetSapiAccessState()
// Returns widget sapi access state is prompted, promptless or denied.
//
// @since 5.0
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpWidgetSapiAccessState(
const RMessage2& aMessage )
{
TInt uid = 0;
TInt retVal( -1 );
uid = aMessage.Int0();
retVal = iWidgetRegistry->WidgetSapiAccessState( TUid::Uid( uid ) );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpIsWidgetInMiniView()
// Returns status whether widget is started in miniview or not.
//
// @since
// ============================================================================
//
TBool CWidgetRegistryServerSession::OpIsWidgetInMiniView(
const RMessage2& aMessage )
{
TInt uid = 0;
TBool retVal( EFalse );
uid = aMessage.Int0();
retVal = iWidgetRegistry->IsWidgetInMiniView( TUid::Uid( uid ) );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpIsWidgetInFullView()
// Returns status whether widget is started in full view or not.
//
// @since
// ============================================================================
//
TBool CWidgetRegistryServerSession::OpIsWidgetInFullView(
const RMessage2& aMessage )
{
TInt uid = 0;
TBool retVal( EFalse );
uid = aMessage.Int0();
retVal = iWidgetRegistry->IsWidgetInFullView( TUid::Uid( uid ) );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpIsWidgetPromptNeeded()
// Returns status whether miniview platform access prompt is needed or not.
//
// @since 5.0
// ============================================================================
//
TBool CWidgetRegistryServerSession::OpIsWidgetPromptNeeded(
const RMessage2& aMessage )
{
TInt uid = 0;
TBool retVal( EFalse );
uid = aMessage.Int0();
retVal = iWidgetRegistry->IsBlanketPermGranted( TUid::Uid( uid ) );
return retVal;
}
// ============================================================================
// CWidgetRegistryServerSession::OpWidgetCount()
// Returns count of installed widgets
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpWidgetCount(
const RMessage2& /*aMessage*/ )
{
return iWidgetRegistry->WidgetCount();
}
// ============================================================================
// CWidgetRegistryServerSession::OpInstalledWidgetsPhase1L()
// gets total size of all elements in the widgetinfo array in terms of
// buffer length; negative value means one of the system-wide error
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpInstalledWidgetsPhase1L(
const RMessage2& /*aMessage*/ )
{
TInt ret = 0;
RWidgetInfoArray widgetInfoArr;
CleanupStack::PushL( TCleanupItem(
CWidgetRegistryServerSession::ResetAndDestroy, &widgetInfoArr ) );
iWidgetRegistry->InstalledWidgetsL( widgetInfoArr );
if ( widgetInfoArr.Count() > 0 )
{
ret = widgetInfoArr.Count() * ( 4 * sizeof( TInt ) +
KWidgetRegistryVal + 1 + KMaxDriveName + 1 + 1 );
}
CleanupStack::PopAndDestroy(&widgetInfoArr);
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpInstalledWidgetsPhase2L()
// Sets widgetinfo array of the installed widgets in the message itself
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpInstalledWidgetsPhase2L(
const RMessage2& aMessage )
{
TInt ret = 0;
RWidgetInfoArray widgetInfoArr;
CleanupStack::PushL( TCleanupItem(
CWidgetRegistryServerSession::ResetAndDestroy, &widgetInfoArr) );
iWidgetRegistry->InstalledWidgetsL( widgetInfoArr );
TInt error = KErrNone;
HBufC8* widgetInfoDes = NULL;
TRAP( error, widgetInfoDes = MarshalDataL( widgetInfoArr ) );
CleanupStack::PushL( widgetInfoDes );
if ( error == KErrNone )
{
ret = widgetInfoArr.Count();
aMessage.WriteL( 0, *widgetInfoDes );
}
CleanupStack::PopAndDestroy( 2 );
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpRunningWidgetsPhase1L()
// gets total size of all elements in the widgetinfo array in terms of
// buffer length; negative value means one of the system-wide error
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpRunningWidgetsPhase1L(
const RMessage2& /*aMessage*/ )
{
TInt ret = 0;
RWidgetInfoArray widgetInfoArr;
CleanupStack::PushL( TCleanupItem(
CWidgetRegistryServerSession::ResetAndDestroy, &widgetInfoArr ));
iWidgetRegistry->RunningWidgetsL( widgetInfoArr );
if ( widgetInfoArr.Count() > 0 )
{
ret = widgetInfoArr.Count() * ( 4 * sizeof( TInt ) +
KWidgetRegistryVal + 1 + KMaxDriveName + 1 + 1 );
}
CleanupStack::PopAndDestroy();
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpRunningWidgetsPhase2L()
// Sets widgetinfo array of the running widgets in the message itself
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpRunningWidgetsPhase2L(
const RMessage2& aMessage )
{
TInt ret = 0;
RWidgetInfoArray widgetInfoArr;
CleanupStack::PushL( TCleanupItem(
CWidgetRegistryServerSession::ResetAndDestroy, &widgetInfoArr) );
iWidgetRegistry->RunningWidgetsL( widgetInfoArr );
TInt error = KErrNone;
HBufC8* widgetInfoDes = NULL;
TRAP( error, widgetInfoDes = MarshalDataL( widgetInfoArr ) );
CleanupStack::PushL( widgetInfoDes );
if ( error == KErrNone )
{
ret = widgetInfoArr.Count();
aMessage.WriteL( 0, *widgetInfoDes );
}
CleanupStack::PopAndDestroy( 2 );
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetWidgetBundleId()
// Returns bundleId of the widget with the given UId.
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetWidgetBundleId(
const RMessage2& aMessage )
{
TInt ret = 0;
TInt uid = aMessage.Int2();
TBuf<KWidgetRegistryVal> buf;
buf.SetLength( aMessage.Int1() );
TRAP_IGNORE( aMessage.ReadL( 0, buf ) )
iWidgetRegistry->GetWidgetBundleId( TUid::Uid( uid ), buf );
TRAP_IGNORE( aMessage.WriteL( 0, buf ) )
ret = buf.Length();
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetWidgetBundleName()
// Returns bundle display name of the widget with the given UId.
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetWidgetBundleName(
const RMessage2& aMessage )
{
TInt ret = 0;
TInt uid = aMessage.Int2();
TBuf<KWidgetRegistryVal> buf;
buf.SetLength( aMessage.Int1() );
iWidgetRegistry->GetWidgetBundleName( TUid::Uid( uid ), buf );
TRAP_IGNORE( aMessage.WriteL( 0, buf ) )
ret = buf.Length();
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetWidgetPropertyValue()
// Produces serialized value and error code
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetWidgetPropertyValueL(
const RMessage2& aMessage )
{
// ARGS( 0 -> UID, 1 -> TWidgetPropertyId,
// 2 -> descriptor for buffer to hold serialization of value )
// returns error code
TRAPD( error,
{
TUid uid( TUid::Uid( aMessage.Int0() ) );
TWidgetPropertyId propId = static_cast<TWidgetPropertyId>(aMessage.Int1());
TInt maxLength = aMessage.GetDesMaxLength( 2 );
CBufFlat* buf = iWidgetRegistry->GetWidgetPropertyValueL(
uid, propId, maxLength );
CleanupStack::PushL( buf );
aMessage.WriteL( 2, buf->Ptr(0) );
CleanupStack::PopAndDestroy(); // buf
}
);
return error;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetWidgetPath()
// Returns path of the widget with the given UId.
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetWidgetPath(
const RMessage2& aMessage )
{
TInt ret = 0;
TInt uid = aMessage.Int2();
TBuf<KWidgetRegistryVal> path;
path.SetLength( aMessage.Int1() );
TRAP_IGNORE( aMessage.ReadL( 0, path ) )
iWidgetRegistry->GetWidgetPath( TUid::Uid( uid ), path );
TRAP_IGNORE( aMessage.WriteL( 0, path ) )
ret = path.Length();
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetWidgetUid()
// Returns UId of the widget with the given bundle Id.
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetWidgetUid(
const RMessage2& aMessage )
{
TUid uid = TUid::Uid( 0 );
TBuf<KWidgetRegistryVal> bundleId;
TInt len = aMessage.Int1();
if ( len < 1 || len > KWidgetRegistryVal )
{
return 0;
}
bundleId.SetLength( len );
TRAP_IGNORE( aMessage.ReadL( 0, bundleId ) )
uid = iWidgetRegistry->GetWidgetUid( bundleId );
return uid.iUid;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetWidgetUidForUrl()
// Returns UId of the widget with the given Url
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetWidgetUidForUrl(
const RMessage2& aMessage )
{
TBuf<KWidgetRegistryVal> url;
TInt len = aMessage.Int1();
if ( len < 1 || len > KWidgetRegistryVal )
{
return 0;
}
url.SetLength( len );
TRAP_IGNORE( aMessage.ReadL( 0, url ) )
TInt uid = ( iWidgetRegistry->GetWidgetUidForUrl( url ) ).iUid;
return uid;
}
// ============================================================================
// CWidgetRegistryServerSession::OpDeRegisterWidgetL()
// Deregister the widget
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpDeRegisterWidgetL(
const RMessage2& aMessage )
{
TInt uid;
TInt ret = KErrNone;
uid = aMessage.Int0();
iWidgetRegistry->DeRegisterWidgetL( TUid::Uid( uid ) );
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetAvailableUidL()
// Returns next available UId
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetAvailableUidL(
const RMessage2& aMessage )
{
TUid uid = TUid::Uid( 0 );
uid = iWidgetRegistry->GetAvailableUidL( aMessage.Int0() );
return uid.iUid;
}
// ============================================================================
// CWidgetRegistryServerSession::OpGetLprojName()
// Returns language project name for directory which holds the localized content
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpGetLprojNameL(
const RMessage2& aMessage )
{
TBuf<KWidgetRegistryVal> aLprojName;
aLprojName.SetLength( aMessage.Int1() );
aMessage.ReadL( 0, aLprojName );
iWidgetRegistry->GetLprojNameL( aLprojName );
aMessage.WriteL( 0, aLprojName );
return aLprojName.Length();
}
// ============================================================================
// CWidgetRegistryServerSession::OpSetActive()
// Set/Reset active status of the widget
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::OpSetActive( const RMessage2& aMessage )
{
TInt uid = aMessage.Int0();
TInt status = aMessage.Int1();
iWidgetRegistry->SetActive( TUid::Uid( uid ), status );
}
// ============================================================================
// CWidgetRegistryServerSession::OpSetMiniView()
// Set/Reset Widget status for launched in MiniView
//
// @since
// ============================================================================
//
void CWidgetRegistryServerSession::OpSetMiniView( const RMessage2& aMessage )
{
TInt uid = aMessage.Int0();
TInt status = aMessage.Int1();
iWidgetRegistry->SetMiniView( TUid::Uid( uid ), status );
}
// ============================================================================
// CWidgetRegistryServerSession::OpSetFullView()
// Set/Reset Widget status in FullView
//
// @since
// ============================================================================
//
void CWidgetRegistryServerSession::OpSetFullView( const RMessage2& aMessage )
{
TInt uid = aMessage.Int0();
TInt status = aMessage.Int1();
iWidgetRegistry->SetFullView( TUid::Uid( uid ), status );
}
// ============================================================================
// CWidgetRegistryServerSession::OpSetPromptNeeded()
// Set/Reset Widget miniview platform access prompt is needed
//
// @since
// ============================================================================
//
void CWidgetRegistryServerSession::OpSetPromptNeeded( const RMessage2& aMessage )
{
TInt uid = aMessage.Int0();
TInt status = aMessage.Int1();
TRAP_IGNORE(iWidgetRegistry->SetBlanketPermissionL( TUid::Uid( uid ), status ));
}
// ============================================================================
// CWidgetRegistryServerSession::OpDisconnect()
// Disconnects session with server
//
// @since 3.1
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpDisconnect(
const RMessage2& /*aMessage*/ )
{
TInt ret = KErrNone;
CWidgetRegistryServer* server;
server = static_cast<CWidgetRegistryServer*>(
const_cast<CServer2*>( Server() ) );
if ( server )
{
server->RemoveSession();
}
return ret;
}
// ============================================================================
// CWidgetRegistryServerSession::OpSecurityPolicyId()
// Returns security policy Id
//
// @since 5.0
// ============================================================================
//
TInt CWidgetRegistryServerSession::OpSecurityPolicyId(
const RMessage2& /*aMessage*/ )
{
return iWidgetRegistry->SecurityPolicyId();
}
// ============================================================================
// CWidgetRegistryServerSession::WidgetRegistryServer()
// Returns server object
//
// @since 3.1
// ============================================================================
//
CWidgetRegistryServer& CWidgetRegistryServerSession::WidgetRegistryServer()
{
return static_cast<CWidgetRegistryServer&>(
*const_cast<CServer2*>( Server() ) );
}
// ============================================================================
// CWidgetRegistryServerSession::MarshalDataL()
// Creates and returns heap descriptor which holds contents of RWidgetInfoArray
// @since 3.1
// ============================================================================
//
HBufC8* CWidgetRegistryServerSession::MarshalDataL(
RWidgetInfoArray& aWidgetInfoArr )
{
// Create a dynamic flat buffer to hold the data data
const TInt KExpandSize = 128; // "Granularity" of dynamic buffer
CBufFlat* buf = CBufFlat::NewL( KExpandSize );
CleanupStack::PushL( buf );
RBufWriteStream stream( *buf ); // Stream over the buffer
CleanupClosePushL( stream );
ExternalizeL( stream, aWidgetInfoArr );
CleanupStack::PopAndDestroy( &stream );
// Create a heap descriptor from the buffer
HBufC8* des = HBufC8::NewL( buf->Size() );
TPtr8 ptr( des->Des() );
buf->Read( 0, ptr, buf->Size() );
CleanupStack::PopAndDestroy( buf ); // Finished with the buffer
return ( des );
}
// ============================================================================
// CWidgetRegistryServerSession::ExternalizeL()
// Write data to aStream
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::ExternalizeL(
RWriteStream& aStream,
RWidgetInfoArray& aWidgetInfoArr )
{
TInt len = 0;
for ( TInt i = 0; i < aWidgetInfoArr.Count(); i++ )
{
aStream.WriteInt32L( aWidgetInfoArr[i]->iUid.iUid );
aStream.WriteInt32L( aWidgetInfoArr[i]->iFileSize );
len = aWidgetInfoArr[i]->iBundleName->Length();
aStream.WriteInt32L( len );
aStream.WriteL( *(aWidgetInfoArr[i]->iBundleName), len );
len = aWidgetInfoArr[i]->iDriveName->Length();
aStream.WriteInt32L( len );
aStream.WriteL( *(aWidgetInfoArr[i]->iDriveName), len );
}
}
// ============================================================================
// CWidgetRegistryServerSession::ResetWidgetInfo()
// delete each item in RWidgetInfoArray before closing it
//
// @since 3.1
// ============================================================================
//
void CWidgetRegistryServerSession::ResetWidgetInfo(
RWidgetInfoArray& aWidgetInfoArr )
{
for ( TInt i = 0; i < aWidgetInfoArr.Count(); i++ )
{
CWidgetInfo *item = aWidgetInfoArr[i];
delete item ;
}
}
// End of File