diff -r fb3763350a08 -r 4d54b72983ae taskswitcher/taskswitcherui/taskswitcherapp/inc/tsdevicestate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsdevicestate.h Tue Jan 26 11:48:23 2010 +0200 @@ -0,0 +1,227 @@ +/* +* Copyright (c) 2008 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: Device state (touch mode, screen orientation) handler + * +*/ + + +#ifndef TSDEVICESTATE_H_ +#define TSDEVICESTATE_H_ + +#include +#include "tsappui.h" +#include "tsproplistener.h" + +/** + * Interface for getting notifications about screen orientation + * and/or touch state etc. changes. + */ +class MTsDeviceStateObserver + { +public: + /** + * Type of change. + */ + enum TChangeType + { + // screen orientation (portrait <=> landscape) has changed + EOrientation = 0x01, + // touch enabled/disabled status has changed + ETouchState = 0x02, + // skin has changed + ESkin = 0x04, + // input device mode change + EDeviceType = 0x08, + // all of the above + EAny = 0xFF + }; + + /** + * Called when a change, to which the observer is registered, + * has happened. + */ + virtual void HandleDeviceStateChanged( TChangeType aChangeType ) = 0; + }; + +/** + * Class for keeping track of screen orientation and touch enabled/disabled changes. + */ +class CTsDeviceState : + public CBase, + public MTsPropertyChangeObserver + { +public: + /** + * Enumeration for TouchState(). + */ + enum TTouchState + { + ETouchEnabled, + ETouchDisabled + }; + + /** + * Enumeration for Orientation(). + */ + enum TOrientation + { + EPortrait, + ELandscape + }; + + /** + * Enumeration for DeviceType(). + */ + enum TDeviceType + { + EHybrid = 0, + EFullTouch = 1 + }; + + /** + * Creates a new instance. + */ + static CTsDeviceState* NewL(); + + /** + * Destructor. + */ + ~CTsDeviceState(); + + /** + * Returns the current state of touch awareness. + */ + TTouchState TouchState() const; + + /** + * Returns the current screen orientation. + */ + TOrientation Orientation() const; + + /** + * Returns the current device input type. + */ + TDeviceType DeviceType() const; + + /** + * Registers an observer. + * @param aObserver ref to observer + * (same observer can be added several times with different mask if needed) + * @param aMask bitmask composed from TChangeType values + * (when to notify the observer) + */ + void AddObserverL( MTsDeviceStateObserver& aObserver, TInt aMask ); + + /** + * Deregisters the given observer. + * @param aObserver ref to observer + */ + void RemoveObserver( MTsDeviceStateObserver& aObserver ); + + /** + * Called from appui. + */ + void HandleResourceChange( TInt aType ); + + //From MTsPropertyChangeObserver +public: + /** + * Observer interface for getting notifications about a P&S property change. + */ + virtual void PropertyChanged( TUid aCategory, TUint aKey ); +private: + /** + * Constructor. + */ + CTsDeviceState(); + + /** + * Performs 2nd phase construction. + */ + void ConstructL(); + + /** + * Checks if touch is enabled or not and performs + * appropriate actions. + */ + void CheckTouchState(); + + /** + * Checks the screen orientation and performs + * appropriate actions. + */ + void CheckOrientation(); + + /** + * Checks the device input type. + */ + void CheckDeviceType(); + + /** + * Notifies all observers that are registered for the given type. + */ + void NotifyObservers( MTsDeviceStateObserver::TChangeType aType ); + + class SObserver; + + /** + * Identity function to perform comparison between observer array items. + */ + static TBool ObserverIdentity( const SObserver& aA, const SObserver& aB ); + +private: + /** + * Current touch enabled/disabled state. + */ + TTouchState iTouchState; + + /** + * Current screen orientation. + */ + TOrientation iOrientation; + + /** + * Current the device input type. + */ + TDeviceType iDeviceType; + + /** + * Observer array entry struct. + */ + struct SObserver + { + TInt iMask; + MTsDeviceStateObserver* iObserver; // not owned + SObserver( TInt aMask, MTsDeviceStateObserver* aObserver ) + : iMask( aMask ), iObserver( aObserver ) { } + }; + + /** + * Observer array. + */ + RArray iObservers; + + /** + * Counter to indicate that we have not yet returned + * from a previous HandleResourceChange. + */ + TInt iResChangeActiveCount; + + /** + * Flip status change observer. + */ + CTsPropertyListener* iFlipStatusObserver; + }; + +#endif // TSDEVICESTATE_H_