src/screensavershareddatai.cpp
changeset 14 8a173132b0aa
parent 2 058b1fc1663a
equal deleted inserted replaced
2:058b1fc1663a 14:8a173132b0aa
     1 /*
       
     2 * Copyright (c) 2003-2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   Implementation for screensaver shared data connections.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include <msvids.h>
       
    21 #include <MProfileName.h>  // Profile API, not yet included in .h
       
    22 #include <MProfileTones.h>
       
    23 #include <TProfileToneSettings.h>
       
    24 #include <centralrepository.h>
       
    25 #include <coreapplicationuisdomainpskeys.h>  // KCoreAppUIsUipInd, KLightsVTForcedLightsOn
       
    26 #include <activeidle2domainpskeys.h>         // KPSUidAiInformation
       
    27 #include <settingsinternalcrkeys.h>          // KSettingsScreenSaverPeriod
       
    28 #include <LogsDomainCRKeys.h>                // KLogsNewMissedCalls
       
    29 #include <ScreensaverInternalCRKeys.h>
       
    30 #include <AvkonInternalCRKeys.h>             // KAknNewContactsNoteActive
       
    31 #include <avkondomainpskeys.h>               // KAknKeyguardStatus
       
    32 #include <ctsydomaincrkeys.h>                // Message (voice) waiting status
       
    33 #include <startupdomainpskeys.h>             // KPSGlobalSystemState
       
    34 #include <AknSkinsInternalCRKeys.h>
       
    35 #include <MProfileEngine.h> // Profile engine API
       
    36 #include <MProfile.h>
       
    37 #include <NcnListDomainCRKeys.h>
       
    38 
       
    39 #include "screensaverappui.h"
       
    40 #include "screensaverctrlmovingtext.h"
       
    41 #include "screensaverengine.h"
       
    42 #include "screensavershareddatai.h"
       
    43 #include "ScreensaverInternalPSKeys.h"
       
    44 #include "screensaverutility.h"
       
    45 #include "screensaverrepositorywatcher.h"
       
    46 #include "screensaversubscriber.h"
       
    47 
       
    48 const TInt KTimeoutDefault = 15;        // seconds (also in GS)
       
    49 const TInt KTimeoutMin = 5;             // minimum timeout in seconds (also in GS)
       
    50 
       
    51 // Screensaver "On/Off" status values
       
    52 const TInt KScreensaverOff = 0;
       
    53 const TInt KScreensaverOn = 1;
       
    54 
       
    55 // Screensaver activated from idle status values
       
    56 const TInt KScreensaverNotFromIdle = 0;
       
    57 const TInt KScreensaverStartedFromIdle = 1;
       
    58 
       
    59 // Screen saver text type.
       
    60 _LIT( KScreenSaverTypeText, "Text" );
       
    61 //Screensaver "None" (Sleep mode)
       
    62 _LIT( KScreenSaverTypeNone, "None" );
       
    63 
       
    64 // Define security policies for Screensavers property keys
       
    65 _LIT_SECURITY_POLICY_PASS(KSSPolicyPass);
       
    66 _LIT_SECURITY_POLICY_C1(KSSPolicyWriteUserData, ECapabilityWriteUserData);
       
    67 _LIT_SECURITY_POLICY_S0(KSSPolicyWriteSSOnly, 0x100056cf);
       
    68 
       
    69 //
       
    70 // CScreensaverSharedDataI
       
    71 //
       
    72 // -----------------------------------------------------------------------------
       
    73 // CScreensaverSharedDataI::NewL
       
    74 // -----------------------------------------------------------------------------
       
    75 //
       
    76 CScreensaverSharedDataI* CScreensaverSharedDataI::NewL()
       
    77     {
       
    78     CScreensaverSharedDataI* self = new (ELeave) CScreensaverSharedDataI();
       
    79     CleanupStack::PushL(self);
       
    80     self->ConstructL();
       
    81     CleanupStack::Pop(); //self
       
    82     return self;
       
    83     }
       
    84 
       
    85 
       
    86 // -----------------------------------------------------------------------------
       
    87 // CScreensaverSharedDataI::~CScreensaverSharedDataI
       
    88 // -----------------------------------------------------------------------------
       
    89 //
       
    90 CScreensaverSharedDataI::~CScreensaverSharedDataI()
       
    91     {
       
    92     // Release the active profile resources
       
    93     InvalidateActiveProfile();
       
    94 
       
    95     // Release the profile engine
       
    96     if (iProfileEngine)
       
    97         {
       
    98         // No need to delete pointer, just release resources
       
    99         iProfileEngine->Release();
       
   100         }
       
   101     
       
   102     delete iScreensaverRepositoryWatcher;
       
   103     delete iScreensaverRepository;
       
   104     delete iSettingsRepositoryWatcher;
       
   105     delete iSettingsRepository;
       
   106     delete iCTsyRepository;
       
   107     delete iInboxFolder;
       
   108     delete iMsvSession;
       
   109     }
       
   110 
       
   111 // -----------------------------------------------------------------------------
       
   112 // CScreensaverSharedDataI::DisplayObjectType
       
   113 // -----------------------------------------------------------------------------
       
   114 //
       
   115 TDisplayObjectType CScreensaverSharedDataI::DisplayObjectType() const
       
   116     {
       
   117     TInt type = 0;
       
   118     
       
   119     if (iScreensaverRepository)
       
   120         {
       
   121         iScreensaverRepository->Get( KScreenSaverObject, type );
       
   122         }
       
   123     
       
   124     return ( TDisplayObjectType )type;
       
   125     }
       
   126 
       
   127 // -----------------------------------------------------------------------------
       
   128 // CScreensaverSharedDataI::SetDisplayObjectType
       
   129 // -----------------------------------------------------------------------------
       
   130 //
       
   131 void CScreensaverSharedDataI::SetDisplayObjectType( const TDisplayObjectType aType )
       
   132     {
       
   133     if( iScreensaverRepository )
       
   134         {
       
   135         iScreensaverRepository->Set(KScreenSaverObject, aType);
       
   136         }
       
   137     }
       
   138 
       
   139 // -----------------------------------------------------------------------------
       
   140 // CScreensaverSharedDataI::GetDisplayObjectText
       
   141 // -----------------------------------------------------------------------------
       
   142 //
       
   143 void CScreensaverSharedDataI::GetDisplayObjectText( TDes& aDes ) const
       
   144     {
       
   145     CEikonEnv::Static()->ReadResource(aDes, R_SCREEN_SAVER_TEXT);
       
   146     
       
   147     if ( iScreensaverRepository )
       
   148         {
       
   149         iScreensaverRepository->Get( KScreenSaverText, aDes );
       
   150         }
       
   151     }
       
   152 
       
   153 // -----------------------------------------------------------------------------
       
   154 // CScreensaverSharedDataI::PluginName
       
   155 // -----------------------------------------------------------------------------
       
   156 //
       
   157 void CScreensaverSharedDataI::GetPluginName( TFileName& aFileName ) const
       
   158     {
       
   159     if ( iScreensaverRepository )
       
   160         {
       
   161         iScreensaverRepository->Get( KScreenSaverPluginName, aFileName );
       
   162         }
       
   163     }
       
   164 
       
   165 // -----------------------------------------------------------------------------
       
   166 // CScreensaverSharedDataI::ColorInversionUsed
       
   167 // -----------------------------------------------------------------------------
       
   168 //
       
   169 TBool CScreensaverSharedDataI::IsInvertedColors() const
       
   170     {
       
   171     TInt colorInversionUsed(0);
       
   172     
       
   173     if( iScreensaverRepository )
       
   174         {
       
   175         iScreensaverRepository->Get( KScreenSaverInvertedColors, colorInversionUsed );
       
   176         }
       
   177 
       
   178     return ( colorInversionUsed != 0 );
       
   179     }
       
   180 
       
   181 // -----------------------------------------------------------------------------
       
   182 // CScreensaverSharedDataI::ScreensaverTimeout
       
   183 // -----------------------------------------------------------------------------
       
   184 //
       
   185 TInt CScreensaverSharedDataI::ScreensaverTimeout() const
       
   186     {
       
   187     TInt timeout = KTimeoutDefault;
       
   188 
       
   189     if (iSettingsRepository)
       
   190         {
       
   191         iSettingsRepository->Get(KSettingsScreenSaverPeriod, timeout);
       
   192         }
       
   193     // No less than minimum timeout
       
   194     // Old backed up minutes 1-4 will cause default timeout after
       
   195     // being restored to new sw using seconds
       
   196     if (timeout < KTimeoutMin)
       
   197         {
       
   198         return KTimeoutDefault;
       
   199         }
       
   200 
       
   201     return timeout;
       
   202     }
       
   203 
       
   204 // -----------------------------------------------------------------------------
       
   205 // CScreensaverSharedDataI::IsNCNActive
       
   206 // -----------------------------------------------------------------------------
       
   207 //
       
   208 TBool CScreensaverSharedDataI::IsNCNActive() const
       
   209     {
       
   210     // Setting the flag here is also needed, because Screensaver should not
       
   211     // display new calls when Ncn note has been cancelled (even if the missed
       
   212     // calls count is still nonzero).
       
   213     // Also, when the phone is (re)started, and there are missed calls,
       
   214     // Ncn will pop a note, This is the only way Screensaver knows about that.
       
   215     
       
   216     CRepository* avkonRepository = NULL;
       
   217     
       
   218     TRAP_IGNORE( avkonRepository = CRepository::NewL( KCRUidAvkon ) );
       
   219 
       
   220     TInt value = 0;
       
   221 
       
   222     if ( avkonRepository )
       
   223         {
       
   224         avkonRepository->Get( KAknNewContactsNoteActive, value );
       
   225         }
       
   226 
       
   227     delete avkonRepository;
       
   228     
       
   229     return ( value != 0 );
       
   230     }
       
   231 
       
   232 // -----------------------------------------------------------------------------
       
   233 // CScreensaverSharedDataI::NewMissedCalls
       
   234 // -----------------------------------------------------------------------------
       
   235 //
       
   236 TInt CScreensaverSharedDataI::NewMissedCalls() const
       
   237     {
       
   238     CRepository* logsRepository = NULL;
       
   239     
       
   240     TRAP_IGNORE( logsRepository = CRepository::NewL( KCRUidLogs ) );
       
   241     
       
   242     TInt value = 0;
       
   243     
       
   244     if ( logsRepository )
       
   245         {
       
   246         logsRepository->Get( KLogsNewMissedCalls, value );
       
   247         }
       
   248     
       
   249     delete logsRepository;
       
   250     
       
   251     return value;
       
   252     }
       
   253 
       
   254 // -----------------------------------------------------------------------------
       
   255 // CScreensaverSharedDataI::SetSSForcedLightsOn
       
   256 // -----------------------------------------------------------------------------
       
   257 //
       
   258 void CScreensaverSharedDataI::SetSSForcedLightsOn(TInt aSecs)
       
   259     {
       
   260     SCRLOGGER_WRITEF(_L("SCR: RequestLights(%d)"), aSecs);
       
   261 
       
   262     RProperty::Set( KPSUidCoreApplicationUIs, KLightsSSForcedLightsOn, aSecs );
       
   263     }
       
   264 
       
   265 // -----------------------------------------------------------------------------
       
   266 // CScreensaverSharedDataI::SetScreensaverStatus
       
   267 // Indicate whether Screensaver is active or not
       
   268 // -----------------------------------------------------------------------------
       
   269 //
       
   270 void CScreensaverSharedDataI::SetScreensaverStatus( TBool aOn /* = ETrue */ )
       
   271     {
       
   272     //Check if the value is already updated. If so, setting the value again
       
   273     //will cause unnecessary call backs to any subscribers of this property
       
   274     if ( aOn )
       
   275         {
       
   276         RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverOn );
       
   277         //else - no need to re-apply the same value
       
   278         }
       
   279     else //aOn is false
       
   280         {
       
   281         RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverOff );
       
   282         //else - no need to re-apply the same value
       
   283         
       
   284         //if stop from idle, change the status
       
   285         RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverNotFromIdle);
       
   286         }
       
   287     }
       
   288 
       
   289 // -----------------------------------------------------------------------------
       
   290 // CScreensaverSharedDataI::SetSSStartedFromIdleStatus
       
   291 // Set "Screensaver started from Idle" status
       
   292 // -----------------------------------------------------------------------------
       
   293 //
       
   294 void CScreensaverSharedDataI::SetSSStartedFromIdleStatus()
       
   295     {
       
   296     TInt idleState = EPSAiBackground;
       
   297     RProperty::Get(KPSUidAiInformation, KActiveIdleState, idleState);
       
   298 
       
   299     if (idleState == EPSAiBackground)
       
   300         {
       
   301         RProperty::Set( KPSUidScreenSaver, KScreenSaverActivatedFromIdle, KScreensaverNotFromIdle );
       
   302         }
       
   303     else
       
   304         {
       
   305         RProperty::Set(  KPSUidScreenSaver, KScreenSaverActivatedFromIdle, KScreensaverStartedFromIdle );
       
   306         }
       
   307     }
       
   308 
       
   309 // -----------------------------------------------------------------------------
       
   310 // CScreensaverSharedDataI::IsScreenSaverAllowed
       
   311 // Set "Screensaver started from Idle" status
       
   312 // -----------------------------------------------------------------------------
       
   313 //
       
   314 TInt CScreensaverSharedDataI::IsScreenSaverAllowed() const
       
   315     {
       
   316     TInt value = 0;
       
   317     
       
   318     RProperty::Get( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, value );
       
   319     
       
   320     return value;
       
   321     }
       
   322 
       
   323 TInt CScreensaverSharedDataI::ScreensaverPreviewMode() const
       
   324     {
       
   325     TInt value = 0;
       
   326     
       
   327     RProperty::Get( KPSUidScreenSaver, KScreenSaverPreviewMode, value );
       
   328     
       
   329     return value;
       
   330     }
       
   331 
       
   332 // -----------------------------------------------------------------------------
       
   333 // CScreensaverSharedDataI::SetScreensaverPreviewMode
       
   334 // -----------------------------------------------------------------------------
       
   335 //
       
   336 void CScreensaverSharedDataI::SetScreensaverPreviewMode( const TInt aMode )
       
   337     {
       
   338     RProperty::Set( KPSUidScreenSaver, KScreenSaverPreviewMode, aMode );
       
   339     }
       
   340 
       
   341 // -----------------------------------------------------------------------------
       
   342 // CScreensaverSharedDataI::ScreensaverPreviewState
       
   343 // Get preview state
       
   344 // -----------------------------------------------------------------------------
       
   345 //
       
   346 TScreenSaverPreviewState CScreensaverSharedDataI::ScreensaverPreviewState() const
       
   347     {
       
   348     TInt state = EScreenSaverPreviewNone;
       
   349     RProperty::Get( KPSUidScreenSaver, KScreenSaverPreviewState, state );
       
   350 
       
   351     return ( TScreenSaverPreviewState ) state;
       
   352     }
       
   353 
       
   354 // -----------------------------------------------------------------------------
       
   355 // CScreensaverSharedDataI::SetScreensaverPreviewState
       
   356 // Report preview state
       
   357 // -----------------------------------------------------------------------------
       
   358 //
       
   359 void CScreensaverSharedDataI::SetScreensaverPreviewState(
       
   360     const TScreenSaverPreviewState aState )
       
   361     {
       
   362     RProperty::Set( KPSUidScreenSaver, KScreenSaverPreviewState, aState );
       
   363     }
       
   364 
       
   365 // -----------------------------------------------------------------------------
       
   366 // CScreensaverSharedDataI::IsKeyguardOn
       
   367 // -----------------------------------------------------------------------------
       
   368 //
       
   369 TBool CScreensaverSharedDataI::IsKeyguardOn() const
       
   370     {
       
   371     // Report preview state
       
   372     TInt state = 0;
       
   373     
       
   374     RProperty::Get( KPSUidAvkonDomain, KAknKeyguardStatus, state );
       
   375     
       
   376     return ( state != 0 );
       
   377     }
       
   378 
       
   379 // -----------------------------------------------------------------------------
       
   380 // CScreensaverSharedDataI::IsUsePowerSaveMode
       
   381 // -----------------------------------------------------------------------------
       
   382 TBool CScreensaverSharedDataI::IsUsePowerSaveMode() const
       
   383     {
       
   384     TInt state = 0;
       
   385 
       
   386     // Check if power save mode has been denied
       
   387     RProperty::Get( KPSUidScreenSaver, KScreenSaverNoPowerSaveMode, state );
       
   388 
       
   389     return ( state != 1 );
       
   390     }
       
   391 
       
   392 // -----------------------------------------------------------------------------
       
   393 // CScreensaverSharedDataI::SystemStartupComplete
       
   394 // Returns whether system startup has been completed
       
   395 // -----------------------------------------------------------------------------
       
   396 //
       
   397 TBool CScreensaverSharedDataI::IsSystemStartupComplete()
       
   398     {
       
   399     if ( iStartupComplete == EFalse )
       
   400         {
       
   401         TInt startupState = -1;
       
   402         RProperty::Get( KPSUidStartup, KPSGlobalSystemState, startupState );
       
   403 
       
   404         switch (startupState)
       
   405             {
       
   406         case ESwStateNormalRfOn:
       
   407         case ESwStateNormalRfOff:
       
   408         case ESwStateNormalBTSap:
       
   409             iStartupComplete = ETrue;
       
   410             break;
       
   411         default:
       
   412             break;
       
   413             }
       
   414         }
       
   415     return iStartupComplete;
       
   416     }
       
   417 
       
   418 // -----------------------------------------------------------------------------
       
   419 // CScreensaverSharedDataI::DefaultScreensaverType
       
   420 // -----------------------------------------------------------------------------
       
   421 //
       
   422 TDisplayObjectType CScreensaverSharedDataI::DefaultScreensaverType() const
       
   423     {
       
   424     return iDefaultType;
       
   425     }
       
   426 
       
   427 // -----------------------------------------------------------------------------
       
   428 // CScreensaverSharedDataI::UnreadMessagesNumber
       
   429 // -----------------------------------------------------------------------------
       
   430 //
       
   431 TInt CScreensaverSharedDataI::UnreadMessagesNumber()
       
   432     {
       
   433     TInt numberOfUnreadMessages = 0;
       
   434     // Check how many unread messages there are in the In-box.
       
   435     if( !iInboxFolder )
       
   436         {
       
   437         TRAPD( err, ConnectToInboxL() );
       
   438         if (err != KErrNone)
       
   439             {
       
   440             return numberOfUnreadMessages;
       
   441             }
       
   442         }
       
   443 
       
   444     const TInt itemCount = iInboxFolder->Count();
       
   445     for ( TInt index = 0; index < itemCount; index++ )
       
   446         {
       
   447         const TMsvEntry entry = ( *iInboxFolder )[index];
       
   448         if ( entry.iType.iUid == KUidMsvMessageEntryValue && entry.Unread())
       
   449             {
       
   450             if( entry.Visible() )
       
   451                 {
       
   452                 numberOfUnreadMessages++;
       
   453                 }
       
   454             }
       
   455         }
       
   456     return numberOfUnreadMessages;
       
   457     }
       
   458 
       
   459 // -----------------------------------------------------------------------------
       
   460 // CScreensaverSharedDataI::ProfileName
       
   461 // -----------------------------------------------------------------------------
       
   462 const TDesC& CScreensaverSharedDataI::ProfileName()
       
   463     {
       
   464     // Get the active profile name from profile engine, not from
       
   465     // shareddata ( may not be up-to-date after phone restart )
       
   466 
       
   467     if ( ConnectToActiveProfile() )
       
   468         {
       
   469         // Ectract profile name
       
   470         const MProfileName& profileName = iActiveProfile->ProfileName();
       
   471 
       
   472         return ( profileName.Name() );
       
   473         }
       
   474 
       
   475     return KNullDesC;
       
   476     }
       
   477 
       
   478 // -----------------------------------------------------------------------------
       
   479 // CScreensaverSharedDataI::ActiveProfile
       
   480 // -----------------------------------------------------------------------------
       
   481 TInt CScreensaverSharedDataI::ActiveProfile()
       
   482     {
       
   483     // Return the current profile Id
       
   484     TInt profileId = 0;
       
   485 
       
   486     // Connect to profile engine
       
   487     if ( ConnectToProfileEngine() )
       
   488         {
       
   489         profileId = iProfileEngine->ActiveProfileId();
       
   490         }
       
   491 
       
   492     return profileId;
       
   493     }
       
   494 
       
   495 // -----------------------------------------------------------------------------
       
   496 // CScreensaverSharedDataI::IsHaveNewEmail
       
   497 // -----------------------------------------------------------------------------
       
   498 TBool CScreensaverSharedDataI::IsHaveNewEmail() const
       
   499     {
       
   500     TInt state = 0;
       
   501     // Check the new email state from PubSub
       
   502     TInt error = RProperty::Get(
       
   503         KPSUidCoreApplicationUIs, KCoreAppUIsNewEmailStatus, state);
       
   504 
       
   505     SCRLOGGER_WRITEF(_L("SCR: QueryNewEmail state=%d error=%d"), state, error);
       
   506 
       
   507     if ( ( error == KErrNone ) && ( state == ECoreAppUIsNewEmail ) )
       
   508         {
       
   509         return ETrue;
       
   510         }
       
   511     else
       
   512         {
       
   513         return EFalse;
       
   514         }
       
   515     }
       
   516 
       
   517 // -----------------------------------------------------------------------------
       
   518 // CScreensaverSharedDataI::IsHaveNewVoicemail
       
   519 // -----------------------------------------------------------------------------
       
   520 TBool CScreensaverSharedDataI::IsHaveNewVoicemail() const
       
   521     {
       
   522     // Show the indicator, if either line has messages waiting
       
   523     if ( ( VoiceMailCount( KNcnVoiceMailCountInLine1 ) > 0 ) 
       
   524         || ( VoiceMailCount( KNcnVoiceMailCountInLine2 ) > 0 ) )
       
   525         {
       
   526         return ETrue;
       
   527         }
       
   528     else
       
   529         {
       
   530         return EFalse;
       
   531         }
       
   532     }
       
   533 
       
   534 // -----------------------------------------------------------------------------
       
   535 // CScreensaverSharedDataI::IsHaveNewInstantMessages
       
   536 // -----------------------------------------------------------------------------
       
   537 TBool CScreensaverSharedDataI::IsHaveNewInstantMessages() const
       
   538     {
       
   539     TInt showValue = 0;
       
   540     TInt error = RProperty::Get(
       
   541         KPSUidCoreApplicationUIs, KCoreAppUIsUipInd, showValue);
       
   542 
       
   543     SCRLOGGER_WRITEF(_L("SCR: QueryNewInstantMessages state=%d error=%d"),
       
   544                      showValue, error);
       
   545 
       
   546     return ( ( error == KErrNone ) && ( showValue == ECoreAppUIsShow ) );
       
   547     }
       
   548 
       
   549 
       
   550 // -----------------------------------------------------------------------------
       
   551 // CScreensaverSharedDataI::IsSilentMode
       
   552 // -----------------------------------------------------------------------------
       
   553 TBool CScreensaverSharedDataI::IsSilentMode()
       
   554     {
       
   555     // Connect to active profile, and return silent mode status
       
   556     if (ConnectToActiveProfile())
       
   557         {
       
   558         return iActiveProfile->IsSilent();
       
   559         }
       
   560 
       
   561     return EFalse;
       
   562     }
       
   563 
       
   564 
       
   565 // -----------------------------------------------------------------------------
       
   566 // CScreensaverSharedDataI::IsVibraMode
       
   567 // -----------------------------------------------------------------------------
       
   568 TBool CScreensaverSharedDataI::IsVibraMode()
       
   569     {
       
   570     // Get the active profile name from profile engine, not from
       
   571     // shareddata (may not be up-to-date after phone restart)
       
   572     if (ConnectToActiveProfile())
       
   573         {
       
   574         // Extract profile vibra setting
       
   575          return iActiveProfile->ProfileTones().ToneSettings().iVibratingAlert;
       
   576         }
       
   577 
       
   578     return EFalse;
       
   579     }
       
   580 
       
   581 // -----------------------------------------------------------------------------
       
   582 // CScreensaverSharedDataI::HandleSessionEventL
       
   583 // -----------------------------------------------------------------------------
       
   584 //
       
   585 void CScreensaverSharedDataI::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
       
   586     {
       
   587     switch (aEvent)
       
   588         {
       
   589         case EMsvCloseSession:
       
   590         case EMsvServerTerminated:
       
   591             delete iInboxFolder;
       
   592             iInboxFolder = NULL;
       
   593             delete iMsvSession;
       
   594             iMsvSession = NULL;
       
   595             break;
       
   596         default:
       
   597             break;
       
   598         }
       
   599     }
       
   600 
       
   601 // -----------------------------------------------------------------------------
       
   602 // CScreensaverSharedDataI::HandleEntryEventL
       
   603 // -----------------------------------------------------------------------------
       
   604 //
       
   605 void CScreensaverSharedDataI::HandleEntryEventL(TMsvEntryEvent /*aEvent */, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
       
   606     {
       
   607     }
       
   608 
       
   609 // -----------------------------------------------------------------------------
       
   610 // CScreensaverSharedDataI::ScreensaverRepository
       
   611 // -----------------------------------------------------------------------------
       
   612 //
       
   613 CRepository* CScreensaverSharedDataI::ScreensaverRepository() const
       
   614     {
       
   615     return iScreensaverRepository;
       
   616     }
       
   617 
       
   618 // -----------------------------------------------------------------------------
       
   619 // CScreensaverSharedDataI::CScreensaverSharedDataI
       
   620 // -----------------------------------------------------------------------------
       
   621 //
       
   622 CScreensaverSharedDataI::CScreensaverSharedDataI()
       
   623     {
       
   624     iStartupComplete = EFalse;
       
   625     }
       
   626 
       
   627 
       
   628 // -----------------------------------------------------------------------------
       
   629 // CScreensaverSharedDataI::ConstructL
       
   630 // -----------------------------------------------------------------------------
       
   631 //
       
   632 void CScreensaverSharedDataI::ConstructL()
       
   633     {
       
   634     GetDefaultType();
       
   635     ConnectToSSCRL();
       
   636     ConnectToPslnSettingCRL();
       
   637     ConnectToCommonTsyCRL();
       
   638 
       
   639     // Define and publish "Screensaver is on" property
       
   640     // Read: pass, Write: Screensaver only
       
   641     DefineScreensaverProperties( KScreenSaverOn, KSSPolicyWriteSSOnly );
       
   642     
       
   643     // Define and publish "Screensaver activated from idle" property
       
   644     // Read: pass, Write: Screensaver only
       
   645     DefineScreensaverProperties( KScreenSaverActivatedFromIdle, KSSPolicyWriteSSOnly );
       
   646     
       
   647     // Define and attach "allow screensaver property"
       
   648     // Read: Readuserdata, Write: writeuserdata
       
   649     DefineScreensaverProperties( KScreenSaverAllowScreenSaver, KSSPolicyWriteUserData );
       
   650 
       
   651     // Define and attach "screensaver preview property"
       
   652     // Read: Readuserdata, Write: writeuserdata
       
   653     DefineScreensaverProperties( KScreenSaverPreviewMode, KSSPolicyWriteUserData );
       
   654     
       
   655     // Define and attach "screensaver preview state property"
       
   656     // Read: Readuserdata, Write: writeuserdata
       
   657     DefineScreensaverProperties( KScreenSaverPreviewState, KSSPolicyWriteUserData );
       
   658 
       
   659     // Define and initialize "current plugin settings changed" property
       
   660     // Read: pass, Write: pass
       
   661     DefineScreensaverProperties( KScreenSaverPluginSettingsChanged, KSSPolicyPass );
       
   662 
       
   663     // Define and initialize "no power save mode" property
       
   664     // Read: pass, Write: pass
       
   665     DefineScreensaverProperties( KScreenSaverNoPowerSaveMode, KSSPolicyPass );
       
   666     }
       
   667 
       
   668 // -----------------------------------------------------------------------------
       
   669 // CScreensaverSharedDataI::ConnectToSSCR
       
   670 // -----------------------------------------------------------------------------
       
   671 //
       
   672 void CScreensaverSharedDataI::ConnectToSSCRL()
       
   673     {
       
   674     iScreensaverRepository = CRepository::NewL( KCRUidScreenSaver );
       
   675     
       
   676     if( iScreensaverRepository )
       
   677     iScreensaverRepositoryWatcher = CScreensaverRepositoryWatcher::NewL(
       
   678         KCRUidScreenSaver,
       
   679         TCallBack( HandleDisplayObjChanged, this ),
       
   680         iScreensaverRepository );
       
   681     }
       
   682 
       
   683 // -----------------------------------------------------------------------------
       
   684 // CScreensaverSharedDataI::ConnectToPslnSettingCRL
       
   685 // -----------------------------------------------------------------------------
       
   686 //
       
   687 void CScreensaverSharedDataI::ConnectToPslnSettingCRL()
       
   688     {
       
   689     TRAPD(ret, iSettingsRepository = CRepository::NewL(KCRUidPersonalizationSettings));
       
   690     
       
   691     if( ret == KErrNone )
       
   692         {
       
   693         iSettingsRepositoryWatcher = CScreensaverRepositoryWatcher::NewL(
       
   694             KCRUidPersonalizationSettings,
       
   695             KSettingsScreenSaverPeriod,
       
   696             CCenRepNotifyHandler::EIntKey,
       
   697             TCallBack(HandleTimeoutChanged, this),
       
   698             iSettingsRepository);
       
   699         }
       
   700     }
       
   701 
       
   702 // -----------------------------------------------------------------------------
       
   703 // CScreensaverSharedDataI::ConnectToCommonTsyCRL
       
   704 // Connects to common tsy central repository
       
   705 // -----------------------------------------------------------------------------
       
   706 //
       
   707 void CScreensaverSharedDataI::ConnectToCommonTsyCRL()
       
   708     {
       
   709     iCTsyRepository = CRepository::NewL( KCRUidCtsyMessageWaitingIndicator );
       
   710     }
       
   711 
       
   712 // -----------------------------------------------------------------------------
       
   713 // CScreensaverSharedDataI::ConnectToInboxL
       
   714 // -----------------------------------------------------------------------------
       
   715 //
       
   716 void CScreensaverSharedDataI::ConnectToInboxL()
       
   717     {
       
   718     if (!iMsvSession)
       
   719         {
       
   720         iMsvSession = CMsvSession::OpenSyncL( *this );
       
   721         }
       
   722     iInboxFolder = iMsvSession->GetEntryL( KMsvGlobalInBoxIndexEntryId );
       
   723 
       
   724     TMsvSelectionOrdering ordering = iInboxFolder->SortType();
       
   725     ordering.SetShowInvisibleEntries( EFalse );
       
   726     iInboxFolder->SetSortTypeL( ordering );
       
   727 
       
   728     iInboxFolder->AddObserverL( *this );
       
   729     }
       
   730 
       
   731 // -----------------------------------------------------------------------------
       
   732 // CScreensaverSharedDataI::ConnectToProfileEngine
       
   733 // Connect to Profile engine. Returns ETrue if successfully connected
       
   734 // -----------------------------------------------------------------------------
       
   735 //
       
   736 TBool CScreensaverSharedDataI::ConnectToProfileEngine()
       
   737     {
       
   738     // Check if already connected
       
   739     if ( iProfileEngine )
       
   740         {
       
   741         // Done
       
   742         return ETrue;
       
   743         }
       
   744     // The member variable is also used to indicate successful
       
   745     // connection, hence a pointer instead of just RSystemAgent
       
   746     TRAPD( err, ( iProfileEngine = CreateProfileEngineL() ) );
       
   747 
       
   748     if ( err != KErrNone )
       
   749         {
       
   750         // Something went wrong on allocation
       
   751         iProfileEngine = NULL;
       
   752         return EFalse;
       
   753         }
       
   754 
       
   755     // Successfully connected
       
   756     return ETrue;
       
   757     }
       
   758 
       
   759 // -----------------------------------------------------------------------------
       
   760 // CScreensaverSharedDataI::ClearPreviewFlag
       
   761 // Connect to current active Profile. Returns ETrue if successfully connected
       
   762 // -----------------------------------------------------------------------------
       
   763 //
       
   764 TBool CScreensaverSharedDataI::ConnectToActiveProfile()
       
   765     {
       
   766     InvalidateActiveProfile();
       
   767     
       
   768     if ( ConnectToProfileEngine() )
       
   769         {
       
   770         TRAPD( err, ( iActiveProfile = iProfileEngine->ActiveProfileL() ) );
       
   771         if ( ( err == KErrNone ) && ( iActiveProfile ) )
       
   772             {
       
   773             return ETrue;
       
   774             }
       
   775         }
       
   776     return EFalse;
       
   777     }
       
   778 
       
   779 // -----------------------------------------------------------------------------
       
   780 // CScreensaverSharedDataI::DefineScreensaverProperties
       
   781 // -----------------------------------------------------------------------------
       
   782 //
       
   783 void CScreensaverSharedDataI::DefineScreensaverProperties( 
       
   784     TUint32 aKey, const TSecurityPolicy& aWritePolicy )
       
   785     {
       
   786     RProperty::Define(
       
   787             KPSUidScreenSaver,
       
   788             aKey,
       
   789             RProperty::EInt,
       
   790             KSSPolicyPass,
       
   791             aWritePolicy );
       
   792     
       
   793     RProperty::Set( KPSUidScreenSaver, aKey, 0);
       
   794     }
       
   795 
       
   796 // -----------------------------------------------------------------------------
       
   797 // CScreensaverSharedDataI::HandleTimeoutChanged
       
   798 // -----------------------------------------------------------------------------
       
   799 //
       
   800 TInt CScreensaverSharedDataI::HandleTimeoutChanged(TAny* aPtr)
       
   801     {
       
   802     STATIC_CAST(CScreensaverSharedDataI*, aPtr)->ResetInactivityTimeout();
       
   803     return KErrNone;
       
   804     }
       
   805 
       
   806 // -----------------------------------------------------------------------------
       
   807 // CScreensaverSharedDataI::ResetInactivityTimeout
       
   808 // -----------------------------------------------------------------------------
       
   809 //
       
   810 void CScreensaverSharedDataI::ResetInactivityTimeout()
       
   811     {
       
   812     AppUi()->Model().ResetInactivityTimeout();
       
   813     }
       
   814 
       
   815 
       
   816 // -----------------------------------------------------------------------------
       
   817 // CScreensaverSharedDataI::HandleDisplayObjChanged
       
   818 // -----------------------------------------------------------------------------
       
   819 //
       
   820 TInt CScreensaverSharedDataI::HandleDisplayObjChanged(TAny* aPtr)
       
   821     {
       
   822     CScreensaverSharedDataI* self = STATIC_CAST(CScreensaverSharedDataI*, aPtr);
       
   823     
       
   824     self->AppUi()->ScreensaverView()->SetDisplayObject( self->DisplayObjectType() );
       
   825     
       
   826     return KErrNone;
       
   827     }
       
   828 
       
   829 // -----------------------------------------------------------------------------
       
   830 // CScreensaverSharedDataI::GetDefaultType
       
   831 // -----------------------------------------------------------------------------
       
   832 //
       
   833 void CScreensaverSharedDataI::GetDefaultType()
       
   834     {
       
   835     //Store the default screensaver for this device
       
   836     TBuf<16> screensaverName;
       
   837     
       
   838     TInt error = GetDefaultTypeString( screensaverName );
       
   839     
       
   840     if ( KErrNone == error )
       
   841         {
       
   842         if ( screensaverName.CompareF( KScreenSaverTypeNone ) == 0 )
       
   843             {
       
   844             iDefaultType = EDisplayNone;
       
   845             }
       
   846         else if ( screensaverName.CompareF( KScreenSaverTypeText ) == 0 )
       
   847             {
       
   848             iDefaultType = EDisplayText;
       
   849             }
       
   850         else //go back to the "old" option, ie - Date type
       
   851             {
       
   852             iDefaultType = EDisplayTime;
       
   853             }
       
   854         }
       
   855     
       
   856     iDefaultType = EDisplayTime;
       
   857     }
       
   858 
       
   859 // -----------------------------------------------------------------------------
       
   860 // CScreensaverSharedDataI::GetDefaultTypeString
       
   861 // -----------------------------------------------------------------------------
       
   862 //
       
   863 TInt CScreensaverSharedDataI::GetDefaultTypeString( TDes& DefaultScreenSaver )
       
   864     {
       
   865     CRepository* skinsRepository = NULL;
       
   866     TRAP_IGNORE( skinsRepository = CRepository::NewL( KCRUidPersonalisation ) );
       
   867     
       
   868     TInt error = skinsRepository->Get( KPslnSystemDefaultScreenSaver,
       
   869         DefaultScreenSaver );
       
   870     
       
   871     delete skinsRepository;
       
   872     
       
   873     return error;
       
   874     }
       
   875 
       
   876 // -----------------------------------------------------------------------------
       
   877 // CScreensaverSharedDataI::VoiceMailCount
       
   878 // -----------------------------------------------------------------------------
       
   879 //
       
   880 TInt CScreensaverSharedDataI::VoiceMailCount( const TUint32 aKey ) const
       
   881     {
       
   882     TInt line(0);
       
   883     TInt error = KErrNone;
       
   884     
       
   885     error = iCTsyRepository->Get( aKey, line );
       
   886     
       
   887     if( error != KErrNone )
       
   888         {
       
   889         line = 0;
       
   890         }
       
   891     
       
   892     return line;
       
   893     }
       
   894 
       
   895 // -----------------------------------------------------------------------------
       
   896 // CScreensaverSharedDataI::InvalidateActiveProfile
       
   897 // Invalidate the cached active profile, so that next call to ConnectToActiveProfile
       
   898 // will use the newest profile data (in case it has changed)
       
   899 // -----------------------------------------------------------------------------
       
   900 //
       
   901 void CScreensaverSharedDataI::InvalidateActiveProfile()
       
   902     {
       
   903     if (iActiveProfile)
       
   904         {
       
   905         iActiveProfile->Release();
       
   906         iActiveProfile = NULL;
       
   907         }
       
   908     }
       
   909 
       
   910 // -----------------------------------------------------------------------------
       
   911 // CScreensaverSharedDataI::AppUi
       
   912 // -----------------------------------------------------------------------------
       
   913 //
       
   914 CScreensaverAppUi *CScreensaverSharedDataI::AppUi() const
       
   915     {
       
   916     return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() );
       
   917     }
       
   918 // End of file.