src/screensavershareddatamonitor.cpp
changeset 14 8a173132b0aa
parent 2 058b1fc1663a
equal deleted inserted replaced
2:058b1fc1663a 14:8a173132b0aa
     1 /*
       
     2 * Copyright (c) 2003 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 monitoring.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #include <coemain.h>
       
    21 #include <ScreensaverInternalCRKeys.h>
       
    22 #include <UsbWatcherInternalPSKeys.h>
       
    23 #include <avkondomainpskeys.h>               // kaknkeyguardstatus
       
    24 #include <ctsydomainpskeys.h>                // kpsuidctsycallinformation
       
    25 #include <startupdomainpskeys.h>             // kpsglobalsystemstate
       
    26 #include <ScreensaverInternalPSKeys.h>
       
    27 #include <UikonInternalPSKeys.h>             // kuikmmcinserted
       
    28 
       
    29 #ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
       
    30 #include <akntransitionutils.h>
       
    31 #endif
       
    32 
       
    33 #include "screensavershareddatamonitor.h"
       
    34 #include "screensavershareddatai.h"
       
    35 #include "screensaverrepositorywatcher.h"
       
    36 #include "screensaverview.h"
       
    37 #include "screensaverengine.h"
       
    38 #include "screensaverappui.h"
       
    39 #include "screensaversubscriber.h"
       
    40 #include "screensaverutility.h"
       
    41 
       
    42 //System shuttingdown value
       
    43 const TInt KSystemShuttingdown = 1;
       
    44 
       
    45 // -----------------------------------------------------------------------------
       
    46 // CScreensaverSharedDataMonitor::~CScreensaverSharedDataMonitor
       
    47 // -----------------------------------------------------------------------------
       
    48 //
       
    49 CScreensaverSharedDataMonitor::~CScreensaverSharedDataMonitor()
       
    50     {
       
    51     DeleteSubscriber( iPreviewModeSubscriber );
       
    52     iPreviewModeProperty.Close();
       
    53     
       
    54     DeleteSubscriber( iMMCWatchSubscriber );
       
    55     iMMCWatchProperty.Close();
       
    56     
       
    57     DeleteSubscriber( iUSBWatchSubscriber );
       
    58     iUSBWatchProperty.Close();
       
    59     
       
    60     DeleteSubscriber( iKeyguardStateSubscriber );
       
    61     iKeyguardStateProperty.Close();
       
    62     
       
    63     DeleteSubscriber( iCallStateSubscriber );
       
    64     iCallStateProperty.Close();
       
    65     
       
    66     DeleteSubscriber( iShuttingDownSubscriber );
       
    67     iShuttingDownProperty.Close();
       
    68     }
       
    69 
       
    70 // -----------------------------------------------------------------------------
       
    71 // CScreensaverSharedDataMonitor::NewL
       
    72 // -----------------------------------------------------------------------------
       
    73 //
       
    74 CScreensaverSharedDataMonitor* CScreensaverSharedDataMonitor::NewL( CScreensaverSharedDataI* aData )
       
    75     {
       
    76     CScreensaverSharedDataMonitor* self = new( ELeave )CScreensaverSharedDataMonitor( aData );
       
    77     CleanupStack::PushL( self );
       
    78     self->ConstructL();
       
    79     CleanupStack::Pop(); // self;
       
    80     return self;
       
    81     }
       
    82 
       
    83 // -----------------------------------------------------------------------------
       
    84 // CScreensaverSharedDataMonitor::CScreensaverSharedDataMonitor
       
    85 // -----------------------------------------------------------------------------
       
    86 //
       
    87 CScreensaverSharedDataMonitor::CScreensaverSharedDataMonitor(
       
    88     CScreensaverSharedDataI* aData )
       
    89     :iData( aData )
       
    90     {
       
    91     // No implementation required
       
    92     }
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // CScreensaverSharedDataMonitor::ConstructL
       
    96 // -----------------------------------------------------------------------------
       
    97 // 
       
    98 void CScreensaverSharedDataMonitor::ConstructL()
       
    99     {
       
   100     User::LeaveIfError(iPreviewModeProperty.Attach(KPSUidScreenSaver, KScreenSaverPreviewMode));
       
   101     iPreviewModeSubscriber = new (ELeave) CSubscriber(TCallBack(HandlePreviewModeChanged, this), iPreviewModeProperty);
       
   102     iPreviewModeSubscriber->SubscribeL();
       
   103     
       
   104     
       
   105     // MMC watcher
       
   106     User::LeaveIfError(iMMCWatchProperty.Attach(KPSUidUikon, KUikMMCInserted));
       
   107     iMMCWatchSubscriber = new (ELeave) CSubscriber(
       
   108         TCallBack(HandleMMCStateChanged, this), iMMCWatchProperty);
       
   109     iMMCWatchSubscriber->SubscribeL();
       
   110     
       
   111     // USB watcher (MMC dismount)
       
   112     User::LeaveIfError(iUSBWatchProperty.Attach(
       
   113            KPSUidUsbWatcher, KUsbWatcherSelectedPersonality));
       
   114     iUSBWatchSubscriber = new (ELeave) CSubscriber(
       
   115         TCallBack(HandleUSBStateChanged, this), iUSBWatchProperty);
       
   116     iUSBWatchSubscriber->SubscribeL();
       
   117 
       
   118     // Keyguard state watcher
       
   119     User::LeaveIfError(iKeyguardStateProperty.Attach(
       
   120         KPSUidAvkonDomain, KAknKeyguardStatus));
       
   121     iKeyguardStateSubscriber = new (ELeave) CSubscriber(
       
   122         TCallBack(HandleKeyguardStateChanged, this), iKeyguardStateProperty);
       
   123     iKeyguardStateSubscriber->SubscribeL();
       
   124 
       
   125     // Call state watcher
       
   126     User::LeaveIfError(iCallStateProperty.Attach( KPSUidCtsyCallInformation, KCTsyCallState ) );
       
   127     iCallStateSubscriber = new (ELeave) CSubscriber(
       
   128         TCallBack(HandleCallStateChanged, this), iCallStateProperty);
       
   129     iCallStateSubscriber->SubscribeL();
       
   130 
       
   131     // Shutting down state watcher
       
   132     User::LeaveIfError( iShuttingDownProperty.Attach( KPSUidStartup, KPSGlobalSystemState ) );
       
   133     iShuttingDownSubscriber = new (ELeave) CSubscriber(
       
   134         TCallBack(HandleShuttingDownStateChanged, this), iShuttingDownProperty);
       
   135     iShuttingDownSubscriber->SubscribeL();
       
   136     }
       
   137 
       
   138 // -----------------------------------------------------------------------------
       
   139 // CScreensaverSharedDataMonitor::View
       
   140 // -----------------------------------------------------------------------------
       
   141 // 
       
   142 CScreensaverView* CScreensaverSharedDataMonitor::View()
       
   143     {
       
   144     return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->ScreensaverView();
       
   145     }
       
   146 
       
   147 // -----------------------------------------------------------------------------
       
   148 // CScreensaverSharedDataMonitor::Model
       
   149 // -----------------------------------------------------------------------------
       
   150 //
       
   151 CScreensaverEngine& CScreensaverSharedDataMonitor::Model()
       
   152     {
       
   153     return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->Model();
       
   154     }
       
   155 
       
   156 
       
   157 // -----------------------------------------------------------------------------
       
   158 // CScreensaverSharedDataMonitor::DeteleSubscriber
       
   159 // -----------------------------------------------------------------------------
       
   160 //
       
   161 void CScreensaverSharedDataMonitor::DeleteSubscriber( CSubscriber*& aSubscriber )
       
   162     {
       
   163     if ( aSubscriber )
       
   164         {
       
   165         aSubscriber->StopSubscribe();
       
   166         }
       
   167     delete aSubscriber;
       
   168     }
       
   169 
       
   170 // -----------------------------------------------------------------------------
       
   171 // CScreensaverSharedDataMonitor::HandlePreviewModeChanged
       
   172 // Handles preview mode property key change. If key is changed to 1,
       
   173 // preview mode is started
       
   174 // -----------------------------------------------------------------------------
       
   175 //
       
   176 TInt CScreensaverSharedDataMonitor::HandlePreviewModeChanged(TAny *aPtr)
       
   177     {
       
   178     CScreensaverSharedDataMonitor *data = STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr);
       
   179 
       
   180     if ( data->iData->ScreensaverPreviewMode() == 1)
       
   181         {
       
   182         TRAP_IGNORE( data->Model().StartPreviewModeL() );
       
   183         }
       
   184     
       
   185     return KErrNone;
       
   186     }
       
   187 
       
   188 
       
   189 // -----------------------------------------------------------------------------
       
   190 // CScreensaverSharedDataMonitor::HandleMMCStateChanged
       
   191 // Handles MMC state change callback. If current plugin is loaded from
       
   192 // MMC, screensaver defaults to date & time when MMC removed
       
   193 // -----------------------------------------------------------------------------
       
   194 //
       
   195 TInt CScreensaverSharedDataMonitor::HandleMMCStateChanged(TAny* aPtr)
       
   196     {
       
   197     STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver();
       
   198     return KErrNone;
       
   199     }
       
   200 
       
   201 // -----------------------------------------------------------------------------
       
   202 // CScreensaverSharedDataMonitor::HandleUSBStateChanged
       
   203 // Handles USB state change callback. If current plugin is loaded from
       
   204 // MMC, screensaver defaults to date & time when USB attached
       
   205 // -----------------------------------------------------------------------------
       
   206 //
       
   207 TInt CScreensaverSharedDataMonitor::HandleUSBStateChanged(TAny* aPtr)
       
   208     {
       
   209     // Same handler as in MMC removal, parameter tells it's because of USB
       
   210     STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver();
       
   211     return KErrNone;
       
   212     }
       
   213 
       
   214 // -----------------------------------------------------------------------------
       
   215 // CScreensaverSharedDataMonitor::HandleKeyguardStateChanged
       
   216 // Handles keyguards status change callback.
       
   217 // When keys become locked, screensaver timeout is shortened.
       
   218 // -----------------------------------------------------------------------------
       
   219 //
       
   220 TInt CScreensaverSharedDataMonitor::HandleKeyguardStateChanged(TAny* aPtr)
       
   221     {
       
   222     // If keyguard just became unlocked, inform model so that
       
   223     // short timeout use is reset. Otherwise there might be a situation
       
   224     // where short timeout was in use, user opened keys, did something
       
   225     // without letting the device idle for short timeout period and
       
   226     // locked keys again. Then short timeout would remain in use without this
       
   227     // notification.
       
   228     // Also inform of keys locked, in case Screensaver is running this
       
   229     // happened because of automatic keyguard fired, and screensaver
       
   230     // should update the display to show the keyguard indicator
       
   231     CScreensaverSharedDataMonitor* _this =
       
   232         STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr);
       
   233 
       
   234     if ( _this->iData->IsKeyguardOn() )
       
   235         {
       
   236         // Keys locked - if screensaver is running, this was caused by
       
   237         // automatic keyguard and screensaver should refresh the view
       
   238         // to show the keylock indicator
       
   239         if ( _this->Model().ScreenSaverIsOn() )
       
   240             {
       
   241             _this->View()->UpdateAndRefresh();
       
   242             }
       
   243         }
       
   244 
       
   245     return KErrNone;
       
   246     }
       
   247 
       
   248 // -----------------------------------------------------------------------------
       
   249 // CScreensaverSharedDataMonitor::HandleCallStateChanged
       
   250 // Handles call state change callback. If call state changes,
       
   251 // screensaver is stopped
       
   252 // -----------------------------------------------------------------------------
       
   253 //
       
   254 TInt CScreensaverSharedDataMonitor::HandleCallStateChanged(TAny* aPtr)
       
   255     {
       
   256 #ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
       
   257     // Prevent fullscreen transition from screensaver on incoming call
       
   258     CAknTransitionUtils::SetData( KScreensaverCallStateChange, (TAny*)1 );
       
   259 #endif
       
   260 
       
   261     STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver();
       
   262     return KErrNone;
       
   263     }
       
   264 
       
   265 // -----------------------------------------------------------------------------
       
   266 // CScreensaverSharedDataMonitor::HandleShuttingDownStateChanged
       
   267 // -----------------------------------------------------------------------------
       
   268 //
       
   269 TInt CScreensaverSharedDataMonitor::HandleShuttingDownStateChanged( TAny* /*aPtr*/ )
       
   270     {
       
   271     TInt startupState = -1;
       
   272     
       
   273     RProperty::Get( KPSUidStartup, KPSGlobalSystemState, startupState );
       
   274     
       
   275     if( startupState == ESwStateShuttingDown )
       
   276         {
       
   277         RProperty::Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, KSystemShuttingdown);
       
   278         }
       
   279     
       
   280     return KErrNone;
       
   281     }
       
   282 
       
   283 // End of file