homescreenapp/hsapplication/src/main.cpp
branchRCL_3
changeset 82 5f0182e07bfb
equal deleted inserted replaced
79:f00a6757af32 82:5f0182e07bfb
       
     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