1 #include "DeviceManager.h"
2 #include "AlarmSender.h"
3 #include "HWKeyListener.h"
4 #include "StartupSettings.h"
5 #include "DeviceDataStorage.h"
6 #include "DeviceConfigurator.h"
11 DeviceManager::DeviceManager( StartupSettings *aSettings )
13 qDebug() << "DeviceManager::DeviceManager( StartupSettings * )";
15 iSettings = aSettings;
16 iSendErrorMessages = true;
19 DeviceManager::~DeviceManager()
21 qDebug() << "DeviceManager::~DeviceManager()";
24 void DeviceManager::initDeviceManager()
26 qDebug() << "DeviceManager::init()";
27 iDataStorage = new DeviceDataStorage();
28 connect( iDataStorage, SIGNAL( dataStorageInitFailed( DeviceManager::ErrorCode ) ),
29 this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
31 iAlarmSender = new AlarmSender( iDataStorage );
32 connect( iAlarmSender, SIGNAL( alarmSendingFailed( DeviceManager::ErrorCode, const QString& ) ),
33 this, SLOT( errorSender( DeviceManager::ErrorCode, const QString& ) ) );
35 iConfigurator = new DeviceConfigurator( iDataStorage );
36 connect( iConfigurator, SIGNAL( configuringError( DeviceManager::ErrorCode ) ),
37 this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
39 if ( !iDataStorage->initDataStorage() || !setCurrentOperationMode() )
42 iHWKeyListener = new HWKeyListener();
43 handleKeyPresses( true );
46 DeviceManager::OperationMode DeviceManager::currentOperationMode()
51 QString DeviceManager::operationModeToString( OperationMode aMode )
58 return "Stand Alone-mode";
64 void DeviceManager::changeMode( bool aChange )
66 qDebug() << "void DeviceManager::changeMode()";
68 handleKeyPresses( true );
75 // error occured. Mode cannot be changed
76 errorSender( ModeNotFetched );
77 handleKeyPresses( true );
81 // change to KioskMode
83 // check if auto turn on/off functionality enabled and send turn on/off alarm events to alarm daemon
84 if ( iSettings->isPowersavingEnabled() )
86 if ( !iAlarmSender->sendAlarms( iSettings->turnOnAt(), iSettings->turnOffAt() ) )
88 handleKeyPresses( true );
89 return; //this is critical so returning if no success
93 // - disable the certain hw keys (only "home"-hw-key at the moment)
94 // - register init script to launch the application when ever the device is launched
95 // - disable the screen "auto-switch-off" and "dimming"
96 // - store info about the new operation mode
97 if ( !iConfigurator->toggleHWKeys( false ) ||
98 !iConfigurator->toggleInitScript( true ) ||
99 !iConfigurator->toggleScreenSwitchOff( false ) ||
100 !this->storeOperationMode( KioskMode ) ||
101 !iConfigurator->restartDevice() )
104 // we have to roll back if something fails
105 // of course rolling back may fail as well but it is impossible to catch
106 iSendErrorMessages = false;
107 iAlarmSender->removeAlarms();
108 iConfigurator->toggleHWKeys( true );
109 iConfigurator->toggleInitScript( false );
110 iConfigurator->toggleScreenSwitchOff( true );
111 iSendErrorMessages = true;
112 handleKeyPresses( true );
118 // change to StandAloneInProgress mode
120 // - enable the certain hw keys (only "home"-hw-key at the moment)
121 // - unregister the init script
122 // - enable the screen "auto-switch-off" and "dimming"
123 // - store info about the new operation mode
124 if ( !iConfigurator->toggleHWKeys( true ) ||
125 !iConfigurator->toggleScreenSwitchOff( true ) ||
126 !this->storeOperationMode( StandAloneModeInProgress ) ||
127 !iAlarmSender->removeStoredAlarms() ||
128 !iConfigurator->restartDevice() )
130 // we have to roll back if something fails
131 // of course rolling back may fail as well but it is impossible to catch
132 iSendErrorMessages = false;
133 iConfigurator->toggleHWKeys( false );
134 iConfigurator->toggleInitScript( true );
135 iConfigurator->toggleScreenSwitchOff( false );
136 this->storeOperationMode( KioskMode );
137 iSendErrorMessages = true;
138 handleKeyPresses( true );
143 default: // StandAloneModeInProgress should never come in question
148 bool DeviceManager::setCurrentOperationMode()
150 qDebug() << "DeviceManager::currentOperationMode()";
151 QStringList modeResult;
152 if ( !iDataStorage->readData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeResult ) )
154 errorSender( ModeNotFetched );
159 if ( !modeResult.empty() )
161 iMode = ( OperationMode )modeResult.at( 0 ).toInt();
162 if ( iMode == StandAloneModeInProgress )
164 if ( !finalizeStandAloneMode() )
167 iMode = StandAloneMode;
170 else //this must be the first time, so no mode info saved yet
171 iMode = StandAloneMode;
176 bool DeviceManager::storeOperationMode( OperationMode aMode )
178 qDebug() << "DeviceManager::storeOperationMode( const OperationMode & )";
179 QStringList modeStrList;
181 modeStrList.append( str.append( QString( "%1" ).arg( aMode ) ) );
182 if ( !iDataStorage->storeData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeStrList ) )
184 errorSender( ModeNotStored );
190 bool DeviceManager::finalizeStandAloneMode()
192 qDebug() << "DeviceManager::finalizeStandAloneMode()";
193 if ( !storeOperationMode( StandAloneMode ) || !iConfigurator->toggleInitScript( false ) )
198 void DeviceManager::handleKeyPresses( bool aHandle )
200 qDebug() << "DeviceManager::handleKeyPresses( bool )";
202 disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
204 connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
207 void DeviceManager::HWKeyFullScreenPressed()
209 qDebug() << "DeviceManager::HWKeyFullScreenPressed()";
211 // no more key presses before this one is handled
212 handleKeyPresses( false );
214 OperationMode nextMode;
218 nextMode = StandAloneMode;
221 nextMode = KioskMode;
224 nextMode = EmptyMode;
227 if ( nextMode != EmptyMode )
228 emit changeModeOrdered( nextMode );
230 handleKeyPresses( true );
233 void DeviceManager::errorSender( DeviceManager::ErrorCode aErrorCode, const QString &aAddInfo )
235 qDebug() << "DeviceManager::errorSender( ErrorCode, QString & )";
236 qDebug() << "DeviceManager::errorSender: aErrorCode == " << aErrorCode << " " << aAddInfo;
237 if ( !iSendErrorMessages )
240 emit error( ERROR_BASE + ( int )aErrorCode, aAddInfo );