diff -r aaeeca1f15af -r e8d784ac1a4b src/screensaverutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/screensaverutility.cpp Wed Sep 01 12:30:40 2010 +0100 @@ -0,0 +1,225 @@ +/* +* Copyright (c) 2004 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: Defines screensaver utility tools. +* +*/ + + + +#include +#include +#include +#include + +#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 +#include +#endif + +#include "screensaverutility.h" +#include "screensaverappui.h" +#include "ScreensaverUtils.h" + + +// Screensaver window group priority boost (to ensure it's on top) +const TInt KSSWinPriorityBoost = 2; + +_LIT(KSsBitmapName, "\\ssbackground.mbm"); +_LIT(KSsBitmapUserDrive, "c:"); +_LIT(KSsBitmapSystemDrive, "z:"); + +// ----------------------------------------------------------------------------- +// CScreensaverUtility::Panic( TInt aPanic ) +// ----------------------------------------------------------------------------- +// +void ScreensaverUtility::Panic( TInt aPanic ) + { + User::Panic( _L("Screensaver"),aPanic ); + } + + +// ----------------------------------------------------------------------------- +// CScreensaverUtility::FlushDrawBuffer( TInt aPanic ) +// Flushes pending draw commands. A "must" before activating power save +// mode, so that the image can be copied to power save memory +// ----------------------------------------------------------------------------- +// +void ScreensaverUtility::FlushDrawBuffer() + { + CCoeEnv::Static()->WsSession().Flush(); + } + +// ----------------------------------------------------------------------------- +// CScreensaverUtility::ScreenRotated( TInt aPanic ) +// Checks if screen has been rotated +// ----------------------------------------------------------------------------- +// +TBool ScreensaverUtility::ScreenRotated() + { + TPixelsAndRotation pxRot; + CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(pxRot); + + // Rotated, if 90 or 270 degrees + return ((pxRot.iRotation == CFbsBitGc::EGraphicsOrientationRotated90) + || (pxRot.iRotation == CFbsBitGc::EGraphicsOrientationRotated270)); + } + +// ----------------------------------------------------------------------------- +// ScreensaverUtility::Query12HourClock +// Query whether 12-hour clock is displayed +// ----------------------------------------------------------------------------- +// +TBool ScreensaverUtility::Query12HourClock( ) + { + TLocale locale; + return (locale.TimeFormat() == ETime12); + } + + +// ----------------------------------------------------------------------------- +// ScreensaverUtility::BringToForeground +// ----------------------------------------------------------------------------- +// +void ScreensaverUtility::BringToForeground() + { +#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 + const TInt KSsaCustomActivateContextNum = 1002; + + GfxTransEffect::BeginFullScreen( KSsaCustomActivateContextNum, TRect( ), + AknTransEffect::EParameterType, AknTransEffect::GfxTransParam( + KUidScreensaverApp, + AknTransEffect::TParameter::EActivateExplicitContinue ) ); +#endif + CEikonEnv::Static()->SetAutoForwarding( ETrue ); + CEikonEnv::Static()->BringForwards( ETrue, ECoeWinPriorityAlwaysAtFront + + KSSWinPriorityBoost ); + } + +// ----------------------------------------------------------------------------- +// ScreensaverUtility::SendToBackground +// ----------------------------------------------------------------------------- +// +void ScreensaverUtility::SendToBackground() + { +#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 + + // Start the exit effect context even if this is actually application switch. The exit context + // makes possible to map effect by using the *previous* application uid (=Screen Saver). + // Note: Not allowed to call GfxTransEffect::EndFullScreen() as AVKON takes care of that when + // EApplicationExit context is used! + const TInt KSsaCustomDeactivateContextNum = 1001; + + //condition takes care of special case of incomeing call (should not have effect then) + if ( CAknTransitionUtils::GetData( KScreensaverCallStateChange ) == NULL ) + { + if ( static_cast(CCoeEnv::Static()->AppUi())->IsForeground() ) + { + GfxTransEffect::BeginFullScreen( KSsaCustomDeactivateContextNum, + TRect( ), AknTransEffect::EParameterType, + AknTransEffect::GfxTransParam( KUidScreensaverApp, + AknTransEffect::TParameter::EActivateExplicitContinue ) ); + } + } + CAknTransitionUtils::RemoveData( KScreensaverCallStateChange ); +#endif + + CEikonEnv::Static()->BringForwards( EFalse ); + } + +// ----------------------------------------------------------------------------- +// ScreensaverUtility::IsDrivePresent +// ----------------------------------------------------------------------------- +// +TBool ScreensaverUtility::IsDrivePresent(TInt aDrive) + { + RFs& fs = CCoeEnv::Static()->FsSession(); + + TInt error = KErrNone; + TDriveInfo driveInfo; + error = fs.Drive(driveInfo, aDrive ); + + // Not present, locked or unknown is bad + if ((error != KErrNone) || + (driveInfo.iMediaAtt & KMediaAttLocked) || + (driveInfo.iType == EMediaNotPresent) || + (driveInfo.iType == EMediaUnknown)) + { + return EFalse; + } + + // Read-only is fine + return ETrue; + } + +// ----------------------------------------------------------------------------- +// ScreensaverUtility::LoadBitmapL +// ----------------------------------------------------------------------------- +// +CGulIcon* ScreensaverUtility::LoadBitmapL() + { + CGulIcon *icon = CGulIcon::NewL(); + CleanupStack::PushL( icon ); + icon->SetBitmap(new (ELeave) CFbsBitmap()); + CFbsBitmap* mask = new (ELeave) CFbsBitmap(); + + // First try user path and then system path. + TInt error; + TFileName path; + path.Copy(KSsBitmapUserDrive); + path.Append(KDC_APP_BITMAP_DIR); + path.Append(KSsBitmapName); + + for (TInt i = 0; i < 2; i++) + { + error = icon->Bitmap()->Load(path, 0); + if (error == KErrNone) + { + error = mask->Load(path, 1); + if (error != KErrNone) + { + delete mask; + } + else + { + icon->SetMask( mask ); + } + CleanupStack::Pop(); // icon + return icon; + } + path.Copy(KSsBitmapSystemDrive); + path.Append(KDC_APP_BITMAP_DIR); + path.Append(KSsBitmapName); + } + + CleanupStack::PopAndDestroy(); // icon + return NULL; + } + + +// ----------------------------------------------------------------------------- +// ScreensaverUtility::StopWServHeartBeat +// ----------------------------------------------------------------------------- +// +void ScreensaverUtility::StopWServHeartBeat() + { + SCRLOGGER_WRITE("Model: Stopping WServ HB, snoozing..."); + RWsSession ws; + TInt err = ws.Connect( ); + if ( !err ) + { + ws.PrepareForSwitchOff( ); + ws.Close( ); + } + } + +// End of file