diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/src/camstartuplogocontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/src/camstartuplogocontroller.cpp Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,184 @@ +/* +* Copyright (c) 2010 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: Controller for managing the camera startup logo state +* +*/ + +#include "camstartuplogocontroller.h" +#include "camlogging.h" + +// Maximum time the logo can be shown +const TInt KCamFailSafeTimeout = 5000000; // 5 seconds + +// --------------------------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------------------------- +// +CCamStartupLogoController::CCamStartupLogoController(TStartupLogoState aInitialState) + : iState(aInitialState) + { + // No implementation required + PRINT( _L("Camera <> CCamStartupLogoController::CCamStartupLogoController") ); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CCamStartupLogoController::~CCamStartupLogoController() + { + PRINT( _L("Camera <> CCamStartupLogoController::~CCamStartupLogoController") ); + delete iFailSafeTimer; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +CCamStartupLogoController* CCamStartupLogoController::NewLC(TStartupLogoState aInitialState) + { + CCamStartupLogoController* self = + new (ELeave) CCamStartupLogoController(aInitialState); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor +// --------------------------------------------------------------------------- +// +CCamStartupLogoController* CCamStartupLogoController::NewL( + TStartupLogoState aInitialState) + { + CCamStartupLogoController* self = CCamStartupLogoController::NewLC(aInitialState); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// 2nd phase constructor +// --------------------------------------------------------------------------- +// +void CCamStartupLogoController::ConstructL() + { + iFailSafeTimer = CPeriodic::NewL(0); + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::AddObserver +// --------------------------------------------------------------------------- +// +TInt CCamStartupLogoController::AddObserver( + MCamStartupLogoControllerObserver* aObserver) + { + return iObservers.Append(aObserver); + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::RemoveObserver +// --------------------------------------------------------------------------- +// +void CCamStartupLogoController::RemoveObserver( + MCamStartupLogoControllerObserver* aObserver) + { + TInt index = iObservers.Find(aObserver); + if (index >= 0) + { + iObservers.Remove(index); + } + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::State +// --------------------------------------------------------------------------- +// +TStartupLogoState CCamStartupLogoController::State() const + { + return iState; + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::ShowLogo +// --------------------------------------------------------------------------- +// +void CCamStartupLogoController::ShowLogo() + { + PRINT(_L("Camera <> CCamStartupLogoController::ShowLogo")); + + if (iFailSafeTimer) + { + iFailSafeTimer->Cancel(); + iFailSafeTimer->Start(TTimeIntervalMicroSeconds32(KCamFailSafeTimeout), + TTimeIntervalMicroSeconds32(KCamFailSafeTimeout), + TCallBack(FailSafeCallback, this)); + } + + SetState(EStartupLogoVisible); + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::HideLogo +// --------------------------------------------------------------------------- +// +void CCamStartupLogoController::HideLogo() + { + PRINT(_L("Camera <> CCamStartupLogoController::HideLogo")); + + // Hide immediately + SetState(EStartupLogoNotVisible); + if (iFailSafeTimer) + { + iFailSafeTimer->Cancel(); + } + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::SetState +// --------------------------------------------------------------------------- +// +void CCamStartupLogoController::SetState(TStartupLogoState aNewState) + { + PRINT1(_L("Camera => CCamStartupLogoController::SetState %d"), aNewState); + + if (iState != aNewState) + { + iState = aNewState; + for (TInt i=0; iStartupLogoControllerStateChanged(aNewState); + } + } + PRINT1(_L("Camera <= CCamStartupLogoController::SetState %d"), aNewState); + } + +// --------------------------------------------------------------------------- +// CCamStartupLogoController::FailSafeCallback +// --------------------------------------------------------------------------- +// +TInt CCamStartupLogoController::FailSafeCallback(TAny* ptr) + { + PRINT(_L("Camera <> CCamStartupLogoController::FailSafeCallback")); + + CCamStartupLogoController* self = static_cast(ptr); + if (self) + { + self->HideLogo(); + if (self->iFailSafeTimer) + { + self->iFailSafeTimer->Cancel(); + } + } + return 0; + }