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
82 emit changingMode( "Changing to Kiosk mode" );
85 // check if auto turn on/off functionality enabled and send turn on/off alarm events to alarm daemon
86 if ( iSettings->isPowersavingEnabled() )
88 if ( !iAlarmSender->sendAlarms( iSettings->turnOnAt(), iSettings->turnOffAt() ) )
90 handleKeyPresses( true );
91 return; //this is critical so returning if no success
95 // - disable the certain hw keys (only "home"-hw-key at the moment)
96 // - register init script to launch the application when ever the device is launched
97 // - disable the screen "auto-switch-off" and "dimming"
98 // - store info about the new operation mode
99 if ( !iConfigurator->toggleHWKeys( false ) ||
100 !iConfigurator->toggleInitScript( true ) ||
101 !iConfigurator->toggleScreenSwitchOff( false ) ||
102 !this->storeOperationMode( KioskMode ) ||
103 !iConfigurator->restartDevice() )
106 // we have to roll back if something fails
107 // of course rolling back may fail as well but it is impossible to catch
108 iSendErrorMessages = false;
109 iAlarmSender->removeAlarms();
110 iConfigurator->toggleHWKeys( true );
111 iConfigurator->toggleInitScript( false );
112 iConfigurator->toggleScreenSwitchOff( true );
113 iSendErrorMessages = true;
114 handleKeyPresses( true );
120 // change to StandAloneInProgress mode
122 // - enable the certain hw keys (only "home"-hw-key at the moment)
123 // - unregister the init script
124 // - enable the screen "auto-switch-off" and "dimming"
125 // - store info about the new operation mode
126 if ( !iConfigurator->toggleHWKeys( true ) ||
127 !iConfigurator->toggleScreenSwitchOff( true ) ||
128 !this->storeOperationMode( StandAloneModeInProgress ) ||
129 !iAlarmSender->removeStoredAlarms() ||
130 !iConfigurator->restartDevice() )
132 // we have to roll back if something fails
133 // of course rolling back may fail as well but it is impossible to catch
134 iSendErrorMessages = false;
135 iConfigurator->toggleHWKeys( false );
136 iConfigurator->toggleInitScript( true );
137 iConfigurator->toggleScreenSwitchOff( false );
138 this->storeOperationMode( KioskMode );
139 iSendErrorMessages = true;
140 handleKeyPresses( true );
145 default: // StandAloneModeInProgress should never come in question
150 bool DeviceManager::setCurrentOperationMode()
152 qDebug() << "DeviceManager::currentOperationMode()";
153 QStringList modeResult;
154 if ( !iDataStorage->readData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeResult ) )
156 errorSender( ModeNotFetched );
161 if ( !modeResult.empty() )
163 iMode = ( OperationMode )modeResult.at( 0 ).toInt();
164 if ( iMode == StandAloneModeInProgress )
166 if ( !finalizeStandAloneMode() )
169 iMode = StandAloneMode;
172 else //this must be the first time, so no mode info saved yet
173 iMode = StandAloneMode;
178 bool DeviceManager::storeOperationMode( OperationMode aMode )
180 qDebug() << "DeviceManager::storeOperationMode( const OperationMode & )";
181 QStringList modeStrList;
183 modeStrList.append( str.append( QString( "%1" ).arg( aMode ) ) );
184 if ( !iDataStorage->storeData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeStrList ) )
186 errorSender( ModeNotStored );
192 bool DeviceManager::finalizeStandAloneMode()
194 qDebug() << "DeviceManager::finalizeStandAloneMode()";
195 if ( !storeOperationMode( StandAloneMode ) || !iConfigurator->toggleInitScript( false ) )
200 void DeviceManager::handleKeyPresses( bool aHandle )
202 qDebug() << "DeviceManager::handleKeyPresses( bool )";
204 disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
206 connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
209 void DeviceManager::HWKeyFullScreenPressed()
211 qDebug() << "DeviceManager::HWKeyFullScreenPressed()";
213 // no more key presses before this one is handled
214 handleKeyPresses( false );
216 OperationMode nextMode;
220 nextMode = StandAloneMode;
223 nextMode = KioskMode;
226 nextMode = EmptyMode;
229 if ( nextMode != EmptyMode )
230 emit changeModeOrdered( nextMode );
232 handleKeyPresses( true );
235 void DeviceManager::errorSender( DeviceManager::ErrorCode aErrorCode, const QString &aAddInfo )
237 qDebug() << "DeviceManager::errorSender( ErrorCode, QString & )";
238 qDebug() << "DeviceManager::errorSender: aErrorCode == " << aErrorCode << " " << aAddInfo;
239 if ( !iSendErrorMessages )
242 emit error( ERROR_BASE + ( int )aErrorCode, aAddInfo );