[NUI][AT-SPI] Remove SetAccessibilityConstructor()
authorArtur Świgoń <a.swigon@samsung.com>
Fri, 11 Mar 2022 08:08:05 +0000 (09:08 +0100)
committerJaehyun Cho <jaehyun0cho@gmail.com>
Wed, 20 Apr 2022 08:38:08 +0000 (17:38 +0900)
33 files changed:
src/Tizen.NUI.Components/Controls/AlertDialog.cs
src/Tizen.NUI.Components/Controls/Button.Internal.cs
src/Tizen.NUI.Components/Controls/CheckBox.cs
src/Tizen.NUI.Components/Controls/DatePicker.cs
src/Tizen.NUI.Components/Controls/Dialog.cs
src/Tizen.NUI.Components/Controls/Loading.cs
src/Tizen.NUI.Components/Controls/Menu.cs
src/Tizen.NUI.Components/Controls/MenuItem.cs
src/Tizen.NUI.Components/Controls/Navigation/AppBar.cs
src/Tizen.NUI.Components/Controls/Navigation/ContentPage.cs
src/Tizen.NUI.Components/Controls/Navigation/Navigator.cs
src/Tizen.NUI.Components/Controls/Pagination.cs
src/Tizen.NUI.Components/Controls/Picker.cs
src/Tizen.NUI.Components/Controls/Popup.cs
src/Tizen.NUI.Components/Controls/Progress.cs
src/Tizen.NUI.Components/Controls/RadioButton.cs
src/Tizen.NUI.Components/Controls/RecyclerView/CollectionView.cs
src/Tizen.NUI.Components/Controls/RecyclerView/Item/RecyclerViewItem.Internal.cs
src/Tizen.NUI.Components/Controls/Slider.cs
src/Tizen.NUI.Components/Controls/Switch.cs
src/Tizen.NUI.Components/Controls/TabBar.cs
src/Tizen.NUI.Components/Controls/TabButton.cs
src/Tizen.NUI.Components/Controls/TabContent.cs
src/Tizen.NUI.Components/Controls/TabView.cs
src/Tizen.NUI.Components/Controls/TimePicker.cs
src/Tizen.NUI/src/public/Accessibility/IAtspiEditableText.cs [new file with mode: 0644]
src/Tizen.NUI/src/public/Accessibility/IAtspiSelection.cs [new file with mode: 0644]
src/Tizen.NUI/src/public/Accessibility/IAtspiText.cs [new file with mode: 0644]
src/Tizen.NUI/src/public/Accessibility/IAtspiValue.cs [new file with mode: 0644]
src/Tizen.NUI/src/public/BaseComponents/CustomView.cs
src/Tizen.NUI/src/public/BaseComponents/ViewAccessibility.cs
src/Tizen.NUI/src/public/BaseComponents/ViewAccessibilityEnum.cs
src/Tizen.NUI/src/public/BaseComponents/ViewAccessibilityWrappers.cs

index c67aa3f..ba9e69a 100755 (executable)
@@ -463,7 +463,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.Dialog);
+            AccessibilityRole = Role.Dialog;
             AppendAccessibilityAttribute("sub-role", "Alert");
             Show(); // calls RegisterDefaultLabel(); Hide() will call UnregisterDefaultLabel()
         }
index decaf67..ab4e503 100644 (file)
@@ -275,8 +275,8 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.PushButton);
 
+            AccessibilityRole = Role.PushButton;
             AccessibilityHighlightable = true;
             EnableControlStatePropagation = true;
 
index d0b0da2..fc2581c 100755 (executable)
@@ -51,7 +51,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.CheckBox);
+            AccessibilityRole = Role.CheckBox;
             WidthSpecification = LayoutParamPolicies.WrapContent;
             HeightSpecification = LayoutParamPolicies.WrapContent;
         }
index d1aa687..bfbe1e7 100755 (executable)
@@ -183,7 +183,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.DateEditor);
+            AccessibilityRole = Role.DateEditor;
 
             dayPicker = new Picker()
             {
index 5b258ec..00fce27 100755 (executable)
@@ -133,7 +133,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.Dialog);
+            AccessibilityRole = Role.Dialog;
             AppendAccessibilityAttribute("sub-role", "Alert");
             Show(); // calls RegisterDefaultLabel(); Hide() will call UnregisterDefaultLabel()
         }
index b54654f..9cd8cb4 100755 (executable)
@@ -226,7 +226,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.ProgressBar);
+            AccessibilityRole = Role.ProgressBar;
 
             imageVisual = new AnimatedImageVisual()
             {
index 91c6e69..56e6efc 100755 (executable)
@@ -652,7 +652,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.PopupMenu);
+            AccessibilityRole = Role.PopupMenu;
             AppendAccessibilityAttribute("sub-role", "Alert");
         }
 
index fe9688d..d9b0ac0 100755 (executable)
@@ -244,7 +244,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.MenuItem);
+            AccessibilityRole = Role.MenuItem;
         }
     }
 }
index 41280b6..5485227 100755 (executable)
@@ -544,7 +544,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.TitleBar);
+            AccessibilityRole = Role.TitleBar;
         }
 
         /// <summary>
index aeeb2e7..9dd60ec 100755 (executable)
@@ -76,7 +76,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.PageTab);
+            AccessibilityRole = Role.PageTab;
         }
 
         /// <summary>
index 7e8dbf2..8094b7d 100755 (executable)
@@ -132,7 +132,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.PageTabList);
+            AccessibilityRole = Role.PageTabList;
         }
 
         /// <summary>
index 64b3ba2..9dd36c5 100755 (executable)
@@ -19,6 +19,7 @@ using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Diagnostics;
+using Tizen.NUI.Accessibility;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Binding;
 
@@ -28,7 +29,7 @@ namespace Tizen.NUI.Components
     /// Pagination shows the number of pages available and the currently active page.
     /// </summary>
     /// <since_tizen> 8 </since_tizen>
-    public partial class Pagination : Control
+    public partial class Pagination : Control, IAtspiValue
     {
         /// <summary>The IndicatorSize bindable property.</summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -453,7 +454,7 @@ namespace Tizen.NUI.Components
         /// Minimum value.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMinimum()
+        double IAtspiValue.AccessibilityGetMinimum()
         {
             return 0.0;
         }
@@ -462,7 +463,7 @@ namespace Tizen.NUI.Components
         /// Current value.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetCurrent()
+        double IAtspiValue.AccessibilityGetCurrent()
         {
             return (double)SelectedIndex;
         }
@@ -471,7 +472,7 @@ namespace Tizen.NUI.Components
         /// Maximum value.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMaximum()
+        double IAtspiValue.AccessibilityGetMaximum()
         {
             return (double)IndicatorCount;
         }
@@ -480,7 +481,7 @@ namespace Tizen.NUI.Components
         /// Current value.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override bool AccessibilitySetCurrent(double value)
+        bool IAtspiValue.AccessibilitySetCurrent(double value)
         {
             int integerValue = (int)value;
 
@@ -497,7 +498,7 @@ namespace Tizen.NUI.Components
         /// Minimum increment.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMinimumIncrement()
+        double IAtspiValue.AccessibilityGetMinimumIncrement()
         {
             return 1.0;
         }
@@ -507,7 +508,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.ScrollBar, AccessibilityInterface.Value);
+            AccessibilityRole = Role.ScrollBar;
             AccessibilityHighlightable = true;
             AppendAccessibilityAttribute("style", "pagecontrolbyvalue");
 
index f745f73..019a87b 100755 (executable)
@@ -294,7 +294,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.List);
+            AccessibilityRole = Role.List;
 
             Initialize();
         }
index 59d93a6..2ebe2ab 100755 (executable)
@@ -782,7 +782,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.Dialog);
+            AccessibilityRole = Role.Dialog;
             AppendAccessibilityAttribute("sub-role", "Alert");
 
             container.Add(this);
index f7d239b..ee8c73c 100755 (executable)
  * limitations under the License.
  *
  */
+
 using System;
-using Tizen.NUI.BaseComponents;
-using Tizen.NUI.Binding;
 using System.ComponentModel;
 using System.Diagnostics;
+using Tizen.NUI.Accessibility;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Binding;
 
 namespace Tizen.NUI.Components
 {
@@ -26,7 +28,7 @@ namespace Tizen.NUI.Components
     /// The Progress class is used to show the ongoing status with a long narrow bar.
     /// </summary>
     /// <since_tizen> 6 </since_tizen>
-    public partial class Progress : Control
+    public partial class Progress : Control, IAtspiValue
     {
         /// <summary>
         /// MaxValueProperty
@@ -474,7 +476,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.ProgressBar, AccessibilityInterface.Value);
+            AccessibilityRole = Role.ProgressBar;
             // create necessary components
             InitializeTrack();
             InitializeBuffer();
@@ -521,7 +523,7 @@ namespace Tizen.NUI.Components
         /// Gets minimum value for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMinimum()
+        double IAtspiValue.AccessibilityGetMinimum()
         {
             if (this.ProgressState == Progress.ProgressStatusType.Determinate)
             {
@@ -537,7 +539,7 @@ namespace Tizen.NUI.Components
         /// Gets the current value for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetCurrent()
+        double IAtspiValue.AccessibilityGetCurrent()
         {
             if (this.ProgressState == Progress.ProgressStatusType.Determinate)
             {
@@ -549,11 +551,17 @@ namespace Tizen.NUI.Components
             }
         }
 
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool IAtspiValue.AccessibilitySetCurrent(double value)
+        {
+            return false;
+        }
+
         /// <summary>
         /// Gets maximum value for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMaximum()
+        double IAtspiValue.AccessibilityGetMaximum()
         {
             if (this.ProgressState == Progress.ProgressStatusType.Determinate)
             {
@@ -565,6 +573,12 @@ namespace Tizen.NUI.Components
             }
         }
 
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        double IAtspiValue.AccessibilityGetMinimumIncrement()
+        {
+            return 0.0;
+        }
+
         /// <summary>
         /// Dispose Progress and all children on it.
         /// </summary>
index 3a36152..a802de1 100755 (executable)
@@ -61,7 +61,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.RadioButton);
+            AccessibilityRole = Role.RadioButton;
         }
 
         /// <summary>
index 9b70b59..78f0e39 100755 (executable)
@@ -848,7 +848,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.List);
+            AccessibilityRole = Role.List;
         }
 
         /// <summary>
index e61e033..1133423 100755 (executable)
@@ -191,7 +191,7 @@ namespace Tizen.NUI.Components
 
             AccessibilityManager.Instance.SetAccessibilityAttribute(this, AccessibilityManager.AccessibilityAttribute.Trait, "ViewItem");
 
-            SetAccessibilityConstructor(Role.ListItem);
+            AccessibilityRole = Role.ListItem;
             AccessibilityHighlightable = true;
         }
 
index b1701f1..5c88e1b 100755 (executable)
  * limitations under the License.
  *
  */
+
 using System;
-using Tizen.NUI.BaseComponents;
 using System.ComponentModel;
+using Tizen.NUI.Accessibility;
+using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Binding;
 
 namespace Tizen.NUI.Components
@@ -64,7 +66,7 @@ namespace Tizen.NUI.Components
     /// A slider lets users select a value from a continuous or discrete range of values by moving the slider thumb.
     /// </summary>
     /// <since_tizen> 6 </since_tizen>
-    public partial class Slider : Control
+    public partial class Slider : Control, IAtspiValue
     {
         /// <summary>
         /// SpaceBetweenTrackAndIndicatorProperty
@@ -1536,7 +1538,7 @@ namespace Tizen.NUI.Components
         /// Gets minimum value for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMinimum()
+        double IAtspiValue.AccessibilityGetMinimum()
         {
             return (double)MinValue;
         }
@@ -1545,7 +1547,7 @@ namespace Tizen.NUI.Components
         /// Gets the current value for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetCurrent()
+        double IAtspiValue.AccessibilityGetCurrent()
         {
             return (double)CurrentValue;
         }
@@ -1554,7 +1556,7 @@ namespace Tizen.NUI.Components
         /// Gets maximum value for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMaximum()
+        double IAtspiValue.AccessibilityGetMaximum()
         {
             return (double)MaxValue;
         }
@@ -1563,7 +1565,7 @@ namespace Tizen.NUI.Components
         /// Sets the current value using Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override bool AccessibilitySetCurrent(double value)
+        bool IAtspiValue.AccessibilitySetCurrent(double value)
         {
             var current = (float)value;
 
@@ -1584,7 +1586,7 @@ namespace Tizen.NUI.Components
         /// Gets minimum increment for Accessibility.
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override double AccessibilityGetMinimumIncrement()
+        double IAtspiValue.AccessibilityGetMinimumIncrement()
         {
             // FIXME
             return (MaxValue - MinValue) / 20.0;
@@ -1597,7 +1599,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.Slider, AccessibilityInterface.Value);
+            AccessibilityRole = Role.Slider;
         }
 
         /// <summary>
index 75df8ec..1143a22 100755 (executable)
@@ -66,7 +66,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.ToggleButton);
+            AccessibilityRole = Role.ToggleButton;
 
             IsSelectable = true;
 #if PROFILE_MOBILE
index b4ab380..c6a1ced 100755 (executable)
@@ -99,7 +99,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.PageTabList);
+            AccessibilityRole = Role.PageTabList;
         }
 
         /// <summary>
index f1a1b40..9ffd875 100755 (executable)
@@ -70,7 +70,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.PageTab);
+            AccessibilityRole = Role.PageTab;
         }
 
         /// <inheritdoc/>
index 5c418de..72dd4c1 100755 (executable)
@@ -59,7 +59,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.PageTabList);
+            AccessibilityRole = Role.PageTabList;
         }
 
         /// <summary>
index 6cddfec..ee89c19 100755 (executable)
@@ -105,7 +105,7 @@ namespace Tizen.NUI.Components
         {
             base.OnInitialize();
 
-            SetAccessibilityConstructor(Role.PageTabList);
+            AccessibilityRole = Role.PageTabList;
         }
 
         private void InitTabBar()
index 83794ac..49c2c59 100755 (executable)
@@ -268,7 +268,7 @@ namespace Tizen.NUI.Components
         public override void OnInitialize()
         {
             base.OnInitialize();
-            SetAccessibilityConstructor(Role.DateEditor);
+            AccessibilityRole = Role.DateEditor;
 
             hourPicker = new Picker()
             {
diff --git a/src/Tizen.NUI/src/public/Accessibility/IAtspiEditableText.cs b/src/Tizen.NUI/src/public/Accessibility/IAtspiEditableText.cs
new file mode 100644 (file)
index 0000000..4b6f538
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright(c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+
+namespace Tizen.NUI.Accessibility
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public interface IAtspiEditableText : IAtspiText
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityCopyText(int startPosition, int endPosition);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityCutText(int startPosition, int endPosition);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityInsertText(int startPosition, string text);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilitySetTextContents(string newContents);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityDeleteText(int startPosition, int endPosition);
+    }
+}
diff --git a/src/Tizen.NUI/src/public/Accessibility/IAtspiSelection.cs b/src/Tizen.NUI/src/public/Accessibility/IAtspiSelection.cs
new file mode 100644 (file)
index 0000000..2e57407
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright(c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI.Accessibility
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public interface IAtspiSelection
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        int AccessibilityGetSelectedChildrenCount();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        View AccessibilityGetSelectedChild(int selectedChildIndex);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilitySelectChild(int childIndex);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityDeselectSelectedChild(int selectedChildIndex);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityIsChildSelected(int childIndex);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilitySelectAll();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityClearSelection();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityDeselectChild(int childIndex);
+    }
+}
diff --git a/src/Tizen.NUI/src/public/Accessibility/IAtspiText.cs b/src/Tizen.NUI/src/public/Accessibility/IAtspiText.cs
new file mode 100644 (file)
index 0000000..e610b89
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright(c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI.Accessibility
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public interface IAtspiText
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        string AccessibilityGetText(int startOffset, int endOffset);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        int AccessibilityGetCharacterCount();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        int AccessibilityGetCursorOffset();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilitySetCursorOffset(int offset);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        AccessibilityRange AccessibilityGetTextAtOffset(int offset, AccessibilityTextBoundary boundary);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        AccessibilityRange AccessibilityGetSelection(int selectionNumber);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilityRemoveSelection(int selectionNumber);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilitySetSelection(int selectionNumber, int startOffset, int endOffset);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        Rectangle AccessibilityGetRangeExtents(int startOffset, int endOffset, AccessibilityCoordinateType coordType);
+    }
+}
diff --git a/src/Tizen.NUI/src/public/Accessibility/IAtspiValue.cs b/src/Tizen.NUI/src/public/Accessibility/IAtspiValue.cs
new file mode 100644 (file)
index 0000000..338889f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright(c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+using System.ComponentModel;
+
+namespace Tizen.NUI.Accessibility
+{
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public interface IAtspiValue
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        double AccessibilityGetMinimum();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        double AccessibilityGetCurrent();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        double AccessibilityGetMaximum();
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        bool AccessibilitySetCurrent(double value);
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        double AccessibilityGetMinimumIncrement();
+    }
+}
index 5488d86..c322b64 100755 (executable)
@@ -145,7 +145,7 @@ namespace Tizen.NUI.BaseComponents
         /// <since_tizen> 3 </since_tizen>
         public virtual void OnInitialize()
         {
-            SetAccessibilityConstructor(Role.Unknown);
+            AccessibilityRole = Role.Unknown;
             AppendAccessibilityAttribute("class", this.GetType().Name);
         }
 
index 07cd464..99a389a 100755 (executable)
@@ -477,22 +477,6 @@ namespace Tizen.NUI.BaseComponents
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
-        /// <summary>
-        /// Sets the specific constructor for creating accessibility structure with its role and interface.
-        /// </summary>
-        /// <remarks>
-        /// The method should be called inside OnInitialize method of all classes inheriting from View.
-        /// </remarks>
-        /// <param name="role">Accessibility role</param>
-        /// <param name="accessibilityInterface">Accessibility interface</param>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public void SetAccessibilityConstructor(Role role, AccessibilityInterface accessibilityInterface = AccessibilityInterface.None)
-        {
-            // We have to store the interface flags until we remove SetAccessibilityConstructor and switch to native C# interfaces
-            AtspiInterfaceFlags = (1U << (int)accessibilityInterface);
-            AccessibilityRole = role;
-        }
-
         [EditorBrowsable(EditorBrowsableState.Never)]
         protected override void Dispose(bool disposing)
         {
@@ -598,177 +582,15 @@ namespace Tizen.NUI.BaseComponents
         }
 
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual double AccessibilityGetMinimum()
-        {
-            return 0.0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual double AccessibilityGetCurrent()
-        {
-            return 0.0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual double AccessibilityGetMaximum()
-        {
-            return 0.0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilitySetCurrent(double value)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual double AccessibilityGetMinimumIncrement()
-        {
-            return 0.0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual bool AccessibilityIsScrollable()
         {
             return false;
         }
 
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual string AccessibilityGetText(int startOffset, int endOffset)
-        {
-            return "";
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual int AccessibilityGetCharacterCount()
-        {
-            return 0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual int AccessibilityGetCursorOffset()
-        {
-            return 0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilitySetCursorOffset(int offset)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual AccessibilityRange AccessibilityGetTextAtOffset(int offset, AccessibilityTextBoundary boundary)
-        {
-            return new AccessibilityRange();
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual AccessibilityRange AccessibilityGetSelection(int selectionNumber)
-        {
-            return new AccessibilityRange();
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityRemoveSelection(int selectionNumber)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilitySetSelection(int selectionNumber, int startOffset, int endOffset)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual Rectangle AccessibilityGetRangeExtents(int startOffset, int endOffset, AccessibilityCoordinateType coordType)
-        {
-            return new Rectangle(0, 0, 0, 0);
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityCopyText(int startPosition, int endPosition)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityCutText(int startPosition, int endPosition)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityInsertText(int startPosition, string text)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilitySetTextContents(string newContents)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityDeleteText(int startPosition, int endPosition)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
         protected virtual bool AccessibilityScrollToChild(View child)
         {
             return false;
         }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual int AccessibilityGetSelectedChildrenCount()
-        {
-            return 0;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual View AccessibilityGetSelectedChild(int selectedChildIndex)
-        {
-            return null;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilitySelectChild(int childIndex)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityDeselectSelectedChild(int selectedChildIndex)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityIsChildSelected(int childIndex)
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilitySelectAll()
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityClearSelection()
-        {
-            return false;
-        }
-
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual bool AccessibilityDeselectChild(int childIndex)
-        {
-            return false;
-        }
     }
 }
index 03424e0..da1ee42 100755 (executable)
@@ -27,7 +27,7 @@ namespace Tizen.NUI.BaseComponents
     /// </summary>
     // Values are from Dali::Accessibility::AtspiInterface
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public enum AccessibilityInterface
+    internal enum AccessibilityInterface
     {
         /// <summary>
         /// Common accessibility interface
@@ -40,6 +40,11 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         Value = 26,
         /// <summary>
+        /// Accessibility interface which can store text
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        Text = 25,
+        /// <summary>
         /// Accessibility interface which can store editable texts
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -1537,7 +1542,7 @@ namespace Tizen.NUI.BaseComponents
     /// <summary>
     /// Accessibility text boundary is used in text controls.
     /// </summary>
-    /// <seealso cref="View.AccessibilityGetTextAtOffset" />
+    /// <seealso cref="Accessibility.IAtspiText.AccessibilityGetTextAtOffset" />
     /// <remarks>
     /// Currently, only AccessibilityTextBoundary.Character is supported.
     /// </remarks>
@@ -1586,7 +1591,7 @@ namespace Tizen.NUI.BaseComponents
     /// <summary>
     /// Accessibility coordinate type describing if coordinates are relative to screen or window
     /// </summary>
-    /// <seealso cref="View.AccessibilityGetRangeExtents" />
+    /// <seealso cref="Accessibility.IAtspiText.AccessibilityGetRangeExtents" />
     [EditorBrowsable(EditorBrowsableState.Never)]
     public enum AccessibilityCoordinateType
     {
index a298f58..d83ffde 100644 (file)
@@ -17,6 +17,7 @@
 
 using System;
 using System.Runtime.InteropServices;
+using Tizen.NUI.Accessibility;
 
 namespace Tizen.NUI.BaseComponents
 {
@@ -24,9 +25,6 @@ namespace Tizen.NUI.BaseComponents
     {
         private static AccessibilityStates AccessibilityInitialStates = new AccessibilityStates();
 
-        // To be removed when native C# AT-SPI interfaces are implemented.
-        private uint? AtspiInterfaceFlags = null;
-
         private static void RegisterAccessibilityDelegate()
         {
             InitializeAccessibilityDelegateAccessibleInterface();
@@ -51,6 +49,20 @@ namespace Tizen.NUI.BaseComponents
             return Registry.GetManagedBaseHandleFromRefObject(refObjectPtr) as View;
         }
 
+        private static T GetInterfaceFromRefObject<T>(IntPtr refObjectPtr)
+        {
+            var view = GetViewFromRefObject(refObjectPtr);
+
+            // NUIViewAccessible::CallMethod<T> checks whether a given interface is implemented
+            // before jumping to managed code, so this condition should always be true.
+            if (view is T atspiInterface)
+            {
+                return atspiInterface;
+            }
+
+            return default(T);
+        }
+
         private static IntPtr DuplicateString(string value)
         {
             return Interop.ControlDevel.DaliAccessibilityDuplicateString(value ?? "");
@@ -104,25 +116,30 @@ namespace Tizen.NUI.BaseComponents
 
         private static uint AccessibilityGetInterfaces(IntPtr self)
         {
-            // Currently a maximum of one AccessibilityInterface per View is supported.
-            // This will change when we implement AT-SPI interfaces as native C# interfaces.
-            // Then, this method will look like:
-            //
-            // uint flags = 0U;
-            // if (view is IAtspiSelection) flags |= (1U << (int)AccessibilityInterface.Selection)
-            // if (view is IAtspiValue) flags |= (1U << (int)AccessibilityInterface.Value)
-            // ...
-            // return flags;
-
             View view = GetViewFromRefObject(self);
+            uint flags = 0U;
+
+            if (view is IAtspiEditableText)
+            {
+                flags |= (1U << (int)AccessibilityInterface.EditableText);
+            }
+
+            if (view is IAtspiSelection)
+            {
+                flags |= (1U << (int)AccessibilityInterface.Selection);
+            }
+
+            if (view is IAtspiText)
+            {
+                flags |= (1U << (int)AccessibilityInterface.Text);
+            }
 
-            if (!view.AtspiInterfaceFlags.HasValue)
+            if (view is IAtspiValue)
             {
-                NUILog.Error("AtspiInterfaceFlags are not set!");
-                return 0U;
+                flags |= (1U << (int)AccessibilityInterface.Value);
             }
 
-            return view.AtspiInterfaceFlags.Value;
+            return flags;
         }
 
         private static IntPtr AccessibilityGetNameWrapper(IntPtr self)
@@ -195,27 +212,27 @@ namespace Tizen.NUI.BaseComponents
 
         private static bool AccessibilityCopyTextWrapper(IntPtr self, int startPosition, int endPosition)
         {
-            return GetViewFromRefObject(self).AccessibilityCopyText(startPosition, endPosition);
+            return GetInterfaceFromRefObject<IAtspiEditableText>(self).AccessibilityCopyText(startPosition, endPosition);
         }
 
         private static bool AccessibilityCutTextWrapper(IntPtr self, int startPosition, int endPosition)
         {
-            return GetViewFromRefObject(self).AccessibilityCutText(startPosition, endPosition);
+            return GetInterfaceFromRefObject<IAtspiEditableText>(self).AccessibilityCutText(startPosition, endPosition);
         }
 
         private static bool AccessibilityDeleteTextWrapper(IntPtr self, int startPosition, int endPosition)
         {
-            return GetViewFromRefObject(self).AccessibilityDeleteText(startPosition, endPosition);
+            return GetInterfaceFromRefObject<IAtspiEditableText>(self).AccessibilityDeleteText(startPosition, endPosition);
         }
 
         private static bool AccessibilityInsertTextWrapper(IntPtr self, int startPosition, IntPtr text)
         {
-            return GetViewFromRefObject(self).AccessibilityInsertText(startPosition, Marshal.PtrToStringAnsi(text));
+            return GetInterfaceFromRefObject<IAtspiEditableText>(self).AccessibilityInsertText(startPosition, Marshal.PtrToStringAnsi(text));
         }
 
         private static bool AccessibilitySetTextContentsWrapper(IntPtr self, IntPtr newContents)
         {
-            return GetViewFromRefObject(self).AccessibilitySetTextContents(Marshal.PtrToStringAnsi(newContents));
+            return GetInterfaceFromRefObject<IAtspiEditableText>(self).AccessibilitySetTextContents(Marshal.PtrToStringAnsi(newContents));
         }
 
         //
@@ -238,44 +255,44 @@ namespace Tizen.NUI.BaseComponents
 
         private static bool AccessibilityClearSelectionWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityClearSelection();
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilityClearSelection();
         }
 
         private static bool AccessibilityDeselectChildWrapper(IntPtr self, int childIndex)
         {
-            return GetViewFromRefObject(self).AccessibilityDeselectChild(childIndex);
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilityDeselectChild(childIndex);
         }
 
         private static bool AccessibilityDeselectSelectedChildWrapper(IntPtr self, int selectedChildIndex)
         {
-            return GetViewFromRefObject(self).AccessibilityDeselectSelectedChild(selectedChildIndex);
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilityDeselectSelectedChild(selectedChildIndex);
         }
 
         private static IntPtr AccessibilityGetSelectedChildWrapper(IntPtr self, int selectedChildIndex)
         {
-            View child = GetViewFromRefObject(self).AccessibilityGetSelectedChild(selectedChildIndex);
+            View child = GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilityGetSelectedChild(selectedChildIndex);
 
             return View.getCPtr(child).Handle;
         }
 
         private static int AccessibilityGetSelectedChildrenCountWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetSelectedChildrenCount();
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilityGetSelectedChildrenCount();
         }
 
         private static bool AccessibilityIsChildSelectedWrapper(IntPtr self, int childIndex)
         {
-            return GetViewFromRefObject(self).AccessibilityIsChildSelected(childIndex);
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilityIsChildSelected(childIndex);
         }
 
         private static bool AccessibilitySelectAllWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilitySelectAll();
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilitySelectAll();
         }
 
         private static bool AccessibilitySelectChildWrapper(IntPtr self, int childIndex)
         {
-            return GetViewFromRefObject(self).AccessibilitySelectChild(childIndex);
+            return GetInterfaceFromRefObject<IAtspiSelection>(self).AccessibilitySelectChild(childIndex);
         }
 
         //
@@ -299,55 +316,55 @@ namespace Tizen.NUI.BaseComponents
 
         private static int AccessibilityGetCharacterCountWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetCharacterCount();
+            return GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityGetCharacterCount();
         }
 
         private static int AccessibilityGetCursorOffsetWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetCursorOffset();
+            return GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityGetCursorOffset();
         }
 
         private static IntPtr AccessibilityGetRangeExtentsWrapper(IntPtr self, int startOffset, int endOffset, int coordType)
         {
-            using Rectangle rect = GetViewFromRefObject(self).AccessibilityGetRangeExtents(startOffset, endOffset, (AccessibilityCoordinateType)coordType);
+            using Rectangle rect = GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityGetRangeExtents(startOffset, endOffset, (AccessibilityCoordinateType)coordType);
 
             return DuplicateAccessibilityRectangle(rect);
         }
 
         private static IntPtr AccessibilityGetSelectionWrapper(IntPtr self, int selectionNumber)
         {
-            AccessibilityRange range = GetViewFromRefObject(self).AccessibilityGetSelection(selectionNumber);
+            AccessibilityRange range = GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityGetSelection(selectionNumber);
 
             return DuplicateAccessibilityRange(range);
         }
 
         private static IntPtr AccessibilityGetTextWrapper(IntPtr self, int startOffset, int endOffset)
         {
-            string text = GetViewFromRefObject(self).AccessibilityGetText(startOffset, endOffset);
+            string text = GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityGetText(startOffset, endOffset);
 
             return DuplicateString(text);
         }
 
         private static IntPtr AccessibilityGetTextAtOffsetWrapper(IntPtr self, int offset, int boundary)
         {
-            AccessibilityRange range = GetViewFromRefObject(self).AccessibilityGetTextAtOffset(offset, (AccessibilityTextBoundary)boundary);
+            AccessibilityRange range = GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityGetTextAtOffset(offset, (AccessibilityTextBoundary)boundary);
 
             return DuplicateAccessibilityRange(range);
         }
 
         private static bool AccessibilityRemoveSelectionWrapper(IntPtr self, int selectionNumber)
         {
-            return GetViewFromRefObject(self).AccessibilityRemoveSelection(selectionNumber);
+            return GetInterfaceFromRefObject<IAtspiText>(self).AccessibilityRemoveSelection(selectionNumber);
         }
 
         private static bool AccessibilitySetCursorOffsetWrapper(IntPtr self, int offset)
         {
-            return GetViewFromRefObject(self).AccessibilitySetCursorOffset(offset);
+            return GetInterfaceFromRefObject<IAtspiText>(self).AccessibilitySetCursorOffset(offset);
         }
 
         private static bool AccessibilitySetSelectionWrapper(IntPtr self, int selectionNumber, int startOffset, int endOffset)
         {
-            return GetViewFromRefObject(self).AccessibilitySetSelection(selectionNumber, startOffset, endOffset);
+            return GetInterfaceFromRefObject<IAtspiText>(self).AccessibilitySetSelection(selectionNumber, startOffset, endOffset);
         }
 
         //
@@ -367,27 +384,27 @@ namespace Tizen.NUI.BaseComponents
 
         private static double AccessibilityGetCurrentWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetCurrent();
+            return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilityGetCurrent();
         }
 
         private static double AccessibilityGetMaximumWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetMaximum();
+            return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilityGetMaximum();
         }
 
         private static double AccessibilityGetMinimumWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetMinimum();
+            return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilityGetMinimum();
         }
 
         private static double AccessibilityGetMinimumIncrementWrapper(IntPtr self)
         {
-            return GetViewFromRefObject(self).AccessibilityGetMinimumIncrement();
+            return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilityGetMinimumIncrement();
         }
 
         private static bool AccessibilitySetCurrentWrapper(IntPtr self, double value)
         {
-            return GetViewFromRefObject(self).AccessibilitySetCurrent(value);
+            return GetInterfaceFromRefObject<IAtspiValue>(self).AccessibilitySetCurrent(value);
         }
 
         //