diff -r f00a6757af32 -r 5f0182e07bfb homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp --- /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 +#include +#include +#include + +#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 > collections = CaService::instance()->getEntries(query); + QStringList resultList; + foreach(QSharedPointer 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 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 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 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 &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 &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 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 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 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 &entryIdList) +{ + CaQuery query; + query.setFlagsOn(RemovableEntryFlag); + query.setFlagsOff(UsedEntryFlag); + query.setEntryRoles(ItemEntryRole); + QList 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 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; +}