[Feedback] Added checking if pattern is supported before playing 36/122836/4
authorSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Wed, 5 Apr 2017 09:01:45 +0000 (11:01 +0200)
committerSzymon Jastrzebski <s.jastrzebsk@partner.samsung.com>
Wed, 5 Apr 2017 09:01:45 +0000 (11:01 +0200)
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 <s.jastrzebsk@partner.samsung.com>
src/feedback/feedback_manager.cc
src/feedback/feedback_manager.h

index 381ecb5442a59339e786779e14ac93dd0492434c..91e0e090406ba43529464d0d1af92d94a158a296 100644 (file)
@@ -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<FeedbackMaps> 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);
 }
 
index 471ab7c3854f1075ac9133cee48179bee54716de..34c2a12914a5b8b3dfe10fbf4a7ecc4e47d7f642 100644 (file)
@@ -29,6 +29,7 @@ namespace feedback {
 
 using stringPatternMap = std::map<std::string, feedback_pattern_e>;
 using stringTypeMap = std::map<std::string, feedback_type_e>;
+using supportedPatternsMap = std::map<std::pair<feedback_pattern_e, feedback_type_e>, 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 {