diff -r c743ef5928ba -r f9ce957a272c homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddtohomescreenstate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddtohomescreenstate.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,208 @@ +/* +* 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: Menu Application Library state. + * +*/ + + +#include +#include +#include +#include +#include + +#include "hsaddtohomescreenstate.h" +#include "hsmenuevent.h" +#include "hsapp_defs.h" +#include "caservice.h" +#include "caquery.h" +#include "hsmenuservice.h" + +const char SHORTCUT_WIDGET_URI[] = "hsshortcutwidgetplugin"; +const char SHORTCUT_ID[] = "mcsId"; + +/*! + \class HsAddToHomeScreenState + \ingroup group_hsmenustateplugin + \brief Application Library State. + Parent state for Application Library functionality + (browsing applications and collections) + */ + +/*! + Constructor + \param parent: parent state + \retval void + */ +HsAddToHomeScreenState::HsAddToHomeScreenState(QState *parent) : + HsMenuBaseState("AddToHomeScreenState", parent) +{ + requestServices(QList () << SHORTCUT_SERVICE_KEY + << CONTENT_SERVICE_KEY); +} + +/*! + Destructor. Empty one. + */ +HsAddToHomeScreenState::~HsAddToHomeScreenState() +{ +} + +/*! + onEntry method invoked on entering the state + Adds a widget or shortcut to the active page of home screen. + It reads "data" property which value is a string map. + The map can keep either data specific for shortcut (item id) + or widget (entry type name, widget library name, widget uri). + Depending on the property values it calls method for adding widget + or shortcut. + \param contentService: service for adding widgets + \retval void + */ +void HsAddToHomeScreenState::onEntry(QEvent *event) +{ + HSMENUTEST_FUNC_ENTRY("HsAddToHomeScreenState::onEntry"); + HsMenuBaseState::onEntry(event); + HsMenuEvent *menuEvent = static_cast(event); + QVariantMap data = menuEvent->data(); + + const QString entryTypeName = data.value(entryTypeNameKey()).toString(); + + const int entryId = data.value(itemIdKey()).toInt(); + + if (entryTypeName == widgetTypeName()) { + const QString library = + data.value(widgetLibraryAttributeName()).toString(); + + const QString uri = data.value(widgetUriAttributeName()).toString(); + + addWidget(*contentService(), library, uri, entryId); + HsMenuService::touch(entryId); + } else { + addShortcut(*contentService(), entryId); + } + HSMENUTEST_FUNC_EXIT("HsAddToHomeScreenState::onEntry"); +} + +/*! + Adds a widget to active page of home screen + \param contentService: service for adding widgets + \param library: widget library path and file name + \param uri: widget uri + \param entryId: widget entry id (ignored) + \param activePage: active page of home screen + \retval void + */ +void HsAddToHomeScreenState::addWidget(HsContentService &contentService, + const QString &library, const QString &uri, int entryId) +{ + HSMENUTEST_FUNC_ENTRY("HsAddToHomeScreenState::addWidget"); + QVariantMap params; + params["library"] = library; + params["uri"] = uri; + bool ok = contentService.createWidget(params); + if (!ok) { + showMessageWidgetCorrupted(entryId); + } + logActionResult("Adding widget", entryId, ok); + HSMENUTEST_FUNC_EXIT("HsAddToHomeScreenState::addWidget"); +} + +/*! + Shows message about corrupted widget library. Deletes widget eventually + \param itemId entryId of widget (needed to delete it) + \retval void + */ +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT +void HsAddToHomeScreenState::showMessageWidgetCorrupted(int itemId) +{ + HSMENUTEST_FUNC_ENTRY("HsCollectionState::showMessageWidgetCorrupted"); + QString message(hbTrId( + "txt_applib_dialog_file_corrupted_unable_to_use_wi")); + if (HbMessageBox::question(message, hbTrId( + "txt_common_button_ok"), hbTrId("txt_common_button_cancel"))) { + HsMenuService::executeAction(itemId, removeActionIdentifier()); + } + HSMENUTEST_FUNC_EXIT("HsCollectionState::showMessageWidgetCorrupted"); +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT +/*! + Adds a shortcut to active page of home screen + \param shortcutService: service for adding shortcuts + \param entryId: menu entry id + \param activePage: active page of home screen + \retval void + */ +void HsAddToHomeScreenState::addShortcut(HsContentService &contentService, + int entryId) +{ + //ShortcutData item_id; + //item_id.mShortcutId = entryId; + + HSMENUTEST_FUNC_ENTRY("HsAddToHomeScreenState::addShortcut"); + CaQuery query; + query.setEntryTypeNames(QStringList(widgetTypeName())); + QList entries = CaService::instance()->getEntries(query); + + if (mLibraryPath.isEmpty()) { + foreach(CaEntry *entry,entries) { + QString uri = entry->attribute(widgetUriAttributeName()); + if (uri == SHORTCUT_WIDGET_URI) { + mLibraryPath = entry->attribute( + widgetLibraryAttributeName()); + break; + } + } + } + if (!mLibraryPath.isEmpty()) { + QVariantMap params; + params["library"] = mLibraryPath; + params["uri"] = SHORTCUT_WIDGET_URI; + QVariantMap preferences; + preferences[SHORTCUT_ID] = QString::number(entryId); + params["preferences"] = preferences; + const bool result = contentService.createWidget(params); + logActionResult("Adding shortcut", entryId, result); + } + HSMENUTEST_FUNC_EXIT("HsAddToHomeScreenState::addShortcut"); +} + +/*! + Provides debug logging of add widget/shortcut action + \param operation name: results of which operation is logged + \param entryId: menu entry id that was added to home screen + \param activePage: active page of home screen + \param operationSucceded: true always and only when + logged operation succeded + \retval void + */ +void HsAddToHomeScreenState::logActionResult(QString operationName, + int entryId, bool operationSucceded) +{ + const QString + message = + QString("\t%1 %2 item ID: %3, active page index: %4") .arg( + operationName) .arg(operationSucceded ? "succeded" + : "failed") .arg(entryId); + + if (operationSucceded) { + qDebug() << message; + } else { + qWarning() << message; + } +}