From: Szymon Jastrzebski Date: Wed, 5 Apr 2017 09:01:45 +0000 (+0200) Subject: [Feedback] Added checking if pattern is supported before playing X-Git-Tag: submit/tizen_3.0/20170410.090908~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a50607d136a621e6335c9824354d86312eb58fd0;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Feedback] Added checking if pattern is supported before playing If given pattern is not supported, exception will be thrown. [Verification] Code compiles TCT Feedback passed A 100% M 2 fails Failed TCs will be requested to be changed Change-Id: I6ee43602d4c06ade3a569d48978a78b2f04dccab Signed-off-by: Szymon Jastrzebski --- diff --git a/src/feedback/feedback_manager.cc b/src/feedback/feedback_manager.cc index 381ecb54..91e0e090 100644 --- a/src/feedback/feedback_manager.cc +++ b/src/feedback/feedback_manager.cc @@ -92,6 +92,21 @@ feedback_type_e const & FeedbackMaps::getTypeFromMap(const std::string& type) { return mTypeMap[type]; } +bool FeedbackMaps::isPatternSupportChecked(const feedback_pattern_e pattern, + const feedback_type_e type) { + return mSupportedMap.find(std::make_pair(pattern, type)) != mSupportedMap.end(); +} + +bool FeedbackMaps::isPatternSupported(const feedback_pattern_e pattern, + const feedback_type_e type) { + return mSupportedMap[std::make_pair(pattern, type)]; +} + +void FeedbackMaps::setPatternSupport(const feedback_pattern_e pattern, const feedback_type_e type, + const bool isSupported) { + mSupportedMap[std::make_pair(pattern, type)] = isSupported; +} + FeedbackManager::FeedbackManager(std::shared_ptr maps) : m_feedbackMapsPtr(maps) { @@ -114,34 +129,47 @@ FeedbackManager::~FeedbackManager() { } } -common::PlatformResult -FeedbackManager::isPatternSupported(const std::string &pattern, const std::string &type, bool* patternStatus) { +common::PlatformResult FeedbackManager::isPatternSupported(const std::string &pattern, + const std::string &type, + bool* patternStatus) { LoggerD("Entered"); - int ret = feedback_is_supported_pattern( - m_feedbackMapsPtr->getTypeFromMap(type), - m_feedbackMapsPtr->getPatternFromMap(pattern), - patternStatus - ); - if(ret != FEEDBACK_ERROR_NONE) { + auto &pattern_e = m_feedbackMapsPtr->getPatternFromMap(pattern); + auto &type_e = m_feedbackMapsPtr->getTypeFromMap(type); + if (m_feedbackMapsPtr->isPatternSupportChecked(pattern_e, type_e)) { + *patternStatus = m_feedbackMapsPtr->isPatternSupported(pattern_e, type_e); + return PlatformResult(ErrorCode::NO_ERROR); + } + int ret = feedback_is_supported_pattern(type_e, pattern_e, patternStatus); + if (ret != FEEDBACK_ERROR_NONE) { LoggerE("isPatternSupported failed: %d", ret); return CodeToResult(ret, getFeedbackErrorMessage(ret).c_str()); - } + } + m_feedbackMapsPtr->setPatternSupport(pattern_e, type_e, *patternStatus); return PlatformResult(ErrorCode::NO_ERROR); } common::PlatformResult FeedbackManager::play(const std::string &pattern, const std::string &type) { LoggerD("Entered"); int ret = 0; - if(type == "any") { + if (type == "any") { ret = feedback_play(m_feedbackMapsPtr->getPatternFromMap(pattern)); } else { - ret = feedback_play_type(m_feedbackMapsPtr->getTypeFromMap(type), - m_feedbackMapsPtr->getPatternFromMap(pattern)); + bool patternSupport = false; + auto result = isPatternSupported(pattern, type, &patternSupport); + if (!result) { + return result; + } + if (patternSupport) { + ret = feedback_play_type(m_feedbackMapsPtr->getTypeFromMap(type), + m_feedbackMapsPtr->getPatternFromMap(pattern)); + } else { + return CodeToResult(FEEDBACK_ERROR_NOT_SUPPORTED, "Not supported device"); + } } - if(ret != FEEDBACK_ERROR_NONE) { + if (ret != FEEDBACK_ERROR_NONE) { LoggerE("play failed: %d", ret); return CodeToResult(ret, getFeedbackErrorMessage(ret).c_str()); - } + } return PlatformResult(ErrorCode::NO_ERROR); } diff --git a/src/feedback/feedback_manager.h b/src/feedback/feedback_manager.h index 471ab7c3..34c2a129 100644 --- a/src/feedback/feedback_manager.h +++ b/src/feedback/feedback_manager.h @@ -29,6 +29,7 @@ namespace feedback { using stringPatternMap = std::map; using stringTypeMap = std::map; +using supportedPatternsMap = std::map, bool>; class FeedbackMaps { public: @@ -36,9 +37,13 @@ class FeedbackMaps { virtual ~FeedbackMaps(); feedback_pattern_e const & getPatternFromMap(const std::string& pattern); feedback_type_e const & getTypeFromMap(const std::string& type); + bool isPatternSupportChecked(const feedback_pattern_e pattern, const feedback_type_e type); + bool isPatternSupported(const feedback_pattern_e pattern, const feedback_type_e type); + void setPatternSupport(const feedback_pattern_e pattern, const feedback_type_e type, const bool isSupported); private: stringTypeMap mTypeMap; stringPatternMap mPatternMap; + supportedPatternsMap mSupportedMap; }; class FeedbackManager {