Delete elementary dependency of ui_app_main 18/137018/3
authorminho.sun <minho.sun@samsung.com>
Tue, 4 Jul 2017 06:04:09 +0000 (15:04 +0900)
committerminho.sun <minho.sun@samsung.com>
Fri, 7 Jul 2017 05:00:24 +0000 (14:00 +0900)
Delete elementary dependency of ui_app_main

Inherit CoreApplication instead of CoreUIApplication.
And make NUICoreBackend class to connect lifecycle callbacks to dali application.

Change-Id: I8aa911fb1472f6499b6c6b60585b77e85266a952
Signed-off-by: minho.sun <minho.sun@samsung.com>
Tizen.NUI/Tizen.NUI.csproj
Tizen.NUI/src/internal/NUICoreBackend.cs [new file with mode: 0755]
Tizen.NUI/src/internal/NUIEventType.cs [new file with mode: 0755]
Tizen.NUI/src/public/NUIApplication.cs

index 5fceaff..597f17e 100755 (executable)
@@ -26,7 +26,6 @@
   <ItemGroup>\r
     <PackageReference Include="System.Reflection.TypeExtensions" Version="4.3.0" PrivateAssets="All" />\r
     <PackageReference Include="Tizen.Applications.Common" Version="1.5.8" />\r
-    <PackageReference Include="Tizen.Applications.UI" Version="1.5.8" />\r
   </ItemGroup>\r
 \r
 </Project>\r
diff --git a/Tizen.NUI/src/internal/NUICoreBackend.cs b/Tizen.NUI/src/internal/NUICoreBackend.cs
new file mode 100755 (executable)
index 0000000..9168843
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2017 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.Collections.Generic;
+
+using Tizen.Applications.CoreBackend;
+using Tizen.Applications;
+using Tizen.NUI;
+
+namespace Tizen.NUI
+{
+    class NUICoreBackend : ICoreBackend
+    {
+        /// <summary>
+        /// Application instance to connect event.
+        /// </summary>
+        protected Application _application;
+
+        /// <summary>
+        /// Dictionary to contain each type of event callback.
+        /// </summary>
+        protected IDictionary<EventType, object> Handlers = new Dictionary<EventType, object>();
+
+        /// <summary>
+        /// The default Constructor.
+        /// </summary>
+        public NUICoreBackend()
+        {
+            _application = Application.NewApplication();
+        }
+
+        /// <summary>
+        /// The constructor with stylesheet.
+        /// </summary>
+        public NUICoreBackend(string stylesheet)
+        {
+            _application = Application.NewApplication(stylesheet);
+        }
+
+        /// <summary>
+        /// The constructor with stylesheet and window mode.
+        /// </summary>
+        public NUICoreBackend(string stylesheet, NUIApplication.WindowMode windowMode)
+        {
+            _application = Application.NewApplication(stylesheet, (Application.WindowMode)windowMode );
+        }
+
+        /// <summary>
+        /// Add NUIApplication event to Application.
+        /// Put each type of event callback in Dictionary.
+        /// </summary>
+        /// <param name="evType">Type of event</param>
+        /// <param name="handler">Event callback</param>
+        public void AddEventHandler(EventType evType, Action handler)
+        {
+            Handlers.Add(evType, handler);
+        }
+
+        /// <summary>
+        /// Add NUIApplication event to Application.
+        /// Put each type of event callback in Dictionary.
+        /// </summary>
+        /// <typeparam name="TEventArgs">Argument type for the event</typeparam>
+        /// <param name="evType">Type of event</param>
+        /// <param name="handler">Event callback</param>
+        public void AddEventHandler<TEventArgs>(EventType evType, Action<TEventArgs> handler) where TEventArgs : EventArgs
+        {
+            Handlers.Add(evType, handler);
+        }
+
+
+        /// <summary>
+        /// Dispose function.
+        /// </summary>
+        public void Dispose()
+        {
+            _application.Dispose();
+        }
+
+        /// <summary>
+        /// Exit Application.
+        /// </summary>
+        public void Exit()
+        {
+            _application.Quit();
+        }
+
+        /// <summary>
+        /// Run Application.
+        /// </summary>
+        /// <param name="args">Arguments from commandline.</param>
+        public void Run(string[] args)
+        {
+            _application.BatteryLow += OnBatteryLow;
+            _application.LanguageChanged += OnLanguageChanged;
+            _application.MemoryLow += OnMemoryLow;
+            _application.RegionChanged += OnRegionChanged;
+
+            _application.Initialized += OnInitialized;
+            _application.Resumed += OnResumed;
+            _application.Terminated += OnTerminated;
+            _application.Paused += OnPaused;
+            _application.AppControl += OnAppControl;
+
+            _application.MainLoop();
+        }
+
+        /// <summary>
+        /// Region changed event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for RegionChanged</param>
+        private void OnRegionChanged(object source, NUIApplicationRegionChangedEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnRegionChanged Called");
+            var handler = Handlers[EventType.RegionFormatChanged] as Action<RegionFormatChangedEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke( new RegionFormatChangedEventArgs(""));
+        }
+
+        /// <summary>
+        /// Memory Low event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for MemoryLow</param>
+        private void OnMemoryLow(object source, NUIApplicationMemoryLowEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnMemoryLow Called");
+            var handler = Handlers[EventType.LowMemory] as Action<LowMemoryEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke( new LowMemoryEventArgs(LowMemoryStatus.None));
+        }
+
+        /// <summary>
+        /// Language changed event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for LanguageChanged</param>
+        private void OnLanguageChanged(object source, NUIApplicationLanguageChangedEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnLanguageChanged Called");
+            var handler = Handlers[EventType.LocaleChanged] as Action<LocaleChangedEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke( new LocaleChangedEventArgs(""));
+        }
+
+        /// <summary>
+        /// Battery low event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for BatteryLow</param>
+        private void OnBatteryLow(object source, NUIApplicationBatteryLowEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnBatteryLow Called");
+            var handler = Handlers[EventType.LowBattery] as Action<LowBatteryEventArgs>;
+            // Need to make new signal return in native to return right value.
+            handler?.Invoke(new LowBatteryEventArgs(LowBatteryStatus.None));
+        }
+
+        /// <summary>
+        /// Initialized event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for Initialized</param>
+        private void OnInitialized(object source, NUIApplicationInitEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnInitialized Called");
+            var handler = Handlers[EventType.Created] as Action;
+            handler?.Invoke();
+        }
+
+        /// <summary>
+        /// Terminated event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for Terminated</param>
+        private void OnTerminated(object source, NUIApplicationTerminateEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnTerminated Called");
+            var handler = Handlers[EventType.Terminated] as Action;
+            handler?.Invoke();
+        }
+
+        /// <summary>
+        /// Resumed event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for Resumed</param>
+        private void OnResumed(object source, NUIApplicationResumeEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnResumed Called");
+            var handler = Handlers[EventType.Resumed] as Action;
+            handler?.Invoke();
+        }
+
+        /// <summary>
+        /// App control event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for AppControl</param>
+        private void OnAppControl(object source, NUIApplicationAppControlEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnAppControl Called");
+            /* can invoke after making new api which getting control handle at application.
+            var handler = Handlers[EventType.AppControlReceived] as Action<AppControlReceivedEventArgs>;
+            handler?.Invoke();
+            */
+        }
+
+        /// <summary>
+        /// Paused event callback function.
+        /// </summary>
+        /// <param name="source">Application instance</param>
+        /// <param name="e">Event argument for Paused</param>
+        private void OnPaused(object source, NUIApplicationPauseEventArgs e)
+        {
+            Log.Debug("NUI", "NUICorebackend OnPaused Called");
+            var handler = Handlers[EventType.Paused] as Action;
+            handler?.Invoke();
+        }
+
+    }
+}
diff --git a/Tizen.NUI/src/internal/NUIEventType.cs b/Tizen.NUI/src/internal/NUIEventType.cs
new file mode 100755 (executable)
index 0000000..a9ee287
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright(c) 2017 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 Tizen.Applications.CoreBackend;
+
+namespace Tizen.NUI
+{
+    /// <summary>
+    /// Class that represents the type of NUI event for backends. This class can be converted from string type.
+    /// </summary>
+    public class NUIEventType : EventType
+    {
+        /// <summary>
+        /// Initializes the EventType class.
+        /// </summary>
+        /// <param name="name">The name of event type.</param>
+        public NUIEventType(string name) : base(name)
+        {
+        }
+
+        /// <summary>
+        /// Pre-defined event type. "Reset"
+        /// </summary>
+        public static readonly NUIEventType Reset = "Reset";
+
+        /// <summary>
+        /// Converts a string to NUIEventType instance.
+        /// </summary>
+        public static implicit operator NUIEventType(string value)
+        {
+            return new NUIEventType(value);
+        }
+    }
+}
index 6c34da6..8f2f874 100755 (executable)
@@ -17,6 +17,7 @@
 
 using System;
 using Tizen.Applications;
+using Tizen.Applications.CoreBackend;
 using Tizen.NUI;
 
 namespace Tizen.NUI
@@ -25,203 +26,145 @@ namespace Tizen.NUI
     /// <summary>
     /// Represents an application that have UI screen. The NUIApplication class has a default stage.
     /// </summary>
-    public class NUIApplication : CoreUIApplication
+    public class NUIApplication : CoreApplication
     {
         /// <summary>
-        /// The instance of the Application.
-        /// </summary>
-        /// <remarks>
-        /// This application is created before OnCreate() or created event. And the NUIApplication will be terminated when this application is closed.
-        /// </remarks>
-        private Application _application;
-
-        /// <summary>
-        /// The instance of the Dali Application extension.
-        /// </summary>
-        private ApplicationExtensions _applicationExt;
-
-        /// <summary>
-        /// Store the stylesheet value.
-        /// </summary>
-        private string _stylesheet;
-
-        /// <summary>
-        /// Store the window mode value.
-        /// </summary>
-        private Application.WindowMode _windowMode;
-
-        /// <summary>
-        /// Store the app mode value.
-        /// </summary>
-        private AppMode _appMode;
-
-        /// <summary>
-        /// The instance of the Dali Stage.
-        /// </summary>
-        private Window _window;
-
-        /// <summary>
         /// The default constructor.
         /// </summary>
-        public NUIApplication() : base()
+        public NUIApplication() : base(new NUICoreBackend())
         {
-            _appMode = AppMode.Default;
         }
 
         /// <summary>
         /// The constructor with stylesheet.
         /// </summary>
-        public NUIApplication(string stylesheet) : base()
+        public NUIApplication(string stylesheet) : base(new NUICoreBackend(stylesheet))
         {
-            //handle the stylesheet
-            _appMode = AppMode.StyleSheetOnly;
-            _stylesheet = stylesheet;
         }
 
         /// <summary>
         /// The constructor with stylesheet and window mode.
         /// </summary>
-        public NUIApplication(string stylesheet, WindowMode windowMode) : base()
+        public NUIApplication(string stylesheet, WindowMode windowMode) : base(new NUICoreBackend(stylesheet,windowMode))
         {
-            //handle the stylesheet and windowMode
-            _appMode = AppMode.StyleSheetWithWindowMode;
-            _stylesheet = stylesheet;
-            _windowMode = (Application.WindowMode)windowMode;
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnPause()
+        protected override void OnLocaleChanged(LocaleChangedEventArgs e)
         {
-            base.OnPause();
-            _applicationExt.Pause();
-            NUILog.Debug("OnPause() is called!");
         }
 
         /// <summary>
-        /// Overrides this method if want to handle behavior before calling OnCreate().<br>
-        /// stage property is initialized in this overrided method.<br>
+        /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnPreCreate()
+        protected override void OnLowBattery(LowBatteryEventArgs e)
         {
-            // Initialize DisposeQueue Singleton class.
-            DisposeQueue disposeQ = DisposeQueue.Instance;
-            NUILog.Debug("##### 1) DisposeQueue.Instance.Initialize()!");
-            switch (_appMode)
-            {
-                case AppMode.Default:
-                    _application = Tizen.NUI.Application.NewApplication();
-                    break;
-                case AppMode.StyleSheetOnly:
-                    _application = Tizen.NUI.Application.NewApplication(_stylesheet);
-                    break;
-                case AppMode.StyleSheetWithWindowMode:
-                    _application = Tizen.NUI.Application.NewApplication(_stylesheet, _windowMode);
-                    break;
-                default:
-                    break;
-            }
-            _applicationExt = new ApplicationExtensions(_application);
-            _applicationExt.Init();
-            _applicationExt.Start();
-
-            // This is also required to create DisposeQueue on main thread.
-            disposeQ.Initialize();
-            NUILog.Debug("##### 2) DisposeQueue.Instance.Initialize()!");
-            _window = Window.Instance;
-            _window.SetBackgroundColor(Color.White);
-            NUILog.Debug("OnPreCreate() is called!");
+            Log.Debug("OnLowBattery() is called!");
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnResume()
+        protected override void OnLowMemory(LowMemoryEventArgs e)
         {
-            base.OnResume();
-            _applicationExt.Resume();
-            NUILog.Debug("OnResume() is called!");
+            Log.Debug("OnLowMemory() is called!");
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
+        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)
         {
-            base.OnAppControlReceived(e);
-            NUILog.Debug("OnAppControlReceived() is called!");
-            if (e != null)
-            {
-                NUILog.Debug("OnAppControlReceived() is called! ApplicationId=" + e.ReceivedAppControl.ApplicationId);
-                NUILog.Debug("CallerApplicationId=" + e.ReceivedAppControl.CallerApplicationId + "   IsReplyRequest=" + e.ReceivedAppControl.IsReplyRequest);
-            }
+            Log.Debug("OnRegionFormatChanged() is called!");
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnCreate()
+        protected override void OnTerminate()
         {
-            base.OnCreate();
-            NUILog.Debug("OnCreate() is called!");
+            Log.Debug("OnTerminate() is called!");
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnLocaleChanged(LocaleChangedEventArgs e)
+        protected void OnPause()
         {
-            base.OnLocaleChanged(e);
-            _applicationExt.LanguageChange();
-            NUILog.Debug("OnLocaleChanged() is called!");
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnLowBattery(LowBatteryEventArgs e)
+        protected void OnResume()
         {
-            base.OnLowBattery(e);
-            NUILog.Debug("OnLowBattery() is called!");
+            Log.Debug("OnResume() is called!");
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnLowMemory(LowMemoryEventArgs e)
+        protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
         {
-            base.OnLowMemory(e);
-            NUILog.Debug("OnLowMemory() is called!");
+            Log.Debug("OnAppControlReceived() is called!");
+            if (e != null)
+            {
+                Log.Debug("OnAppControlReceived() is called! ApplicationId=" + e.ReceivedAppControl.ApplicationId);
+                Log.Debug("CallerApplicationId=" + e.ReceivedAppControl.CallerApplicationId + "   IsReplyRequest=" + e.ReceivedAppControl.IsReplyRequest);
+            }
         }
 
         /// <summary>
         /// Overrides this method if want to handle behavior.
         /// </summary>
-        protected override void OnRegionFormatChanged(RegionFormatChangedEventArgs e)
+        protected override void OnCreate()
         {
-            base.OnRegionFormatChanged(e);
-            NUILog.Debug("OnRegionFormatChanged() is called!");
+            // This is also required to create DisposeQueue on main thread.
+            DisposeQueue disposeQ = DisposeQueue.Instance;
+            disposeQ.Initialize();
+            Log.Debug("OnCreate() is called!");
         }
 
         /// <summary>
-        /// Overrides this method if want to handle behavior.
+        /// Run NUIApplication.
         /// </summary>
-        protected override void OnTerminate()
+        /// <param name="args">Arguments from commandline.</param>
+        public override void Run(string[] args)
         {
-            base.OnTerminate();
-            _applicationExt.Terminate();
-            NUILog.Debug("OnTerminate() is called!");
+            string[] argsClone = null;
+
+            if (args == null)
+            {
+                argsClone = new string[1];
+            }
+            else
+            {
+                argsClone = new string[args.Length + 1];
+                args.CopyTo(argsClone, 1);
+            }
+            argsClone[0] = string.Empty;
+
+            Backend.AddEventHandler(EventType.Resumed, OnResume);
+            Backend.AddEventHandler<AppControlReceivedEventArgs>(EventType.AppControlReceived, OnAppControlReceived);
+            Backend.AddEventHandler(EventType.Paused, OnPause);
+            Backend.AddEventHandler(EventType.Terminated, OnTerminate);
+            Backend.AddEventHandler<RegionFormatChangedEventArgs>(EventType.RegionFormatChanged, OnRegionFormatChanged);
+            Backend.AddEventHandler<LowMemoryEventArgs>(EventType.LowMemory, OnLowMemory);
+            Backend.AddEventHandler<LowBatteryEventArgs>(EventType.LowBattery, OnLowBattery);
+            Backend.AddEventHandler<LocaleChangedEventArgs>(EventType.LocaleChanged, OnLocaleChanged);
+            Backend.AddEventHandler(EventType.Created, OnCreate);
+
+            Backend.Run(argsClone);
         }
 
         /// <summary>
-        /// The mode of creating NUI application.
+        /// Exit NUIApplication.
         /// </summary>
-        private enum AppMode
+        public override void Exit()
         {
-            Default = 0,
-            StyleSheetOnly = 1,
-            StyleSheetWithWindowMode = 2
+            Backend.Exit();
         }
 
         /// <summary>
@@ -232,16 +175,5 @@ namespace Tizen.NUI
             Opaque = 0,
             Transparent = 1
         }
-
-        /// <summary>
-        /// Get the window instance.
-        /// </summary>
-        public Window Window
-        {
-            get
-            {
-                return _application.GetWindow();
-            }
-        }
     }
 }