/*
* Copyright (c) 2002 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: DM ScreenSaver List
*
*/
#include "ScreenSaverList.h"
#include <implementationproxy.h> // For TImplementationProxy definition
#include <e32def.h>
#include <centralrepository.h>
#include <ScreensaverpluginIntDef.h>
#include <mmfcontrollerpluginresolver.h> // For CleanupResetAndDestroyPushL
#include "aminstalloptions.h"
#include <ScreensaverInternalCRKeys.h>
#include <ScreensaverInternalPSKeys.h>
#include "debug.h"
#include "ScreenSaverClient.h"
#include <e32property.h>
_LIT8( KSlash, "/" );
#include <e32cmn.h>
_LIT( KPslnScreenSaverTypeDateTime, "DateTime" );
_LIT( KPslnScreenSaverTypeText, "Text" );
const TInt KPslnMaxNumberOfScreenSaverText = 15;
const TInt KPostTimeOut = 10000000; // 10 seconds
// ------------------------------------------------------------------------------------------------
// CScreenSaverList* CScreenSaverList::NewL( )
// ------------------------------------------------------------------------------------------------
CScreenSaverList* CScreenSaverList::NewL( )
{
RDEBUG("CScreenSaverList::NewL(): begin");
CScreenSaverList* self = NewLC( );
CleanupStack::Pop();
return self;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList* CScreenSaverList::NewLC( )
// ------------------------------------------------------------------------------------------------
CScreenSaverList* CScreenSaverList::NewLC( )
{
CScreenSaverList* self = new( ELeave ) CScreenSaverList( );
CleanupStack::PushL( self );
self->ConstructL( );
return self;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::CScreenSaverList()
// ------------------------------------------------------------------------------------------------
CScreenSaverList::CScreenSaverList( )
: iDirty( ETrue )
, iScreenSavers( 0 )
, iInstallOptions()
{
GetDefaultInstallOptions( iInstallOptions );
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::ConstructL()
// ------------------------------------------------------------------------------------------------
void CScreenSaverList::ConstructL( )
{
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::~CScreenSaverList()
// ------------------------------------------------------------------------------------------------
CScreenSaverList::~CScreenSaverList()
{
if (iScreenSavers)
{
iScreenSavers->ResetAndDestroy();
delete iScreenSavers;
}
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetScreenSaverListL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetScreenSaverListL( const CArrayFix<TSmlDmMappingInfo>& aPreviousList, CBufBase& aList )
{
CheckUpdatesL();
CDesC8ArrayFlat* names = new (ELeave) CDesC8ArrayFlat( 32 );
CleanupStack::PushL( names );
CDesC8ArrayFlat* luids = new (ELeave) CDesC8ArrayFlat( 32 );
CleanupStack::PushL( luids );
TInt i = 0;
// Create list of previous screen savers
for (i = 0 ; i < aPreviousList.Count() ; i++)
{
TPtrC8 screenSaverId = ScreenSaverIdFromLUID( aPreviousList[i].iURISegLUID );
names->AppendL( aPreviousList[i].iURISeg );
luids->AppendL( screenSaverId );
}
// Find and add missing screen savers
for (i = 0 ; i < iScreenSavers->Count() ; i++)
{
TInt idx = 0;
TPtrC8 name = (*iScreenSavers)[i]->Id();
if (luids->Find( name, idx ) != 0)
{
// not found
// Check that current "name" is not in use
if (names->Find( name, idx ) != 0)
{
// not found, add it
names->AppendL( name );
}
}
}
// Fill result
for (i = 0 ; i < names->Count() ; i++)
{
if (i > 0)
{
aList.InsertL( aList.Size(), KSlash );
}
aList.InsertL( aList.Size(), (*names)[i] );
}
// Cleanup
CleanupStack::PopAndDestroy( luids );
CleanupStack::PopAndDestroy( names );
return MSmlDmAdapter::EOk;
//sf- TInt i = 0;
//sf- for (i = 0 ; i < iScreenSavers->Count() ; i++)
//sf- {
//sf- if (i > 0)
//sf- {
//sf- aList.InsertL( aList.Size(), KSlash );
//sf- }
//sf-
//sf- CScreenSaverInfo *info = (*iScreenSavers)[i];
//sf- aList.InsertL( aList.Size(), info->Id() );
//sf- }
//sf-
//sf-
//sf- return MSmlDmAdapter::EOk;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetIdL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetIdL( const TDesC8& aId, CBufBase& aResult )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
aResult.InsertL( aResult.Size(), screenSaverInfo->Id() );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetNameL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetNameL( const TDesC8& aId, CBufBase& aResult )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
aResult.InsertL( aResult.Size(), screenSaverInfo->Name() );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::SetNameL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::SetNameL( const TDesC8& aId, const TDesC8& aData )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
screenSaverInfo->SetNameL( aData );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetDescriptionL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetDescriptionL( const TDesC8& aId, CBufBase& aResult )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
aResult.InsertL( aResult.Size(), screenSaverInfo->Description() );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::SetDescriptionL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::SetDescriptionL( const TDesC8& aId, const TDesC8& aData )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
screenSaverInfo->SetDescriptionL( aData );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetCustomPropertyL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetCustomPropertyL( const TDesC8& aId, CBufBase& aResult )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
aResult.InsertL( aResult.Size(), screenSaverInfo->CustomProperty() );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::SetCustomPropertyL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::SetCustomPropertyL( const TDesC8& aId, const TDesC8& aData )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
screenSaverInfo->SetCustomPropertyL( aData );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetVersionL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetVersionL( const TDesC8& aId, CBufBase& aResult )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
aResult.InsertL( aResult.Size(), screenSaverInfo->Version() );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::SetVersionL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::SetVersionL( const TDesC8& aId, const TDesC8& aVersion )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::ENotFound;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
screenSaverInfo->SetVersionL( aVersion );
ret = MSmlDmAdapter::EOk;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetActiveL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::GetActiveL( CBufBase& aResult )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk;
TInt screenSaverTypeId = 0; // Text
TFileName screenSaverFileName;
CRepository* repository = CRepository::NewLC( KCRUidScreenSaver );
TInt error = repository->Get( KScreenSaverObject, screenSaverTypeId );
if( error == KErrNone )
{
if( screenSaverTypeId == 0 ) // Text
{
screenSaverFileName = KPslnScreenSaverTypeText;
}
else if( screenSaverTypeId == 1 ) // Date&time
{
screenSaverFileName = KPslnScreenSaverTypeDateTime;
}
else if( screenSaverTypeId == 3 )// Object
{
error = repository->Get( KScreenSaverPluginName, screenSaverFileName );
}
else
{
error = KErrUnknown;
}
}
CleanupStack::PopAndDestroy( repository );
if( error == KErrNone )
{
TBuf8<KMaxFileName> screenSaverFileName8;
screenSaverFileName8.Copy( screenSaverFileName );
aResult.InsertL( aResult.Size(), screenSaverFileName8 );
}
else
{
ret = MSmlDmAdapter::EError;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::SetActiveL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::SetActiveL( const TDesC8& aId )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aId );
if (screenSaverInfo != 0)
{
screenSaverInfo->ActivateL();
}
else
{
ret = MSmlDmAdapter::EError;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::SetInstallOptionsL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::SetInstallOptionsL( const TDesC8& aOptions )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk;
TInt errCode = KErrNone;
GetDefaultInstallOptions( iInstallOptions );
if (aOptions.Length() > 0)
{
TRAP( errCode, InstallOptionsParser::ParseOptionsL( aOptions, iInstallOptions ) );
}
if (errCode != KErrNone)
{
ret = MSmlDmAdapter::EError;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::InstallL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::InstallL( const TDesC& aFileName )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk;
TInt errCode = KErrNone;
iDirty = ETrue;
// Install using options if given and otherwise with default options
SwiUI::RSWInstLauncher installer;
User::LeaveIfError( installer.Connect() );
CleanupClosePushL( installer );
SwiUI::TInstallOptionsPckg optPckg( iInstallOptions );
errCode = installer.SilentInstall( aFileName, optPckg );
CleanupStack::PopAndDestroy( &installer );
if (errCode != KErrNone)
{
ret = MSmlDmAdapter::EError;
}
return ret;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::DeleteL()
// ------------------------------------------------------------------------------------------------
MSmlDmAdapter::TError CScreenSaverList::DeleteL( const TDesC8& aLUID )
{
MSmlDmAdapter::TError ret = MSmlDmAdapter::EOk;
TInt errCode = KErrNone;
CScreenSaverInfo* screenSaverInfo = FindByIdL( aLUID );
if( screenSaverInfo != NULL )
{
CRepository* repository = CRepository::NewLC( KCRUidScreenSaver );
if( screenSaverInfo->TypeId() == CScreenSaverInfo::EObject )
{
TFileName screenSaverFileName;
screenSaverFileName.Copy( screenSaverInfo->FileName() );
TFileName repFileName;
repository->Get( KScreenSaverPluginName, repFileName );
if( repFileName == screenSaverFileName )
{
TBuf<KPslnMaxNumberOfScreenSaverText> screenText;
screenText.Copy( screenSaverInfo->CustomProperty() );
errCode = repository->Set( KScreenSaverText, screenText );
errCode = repository->Set( KScreenSaverObject, CScreenSaverInfo::EText );
TRequestStatus timeoutStatus /*= KRequestPending*/;
RTimer timeout;
User::LeaveIfError( timeout.CreateLocal() );
CleanupClosePushL( timeout );
timeout.After( timeoutStatus, KPostTimeOut );
User::WaitForRequest( timeoutStatus );
if( timeoutStatus.Int() == KRequestPending)
{
timeout.Cancel();
User::WaitForRequest( timeoutStatus );
}
CleanupStack::PopAndDestroy( &timeout );
}
}
CleanupStack::PopAndDestroy( repository );
}
else
{
errCode = KErrNotFound;
}
if( errCode == KErrNone )
{
iDirty = ETrue;
TUint pkgUid = 0;
TLex8 parser( aLUID );
if ((parser.Get() == '[') &&
(parser.Val( pkgUid, EHex ) == KErrNone) &&
(parser.Get() == ']'))
{
// Uninstall silent
SwiUI::RSWInstLauncher installer;
User::LeaveIfError( installer.Connect() );
CleanupClosePushL( installer );
SwiUI::TUninstallOptions uninstallOptions;
SwiUI::TUninstallOptionsPckg optPckg( uninstallOptions );
errCode = installer.SilentUninstall( TUid::Uid( pkgUid ), optPckg, SwiUI::KSisxMimeType() );
CleanupStack::PopAndDestroy( &installer );
}
}
if (errCode == KErrNotFound)
{
ret = MSmlDmAdapter::ENotFound;
}
else if (errCode != KErrNone)
{
ret = MSmlDmAdapter::EError;
}
return ret;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Internal methods
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::CheckUpdatesL()
// ------------------------------------------------------------------------------------------------
void CScreenSaverList::CheckUpdatesL()
{
if (iDirty)
{
LoadL();
iDirty = EFalse;
}
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::LoadL()
// ------------------------------------------------------------------------------------------------
void CScreenSaverList::LoadL()
{
CScreenSaverInfo* entry = 0;
// Add descriptors for system screensavers
delete iScreenSavers;
iScreenSavers = 0;
iScreenSavers = new (ELeave) CArrayPtrFlat< CScreenSaverInfo >( 8 );
entry = CScreenSaverInfo::NewLC( KPslnScreenSaverTypeDateTime );
iScreenSavers->AppendL( entry );
CleanupStack::Pop( entry );
entry = CScreenSaverInfo::NewLC( KPslnScreenSaverTypeText );
iScreenSavers->AppendL( entry );
CleanupStack::Pop( entry );
// The path variable is not used
// The signature of this function could be changed in later releases
LoadPluginsL( KNullDesC );
//sf- LoadPluginsL( KPslnScreensaverPathROM );
//sf- LoadPluginsL( KPslnScreensaverPathLFFS );
//sf- LoadPluginsL( KPslnScreensaverPathMMC );
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::LoadPluginsL()
// ------------------------------------------------------------------------------------------------
TBool CScreenSaverList::LoadPluginsL( const TDesC& /*aPath*/ )
{
RDEBUG(" CScreenSaverList: LoadPluginsL ... <");
TBool found = EFalse;
RScreenSaverClient ssClient;
User::LeaveIfError( ssClient.Connect() );
CleanupClosePushL( ssClient );
RSSListInfoPtrArray sslistinfo;
CleanupResetAndDestroyPushL( sslistinfo );
ssClient.GetScreenSaverListInfoL(sslistinfo );
const TInt count = sslistinfo.Count();
RDEBUG_2(" CScreenSaverList: LoadPluginsL : SScount is :%d",count);
for( TInt i = 0 ; i < count ; i++ )
{
CScreenSaverListInfo* implInfo = sslistinfo[i];
CScreenSaverInfo* entry = CScreenSaverInfo::NewLC(
implInfo->ImplementationUid().Name() );
entry->SetNameL( implInfo->DisplayName() );
TBuf8<20> version;
version.Num( implInfo->Version() );
entry->SetVersionL( version );
entry->SetCustomPropertyL( implInfo->OpaqueData() );
iScreenSavers->AppendL( entry );
CleanupStack::Pop( entry );
found = ETrue;
}
CleanupStack::PopAndDestroy( &sslistinfo );
CleanupStack::PopAndDestroy( &ssClient );
RDEBUG(" CScreenSaverList: LoadPluginsL ... >");
return found;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::
// ------------------------------------------------------------------------------------------------
CScreenSaverInfo* CScreenSaverList::FindByIdL( const TDesC8& aId )
{
CheckUpdatesL();
CScreenSaverInfo* entry = 0;
TInt i = 0;
TPtrC8 id = ScreenSaverIdFromLUID( aId );
if (id.Length() == 0)
{
id.Set( aId );
}
for (i = 0 ; i < iScreenSavers->Count() ; i++)
{
if (id == (*iScreenSavers)[i]->Id())
{
entry = (*iScreenSavers)[i];
break;
}
}
return entry;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::ScreenSaverIdFromLUID()
// ------------------------------------------------------------------------------------------------
TPtrC8 CScreenSaverList::ScreenSaverIdFromLUID( const TDesC8& aLUID )
{
TInt pos = aLUID.Locate( KPkgId_ScrId_Separator );
if (pos == KErrNotFound)
{
pos = aLUID.Length() - 1;
}
return aLUID.Mid( pos + 1 );
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::GetDefaultInstallOptions()
// ------------------------------------------------------------------------------------------------
void CScreenSaverList::GetDefaultInstallOptions( SwiUI::TInstallOptions &aOptions )
{
SwiUI::TInstallOptions defaultOptions;
// Return options
aOptions = defaultOptions;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverList::
// ------------------------------------------------------------------------------------------------
//=================================================================================================
//=================================================================================================
//====
//==== CScreenSaverInfo
//====
//=================================================================================================
//=================================================================================================
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::NewL()
// ------------------------------------------------------------------------------------------------
CScreenSaverInfo* CScreenSaverInfo::NewL( const TDesC& aId )
{
RDEBUG("CScreenSaverInfo::NewL(): begin");
CScreenSaverInfo* self = NewLC( aId );
CleanupStack::Pop();
return self;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo* CScreenSaverInfo::NewLC()
// ------------------------------------------------------------------------------------------------
CScreenSaverInfo* CScreenSaverInfo::NewLC( const TDesC& aId )
{
CScreenSaverInfo* self = new( ELeave ) CScreenSaverInfo( );
CleanupStack::PushL( self );
self->ConstructL( aId );
return self;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
CScreenSaverInfo::CScreenSaverInfo()
: iId( 0 )
, iName( 0 )
, iDescription( 0 )
, iCustomProperty( 0 )
, iVersion( 0 )
{
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::ConstructL( const TDesC& aId )
{
iId = HBufC8::NewL( aId.Length() );
iId->Des().Copy( aId );
iName = KNullDesC8().AllocL();
iDescription = KNullDesC8().AllocL();
iCustomProperty = KNullDesC8().AllocL();
iVersion = KNullDesC8().AllocL();
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
CScreenSaverInfo::~CScreenSaverInfo()
{
delete iId;
delete iName;
delete iDescription;
delete iCustomProperty;
delete iVersion;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
const TDesC8& CScreenSaverInfo::Id()
{
return *iId;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
const TDesC8& CScreenSaverInfo::Name()
{
return *iName;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::SetNameL( const TDesC8& aName )
{
delete iName;
iName = 0;
iName = aName.AllocL();
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::SetNameL( const TDesC& aName )
{
delete iName;
iName = 0;
iName = HBufC8::NewL( aName.Length() );
iName->Des().Copy( aName );
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
const TDesC8& CScreenSaverInfo::Description()
{
return *iDescription;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::SetDescriptionL( const TDesC8& aDescription )
{
delete iDescription;
iDescription = 0;
iDescription = aDescription.AllocL();
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
const TDesC8& CScreenSaverInfo::CustomProperty()
{
return *iCustomProperty;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::SetCustomPropertyL( const TDesC8& aCustomProperty )
{
delete iCustomProperty;
iCustomProperty = 0;
iCustomProperty = aCustomProperty.AllocL();
// Update settings if needed
if (IsActivatedL() && TypeId() == EText)
{
ActivateL();
}
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
const TDesC8& CScreenSaverInfo::Version()
{
return *iVersion;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::SetVersionL( const TDesC8& aVersion )
{
delete iVersion;
iVersion = 0;
iVersion = aVersion.AllocL();
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
CScreenSaverInfo::TScreenSaverType CScreenSaverInfo::TypeId()
{
TScreenSaverType screenSaverTypeId = EText;
TFileName fileName;
fileName.Copy( FileName() );
if( fileName.CompareF( KPslnScreenSaverTypeText ) == 0 )
{
screenSaverTypeId = EText; // 0=Text
}
else if( fileName.CompareF( KPslnScreenSaverTypeDateTime ) == 0 )
{
screenSaverTypeId = EDateTime; // 1=Date&time
}
else
{
screenSaverTypeId = EObject; // 3=Object
}
return screenSaverTypeId;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
TBool CScreenSaverInfo::IsActivatedL()
{
TBool activated = EFalse;
TInt screenSaverTypeId = 0; // Text
TFileName screenSaverFileName;
CRepository* repository = CRepository::NewLC( KCRUidScreenSaver );
TInt error = repository->Get( KScreenSaverObject, screenSaverTypeId );
if( screenSaverTypeId == 3 )
{
repository->Get( KScreenSaverPluginName, screenSaverFileName );
}
CleanupStack::PopAndDestroy( repository );
if( screenSaverTypeId == 0 && TypeId() == EText ) // Text
{
activated = ETrue;
}
else if( screenSaverTypeId == 1 && TypeId() == EDateTime ) // Date&time
{
activated = ETrue;
}
else if( screenSaverTypeId == 3 && TypeId() == EObject )// Object
{
TFileName fileName;
fileName.Copy( FileName() );
activated = ( fileName.CompareF( screenSaverFileName ) == 0 );
}
return activated;
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
void CScreenSaverInfo::ActivateL()
{
CRepository* repository = CRepository::NewLC( KCRUidScreenSaver );
if( TypeId() == EText )
{
TBuf<KPslnMaxNumberOfScreenSaverText> screenText;
screenText.Copy( CustomProperty() );
repository->Set( KScreenSaverText, screenText );
}
else if( TypeId() == EDateTime )
{
//sf- TBuf<KPslnMaxNumberOfScreenSaverText> screenText;
//sf- screenText.Copy( CustomProperty() );
//sf- error = repository->Set( KScreenSaverText, screenText );
}
else if( TypeId() == EObject )
{
TFileName screenSaverFileName;
screenSaverFileName.Copy( FileName() );
repository->Set( KScreenSaverPluginName, screenSaverFileName );
}
repository->Set( KScreenSaverObject, TypeId() );
CleanupStack::PopAndDestroy( repository );
}
// ------------------------------------------------------------------------------------------------
// CScreenSaverInfo::
// ------------------------------------------------------------------------------------------------
const TDesC8& CScreenSaverInfo::FileName()
{
return *iId;
}
// ------------------------------------------------------------------------------------------------
// EOF
// ------------------------------------------------------------------------------------------------