taskswitcher/activitytsplugin/src/activitytsmodel.cpp
changeset 124 e36b2f4799c0
child 125 26079c1bb561
equal deleted inserted replaced
121:0b3699f6c654 124:e36b2f4799c0
       
     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 "activitytsmodel.h"
       
    19 
       
    20 #include <stdexcept>
       
    21 
       
    22 #include <QPixmap>
       
    23 #include <QUrl>
       
    24 
       
    25 #include <QServiceManager>
       
    26 #include <XQSettingsManager>
       
    27 
       
    28 #include "afstorageglobals.h"
       
    29 
       
    30 QTM_USE_NAMESPACE
       
    31 
       
    32 namespace {
       
    33     const char KActivityManager[] = "com.nokia.qt.activities.ActivityManager";
       
    34     
       
    35     const int KTsDeviceDialogUid = 0x2002677F;
       
    36     const int KItemsLimit = 0x00000001;
       
    37 }
       
    38 
       
    39 ActivityTsModel::ActivityTsModel(QObject *parent) : QObject(parent), mAfManager(0) , mMaxItems(10)
       
    40 {
       
    41     {
       
    42         QServiceManager serviceManager;
       
    43         mAfManager = serviceManager.loadInterface(KActivityManager);
       
    44         if (mAfManager) {
       
    45             mAfManager->setParent(this);
       
    46         } else {
       
    47             throw std::runtime_error("Cannot create critical com.nokia.qt.activities.ActivityManager service");
       
    48         }
       
    49     }
       
    50     
       
    51     {
       
    52         XQSettingsManager crManager;
       
    53         QVariant itemsNumberVariant = crManager.readItemValue(XQCentralRepositorySettingsKey(KTsDeviceDialogUid, KItemsLimit), XQSettingsManager::TypeInt);
       
    54         if (!itemsNumberVariant.isNull()) {
       
    55             int number = itemsNumberVariant.toInt();
       
    56             if (number > 0) {
       
    57                 mMaxItems = number;
       
    58             }
       
    59         }
       
    60     }
       
    61     
       
    62     connect(mAfManager, SIGNAL(dataChanged()), SLOT(getActivities()));
       
    63     connect(mAfManager, SIGNAL(thumbnailReady(QPixmap,void*)), SLOT(convertScreenshotToThumbnail(QPixmap,void*)));
       
    64     
       
    65     getActivities();
       
    66 }
       
    67 
       
    68 ActivityTsModel::~ActivityTsModel()
       
    69 {
       
    70     qDeleteAll(mData);
       
    71 }
       
    72 
       
    73 QList<QVariantHash> ActivityTsModel::taskList() const
       
    74 {
       
    75     return taskList(mData.count());
       
    76 }
       
    77 
       
    78 QList<QVariantHash> ActivityTsModel::taskList(int limit) const
       
    79 {
       
    80     QList<QVariantHash> result;
       
    81     for (int i(0); i < limit && i < mData.count(); ++i) {
       
    82         result.append(mData[i]->data());
       
    83     }
       
    84     return result;
       
    85 }
       
    86     
       
    87 bool ActivityTsModel::openTask(const QVariant &id)
       
    88 {
       
    89     foreach (const ActivityTsEntry *entry, mData) {
       
    90         if (entry->data().value("TaskId") == id) {
       
    91             QMetaObject::invokeMethod(mAfManager,
       
    92                                   "launchActivity",
       
    93                                   Q_ARG(QUrl, entry->data().value("Uri").toUrl()));
       
    94             return true;
       
    95         }
       
    96     }
       
    97     return false;
       
    98 }
       
    99 
       
   100 bool ActivityTsModel::closeTask(const QVariant &id)
       
   101 {
       
   102     // it's impossible to "close" activity
       
   103     Q_UNUSED(id);
       
   104     return false;
       
   105 }
       
   106 
       
   107 void ActivityTsModel::getActivities()
       
   108 {
       
   109     qDeleteAll(mData);
       
   110     mData.clear();
       
   111     
       
   112     QList<QVariantHash> activities;
       
   113     QMetaObject::invokeMethod(mAfManager,
       
   114                               "activitiesList",
       
   115                               Q_RETURN_ARG(QList<QVariantHash>, activities),
       
   116                               Q_ARG(int, mMaxItems));
       
   117                               
       
   118     foreach (const QVariantHash &activityEntry, activities) {
       
   119         mData.append(new ActivityTsEntry(activityEntry));
       
   120         
       
   121         QMetaObject::invokeMethod(
       
   122                 mAfManager,
       
   123                 "getThumbnail",
       
   124                 Q_ARG(QString, activityEntry.value(ActivityScreenshotKeyword).toString()),
       
   125                 Q_ARG(void *, mData.last()));
       
   126     }
       
   127     
       
   128     emit dataChanged();
       
   129 }
       
   130 
       
   131 void ActivityTsModel::convertScreenshotToThumbnail(const QPixmap &thumbnail, void *userData)
       
   132 {
       
   133     emit createThumbnail(thumbnail, 0, userData);
       
   134 }
       
   135 
       
   136 void ActivityTsModel::thumbnailCreated(const QPixmap &thumbnail, const void *userData)
       
   137 {    
       
   138     foreach (ActivityTsEntry *activity, mData) {
       
   139         if (activity == userData) {
       
   140             activity->setThumbnail(thumbnail.toSymbianCFbsBitmap());
       
   141             emit dataChanged();
       
   142             break;
       
   143         }
       
   144     }
       
   145 }