|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Main. |
|
15 * |
|
16 */ |
|
17 |
|
18 #include <QTranslator> |
|
19 #include <QMessageBox> |
|
20 #include <hbapplication.h> |
|
21 #include <hbmainwindow.h> |
|
22 #include "hshomescreen.h" |
|
23 #include "hstest_global.h" |
|
24 |
|
25 namespace |
|
26 { |
|
27 const char TR_FILE_PATH[] = "resource/qt/translations"; |
|
28 } |
|
29 |
|
30 #ifdef Q_OS_SYMBIAN |
|
31 |
|
32 #include <QFile> |
|
33 #include <QDir> |
|
34 #include <f32file.h> |
|
35 #include <eikenv.h> |
|
36 #include <e32debug.h> |
|
37 #include <apgwgnam.h> |
|
38 |
|
39 #include "hsrecoverymanager.h" |
|
40 |
|
41 void loadTranslationFilesOnSymbian(QTranslator &commonTranslator, |
|
42 QTranslator &hsTranslator, |
|
43 QTranslator &alTranslator); |
|
44 void copyWallpapersFromRom(); |
|
45 void copyHsDatabaseFileFromRom(); |
|
46 void createPrivateFolder(); |
|
47 void copyWallpaperOriginalsFromRomToPhotos(); |
|
48 |
|
49 /*! |
|
50 \fn setHomescreenAsSystemAppL(CEikonEnv* eikonEnv) |
|
51 \ingroup group_hsapplication |
|
52 \internal |
|
53 \brief TODO |
|
54 */ |
|
55 void setHomescreenAsSystemAppL(CEikonEnv* eikonEnv) |
|
56 { |
|
57 CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(eikonEnv->WsSession()); |
|
58 wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down |
|
59 wgName->SetCaptionL(_L("hsapplication")); |
|
60 wgName->SetAppUid(TUid::Uid(0x20022F35)); |
|
61 wgName->SetWindowGroupName(eikonEnv->RootWin()); |
|
62 CleanupStack::PopAndDestroy(); |
|
63 } |
|
64 |
|
65 /*! |
|
66 \fn myMessageOutput(QtMsgType type, const char *msg) |
|
67 \ingroup group_hsapplication |
|
68 \internal |
|
69 \brief TODO |
|
70 */ |
|
71 void myMessageOutput(QtMsgType type, const char *msg) |
|
72 { |
|
73 switch (type) { |
|
74 |
|
75 case QtDebugMsg: |
|
76 RDebug::Printf("[HS] Debug: %s\n", msg); |
|
77 break; |
|
78 |
|
79 case QtWarningMsg: |
|
80 RDebug::Printf("[HS] Warning: %s\n", msg); |
|
81 break; |
|
82 |
|
83 case QtCriticalMsg: |
|
84 RDebug::Printf("[HS] Critical: %s\n", msg); |
|
85 break; |
|
86 |
|
87 case QtFatalMsg: |
|
88 RDebug::Printf("[HS] Fatal: %s\n", msg); |
|
89 abort(); |
|
90 } |
|
91 } |
|
92 |
|
93 #endif //Q_OS_SYMBIAN |
|
94 |
|
95 /*! |
|
96 \fn main(int argc, char *argv[]) |
|
97 \ingroup group_hsapplication |
|
98 \internal |
|
99 \brief TODO |
|
100 */ |
|
101 int main(int argc, char *argv[]) |
|
102 { |
|
103 #ifdef Q_OS_SYMBIAN |
|
104 qInstallMsgHandler(myMessageOutput); |
|
105 #endif |
|
106 |
|
107 HSTEST_FUNC_ENTRY("HS::main()"); |
|
108 |
|
109 HbApplication app(argc, argv, Hb::NoSplash); |
|
110 |
|
111 #ifdef Q_OS_SYMBIAN |
|
112 QString currentPath = QString(argv[0]).left(2); |
|
113 QDir::setCurrent(currentPath); |
|
114 QString debugMsg = "HS::main() - HsApplication's current dir set to: " + currentPath; |
|
115 HSDEBUG(debugMsg); |
|
116 #endif //Q_OS_SYMBIAN |
|
117 |
|
118 // add translator for homescreen and application library |
|
119 QTranslator hsTranslator; |
|
120 QTranslator alTranslator; |
|
121 QTranslator commonTranslator; |
|
122 #ifdef Q_OS_SYMBIAN |
|
123 // TRAP is must here, otherwise it crashes |
|
124 TRAP_IGNORE( loadTranslationFilesOnSymbian(commonTranslator, hsTranslator, alTranslator) ); |
|
125 #else |
|
126 QString locale = QLocale::system().name(); |
|
127 QString hsTrFile = QString("homescreen_") + locale; |
|
128 hsTranslator.load(hsTrFile, QString(TR_FILE_PATH) ); |
|
129 QString alTrFile = QString("hsapplibrary_") + locale; |
|
130 alTranslator.load(alTrFile, QString(TR_FILE_PATH) ); |
|
131 #endif //Q_OS_SYMBIAN |
|
132 qApp->installTranslator(&commonTranslator); |
|
133 qApp->installTranslator(&hsTranslator); |
|
134 qApp->installTranslator(&alTranslator); |
|
135 |
|
136 #ifdef Q_OS_SYMBIAN |
|
137 copyHsDatabaseFileFromRom(); |
|
138 HsRecoveryManager recoveryManager; |
|
139 recoveryManager.execute(); |
|
140 copyWallpapersFromRom(); |
|
141 #endif |
|
142 |
|
143 HbMainWindow window; |
|
144 window.setRenderHint(QPainter::SmoothPixmapTransform); |
|
145 window.setViewportUpdateMode(QGraphicsView::FullViewportUpdate); |
|
146 |
|
147 HsHomeScreen hs; |
|
148 QObject::connect(&app, SIGNAL(aboutToQuit()) ,&hs, SLOT(stop())); |
|
149 QObject::connect(&hs, SIGNAL(exit()), &app, SLOT(quit()),Qt::QueuedConnection); |
|
150 hs.start(); |
|
151 |
|
152 #ifdef Q_OS_SYMBIAN |
|
153 CEikonEnv * env = CEikonEnv::Static(); |
|
154 TRAP_IGNORE(setHomescreenAsSystemAppL(env)); |
|
155 #endif //Q_OS_SYMBIAN |
|
156 |
|
157 HSTEST("HS::main() call app.exec"); |
|
158 try { |
|
159 app.exec(); |
|
160 } catch(...) { |
|
161 HSTEST("HS::main() app.exec() catch"); |
|
162 } |
|
163 return 0; |
|
164 } |
|
165 |
|
166 #ifdef Q_OS_SYMBIAN |
|
167 |
|
168 /*! |
|
169 \fn createPrivateFolder() |
|
170 \ingroup group_hsapplication |
|
171 \internal |
|
172 \brief Private folder creator |
|
173 Creates private folder to c: drive if not exists yet. |
|
174 */ |
|
175 void createPrivateFolder() |
|
176 { |
|
177 QDir dir("c:/private/20022f35/"); |
|
178 if(!dir.exists()) { |
|
179 HSTEST("HS::main() - c:/private/20022f35/ does not exist."); |
|
180 RFs fsSession; |
|
181 if(fsSession.Connect() != KErrNone){ |
|
182 HSTEST("HS::main() - Homescreen private dir creation failed!"); |
|
183 } |
|
184 fsSession.CreatePrivatePath(EDriveC); |
|
185 HSTEST("HS::main() - c:/private/20022f35/ created."); |
|
186 fsSession.Close(); |
|
187 if(!dir.exists()) { |
|
188 HSTEST("HS::main() - c:/private/20022f35/ creation failed."); |
|
189 } |
|
190 } |
|
191 HSTEST("HS::main() - c:/private/20022f35/ exists."); |
|
192 } |
|
193 |
|
194 |
|
195 /*! |
|
196 \fn copyHsDatabaseFileFromRom() |
|
197 \ingroup group_hsapplication |
|
198 \internal |
|
199 \brief Database copier |
|
200 Copies homescreen database from rom if database does not exist on c: drive |
|
201 */ |
|
202 void copyHsDatabaseFileFromRom() |
|
203 { |
|
204 QFile file("c:/private/20022f35/homescreen.db"); |
|
205 //If DB file does not exist copy default DB from z: (ROM) |
|
206 if(!file.exists()) { |
|
207 HSTEST("HS::main() - homescreen.db not in c:"); |
|
208 file.setFileName("z:/private/20022f35/homescreen.db"); |
|
209 if(!file.exists()) { |
|
210 qWarning() << "HS::main() - homescreen.db not in ROM!"; |
|
211 } else { |
|
212 HSTEST("HS::main() - homescreen.db found from z:"); |
|
213 createPrivateFolder(); |
|
214 //Copy DB from z: to c: |
|
215 if (!file.copy("c:/private/20022f35/homescreen.db")) { |
|
216 HSTEST("HS::main() - homescreen.db copy from ROM to c: failed!"); |
|
217 } |
|
218 HSTEST("HS::main() - homescreen.db copied from ROM to c:!"); |
|
219 file.setFileName("c:/private/20022f35/homescreen.db"); |
|
220 if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { |
|
221 qWarning() << "HS::main() - homescreen.db ReadWrite permission settings on c: failed!"; |
|
222 } |
|
223 HSTEST("HS::main() - homescreen.db permission set to ReadWrite!"); |
|
224 } |
|
225 // Copy wallpaper originals to C drive user data to be visible in Photos |
|
226 copyWallpaperOriginalsFromRomToPhotos(); |
|
227 } |
|
228 #ifdef __WINS__ |
|
229 else if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { |
|
230 HSTEST("HS::main() - homescreen.db ReadWrite permission settings on emulator's c: failed!"); |
|
231 } |
|
232 #endif |
|
233 |
|
234 } |
|
235 |
|
236 /*! |
|
237 \fn copyWallpapersFromRom() |
|
238 \ingroup group_hsapplication |
|
239 \internal |
|
240 \brief Wallpaper copier |
|
241 Copies homescreen wallpapers from rom if wallpaper directory |
|
242 does not exist on c: drive |
|
243 */ |
|
244 void copyWallpapersFromRom() |
|
245 { |
|
246 { |
|
247 QDir dir("c:/private/20022f35/wallpapers/scene"); |
|
248 if(!dir.exists()) { |
|
249 dir.mkpath("c:/private/20022f35/wallpapers/scene"); |
|
250 QDir dir2("z:/private/20022f35/wallpapers/scene"); |
|
251 dir2.setFilter(QDir::Files); |
|
252 QStringList files = dir2.entryList(); |
|
253 foreach(QString file, files) |
|
254 { |
|
255 QString targetFile("c:/private/20022f35/wallpapers/scene/" + file); |
|
256 if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { |
|
257 qDebug() << "image copied" << dir2.absoluteFilePath(file); |
|
258 } |
|
259 QFile createdFile(targetFile); |
|
260 if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { |
|
261 qDebug() << "read write permission set failed for file" << targetFile; |
|
262 } |
|
263 } |
|
264 } |
|
265 } |
|
266 { |
|
267 QDir dir("c:/private/20022f35/wallpapers/page"); |
|
268 if(!dir.exists()) { |
|
269 dir.mkpath("c:/private/20022f35/wallpapers/page"); |
|
270 QDir dir2("z:/private/20022f35/wallpapers/page"); |
|
271 dir2.setFilter(QDir::Files); |
|
272 QStringList files = dir2.entryList(); |
|
273 foreach(QString file, files) |
|
274 { |
|
275 QString targetFile("c:/private/20022f35/wallpapers/page/" + file); |
|
276 if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { |
|
277 qDebug() << "image copied" << dir2.absoluteFilePath(file); |
|
278 } |
|
279 QFile createdFile(targetFile); |
|
280 if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { |
|
281 qDebug() << "read write permission set failed for file" << targetFile; |
|
282 } |
|
283 } |
|
284 } |
|
285 } |
|
286 } |
|
287 |
|
288 /*! |
|
289 \fn copyWallpaperOriginalFromRomToPhotos() |
|
290 \ingroup group_hsapplication |
|
291 \internal |
|
292 \brief Wallpaper original copier |
|
293 Copies homescreen wallpaper originals from rom to C for Photos |
|
294 does not exist on c: drive |
|
295 */ |
|
296 void copyWallpaperOriginalsFromRomToPhotos() |
|
297 { |
|
298 QString targetPath("e:/data/images/wallpapers"); |
|
299 QDir dir(targetPath); |
|
300 if(!dir.exists()) { |
|
301 dir.mkpath(targetPath); |
|
302 QDir dir2("z:/private/20022f35/wallpapers/originals"); |
|
303 dir2.setFilter(QDir::Files); |
|
304 QStringList files = dir2.entryList(); |
|
305 foreach(QString file, files) { |
|
306 QString targetFile(targetPath + "/" + file); |
|
307 if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { |
|
308 qDebug() << "Wallpaper original copied from " << dir2.absoluteFilePath(file) << "to " << targetFile; |
|
309 } |
|
310 QFile createdFile(targetFile); |
|
311 if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { |
|
312 qDebug() << "Read write permission set failed for wallpaper original" << targetFile; |
|
313 } |
|
314 } |
|
315 } |
|
316 } |
|
317 |
|
318 /*! |
|
319 \fn loadTranslationFilesOnSymbian(QTranslator &commonTranslator, |
|
320 QTranslator &hsTranslator, |
|
321 QTranslator &alTranslator) |
|
322 \ingroup group_hsapplication |
|
323 \internal |
|
324 \brief translation loader |
|
325 Load translation files. |
|
326 */ |
|
327 void loadTranslationFilesOnSymbian(QTranslator &commonTranslator, |
|
328 QTranslator &hsTranslator, |
|
329 QTranslator &alTranslator) |
|
330 { |
|
331 QString locale = QLocale::system().name(); |
|
332 bool commonLoaded(false); |
|
333 QString commonTrFile = QString("common_") + locale; |
|
334 commonLoaded = commonTranslator.load(commonTrFile, QString("z:/") + TR_FILE_PATH); |
|
335 if (!commonLoaded) { |
|
336 commonTranslator.load(commonTrFile, QString("c:/") + TR_FILE_PATH); |
|
337 } |
|
338 bool hsLoaded(false); |
|
339 QString hsTrFile = QString("homescreen_") + locale; |
|
340 hsLoaded = hsTranslator.load(hsTrFile, QString("z:/") + TR_FILE_PATH); |
|
341 if (!hsLoaded) { |
|
342 hsTranslator.load(hsTrFile, QString("c:/") + TR_FILE_PATH); |
|
343 } |
|
344 |
|
345 bool alLoaded(false); |
|
346 QString alTrFile = QString("hsapplibrary_") + locale; |
|
347 alLoaded = alTranslator.load(alTrFile, QString("z:/") + TR_FILE_PATH); |
|
348 if (!alLoaded) { |
|
349 alTranslator.load(alTrFile, QString("c:/") + TR_FILE_PATH); |
|
350 } |
|
351 |
|
352 } |
|
353 |
|
354 #endif |