--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensavershareddatai.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,918 @@
+/*
+* 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 <msvids.h>
+#include <MProfileName.h> // Profile API, not yet included in .h
+#include <MProfileTones.h>
+#include <TProfileToneSettings.h>
+#include <centralrepository.h>
+#include <coreapplicationuisdomainpskeys.h> // KCoreAppUIsUipInd, KLightsVTForcedLightsOn
+#include <activeidle2domainpskeys.h> // KPSUidAiInformation
+#include <SettingsInternalCRKeys.h> // KSettingsScreenSaverPeriod
+#include <LogsDomainCRKeys.h> // KLogsNewMissedCalls
+#include <ScreensaverInternalCRKeys.h>
+#include <AvkonInternalCRKeys.h> // KAknNewContactsNoteActive
+#include <avkondomainpskeys.h> // KAknKeyguardStatus
+#include <ctsydomaincrkeys.h> // Message (voice) waiting status
+#include <startupdomainpskeys.h> // KPSGlobalSystemState
+#include <AknSkinsInternalCRKeys.h>
+#include <MProfileEngine.h> // Profile engine API
+#include <MProfile.h>
+#include <NcnListDomainCRKeys.h>
+
+#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(KSettingsScreenSaverPeriod, 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( KNcnVoiceMailCountInLine1 ) > 0 )
+ || ( VoiceMailCount( KNcnVoiceMailCountInLine2 ) > 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::HandleSessionEventL
+// -----------------------------------------------------------------------------
+//
+void CScreensaverSharedDataI::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+ {
+ switch (aEvent)
+ {
+ 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 );
+ }
+
+// -----------------------------------------------------------------------------
+// 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(KCRUidPersonalizationSettings));
+
+ if( ret == KErrNone )
+ {
+ iSettingsRepositoryWatcher = CScreensaverRepositoryWatcher::NewL(
+ KCRUidPersonalizationSettings,
+ KSettingsScreenSaverPeriod,
+ 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->AppUi()->ScreensaverView()->SetDisplayObject( self->DisplayObjectType() );
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataI::GetDefaultType
+// -----------------------------------------------------------------------------
+//
+void CScreensaverSharedDataI::GetDefaultType()
+ {
+ //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;
+ }
+ }
+
+ iDefaultType = EDisplayTime;
+ }
+
+// -----------------------------------------------------------------------------
+// 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::AppUi
+// -----------------------------------------------------------------------------
+//
+CScreensaverAppUi *CScreensaverSharedDataI::AppUi() const
+ {
+ return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() );
+ }
+// End of file.