[AT-SPI] Add notification for a11y name/description change 76/244476/25
authorArtur Świgoń <a.swigon@samsung.com>
Fri, 18 Sep 2020 16:15:50 +0000 (18:15 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Fri, 23 Oct 2020 13:07:00 +0000 (15:07 +0200)
Change-Id: I92236ae2558eda77e832c9989a40f65e92cb5a05

dali-toolkit/internal/controls/buttons/button-impl.cpp
dali-toolkit/internal/controls/buttons/button-impl.h
dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp
dali-toolkit/internal/controls/buttons/toggle-button-impl.h
dali-toolkit/internal/controls/control/control-data-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.h
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/public-api/controls/control-impl.cpp

index c2d21ba..1f5510d 100644 (file)
@@ -1326,6 +1326,17 @@ std::string Button::AccessibleImpl::GetNameRaw()
   return labelText;
 }
 
+Property::Index Button::AccessibleImpl::GetNamePropertyIndex()
+{
+  Property::Index label = Toolkit::Button::Property::LABEL;
+  Property::Map labelMap = self.GetProperty<Property::Map>(label);
+
+  if (MapContainsTextString(labelMap))
+    return label;
+  else
+    return Property::INVALID_INDEX;
+}
+
 Dali::Accessibility::States Button::AccessibleImpl::CalculateStates()
 {
   auto tmp = Control::Impl::AccessibleImpl::CalculateStates();
index 881b0a1..ebe34e0 100644 (file)
@@ -549,6 +549,7 @@ protected:
 
     Dali::Accessibility::States CalculateStates() override;
     std::string GetNameRaw() override;
+    Property::Index GetNamePropertyIndex() override;
   };
 };
 
index 15ac51a..a756a22 100644 (file)
@@ -395,6 +395,11 @@ std::string ToggleButton::AccessibleImpl::GetDescriptionRaw()
   return tooltips[index].Get<std::string>();
 }
 
+Property::Index ToggleButton::AccessibleImpl::GetDescriptionPropertyIndex()
+{
+  return Toolkit::ToggleButton::Property::TOOLTIPS;
+}
+
 void ToggleButton::OnStateChange( State newState )
 {
   // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used
index 7609773..a3bb83a 100644 (file)
@@ -170,6 +170,7 @@ protected:
 
     Dali::Accessibility::States CalculateStates() override;
     std::string GetDescriptionRaw() override;
+    Property::Index GetDescriptionPropertyIndex() override;
   };
   void OnStateChange( State newState ) override;
 };
index c3c8062..0a7d70e 100755 (executable)
@@ -1882,6 +1882,32 @@ Control::Impl::AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibil
   Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get( internalControl );
   if( controlImpl.mAccessibilityRole == Dali::Accessibility::Role::UNKNOWN )
     controlImpl.mAccessibilityRole = role;
+
+  self.PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle &handle, Dali::Property::Index index, Dali::Property::Value value)
+  {
+    if (this->self != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
+    {
+      return;
+    }
+
+    if (index == DevelControl::Property::ACCESSIBILITY_NAME
+      || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet))
+    {
+      if (controlImpl.mAccessibilityGetNameSignal.Empty())
+      {
+        Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME);
+      }
+    }
+
+    if (index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION
+      || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet))
+    {
+      if (controlImpl.mAccessibilityGetDescriptionSignal.Empty())
+      {
+        Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION);
+      }
+    }
+  });
 }
 
 std::string Control::Impl::AccessibleImpl::GetName()
@@ -2218,6 +2244,16 @@ void Control::Impl::AccessibleImpl::EnsureSelfVisible()
   }
 }
 
+Property::Index Control::Impl::AccessibleImpl::GetNamePropertyIndex()
+{
+  return Actor::Property::NAME;
+}
+
+Property::Index Control::Impl::AccessibleImpl::GetDescriptionPropertyIndex()
+{
+  return Property::INVALID_INDEX;
+}
+
 void Control::Impl::PositionOrSizeChangedCallback( PropertyNotification &p )
 {
   auto self = Dali::Actor::DownCast(p.GetTarget());
index 0d00428..8d34435 100755 (executable)
@@ -590,6 +590,8 @@ public:
     virtual Dali::Accessibility::States CalculateStates();
     virtual void EnsureChildVisible(Actor child);
     virtual void EnsureSelfVisible();
+    virtual Property::Index GetNamePropertyIndex();
+    virtual Property::Index GetDescriptionPropertyIndex();
   };
 
   std::function< std::unique_ptr< Dali::Accessibility::Accessible >( Actor ) > accessibilityConstructor;
index 2b61ddb..d02fd67 100755 (executable)
@@ -989,6 +989,11 @@ std::string TextLabel::AccessibleImpl::GetNameRaw()
   return slf.GetProperty( Toolkit::TextLabel::Property::TEXT ).Get< std::string >();
 }
 
+Property::Index TextLabel::AccessibleImpl::GetNamePropertyIndex()
+{
+  return Toolkit::TextLabel::Property::TEXT;
+}
+
 std::string TextLabel::AccessibleImpl::GetText( size_t startOffset,
                                                 size_t endOffset )
 {
index 4bef484..926128e 100644 (file)
@@ -186,6 +186,7 @@ protected:
     bool SetSelection( size_t selectionNum, size_t startOffset,
                        size_t endOffset ) override;
     std::string GetNameRaw() override;
+    Property::Index GetNamePropertyIndex() override;
   };
 };
 
index 684e695..c34dbb3 100644 (file)
@@ -652,14 +652,6 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper
       }
       break;
     }
-    case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME:
-    {
-      if( Dali::Accessibility::IsUp() )
-      {
-        Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::NAME );
-      }
-      break;
-    }
     case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE:
     {
       if( Dali::Accessibility::IsUp() )
@@ -668,14 +660,6 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper
       }
       break;
     }
-    case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION:
-    {
-      if( Dali::Accessibility::IsUp() )
-      {
-        Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION );
-      }
-      break;
-    }
   }
 }