homescreenapp/hsapplication/src/main.cpp
branchRCL_3
changeset 82 5f0182e07bfb
--- /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 <QTranslator>
+#include <QMessageBox>
+#include <hbapplication.h>
+#include <hbmainwindow.h>
+#include "hshomescreen.h"
+#include "hstest_global.h"
+
+namespace
+{
+    const char TR_FILE_PATH[] = "resource/qt/translations";
+}
+
+#ifdef Q_OS_SYMBIAN
+
+#include <QFile>
+#include <QDir>
+#include <f32file.h>
+#include <eikenv.h>
+#include <e32debug.h>
+#include <apgwgnam.h>
+
+#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