1 /// Copyright 2016 by Samsung Electronics, Inc.,
3 /// This software is the confidential and proprietary information
4 /// of Samsung Electronics, Inc. ("Confidential Information"). You
5 /// shall not disclose such Confidential Information and shall use
6 /// it only in accordance with the terms of the license agreement
7 /// you entered into with Samsung.
10 using System.Collections.Generic;
11 using System.Threading.Tasks;
12 using System.Runtime.InteropServices;
14 namespace Tizen.Applications.Manager
16 internal class ApplicationManagerImpl : IDisposable
18 private static ApplicationManagerImpl _instance = new ApplicationManagerImpl();
20 private bool _disposed = false;
21 private Interop.ApplicationManager.AppManagerAppContextEventCallback _applicationChangedEventCallback;
23 private ApplicationManagerImpl()
25 Console.WriteLine("ApplicationManagerImpl()");
26 RegisterApplicationChangedEvent();
30 ~ApplicationManagerImpl()
32 Console.WriteLine("~ApplicationManagerImpl()");
33 UnRegisterApplicationChangedEvent();
37 internal event EventHandler<ApplicationChangedEventArgs> ApplicationLaunched;
38 internal event EventHandler<ApplicationChangedEventArgs> ApplicationTerminated;
40 internal static ApplicationManagerImpl Instance
51 GC.SuppressFinalize(this);
54 private void Dispose(bool disposing)
61 // Free managed objects.
63 //Free unmanaged objects
67 internal async Task<IEnumerable<InstalledApplication>> GetInstalledAppsAsync()
69 Console.WriteLine("GetInstalledAppsAsync()");
70 return await Task.Run(() =>
72 List<InstalledApplication> Result = new List<InstalledApplication>();
74 Interop.ApplicationManager.AppManagerAppInfoCallback cb = (IntPtr handle, IntPtr userData) =>
76 if (handle != IntPtr.Zero)
79 Interop.ApplicationManager.AppInfoClone(out clonedHandle, handle);
80 InstalledApplication app = new InstalledApplication(clonedHandle);
86 Interop.ApplicationManager.AppManagerForeachAppInfo(cb, IntPtr.Zero);
91 internal async Task<IEnumerable<InstalledApplication>> GetInstalledAppsAsync(InstalledApplicationFilter filter)
93 Console.WriteLine("GetInstalledAppsAsync(InstalledApplicationFilter filter)");
94 return await Task.Run(() =>
96 List<InstalledApplication> Result = new List<InstalledApplication>();
98 Interop.ApplicationManager.AppInfoFilterCallback cb = (IntPtr handle, IntPtr userData) =>
100 Console.WriteLine("AppInfoFilterCallback");
101 if (handle != IntPtr.Zero)
104 Interop.ApplicationManager.AppInfoClone(out clonedHandle, handle);
105 InstalledApplication app = new InstalledApplication(clonedHandle);
112 Interop.ApplicationManager.AppInfoFilterForeachAppinfo(filter.Handle, cb, IntPtr.Zero);
117 internal async Task<IEnumerable<InstalledApplication>> GetInstalledAppsAsync(InstalledApplicationMetadataFilter filter)
119 Console.WriteLine("GetInstalledAppsAsync(InstalledApplicationMetadataFilter filter)");
121 return await Task.Run(() =>
123 List<InstalledApplication> Result = new List<InstalledApplication>();
125 Interop.ApplicationManager.AppInfoFilterCallback cb = (IntPtr handle, IntPtr userData) =>
127 Console.WriteLine("AppInfoFilterCallback");
128 if (handle != IntPtr.Zero)
131 Interop.ApplicationManager.AppInfoClone(out clonedHandle, handle);
132 InstalledApplication app = new InstalledApplication(clonedHandle);
139 Interop.ApplicationManager.AppInfoMetadataFilterForeach(filter.Handle, cb, IntPtr.Zero);
144 internal async Task<IEnumerable<RunningApplication>> GetRunningAppsAsync()
146 Console.WriteLine("GetRunningAppsAsync()");
148 return await Task.Run(() =>
150 List<RunningApplication> Result = new List<RunningApplication>();
152 Interop.ApplicationManager.AppManagerAppContextCallback cb = (IntPtr handle, IntPtr userData) =>
154 Console.WriteLine("AppManagerAppContextCallback");
155 if (handle != IntPtr.Zero)
157 IntPtr ptr = IntPtr.Zero;
158 Interop.ApplicationManager.AppContextGetAppId(handle, out ptr);
159 string appid = Marshal.PtrToStringAuto(ptr);
161 Interop.ApplicationManager.AppContextGetPid(handle, out pid);
162 RunningApplication app = new RunningApplication(appid, pid);
169 Interop.ApplicationManager.AppManagerForeachAppContext(cb, IntPtr.Zero);
174 internal InstalledApplication GetInstalledApp(string applicationId)
176 Console.WriteLine("GetInstalledApp(appid)");
177 IntPtr info = IntPtr.Zero;
178 Interop.ApplicationManager.AppManagerGetAppInfo(applicationId, out info);
179 if (info != IntPtr.Zero)
181 InstalledApplication app = new InstalledApplication(info);
187 internal RunningApplication GetRunningApp(string applicationId)
189 Console.WriteLine("GetRunningApp(appid)");
190 IntPtr context = IntPtr.Zero;
191 Interop.ApplicationManager.AppManagerGetAppContext(applicationId, out context);
193 if (context != IntPtr.Zero)
196 Interop.ApplicationManager.AppContextGetPid(context, out pid);
197 Interop.ApplicationManager.AppContextDestroy(context);
198 RunningApplication app = new RunningApplication(applicationId, pid);
204 internal RunningApplication GetRunningApp(int processId)
206 Console.WriteLine("GetRunningApp(pid)");
208 Interop.ApplicationManager.AppManagerGetAppId(processId, out appid);
209 RunningApplication app = new RunningApplication(appid, processId);
213 internal bool IsRunningApp(string applicationId)
215 Console.WriteLine("IsRunningApp(appid)");
216 bool running = false;
217 Interop.ApplicationManager.AppManagerIsRunning(applicationId, out running);
221 internal bool IsRunningApp(int processId)
223 Console.WriteLine("IsRunningApp(pid)");
225 Interop.ApplicationManager.AppManagerGetAppId(processId, out appid);
226 bool running = false;
227 Interop.ApplicationManager.AppManagerIsRunning(appid, out running);
231 private void RegisterApplicationChangedEvent()
233 Console.WriteLine("RegisterApplicationChangedEvent()");
234 _applicationChangedEventCallback = (IntPtr context, int state, IntPtr userData) =>
236 Console.WriteLine("ApplicationChangedEventCallback");
237 if (context == IntPtr.Zero) return;
239 IntPtr ptr = IntPtr.Zero;
240 Interop.ApplicationManager.AppContextGetAppId(context, out ptr);
241 string appid = Marshal.PtrToStringAuto(ptr);
243 Interop.ApplicationManager.AppContextGetPid(context, out pid);
247 var launchedEventCache = ApplicationLaunched;
248 if (launchedEventCache != null)
250 Console.WriteLine("Raise up ApplicationLaunched");
251 ApplicationChangedEventArgs e = new ApplicationChangedEventArgs(appid, pid, state);
252 launchedEventCache(null, e);
257 var terminatedEventCache = ApplicationTerminated;
258 if (terminatedEventCache != null)
260 Console.WriteLine("Raise up ApplicationTerminated");
261 ApplicationChangedEventArgs e = new ApplicationChangedEventArgs(appid, pid, state);
262 terminatedEventCache(null, e);
267 Interop.ApplicationManager.AppManagerSetAppContextEvent(_applicationChangedEventCallback, IntPtr.Zero);
270 private void UnRegisterApplicationChangedEvent()
272 Console.WriteLine("UnRegisterApplicationChangedEvent()");
273 Interop.ApplicationManager.AppManagerUnSetAppContextEvent();