2 * Copyright(c) 2018 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 using System.Collections.Generic;
23 using System.Collections.ObjectModel;
24 using System.ComponentModel;
25 using System.Runtime.InteropServices;
26 using System.Threading;
27 using System.Threading.Tasks;
28 using Tizen.NUI.Binding;
29 using Tizen.NUI.Binding.Internals;
32 * @brief Event arguments that passed via NUIApplicationInit signal
35 internal class NUIApplicationInitEventArgs : EventArgs
37 private Application _application;
40 * @brief Application - is the application that is being initialized
43 public Application Application
57 * @brief Event arguments that passed via NUIApplicationTerminate signal
60 internal class NUIApplicationTerminatingEventArgs : EventArgs
62 private Application _application;
64 * @brief Application - is the application that is being Terminated
67 public Application Application
81 * @brief Event arguments that passed via NUIApplicationPause signal
84 internal class NUIApplicationPausedEventArgs : EventArgs
86 private Application _application;
88 * @brief Application - is the application that is being Paused
91 public Application Application
105 * @brief Event arguments that passed via NUIApplicationResume signal
108 internal class NUIApplicationResumedEventArgs : EventArgs
110 private Application _application;
112 * @brief Application - is the application that is being Resumed
115 public Application Application
123 _application = value;
129 * @brief Event arguments that passed via NUIApplicationReset signal
132 internal class NUIApplicationResetEventArgs : EventArgs
134 private Application _application;
136 * @brief Application - is the application that is being Reset
139 public Application Application
147 _application = value;
153 * @brief Event arguments that passed via NUIApplicationResize signal
156 internal class NUIApplicationResizedEventArgs : EventArgs
158 private Application _application;
160 * @brief Application - is the application that is being Resized
163 public Application Application
171 _application = value;
177 * @brief Event arguments that passed via NUIApplicationLanguageChanged signal
180 internal class NUIApplicationLanguageChangedEventArgs : EventArgs
182 private Application _application;
184 * @brief Application - is the application that is being affected with Device's language change
187 public Application Application
195 _application = value;
201 * @brief Event arguments that passed via NUIApplicationRegionChanged signal
204 internal class NUIApplicationRegionChangedEventArgs : EventArgs
206 private Application _application;
208 * @brief Application - is the application that is being affected with Device's region change
211 public Application Application
219 _application = value;
225 * @brief Event arguments that passed via NUIApplicationBatteryLow signal
228 internal class NUIApplicationBatteryLowEventArgs : EventArgs
230 private Application.BatteryStatus _status;
232 * @brief Application - is the application that is being affected when the battery level of the device is low
235 public Application.BatteryStatus BatteryStatus
249 * @brief Event arguments that passed via NUIApplicationMemoryLow signal
252 internal class NUIApplicationMemoryLowEventArgs : EventArgs
254 private Application.MemoryStatus _status;
256 * @brief Application - is the application that is being affected when the memory level of the device is low
259 public Application.MemoryStatus MemoryStatus
273 * @brief Event arguments that passed via NUIApplicationAppControl signal
276 internal class NUIApplicationAppControlEventArgs : EventArgs
278 private Application _application;
279 private IntPtr _voidp;
281 * @brief Application - is the application that is receiving the launch request from another application
284 public Application Application
292 _application = value;
296 * @brief VoidP - contains the information about why the application is launched
313 /// A class to get resources in current application.
315 public class GetResourcesProvider
318 /// Get resources in current application.
320 static public IResourcesProvider Get()
322 return Tizen.NUI.Application.Current;
326 internal class Application : BaseHandle, IResourcesProvider, IApplicationController, IElementConfiguration<Application>
329 static Application s_current;
330 Task<IDictionary<string, object>> _propertiesTask;
331 readonly Lazy<PlatformConfigurationRegistry<Application>> _platformConfigurationRegistry;
333 IAppIndexingProvider _appIndexProvider;
335 ReadOnlyCollection<Element> _logicalChildren;
339 static SemaphoreSlim SaveSemaphore = new SemaphoreSlim(1, 1);
341 public IAppLinks AppLinks
345 if (_appIndexProvider == null)
346 throw new ArgumentException("No IAppIndexingProvider was provided");
347 if (_appIndexProvider.AppLinks == null)
348 throw new ArgumentException("No AppLinks implementation was found, if in Android make sure you installed the Xamarin.Forms.AppLinks");
349 return _appIndexProvider.AppLinks;
353 [EditorBrowsable(EditorBrowsableState.Never)]
354 public static void SetCurrentApplication(Application value) => Current = value;
356 public static Application Current
358 get { return s_current; }
361 if (s_current == value)
364 s_current = null; //Allow to reset current for unittesting
371 get { return _mainPage; }
375 throw new ArgumentNullException("value");
377 if (_mainPage == value)
380 OnPropertyChanging();
381 if (_mainPage != null)
383 InternalChildren.Remove(_mainPage);
384 _mainPage.Parent = null;
389 if (_mainPage != null)
391 _mainPage.Parent = this;
392 _mainPage.NavigationProxy.Inner = NavigationProxy;
393 InternalChildren.Add(_mainPage);
399 public IDictionary<string, object> Properties
403 if (_propertiesTask == null)
405 _propertiesTask = GetPropertiesAsync();
408 return _propertiesTask.Result;
412 internal override ReadOnlyCollection<Element> LogicalChildrenInternal
414 get { return _logicalChildren ?? (_logicalChildren = new ReadOnlyCollection<Element>(InternalChildren)); }
417 [EditorBrowsable(EditorBrowsableState.Never)]
418 public new NavigationProxy NavigationProxy { get; }
420 [EditorBrowsable(EditorBrowsableState.Never)]
421 public int PanGestureId { get; set; }
423 internal IResourceDictionary SystemResources { get; }
425 ObservableCollection<Element> InternalChildren { get; } = new ObservableCollection<Element>();
427 [EditorBrowsable(EditorBrowsableState.Never)]
428 public void SetAppIndexingProvider(IAppIndexingProvider provider)
430 _appIndexProvider = provider;
433 ResourceDictionary _resources;
434 public bool IsResourcesCreated => _resources != null;
436 public delegate void resChangeCb(object sender, ResourcesChangedEventArgs e);
438 static private Dictionary<object, Dictionary<resChangeCb, int>> resourceChangeCallbackDict = new Dictionary<object, Dictionary<resChangeCb, int>>();
439 static public void AddResourceChangedCallback(object handle, resChangeCb cb)
441 Dictionary<resChangeCb, int> cbDict;
442 resourceChangeCallbackDict.TryGetValue(handle, out cbDict);
446 cbDict = new Dictionary<resChangeCb, int>();
447 resourceChangeCallbackDict.Add(handle, cbDict);
450 if (false == cbDict.ContainsKey(cb))
456 internal override void OnResourcesChanged(object sender, ResourcesChangedEventArgs e)
458 base.OnResourcesChanged(sender, e);
460 foreach (KeyValuePair<object, Dictionary<resChangeCb, int>> resourcePair in resourceChangeCallbackDict)
462 foreach (KeyValuePair<resChangeCb, int> cbPair in resourcePair.Value)
464 cbPair.Key(sender, e);
469 public ResourceDictionary XamlResources
473 if (_resources != null)
476 _resources = new ResourceDictionary();
477 int hashCode = _resources.GetHashCode();
478 ((IResourceDictionary)_resources).ValuesChanged += OnResourcesChanged;
483 if (_resources == value)
485 OnPropertyChanging();
487 if (_resources != null)
488 ((IResourceDictionary)_resources).ValuesChanged -= OnResourcesChanged;
490 OnResourcesChanged(value);
491 if (_resources != null)
492 ((IResourceDictionary)_resources).ValuesChanged += OnResourcesChanged;
498 public event EventHandler<ModalPoppedEventArgs> ModalPopped;
500 public event EventHandler<ModalPoppingEventArgs> ModalPopping;
502 public event EventHandler<ModalPushedEventArgs> ModalPushed;
504 public event EventHandler<ModalPushingEventArgs> ModalPushing;
506 public event EventHandler<Page> PageAppearing;
508 public event EventHandler<Page> PageDisappearing;
511 async void SaveProperties()
515 await SetPropertiesAsync();
517 catch (Exception exc)
519 Console.WriteLine(nameof(Application), $"Exception while saving Application Properties: {exc}");
523 public async Task SavePropertiesAsync()
525 if (Device.IsInvokeRequired)
527 Device.BeginInvokeOnMainThread(SaveProperties);
531 await SetPropertiesAsync();
535 // Don't use this unless there really is no better option
536 internal void SavePropertiesAsFireAndForget()
538 if (Device.IsInvokeRequired)
540 Device.BeginInvokeOnMainThread(SaveProperties);
548 public IPlatformElementConfiguration<T, Application> On<T>() where T : IConfigPlatform
550 return _platformConfigurationRegistry.Value.On<T>();
553 protected virtual void OnAppLinkRequestReceived(Uri uri)
557 protected override void OnParentSet()
559 throw new InvalidOperationException("Setting a Parent on Application is invalid.");
562 protected virtual void OnResume()
566 protected virtual void OnSleep()
570 protected virtual void OnStart()
574 [EditorBrowsable(EditorBrowsableState.Never)]
575 public static void ClearCurrent()
580 [EditorBrowsable(EditorBrowsableState.Never)]
581 public static bool IsApplicationOrNull(Element element)
583 return element == null || element is Application;
586 internal override void OnParentResourcesChanged(IEnumerable<KeyValuePair<string, object>> values)
588 if (!((IResourcesProvider)this).IsResourcesCreated || XamlResources.Count == 0)
590 base.OnParentResourcesChanged(values);
594 var innerKeys = new HashSet<string>();
595 var changedResources = new List<KeyValuePair<string, object>>();
596 foreach (KeyValuePair<string, object> c in XamlResources)
597 innerKeys.Add(c.Key);
598 foreach (KeyValuePair<string, object> value in values)
600 if (innerKeys.Add(value.Key))
601 changedResources.Add(value);
603 OnResourcesChanged(changedResources);
606 internal event EventHandler PopCanceled;
608 [EditorBrowsable(EditorBrowsableState.Never)]
609 public void SendOnAppLinkRequestReceived(Uri uri)
611 OnAppLinkRequestReceived(uri);
614 [EditorBrowsable(EditorBrowsableState.Never)]
615 public void SendResume()
621 [EditorBrowsable(EditorBrowsableState.Never)]
622 public void SendSleep()
625 SavePropertiesAsFireAndForget();
628 [EditorBrowsable(EditorBrowsableState.Never)]
629 public Task SendSleepAsync()
632 return SavePropertiesAsync();
635 [EditorBrowsable(EditorBrowsableState.Never)]
636 public void SendStart()
641 async Task<IDictionary<string, object>> GetPropertiesAsync()
643 var deserializer = DependencyService.Get<IDeserializer>();
644 if (deserializer == null)
646 Console.WriteLine("Startup", "No IDeserialzier was found registered");
647 return new Dictionary<string, object>(4);
650 IDictionary<string, object> properties = await deserializer.DeserializePropertiesAsync().ConfigureAwait(false);
651 if (properties == null)
652 properties = new Dictionary<string, object>(4);
657 internal void OnPageAppearing(Page page)
658 => PageAppearing?.Invoke(this, page);
660 internal void OnPageDisappearing(Page page)
661 => PageDisappearing?.Invoke(this, page);
663 void OnModalPopped(Page modalPage)
664 => ModalPopped?.Invoke(this, new ModalPoppedEventArgs(modalPage));
666 bool OnModalPopping(Page modalPage)
668 var args = new ModalPoppingEventArgs(modalPage);
669 ModalPopping?.Invoke(this, args);
673 void OnModalPushed(Page modalPage)
674 => ModalPushed?.Invoke(this, new ModalPushedEventArgs(modalPage));
676 void OnModalPushing(Page modalPage)
677 => ModalPushing?.Invoke(this, new ModalPushingEventArgs(modalPage));
680 => PopCanceled?.Invoke(this, EventArgs.Empty);
682 async Task SetPropertiesAsync()
684 await SaveSemaphore.WaitAsync();
687 await DependencyService.Get<IDeserializer>()?.SerializePropertiesAsync(Properties);
691 SaveSemaphore.Release();
696 class NavigationImpl : NavigationProxy
698 readonly Application _owner;
700 public NavigationImpl(Application owner)
705 protected override async Task<Page> OnPopModal(bool animated)
707 Page modal = ModalStack[ModalStack.Count - 1];
708 if (_owner.OnModalPopping(modal))
710 _owner.OnPopCanceled();
713 Page result = await base.OnPopModal(animated);
714 result.Parent = null;
715 _owner.OnModalPopped(result);
719 protected override async Task OnPushModal(Page modal, bool animated)
721 _owner.OnModalPushing(modal);
723 modal.Parent = _owner;
725 if (modal.NavigationProxy.ModalStack.Count == 0)
727 modal.NavigationProxy.Inner = this;
728 await base.OnPushModal(modal, animated);
732 await base.OnPushModal(modal, animated);
733 modal.NavigationProxy.Inner = this;
736 _owner.OnModalPushed(modal);
740 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
742 internal Application(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Application_SWIGUpcast(cPtr), cMemoryOwn)
744 NavigationProxy = new NavigationImpl(this);
745 SetCurrentApplication(this);
747 _platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<Application>>(() => new PlatformConfigurationRegistry<Application>(this));
748 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
753 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Application obj)
755 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
758 protected override void Dispose(DisposeTypes type)
765 if (type == DisposeTypes.Explicit)
768 //Release your own managed resources here.
769 //You should release all of your own disposable objects here.
773 //Release your own unmanaged resources here.
774 //You should not access any managed member here except static instance.
775 //because the execution order of Finalizes is non-deterministic.
777 if (_applicationInitEventCallbackDelegate != null)
779 this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
782 if (_applicationTerminateEventCallbackDelegate != null)
784 this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
787 if (_applicationPauseEventCallbackDelegate != null)
789 this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
792 if (_applicationResumeEventCallbackDelegate != null)
794 this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
797 if (_applicationResetEventCallbackDelegate != null)
799 this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
802 if (_applicationResizeEventCallbackDelegate != null)
804 this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
807 if (_applicationLanguageChangedEventCallbackDelegate != null)
809 this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
812 if (_applicationRegionChangedEventCallbackDelegate != null)
814 this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
817 if (_applicationBatteryLowEventCallbackDelegate != null)
819 this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
822 if (_applicationMemoryLowEventCallbackDelegate != null)
824 this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
827 if (_applicationAppControlEventCallbackDelegate != null)
829 this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
832 if (swigCPtr.Handle != global::System.IntPtr.Zero)
837 Interop.Application.delete_Application(swigCPtr);
839 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
845 /// <since_tizen> 4 </since_tizen>
846 public enum BatteryStatus
853 /// <since_tizen> 4 </since_tizen>
854 public enum MemoryStatus
861 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
862 private delegate void NUIApplicationInitEventCallbackDelegate(IntPtr application);
863 private DaliEventHandler<object, NUIApplicationInitEventArgs> _applicationInitEventHandler;
864 private NUIApplicationInitEventCallbackDelegate _applicationInitEventCallbackDelegate;
867 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
868 private delegate void NUIApplicationTerminateEventCallbackDelegate(IntPtr application);
869 private DaliEventHandler<object, NUIApplicationTerminatingEventArgs> _applicationTerminateEventHandler;
870 private NUIApplicationTerminateEventCallbackDelegate _applicationTerminateEventCallbackDelegate;
873 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
874 private delegate void NUIApplicationPauseEventCallbackDelegate(IntPtr application);
875 private DaliEventHandler<object, NUIApplicationPausedEventArgs> _applicationPauseEventHandler;
876 private NUIApplicationPauseEventCallbackDelegate _applicationPauseEventCallbackDelegate;
878 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
879 private delegate void NUIApplicationResumeEventCallbackDelegate(IntPtr application);
880 private DaliEventHandler<object, NUIApplicationResumedEventArgs> _applicationResumeEventHandler;
881 private NUIApplicationResumeEventCallbackDelegate _applicationResumeEventCallbackDelegate;
883 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
884 private delegate void NUIApplicationResetEventCallbackDelegate(IntPtr application);
885 private DaliEventHandler<object, NUIApplicationResetEventArgs> _applicationResetEventHandler;
886 private NUIApplicationResetEventCallbackDelegate _applicationResetEventCallbackDelegate;
888 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
889 private delegate void NUIApplicationResizeEventCallbackDelegate(IntPtr application);
890 private DaliEventHandler<object, NUIApplicationResizedEventArgs> _applicationResizeEventHandler;
891 private NUIApplicationResizeEventCallbackDelegate _applicationResizeEventCallbackDelegate;
893 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
894 private delegate void NUIApplicationLanguageChangedEventCallbackDelegate(IntPtr application);
895 private DaliEventHandler<object, NUIApplicationLanguageChangedEventArgs> _applicationLanguageChangedEventHandler;
896 private NUIApplicationLanguageChangedEventCallbackDelegate _applicationLanguageChangedEventCallbackDelegate;
899 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
900 private delegate void NUIApplicationRegionChangedEventCallbackDelegate(IntPtr application);
901 private DaliEventHandler<object, NUIApplicationRegionChangedEventArgs> _applicationRegionChangedEventHandler;
902 private NUIApplicationRegionChangedEventCallbackDelegate _applicationRegionChangedEventCallbackDelegate;
904 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
905 private delegate void NUIApplicationBatteryLowEventCallbackDelegate(BatteryStatus status);
906 private DaliEventHandler<object, NUIApplicationBatteryLowEventArgs> _applicationBatteryLowEventHandler;
907 private NUIApplicationBatteryLowEventCallbackDelegate _applicationBatteryLowEventCallbackDelegate;
909 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
910 private delegate void NUIApplicationMemoryLowEventCallbackDelegate(MemoryStatus status);
911 private DaliEventHandler<object, NUIApplicationMemoryLowEventArgs> _applicationMemoryLowEventHandler;
912 private NUIApplicationMemoryLowEventCallbackDelegate _applicationMemoryLowEventCallbackDelegate;
914 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
915 private delegate void NUIApplicationAppControlEventCallbackDelegate(IntPtr application, IntPtr voidp);
916 private DaliEventHandler<object, NUIApplicationAppControlEventArgs> _applicationAppControlEventHandler;
917 private NUIApplicationAppControlEventCallbackDelegate _applicationAppControlEventCallbackDelegate;
920 * @brief Event for Initialized signal which can be used to subscribe/unsubscribe the event handler
921 * provided by the user. Initialized signal is emitted when application is initialised
923 public event DaliEventHandler<object, NUIApplicationInitEventArgs> Initialized
929 // Restricted to only one listener
930 if (_applicationInitEventHandler == null)
932 _applicationInitEventHandler += value;
934 _applicationInitEventCallbackDelegate = new NUIApplicationInitEventCallbackDelegate(OnApplicationInit);
935 this.InitSignal().Connect(_applicationInitEventCallbackDelegate);
944 if (_applicationInitEventHandler != null)
946 this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
949 _applicationInitEventHandler -= value;
954 // Callback for Application InitSignal
955 private void OnApplicationInit(IntPtr data)
957 // Initialize DisposeQueue Singleton class. This is also required to create DisposeQueue on main thread.
958 DisposeQueue.Instance.Initialize();
960 if (_applicationInitEventHandler != null)
962 NUIApplicationInitEventArgs e = new NUIApplicationInitEventArgs();
963 e.Application = this;
964 _applicationInitEventHandler.Invoke(this, e);
970 * @brief Event for Terminated signal which can be used to subscribe/unsubscribe the event handler
971 * provided by the user. Terminated signal is emitted when application is terminating
973 public event DaliEventHandler<object, NUIApplicationTerminatingEventArgs> Terminating
979 // Restricted to only one listener
980 if (_applicationTerminateEventHandler == null)
982 _applicationTerminateEventHandler += value;
984 _applicationTerminateEventCallbackDelegate = new NUIApplicationTerminateEventCallbackDelegate(OnNUIApplicationTerminate);
985 this.TerminateSignal().Connect(_applicationTerminateEventCallbackDelegate);
994 if (_applicationTerminateEventHandler != null)
996 this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
999 _applicationTerminateEventHandler -= value;
1004 // Callback for Application TerminateSignal
1005 private void OnNUIApplicationTerminate(IntPtr data)
1007 if (_applicationTerminateEventHandler != null)
1009 NUIApplicationTerminatingEventArgs e = new NUIApplicationTerminatingEventArgs();
1010 e.Application = this;
1011 _applicationTerminateEventHandler.Invoke(this, e);
1013 if (Window.Instance)
1015 Window.Instance.DisconnectNativeSignals();
1020 * @brief Event for Paused signal which can be used to subscribe/unsubscribe the event handler
1021 * provided by the user. Paused signal is emitted when application is paused
1023 public event DaliEventHandler<object, NUIApplicationPausedEventArgs> Paused
1029 // Restricted to only one listener
1030 if (_applicationPauseEventHandler == null)
1032 _applicationPauseEventHandler += value;
1034 _applicationPauseEventCallbackDelegate = new NUIApplicationPauseEventCallbackDelegate(OnNUIApplicationPause);
1035 this.PauseSignal().Connect(_applicationPauseEventCallbackDelegate);
1044 if (_applicationPauseEventHandler != null)
1046 this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
1049 _applicationPauseEventHandler -= value;
1054 // Callback for Application PauseSignal
1055 private void OnNUIApplicationPause(IntPtr data)
1057 if (_applicationPauseEventHandler != null)
1059 NUIApplicationPausedEventArgs e = new NUIApplicationPausedEventArgs();
1060 e.Application = this;
1061 _applicationPauseEventHandler.Invoke(this, e);
1066 * @brief Event for Resumed signal which can be used to subscribe/unsubscribe the event handler
1067 * provided by the user. Resumed signal is emitted when application is resumed
1069 public event DaliEventHandler<object, NUIApplicationResumedEventArgs> Resumed
1075 // Restricted to only one listener
1076 if (_applicationResumeEventHandler == null)
1078 _applicationResumeEventHandler += value;
1080 _applicationResumeEventCallbackDelegate = new NUIApplicationResumeEventCallbackDelegate(OnNUIApplicationResume);
1081 this.ResumeSignal().Connect(_applicationResumeEventCallbackDelegate);
1090 if (_applicationResumeEventHandler != null)
1092 this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
1095 _applicationResumeEventHandler -= value;
1100 // Callback for Application ResumeSignal
1101 private void OnNUIApplicationResume(IntPtr data)
1103 if (_applicationResumeEventHandler != null)
1105 NUIApplicationResumedEventArgs e = new NUIApplicationResumedEventArgs();
1106 e.Application = this;
1107 _applicationResumeEventHandler.Invoke(this, e);
1112 * @brief Event for Reset signal which can be used to subscribe/unsubscribe the event handler
1113 * provided by the user. Reset signal is emitted when application is reset
1115 public new event DaliEventHandler<object, NUIApplicationResetEventArgs> Reset
1121 // Restricted to only one listener
1122 if (_applicationResetEventHandler == null)
1124 _applicationResetEventHandler += value;
1126 _applicationResetEventCallbackDelegate = new NUIApplicationResetEventCallbackDelegate(OnNUIApplicationReset);
1127 this.ResetSignal().Connect(_applicationResetEventCallbackDelegate);
1136 if (_applicationResetEventHandler != null)
1138 this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
1141 _applicationResetEventHandler -= value;
1146 // Callback for Application ResetSignal
1147 private void OnNUIApplicationReset(IntPtr data)
1149 if (_applicationResetEventHandler != null)
1151 NUIApplicationResetEventArgs e = new NUIApplicationResetEventArgs();
1152 e.Application = this;
1153 _applicationResetEventHandler.Invoke(this, e);
1158 * @brief Event for Resized signal which can be used to subscribe/unsubscribe the event handler
1159 * provided by the user. Resized signal is emitted when application is resized
1161 public event DaliEventHandler<object, NUIApplicationResizedEventArgs> Resized
1167 // Restricted to only one listener
1168 if (_applicationResizeEventHandler == null)
1170 _applicationResizeEventHandler += value;
1172 _applicationResizeEventCallbackDelegate = new NUIApplicationResizeEventCallbackDelegate(OnNUIApplicationResize);
1173 this.ResizeSignal().Connect(_applicationResizeEventCallbackDelegate);
1182 if (_applicationResizeEventHandler != null)
1184 this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
1187 _applicationResizeEventHandler -= value;
1192 // Callback for Application ResizeSignal
1193 private void OnNUIApplicationResize(IntPtr data)
1195 if (_applicationResizeEventHandler != null)
1197 NUIApplicationResizedEventArgs e = new NUIApplicationResizedEventArgs();
1198 e.Application = this;
1199 _applicationResizeEventHandler.Invoke(this, e);
1204 * @brief Event for LanguageChanged signal which can be used to subscribe/unsubscribe the event handler
1205 * provided by the user. LanguageChanged signal is emitted when the region of the device is changed.
1207 public event DaliEventHandler<object, NUIApplicationLanguageChangedEventArgs> LanguageChanged
1213 // Restricted to only one listener
1214 if (_applicationLanguageChangedEventHandler == null)
1216 _applicationLanguageChangedEventHandler += value;
1218 _applicationLanguageChangedEventCallbackDelegate = new NUIApplicationLanguageChangedEventCallbackDelegate(OnNUIApplicationLanguageChanged);
1219 this.LanguageChangedSignal().Connect(_applicationLanguageChangedEventCallbackDelegate);
1228 if (_applicationLanguageChangedEventHandler != null)
1230 this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
1233 _applicationLanguageChangedEventHandler -= value;
1238 // Callback for Application LanguageChangedSignal
1239 private void OnNUIApplicationLanguageChanged(IntPtr data)
1241 if (_applicationLanguageChangedEventHandler != null)
1243 NUIApplicationLanguageChangedEventArgs e = new NUIApplicationLanguageChangedEventArgs();
1244 e.Application = this;
1245 _applicationLanguageChangedEventHandler.Invoke(this, e);
1250 * @brief Event for RegionChanged signal which can be used to subscribe/unsubscribe the event handler
1251 * provided by the user. RegionChanged signal is emitted when the region of the device is changed.
1253 public event DaliEventHandler<object, NUIApplicationRegionChangedEventArgs> RegionChanged
1259 // Restricted to only one listener
1260 if (_applicationRegionChangedEventHandler == null)
1262 _applicationRegionChangedEventHandler += value;
1264 _applicationRegionChangedEventCallbackDelegate = new NUIApplicationRegionChangedEventCallbackDelegate(OnNUIApplicationRegionChanged);
1265 this.RegionChangedSignal().Connect(_applicationRegionChangedEventCallbackDelegate);
1274 if (_applicationRegionChangedEventHandler != null)
1276 this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
1279 _applicationRegionChangedEventHandler -= value;
1284 // Callback for Application RegionChangedSignal
1285 private void OnNUIApplicationRegionChanged(IntPtr data)
1287 if (_applicationRegionChangedEventHandler != null)
1289 NUIApplicationRegionChangedEventArgs e = new NUIApplicationRegionChangedEventArgs();
1290 e.Application = this;
1291 _applicationRegionChangedEventHandler.Invoke(this, e);
1296 * @brief Event for BatteryLow signal which can be used to subscribe/unsubscribe the event handler
1297 * provided by the user. BatteryLow signal is emitted when the battery level of the device is low.
1299 public event DaliEventHandler<object, NUIApplicationBatteryLowEventArgs> BatteryLow
1305 // Restricted to only one listener
1306 if (_applicationBatteryLowEventHandler == null)
1308 _applicationBatteryLowEventHandler += value;
1310 _applicationBatteryLowEventCallbackDelegate = new NUIApplicationBatteryLowEventCallbackDelegate(OnNUIApplicationBatteryLow);
1311 this.BatteryLowSignal().Connect(_applicationBatteryLowEventCallbackDelegate);
1320 if (_applicationBatteryLowEventHandler != null)
1322 this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
1325 _applicationBatteryLowEventHandler -= value;
1330 // Callback for Application BatteryLowSignal
1331 private void OnNUIApplicationBatteryLow(BatteryStatus status)
1335 NUIApplicationBatteryLowEventArgs e = new NUIApplicationBatteryLowEventArgs();
1337 // Populate all members of "e" (NUIApplicationBatteryLowEventArgs) with real data
1338 e.BatteryStatus = status;
1339 _applicationBatteryLowEventHandler?.Invoke(this, e);
1344 * @brief Event for MemoryLow signal which can be used to subscribe/unsubscribe the event handler
1345 * provided by the user. MemoryLow signal is emitted when the memory level of the device is low.
1347 public event DaliEventHandler<object, NUIApplicationMemoryLowEventArgs> MemoryLow
1353 // Restricted to only one listener
1354 if (_applicationMemoryLowEventHandler == null)
1356 _applicationMemoryLowEventHandler += value;
1358 _applicationMemoryLowEventCallbackDelegate = new NUIApplicationMemoryLowEventCallbackDelegate(OnNUIApplicationMemoryLow);
1359 this.MemoryLowSignal().Connect(_applicationMemoryLowEventCallbackDelegate);
1368 if (_applicationMemoryLowEventHandler != null)
1370 this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
1373 _applicationMemoryLowEventHandler -= value;
1378 // Callback for Application MemoryLowSignal
1379 private void OnNUIApplicationMemoryLow(MemoryStatus status)
1383 NUIApplicationMemoryLowEventArgs e = new NUIApplicationMemoryLowEventArgs();
1385 // Populate all members of "e" (NUIApplicationMemoryLowEventArgs) with real data
1386 e.MemoryStatus = status;
1387 _applicationMemoryLowEventHandler?.Invoke(this, e);
1392 * @brief Event for AppControl signal which can be used to subscribe/unsubscribe the event handler
1393 * provided by the user. AppControl signal is emitted when another application sends a launch request to the application.
1395 public event DaliEventHandler<object, NUIApplicationAppControlEventArgs> AppControl
1401 // Restricted to only one listener
1402 if (_applicationAppControlEventHandler == null)
1404 _applicationAppControlEventHandler += value;
1406 _applicationAppControlEventCallbackDelegate = new NUIApplicationAppControlEventCallbackDelegate(OnNUIApplicationAppControl);
1407 this.AppControlSignal().Connect(_applicationAppControlEventCallbackDelegate);
1416 if (_applicationAppControlEventHandler != null)
1418 this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
1421 _applicationAppControlEventHandler -= value;
1426 // Callback for Application AppControlSignal
1427 private void OnNUIApplicationAppControl(IntPtr application, IntPtr voidp)
1429 if (_applicationAppControlEventHandler != null)
1431 NUIApplicationAppControlEventArgs e = new NUIApplicationAppControlEventArgs();
1433 e.Application = this;
1434 _applicationAppControlEventHandler.Invoke(this, e);
1438 private static Application _instance; // singleton
1440 public static Application Instance
1448 public static Application GetApplicationFromPtr(global::System.IntPtr cPtr)
1450 if (cPtr == global::System.IntPtr.Zero)
1455 Application ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as Application;
1456 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1460 public static Application NewApplication()
1462 return NewApplication("", Application.WindowMode.Opaque);
1465 public static Application NewApplication(string stylesheet)
1467 return NewApplication(stylesheet, Application.WindowMode.Opaque);
1470 public static Application NewApplication(string stylesheet, Application.WindowMode windowMode)
1472 // register all Views with the type registry, so that can be created / styled via JSON
1473 //ViewRegistryHelper.Initialize(); //moved to Application side.
1475 Application ret = New(1, stylesheet, windowMode);
1476 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1478 // set the singleton
1484 public static Application NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode)
1486 Application ret = New(args, stylesheet, (Application.WindowMode)windowMode);
1487 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1489 // set the singleton
1495 /// Ensures that the function passed in is called from the main loop when it is idle.
1497 /// <param name="func">The function to call</param>
1498 /// <returns>true if added successfully, false otherwise</returns>
1499 public bool AddIdle(System.Delegate func)
1501 System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate<System.Delegate>(func);
1502 System.IntPtr ip2 = Interop.Application.MakeCallback(new System.Runtime.InteropServices.HandleRef(this, ip));
1504 bool ret = Interop.Application.Application_AddIdle(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip2));
1506 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1511 * Outer::outer_method(int)
1513 public static Application New()
1515 Application ret = new Application(Interop.Application.Application_New__SWIG_0(), true);
1516 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1520 public static Application New(int argc)
1522 Application ret = new Application(Interop.Application.Application_New__SWIG_1(argc), true);
1523 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1527 public static Application New(int argc, string stylesheet)
1529 Application ret = new Application(Interop.Application.Application_New__SWIG_2(argc, stylesheet), true);
1530 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1534 public static Application New(int argc, string stylesheet, Application.WindowMode windowMode)
1536 Application ret = new Application(Interop.Application.Application_New__SWIG_3(argc, stylesheet, (int)windowMode), true);
1537 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1542 public static Application New(string[] args, string stylesheet, Application.WindowMode windowMode)
1544 int argc = args.Length;
1545 string argvStr = string.Join(" ", args);
1547 Application ret = new Application(NDalicPINVOKE.Application_New__MANUAL_4(argc, argvStr, stylesheet, (int)windowMode), true);
1549 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1554 public static Application New(int argc, string stylesheet, Application.WindowMode windowMode, Rectangle positionSize)
1556 Application ret = new Application(Interop.Application.Application_New__SWIG_4(argc, stylesheet, (int)windowMode, Rectangle.getCPtr(positionSize)), true);
1557 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1561 public Application() : this(Interop.Application.new_Application__SWIG_0(), true)
1563 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1566 public Application(Application application) : this(Interop.Application.new_Application__SWIG_1(Application.getCPtr(application)), true)
1568 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1571 public Application Assign(Application application)
1573 Application ret = new Application(Interop.Application.Application_Assign(swigCPtr, Application.getCPtr(application)), false);
1574 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1578 public void MainLoop()
1580 NDalicPINVOKE.Application_MainLoop__SWIG_0(swigCPtr);
1581 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1584 internal void MainLoop(SWIGTYPE_p_Configuration__ContextLoss configuration)
1586 Interop.Application.Application_MainLoop__SWIG_1(swigCPtr, SWIGTYPE_p_Configuration__ContextLoss.getCPtr(configuration));
1587 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1592 Interop.Application.Application_Lower(swigCPtr);
1593 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1598 Interop.Application.Application_Quit(swigCPtr);
1599 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1602 internal bool AddIdle(SWIGTYPE_p_Dali__CallbackBase callback)
1604 bool ret = Interop.Application.Application_AddIdle(swigCPtr, SWIGTYPE_p_Dali__CallbackBase.getCPtr(callback));
1605 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1609 public Window GetWindow()
1611 Window ret = new Window(Interop.Application.Application_GetWindow(swigCPtr), true);
1612 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1616 public void ReplaceWindow(Rectangle windowPosition, string name)
1618 Interop.Application.Application_ReplaceWindow(swigCPtr, Rectangle.getCPtr(windowPosition), name);
1619 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1622 public static string GetResourcePath()
1624 string ret = Interop.Application.Application_GetResourcePath();
1625 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1629 public string GetLanguage()
1631 string ret = Interop.Application.Application_GetLanguage(swigCPtr);
1632 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1636 public string GetRegion()
1638 string ret = Interop.Application.Application_GetRegion(swigCPtr);
1639 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1644 internal ApplicationSignal InitSignal()
1646 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_InitSignal(swigCPtr), false);
1647 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1651 internal ApplicationSignal TerminateSignal()
1653 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_TerminateSignal(swigCPtr), false);
1654 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1658 internal ApplicationSignal PauseSignal()
1660 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_PauseSignal(swigCPtr), false);
1661 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1665 internal ApplicationSignal ResumeSignal()
1667 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResumeSignal(swigCPtr), false);
1668 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1672 internal ApplicationSignal ResetSignal()
1674 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResetSignal(swigCPtr), false);
1675 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1679 internal ApplicationSignal ResizeSignal()
1681 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResizeSignal(swigCPtr), false);
1682 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1686 internal ApplicationControlSignal AppControlSignal()
1688 ApplicationControlSignal ret = new ApplicationControlSignal(NDalicPINVOKE.Application_AppControlSignal(swigCPtr), false);
1689 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1693 internal ApplicationSignal LanguageChangedSignal()
1695 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_LanguageChangedSignal(swigCPtr), false);
1696 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1700 internal ApplicationSignal RegionChangedSignal()
1702 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_RegionChangedSignal(swigCPtr), false);
1703 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1707 internal LowBatterySignalType BatteryLowSignal()
1709 LowBatterySignalType ret = new LowBatterySignalType(NDalicPINVOKE.Application_LowBatterySignal(swigCPtr), false);
1710 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1714 internal LowMemorySignalType MemoryLowSignal()
1716 LowMemorySignalType ret = new LowMemorySignalType(NDalicPINVOKE.Application_LowMemorySignal(swigCPtr), false);
1717 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1721 /// <since_tizen> 3 </since_tizen>
1722 public enum WindowMode