#include "StartupSettings.h"
#include "DeviceDataStorage.h"
#include "DeviceConfigurator.h"
+#include "OperationModeToggler.h"
#include <QtDebug>
#include <QStringList>
DeviceManager::~DeviceManager()
{
qDebug() << "DeviceManager::~DeviceManager()";
+ delete iDataStorage;
+ iDataStorage = 0;
+ delete iAlarmSender;
+ iAlarmSender = 0;
+ delete iConfigurator;
+ iConfigurator = 0;
+ delete iDataStorage;
+ iDataStorage = 0;
+ delete iHWKeyListener;
+ iHWKeyListener = 0;
}
void DeviceManager::initDeviceManager()
handleKeyPresses( true );
return;
}
-
- switch ( iMode )
- {
- case EmptyMode:
- // error occured. Mode cannot be changed
- errorSender( ModeNotFetched );
- handleKeyPresses( true );
- break;
- case StandAloneMode:
-
- // change to KioskMode
- emit changingMode( "Changing to Kiosk mode" );
- while( 1 );
-
- // check if auto turn on/off functionality enabled and send turn on/off alarm events to alarm daemon
- if ( iSettings->isPowersavingEnabled() )
- {
- if ( !iAlarmSender->sendAlarms( iSettings->turnOnAt(), iSettings->turnOffAt() ) )
- {
- handleKeyPresses( true );
- return; //this is critical so returning if no success
- }
- }
-
- // - disable the certain hw keys (only "home"-hw-key at the moment)
- // - register init script to launch the application when ever the device is launched
- // - disable the screen "auto-switch-off" and "dimming"
- // - store info about the new operation mode
- if ( !iConfigurator->toggleHWKeys( false ) ||
- !iConfigurator->toggleInitScript( true ) ||
- !iConfigurator->toggleScreenSwitchOff( false ) ||
- !this->storeOperationMode( KioskMode ) ||
- !iConfigurator->restartDevice() )
- {
-
- // we have to roll back if something fails
- // of course rolling back may fail as well but it is impossible to catch
- iSendErrorMessages = false;
- iAlarmSender->removeAlarms();
- iConfigurator->toggleHWKeys( true );
- iConfigurator->toggleInitScript( false );
- iConfigurator->toggleScreenSwitchOff( true );
- iSendErrorMessages = true;
- handleKeyPresses( true );
- return;
- }
- break;
-
- case KioskMode:
- // change to StandAloneInProgress mode
-
- // - enable the certain hw keys (only "home"-hw-key at the moment)
- // - unregister the init script
- // - enable the screen "auto-switch-off" and "dimming"
- // - store info about the new operation mode
- if ( !iConfigurator->toggleHWKeys( true ) ||
- !iConfigurator->toggleScreenSwitchOff( true ) ||
- !this->storeOperationMode( StandAloneModeInProgress ) ||
- !iAlarmSender->removeStoredAlarms() ||
- !iConfigurator->restartDevice() )
- {
- // we have to roll back if something fails
- // of course rolling back may fail as well but it is impossible to catch
- iSendErrorMessages = false;
- iConfigurator->toggleHWKeys( false );
- iConfigurator->toggleInitScript( true );
- iConfigurator->toggleScreenSwitchOff( false );
- this->storeOperationMode( KioskMode );
- iSendErrorMessages = true;
- handleKeyPresses( true );
- return;
- }
-
- break;
- default: // StandAloneModeInProgress should never come in question
- break;
- }
+ 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()
{
- qDebug() << "DeviceManager::currentOperationMode()";
+ qDebug() << "DeviceManager::setCurrentOperationMode()";
QStringList modeResult;
if ( !iDataStorage->readData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeResult ) )
{
return true;
}
-bool DeviceManager::storeOperationMode( OperationMode aMode )
-{
- qDebug() << "DeviceManager::storeOperationMode( const OperationMode & )";
- QStringList modeStrList;
- QString str;
- modeStrList.append( str.append( QString( "%1" ).arg( aMode ) ) );
- if ( !iDataStorage->storeData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeStrList ) )
- {
- errorSender( ModeNotStored );
- return false;
- }
- return true;
-}
-
bool DeviceManager::finalizeStandAloneMode()
{
qDebug() << "DeviceManager::finalizeStandAloneMode()";
- if ( !storeOperationMode( StandAloneMode ) || !iConfigurator->toggleInitScript( false ) )
+ if ( !OperationModeToggler::storeOperationMode( StandAloneMode, iDataStorage ) || !iConfigurator->toggleInitScript( false ) ) {
+ errorSender( DeviceManager::ModeNotStored );
return false;
+ }
return true;
}
emit error( ERROR_BASE + ( int )aErrorCode, aAddInfo );
}
+
+void DeviceManager::toggleErrorSending( bool aToggle )
+{
+ qDebug() << "DeviceManager::toggleErrorSending( bool )";
+ iSendErrorMessages = aToggle;
+}
+
+void DeviceManager::modeChanged()
+{
+ qDebug() << "DeviceManager::modeChanged()";
+ if( iModeToggler != 0 ) {
+ if ( iModeToggler->success() ) //mode changing went well
+ iConfigurator->restartDevice();
+ else
+ emit changeModeFailed();
+ delete iModeToggler;
+ iModeToggler = 0;
+ }
+
+ //in case device restarting fails we just continue
+ handleKeyPresses( true );
+}