activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/testapplications/newtestappset/acttestdebugger/activitydebuger.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,528 @@
+/*
+* 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:
+*
+*/
+
+#include "activitydebuger.h"
+
+#include <QGridLayout>
+#include <HbLabel>
+#include <HbPushButton>
+#include <QCoreApplication>
+#include <QSignalMapper>
+#include <QVariant>
+#include <QList>
+#include <QVariantHash>
+#include <HbComboBox>
+#include <QBrush>
+#include <QPalette>
+#include <QGraphicsGridLayout>
+#include <QTimer>
+#include <e32std.h>
+#include <HbInstance>
+
+#include <qservicemanager.h>
+#include "activitydebugerconsole.h"
+
+#include <afactivitystorage.h>
+#include <afactivation.h>
+#include "afstorageglobals.h"
+
+
+QTM_USE_NAMESPACE
+
+ActivityDebuger::ActivityDebuger(QGraphicsItem *parent) : HbView(parent), mByteArray(NULL)
+{
+    mThumbwait = 0;
+    mThumbnull = 0;
+    mThumbcurrent = 0;
+    QServiceManager serviceManager;
+    serviceManager.addService(":/activityserviceplugin.xml");
+
+    mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager");
+    if (!mActivityManager) {
+        qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service.");
+    }
+    
+    mActivityStorage = new AfActivityStorage;
+    mActivation = new AfActivation;
+    qRegisterMetaType<Af::ActivationReason>("Af::ActivationReason");
+    connect(mActivation, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivityData(Af::ActivationReason, QString, QVariantHash)));
+    
+    
+    mTimesLabel = new HbLabel("Times");
+    mBytesLabel = new HbLabel("Bytes");
+    mPixmapLabel = new HbLabel("Pixmap");    
+    mSizeLabel = new HbLabel("Size(WxH)");
+
+    mPixmap = new QPixmap(":/images/wolf.bmp");
+    mPixmap2 = new QPixmap(":/images/bird.bmp");
+    mEmptyPixmap = new QPixmap();
+
+
+    mTimesCombo = new HbComboBox();
+    mLengthCombo = new HbComboBox();
+    mPixmapCombo = new HbComboBox();
+    mWidthCombo = new HbComboBox();
+    mHeightCombo = new HbComboBox();
+
+    mTimesCombo->addItem("1");
+    mTimesCombo->addItem("2");
+    mTimesCombo->addItem("4");
+    mTimesCombo->addItem("5");
+    mTimesCombo->addItem("10");
+    mTimesCombo->addItem("20");
+    mTimesCombo->addItem("40");
+    mTimesCombo->addItem("60");
+
+    QVariant variant;
+    variant = 10;
+    mLengthCombo->addItem("10 B", variant);
+    variant = 100;
+    mLengthCombo->addItem("100 B", variant);
+    variant = 1024;
+    mLengthCombo->addItem("1 KB", variant);
+    variant = 10240;
+    mLengthCombo->addItem("10 KB", variant);
+    variant = 102400;
+    mLengthCombo->addItem("100 KB", variant);
+    variant = 1024*1024;
+    mLengthCombo->addItem("1 MB", variant);
+    
+    mWidthCombo->addItem("360");
+    mWidthCombo->addItem("180");
+    mWidthCombo->addItem("128");
+    mWidthCombo->addItem("90");
+    
+    mHeightCombo->addItem("640");
+    mHeightCombo->addItem("320");
+    mHeightCombo->addItem("160");
+    mHeightCombo->addItem("128");
+    
+
+    mPixmapCombo->addItem("no");
+    mPixmapCombo->addItem("yes");
+    mPixmapCombo->addItem("grab");
+
+    mSaveButton = new HbPushButton("Save");
+    mGetButton = new HbPushButton("Activities");
+    mDelButton = new HbPushButton("Delete");
+    mGetDataButton = new HbPushButton("Get data");
+    mGetMyButton = new HbPushButton("Get my");
+    mThumbButton = new HbPushButton("Get pixmaps");
+    mClearButton = new HbPushButton("Clear");
+    mDelMyButton = new HbPushButton("Reserved");
+
+    mConsole = new ActivityDebugerConsole;
+    
+    mLayout  = new QGraphicsGridLayout();
+    mLayout->addItem(mConsole, 0, 0, 3, 6);
+    mLayout->addItem(mSizeLabel, 3, 0, 1, 2);
+    mLayout->addItem(mWidthCombo, 3, 2, 1, 2);
+    mLayout->addItem(mHeightCombo, 3, 4, 1, 2);
+    mLayout->addItem(mTimesLabel, 4, 0, 1, 2);
+    mLayout->addItem(mBytesLabel, 4, 2, 1, 2);
+    mLayout->addItem(mPixmapLabel, 4, 4, 1, 2);
+    mLayout->addItem(mTimesCombo, 5, 0, 1, 2);
+    mLayout->addItem(mLengthCombo, 5, 2, 1, 2);
+    mLayout->addItem(mPixmapCombo, 5, 4, 1, 2);
+    mLayout->addItem(mClearButton, 6, 0, 1, 3);
+    mLayout->addItem(mGetDataButton, 6, 3, 1, 3);
+    mLayout->addItem(mSaveButton, 7, 0, 1, 3);
+    mLayout->addItem(mGetMyButton, 7, 3, 1, 3);
+    mLayout->addItem(mGetButton, 8, 0, 1, 2);
+    mLayout->addItem(mThumbButton, 8, 2, 1, 4);
+    mLayout->addItem(mDelButton, 9, 0, 1, 3);
+    mLayout->addItem(mDelMyButton, 9, 3, 1, 3);
+    
+    
+    
+    setLayout(mLayout);
+
+    connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity()));
+    connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity()));
+    connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity()));
+    connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData()));
+    connect(mGetMyButton, SIGNAL(released()), this, SLOT(getMyActivity()));
+    connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb()));
+    connect(mClearButton, SIGNAL(released()), mConsole, SLOT(clear()));
+
+
+
+}
+
+ActivityDebuger::~ActivityDebuger()
+{
+    delete mEmptyPixmap;
+    delete mPixmap;
+    delete mPixmap2;
+    delete mActivityManager;
+    delete mActivityStorage;
+    delete mActivation;
+}
+
+
+void ActivityDebuger::Before()
+{
+    TTime time;
+    time.HomeTime();
+    iBefore = time.Int64();
+}
+
+void ActivityDebuger::After()
+{
+    TTime time;
+    time.HomeTime();
+    iAfter = time.Int64();
+}
+
+void ActivityDebuger::Result()
+{
+    TInt64 res(0);
+    res = iAfter-iBefore;
+    res = res/1000;
+    iResult = res;
+}
+
+void  ActivityDebuger::deleteActivity()
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Remove all:\n";
+    QStringList activities = mActivityStorage->allActivities();    
+    
+    int items = 0;
+    bool ok = false;
+    QString actname;
+    for (int i=0; i<activities.count(); i++) {
+        actname = activities.at(i);
+        ok = mActivityStorage->removeActivity(actname);   
+
+    mItemMeaage += "*";        
+    mItemMeaage += actname;
+    mItemMeaage += "; ";
+    QString res;
+    res.setNum(ok);
+    mItemMeaage += res;
+    
+    mItemMeaage += "*\n";
+    
+    items++;
+    }
+    mItemMeaage += tr("*Items %1*\n").arg(items);    
+
+    UpdateConsole();
+
+}
+
+void  ActivityDebuger::getActivity()
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Activities list:\n";
+    bool ok = false;
+    QList<QVariantHash> activities;
+    ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, activities));
+    if ( ok )
+        {
+        int items = 0;
+        for ( int i=0; i<activities.count(); i++)
+            {
+            getMetadata(activities.at(i));            
+            
+            items++;
+            }
+        mItemMeaage += tr("*Items %1*\n").arg(items);
+        }
+    else
+        {
+        mItemMeaage += "*Failed*\n";
+        }
+    UpdateConsole();
+}
+
+void ActivityDebuger::getMetadata(QVariantHash varianthash)
+{
+    QString actname = varianthash.value(ActivityActivityKeyword).toString();
+    int appid = varianthash.value(ActivityApplicationKeyword).toInt();
+    mItemMeaage += "*";
+    QString aid;
+    aid.setNum(appid);
+    mItemMeaage += aid;
+    mItemMeaage += "; ";
+    mItemMeaage += actname;
+    mItemMeaage += "; ";
+    QString pixfile = varianthash.value(ActivityScreenshotKeyword).toString();
+    mItemMeaage += pixfile;
+    QVariantHash::const_iterator node(varianthash.find(ActivityVisibility));
+    QString visible;
+    if ( varianthash.end() != node )
+        {
+        bool vis = node.value().toBool();                
+        visible.setNum(vis);
+        }
+    else
+        {
+        visible = "none";
+        }
+    
+    QVariantHash::const_iterator node2(varianthash.find(ActivityPersistence));
+    QString persistence;
+    if ( varianthash.end() != node2 )
+        {
+        bool per = node2.value().toBool();                
+        persistence.setNum(per);
+        }
+    else
+        {
+        persistence = "none";
+        }
+
+
+    QVariantHash::const_iterator node3(varianthash.find(ActivityApplicationName));
+    QString display;
+    if ( varianthash.end() != node3 )
+        {
+        display = node3.value().toString();                
+        }
+    else
+        {
+        persistence = "none";
+        }
+        
+    mItemMeaage += "; ";
+    mItemMeaage += visible;
+    mItemMeaage += "; ";
+    mItemMeaage += persistence;
+    mItemMeaage += "; ";
+    mItemMeaage += display;
+}
+
+void  ActivityDebuger::getActivityThumb()
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Activities pixmaps:\n";
+    UpdateConsole();
+    disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+    connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+    mThumbwait = 0;
+    mThumbnull = 0;
+    mThumbcurrent = 0;
+    bool ok = false;
+    QList<QVariantHash> activities;
+
+    ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, activities));
+    if ( ok )
+        {
+        mThumbwait = activities.count();
+        int width = mWidthCombo->currentText().toInt();
+        int height = mHeightCombo->currentText().toInt();
+        QSize pixSize(width, height);
+        for ( int i=0; i<activities.count(); i++)
+            {
+            QString actname = activities.at(i).value(ActivityActivityKeyword).toString();
+            int appid = activities.at(i).value(ActivityApplicationKeyword).toInt(&ok);
+            QString pixfile;
+            if ( ok )
+                {
+                pixfile = activities.at(i).value(ActivityScreenshotKeyword).toString();
+                void* userdata = reinterpret_cast<void*>(i);                
+                ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, userdata));
+                }
+            
+            mItemMeaage = "*";
+            QString aid;
+            aid.setNum(appid);
+            mItemMeaage += aid;
+            mItemMeaage += "; ";
+            mItemMeaage += actname;
+            mItemMeaage += "; ";
+            QString locid = tr("locid=%1").arg(i);
+            mItemMeaage += locid;
+            mItemMeaage += "; ";
+            QString res;
+            res.setNum(ok);
+            mItemMeaage += res;
+            mItemMeaage += "*\n";
+            UpdateConsole();
+            }        
+        }
+    else
+        {
+        mItemMeaage += "*Failed*\n";
+        UpdateConsole();
+        }
+
+}    
+
+void ActivityDebuger::saveActivity()
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Save:\n";
+    int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
+    delete mByteArray;
+    mByteArray = NULL;
+    mByteArray = new QByteArray(bytes, 'a');
+    QVariant variant;
+    variant = *mByteArray;
+    QPixmap *pixmap = NULL;
+    QPixmap screenshot;
+    if (mPixmapCombo->currentText() == "yes") {
+        pixmap = mPixmap;
+    }
+    else if ( mPixmapCombo->currentText() == "grab" )
+    {
+        HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+        screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+        pixmap = &screenshot;
+    }
+    else
+    {
+        pixmap = mEmptyPixmap;
+    }
+        
+    QVariantHash metadata;
+    metadata.insert(ActivityScreenshotKeyword, *pixmap);
+    int times = 0;
+    times = mTimesCombo->currentText().toInt();
+    bool ok = false;
+    int items = 0;
+    for (int i=0; i<times; i++) {
+        QString name;
+        name.setNum(i);   
+        metadata.insert(ActivityApplicationName, name);        
+        ok = mActivityStorage->saveActivity(name, variant, metadata);
+        mItemMeaage += "*";            
+        mItemMeaage += name;
+        mItemMeaage += "; ";
+        QString res;
+        res.setNum(ok);
+        mItemMeaage += res;
+        mItemMeaage += "*\n";
+        
+        items++;
+    }
+    mItemMeaage += tr("*Items %1*\n").arg(items);
+    UpdateConsole();    
+}
+
+void ActivityDebuger::getMyActivity()
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Get my activities:\n";
+    QStringList activities = mActivityStorage->allActivities();  
+    QString name;
+    QVariantHash data;
+    int items = 0;
+    for (int i=0; i<activities.count(); i++) {
+        name = activities.at(i);
+        data = mActivityStorage->activityMetaData(activities.at(i));        
+        getMetadata(data);            
+        items++;       
+    }
+    mItemMeaage += tr("*Items %1*\n").arg(items);
+    UpdateConsole();   
+}
+
+void ActivityDebuger::getActivityData()
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Activities data:\n";
+    QStringList activities = mActivityStorage->allActivities();   
+
+    QString name;
+    QVariant data;
+    int items = 0;
+    for (int i=0; i<activities.count(); i++) {
+        name = activities.at(i);
+        data = mActivityStorage->activityData(activities.at(i));
+        const char* type = data.typeName();
+        QString dtype(type);
+        items++;
+        
+        mItemMeaage += "*";            
+        mItemMeaage += name;
+        mItemMeaage += "; ";
+        mItemMeaage += dtype;
+        mItemMeaage += "; ";        
+        mItemMeaage += "*\n";    
+    }
+    mItemMeaage += tr("*Items %1*\n").arg(items);
+
+    UpdateConsole();
+}
+
+void ActivityDebuger::thumbnailReady(QPixmap pix, void * ptr)
+    {
+    mItemMeaage.clear();    
+    QString pixsize;
+    if ( pix.isNull() )
+        {
+        mThumbnull++;
+        pixsize = "null";
+        }    
+    else
+        {
+        QSize size = pix.size();
+        int w = size.width();
+        int h = size.height();
+        pixsize = tr("%1x%2").arg(w).arg(h);
+        }
+    int loc_id  = reinterpret_cast<int>(ptr);
+    QString locid;
+    locid = tr("locid=%1").arg(loc_id);
+    mThumbcurrent++;
+    
+    mItemMeaage += "*";
+    mItemMeaage += locid;
+    mItemMeaage += "; ";
+    mItemMeaage += pixsize;
+    mItemMeaage += "*\n";
+    
+    if (mThumbcurrent == mThumbwait)
+        {
+        disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+        QString screennum = tr("*screennum: %1*\n").arg(mThumbwait);
+        mItemMeaage += screennum;
+        }
+    UpdateConsole();
+    }
+
+void ActivityDebuger::UpdateConsole()
+    {
+    mConsole->appendText(mItemMeaage);
+    mConsole->scrollToBotton();
+    }
+
+void ActivityDebuger::loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter)
+{
+    mItemMeaage.clear();
+    mItemMeaage += "***Activity requested:\n";
+    int reasonint = static_cast<int>(reason);
+    QString reasonstring;
+    reasonstring.setNum(reasonint);
+    int parametercount = parameter.count();
+    QString parametercountstring;;
+    parametercountstring.setNum(parametercount);
+    
+    
+    mItemMeaage += "*";            
+    mItemMeaage += name;
+    mItemMeaage += "; ";
+    mItemMeaage += reasonstring;
+    mItemMeaage += "; ";        
+    mItemMeaage += parametercountstring;
+    mItemMeaage += "*\n"; 
+    
+    UpdateConsole();
+}