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 } |