--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportdevicestate.h Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,228 @@
+/*
+ * ============================================================================
+ * Name : hgteleportdevicestate.h
+ * Part of : Hg Teleport
+ * Description : Device state (touch mode, screen orientation) handler
+ * Version : %version: sa1spcx1#11 %
+ *
+ * Copyright © 2008 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.
+ * ============================================================================
+ * Template version: 4.2
+ */
+
+#ifndef HGTELEPORTDEVICESTATE_H_
+#define HGTELEPORTDEVICESTATE_H_
+
+#include <e32base.h>
+#include "hgteleportappui.h"
+#include "hgproplistener.h"
+
+/**
+ * Interface for getting notifications about screen orientation
+ * and/or touch state etc. changes.
+ */
+class MHgDeviceStateObserver
+ {
+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 CHgTeleportDeviceState :
+ public CBase,
+ public MHgPropertyChangeObserver
+ {
+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 CHgTeleportDeviceState* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CHgTeleportDeviceState();
+
+ /**
+ * 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( MHgDeviceStateObserver& aObserver, TInt aMask );
+
+ /**
+ * Deregisters the given observer.
+ * @param aObserver ref to observer
+ */
+ void RemoveObserver( MHgDeviceStateObserver& aObserver );
+
+ /**
+ * Called from appui.
+ */
+ void HandleResourceChange( TInt aType );
+
+ //From MHgPropertyChangeObserver
+public:
+ /**
+ * Observer interface for getting notifications about a P&S property change.
+ */
+ virtual void PropertyChanged( TUid aCategory, TUint aKey );
+private:
+ /**
+ * Constructor.
+ */
+ CHgTeleportDeviceState();
+
+ /**
+ * 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( MHgDeviceStateObserver::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;
+ MHgDeviceStateObserver* iObserver; // not owned
+ SObserver( TInt aMask, MHgDeviceStateObserver* 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.
+ */
+ CHgPropertyListener* iFlipStatusObserver;
+ };
+
+#endif // HGTELEPORTDEVICESTATE_H_