diff -r f00a6757af32 -r 5f0182e07bfb homescreenapp/hsapplication/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/src/main.cpp Tue Aug 31 15:06:34 2010 +0300 @@ -0,0 +1,354 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Main. +* +*/ + +#include +#include +#include +#include +#include "hshomescreen.h" +#include "hstest_global.h" + +namespace +{ + const char TR_FILE_PATH[] = "resource/qt/translations"; +} + +#ifdef Q_OS_SYMBIAN + +#include +#include +#include +#include +#include +#include + +#include "hsrecoverymanager.h" + +void loadTranslationFilesOnSymbian(QTranslator &commonTranslator, + QTranslator &hsTranslator, + QTranslator &alTranslator); +void copyWallpapersFromRom(); +void copyHsDatabaseFileFromRom(); +void createPrivateFolder(); +void copyWallpaperOriginalsFromRomToPhotos(); + +/*! + \fn setHomescreenAsSystemAppL(CEikonEnv* eikonEnv) + \ingroup group_hsapplication + \internal + \brief TODO +*/ +void setHomescreenAsSystemAppL(CEikonEnv* eikonEnv) +{ + CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(eikonEnv->WsSession()); + wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down + wgName->SetCaptionL(_L("hsapplication")); + wgName->SetAppUid(TUid::Uid(0x20022F35)); + wgName->SetWindowGroupName(eikonEnv->RootWin()); + CleanupStack::PopAndDestroy(); +} + +/*! + \fn myMessageOutput(QtMsgType type, const char *msg) + \ingroup group_hsapplication + \internal + \brief TODO +*/ +void myMessageOutput(QtMsgType type, const char *msg) +{ + switch (type) { + + case QtDebugMsg: + RDebug::Printf("[HS] Debug: %s\n", msg); + break; + + case QtWarningMsg: + RDebug::Printf("[HS] Warning: %s\n", msg); + break; + + case QtCriticalMsg: + RDebug::Printf("[HS] Critical: %s\n", msg); + break; + + case QtFatalMsg: + RDebug::Printf("[HS] Fatal: %s\n", msg); + abort(); + } +} + +#endif //Q_OS_SYMBIAN + +/*! + \fn main(int argc, char *argv[]) + \ingroup group_hsapplication + \internal + \brief TODO +*/ +int main(int argc, char *argv[]) +{ +#ifdef Q_OS_SYMBIAN + qInstallMsgHandler(myMessageOutput); +#endif + + HSTEST_FUNC_ENTRY("HS::main()"); + + HbApplication app(argc, argv, Hb::NoSplash); + +#ifdef Q_OS_SYMBIAN + QString currentPath = QString(argv[0]).left(2); + QDir::setCurrent(currentPath); + QString debugMsg = "HS::main() - HsApplication's current dir set to: " + currentPath; + HSDEBUG(debugMsg); +#endif //Q_OS_SYMBIAN + + // add translator for homescreen and application library + QTranslator hsTranslator; + QTranslator alTranslator; + QTranslator commonTranslator; +#ifdef Q_OS_SYMBIAN + // TRAP is must here, otherwise it crashes + TRAP_IGNORE( loadTranslationFilesOnSymbian(commonTranslator, hsTranslator, alTranslator) ); +#else + QString locale = QLocale::system().name(); + QString hsTrFile = QString("homescreen_") + locale; + hsTranslator.load(hsTrFile, QString(TR_FILE_PATH) ); + QString alTrFile = QString("hsapplibrary_") + locale; + alTranslator.load(alTrFile, QString(TR_FILE_PATH) ); +#endif //Q_OS_SYMBIAN + qApp->installTranslator(&commonTranslator); + qApp->installTranslator(&hsTranslator); + qApp->installTranslator(&alTranslator); + +#ifdef Q_OS_SYMBIAN + copyHsDatabaseFileFromRom(); + HsRecoveryManager recoveryManager; + recoveryManager.execute(); + copyWallpapersFromRom(); +#endif + + HbMainWindow window; + window.setRenderHint(QPainter::SmoothPixmapTransform); + window.setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + + HsHomeScreen hs; + QObject::connect(&app, SIGNAL(aboutToQuit()) ,&hs, SLOT(stop())); + QObject::connect(&hs, SIGNAL(exit()), &app, SLOT(quit()),Qt::QueuedConnection); + hs.start(); + +#ifdef Q_OS_SYMBIAN + CEikonEnv * env = CEikonEnv::Static(); + TRAP_IGNORE(setHomescreenAsSystemAppL(env)); +#endif //Q_OS_SYMBIAN + + HSTEST("HS::main() call app.exec"); + try { + app.exec(); + } catch(...) { + HSTEST("HS::main() app.exec() catch"); + } + return 0; +} + +#ifdef Q_OS_SYMBIAN + +/*! + \fn createPrivateFolder() + \ingroup group_hsapplication + \internal + \brief Private folder creator + Creates private folder to c: drive if not exists yet. +*/ +void createPrivateFolder() +{ + QDir dir("c:/private/20022f35/"); + if(!dir.exists()) { + HSTEST("HS::main() - c:/private/20022f35/ does not exist."); + RFs fsSession; + if(fsSession.Connect() != KErrNone){ + HSTEST("HS::main() - Homescreen private dir creation failed!"); + } + fsSession.CreatePrivatePath(EDriveC); + HSTEST("HS::main() - c:/private/20022f35/ created."); + fsSession.Close(); + if(!dir.exists()) { + HSTEST("HS::main() - c:/private/20022f35/ creation failed."); + } + } + HSTEST("HS::main() - c:/private/20022f35/ exists."); +} + + +/*! + \fn copyHsDatabaseFileFromRom() + \ingroup group_hsapplication + \internal + \brief Database copier + Copies homescreen database from rom if database does not exist on c: drive +*/ +void copyHsDatabaseFileFromRom() +{ + QFile file("c:/private/20022f35/homescreen.db"); + //If DB file does not exist copy default DB from z: (ROM) + if(!file.exists()) { + HSTEST("HS::main() - homescreen.db not in c:"); + file.setFileName("z:/private/20022f35/homescreen.db"); + if(!file.exists()) { + qWarning() << "HS::main() - homescreen.db not in ROM!"; + } else { + HSTEST("HS::main() - homescreen.db found from z:"); + createPrivateFolder(); + //Copy DB from z: to c: + if (!file.copy("c:/private/20022f35/homescreen.db")) { + HSTEST("HS::main() - homescreen.db copy from ROM to c: failed!"); + } + HSTEST("HS::main() - homescreen.db copied from ROM to c:!"); + file.setFileName("c:/private/20022f35/homescreen.db"); + if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + qWarning() << "HS::main() - homescreen.db ReadWrite permission settings on c: failed!"; + } + HSTEST("HS::main() - homescreen.db permission set to ReadWrite!"); + } + // Copy wallpaper originals to C drive user data to be visible in Photos + copyWallpaperOriginalsFromRomToPhotos(); + } +#ifdef __WINS__ + else if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + HSTEST("HS::main() - homescreen.db ReadWrite permission settings on emulator's c: failed!"); + } +#endif + +} + +/*! + \fn copyWallpapersFromRom() + \ingroup group_hsapplication + \internal + \brief Wallpaper copier + Copies homescreen wallpapers from rom if wallpaper directory + does not exist on c: drive +*/ +void copyWallpapersFromRom() +{ + { + QDir dir("c:/private/20022f35/wallpapers/scene"); + if(!dir.exists()) { + dir.mkpath("c:/private/20022f35/wallpapers/scene"); + QDir dir2("z:/private/20022f35/wallpapers/scene"); + dir2.setFilter(QDir::Files); + QStringList files = dir2.entryList(); + foreach(QString file, files) + { + QString targetFile("c:/private/20022f35/wallpapers/scene/" + file); + if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { + qDebug() << "image copied" << dir2.absoluteFilePath(file); + } + QFile createdFile(targetFile); + if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + qDebug() << "read write permission set failed for file" << targetFile; + } + } + } + } + { + QDir dir("c:/private/20022f35/wallpapers/page"); + if(!dir.exists()) { + dir.mkpath("c:/private/20022f35/wallpapers/page"); + QDir dir2("z:/private/20022f35/wallpapers/page"); + dir2.setFilter(QDir::Files); + QStringList files = dir2.entryList(); + foreach(QString file, files) + { + QString targetFile("c:/private/20022f35/wallpapers/page/" + file); + if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { + qDebug() << "image copied" << dir2.absoluteFilePath(file); + } + QFile createdFile(targetFile); + if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + qDebug() << "read write permission set failed for file" << targetFile; + } + } + } + } +} + +/*! + \fn copyWallpaperOriginalFromRomToPhotos() + \ingroup group_hsapplication + \internal + \brief Wallpaper original copier + Copies homescreen wallpaper originals from rom to C for Photos + does not exist on c: drive +*/ +void copyWallpaperOriginalsFromRomToPhotos() +{ + QString targetPath("e:/data/images/wallpapers"); + QDir dir(targetPath); + if(!dir.exists()) { + dir.mkpath(targetPath); + QDir dir2("z:/private/20022f35/wallpapers/originals"); + dir2.setFilter(QDir::Files); + QStringList files = dir2.entryList(); + foreach(QString file, files) { + QString targetFile(targetPath + "/" + file); + if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { + qDebug() << "Wallpaper original copied from " << dir2.absoluteFilePath(file) << "to " << targetFile; + } + QFile createdFile(targetFile); + if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + qDebug() << "Read write permission set failed for wallpaper original" << targetFile; + } + } + } +} + +/*! + \fn loadTranslationFilesOnSymbian(QTranslator &commonTranslator, + QTranslator &hsTranslator, + QTranslator &alTranslator) + \ingroup group_hsapplication + \internal + \brief translation loader + Load translation files. +*/ +void loadTranslationFilesOnSymbian(QTranslator &commonTranslator, + QTranslator &hsTranslator, + QTranslator &alTranslator) +{ + QString locale = QLocale::system().name(); + bool commonLoaded(false); + QString commonTrFile = QString("common_") + locale; + commonLoaded = commonTranslator.load(commonTrFile, QString("z:/") + TR_FILE_PATH); + if (!commonLoaded) { + commonTranslator.load(commonTrFile, QString("c:/") + TR_FILE_PATH); + } + bool hsLoaded(false); + QString hsTrFile = QString("homescreen_") + locale; + hsLoaded = hsTranslator.load(hsTrFile, QString("z:/") + TR_FILE_PATH); + if (!hsLoaded) { + hsTranslator.load(hsTrFile, QString("c:/") + TR_FILE_PATH); + } + + bool alLoaded(false); + QString alTrFile = QString("hsapplibrary_") + locale; + alLoaded = alTranslator.load(alTrFile, QString("z:/") + TR_FILE_PATH); + if (!alLoaded) { + alTranslator.load(alTrFile, QString("c:/") + TR_FILE_PATH); + } + +} + +#endif