diff -r aaeeca1f15af -r e8d784ac1a4b src/screensavershareddatai.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/screensavershareddatai.cpp Wed Sep 01 12:30:40 2010 +0100 @@ -0,0 +1,969 @@ +/* +* Copyright (c) 2003-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 for screensaver shared data connections. +* +*/ + + + +#include +#include // Profile API, not yet included in .h +#include +#include +#include +#include // KCoreAppUIsUipInd, KLightsVTForcedLightsOn +#include // KPSUidAiInformation +#include // KSettingsScreenSaverPeriod +#include // KLogsNewMissedCalls +#include +#include // KAknNewContactsNoteActive +#include // KAknKeyguardStatus +#include // Message (voice) waiting status +#include // KCTsyCallState +#include // KPSGlobalSystemState +#include +#include // Profile engine API +#include +#include + +#include "screensaverappui.h" +#include "screensaverctrlmovingtext.h" +#include "screensaverengine.h" +#include "screensavershareddatai.h" +#include "ScreensaverInternalPSKeys.h" +#include "screensaverutility.h" +#include "screensaverrepositorywatcher.h" +#include "screensaversubscriber.h" + +const TInt KTimeoutDefault = 15; // seconds (also in GS) +const TInt KTimeoutMin = 5; // minimum timeout in seconds (also in GS) + +// Screensaver "On/Off" status values +const TInt KScreensaverOff = 0; +const TInt KScreensaverOn = 1; + +// Screensaver activated from idle status values +const TInt KScreensaverNotFromIdle = 0; +const TInt KScreensaverStartedFromIdle = 1; + +// Screen saver text type. +// _LIT( KScreenSaverTypeText, "Text" ); +// Screensaver "None" (Sleep mode) +// _LIT( KScreenSaverTypeNone, "None" ); + +// Define security policies for Screensavers property keys +_LIT_SECURITY_POLICY_PASS(KSSPolicyPass); +_LIT_SECURITY_POLICY_C1(KSSPolicyWriteUserData, ECapabilityWriteUserData); +_LIT_SECURITY_POLICY_S0(KSSPolicyWriteSSOnly, 0x100056cf); + +// +// CScreensaverSharedDataI +// +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::NewL +// ----------------------------------------------------------------------------- +// +CScreensaverSharedDataI* CScreensaverSharedDataI::NewL() + { + CScreensaverSharedDataI* self = new (ELeave) CScreensaverSharedDataI(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); //self + return self; + } + + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::~CScreensaverSharedDataI +// ----------------------------------------------------------------------------- +// +CScreensaverSharedDataI::~CScreensaverSharedDataI() + { + // Release the active profile resources + InvalidateActiveProfile(); + + // Release the profile engine + if (iProfileEngine) + { + // No need to delete pointer, just release resources + iProfileEngine->Release(); + } + + delete iScreensaverRepositoryWatcher; + delete iScreensaverRepository; + delete iSettingsRepositoryWatcher; + delete iSettingsRepository; + delete iCTsyRepository; + delete iInboxFolder; + delete iMsvSession; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::DisplayObjectType +// ----------------------------------------------------------------------------- +// +TDisplayObjectType CScreensaverSharedDataI::DisplayObjectType() const + { + TInt type = 0; + + if (iScreensaverRepository) + { + iScreensaverRepository->Get( KScreenSaverObject, type ); + } + + return ( TDisplayObjectType )type; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetDisplayObjectType +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetDisplayObjectType( const TDisplayObjectType aType ) + { + if( iScreensaverRepository ) + { + iScreensaverRepository->Set(KScreenSaverObject, aType); + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::GetDisplayObjectText +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::GetDisplayObjectText( TDes& aDes ) const + { + CEikonEnv::Static()->ReadResource(aDes, R_SCREEN_SAVER_TEXT); + + if ( iScreensaverRepository ) + { + iScreensaverRepository->Get( KScreenSaverText, aDes ); + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::PluginName +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::GetPluginName( TFileName& aFileName ) const + { + if ( iScreensaverRepository ) + { + iScreensaverRepository->Get( KScreenSaverPluginName, aFileName ); + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ColorInversionUsed +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::IsInvertedColors() const + { + TInt colorInversionUsed(0); + + if( iScreensaverRepository ) + { + iScreensaverRepository->Get( KScreenSaverInvertedColors, colorInversionUsed ); + } + + return ( colorInversionUsed != 0 ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ScreensaverTimeout +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::ScreensaverTimeout() const + { + TInt timeout = KTimeoutDefault; + + if (iSettingsRepository) + { + iSettingsRepository->Get(KSettingsAutomaticKeyguardTime, timeout); + } + // No less than minimum timeout + // Old backed up minutes 1-4 will cause default timeout after + // being restored to new sw using seconds + if (timeout < KTimeoutMin) + { + return KTimeoutDefault; + } + + return timeout; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsNCNActive +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::IsNCNActive() const + { + // Setting the flag here is also needed, because Screensaver should not + // display new calls when Ncn note has been cancelled (even if the missed + // calls count is still nonzero). + // Also, when the phone is (re)started, and there are missed calls, + // Ncn will pop a note, This is the only way Screensaver knows about that. + + CRepository* avkonRepository = NULL; + + TRAP_IGNORE( avkonRepository = CRepository::NewL( KCRUidAvkon ) ); + + TInt value = 0; + + if ( avkonRepository ) + { + avkonRepository->Get( KAknNewContactsNoteActive, value ); + } + + delete avkonRepository; + + return ( value != 0 ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::NewMissedCalls +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::NewMissedCalls() const + { + CRepository* logsRepository = NULL; + + TRAP_IGNORE( logsRepository = CRepository::NewL( KCRUidLogs ) ); + + TInt value = 0; + + if ( logsRepository ) + { + logsRepository->Get( KLogsNewMissedCalls, value ); + } + + delete logsRepository; + + return value; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetSSForcedLightsOn +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetSSForcedLightsOn(TInt aSecs) + { + SCRLOGGER_WRITEF(_L("SCR: RequestLights(%d)"), aSecs); + + RProperty::Set( KPSUidCoreApplicationUIs, KLightsSSForcedLightsOn, aSecs ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetScreensaverStatus +// Indicate whether Screensaver is active or not +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetScreensaverStatus( TBool aOn /* = ETrue */ ) + { + //Check if the value is already updated. If so, setting the value again + //will cause unnecessary call backs to any subscribers of this property + if ( aOn ) + { + RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverOn ); + //else - no need to re-apply the same value + } + else //aOn is false + { + RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverOff ); + //else - no need to re-apply the same value + + //if stop from idle, change the status + RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverNotFromIdle); + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetSSStartedFromIdleStatus +// Set "Screensaver started from Idle" status +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetSSStartedFromIdleStatus() + { + TInt idleState = EPSAiBackground; + RProperty::Get(KPSUidAiInformation, KActiveIdleState, idleState); + + if (idleState == EPSAiBackground) + { + RProperty::Set( KPSUidScreenSaver, KScreenSaverActivatedFromIdle, KScreensaverNotFromIdle ); + } + else + { + RProperty::Set( KPSUidScreenSaver, KScreenSaverActivatedFromIdle, KScreensaverStartedFromIdle ); + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsScreenSaverAllowed +// Set "Screensaver started from Idle" status +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::IsScreenSaverAllowed() const + { + TInt value = 0; + + RProperty::Get( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, value ); + + return value; + } + +TInt CScreensaverSharedDataI::ScreensaverPreviewMode() const + { + TInt value = 0; + + RProperty::Get( KPSUidScreenSaver, KScreenSaverPreviewMode, value ); + + return value; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetScreensaverPreviewMode +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetScreensaverPreviewMode( const TInt aMode ) + { + RProperty::Set( KPSUidScreenSaver, KScreenSaverPreviewMode, aMode ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ScreensaverPreviewState +// Get preview state +// ----------------------------------------------------------------------------- +// +TScreenSaverPreviewState CScreensaverSharedDataI::ScreensaverPreviewState() const + { + TInt state = EScreenSaverPreviewNone; + RProperty::Get( KPSUidScreenSaver, KScreenSaverPreviewState, state ); + + return ( TScreenSaverPreviewState ) state; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetScreensaverPreviewState +// Report preview state +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetScreensaverPreviewState( + const TScreenSaverPreviewState aState ) + { + RProperty::Set( KPSUidScreenSaver, KScreenSaverPreviewState, aState ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsKeyguardOn +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::IsKeyguardOn() const + { + // Report preview state + TInt state = 0; + + RProperty::Get( KPSUidAvkonDomain, KAknKeyguardStatus, state ); + + return ( state != 0 ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsUsePowerSaveMode +// ----------------------------------------------------------------------------- +TBool CScreensaverSharedDataI::IsUsePowerSaveMode() const + { + TInt state = 0; + + // Check if power save mode has been denied + RProperty::Get( KPSUidScreenSaver, KScreenSaverNoPowerSaveMode, state ); + + return ( state != 1 ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SystemStartupComplete +// Returns whether system startup has been completed +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::IsSystemStartupComplete() + { + if ( iStartupComplete == EFalse ) + { + TInt startupState = -1; + RProperty::Get( KPSUidStartup, KPSGlobalSystemState, startupState ); + + switch (startupState) + { + case ESwStateNormalRfOn: + case ESwStateNormalRfOff: + case ESwStateNormalBTSap: + iStartupComplete = ETrue; + break; + default: + break; + } + } + return iStartupComplete; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::DefaultScreensaverType +// ----------------------------------------------------------------------------- +// +TDisplayObjectType CScreensaverSharedDataI::DefaultScreensaverType() const + { + return iDefaultType; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::UnreadMessagesNumber +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::UnreadMessagesNumber() + { + TInt numberOfUnreadMessages = 0; + // Check how many unread messages there are in the In-box. + if( !iInboxFolder ) + { + TRAPD( err, ConnectToInboxL() ); + if (err != KErrNone) + { + return numberOfUnreadMessages; + } + } + + const TInt itemCount = iInboxFolder->Count(); + for ( TInt index = 0; index < itemCount; index++ ) + { + const TMsvEntry entry = ( *iInboxFolder )[index]; + if ( entry.iType.iUid == KUidMsvMessageEntryValue && entry.Unread()) + { + if( entry.Visible() ) + { + numberOfUnreadMessages++; + } + } + } + return numberOfUnreadMessages; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ProfileName +// ----------------------------------------------------------------------------- +const TDesC& CScreensaverSharedDataI::ProfileName() + { + // Get the active profile name from profile engine, not from + // shareddata ( may not be up-to-date after phone restart ) + + if ( ConnectToActiveProfile() ) + { + // Ectract profile name + const MProfileName& profileName = iActiveProfile->ProfileName(); + + return ( profileName.Name() ); + } + + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ActiveProfile +// ----------------------------------------------------------------------------- +TInt CScreensaverSharedDataI::ActiveProfile() + { + // Return the current profile Id + TInt profileId = 0; + + // Connect to profile engine + if ( ConnectToProfileEngine() ) + { + profileId = iProfileEngine->ActiveProfileId(); + } + + return profileId; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsHaveNewEmail +// ----------------------------------------------------------------------------- +TBool CScreensaverSharedDataI::IsHaveNewEmail() const + { + TInt state = 0; + // Check the new email state from PubSub + TInt error = RProperty::Get( + KPSUidCoreApplicationUIs, KCoreAppUIsNewEmailStatus, state); + + SCRLOGGER_WRITEF(_L("SCR: QueryNewEmail state=%d error=%d"), state, error); + + if ( ( error == KErrNone ) && ( state == ECoreAppUIsNewEmail ) ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsHaveNewVoicemail +// ----------------------------------------------------------------------------- +TBool CScreensaverSharedDataI::IsHaveNewVoicemail() const + { + // Show the indicator, if either line has messages waiting + if ( ( VoiceMailCount( KCtsyMessageWaitingVoiceMailCount ) > 0 ) + || ( VoiceMailCount( KCtsyMessageWaitingAuxLineCount ) > 0 ) ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsHaveNewInstantMessages +// ----------------------------------------------------------------------------- +TBool CScreensaverSharedDataI::IsHaveNewInstantMessages() const + { + TInt showValue = 0; + TInt error = RProperty::Get( + KPSUidCoreApplicationUIs, KCoreAppUIsUipInd, showValue); + + SCRLOGGER_WRITEF(_L("SCR: QueryNewInstantMessages state=%d error=%d"), + showValue, error); + + return ( ( error == KErrNone ) && ( showValue == ECoreAppUIsShow ) ); + } + + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsSilentMode +// ----------------------------------------------------------------------------- +TBool CScreensaverSharedDataI::IsSilentMode() + { + // Connect to active profile, and return silent mode status + if (ConnectToActiveProfile()) + { + return iActiveProfile->IsSilent(); + } + + return EFalse; + } + + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsVibraMode +// ----------------------------------------------------------------------------- +TBool CScreensaverSharedDataI::IsVibraMode() + { + // Get the active profile name from profile engine, not from + // shareddata (may not be up-to-date after phone restart) + if (ConnectToActiveProfile()) + { + // Extract profile vibra setting + return iActiveProfile->ProfileTones().ToneSettings().iVibratingAlert; + } + + return EFalse; + } + +// --------------------------------------------------------------------------- +// CScreensaverSharedDataI::IsOngoingCall() +// --------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::IsOngoingCall() + { + TInt state = EPSCTsyCallStateUninitialized; + // Check the call state from PubSub + RProperty::Get( KPSUidCtsyCallInformation, KCTsyCallState, state ); + + return ( state != EPSCTsyCallStateNone && + state != EPSCTsyCallStateUninitialized ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::HandleSessionEventL +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) + { + switch (aEvent) + { + case EMsvEntriesChanged: + AppUi()->ScreensaverView()->UpdateAndRefresh(); + break; + case EMsvCloseSession: + case EMsvServerTerminated: + delete iInboxFolder; + iInboxFolder = NULL; + delete iMsvSession; + iMsvSession = NULL; + break; + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::HandleEntryEventL +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::HandleEntryEventL(TMsvEntryEvent /*aEvent */, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) + { + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ScreensaverRepository +// ----------------------------------------------------------------------------- +// +CRepository* CScreensaverSharedDataI::ScreensaverRepository() const + { + return iScreensaverRepository; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::CScreensaverSharedDataI +// ----------------------------------------------------------------------------- +// +CScreensaverSharedDataI::CScreensaverSharedDataI() + { + iStartupComplete = EFalse; + } + + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ConstructL +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::ConstructL() + { + GetDefaultType(); + ConnectToSSCRL(); + ConnectToPslnSettingCRL(); + ConnectToCommonTsyCRL(); + + // Define and publish "Screensaver is on" property + // Read: pass, Write: Screensaver only + DefineScreensaverProperties( KScreenSaverOn, KSSPolicyWriteSSOnly ); + + // Define and publish "Screensaver activated from idle" property + // Read: pass, Write: Screensaver only + DefineScreensaverProperties( KScreenSaverActivatedFromIdle, KSSPolicyWriteSSOnly ); + + // Define and attach "allow screensaver property" + // Read: Readuserdata, Write: writeuserdata + DefineScreensaverProperties( KScreenSaverAllowScreenSaver, KSSPolicyWriteUserData ); + + // Define and attach "screensaver preview property" + // Read: Readuserdata, Write: writeuserdata + DefineScreensaverProperties( KScreenSaverPreviewMode, KSSPolicyWriteUserData ); + + // Define and attach "screensaver preview state property" + // Read: Readuserdata, Write: writeuserdata + DefineScreensaverProperties( KScreenSaverPreviewState, KSSPolicyWriteUserData ); + + // Define and initialize "current plugin settings changed" property + // Read: pass, Write: pass + DefineScreensaverProperties( KScreenSaverPluginSettingsChanged, KSSPolicyPass ); + + // Define and initialize "no power save mode" property + // Read: pass, Write: pass + DefineScreensaverProperties( KScreenSaverNoPowerSaveMode, KSSPolicyPass ); + + DefineScreensaverProperties( KScreenSaverActivate, KSSPolicyWriteUserData ); + + iDisplayChange = EFalse; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ConnectToSSCR +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::ConnectToSSCRL() + { + iScreensaverRepository = CRepository::NewL( KCRUidScreenSaver ); + + if( iScreensaverRepository ) + iScreensaverRepositoryWatcher = CScreensaverRepositoryWatcher::NewL( + KCRUidScreenSaver, + TCallBack( HandleDisplayObjChanged, this ), + iScreensaverRepository ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ConnectToPslnSettingCRL +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::ConnectToPslnSettingCRL() + { + TRAPD(ret, iSettingsRepository = CRepository::NewL(KCRUidSecuritySettings)); + + if( ret == KErrNone ) + { + iSettingsRepositoryWatcher = CScreensaverRepositoryWatcher::NewL( + KCRUidPersonalizationSettings, + KSettingsAutomaticKeyguardTime, + CCenRepNotifyHandler::EIntKey, + TCallBack(HandleTimeoutChanged, this), + iSettingsRepository); + } + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ConnectToCommonTsyCRL +// Connects to common tsy central repository +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::ConnectToCommonTsyCRL() + { + iCTsyRepository = CRepository::NewL( KCRUidCtsyMessageWaitingIndicator ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ConnectToInboxL +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::ConnectToInboxL() + { + if (!iMsvSession) + { + iMsvSession = CMsvSession::OpenSyncL( *this ); + } + iInboxFolder = iMsvSession->GetEntryL( KMsvGlobalInBoxIndexEntryId ); + + TMsvSelectionOrdering ordering = iInboxFolder->SortType(); + ordering.SetShowInvisibleEntries( EFalse ); + iInboxFolder->SetSortTypeL( ordering ); + + iInboxFolder->AddObserverL( *this ); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ConnectToProfileEngine +// Connect to Profile engine. Returns ETrue if successfully connected +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::ConnectToProfileEngine() + { + // Check if already connected + if ( iProfileEngine ) + { + // Done + return ETrue; + } + // The member variable is also used to indicate successful + // connection, hence a pointer instead of just RSystemAgent + TRAPD( err, ( iProfileEngine = CreateProfileEngineL() ) ); + + if ( err != KErrNone ) + { + // Something went wrong on allocation + iProfileEngine = NULL; + return EFalse; + } + + // Successfully connected + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ClearPreviewFlag +// Connect to current active Profile. Returns ETrue if successfully connected +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::ConnectToActiveProfile() + { + InvalidateActiveProfile(); + + if ( ConnectToProfileEngine() ) + { + TRAPD( err, ( iActiveProfile = iProfileEngine->ActiveProfileL() ) ); + if ( ( err == KErrNone ) && ( iActiveProfile ) ) + { + return ETrue; + } + } + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::DefineScreensaverProperties +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::DefineScreensaverProperties( + TUint32 aKey, const TSecurityPolicy& aWritePolicy ) + { + RProperty::Define( + KPSUidScreenSaver, + aKey, + RProperty::EInt, + KSSPolicyPass, + aWritePolicy ); + + RProperty::Set( KPSUidScreenSaver, aKey, 0); + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::HandleTimeoutChanged +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::HandleTimeoutChanged(TAny* aPtr) + { + STATIC_CAST(CScreensaverSharedDataI*, aPtr)->ResetInactivityTimeout(); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::ResetInactivityTimeout +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::ResetInactivityTimeout() + { + AppUi()->Model().ResetInactivityTimeout(); + } + + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::HandleDisplayObjChanged +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::HandleDisplayObjChanged(TAny* aPtr) + { + CScreensaverSharedDataI* self = STATIC_CAST(CScreensaverSharedDataI*, aPtr); + + self->SetDisplayObjChanged( ETrue ); + + self->AppUi()->ScreensaverView()->SetDisplayObject( self->DisplayObjectType() ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::GetDefaultType +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::GetDefaultType() + { +/* +default type is hardcoded, so commented out below code. +Remove the comment when default type is read from CenRep. + //Store the default screensaver for this device + TBuf<16> screensaverName; + + TInt error = GetDefaultTypeString( screensaverName ); + + if ( KErrNone == error ) + { + if ( screensaverName.CompareF( KScreenSaverTypeNone ) == 0 ) + { + iDefaultType = EDisplayNone; + } + else if ( screensaverName.CompareF( KScreenSaverTypeText ) == 0 ) + { + iDefaultType = EDisplayText; + } + else //go back to the "old" option, ie - Date type + { + iDefaultType = EDisplayTime; + } + } +*/ + +#ifdef USE_DATE_AND_TEXT + iDefaultType = EDisplayTime; +#else + iDefaultType = EDisplayNone; +#endif + + + + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::GetDefaultTypeString +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::GetDefaultTypeString( TDes& DefaultScreenSaver ) + { + CRepository* skinsRepository = NULL; + TRAP_IGNORE( skinsRepository = CRepository::NewL( KCRUidPersonalisation ) ); + + TInt error = skinsRepository->Get( KPslnSystemDefaultScreenSaver, + DefaultScreenSaver ); + + delete skinsRepository; + + return error; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::VoiceMailCount +// ----------------------------------------------------------------------------- +// +TInt CScreensaverSharedDataI::VoiceMailCount( const TUint32 aKey ) const + { + TInt line(0); + TInt error = KErrNone; + + error = iCTsyRepository->Get( aKey, line ); + + if( error != KErrNone ) + { + line = 0; + } + + return line; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::InvalidateActiveProfile +// Invalidate the cached active profile, so that next call to ConnectToActiveProfile +// will use the newest profile data (in case it has changed) +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::InvalidateActiveProfile() + { + if (iActiveProfile) + { + iActiveProfile->Release(); + iActiveProfile = NULL; + } + } +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::SetDisplayObjChanged +// ----------------------------------------------------------------------------- +// +void CScreensaverSharedDataI::SetDisplayObjChanged( TBool aChanged ) + { + iDisplayChange = aChanged; + } +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::GetDisplayObjChanged +// ----------------------------------------------------------------------------- +// +TBool CScreensaverSharedDataI::GetDisplayObjChanged()const + { + return iDisplayChange; + } + +// ----------------------------------------------------------------------------- +// CScreensaverSharedDataI::AppUi +// ----------------------------------------------------------------------------- +// +CScreensaverAppUi *CScreensaverSharedDataI::AppUi() const + { + return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() ); + } +// End of file.