e584b8cea4ff2f6a90ecce24a4da302be92f0747
[platform/core/csapi/tizenfx.git] / src / Tizen.Applications.ComponentBased / Tizen.Applications.ComponentBased.Common / FrameComponentStateManager.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Tizen.Applications.ComponentBased.Common
6 {
7     internal class FrameComponentStateManager : ComponentStateManger
8     {
9         private Interop.CBApplication.FrameLifecycleCallbacks _callbacks;
10         private const string LogTag = "Tizen.Applications.FrameComponentStateManager";
11
12         internal FrameComponentStateManager(Type ctype, string id, ComponentBasedApplication parent) : base(ctype, id, parent)
13         {
14             _callbacks.OnAction = new Interop.CBApplication.FrameActionCallback(OnActionCallback);
15             _callbacks.OnDeviceOrientationChanged = new Interop.CBApplication.FrameDeviceOrientationChangedCallback(OnDeviceOrientationChangedCallback);
16             _callbacks.OnLanguageChanged = new Interop.CBApplication.FrameLanguageChangedCallback(OnLanguageChangedCallback);
17             _callbacks.OnLowBattery = new Interop.CBApplication.FrameLowBatteryCallback(OnLowBatteryCallback);
18             _callbacks.OnLowMemory = new Interop.CBApplication.FrameLowMemoryCallback(OnLowMemoryCallback);
19             _callbacks.OnRegionFormatChanged = new Interop.CBApplication.FrameRegionFormatChangedCallback(OnRegionFormatChangedCallback);
20             _callbacks.OnRestore = new Interop.CBApplication.FrameRestoreCallback(OnRestoreCallback);
21             _callbacks.OnSave = new Interop.CBApplication.FrameSaveCallback(OnSaveCallback);
22             _callbacks.OnSuspendedState = new Interop.CBApplication.FrameSuspendedStateCallback(OnSuspendedStateCallback);
23             _callbacks.OnCreate = new Interop.CBApplication.FrameCreateCallback(OnCreateCallback);
24             _callbacks.OnDestroy = new Interop.CBApplication.FrameDestroyCallback(OnDestroyCallback);
25             _callbacks.OnPause = new Interop.CBApplication.FramePauseCallback(OnPauseCallback);
26             _callbacks.OnResume = new Interop.CBApplication.FrameResumeCallback(OnResumeCallback);
27             _callbacks.OnStart = new Interop.CBApplication.FrameStartCallback(OnStartCallback);
28             _callbacks.OnStop = new Interop.CBApplication.FrameStopCallback(OnStopCallback);
29             Parent = parent;
30         }
31
32         private IntPtr OnCreateCallback(IntPtr context, IntPtr userData)
33         {
34             FrameComponent fc = Activator.CreateInstance(ComponentClassType) as FrameComponent;
35             if (fc == null)
36             {
37                 Log.Error(LogTag, "Fail to create instance");
38                 return IntPtr.Zero;
39             }
40
41             string id;
42             Interop.CBApplication.GetInstanceId(context, out id);
43             fc.Bind(context, ComponentId, id, Parent);
44
45             IntPtr winHandle;
46             IWindowInfo win = fc.CreateWindowInfo();
47             if (win == null)
48                 return IntPtr.Zero;
49
50             if (!fc.OnCreate())
51             {
52                 Log.Error(LogTag, "OnCreate fail");
53                 return IntPtr.Zero;
54             }
55             Interop.CBApplication.BaseFrameCreateWindow(out winHandle, win.ResourceId, IntPtr.Zero);
56
57             AddComponent(fc);
58             return winHandle;
59         }
60
61         private void OnStartCallback(IntPtr context, IntPtr appControl, bool restarted, IntPtr userData)
62         {
63             foreach (FrameComponent fc in Instances)
64             {
65                 if (fc.Handle == context)
66                 {
67                     SafeAppControlHandle handle = new SafeAppControlHandle(appControl, false);
68                     AppControl control = new AppControl(handle);
69                     fc.OnStart(control, restarted);
70                     break;
71                 }
72             }
73         }
74
75         private void OnResumeCallback(IntPtr context, IntPtr userData)
76         {
77             foreach (FrameComponent fc in Instances)
78             {
79                 if (fc.Handle == context)
80                 {
81                     fc.OnResume();
82                     break;
83                 }
84             }
85         }
86
87         private void OnPauseCallback(IntPtr context, IntPtr userData)
88         {
89             foreach (FrameComponent fc in Instances)
90             {
91                 if (fc.Handle == context)
92                 {
93                     fc.OnPause();
94                     break;
95                 }
96             }
97         }
98
99         private void OnStopCallback(IntPtr context, IntPtr userData)
100         {
101             foreach (FrameComponent fc in Instances)
102             {
103                 if (fc.Handle == context)
104                 {
105                     fc.OnStop();
106                     break;
107                 }
108             }
109         }
110
111         private void OnDestroyCallback(IntPtr context, IntPtr userData)
112         {
113             foreach (FrameComponent fc in Instances)
114             {
115                 if (fc.Handle == context)
116                 {
117                     fc.OnDestroy();
118                     RemoveComponent(fc);
119                     break;
120                 }
121             }
122             return;
123         }
124
125         private void OnActionCallback(IntPtr context, string action, IntPtr appControl, IntPtr userData)
126         {
127         }
128
129         internal override IntPtr Bind(IntPtr h)
130         {
131             return Interop.CBApplication.BaseAddFrameComponent(h, ComponentId, ref _callbacks, IntPtr.Zero);
132         }
133     }
134 }