activityfw/testapplications/activitydebugger/activitydebuger.cpp
changeset 117 c63ee96dbe5f
equal deleted inserted replaced
115:3ab5c078b490 117:c63ee96dbe5f
       
     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:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "activitydebuger.h"
       
    19 
       
    20 #include <QGridLayout>
       
    21 #include <HbLabel>
       
    22 #include <HbPushButton>
       
    23 #include <QCoreApplication>
       
    24 #include <QSignalMapper>
       
    25 #include <QVariant>
       
    26 #include <QList>
       
    27 #include <QVariantHash>
       
    28 #include <HbComboBox>
       
    29 #include <QBrush>
       
    30 #include <QPalette>
       
    31 #include <QGraphicsGridLayout>
       
    32 #include <QTimer>
       
    33 #include <e32std.h>
       
    34 #include <HbInstance>
       
    35 
       
    36 #include <qservicemanager.h>
       
    37 #include "activitydebugerconsole.h"
       
    38 
       
    39 const char ActivityApplicationKeyword [] = ":ApplicationId";
       
    40 const char ActivityActivityKeyword [] = ":ActivityName";
       
    41 const char ActivityScreenshotKeyword [] = "screenshot";
       
    42 
       
    43 QTM_USE_NAMESPACE
       
    44 
       
    45 ActivityDebuger::ActivityDebuger(QGraphicsItem *parent) : HbView(parent), mActivityClient(NULL), mByteArray(NULL)
       
    46 {
       
    47     mThumbwait = 0;
       
    48     mThumbnull = 0;
       
    49     mThumbcurrent = 0;
       
    50     QServiceManager serviceManager;
       
    51     serviceManager.addService(":/activityserviceplugin.xml");
       
    52     mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient");
       
    53     if (!mActivityClient) {
       
    54         qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityClient service.");
       
    55     }
       
    56 
       
    57     mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager");
       
    58     if (!mActivityManager) {
       
    59         qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service.");
       
    60     }
       
    61     mTimesLabel = new HbLabel("Times");
       
    62     mBytesLabel = new HbLabel("Bytes");
       
    63     mPixmapLabel = new HbLabel("Pixmap");    
       
    64     mSizeLabel = new HbLabel("Size(WxH)");
       
    65 
       
    66     mPixmap = new QPixmap(":/images/wolf.bmp");
       
    67     mPixmap2 = new QPixmap(":/images/bird.bmp");
       
    68     mEmptyPixmap = new QPixmap();
       
    69 
       
    70 
       
    71     mTimesCombo = new HbComboBox();
       
    72     mLengthCombo = new HbComboBox();
       
    73     mPixmapCombo = new HbComboBox();
       
    74     mWidthCombo = new HbComboBox();
       
    75     mHeightCombo = new HbComboBox();
       
    76 
       
    77     mTimesCombo->addItem("1");
       
    78     mTimesCombo->addItem("2");
       
    79     mTimesCombo->addItem("4");
       
    80     mTimesCombo->addItem("5");
       
    81     mTimesCombo->addItem("10");
       
    82     mTimesCombo->addItem("20");
       
    83     mTimesCombo->addItem("40");
       
    84     mTimesCombo->addItem("60");
       
    85 
       
    86     QVariant variant;
       
    87     variant = 10;
       
    88     mLengthCombo->addItem("10 B", variant);
       
    89     variant = 100;
       
    90     mLengthCombo->addItem("100 B", variant);
       
    91     variant = 1024;
       
    92     mLengthCombo->addItem("1 KB", variant);
       
    93     variant = 10240;
       
    94     mLengthCombo->addItem("10 KB", variant);
       
    95     variant = 102400;
       
    96     mLengthCombo->addItem("100 KB", variant);
       
    97     variant = 1024*1024;
       
    98     mLengthCombo->addItem("1 MB", variant);
       
    99     
       
   100     mWidthCombo->addItem("360");
       
   101     mWidthCombo->addItem("180");
       
   102     mWidthCombo->addItem("128");
       
   103     mWidthCombo->addItem("90");
       
   104     
       
   105     mHeightCombo->addItem("640");
       
   106     mHeightCombo->addItem("320");
       
   107     mHeightCombo->addItem("160");
       
   108     mHeightCombo->addItem("128");
       
   109     
       
   110 
       
   111     mPixmapCombo->addItem("no");
       
   112     mPixmapCombo->addItem("yes");
       
   113     mPixmapCombo->addItem("grab");
       
   114 
       
   115     mSaveButton = new HbPushButton("Add");
       
   116     mGetButton = new HbPushButton("Activities");
       
   117     mDelButton = new HbPushButton("Delete");
       
   118     mGetDataButton = new HbPushButton("Get data");
       
   119     mUpdateButton = new HbPushButton("Update");
       
   120     mThumbButton = new HbPushButton("Get pixmaps");
       
   121     mClearButton = new HbPushButton("Clear");
       
   122     mDelMyButton = new HbPushButton("Reserved");
       
   123 
       
   124     mConsole = new ActivityDebugerConsole;
       
   125     
       
   126     mLayout  = new QGraphicsGridLayout();
       
   127     mLayout->addItem(mConsole, 0, 0, 3, 6);
       
   128     mLayout->addItem(mSizeLabel, 3, 0, 1, 2);
       
   129     mLayout->addItem(mWidthCombo, 3, 2, 1, 2);
       
   130     mLayout->addItem(mHeightCombo, 3, 4, 1, 2);
       
   131     mLayout->addItem(mTimesLabel, 4, 0, 1, 2);
       
   132     mLayout->addItem(mBytesLabel, 4, 2, 1, 2);
       
   133     mLayout->addItem(mPixmapLabel, 4, 4, 1, 2);
       
   134     mLayout->addItem(mTimesCombo, 5, 0, 1, 2);
       
   135     mLayout->addItem(mLengthCombo, 5, 2, 1, 2);
       
   136     mLayout->addItem(mPixmapCombo, 5, 4, 1, 2);
       
   137     mLayout->addItem(mClearButton, 6, 0, 1, 3);
       
   138     mLayout->addItem(mGetDataButton, 6, 3, 1, 3);
       
   139     mLayout->addItem(mSaveButton, 7, 0, 1, 3);
       
   140     mLayout->addItem(mUpdateButton, 7, 3, 1, 3);
       
   141     mLayout->addItem(mGetButton, 8, 0, 1, 2);
       
   142     mLayout->addItem(mThumbButton, 8, 2, 1, 4);
       
   143     mLayout->addItem(mDelButton, 9, 0, 1, 3);
       
   144     mLayout->addItem(mDelMyButton, 9, 3, 1, 3);
       
   145     
       
   146     
       
   147     
       
   148     setLayout(mLayout);
       
   149 
       
   150     connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity()));
       
   151     connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity()));
       
   152     connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity()));
       
   153     connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData()));
       
   154     connect(mUpdateButton, SIGNAL(released()), this, SLOT(updateActivity()));
       
   155     connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb()));
       
   156     connect(mClearButton, SIGNAL(released()), mConsole, SLOT(clear()));
       
   157 
       
   158 
       
   159 
       
   160 }
       
   161 
       
   162 ActivityDebuger::~ActivityDebuger()
       
   163 {
       
   164     delete mEmptyPixmap;
       
   165     delete mPixmap;
       
   166     delete mPixmap2;
       
   167     delete mActivityClient;
       
   168     delete mActivityManager;
       
   169 }
       
   170 
       
   171 
       
   172 void ActivityDebuger::Before()
       
   173 {
       
   174     TTime time;
       
   175     time.HomeTime();
       
   176     iBefore = time.Int64();
       
   177 }
       
   178 
       
   179 void ActivityDebuger::After()
       
   180 {
       
   181     TTime time;
       
   182     time.HomeTime();
       
   183     iAfter = time.Int64();
       
   184 }
       
   185 
       
   186 void ActivityDebuger::Result()
       
   187 {
       
   188     TInt64 res(0);
       
   189     res = iAfter-iBefore;
       
   190     res = res/1000;
       
   191     iResult = res;
       
   192 }
       
   193 
       
   194 void  ActivityDebuger::deleteActivity()
       
   195 {
       
   196     mItemMeaage.clear();
       
   197     mItemMeaage += "***Remove all:\n";
       
   198     QList<QVariantHash> activities;
       
   199     bool ok  = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList<QVariantHash>, activities));
       
   200     bool retok = false;
       
   201     int items = 0;
       
   202     if (ok) {
       
   203         QString actname;
       
   204         for (int i=0; i<activities.count(); i++) {
       
   205             actname = activities.at(i).value(ActivityActivityKeyword).toString();
       
   206             ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, actname));
       
   207             ok = ok*retok;
       
   208 
       
   209         mItemMeaage += "*";        
       
   210         mItemMeaage += actname;
       
   211         mItemMeaage += "; ";
       
   212         QString res;
       
   213         res.setNum(ok);
       
   214         mItemMeaage += res;
       
   215         
       
   216         mItemMeaage += "*\n";
       
   217         
       
   218         items++;
       
   219         }
       
   220     mItemMeaage += tr("*Items %1*\n").arg(items);    
       
   221     }
       
   222     else
       
   223         {
       
   224         mItemMeaage += "*Failed*\n";
       
   225         }
       
   226     
       
   227     UpdateConsole();
       
   228 
       
   229 }
       
   230 
       
   231 void  ActivityDebuger::getActivity()
       
   232 {
       
   233     mItemMeaage.clear();
       
   234     mItemMeaage += "***Activities list:\n";
       
   235     bool ok = false;
       
   236     QList<QVariantHash> activities;
       
   237     ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, activities));
       
   238     if ( ok )
       
   239         {
       
   240         int items = 0;
       
   241         for ( int i=0; i<activities.count(); i++)
       
   242             {
       
   243             QString actname = activities.at(i).value(ActivityActivityKeyword).toString();
       
   244             int appid = activities.at(i).value(ActivityApplicationKeyword).toInt(&ok);
       
   245             mItemMeaage += "*";
       
   246             QString aid;
       
   247             aid.setNum(appid);
       
   248             mItemMeaage += aid;
       
   249             mItemMeaage += "; ";
       
   250             mItemMeaage += actname;
       
   251             mItemMeaage += "; ";
       
   252             QString pixfile = activities.at(i).value(ActivityScreenshotKeyword).toString();
       
   253             mItemMeaage += pixfile;
       
   254             QVariantHash::const_iterator node(activities.at(i).find("visible"));
       
   255             QString visible;
       
   256             if ( activities.at(i).end() != node )
       
   257                 {
       
   258                 bool vis = node.value().toBool();                
       
   259                 visible.setNum(vis);
       
   260                 }
       
   261             else
       
   262                 {
       
   263                 visible = "none";
       
   264                 }
       
   265             mItemMeaage += "; ";
       
   266             mItemMeaage += visible;
       
   267             QString res;
       
   268             res.setNum(ok);
       
   269             mItemMeaage += "; ";
       
   270             mItemMeaage += res;
       
   271             mItemMeaage += "*\n";
       
   272             
       
   273             items++;
       
   274             }
       
   275         mItemMeaage += tr("*Items %1*\n").arg(items);
       
   276         }
       
   277     else
       
   278         {
       
   279         mItemMeaage += "*Failed*\n";
       
   280         }
       
   281     UpdateConsole();
       
   282 }
       
   283 
       
   284 void  ActivityDebuger::getActivityThumb()
       
   285 {
       
   286     mItemMeaage.clear();
       
   287     mItemMeaage += "***Activities pixmaps:\n";
       
   288     UpdateConsole();
       
   289     disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
       
   290     connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
       
   291     mThumbwait = 0;
       
   292     mThumbnull = 0;
       
   293     mThumbcurrent = 0;
       
   294     bool ok = false;
       
   295     QList<QVariantHash> activities;
       
   296 
       
   297     ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, activities));
       
   298     if ( ok )
       
   299         {
       
   300         mThumbwait = activities.count();
       
   301         int width = mWidthCombo->currentText().toInt();
       
   302         int height = mHeightCombo->currentText().toInt();
       
   303         QSize pixSize(width, height);
       
   304         for ( int i=0; i<activities.count(); i++)
       
   305             {
       
   306             QString actname = activities.at(i).value(ActivityActivityKeyword).toString();
       
   307             int appid = activities.at(i).value(ActivityApplicationKeyword).toInt(&ok);
       
   308             QString pixfile;
       
   309             if ( ok )
       
   310                 {
       
   311                 pixfile = activities.at(i).value(ActivityScreenshotKeyword).toString();
       
   312                 void* userdata = reinterpret_cast<void*>(i);                
       
   313                 ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, userdata));
       
   314                 }
       
   315             
       
   316             mItemMeaage = "*";
       
   317             QString aid;
       
   318             aid.setNum(appid);
       
   319             mItemMeaage += aid;
       
   320             mItemMeaage += "; ";
       
   321             mItemMeaage += actname;
       
   322             mItemMeaage += "; ";
       
   323             QString locid = tr("locid=%1").arg(i);
       
   324             mItemMeaage += locid;
       
   325             mItemMeaage += "; ";
       
   326             QString res;
       
   327             res.setNum(ok);
       
   328             mItemMeaage += res;
       
   329             mItemMeaage += "*\n";
       
   330             UpdateConsole();
       
   331             }        
       
   332         }
       
   333     else
       
   334         {
       
   335         mItemMeaage += "*Failed*\n";
       
   336         UpdateConsole();
       
   337         }
       
   338 
       
   339 }
       
   340 
       
   341     
       
   342 
       
   343 void ActivityDebuger::saveActivity()
       
   344 {
       
   345     mItemMeaage.clear();
       
   346     mItemMeaage += "***Add:\n";
       
   347     int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
       
   348     delete mByteArray;
       
   349     mByteArray = NULL;
       
   350     mByteArray = new QByteArray(bytes, 'a');
       
   351     QVariant variant;
       
   352     variant = *mByteArray;
       
   353     QPixmap *pixmap = NULL;
       
   354     QPixmap screenshot;
       
   355     if (mPixmapCombo->currentText() == "yes") {
       
   356         pixmap = mPixmap;
       
   357     }
       
   358     else if ( mPixmapCombo->currentText() == "grab" )
       
   359     {
       
   360         HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
       
   361         screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
       
   362         pixmap = &screenshot;
       
   363     }
       
   364     else
       
   365     {
       
   366         pixmap = mEmptyPixmap;
       
   367     }
       
   368         
       
   369     QVariantHash metadata;
       
   370     metadata.insert("screenshot", *pixmap);
       
   371     int times = 0;
       
   372     times = mTimesCombo->currentText().toInt();
       
   373     bool ok = false;
       
   374     bool retok = false;
       
   375     int items = 0;
       
   376     for (int i=0; i<times; i++) {
       
   377         QString name;
       
   378         name.setNum(i);
       
   379         ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name), Q_ARG(QVariant, variant), Q_ARG(QVariantHash, metadata));
       
   380         mItemMeaage += "*";            
       
   381         mItemMeaage += name;
       
   382         mItemMeaage += "; ";
       
   383         QString res;
       
   384         res.setNum(ok*retok);
       
   385         mItemMeaage += res;
       
   386         mItemMeaage += "*\n";
       
   387         
       
   388         items++;
       
   389     }
       
   390     mItemMeaage += tr("*Items %1*\n").arg(items);
       
   391     UpdateConsole();    
       
   392 }
       
   393 
       
   394 void ActivityDebuger::updateActivity()
       
   395 {
       
   396     mItemMeaage.clear();
       
   397     mItemMeaage += "***Update:\n";
       
   398     int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
       
   399     delete mByteArray;
       
   400     mByteArray = NULL;
       
   401     mByteArray = new QByteArray(bytes, 'a');
       
   402     QVariant variant;
       
   403     variant = *mByteArray;
       
   404     QPixmap *pixmap = NULL;
       
   405     QPixmap screenshot;
       
   406     if (mPixmapCombo->currentText() == "yes") {
       
   407         pixmap = mPixmap2;
       
   408     }
       
   409     else if ( mPixmapCombo->currentText() == "grab" )
       
   410     {
       
   411         HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
       
   412         screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
       
   413         pixmap = &screenshot;
       
   414     }
       
   415     else
       
   416     {
       
   417         pixmap = mEmptyPixmap;
       
   418     }
       
   419     QVariantHash metadata;
       
   420     metadata.insert("screenshot", *pixmap);
       
   421     int times = 0;
       
   422     times = mTimesCombo->currentText().toInt();
       
   423     bool ok = false;
       
   424     bool retok = false;
       
   425     int items = 0;
       
   426     for (int i=0; i<times; i++) {
       
   427         QString name;
       
   428         name.setNum(i);
       
   429         ok = QMetaObject::invokeMethod(mActivityClient, "updateActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name), Q_ARG(QVariant, variant), Q_ARG(QVariantHash, metadata));
       
   430 
       
   431         mItemMeaage += "*";            
       
   432         mItemMeaage += name;
       
   433         mItemMeaage += "; ";
       
   434         QString res;
       
   435         res.setNum(ok*retok);
       
   436         mItemMeaage += res;
       
   437         mItemMeaage += "*\n";
       
   438         
       
   439         items++;
       
   440     }
       
   441     mItemMeaage += tr("*Items %1*\n").arg(items);
       
   442     UpdateConsole();    
       
   443 }
       
   444 
       
   445 void ActivityDebuger::getActivityData()
       
   446 {
       
   447     mItemMeaage.clear();
       
   448     mItemMeaage += "***Activities data:\n";
       
   449     QList<QVariantHash> activities;
       
   450     bool ok  = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList<QVariantHash>, activities));
       
   451     if (ok) {
       
   452         QString name;
       
   453         QVariant data;
       
   454         int items = 0;
       
   455         for (int i=0; i<activities.count(); i++) {
       
   456             name = activities.at(i).value(ActivityActivityKeyword).toString();
       
   457             ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name));
       
   458             const char* type = data.typeName();
       
   459             QString dtype(type);
       
   460             items++;
       
   461             
       
   462             mItemMeaage += "*";            
       
   463             mItemMeaage += name;
       
   464             mItemMeaage += "; ";
       
   465             mItemMeaage += dtype;
       
   466             mItemMeaage += "; ";
       
   467             QString res;
       
   468             res.setNum(ok);
       
   469             mItemMeaage += res;
       
   470             mItemMeaage += "*\n";    
       
   471         }
       
   472     mItemMeaage += tr("*Items %1*\n").arg(items);
       
   473     }
       
   474     else
       
   475         {
       
   476         mItemMeaage += "*Failed*\n";
       
   477         }
       
   478     UpdateConsole();
       
   479 }
       
   480 
       
   481 void ActivityDebuger::thumbnailReady(QPixmap pix, void * ptr)
       
   482     {
       
   483     mItemMeaage.clear();    
       
   484     QString pixsize;
       
   485     if ( pix.isNull() )
       
   486         {
       
   487         mThumbnull++;
       
   488         pixsize = "null";
       
   489         }    
       
   490     else
       
   491         {
       
   492         QSize size = pix.size();
       
   493         int w = size.width();
       
   494         int h = size.height();
       
   495         pixsize = tr("%1x%2").arg(w).arg(h);
       
   496         }
       
   497     int loc_id  = reinterpret_cast<int>(ptr);
       
   498     QString locid;
       
   499     locid = tr("locid=%1").arg(loc_id);
       
   500     mThumbcurrent++;
       
   501     
       
   502     mItemMeaage += "*";
       
   503     mItemMeaage += locid;
       
   504     mItemMeaage += "; ";
       
   505     mItemMeaage += pixsize;
       
   506     mItemMeaage += "*\n";
       
   507     
       
   508     if (mThumbcurrent == mThumbwait)
       
   509         {
       
   510         disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
       
   511         QString screennum = tr("*screennum: %1*\n").arg(mThumbwait);
       
   512         mItemMeaage += screennum;
       
   513         }
       
   514     UpdateConsole();
       
   515     }
       
   516 
       
   517 void ActivityDebuger::UpdateConsole()
       
   518     {
       
   519     mConsole->appendText(mItemMeaage);
       
   520     mConsole->scrollToBotton();
       
   521     }