--- /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 <e32base.h>
+#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<SObserver> 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_