--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp Tue Aug 31 15:06:34 2010 +0300
@@ -0,0 +1,425 @@
+/*
+ * 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: hsmenuservice.cpp
+ *
+ */
+
+#include <QDebug>
+#include <QStandardItem>
+#include <qvaluespacepublisher.h>
+#include <HbDeviceDialog>
+
+#include "hsapp_defs.h"
+#include "hsmenuservice.h"
+#include "hsmenuserviceutils.h"
+#include "caquery.h"
+#include "caitemmodel.h"
+#include "hsmenuitemmodel.h"
+#include "hsmenucollectionsitemmodel.h"
+
+QTM_USE_NAMESPACE
+
+// ======== MEMBER FUNCTIONS ========
+
+// Initialization of a static member variable.
+int HsMenuService::mAllCollectionsId = 0;
+const char COLLECTION_TITLE_NAME[] = "title_name";
+const char COLLECTION_SHORT_NAME[] = "short_name";
+/*!
+ Returns all applications model
+ \param sortAttribute :: SortAttribute
+ \retval HsMenuItemModel: AllApplicationsModel
+ */
+HsMenuItemModel *HsMenuService::getAllApplicationsModel(
+ Hs::HsSortAttribute sortAttribute)
+{
+ qDebug() << "HsMenuService::getAllApplicationsModel sortAttribute:"
+ << sortAttribute;
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::getAllApplicationsModel");
+ CaQuery query;
+ query.setEntryRoles(ItemEntryRole);
+ query.addEntryTypeName(Hs::applicationTypeName);
+ query.addEntryTypeName(Hs::urlTypeName);
+ query.addEntryTypeName(Hs::widgetTypeName);
+ query.addEntryTypeName(Hs::templatedApplicationTypeName);
+ query.setFlagsOn(VisibleEntryFlag);
+ query.setFlagsOff(MissingEntryFlag);
+ query.setSort(HsMenuServiceUtils::sortBy(sortAttribute),
+ HsMenuServiceUtils::sortOrder(sortAttribute));
+ HsMenuItemModel *model = new HsMenuItemModel(query);
+ HSMENUTEST_FUNC_EXIT("HsMenuService::getAllApplicationsModel");
+ return model;
+}
+
+/*!
+ Returns all collections model
+ \retval HsMenuItemModel: all collections model
+ */
+HsMenuItemModel *HsMenuService::getAllCollectionsModel()
+{
+ qDebug() << "HsMenuService::getAllCollectionsModel";
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::getAllCollectionsModel");
+ CaQuery query;
+ query.setParentId(allCollectionsId());
+ query.setFlagsOn(VisibleEntryFlag);
+ query.setFlagsOff(MissingEntryFlag);
+ HsMenuItemModel *model = new HsMenuCollectionsItemModel(query);
+ HSMENUTEST_FUNC_EXIT("HsMenuService::getAllCollectionsModel");
+ return model;
+}
+
+/*!
+ Returns native and java applications.
+ \param sortAttribute :: SortAttribute
+ \retval HsMenuItemModel: installed model
+ */
+HsMenuItemModel *HsMenuService::getInstalledModel(
+ Hs::HsSortAttribute sortAttribute)
+{
+ //TODO get proper items
+ qDebug() << "HsMenuService::getInstalledModel" << "sortAttribute:"
+ << sortAttribute;
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::getInstalledModel");
+ CaQuery query;
+ query.addEntryTypeName(Hs::packageTypeName);
+ query.setFlagsOn(VisibleEntryFlag | RemovableEntryFlag);
+ query.setFlagsOff(MissingEntryFlag);
+ query.setSort(HsMenuServiceUtils::sortBy(sortAttribute),
+ HsMenuServiceUtils::sortOrder(sortAttribute));
+ HsMenuItemModel *model = new HsMenuItemModel(query);
+ HSMENUTEST_FUNC_EXIT("HsMenuService::getInstalledModel");
+ return model;
+}
+
+/*!
+ Returns collection model
+ \param collectionId :: id of this collection
+ \param sortAttribute :: SortAttribute
+ \retval HsMenuItemModel: collection model
+ */
+HsMenuItemModel *HsMenuService::getCollectionModel(int collectionId,
+ Hs::HsSortAttribute sortAttribute, const QString &collectionType)
+{
+ qDebug() << "HsMenuService::getCollectionModel sortAttribute:"
+ << sortAttribute;
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::getCollectionModel");
+ CaQuery query;
+ query.setFlagsOff(MissingEntryFlag);
+ if (collectionType == Hs::collectionDownloadedTypeName) {
+ query.setFlagsOn(RemovableEntryFlag | VisibleEntryFlag);
+ } else {
+ query.setFlagsOn(VisibleEntryFlag);
+ }
+ if(!collectionId) {
+ collectionId = collectionIdByType(collectionType);
+ }
+ query.setParentId(collectionId);
+ query.setSort(HsMenuServiceUtils::sortBy(sortAttribute),
+ HsMenuServiceUtils::sortOrder(sortAttribute));
+ HsMenuItemModel *model = new HsMenuItemModel(query);
+ HSMENUTEST_FUNC_EXIT("HsMenuService::getCollectionModel");
+ return model;
+}
+
+/*!
+ Returns all collections names
+ \retval CaItemModel: list with collections names
+ */
+QStringList HsMenuService::getCollectionNames()
+{
+ qDebug() << "HsMenuService::getCollectionNames";
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::getCollectionNames");
+ CaQuery query;
+ query.setParentId(allCollectionsId());
+ query.setFlagsOn(VisibleEntryFlag);
+ query.setFlagsOff(MissingEntryFlag);
+ QList< QSharedPointer<CaEntry> > collections = CaService::instance()->getEntries(query);
+ QStringList resultList;
+ foreach(QSharedPointer<CaEntry> entry, collections) {
+ resultList << entry->text();
+ }
+
+ qDebug() << "HsMenuService::getCollectionNames resultList:"
+ << resultList;
+ HSMENUTEST_FUNC_EXIT("HsMenuService::getCollectionNames");
+ return resultList;
+}
+
+/*!
+ Returns name of an entry
+ \param id of this entry
+ \retval QString with name of the entry
+ */
+QString HsMenuService::getName(int entryId)
+{
+ qDebug() << "HsMenuService::getName entryId:" << entryId;
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::getName");
+ QSharedPointer<CaEntry> entry = CaService::instance()->getEntry(entryId);
+
+ QString name;
+ if (!entry.isNull()) {
+ name = entry->text();
+ }
+ qDebug() << "HsMenuService::getName name: " << name;
+ HSMENUTEST_FUNC_EXIT("HsMenuService::getName");
+ return name;
+}
+
+/*!
+ Executes action on an item
+ \param entryId of this item
+ \param actionName string with action name
+ \retval int error code, 0 if no error
+ */
+int HsMenuService::executeAction(int entryId, const QString &actionName)
+{
+ qDebug() << "HsMenuService::executeAction entryId:" << entryId
+ << "actionName:" << actionName;
+ return CaService::instance()->executeCommand(entryId, actionName);
+}
+
+/*!
+ Launch task switcher
+ \retval boolean launching status
+ */
+bool HsMenuService::launchTaskSwitcher()
+{
+ qDebug() << "HsMenuService::launchTaskSwitcher";
+ HbDeviceDialog deviceDialog;
+ QVariantMap params;
+ return deviceDialog.show(Hs::tsDeviceDialogUri, params);
+}
+
+/*!
+ Adds new collection
+ \param name of the collection
+ \retval entryId of new collection
+ */
+int HsMenuService::createCollection(const QString &name)
+{
+ qDebug() << "HsMenuService::addCollection name: " << name;
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::createCollection");
+ int entryId = 0;
+ CaEntry collection(GroupEntryRole);
+ collection.setEntryTypeName(Hs::collectionTypeName);
+ collection.setText(name);
+ collection.setAttribute(Hs::groupNameAttributeName,name);
+ CaIconDescription iconDescription;
+ iconDescription.setFilename(Hs::defaultCollectionIconId);
+ collection.setIconDescription(iconDescription);
+ QSharedPointer<CaEntry> entry = CaService::instance()->createEntry(collection);
+ if (!entry.isNull()) {
+ qDebug() << "HsMenuService::addCollection entry" << entry;
+ entryId = entry->id();
+ CaService::instance()->appendEntryToGroup(allCollectionsId(),
+ entryId);
+ }
+ HSMENUTEST_FUNC_EXIT("HsMenuService::createCollection");
+ return entryId;
+}
+
+/*!
+ Renames a collection
+ \param id of this collection
+ \param new name for collection
+ \retval boolean error code
+ */
+bool HsMenuService::renameCollection(int collectionId,
+ const QString &newCollectionName)
+{
+ qDebug() << "HsMenuService::renameCollection collectionId:"
+ << collectionId << "newCollectionName" << newCollectionName;
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::renameCollection");
+ bool result(false);
+ QSharedPointer<CaEntry> collection = CaService::instance()->getEntry(collectionId);
+ if (collection) {
+ qDebug() << "HsMenuService::renameCollection collection"
+ << collection;
+
+ collection->setText(newCollectionName);
+ collection->setAttribute(COLLECTION_TITLE_NAME, newCollectionName);
+ collection->setAttribute(COLLECTION_SHORT_NAME, newCollectionName);
+ result = CaService::instance()->updateEntry(*collection);
+ }
+ HSMENUTEST_FUNC_EXIT("HsMenuService::renameCollection");
+ return result;
+}
+
+/*!
+ Removes a collection
+ \param id of this collection
+ \retval boolean error code
+ */
+bool HsMenuService::removeCollection(int collectionId)
+{
+ qDebug() << "HsMenuService::removeCollection collectionId:"
+ << collectionId;
+
+ return CaService::instance()->removeEntry(collectionId);
+}
+
+/*!
+ Adds applications to collection
+ \param list with applications entries ids
+ \param collection id
+ \retval boolean error code
+ */
+bool HsMenuService::addApplicationsToCollection(
+ const QList<int> &applicationList, int collectionId)
+{
+ qDebug() << "HsMenuService::addApplicationsToCollection"
+ << "applicationList ids:" << applicationList << "collectionId:"
+ << collectionId;
+
+ return CaService::instance()->appendEntriesToGroup(collectionId,
+ applicationList);
+}
+
+/*!
+ Removes application from collection
+ \param application id
+ \param collection id
+ \retval boolean error code
+ */
+bool HsMenuService::removeApplicationFromCollection(int applicationId,
+ int collectionId)
+{
+ qDebug() << "HsMenuService::removeApplicationFromCollection"
+ << "applicationId:" << applicationId << "collectionId:"
+ << collectionId;
+
+ return CaService::instance()->removeEntryFromGroup(collectionId,
+ applicationId);
+}
+
+/*!
+ Organizes collection's entries.
+ \param groupId Group id.
+ \param entryIdList Group's entries' ids list.
+ \retval Return true if organize collection is done correctly,
+ otherwise return false.
+ */
+bool HsMenuService::organizeCollection(int groupId, QList<int> &entryIdList)
+{
+ qDebug() << "HsMenuService::organizeCollection"
+ << "groupId:" << groupId
+ << "collectionIds:" << entryIdList;
+ return CaService::instance()->customSort(groupId, entryIdList);
+}
+
+/*!
+ Retrives the all collections entry id
+ \retval all collections id
+ */
+int HsMenuService::allCollectionsId()
+{
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::allCollectionsId");
+ if (mAllCollectionsId <= 0) {
+ CaQuery collectionsQuery;
+ collectionsQuery.setEntryRoles(GroupEntryRole);
+ //sorting is set to (default, ascending) to assure that
+ //proper entry is fetched, somebody can add item with
+ //"menucollections" typename to the storage, but even if he or she
+ //do this we fetch entry that we wanted
+ collectionsQuery.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+ collectionsQuery.addEntryTypeName(Hs::menuCollectionsTypeName);
+ QList<int> ids = CaService::instance()->getEntryIds(
+ collectionsQuery);
+ Q_ASSERT(ids.count() > 0);
+ mAllCollectionsId = ids.at(0);
+ qDebug() << "HsMenuService::HsMenuService mAllCollectionsId"
+ << mAllCollectionsId;
+ }
+ HSMENUTEST_FUNC_EXIT("HsMenuService::allCollectionsId");
+ return mAllCollectionsId;
+}
+
+/*!
+ Retrives the first found collection entry id
+ \param collectionType collection type.
+ \retval collectionType id
+ */
+int HsMenuService::collectionIdByType(const QString& collectionType)
+{
+ HSMENUTEST_FUNC_ENTRY("HsMenuService::collectionsIdByType");
+ int collectionId;
+ CaQuery collectionsQuery;
+ collectionsQuery.setEntryRoles(GroupEntryRole);
+ //sorting is set to (default, ascending) to assure that
+ //proper entry is fetched, somebody can add item with
+ //"menucollections" typename to the storage, but even if he or she
+ //do this we fetch entry that we wanted
+ collectionsQuery.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+ collectionsQuery.addEntryTypeName(collectionType);
+ QList<int> ids = CaService::instance()->getEntryIds(
+ collectionsQuery);
+ Q_ASSERT(ids.count() > 0);
+ collectionId = ids.at(0);
+ qDebug() << "HsMenuService::HsMenuService collectionsIdByType"
+ << collectionId;
+ HSMENUTEST_FUNC_EXIT("HsMenuService::collectionsIdByType");
+ return collectionId;
+}
+
+/*!
+ Touch action on an entry.
+ \param entryId of this entry.
+ \retval boolean error code.
+ */
+void HsMenuService::touch(int entryId)
+{
+ QSharedPointer<CaEntry> entry = CaService::instance()->getEntry(entryId);
+ if (entry->flags() & RemovableEntryFlag &&
+ (entry->flags() & UsedEntryFlag) == 0 &&
+ entry->role() == ItemEntryRole &&
+ entry->entryTypeName() != QString(Hs::packageTypeName)) {
+ CaService::instance()->touch(* entry);
+ }
+}
+
+/*!
+ Touch action on an lists of entries.
+ \param entryIdList of this entry.
+ \retval boolean error code.
+ */
+void HsMenuService::touch(const QList<int> &entryIdList)
+{
+ CaQuery query;
+ query.setFlagsOn(RemovableEntryFlag);
+ query.setFlagsOff(UsedEntryFlag);
+ query.setEntryRoles(ItemEntryRole);
+ QList<int> removableUnTouchEntries =
+ CaService::instance()->getEntryIds(query);
+ foreach (int item, entryIdList) {
+ if (removableUnTouchEntries.contains(item)) {
+ touch(item);
+ }
+ }
+}
+
+/*!
+ Launch SoftwareUpdateApplication
+ \retval int launching status, 0 if no errors
+ */
+int HsMenuService::launchSoftwareUpdate()
+{
+ qDebug() << "HsMenuService::launchSoftwareUpdate";
+ QScopedPointer<CaEntry> tsEntry(new CaEntry);
+ tsEntry->setEntryTypeName(Hs::applicationTypeName);
+ tsEntry->setAttribute(
+ Hs::applicationUidEntryKey, QString::number(Hs::softwareUpdateApplicationUid));
+ int retval = CaService::instance()->executeCommand(*tsEntry,
+ Hs::openActionIdentifier);
+ return retval;
+}