diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/inc/camflashstatus.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/inc/camflashstatus.h Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,280 @@ + +#ifndef CAMFLASHSTATUS_H +#define CAMFLASHSTATUS_H/* +* Copyright (c) 2007 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: Header file for CCamFlashStatus class. +* +* Copyright © 2007 Nokia. All rights reserved. +* This material, including documentation and any related computer +* programs, is protected by copyright controlled by Nokia. All +* rights are reserved. Copying, including reproducing, storing, +* adapting or translating, any or all of this material requires the +* prior written consent of Nokia. This material also contains +* confidential information which may not be disclosed to others +* without the prior written consent of Nokia. +* +* +*/ + + + +// =========================================================================== +// INCLUDES + +#include +#include "mcamcameraobserver.h" + + +// =========================================================================== +// CONSTANTS + +// Flash icon blinking delay (duration of icon on/off state) +const TInt KFlashIconBlinkDelay = 300*1000; // [microseconds] + +// Enumerated flash charging states. Should probably be +// defined in the driver's headers and included from there. +enum TFlashChargeStatus + { + EFlashCharged = 0x1, + EFlashRequired = 0x2, + EFlashChargeTimeout = 0x4 + }; + +/* +// Flash P&S UID & key +#ifndef CAMERAAPP_SIMULATE_XENON_FLASH +const TInt KFlashPSUid = 0xA0002371; +#else +// Use application UID to simulate the flash charging publish +// and subscribe property. This way, no extra capabilities are needed +// for creating the property. +const TInt KFlashPSUid = 0x101FFA86; +#endif // CAMERAAPP_SIMULATE_XENON_FLASH +const TInt KFlashPSKey = 0; +*/ + + +// =========================================================================== +// FORWARD DECLARATIONS + +// +//class CCamPropertyWatcher; +class CCamAppController; + + +// =========================================================================== +// CLASS DECLARATION + +/** +* Interface to notify observer of flash icon visibility. +* This is used to create icon blinking effect when the flash +* is being recharged. +*/ +class MFlashStatusObserver + { + public: + /* + * Flash icon visibility has changed. + * @param aVisible new visibility status + */ + virtual void FlashIconVisible( TBool aVisible ) = 0; + + /** + * Called every time when camera driver reports error in + * flash recharging. + */ + virtual void FlashError() = 0; + + }; + +/** +* Class to handle flash status and flash error status. +* +* - Keeps track of the flash recharge and flash error status +* - Creates events for visibility of the battery icon and uses +* this to create blinking effect when the flash is being +* charged +* - Gives an event when a charging error is received from +* the camera driver. In this case, the UI can display +* an error message. +* +*/ +class CCamFlashStatus: public CBase, + public MCamCameraObserver + //public MPropertyObserver + { + public: // Construction and destruction + + /** + * Two-phased constructor + */ + static CCamFlashStatus* NewL( CCamAppController& aController ); + + /** + * Destructor + */ + ~CCamFlashStatus(); + + public: // New functions + + /** + * Subscribes to flash icon blink events. At one time, only one + * observer can be listening for the events. An observer can + * unregister itself by giving NULL as aObserver parameter + * value. + * + * @param aObserver pointer to observer or NULL + */ + void Subscribe( MFlashStatusObserver* aObserver ); + + /** + * Returns true, if flash is fully charged, otherwise false + */ + TBool FlashReady() const; + + /** + * Returns true if there has been an error recharging the flash + */ + TBool FlashError() const; + + /** + * Set the value returned by FlashError. This may be needed + * before application pretended exit. + * @param aFlashError + */ + void SetFlashError( TBool aFlashError ); + + /** + * Returns true, if flash recharge error has already been + * reported to user. This eliminates the error displayed + * multiple times (for example, when switching between + * image and video modes) + */ + TBool ErrorCallbacksEnabled() const; + + /** + * Enable/disable flash error callbacks. Should be set to ETrue + * when error message is displayed to user, and to EFalse + * during pretended application exit. + * @param aErrorReported + */ + void EnableErrorCallbacks( TBool aCallbacksEnabled ); + + /** + * Returns true, if flash icon should be displayed, false + * otherwise. This cannot be used to determine the charging + * status of the flash. + */ + TBool FlashIconVisible() const; + + //public: // From MPropertyObserver + /** + * The value of a watched property has changed + * @param aCategory The category of the property + * @param aKey the Identifier of the property + */ + //void HandlePropertyChangedL( const TUid& aCategory, const TUint aKey ); + + public: // From MCamCameraObserver + + /** + * Handle camera event + */ + virtual void HandleCameraEventL( TInt aStatus, + TCamCameraEventId aEventId, + TAny* aEventData = NULL ); + + private: + + /** + * C++ default constructor + */ + CCamFlashStatus( CCamAppController& aController ); + + /** + * Second phase constructor + */ + void ConstructL(); + + /** + * Check if blinking needs to be stopped or started. + */ + void CheckBlinkingStatus(); + + /** + * Start flash icon blinking timer + */ + void StartBlinking(); + + /** + * Stop flash icon blinking timer, return + * the icon to invisible state. + */ + void StopBlinking(); + + /** + * Check if flash setting is off. + * Flash not ready events are ignored if flash setting is off. + */ + TBool IsFlashOff() const; + + /** + * Notifies observer about error, if necessary + */ + void NotifyObserverAboutFlashError(); + + /** + * Updates blink status of the flash icon. + * @param aThis + */ + static TInt BlinkTimerCallback( TAny* aSelf ); + + private: + + // Flash readiness to take a picture + TBool iFlashReady; + + // Flash is required to take a photo under current + // lighting conditions. + TBool iFlashRequired; + + // Flash recharging error status. + // If set to true, there has been an error in recharging + // the flash, and flash functionality is no more functional. + TBool iFlashError; + + // Determines whether cllabacks + TBool iErrorCallbacksEnabled; + + // Flash status observer. Typically the container where + // the flash icon resides. + MFlashStatusObserver* iObserver; + + // Timer used to create blinking effect of the flash icon + CPeriodic* iBlinkTimer; + + TBool iBlinking; + + // Icon visibility + // true - visible, EFalse - not visible + TBool iBlinkStatus; + + // Used for watching the flash P&S key + //CCamPropertyWatcher* iFlashPropertyWatcher; + + // Register for Camera events through controller. + CCamAppController& iController; + }; + +#endif // CAMFLASHSTATUS_H