homescreenapp/hsapplication/src/main.cpp
changeset 36 cdae8c6c3876
parent 35 f9ce957a272c
child 39 4e8ebe173323
equal deleted inserted replaced
35:f9ce957a272c 36:cdae8c6c3876
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:  Main.
    14 * Description:  Main.
    15 *
    15 *
    16 */
    16 */
       
    17 
    17 #include <QTranslator>
    18 #include <QTranslator>
    18 #include <QMessageBox>
    19 #include <QMessageBox>
    19 #include <hbapplication.h>
    20 #include <hbapplication.h>
    20 #include <hbmainwindow.h>
    21 #include <hbmainwindow.h>
    21 #include "hshomescreen.h"
    22 #include "hshomescreen.h"
    34 #include <f32file.h>
    35 #include <f32file.h>
    35 #include <eikenv.h>
    36 #include <eikenv.h>
    36 #include <e32debug.h>
    37 #include <e32debug.h>
    37 #include <apgwgnam.h>
    38 #include <apgwgnam.h>
    38 
    39 
       
    40 
       
    41 void loadTranslationFilesOnSymbian(QTranslator &hsTranslator, QTranslator &alTranslator);
       
    42 void copyWallpapersFromRom();
       
    43 void copyHsDatabaseFileFromRom();
       
    44 void createPrivateFolder();
       
    45 
    39 // it is temporary class used for getting notifcation about APA messages
    46 // it is temporary class used for getting notifcation about APA messages
    40 // it is used for processing message send by AVKON to activate Menu
    47 // it is used for processing message send by AVKON to activate Menu
    41 class HsMessageObserver: public MCoeMessageObserver {
    48 class HsMessageObserver: public MCoeMessageObserver {
    42 
    49 
    43 TMessageResponse HandleMessageL(TUint32 /*aClientHandleOfTargetWindowGroup*/,
    50 TMessageResponse HandleMessageL(TUint32 /*aClientHandleOfTargetWindowGroup*/,
    52 
    59 
    53 void setHomescreenAsSystemAppL(CEikonEnv* eikonEnv)
    60 void setHomescreenAsSystemAppL(CEikonEnv* eikonEnv)
    54 {
    61 {
    55     CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(eikonEnv->WsSession());
    62     CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(eikonEnv->WsSession());
    56     wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down
    63     wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down
    57     wgName->SetCaptionL(_L("HsApplication"));
    64     wgName->SetCaptionL(_L("hsapplication"));
    58     wgName->SetAppUid(TUid::Uid(0x20022F35));
    65     wgName->SetAppUid(TUid::Uid(0x20022F35));
    59     wgName->SetWindowGroupName(eikonEnv->RootWin());
    66     wgName->SetWindowGroupName(eikonEnv->RootWin());
    60     CleanupStack::PopAndDestroy();
    67     CleanupStack::PopAndDestroy();
    61 }
    68 }
    62 
    69 
    63 
       
    64 
       
    65 void myMessageOutput(QtMsgType type, const char *msg)
    70 void myMessageOutput(QtMsgType type, const char *msg)
    66 {
    71 {
    67     switch (type) {
    72     switch (type) {
    68 
    73 
    69     case QtDebugMsg:
    74     case QtDebugMsg:
    84     }
    89     }
    85 }
    90 }
    86 
    91 
    87 #endif //Q_OS_SYMBIAN
    92 #endif //Q_OS_SYMBIAN
    88 
    93 
    89 
    94 /*!
    90 
    95 
    91 
    96 */
    92 // ---------------------------------------------------------------------------
       
    93 // ---------------------------------------------------------------------------
       
    94 //
       
    95 int main(int argc, char *argv[])
    97 int main(int argc, char *argv[])
    96 {
    98 {
    97 #ifdef Q_OS_SYMBIAN
    99 #ifdef Q_OS_SYMBIAN
    98      qInstallMsgHandler(myMessageOutput);
   100      qInstallMsgHandler(myMessageOutput);
    99 #endif
   101 #endif
   109     HSDEBUG(debugMsg);
   111     HSDEBUG(debugMsg);
   110 #endif //Q_OS_SYMBIAN
   112 #endif //Q_OS_SYMBIAN
   111 
   113 
   112     HsAppTranslator *appTranslator = HsAppTranslator::instance();
   114     HsAppTranslator *appTranslator = HsAppTranslator::instance();
   113     appTranslator->setLanguage();
   115     appTranslator->setLanguage();
   114 
   116     
   115     // add translator for homescreen and application library
   117     // add translator for homescreen and application library
       
   118     QTranslator hsTranslator;
       
   119     QTranslator alTranslator;
       
   120 #ifdef Q_OS_SYMBIAN
       
   121     // TRAP is must here, otherwise it crashes
       
   122     TRAP_IGNORE( loadTranslationFilesOnSymbian(hsTranslator, alTranslator) );
       
   123 #else
   116     QString locale = QLocale::system().name();
   124     QString locale = QLocale::system().name();
   117 
       
   118     QTranslator hsTranslator;
       
   119     QString hsTrFile = QString("homescreen_") + locale;
   125     QString hsTrFile = QString("homescreen_") + locale;
   120 
   126     hsTranslator.load(hsTrFile, QString(TR_FILE_PATH) );
   121     QTranslator alTranslator;
       
   122     QString alTrFile = QString("hsapplibrary_") + locale;
   127     QString alTrFile = QString("hsapplibrary_") + locale;
   123 #ifdef Q_OS_SYMBIAN
       
   124     // TRAP is must here, otherwise it crashes
       
   125 TRAP_IGNORE(
       
   126     bool hsLoaded(false);
       
   127     hsLoaded = hsTranslator.load(hsTrFile, QString("z:/") + TR_FILE_PATH);
       
   128     if (!hsLoaded)
       
   129         hsTranslator.load(hsTrFile, QString("c:/") + TR_FILE_PATH);
       
   130 
       
   131     bool alLoaded(false);
       
   132     alLoaded = alTranslator.load(alTrFile, QString("z:/") + TR_FILE_PATH);
       
   133     if (!alLoaded)
       
   134         alTranslator.load(alTrFile, QString("c:/") + TR_FILE_PATH);
       
   135 );
       
   136 #else
       
   137     hsTranslator.load(hsTrFile, QString(TR_FILE_PATH) );
       
   138     alTranslator.load(alTrFile, QString(TR_FILE_PATH) );
   128     alTranslator.load(alTrFile, QString(TR_FILE_PATH) );
   139 #endif //Q_OS_SYMBIAN
   129 #endif //Q_OS_SYMBIAN
   140     app.installTranslator(&hsTranslator);
   130     qApp->installTranslator(&hsTranslator);
   141     app.installTranslator(&alTranslator);
   131     qApp->installTranslator(&alTranslator);
   142 
   132     
   143 #ifdef Q_OS_SYMBIAN
   133 #ifdef Q_OS_SYMBIAN
   144     QFile file("c:/private/20022f35/homescreendb");
   134     copyHsDatabaseFileFromRom();
       
   135     copyWallpapersFromRom();
       
   136 #endif
       
   137     
       
   138     HbMainWindow window;
       
   139     window.setRenderHint(QPainter::SmoothPixmapTransform);
       
   140         
       
   141     HsHomeScreen hs;
       
   142     QObject::connect(&app, SIGNAL(aboutToQuit()) ,&hs, SLOT(stop()));
       
   143     QObject::connect(&hs, SIGNAL(exit()), &app, SLOT(quit()),Qt::QueuedConnection);
       
   144     hs.start();
       
   145 
       
   146     app.installEventFilter(appTranslator);
       
   147 
       
   148 #ifdef Q_OS_SYMBIAN
       
   149     CEikonEnv * env = CEikonEnv::Static();
       
   150 #ifdef S60APP_KEY
       
   151     env->RootWin().CaptureKeyUpAndDowns( EStdKeyApplication0, 0, 0 );
       
   152 #endif //S60APP_KEY
       
   153     TRAP_IGNORE(setHomescreenAsSystemAppL(env));
       
   154     HsMessageObserver observer;
       
   155     TRAP_IGNORE( env->AddMessageObserverL(observer));
       
   156 #endif //Q_OS_SYMBIAN
       
   157 
       
   158     HSTEST("HS::main() call app.exec");
       
   159     try {
       
   160         app.exec();
       
   161     } catch(...) {
       
   162         HSTEST("HS::main() app.exec() catch");
       
   163     }
       
   164     return 0;
       
   165 }
       
   166 
       
   167 #ifdef Q_OS_SYMBIAN
       
   168 
       
   169 /*!
       
   170  * Creates private folder to c: drive if not exists yet.
       
   171  */
       
   172 void createPrivateFolder()
       
   173 {
       
   174     QDir dir("c:/private/20022f35/");
       
   175     if(!dir.exists()) {
       
   176         HSTEST("HS::main() - c:/private/20022f35/ does not exist.");
       
   177         RFs fsSession;
       
   178         if(fsSession.Connect() != KErrNone){
       
   179             HSTEST("HS::main() - Homescreen private dir creation failed!");
       
   180         }
       
   181         fsSession.CreatePrivatePath(EDriveC);
       
   182         HSTEST("HS::main() - c:/private/20022f35/ created.");
       
   183         fsSession.Close();
       
   184         if(!dir.exists()) {
       
   185             HSTEST("HS::main() - c:/private/20022f35/ creation failed.");
       
   186         }
       
   187     }
       
   188     HSTEST("HS::main() - c:/private/20022f35/ exists.");
       
   189 }
       
   190 
       
   191 /*!
       
   192  * Copies homescreen database from rom if database does not exist on c: drive
       
   193  */
       
   194 void copyHsDatabaseFileFromRom()
       
   195 {
       
   196     QFile file("c:/private/20022f35/homescreen.db");
   145     //If DB file does not exist copy default DB from z: (ROM)
   197     //If DB file does not exist copy default DB from z: (ROM)
   146     if(!file.exists()) {
   198     if(!file.exists()) {
   147         HSTEST("HS::main() - homescreendb not in c:");
   199         HSTEST("HS::main() - homescreen.db not in c:");
   148         file.setFileName("z:/private/20022f35/homescreendb");
   200         file.setFileName("z:/private/20022f35/homescreen.db");
   149         if(!file.exists()) {
   201         if(!file.exists()) {
   150             HSTEST("HS::main() - homescreendb not in ROM!");
   202             HSTEST("HS::main() - homescreen.db not in ROM!");
   151         }
   203         } else {
   152         else {
   204             HSTEST("HS::main() - homescreen.db found from z:");
   153             HSTEST("HS::main() - homescreendb found from z:");
   205             createPrivateFolder();
   154             //We need to first create private folder if not exists
   206             //Copy DB from z: to c:
   155             QDir dir("c:/private/20022f35/");
   207             if (!file.copy("c:/private/20022f35/homescreen.db")) {
   156             if(!dir.exists()) {
   208                 HSTEST("HS::main() - homescreen.db copy from ROM to c: failed!");
   157                 HSTEST("HS::main() - c:/private/20022f35/ does not exist.");
       
   158                 RFs fsSession;
       
   159                 if(fsSession.Connect() != KErrNone){
       
   160                     HSTEST("HS::main() - Homescreen private dir creation failed!");
       
   161                 }
       
   162                 fsSession.CreatePrivatePath(EDriveC);
       
   163                 HSTEST("HS::main() - c:/private/20022f35/ created.");
       
   164                 fsSession.Close();
       
   165                 if(!dir.exists()) {
       
   166                     HSTEST("HS::main() - c:/private/20022f35/ creation failed.");
       
   167                 }
       
   168             }
   209             }
   169             HSTEST("HS::main() - c:/private/20022f35/ exists.");
   210             HSTEST("HS::main() - homescreen.db copied from ROM to c:!");
   170             //Copy DB from z: to c:
   211             file.setFileName("c:/private/20022f35/homescreen.db");
   171             if (!file.copy("c:/private/20022f35/homescreendb")) {
   212             if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) {
   172                 HSTEST("HS::main() - homescreendb copy from ROM to c: failed!");
   213                 HSTEST("HS::main() - homescreen.db ReadWrite permission settings on c: failed!");
   173             }
   214             }
   174             HSTEST("HS::main() - homescreendb copied from ROM to c:!");
   215             HSTEST("HS::main() - homescreen.db permission set to ReadWrite!");
   175             file.setFileName("c:/private/20022f35/homescreendb");
       
   176             if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) {
       
   177                 HSTEST("HS::main() - homescreendb ReadWrite permission settings on c: failed!");
       
   178             }
       
   179             HSTEST("HS::main() - homescreendb permission set to ReadWrite!");
       
   180         }
   216         }
   181     }
   217     }
   182 #ifdef __WINS__
   218 #ifdef __WINS__
   183     else if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) {
   219     else if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) {
   184         HSTEST("HS::main() - homescreendb ReadWrite permission settings on emulator's c: failed!");
   220         HSTEST("HS::main() - homescreen.db ReadWrite permission settings on emulator's c: failed!");
   185     }
   221     }
   186 #endif
   222 #endif
   187     {
   223     
       
   224 }
       
   225 
       
   226 /*!
       
   227  * Copies homescreen wallpapers from rom if wallpaper directory does not exist on c: drive
       
   228  */
       
   229 void copyWallpapersFromRom()
       
   230 {
   188     QDir dir("c:/private/20022f35/wallpapers");
   231     QDir dir("c:/private/20022f35/wallpapers");
   189     if(!dir.exists()) {
   232     if(!dir.exists()) {
   190         dir.mkpath("c:/private/20022f35/wallpapers/");
   233         dir.mkpath("c:/private/20022f35/wallpapers/");
   191         QDir dir2("z:/private/20022f35/wallpapers");
   234         QDir dir2("z:/private/20022f35/wallpapers");
   192         dir2.setFilter(QDir::Files);
   235         dir2.setFilter(QDir::Files);
   193         QStringList files = dir2.entryList();
   236         QStringList files = dir2.entryList();
   194         foreach(QString file, files)
   237         foreach(QString file, files)
   195         {
   238         {
   196             QString targetFile("c:/private/20022f35/wallpapers/" + file);
   239             QString targetFile("c:/private/20022f35/wallpapers/" + file);
   197             QFile::copy(dir2.absoluteFilePath(file), targetFile);
   240             if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) {
   198             qDebug() << "image copied" << dir2.absoluteFilePath(file);
   241                 qDebug() << "image copied" << dir2.absoluteFilePath(file);
       
   242             } 
   199             QFile createdFile(targetFile);
   243             QFile createdFile(targetFile);
   200             if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) {
   244             if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) {
   201                 qDebug() << "read write permission set failed for file" << targetFile;
   245                 qDebug() << "read write permission set failed for file" << targetFile;
   202             }
   246             }
   203         }
   247         }
   204 
   248     }
   205     }
   249 }
   206 
   250 
   207 
   251 /*!
   208     }
   252  * Load translation files.
   209 
   253  */
   210 #endif //Q_OS_SYMBIAN
   254 void loadTranslationFilesOnSymbian(QTranslator &hsTranslator, QTranslator &alTranslator)
   211 
   255 {
   212     HbMainWindow window;
   256     bool hsLoaded(false);
   213     window.setViewSwitchingEnabled(false);
   257     QString locale = QLocale::system().name();
   214     
   258     QString hsTrFile = QString("homescreen_") + locale;
   215     HsHomeScreen hs;
   259     hsLoaded = hsTranslator.load(hsTrFile, QString("z:/") + TR_FILE_PATH);
   216     QObject::connect(&app, SIGNAL(aboutToQuit()) ,&hs, SLOT(stop()));
   260     if (!hsLoaded) {
   217     QObject::connect(&hs, SIGNAL(exit()), &app, SLOT(quit()),Qt::QueuedConnection);
   261         hsTranslator.load(hsTrFile, QString("c:/") + TR_FILE_PATH);
   218     hs.start();
   262     }
   219 
   263 
   220     app.installEventFilter(appTranslator);
   264     bool alLoaded(false);
   221 
   265     QString alTrFile = QString("hsapplibrary_") + locale;
   222 #ifdef Q_OS_SYMBIAN
   266     alLoaded = alTranslator.load(alTrFile, QString("z:/") + TR_FILE_PATH);
   223     CEikonEnv * env = CEikonEnv::Static();
   267     if (!alLoaded) {
   224 #ifdef S60APP_KEY
   268         alTranslator.load(alTrFile, QString("c:/") + TR_FILE_PATH);
   225     env->RootWin().CaptureKeyUpAndDowns( EStdKeyApplication0, 0, 0 );
   269     }
   226 #endif //S60APP_KEY
   270     
   227     TRAP_IGNORE(setHomescreenAsSystemAppL(env));
   271 }
   228     HsMessageObserver observer;
   272 
   229     TRAP_IGNORE( env->AddMessageObserverL(observer));
   273 #endif
   230 #endif //Q_OS_SYMBIAN
       
   231 
       
   232     HSTEST("HS::main() call app.exec");
       
   233     try {
       
   234         app.exec();
       
   235 
       
   236     } catch(...) {
       
   237         HSTEST("HS::main() app.exec() catch");
       
   238     }
       
   239     return 0;
       
   240 }
       
   241 
       
   242