Merge branch 'master' of https://git.maemo.org/projects/qtmeetings
[qtmeetings] / src / IO / DeviceControl / DeviceManager.cpp
index 3db5db7..518a7d3 100644 (file)
@@ -9,7 +9,13 @@
 #include <QtDebug>
 #include <QStringList>
 
-DeviceManager::DeviceManager( StartupSettings *aSettings )
+DeviceManager::DeviceManager( StartupSettings *aSettings ) :
+       iAlarmSender( 0 ),
+       iHWKeyListener( 0 ),
+       iSettings( 0 ),
+       iDataStorage( 0 ),
+       iConfigurator( 0 ),
+       iModeToggler( 0 )
 {
        qDebug() << "DeviceManager::DeviceManager( StartupSettings * )";
 
@@ -35,6 +41,9 @@ DeviceManager::~DeviceManager()
 void DeviceManager::initDeviceManager()
 {
        qDebug() << "DeviceManager::init()";
+       
+       qRegisterMetaType<DeviceManager::ErrorCode>("DeviceManager::ErrorCode");
+       
        iDataStorage = new DeviceDataStorage();
        connect( iDataStorage, SIGNAL( dataStorageInitFailed( DeviceManager::ErrorCode ) ),
                        this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
@@ -51,7 +60,7 @@ void DeviceManager::initDeviceManager()
                iMode = EmptyMode;
 
        iHWKeyListener = new HWKeyListener();
-       handleKeyPresses( true );
+       handleHWKeyPresses( true );
 }
 
 DeviceManager::OperationMode DeviceManager::currentOperationMode()
@@ -72,20 +81,18 @@ QString DeviceManager::operationModeToString( OperationMode aMode )
        }
 }
 
-void DeviceManager::changeMode( bool aChange )
+void DeviceManager::changeMode()
 {
        qDebug() << "void DeviceManager::changeMode()";
-       if( !aChange ) {
-               handleKeyPresses( true );
-               return;
+       if( iModeToggler == 0 ) {
+               iModeToggler = new OperationModeToggler( iMode, iSettings, iAlarmSender, iConfigurator, iDataStorage );
+               connect( iModeToggler, SIGNAL( finished() ), this, SLOT( modeChanged() ) );
+               connect( iModeToggler, SIGNAL( error( DeviceManager::ErrorCode, const QString & ) ),
+                               this, SLOT( errorSender( DeviceManager::ErrorCode, const QString & ) ) );
+               connect( iModeToggler, SIGNAL( changingMode( const QString & ) ), this, SIGNAL( changingMode( const QString & ) ) );
+               connect( iModeToggler, SIGNAL( toggleErrorSending( bool ) ), this, SLOT( toggleErrorSending( bool ) ) );
+               iModeToggler->start();
        }
-       iModeToggler = new OperationModeToggler( iMode, iSettings, iAlarmSender, iConfigurator, iDataStorage );
-       connect( iModeToggler, SIGNAL( finished() ), this, SLOT( modeChanged() ) );
-       connect( iModeToggler, SIGNAL( error( DeviceManager::ErrorCode, const QString & ) ),
-                       this, SLOT( errorSender( DeviceManager::ErrorCode, const QString & ) ) );
-       connect( iModeToggler, SIGNAL( changingMode( const QString & ) ), this, SIGNAL( changingMode( const QString & ) ) );
-       connect( iModeToggler, SIGNAL( toggleErrorSending( bool ) ), this, SLOT( toggleErrorSending( bool ) ) );
-       iModeToggler->start();
 }
 
 bool DeviceManager::setCurrentOperationMode()
@@ -126,25 +133,14 @@ bool DeviceManager::finalizeStandAloneMode()
        return true;
 }
 
-void DeviceManager::handleKeyPresses( bool aHandle )
-{
-       qDebug() << "DeviceManager::handleKeyPresses( bool )";
-       if ( !aHandle )
-               disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
-       else
-               connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
-}
-
 void DeviceManager::HWKeyFullScreenPressed()
 {
        qDebug() << "DeviceManager::HWKeyFullScreenPressed()";
-       
+       handleHWKeyPresses( false );
        // no more key presses before this one is handled
-       handleKeyPresses( false );
-       
+       //handleKeyPresses( false );
        OperationMode nextMode;
-       switch ( iMode )
-       {
+       switch ( iMode ) {
                case KioskMode:
                        nextMode = StandAloneMode;
                        break;
@@ -157,8 +153,6 @@ void DeviceManager::HWKeyFullScreenPressed()
        }
        if ( nextMode != EmptyMode )
                emit changeModeOrdered( nextMode );
-       else
-               handleKeyPresses( true );
 }
 
 void DeviceManager::errorSender( DeviceManager::ErrorCode aErrorCode, const QString &aAddInfo )
@@ -181,14 +175,24 @@ void DeviceManager::modeChanged()
 {
        qDebug() << "DeviceManager::modeChanged()";
        if( iModeToggler != 0 ) {
-               if ( iModeToggler->success() ) //mode changing went well
+               if ( iModeToggler->success() ) {//mode changing went well
+                       emit changingMode( "Restarting device" );
+                       sleep( 2 );
                        iConfigurator->restartDevice();
+               }
                else
                        emit changeModeFailed();
                delete iModeToggler;
                iModeToggler = 0;
        }
-       
-       //in case device restarting fails we just continue
-       handleKeyPresses( true );
+       handleHWKeyPresses( true );
+}
+
+void DeviceManager::handleHWKeyPresses( bool aToggle )
+{
+       qDebug() << "DeviceManager::handleHWKeyPresses( bool )";
+       if( aToggle )
+               connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
+       else
+               disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
 }