--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensavershareddatamonitor.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 2003 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 monitoring.
+*
+*/
+
+
+
+#include <coemain.h>
+#include <ScreensaverInternalCRKeys.h>
+#include <UsbWatcherInternalPSKeys.h>
+#include <avkondomainpskeys.h> // kaknkeyguardstatus
+#include <ctsydomainpskeys.h> // kpsuidctsycallinformation
+#include <startupdomainpskeys.h> // kpsglobalsystemstate
+#include <ScreensaverInternalPSKeys.h>
+#include <UikonInternalPSKeys.h> // kuikmmcinserted
+
+#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
+#include <akntransitionutils.h>
+#endif
+
+#include "screensavershareddatamonitor.h"
+#include "screensavershareddatai.h"
+#include "screensaverrepositorywatcher.h"
+#include "screensaverview.h"
+#include "screensaverengine.h"
+#include "screensaverappui.h"
+#include "screensaversubscriber.h"
+#include "screensaverutility.h"
+
+//System shuttingdown value
+const TInt KSystemShuttingdown = 1;
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::~CScreensaverSharedDataMonitor
+// -----------------------------------------------------------------------------
+//
+CScreensaverSharedDataMonitor::~CScreensaverSharedDataMonitor()
+ {
+ DeleteSubscriber( iPreviewModeSubscriber );
+ iPreviewModeProperty.Close();
+
+ DeleteSubscriber( iMMCWatchSubscriber );
+ iMMCWatchProperty.Close();
+
+ DeleteSubscriber( iUSBWatchSubscriber );
+ iUSBWatchProperty.Close();
+
+ DeleteSubscriber( iKeyguardStateSubscriber );
+ iKeyguardStateProperty.Close();
+
+ DeleteSubscriber( iCallStateSubscriber );
+ iCallStateProperty.Close();
+
+ DeleteSubscriber( iShuttingDownSubscriber );
+ iShuttingDownProperty.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::NewL
+// -----------------------------------------------------------------------------
+//
+CScreensaverSharedDataMonitor* CScreensaverSharedDataMonitor::NewL( CScreensaverSharedDataI* aData )
+ {
+ CScreensaverSharedDataMonitor* self = new( ELeave )CScreensaverSharedDataMonitor( aData );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(); // self;
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::CScreensaverSharedDataMonitor
+// -----------------------------------------------------------------------------
+//
+CScreensaverSharedDataMonitor::CScreensaverSharedDataMonitor(
+ CScreensaverSharedDataI* aData )
+ :iData( aData )
+ {
+ // No implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CScreensaverSharedDataMonitor::ConstructL()
+ {
+ User::LeaveIfError(iPreviewModeProperty.Attach(KPSUidScreenSaver, KScreenSaverPreviewMode));
+ iPreviewModeSubscriber = new (ELeave) CSubscriber(TCallBack(HandlePreviewModeChanged, this), iPreviewModeProperty);
+ iPreviewModeSubscriber->SubscribeL();
+
+
+ // MMC watcher
+ User::LeaveIfError(iMMCWatchProperty.Attach(KPSUidUikon, KUikMMCInserted));
+ iMMCWatchSubscriber = new (ELeave) CSubscriber(
+ TCallBack(HandleMMCStateChanged, this), iMMCWatchProperty);
+ iMMCWatchSubscriber->SubscribeL();
+
+ // USB watcher (MMC dismount)
+ User::LeaveIfError(iUSBWatchProperty.Attach(
+ KPSUidUsbWatcher, KUsbWatcherSelectedPersonality));
+ iUSBWatchSubscriber = new (ELeave) CSubscriber(
+ TCallBack(HandleUSBStateChanged, this), iUSBWatchProperty);
+ iUSBWatchSubscriber->SubscribeL();
+
+ // Keyguard state watcher
+ User::LeaveIfError(iKeyguardStateProperty.Attach(
+ KPSUidAvkonDomain, KAknKeyguardStatus));
+ iKeyguardStateSubscriber = new (ELeave) CSubscriber(
+ TCallBack(HandleKeyguardStateChanged, this), iKeyguardStateProperty);
+ iKeyguardStateSubscriber->SubscribeL();
+
+ // Call state watcher
+ User::LeaveIfError(iCallStateProperty.Attach( KPSUidCtsyCallInformation, KCTsyCallState ) );
+ iCallStateSubscriber = new (ELeave) CSubscriber(
+ TCallBack(HandleCallStateChanged, this), iCallStateProperty);
+ iCallStateSubscriber->SubscribeL();
+
+ // Shutting down state watcher
+ User::LeaveIfError( iShuttingDownProperty.Attach( KPSUidStartup, KPSGlobalSystemState ) );
+ iShuttingDownSubscriber = new (ELeave) CSubscriber(
+ TCallBack(HandleShuttingDownStateChanged, this), iShuttingDownProperty);
+ iShuttingDownSubscriber->SubscribeL();
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::View
+// -----------------------------------------------------------------------------
+//
+CScreensaverView* CScreensaverSharedDataMonitor::View()
+ {
+ return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->ScreensaverView();
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::Model
+// -----------------------------------------------------------------------------
+//
+CScreensaverEngine& CScreensaverSharedDataMonitor::Model()
+ {
+ return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->Model();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::DeteleSubscriber
+// -----------------------------------------------------------------------------
+//
+void CScreensaverSharedDataMonitor::DeleteSubscriber( CSubscriber*& aSubscriber )
+ {
+ if ( aSubscriber )
+ {
+ aSubscriber->StopSubscribe();
+ }
+ delete aSubscriber;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::HandlePreviewModeChanged
+// Handles preview mode property key change. If key is changed to 1,
+// preview mode is started
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverSharedDataMonitor::HandlePreviewModeChanged(TAny *aPtr)
+ {
+ CScreensaverSharedDataMonitor *data = STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr);
+
+ if ( data->iData->ScreensaverPreviewMode() == 1)
+ {
+ TRAP_IGNORE( data->Model().StartPreviewModeL() );
+ }
+
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::HandleMMCStateChanged
+// Handles MMC state change callback. If current plugin is loaded from
+// MMC, screensaver defaults to date & time when MMC removed
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverSharedDataMonitor::HandleMMCStateChanged(TAny* aPtr)
+ {
+ STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::HandleUSBStateChanged
+// Handles USB state change callback. If current plugin is loaded from
+// MMC, screensaver defaults to date & time when USB attached
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverSharedDataMonitor::HandleUSBStateChanged(TAny* aPtr)
+ {
+ // Same handler as in MMC removal, parameter tells it's because of USB
+ STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::HandleKeyguardStateChanged
+// Handles keyguards status change callback.
+// When keys become locked, screensaver timeout is shortened.
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverSharedDataMonitor::HandleKeyguardStateChanged(TAny* aPtr)
+ {
+ // If keyguard just became unlocked, inform model so that
+ // short timeout use is reset. Otherwise there might be a situation
+ // where short timeout was in use, user opened keys, did something
+ // without letting the device idle for short timeout period and
+ // locked keys again. Then short timeout would remain in use without this
+ // notification.
+ // Also inform of keys locked, in case Screensaver is running this
+ // happened because of automatic keyguard fired, and screensaver
+ // should update the display to show the keyguard indicator
+ CScreensaverSharedDataMonitor* _this =
+ STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr);
+
+ if ( _this->iData->IsKeyguardOn() )
+ {
+ // Keys locked - if screensaver is running, this was caused by
+ // automatic keyguard and screensaver should refresh the view
+ // to show the keylock indicator
+ if ( _this->Model().ScreenSaverIsOn() )
+ {
+ _this->View()->UpdateAndRefresh();
+ }
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::HandleCallStateChanged
+// Handles call state change callback. If call state changes,
+// screensaver is stopped
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverSharedDataMonitor::HandleCallStateChanged(TAny* aPtr)
+ {
+#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
+ // Prevent fullscreen transition from screensaver on incoming call
+ CAknTransitionUtils::SetData( KScreensaverCallStateChange, (TAny*)1 );
+#endif
+
+ STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver();
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CScreensaverSharedDataMonitor::HandleShuttingDownStateChanged
+// -----------------------------------------------------------------------------
+//
+TInt CScreensaverSharedDataMonitor::HandleShuttingDownStateChanged( TAny* /*aPtr*/ )
+ {
+ TInt startupState = -1;
+
+ RProperty::Get( KPSUidStartup, KPSGlobalSystemState, startupState );
+
+ if( startupState == ESwStateShuttingDown )
+ {
+ RProperty::Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, KSystemShuttingdown);
+ }
+
+ return KErrNone;
+ }
+
+// End of file