Add imgSrc to GetAttribute return map if available 60/321060/1
authorHosang Kim <hosang12.kim@samsung.com>
Wed, 27 Nov 2024 06:25:11 +0000 (15:25 +0900)
committerHosang Kim <hosang12.kim@samsung.com>
Wed, 27 Nov 2024 06:26:24 +0000 (15:26 +0900)
Change-Id: Ic1ea1e5e7c205b09181699b836788f7393fed2e1

dali-toolkit/devel-api/controls/control-accessible.cpp

index d2b07d530f968e38d8fed6bfe577e769beb8e965..86e396f7098bab5759019c6a11e279c95058672f 100644 (file)
 
 #include <dali/devel-api/actors/actor-devel.h>
 #include <dali/devel-api/adaptor-framework/window-devel.h>
+#include <dali/public-api/object/property-map.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/devel-api/asset-manager/asset-manager.h>
 #include <dali-toolkit/internal/controls/control/control-data-impl.h>
+#include <dali-toolkit/internal/visuals/image/image-visual.h>
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/controls/control.h>
 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
@@ -178,6 +180,44 @@ bool IsHighlightable(TriStateProperty highlightable, int32_t rawRole)
   }
 }
 
+std::string FetchImageSrcFromMap(const Dali::Property::Map& imageMap)
+{
+  auto urlVal = imageMap.Find(Toolkit::ImageVisual::Property::URL);
+  if(urlVal)
+  {
+    if(urlVal->GetType() == Dali::Property::STRING)
+    {
+      return urlVal->Get<std::string>();
+    }
+    else if(urlVal->GetType() == Dali::Property::ARRAY)
+    {
+      auto urlArray = urlVal->GetArray();
+      if(urlArray && !urlArray->Empty())
+      {
+        // Returns first element if url is an array
+        return (*urlArray)[0].Get<std::string>();
+      }
+    }
+  }
+  return {};
+}
+
+std::string FetchImageSrc(const Toolkit::ImageView& imageView)
+{
+  const auto imageUrl = imageView.GetProperty<std::string>(Toolkit::ImageView::Property::IMAGE);
+  if(!imageUrl.empty())
+  {
+    return imageUrl;
+  }
+
+  const auto imageMap = imageView.GetProperty<Dali::Property::Map>(Toolkit::ImageView::Property::IMAGE);
+  if(!imageMap.Empty())
+  {
+    return FetchImageSrcFromMap(imageMap);
+  }
+  return {};
+}
+
 } // unnamed namespace
 
 ControlAccessible::ControlAccessible(Dali::Actor self)
@@ -354,6 +394,14 @@ void ControlAccessible::UpdateAttributes(Accessibility::Attributes& attributes)
   {
     attributes.insert_or_assign(automationIdKey, std::move(automationId));
   }
+
+  static const std::string imgSrcKey = "imgSrc";
+
+  if(auto imageView = Toolkit::ImageView::DownCast(Self()))
+  {
+    auto imageSrc = FetchImageSrc(imageView);
+    attributes.insert_or_assign(imgSrcKey, std::move(imageSrc));
+  }
 }
 
 bool ControlAccessible::IsHidden() const