taskswitcher/activitytsplugin/src/activitytsmodel.cpp
changeset 125 26079c1bb561
parent 119 50e220be30d1
child 127 7b66bc3c6dc9
equal deleted inserted replaced
123:d1dadafc5584 125:26079c1bb561
    24 
    24 
    25 #include <QServiceManager>
    25 #include <QServiceManager>
    26 #include <XQSettingsManager>
    26 #include <XQSettingsManager>
    27 
    27 
    28 #include "afstorageglobals.h"
    28 #include "afstorageglobals.h"
       
    29 #include "tsrunningapp.h"
       
    30 #include "tsrunningappstorage.h"
       
    31 #include "tswindowgroupsmonitor.h"
       
    32 #include "tsresourcemanager.h"
    29 
    33 
    30 QTM_USE_NAMESPACE
    34 QTM_USE_NAMESPACE
    31 
    35 
    32 namespace {
    36 namespace {
    33     const char KActivityManager[] = "com.nokia.qt.activities.ActivityManager";
    37     const char KActivityManager[] = "com.nokia.qt.activities.ActivityManager";
    34     
    38     
    35     const int KTsDeviceDialogUid = 0x2002677F;
    39     const int KTsDeviceDialogUid = 0x2002677F;
    36     const int KItemsLimit = 0x00000001;
    40     const int KItemsLimit = 0x00000001;
    37 }
    41 }
    38 
    42 
    39 ActivityTsModel::ActivityTsModel(QObject *parent) : QObject(parent), mAfManager(0) , mMaxItems(10)
    43 ActivityTsModel::ActivityTsModel(QObject *parent) : 
       
    44 QObject(parent),
       
    45 mMonitor(0),
       
    46 mAfManager(0) , 
       
    47 mMaxItems(10)
    40 {
    48 {
    41     {
    49     {
    42         QServiceManager serviceManager;
    50         QServiceManager serviceManager;
    43         mAfManager = serviceManager.loadInterface(KActivityManager);
    51         mAfManager = serviceManager.loadInterface(KActivityManager);
    44         if (mAfManager) {
    52         if (mAfManager) {
    65     getActivities();
    73     getActivities();
    66 }
    74 }
    67 
    75 
    68 ActivityTsModel::~ActivityTsModel()
    76 ActivityTsModel::~ActivityTsModel()
    69 {
    77 {
       
    78     if (mMonitor) {
       
    79        mMonitor->Cancel(*this); 
       
    80     }
    70     qDeleteAll(mData);
    81     qDeleteAll(mData);
    71 }
    82 }
    72 
    83 
       
    84 void ActivityTsModel::HandleWindowGroupChanged(
       
    85                                   MTsResourceManager& resources, 
       
    86                                   const MTsRunningApplicationStorage& storage)
       
    87 {
       
    88     Q_UNUSED(resources);
       
    89     mRunningAppsUid.clear();
       
    90     for (int i(0); i < storage.Count(); ++i) {
       
    91         mRunningAppsUid.append(storage[i].UidL().iUid);
       
    92     }
       
    93     if(filterActivity()) {
       
    94         emit dataChanged();
       
    95     }
       
    96 }
       
    97 
       
    98 bool ActivityTsModel::filterActivity()
       
    99 {
       
   100     bool retVal(false);
       
   101     mPublishedData.clear();
       
   102     for (int i(0); i < mData.count(); ++i) {
       
   103         if(!mRunningAppsUid.contains(mData[i]->data().value(ActivityApplicationKeyword).toInt())) {
       
   104             mPublishedData.append(mData[i]);
       
   105             retVal = true;
       
   106         }
       
   107     }
       
   108     return retVal;
       
   109 }
       
   110 
    73 QList<QVariantHash> ActivityTsModel::taskList() const
   111 QList<QVariantHash> ActivityTsModel::taskList() const
    74 {
   112 {
    75     return taskList(mData.count());
   113     return taskList(mPublishedData.count());
    76 }
   114 }
    77 
   115 
    78 QList<QVariantHash> ActivityTsModel::taskList(int limit) const
   116 QList<QVariantHash> ActivityTsModel::taskList(int limit) const
    79 {
   117 {
    80     QList<QVariantHash> result;
   118     QList<QVariantHash> result;
    81     for (int i(0); i < limit && i < mData.count(); ++i) {
   119     for (int i(0); i < limit && i < mPublishedData.count(); ++i) {
    82         result.append(mData[i]->data());
   120         result.append(mPublishedData[i]->data());
    83     }
   121     }
    84     return result;
   122     return result;
    85 }
   123 }
    86     
   124 
    87 bool ActivityTsModel::openTask(const QVariant &id)
   125 bool ActivityTsModel::openTask(const QVariant &id)
    88 {
   126 {
    89     foreach (const ActivityTsEntry *entry, mData) {
   127     foreach (const ActivityTsEntry *entry, mData) {
    90         if (entry->data().value("TaskId") == id) {
   128         if (entry->data().value("TaskId") == id) {
    91             QMetaObject::invokeMethod(mAfManager,
   129             QMetaObject::invokeMethod(mAfManager,
   103     Q_UNUSED(id);
   141     Q_UNUSED(id);
   104     return false;
   142     return false;
   105 }
   143 }
   106 
   144 
   107 void ActivityTsModel::getActivities()
   145 void ActivityTsModel::getActivities()
   108 {
   146 {   
   109     qDeleteAll(mData);
   147     QList<ActivityTsEntry*> oldData(mData);
   110     mData.clear();
   148     mData.clear();
   111     
   149     
   112     QList<QVariantHash> activities;
   150     QList<QVariantHash> activities;
   113     QMetaObject::invokeMethod(mAfManager,
   151     QMetaObject::invokeMethod(mAfManager,
   114                               "activitiesList",
   152                               "activitiesList",
   115                               Q_RETURN_ARG(QList<QVariantHash>, activities),
   153                               Q_RETURN_ARG(QList<QVariantHash>, activities),
   116                               Q_ARG(int, mMaxItems));
   154                               Q_ARG(int, mMaxItems));
   117                               
   155 
   118     foreach (const QVariantHash &activityEntry, activities) {
   156     foreach (const QVariantHash &activityEntry, activities) {
   119         mData.append(new ActivityTsEntry(activityEntry));
   157         ActivityTsEntry *reusableEntry = findEntryWithScreenshot(oldData, activityEntry);
       
   158         if (reusableEntry) {
       
   159             mData.append(reusableEntry);
       
   160             oldData.removeAll(reusableEntry);
       
   161         } else {
       
   162             mData.append(new ActivityTsEntry(activityEntry));
   120         
   163         
   121         QMetaObject::invokeMethod(
   164             QMetaObject::invokeMethod(
   122                 mAfManager,
   165                 mAfManager,
   123                 "getThumbnail",
   166                 "getThumbnail",
   124                 Q_ARG(QString, activityEntry.value(ActivityScreenshotKeyword).toString()),
   167                 Q_ARG(QString, activityEntry.value(ActivityScreenshotKeyword).toString()),
   125                 Q_ARG(void *, mData.last()));
   168                 Q_ARG(void *, mData.last()));
   126     }
   169         }
   127     
   170     }
       
   171     qDeleteAll(oldData);
       
   172     
       
   173     filterActivity();
   128     emit dataChanged();
   174     emit dataChanged();
   129 }
   175 }
   130 
   176 
       
   177 ActivityTsEntry *ActivityTsModel::findEntryWithScreenshot(const QList<ActivityTsEntry*> &entryList, const QVariantHash &activityEntry) 
       
   178 {
       
   179     foreach (ActivityTsEntry *entry, entryList) {
       
   180         const QVariantHash data = entry->data();
       
   181         if ((data.value(ActivityApplicationKeyword) == activityEntry.value(ActivityApplicationKeyword)) &&
       
   182             (data.value(ActivityActivityKeyword) == activityEntry.value(ActivityActivityKeyword)) &&
       
   183             (data.value("TaskTimestamp") == activityEntry.value(ActivityTimestamp)) &&
       
   184             (data.value("TaskScreenshot") != -1)) {
       
   185             return entry;
       
   186         }
       
   187     }
       
   188     return 0;
       
   189 }
       
   190 
   131 void ActivityTsModel::convertScreenshotToThumbnail(const QPixmap &thumbnail, void *userData)
   191 void ActivityTsModel::convertScreenshotToThumbnail(const QPixmap &thumbnail, void *userData)
   132 {
   192 {
   133     emit createThumbnail(thumbnail, 0, userData);
   193     emit createThumbnail(thumbnail, 0, userData);
   134 }
   194 }
   135 
   195 
   136 void ActivityTsModel::thumbnailCreated(const QPixmap &thumbnail, const void *userData)
   196 void ActivityTsModel::thumbnailCreated(const QPixmap &thumbnail, const void *userData)
   137 {    
   197 {
   138     foreach (ActivityTsEntry *activity, mData) {
   198     foreach (ActivityTsEntry *activity, mData) {
   139         if (activity == userData) {
   199         if (activity == userData) {
   140             activity->setThumbnail(thumbnail.toSymbianCFbsBitmap());
   200             activity->setThumbnail(thumbnail.toSymbianCFbsBitmap());
   141             emit dataChanged();
   201             emit dataChanged();
   142             break;
   202             break;
   143         }
   203         }
   144     }
   204     }
   145 }
   205 }
       
   206 
       
   207 void ActivityTsModel::setResources(MTsResourceManager& resources)
       
   208 {
       
   209     if (mMonitor) {
       
   210         mMonitor->Cancel(*this);
       
   211     }
       
   212     mMonitor = &resources.WsMonitor();
       
   213     mMonitor->SubscribeL(*this);
       
   214 }