[NUI] Rebase develnui (DevelNUI only patches --> master) (#3910)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / Accessibility / Accessibility.cs
index c467ae9..054cc9b 100755 (executable)
@@ -20,9 +20,6 @@ using System.ComponentModel;
 using System.Runtime.InteropServices;
 using Tizen.NUI.BaseComponents;
 using System.Diagnostics.CodeAnalysis;
-#if (NUI_DEBUG_ON)
-using tlog = Tizen.Log;
-#endif
 
 namespace Tizen.NUI.Accessibility
 {
@@ -41,11 +38,29 @@ namespace Tizen.NUI.Accessibility
             dummy = new View();
             dummy.Name = "dali-atspi-singleton";
         }
+
+        static Accessibility()
+        {
+            enabledSignalHandler = () =>
+            {
+                Enabled?.Invoke(typeof(Accessibility), EventArgs.Empty);
+            };
+
+            disabledSignalHandler = () =>
+            {
+                Disabled?.Invoke(typeof(Accessibility), EventArgs.Empty);
+            };
+
+            Interop.Accessibility.RegisterEnabledDisabledSignalHandler(enabledSignalHandler, disabledSignalHandler);
+        }
+
         /// <summary>
         /// destructor. This is HiddenAPI. recommended not to use in public.
         /// </summary>
         ~Accessibility()
         {
+            Interop.Accessibility.RegisterEnabledDisabledSignalHandler(null, null);
+
             Tizen.Log.Debug("NUI", $"Accessibility is destroyed\n");
         }
         #endregion Constructor, Destructor, Dispose
@@ -61,6 +76,23 @@ namespace Tizen.NUI.Accessibility
         {
             get => accessibility;
         }
+
+        /// <summary>
+        /// Flag to check whether the state of Accessibility is enabled or not.
+        /// </summary>
+        /// <remarks>
+        /// Getter returns true if Accessibility is enabled, false otherwise.
+        /// </remarks>
+        /// This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static bool IsEnabled
+        {
+            get
+            {
+                return (bool)Interop.Accessibility.IsEnabled();
+            }
+        }
+
         #endregion Property
 
 
@@ -122,6 +154,46 @@ namespace Tizen.NUI.Accessibility
         }
 
         /// <summary>
+        /// Suppress reading of screen-reader
+        /// </summary>
+        /// <param name="suppress">whether to suppress reading of screen-reader</param>
+        // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public bool SuppressScreenReader(bool suppress)
+        {
+            bool ret = Interop.Accessibility.SuppressScreenReader(View.getCPtr(dummy), suppress);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
+        /// <summary>
+        /// Re-enables auto-initialization of AT-SPI bridge
+        /// </summary>
+        /// <remarks>
+        /// Normal applications do not have to call this function. The AT-SPI bridge is initialized on demand.
+        /// </remarks>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static void BridgeEnableAutoInit()
+        {
+            Interop.Accessibility.BridgeEnableAutoInit();
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
+        /// Blocks auto-initialization of AT-SPI bridge
+        /// </summary>
+        /// <remarks>
+        /// Use this only if your application starts before DBus does, and call it early in Main().
+        /// When DBus is ready, call BridgeEnableAutoInit().
+        /// </remarks>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static void BridgeDisableAutoInit()
+        {
+            Interop.Accessibility.BridgeDisableAutoInit();
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        /// <summary>
         ///  Get View that is used to highlight widget.
         /// </summary>
         // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
@@ -154,10 +226,10 @@ namespace Tizen.NUI.Accessibility
         public View GetCurrentlyHighlightedView()
         {
             var ptr = Interop.ControlDevel.DaliAccessibilityAccessibleGetCurrentlyHighlightedActor();
+
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-            if (ptr == IntPtr.Zero)
-                return null;
-            return new View(ptr, true);
+
+            return this.GetInstanceSafely<View>(ptr);
         }
 
         /// <summary>
@@ -167,74 +239,15 @@ namespace Tizen.NUI.Accessibility
         [EditorBrowsable(EditorBrowsableState.Never)]
         public bool ClearCurrentlyHighlightedView()
         {
-            using (View view = GetCurrentlyHighlightedView())
-            {
-                return view?.ClearAccessibilityHighlight() ?? false;
-            }
+            var view = GetCurrentlyHighlightedView();
+
+            return view?.ClearAccessibilityHighlight() ?? false;
         }
         #endregion Method
 
 
         #region Event, Enum, Struct, ETC
         /// <summary>
-        ///  Say Finished event arguments
-        /// </summary>
-        // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public class SayFinishedEventArgs : EventArgs
-        {
-            /// <summary>
-            /// The state of Say finished
-            /// </summary>
-            // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
-            [EditorBrowsable(EditorBrowsableState.Never)]
-            public SayFinishedState State
-            {
-                private set;
-                get;
-            }
-
-            internal SayFinishedEventArgs(int result)
-            {
-                State = (SayFinishedState)(result);
-                tlog.Fatal(tag, $"SayFinishedEventArgs Constructor! State={State}");
-            }
-        }
-
-        /// <summary>
-        /// Enum of Say finished event argument status
-        /// </summary>
-        [Obsolete("Please do not use! This will be removed. Please use Accessibility.SayFinishedState instead!")]
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public enum SayFinishedStates
-        {
-            /// <summary>
-            /// Invalid
-            /// </summary>
-            [Obsolete("Please do not use! This will be removed. Please use Accessibility.SayFinishedState.Invalid instead!")]
-            [EditorBrowsable(EditorBrowsableState.Never)]
-            Invalid = -1,
-            /// <summary>
-            /// Cancelled
-            /// </summary>
-            [Obsolete("Please do not use! This will be removed. Please use Accessibility.SayFinishedState.Invalid instead!")]
-            [EditorBrowsable(EditorBrowsableState.Never)]
-            Cancelled = 1,
-            /// <summary>
-            /// Stopped
-            /// </summary>
-            [Obsolete("Please do not use! This will be removed. Please use Accessibility.SayFinishedState.Invalid instead!")]
-            [EditorBrowsable(EditorBrowsableState.Never)]
-            Stopped = 2,
-            /// <summary>
-            /// Skipped
-            /// </summary>
-            [Obsolete("Please do not use! This will be removed. Please use Accessibility.SayFinishedState.Invalid instead!")]
-            [EditorBrowsable(EditorBrowsableState.Never)]
-            Skipped = 3
-        }
-
-        /// <summary>
         /// Enum of Say finished event argument status
         /// </summary>
         // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
@@ -289,6 +302,21 @@ namespace Tizen.NUI.Accessibility
             add => sayFinishedEventHandler += value;
             remove => sayFinishedEventHandler -= value;
         }
+
+        /// <summary>
+        /// Triggered whenever the value of IsEnabled would change from false to true
+        /// </summary>
+        // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static event EventHandler Enabled;
+
+        /// <summary>
+        /// Triggered whenever the value of IsEnabled would change from true to false
+        /// </summary>
+        // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static event EventHandler Disabled;
+
         #endregion Event, Enum, Struct, ETC
 
 
@@ -324,15 +352,43 @@ namespace Tizen.NUI.Accessibility
 
         private SayFinishedEventCallbackType callback = null;
 
+        private static Interop.Accessibility.EnabledDisabledSignalHandler enabledSignalHandler = null;
+
+        private static Interop.Accessibility.EnabledDisabledSignalHandler disabledSignalHandler = null;
+
         private void SayFinishedEventCallback(int result)
         {
-            tlog.Fatal(tag, $"sayFinishedEventCallback(res={result}) called!");
+            NUILog.Debug($"sayFinishedEventCallback(res={result}) called!");
             sayFinishedEventHandler?.Invoke(this, new SayFinishedEventArgs(result));
         }
 
         private View dummy;
 
-        private static string tag = "NUITEST";
         #endregion Private
     }
+
+    /// <summary>
+    ///  Say Finished event arguments
+    /// </summary>
+    // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+    [EditorBrowsable(EditorBrowsableState.Never)]
+    public class SayFinishedEventArgs : EventArgs
+    {
+        /// <summary>
+        /// The state of Say finished
+        /// </summary>
+        // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Accessibility.SayFinishedState State
+        {
+            private set;
+            get;
+        }
+
+        internal SayFinishedEventArgs(int result)
+        {
+            State = (Accessibility.SayFinishedState)(result);
+            NUILog.Debug($"SayFinishedEventArgs Constructor! State={State}");
+        }
+    }
 }