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>
328 static Application s_current;
329 Task<IDictionary<string, object>> _propertiesTask;
330 readonly Lazy<PlatformConfigurationRegistry<Application>> _platformConfigurationRegistry;
332 IAppIndexingProvider _appIndexProvider;
334 ReadOnlyCollection<Element> _logicalChildren;
338 static SemaphoreSlim SaveSemaphore = new SemaphoreSlim(1, 1);
340 public IAppLinks AppLinks
344 if (_appIndexProvider == null)
345 throw new ArgumentException("No IAppIndexingProvider was provided");
346 if (_appIndexProvider.AppLinks == null)
347 throw new ArgumentException("No AppLinks implementation was found, if in Android make sure you installed the Xamarin.Forms.AppLinks");
348 return _appIndexProvider.AppLinks;
352 [EditorBrowsable(EditorBrowsableState.Never)]
353 public static void SetCurrentApplication(Application value) => Current = value;
355 public static Application Current
357 get { return s_current; }
360 if (s_current == value)
363 s_current = null; //Allow to reset current for unittesting
370 get { return _mainPage; }
374 throw new ArgumentNullException("value");
376 if (_mainPage == value)
379 OnPropertyChanging();
380 if (_mainPage != null)
382 InternalChildren.Remove(_mainPage);
383 _mainPage.Parent = null;
388 if (_mainPage != null)
390 _mainPage.Parent = this;
391 _mainPage.NavigationProxy.Inner = NavigationProxy;
392 InternalChildren.Add(_mainPage);
398 public IDictionary<string, object> Properties
402 if (_propertiesTask == null)
404 _propertiesTask = GetPropertiesAsync();
407 return _propertiesTask.Result;
411 internal override ReadOnlyCollection<Element> LogicalChildrenInternal
413 get { return _logicalChildren ?? (_logicalChildren = new ReadOnlyCollection<Element>(InternalChildren)); }
416 [EditorBrowsable(EditorBrowsableState.Never)]
417 public new NavigationProxy NavigationProxy { get; }
419 [EditorBrowsable(EditorBrowsableState.Never)]
420 public int PanGestureId { get; set; }
422 internal IResourceDictionary SystemResources { get; }
424 ObservableCollection<Element> InternalChildren { get; } = new ObservableCollection<Element>();
426 [EditorBrowsable(EditorBrowsableState.Never)]
427 public void SetAppIndexingProvider(IAppIndexingProvider provider)
429 _appIndexProvider = provider;
432 ResourceDictionary _resources;
433 public bool IsResourcesCreated => _resources != null;
435 public delegate void resChangeCb(object sender, ResourcesChangedEventArgs e);
437 static private Dictionary<object, Dictionary<resChangeCb, int>> resourceChangeCallbackDict = new Dictionary<object, Dictionary<resChangeCb, int>>();
438 static public void AddResourceChangedCallback(object handle, resChangeCb cb)
440 Dictionary<resChangeCb, int> cbDict;
441 resourceChangeCallbackDict.TryGetValue(handle, out cbDict);
445 cbDict = new Dictionary<resChangeCb, int>();
446 resourceChangeCallbackDict.Add(handle, cbDict);
449 if (false == cbDict.ContainsKey(cb))
455 internal override void OnResourcesChanged(object sender, ResourcesChangedEventArgs e)
457 base.OnResourcesChanged(sender, e);
459 foreach (KeyValuePair<object, Dictionary<resChangeCb, int>> resourcePair in resourceChangeCallbackDict)
461 foreach (KeyValuePair<resChangeCb, int> cbPair in resourcePair.Value)
463 cbPair.Key(sender, e);
468 public ResourceDictionary XamlResources
472 if (_resources != null)
475 _resources = new ResourceDictionary();
476 int hashCode = _resources.GetHashCode();
477 ((IResourceDictionary)_resources).ValuesChanged += OnResourcesChanged;
482 if (_resources == value)
484 OnPropertyChanging();
486 if (_resources != null)
487 ((IResourceDictionary)_resources).ValuesChanged -= OnResourcesChanged;
489 OnResourcesChanged(value);
490 if (_resources != null)
491 ((IResourceDictionary)_resources).ValuesChanged += OnResourcesChanged;
497 public event EventHandler<ModalPoppedEventArgs> ModalPopped;
499 public event EventHandler<ModalPoppingEventArgs> ModalPopping;
501 public event EventHandler<ModalPushedEventArgs> ModalPushed;
503 public event EventHandler<ModalPushingEventArgs> ModalPushing;
505 public event EventHandler<Page> PageAppearing;
507 public event EventHandler<Page> PageDisappearing;
510 async void SaveProperties()
514 await SetPropertiesAsync();
516 catch (Exception exc)
518 Console.WriteLine(nameof(Application), $"Exception while saving Application Properties: {exc}");
522 public async Task SavePropertiesAsync()
524 if (Device.IsInvokeRequired)
526 Device.BeginInvokeOnMainThread(SaveProperties);
530 await SetPropertiesAsync();
534 // Don't use this unless there really is no better option
535 internal void SavePropertiesAsFireAndForget()
537 if (Device.IsInvokeRequired)
539 Device.BeginInvokeOnMainThread(SaveProperties);
547 public IPlatformElementConfiguration<T, Application> On<T>() where T : IConfigPlatform
549 return _platformConfigurationRegistry.Value.On<T>();
552 protected virtual void OnAppLinkRequestReceived(Uri uri)
556 protected override void OnParentSet()
558 throw new InvalidOperationException("Setting a Parent on Application is invalid.");
561 protected virtual void OnResume()
565 protected virtual void OnSleep()
569 protected virtual void OnStart()
573 [EditorBrowsable(EditorBrowsableState.Never)]
574 public static void ClearCurrent()
579 [EditorBrowsable(EditorBrowsableState.Never)]
580 public static bool IsApplicationOrNull(Element element)
582 return element == null || element is Application;
585 internal override void OnParentResourcesChanged(IEnumerable<KeyValuePair<string, object>> values)
587 if (!((IResourcesProvider)this).IsResourcesCreated || XamlResources.Count == 0)
589 base.OnParentResourcesChanged(values);
593 var innerKeys = new HashSet<string>();
594 var changedResources = new List<KeyValuePair<string, object>>();
595 foreach (KeyValuePair<string, object> c in XamlResources)
596 innerKeys.Add(c.Key);
597 foreach (KeyValuePair<string, object> value in values)
599 if (innerKeys.Add(value.Key))
600 changedResources.Add(value);
602 OnResourcesChanged(changedResources);
605 internal event EventHandler PopCanceled;
607 [EditorBrowsable(EditorBrowsableState.Never)]
608 public void SendOnAppLinkRequestReceived(Uri uri)
610 OnAppLinkRequestReceived(uri);
613 [EditorBrowsable(EditorBrowsableState.Never)]
614 public void SendResume()
620 [EditorBrowsable(EditorBrowsableState.Never)]
621 public void SendSleep()
624 SavePropertiesAsFireAndForget();
627 [EditorBrowsable(EditorBrowsableState.Never)]
628 public Task SendSleepAsync()
631 return SavePropertiesAsync();
634 [EditorBrowsable(EditorBrowsableState.Never)]
635 public void SendStart()
640 async Task<IDictionary<string, object>> GetPropertiesAsync()
642 var deserializer = DependencyService.Get<IDeserializer>();
643 if (deserializer == null)
645 Console.WriteLine("Startup", "No IDeserialzier was found registered");
646 return new Dictionary<string, object>(4);
649 IDictionary<string, object> properties = await deserializer.DeserializePropertiesAsync().ConfigureAwait(false);
650 if (properties == null)
651 properties = new Dictionary<string, object>(4);
656 internal void OnPageAppearing(Page page)
657 => PageAppearing?.Invoke(this, page);
659 internal void OnPageDisappearing(Page page)
660 => PageDisappearing?.Invoke(this, page);
662 void OnModalPopped(Page modalPage)
663 => ModalPopped?.Invoke(this, new ModalPoppedEventArgs(modalPage));
665 bool OnModalPopping(Page modalPage)
667 var args = new ModalPoppingEventArgs(modalPage);
668 ModalPopping?.Invoke(this, args);
672 void OnModalPushed(Page modalPage)
673 => ModalPushed?.Invoke(this, new ModalPushedEventArgs(modalPage));
675 void OnModalPushing(Page modalPage)
676 => ModalPushing?.Invoke(this, new ModalPushingEventArgs(modalPage));
679 => PopCanceled?.Invoke(this, EventArgs.Empty);
681 async Task SetPropertiesAsync()
683 await SaveSemaphore.WaitAsync();
686 await DependencyService.Get<IDeserializer>()?.SerializePropertiesAsync(Properties);
690 SaveSemaphore.Release();
695 class NavigationImpl : NavigationProxy
697 readonly Application _owner;
699 public NavigationImpl(Application owner)
704 protected override async Task<Page> OnPopModal(bool animated)
706 Page modal = ModalStack[ModalStack.Count - 1];
707 if (_owner.OnModalPopping(modal))
709 _owner.OnPopCanceled();
712 Page result = await base.OnPopModal(animated);
713 result.Parent = null;
714 _owner.OnModalPopped(result);
718 protected override async Task OnPushModal(Page modal, bool animated)
720 _owner.OnModalPushing(modal);
722 modal.Parent = _owner;
724 if (modal.NavigationProxy.ModalStack.Count == 0)
726 modal.NavigationProxy.Inner = this;
727 await base.OnPushModal(modal, animated);
731 await base.OnPushModal(modal, animated);
732 modal.NavigationProxy.Inner = this;
735 _owner.OnModalPushed(modal);
739 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
741 internal Application(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Application_SWIGUpcast(cPtr), cMemoryOwn)
743 NavigationProxy = new NavigationImpl(this);
744 SetCurrentApplication(this);
746 _platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<Application>>(() => new PlatformConfigurationRegistry<Application>(this));
747 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
752 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Application obj)
754 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
757 protected override void Dispose(DisposeTypes type)
764 if (type == DisposeTypes.Explicit)
767 //Release your own managed resources here.
768 //You should release all of your own disposable objects here.
772 //Release your own unmanaged resources here.
773 //You should not access any managed member here except static instance.
774 //because the execution order of Finalizes is non-deterministic.
776 if (_applicationInitEventCallbackDelegate != null)
778 this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
781 if (_applicationTerminateEventCallbackDelegate != null)
783 this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
786 if (_applicationPauseEventCallbackDelegate != null)
788 this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
791 if (_applicationResumeEventCallbackDelegate != null)
793 this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
796 if (_applicationResetEventCallbackDelegate != null)
798 this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
801 if (_applicationResizeEventCallbackDelegate != null)
803 this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
806 if (_applicationLanguageChangedEventCallbackDelegate != null)
808 this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
811 if (_applicationRegionChangedEventCallbackDelegate != null)
813 this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
816 if (_applicationBatteryLowEventCallbackDelegate != null)
818 this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
821 if (_applicationMemoryLowEventCallbackDelegate != null)
823 this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
826 if (_applicationAppControlEventCallbackDelegate != null)
828 this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
831 if (swigCPtr.Handle != global::System.IntPtr.Zero)
836 NDalicPINVOKE.delete_Application(swigCPtr);
838 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
844 /// <since_tizen> 4 </since_tizen>
845 public enum BatteryStatus
852 /// <since_tizen> 4 </since_tizen>
853 public enum MemoryStatus
860 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
861 private delegate void NUIApplicationInitEventCallbackDelegate(IntPtr application);
862 private DaliEventHandler<object, NUIApplicationInitEventArgs> _applicationInitEventHandler;
863 private NUIApplicationInitEventCallbackDelegate _applicationInitEventCallbackDelegate;
866 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
867 private delegate void NUIApplicationTerminateEventCallbackDelegate(IntPtr application);
868 private DaliEventHandler<object, NUIApplicationTerminatingEventArgs> _applicationTerminateEventHandler;
869 private NUIApplicationTerminateEventCallbackDelegate _applicationTerminateEventCallbackDelegate;
872 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
873 private delegate void NUIApplicationPauseEventCallbackDelegate(IntPtr application);
874 private DaliEventHandler<object, NUIApplicationPausedEventArgs> _applicationPauseEventHandler;
875 private NUIApplicationPauseEventCallbackDelegate _applicationPauseEventCallbackDelegate;
877 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
878 private delegate void NUIApplicationResumeEventCallbackDelegate(IntPtr application);
879 private DaliEventHandler<object, NUIApplicationResumedEventArgs> _applicationResumeEventHandler;
880 private NUIApplicationResumeEventCallbackDelegate _applicationResumeEventCallbackDelegate;
882 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
883 private delegate void NUIApplicationResetEventCallbackDelegate(IntPtr application);
884 private DaliEventHandler<object, NUIApplicationResetEventArgs> _applicationResetEventHandler;
885 private NUIApplicationResetEventCallbackDelegate _applicationResetEventCallbackDelegate;
887 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
888 private delegate void NUIApplicationResizeEventCallbackDelegate(IntPtr application);
889 private DaliEventHandler<object, NUIApplicationResizedEventArgs> _applicationResizeEventHandler;
890 private NUIApplicationResizeEventCallbackDelegate _applicationResizeEventCallbackDelegate;
892 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
893 private delegate void NUIApplicationLanguageChangedEventCallbackDelegate(IntPtr application);
894 private DaliEventHandler<object, NUIApplicationLanguageChangedEventArgs> _applicationLanguageChangedEventHandler;
895 private NUIApplicationLanguageChangedEventCallbackDelegate _applicationLanguageChangedEventCallbackDelegate;
898 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
899 private delegate void NUIApplicationRegionChangedEventCallbackDelegate(IntPtr application);
900 private DaliEventHandler<object, NUIApplicationRegionChangedEventArgs> _applicationRegionChangedEventHandler;
901 private NUIApplicationRegionChangedEventCallbackDelegate _applicationRegionChangedEventCallbackDelegate;
903 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
904 private delegate void NUIApplicationBatteryLowEventCallbackDelegate(BatteryStatus status);
905 private DaliEventHandler<object, NUIApplicationBatteryLowEventArgs> _applicationBatteryLowEventHandler;
906 private NUIApplicationBatteryLowEventCallbackDelegate _applicationBatteryLowEventCallbackDelegate;
908 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
909 private delegate void NUIApplicationMemoryLowEventCallbackDelegate(MemoryStatus status);
910 private DaliEventHandler<object, NUIApplicationMemoryLowEventArgs> _applicationMemoryLowEventHandler;
911 private NUIApplicationMemoryLowEventCallbackDelegate _applicationMemoryLowEventCallbackDelegate;
913 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
914 private delegate void NUIApplicationAppControlEventCallbackDelegate(IntPtr application, IntPtr voidp);
915 private DaliEventHandler<object, NUIApplicationAppControlEventArgs> _applicationAppControlEventHandler;
916 private NUIApplicationAppControlEventCallbackDelegate _applicationAppControlEventCallbackDelegate;
919 * @brief Event for Initialized signal which can be used to subscribe/unsubscribe the event handler
920 * provided by the user. Initialized signal is emitted when application is initialised
922 public event DaliEventHandler<object, NUIApplicationInitEventArgs> Initialized
928 // Restricted to only one listener
929 if (_applicationInitEventHandler == null)
931 _applicationInitEventHandler += value;
933 _applicationInitEventCallbackDelegate = new NUIApplicationInitEventCallbackDelegate(OnApplicationInit);
934 this.InitSignal().Connect(_applicationInitEventCallbackDelegate);
943 if (_applicationInitEventHandler != null)
945 this.InitSignal().Disconnect(_applicationInitEventCallbackDelegate);
948 _applicationInitEventHandler -= value;
953 // Callback for Application InitSignal
954 private void OnApplicationInit(IntPtr data)
956 // Initialize DisposeQueue Singleton class. This is also required to create DisposeQueue on main thread.
957 DisposeQueue.Instance.Initialize();
959 if (_applicationInitEventHandler != null)
961 NUIApplicationInitEventArgs e = new NUIApplicationInitEventArgs();
962 e.Application = this;
963 _applicationInitEventHandler.Invoke(this, e);
969 * @brief Event for Terminated signal which can be used to subscribe/unsubscribe the event handler
970 * provided by the user. Terminated signal is emitted when application is terminating
972 public event DaliEventHandler<object, NUIApplicationTerminatingEventArgs> Terminating
978 // Restricted to only one listener
979 if (_applicationTerminateEventHandler == null)
981 _applicationTerminateEventHandler += value;
983 _applicationTerminateEventCallbackDelegate = new NUIApplicationTerminateEventCallbackDelegate(OnNUIApplicationTerminate);
984 this.TerminateSignal().Connect(_applicationTerminateEventCallbackDelegate);
993 if (_applicationTerminateEventHandler != null)
995 this.TerminateSignal().Disconnect(_applicationTerminateEventCallbackDelegate);
998 _applicationTerminateEventHandler -= value;
1003 // Callback for Application TerminateSignal
1004 private void OnNUIApplicationTerminate(IntPtr data)
1006 if (_applicationTerminateEventHandler != null)
1008 NUIApplicationTerminatingEventArgs e = new NUIApplicationTerminatingEventArgs();
1009 e.Application = this;
1010 _applicationTerminateEventHandler.Invoke(this, e);
1012 if (Window.Instance)
1014 Window.Instance.DisconnectNativeSignals();
1019 * @brief Event for Paused signal which can be used to subscribe/unsubscribe the event handler
1020 * provided by the user. Paused signal is emitted when application is paused
1022 public event DaliEventHandler<object, NUIApplicationPausedEventArgs> Paused
1028 // Restricted to only one listener
1029 if (_applicationPauseEventHandler == null)
1031 _applicationPauseEventHandler += value;
1033 _applicationPauseEventCallbackDelegate = new NUIApplicationPauseEventCallbackDelegate(OnNUIApplicationPause);
1034 this.PauseSignal().Connect(_applicationPauseEventCallbackDelegate);
1043 if (_applicationPauseEventHandler != null)
1045 this.PauseSignal().Disconnect(_applicationPauseEventCallbackDelegate);
1048 _applicationPauseEventHandler -= value;
1053 // Callback for Application PauseSignal
1054 private void OnNUIApplicationPause(IntPtr data)
1056 if (_applicationPauseEventHandler != null)
1058 NUIApplicationPausedEventArgs e = new NUIApplicationPausedEventArgs();
1059 e.Application = this;
1060 _applicationPauseEventHandler.Invoke(this, e);
1065 * @brief Event for Resumed signal which can be used to subscribe/unsubscribe the event handler
1066 * provided by the user. Resumed signal is emitted when application is resumed
1068 public event DaliEventHandler<object, NUIApplicationResumedEventArgs> Resumed
1074 // Restricted to only one listener
1075 if (_applicationResumeEventHandler == null)
1077 _applicationResumeEventHandler += value;
1079 _applicationResumeEventCallbackDelegate = new NUIApplicationResumeEventCallbackDelegate(OnNUIApplicationResume);
1080 this.ResumeSignal().Connect(_applicationResumeEventCallbackDelegate);
1089 if (_applicationResumeEventHandler != null)
1091 this.ResumeSignal().Disconnect(_applicationResumeEventCallbackDelegate);
1094 _applicationResumeEventHandler -= value;
1099 // Callback for Application ResumeSignal
1100 private void OnNUIApplicationResume(IntPtr data)
1102 if (_applicationResumeEventHandler != null)
1104 NUIApplicationResumedEventArgs e = new NUIApplicationResumedEventArgs();
1105 e.Application = this;
1106 _applicationResumeEventHandler.Invoke(this, e);
1111 * @brief Event for Reset signal which can be used to subscribe/unsubscribe the event handler
1112 * provided by the user. Reset signal is emitted when application is reset
1114 public new event DaliEventHandler<object, NUIApplicationResetEventArgs> Reset
1120 // Restricted to only one listener
1121 if (_applicationResetEventHandler == null)
1123 _applicationResetEventHandler += value;
1125 _applicationResetEventCallbackDelegate = new NUIApplicationResetEventCallbackDelegate(OnNUIApplicationReset);
1126 this.ResetSignal().Connect(_applicationResetEventCallbackDelegate);
1135 if (_applicationResetEventHandler != null)
1137 this.ResetSignal().Disconnect(_applicationResetEventCallbackDelegate);
1140 _applicationResetEventHandler -= value;
1145 // Callback for Application ResetSignal
1146 private void OnNUIApplicationReset(IntPtr data)
1148 if (_applicationResetEventHandler != null)
1150 NUIApplicationResetEventArgs e = new NUIApplicationResetEventArgs();
1151 e.Application = this;
1152 _applicationResetEventHandler.Invoke(this, e);
1157 * @brief Event for Resized signal which can be used to subscribe/unsubscribe the event handler
1158 * provided by the user. Resized signal is emitted when application is resized
1160 public event DaliEventHandler<object, NUIApplicationResizedEventArgs> Resized
1166 // Restricted to only one listener
1167 if (_applicationResizeEventHandler == null)
1169 _applicationResizeEventHandler += value;
1171 _applicationResizeEventCallbackDelegate = new NUIApplicationResizeEventCallbackDelegate(OnNUIApplicationResize);
1172 this.ResizeSignal().Connect(_applicationResizeEventCallbackDelegate);
1181 if (_applicationResizeEventHandler != null)
1183 this.ResizeSignal().Disconnect(_applicationResizeEventCallbackDelegate);
1186 _applicationResizeEventHandler -= value;
1191 // Callback for Application ResizeSignal
1192 private void OnNUIApplicationResize(IntPtr data)
1194 if (_applicationResizeEventHandler != null)
1196 NUIApplicationResizedEventArgs e = new NUIApplicationResizedEventArgs();
1197 e.Application = this;
1198 _applicationResizeEventHandler.Invoke(this, e);
1203 * @brief Event for LanguageChanged signal which can be used to subscribe/unsubscribe the event handler
1204 * provided by the user. LanguageChanged signal is emitted when the region of the device is changed.
1206 public event DaliEventHandler<object, NUIApplicationLanguageChangedEventArgs> LanguageChanged
1212 // Restricted to only one listener
1213 if (_applicationLanguageChangedEventHandler == null)
1215 _applicationLanguageChangedEventHandler += value;
1217 _applicationLanguageChangedEventCallbackDelegate = new NUIApplicationLanguageChangedEventCallbackDelegate(OnNUIApplicationLanguageChanged);
1218 this.LanguageChangedSignal().Connect(_applicationLanguageChangedEventCallbackDelegate);
1227 if (_applicationLanguageChangedEventHandler != null)
1229 this.LanguageChangedSignal().Disconnect(_applicationLanguageChangedEventCallbackDelegate);
1232 _applicationLanguageChangedEventHandler -= value;
1237 // Callback for Application LanguageChangedSignal
1238 private void OnNUIApplicationLanguageChanged(IntPtr data)
1240 if (_applicationLanguageChangedEventHandler != null)
1242 NUIApplicationLanguageChangedEventArgs e = new NUIApplicationLanguageChangedEventArgs();
1243 e.Application = this;
1244 _applicationLanguageChangedEventHandler.Invoke(this, e);
1249 * @brief Event for RegionChanged signal which can be used to subscribe/unsubscribe the event handler
1250 * provided by the user. RegionChanged signal is emitted when the region of the device is changed.
1252 public event DaliEventHandler<object, NUIApplicationRegionChangedEventArgs> RegionChanged
1258 // Restricted to only one listener
1259 if (_applicationRegionChangedEventHandler == null)
1261 _applicationRegionChangedEventHandler += value;
1263 _applicationRegionChangedEventCallbackDelegate = new NUIApplicationRegionChangedEventCallbackDelegate(OnNUIApplicationRegionChanged);
1264 this.RegionChangedSignal().Connect(_applicationRegionChangedEventCallbackDelegate);
1273 if (_applicationRegionChangedEventHandler != null)
1275 this.RegionChangedSignal().Disconnect(_applicationRegionChangedEventCallbackDelegate);
1278 _applicationRegionChangedEventHandler -= value;
1283 // Callback for Application RegionChangedSignal
1284 private void OnNUIApplicationRegionChanged(IntPtr data)
1286 if (_applicationRegionChangedEventHandler != null)
1288 NUIApplicationRegionChangedEventArgs e = new NUIApplicationRegionChangedEventArgs();
1289 e.Application = this;
1290 _applicationRegionChangedEventHandler.Invoke(this, e);
1295 * @brief Event for BatteryLow signal which can be used to subscribe/unsubscribe the event handler
1296 * provided by the user. BatteryLow signal is emitted when the battery level of the device is low.
1298 public event DaliEventHandler<object, NUIApplicationBatteryLowEventArgs> BatteryLow
1304 // Restricted to only one listener
1305 if (_applicationBatteryLowEventHandler == null)
1307 _applicationBatteryLowEventHandler += value;
1309 _applicationBatteryLowEventCallbackDelegate = new NUIApplicationBatteryLowEventCallbackDelegate(OnNUIApplicationBatteryLow);
1310 this.BatteryLowSignal().Connect(_applicationBatteryLowEventCallbackDelegate);
1319 if (_applicationBatteryLowEventHandler != null)
1321 this.BatteryLowSignal().Disconnect(_applicationBatteryLowEventCallbackDelegate);
1324 _applicationBatteryLowEventHandler -= value;
1329 // Callback for Application BatteryLowSignal
1330 private void OnNUIApplicationBatteryLow(BatteryStatus status)
1334 NUIApplicationBatteryLowEventArgs e = new NUIApplicationBatteryLowEventArgs();
1336 // Populate all members of "e" (NUIApplicationBatteryLowEventArgs) with real data
1337 e.BatteryStatus = status;
1338 _applicationBatteryLowEventHandler?.Invoke(this, e);
1343 * @brief Event for MemoryLow signal which can be used to subscribe/unsubscribe the event handler
1344 * provided by the user. MemoryLow signal is emitted when the memory level of the device is low.
1346 public event DaliEventHandler<object, NUIApplicationMemoryLowEventArgs> MemoryLow
1352 // Restricted to only one listener
1353 if (_applicationMemoryLowEventHandler == null)
1355 _applicationMemoryLowEventHandler += value;
1357 _applicationMemoryLowEventCallbackDelegate = new NUIApplicationMemoryLowEventCallbackDelegate(OnNUIApplicationMemoryLow);
1358 this.MemoryLowSignal().Connect(_applicationMemoryLowEventCallbackDelegate);
1367 if (_applicationMemoryLowEventHandler != null)
1369 this.MemoryLowSignal().Disconnect(_applicationMemoryLowEventCallbackDelegate);
1372 _applicationMemoryLowEventHandler -= value;
1377 // Callback for Application MemoryLowSignal
1378 private void OnNUIApplicationMemoryLow(MemoryStatus status)
1382 NUIApplicationMemoryLowEventArgs e = new NUIApplicationMemoryLowEventArgs();
1384 // Populate all members of "e" (NUIApplicationMemoryLowEventArgs) with real data
1385 e.MemoryStatus = status;
1386 _applicationMemoryLowEventHandler?.Invoke(this, e);
1391 * @brief Event for AppControl signal which can be used to subscribe/unsubscribe the event handler
1392 * provided by the user. AppControl signal is emitted when another application sends a launch request to the application.
1394 public event DaliEventHandler<object, NUIApplicationAppControlEventArgs> AppControl
1400 // Restricted to only one listener
1401 if (_applicationAppControlEventHandler == null)
1403 _applicationAppControlEventHandler += value;
1405 _applicationAppControlEventCallbackDelegate = new NUIApplicationAppControlEventCallbackDelegate(OnNUIApplicationAppControl);
1406 this.AppControlSignal().Connect(_applicationAppControlEventCallbackDelegate);
1415 if (_applicationAppControlEventHandler != null)
1417 this.AppControlSignal().Disconnect(_applicationAppControlEventCallbackDelegate);
1420 _applicationAppControlEventHandler -= value;
1425 // Callback for Application AppControlSignal
1426 private void OnNUIApplicationAppControl(IntPtr application, IntPtr voidp)
1428 if (_applicationAppControlEventHandler != null)
1430 NUIApplicationAppControlEventArgs e = new NUIApplicationAppControlEventArgs();
1432 e.Application = this;
1433 _applicationAppControlEventHandler.Invoke(this, e);
1437 private static Application _instance; // singleton
1439 public static Application Instance
1447 public static Application GetApplicationFromPtr(global::System.IntPtr cPtr)
1449 if (cPtr == global::System.IntPtr.Zero)
1454 Application ret = Registry.GetManagedBaseHandleFromNativePtr(cPtr) as Application;
1455 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1459 public static Application NewApplication()
1461 return NewApplication("", Application.WindowMode.Opaque);
1464 public static Application NewApplication(string stylesheet)
1466 return NewApplication(stylesheet, Application.WindowMode.Opaque);
1469 public static Application NewApplication(string stylesheet, Application.WindowMode windowMode)
1471 // register all Views with the type registry, so that can be created / styled via JSON
1472 //ViewRegistryHelper.Initialize(); //moved to Application side.
1474 Application ret = New(1, stylesheet, windowMode);
1475 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1477 // set the singleton
1483 public static Application NewApplication(string[] args, string stylesheet, Application.WindowMode windowMode)
1485 Application ret = New(args, stylesheet, (Application.WindowMode)windowMode);
1486 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1488 // set the singleton
1494 /// Ensures that the function passed in is called from the main loop when it is idle.
1496 /// <param name="func">The function to call</param>
1497 /// <returns>true if added successfully, false otherwise</returns>
1498 public bool AddIdle(System.Delegate func)
1500 System.IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate<System.Delegate>(func);
1501 System.IntPtr ip2 = NDalicManualPINVOKE.MakeCallback(new System.Runtime.InteropServices.HandleRef(this, ip));
1503 bool ret = NDalicPINVOKE.Application_AddIdle(swigCPtr, new System.Runtime.InteropServices.HandleRef(this, ip2));
1505 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1510 * Outer::outer_method(int)
1512 public static Application New()
1514 Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_0(), true);
1515 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1519 public static Application New(int argc)
1521 Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_1(argc), true);
1522 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1526 public static Application New(int argc, string stylesheet)
1528 Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_2(argc, stylesheet), true);
1529 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1533 public static Application New(int argc, string stylesheet, Application.WindowMode windowMode)
1535 Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_3(argc, stylesheet, (int)windowMode), true);
1536 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1541 public static Application New(string[] args, string stylesheet, Application.WindowMode windowMode)
1543 int argc = args.Length;
1544 string argvStr = string.Join(" ", args);
1546 Application ret = new Application(NDalicPINVOKE.Application_New__MANUAL_4(argc, argvStr, stylesheet, (int)windowMode), true);
1547 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1551 public static Application New(int argc, string stylesheet, Application.WindowMode windowMode, Rectangle positionSize)
1553 Application ret = new Application(NDalicPINVOKE.Application_New__SWIG_4(argc, stylesheet, (int)windowMode, Rectangle.getCPtr(positionSize)), true);
1554 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1558 public Application() : this(NDalicPINVOKE.new_Application__SWIG_0(), true)
1560 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1563 public Application(Application application) : this(NDalicPINVOKE.new_Application__SWIG_1(Application.getCPtr(application)), true)
1565 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1568 public Application Assign(Application application)
1570 Application ret = new Application(NDalicPINVOKE.Application_Assign(swigCPtr, Application.getCPtr(application)), false);
1571 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1575 public void MainLoop()
1577 NDalicPINVOKE.Application_MainLoop__SWIG_0(swigCPtr);
1578 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1581 internal void MainLoop(SWIGTYPE_p_Configuration__ContextLoss configuration)
1583 NDalicPINVOKE.Application_MainLoop__SWIG_1(swigCPtr, SWIGTYPE_p_Configuration__ContextLoss.getCPtr(configuration));
1584 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1589 NDalicPINVOKE.Application_Lower(swigCPtr);
1590 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1595 NDalicPINVOKE.Application_Quit(swigCPtr);
1596 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1599 internal bool AddIdle(SWIGTYPE_p_Dali__CallbackBase callback)
1601 bool ret = NDalicPINVOKE.Application_AddIdle(swigCPtr, SWIGTYPE_p_Dali__CallbackBase.getCPtr(callback));
1602 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1606 public Window GetWindow()
1608 Window ret = new Window(NDalicPINVOKE.Application_GetWindow(swigCPtr), true);
1609 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1613 public void ReplaceWindow(Rectangle windowPosition, string name)
1615 NDalicPINVOKE.Application_ReplaceWindow(swigCPtr, Rectangle.getCPtr(windowPosition), name);
1616 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1619 public static string GetResourcePath()
1621 string ret = NDalicPINVOKE.Application_GetResourcePath();
1622 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1626 public string GetLanguage()
1628 string ret = NDalicPINVOKE.Application_GetLanguage(swigCPtr);
1629 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1633 public string GetRegion()
1635 string ret = NDalicPINVOKE.Application_GetRegion(swigCPtr);
1636 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1641 internal ApplicationSignal InitSignal()
1643 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_InitSignal(swigCPtr), false);
1644 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1648 internal ApplicationSignal TerminateSignal()
1650 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_TerminateSignal(swigCPtr), false);
1651 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1655 internal ApplicationSignal PauseSignal()
1657 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_PauseSignal(swigCPtr), false);
1658 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1662 internal ApplicationSignal ResumeSignal()
1664 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResumeSignal(swigCPtr), false);
1665 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1669 internal ApplicationSignal ResetSignal()
1671 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResetSignal(swigCPtr), false);
1672 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1676 internal ApplicationSignal ResizeSignal()
1678 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_ResizeSignal(swigCPtr), false);
1679 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1683 internal ApplicationControlSignal AppControlSignal()
1685 ApplicationControlSignal ret = new ApplicationControlSignal(NDalicPINVOKE.Application_AppControlSignal(swigCPtr), false);
1686 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1690 internal ApplicationSignal LanguageChangedSignal()
1692 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_LanguageChangedSignal(swigCPtr), false);
1693 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1697 internal ApplicationSignal RegionChangedSignal()
1699 ApplicationSignal ret = new ApplicationSignal(NDalicPINVOKE.Application_RegionChangedSignal(swigCPtr), false);
1700 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1704 internal LowBatterySignalType BatteryLowSignal()
1706 LowBatterySignalType ret = new LowBatterySignalType(NDalicPINVOKE.Application_LowBatterySignal(swigCPtr), false);
1707 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1711 internal LowMemorySignalType MemoryLowSignal()
1713 LowMemorySignalType ret = new LowMemorySignalType(NDalicPINVOKE.Application_LowMemorySignal(swigCPtr), false);
1714 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1718 /// <since_tizen> 3 </since_tizen>
1719 public enum WindowMode