2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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.
18 using System.Collections.Generic;
20 namespace Tizen.Applications
23 /// This class provides methods and properties to get information of the application.
25 /// <since_tizen> 3 </since_tizen>
26 public class ApplicationInfo : IDisposable
28 private const string LogTag = "Tizen.Applications";
29 private bool _disposed = false;
30 private IntPtr _infoHandle = IntPtr.Zero;
31 private string _applicationId = string.Empty;
32 private Interop.ApplicationManager.ErrorCode err = Interop.ApplicationManager.ErrorCode.None;
34 internal ApplicationInfo(IntPtr infoHandle)
36 err = Interop.ApplicationManager.AppInfoGetAppId(infoHandle, out _applicationId);
37 if (err != Interop.ApplicationManager.ErrorCode.None)
39 throw new ArgumentException("Invalid native handle.");
41 _infoHandle = infoHandle;
45 /// A constructor of ApplicationInfo that takes the application ID.
47 /// <param name="applicationId">Application ID.</param>
48 /// <since_tizen> 3 </since_tizen>
49 public ApplicationInfo(string applicationId)
51 _applicationId = applicationId;
55 /// Destructor of the class.
63 /// Gets the application ID.
65 /// <since_tizen> 3 </since_tizen>
66 public string ApplicationId
70 if (!string.IsNullOrEmpty(_applicationId))
71 return _applicationId;
72 IntPtr infoHandle = GetInfoHandle();
73 string appid = string.Empty;
74 if (infoHandle != IntPtr.Zero)
76 err = Interop.ApplicationManager.AppInfoGetAppId(infoHandle, out appid);
77 if (err != Interop.ApplicationManager.ErrorCode.None)
79 Log.Warn(LogTag, "Failed to get the application id. err = " + err);
87 /// Gets the package ID of the application.
89 /// <since_tizen> 3 </since_tizen>
90 public string PackageId
94 IntPtr infoHandle = GetInfoHandle();
95 string packageid = string.Empty;
96 if (infoHandle != IntPtr.Zero)
98 err = Interop.ApplicationManager.AppInfoGetPackage(infoHandle, out packageid);
99 if (err != Interop.ApplicationManager.ErrorCode.None)
101 Log.Warn(LogTag, "Failed to get the package id of " + _applicationId + ". err = " + err);
109 /// Gets the label of the application.
111 /// <since_tizen> 3 </since_tizen>
116 IntPtr infoHandle = GetInfoHandle();
117 string label = string.Empty;
118 if (infoHandle != IntPtr.Zero)
120 err = Interop.ApplicationManager.AppInfoGetLabel(infoHandle, out label);
121 if (err != Interop.ApplicationManager.ErrorCode.None)
123 Log.Warn(LogTag, "Failed to get the app label of " + _applicationId + ". err = " + err);
131 /// Gets the executable path of the application.
133 /// <since_tizen> 3 </since_tizen>
134 public string ExecutablePath
138 IntPtr infoHandle = GetInfoHandle();
139 string exec = string.Empty;
140 if (infoHandle != IntPtr.Zero)
142 err = Interop.ApplicationManager.AppInfoGetExec(infoHandle, out exec);
143 if (err != Interop.ApplicationManager.ErrorCode.None)
145 Log.Warn(LogTag, "Failed to get the executable file path of " + _applicationId + ". err = " + err);
153 /// Gets the absolute path to the icon image.
155 /// <since_tizen> 3 </since_tizen>
156 public string IconPath
160 IntPtr infoHandle = GetInfoHandle();
161 string path = string.Empty;
162 if (infoHandle != IntPtr.Zero)
164 err = Interop.ApplicationManager.AppInfoGetIcon(infoHandle, out path);
165 if (err != Interop.ApplicationManager.ErrorCode.None)
167 Log.Warn(LogTag, "Failed to get the app icon path of " + _applicationId + ". err = " + err);
175 /// Gets the application type name.
177 /// <since_tizen> 3 </since_tizen>
178 public string ApplicationType
182 IntPtr infoHandle = GetInfoHandle();
183 string type = string.Empty;
184 if (infoHandle != IntPtr.Zero)
186 err = Interop.ApplicationManager.AppInfoGetType(infoHandle, out type);
187 if (err != Interop.ApplicationManager.ErrorCode.None)
189 Log.Warn(LogTag, "Failed to get the application type of " + _applicationId + ". err = " + err);
197 /// Gets the application component type.
199 /// <since_tizen> 6 </since_tizen>
200 public ApplicationComponentType ComponentType
204 IntPtr infoHandle = GetInfoHandle();
205 Interop.ApplicationManager.AppInfoAppComponentType componentType = 0;
206 if (infoHandle != IntPtr.Zero)
208 err = Interop.ApplicationManager.AppInfoGetAppComponentType(infoHandle, out componentType);
209 if (err != Interop.ApplicationManager.ErrorCode.None)
211 Log.Warn(LogTag, "Failed to get the application component type of " + _applicationId + ". err = " + err);
214 return (ApplicationComponentType)componentType;
219 /// Gets the application's metadata.
221 /// <since_tizen> 3 </since_tizen>
222 public IDictionary<String, String> Metadata
226 IDictionary<string, string> metadata = new Dictionary<String, String>();
228 Interop.ApplicationManager.AppInfoMetadataCallback cb = (string key, string value, IntPtr userData) =>
232 if (!metadata.ContainsKey(key))
233 metadata.Add(key, value);
238 IntPtr infoHandle = GetInfoHandle();
239 if (infoHandle != IntPtr.Zero)
241 err = Interop.ApplicationManager.AppInfoForeachMetadata(infoHandle, cb, IntPtr.Zero);
242 if (err != Interop.ApplicationManager.ErrorCode.None)
244 Log.Warn(LogTag, "Failed to get application metadata of " + _applicationId + ". err = " + err);
252 /// Checks whether the application information is nodisplay. If the application icon is not displayed on the menu screen, true; otherwise, false.
254 /// <since_tizen> 3 </since_tizen>
255 public bool IsNoDisplay
259 IntPtr infoHandle = GetInfoHandle();
260 bool nodisplay = false;
261 if (infoHandle != IntPtr.Zero)
263 err = Interop.ApplicationManager.AppInfoIsNodisplay(infoHandle, out nodisplay);
264 if (err != Interop.ApplicationManager.ErrorCode.None)
266 Log.Warn(LogTag, "Failed to get the IsNoDisplay value of " + _applicationId + ". err = " + err);
275 /// Checks whether the application is launched on booting time. If the application automatically starts on boot, true; otherwise, false.
277 /// <since_tizen> 3 </since_tizen>
282 IntPtr infoHandle = GetInfoHandle();
284 if (infoHandle != IntPtr.Zero)
286 err = Interop.ApplicationManager.AppInfoIsOnBoot(infoHandle, out onboot);
287 if (err != Interop.ApplicationManager.ErrorCode.None)
289 Log.Warn(LogTag, "Failed to get the IsOnBoot value of " + _applicationId + ". err = " + err);
297 /// Checks whether the application is preloaded. If the application is preloaded, true; otherwise, false.
299 /// <since_tizen> 3 </since_tizen>
300 public bool IsPreload
304 IntPtr infoHandle = GetInfoHandle();
305 bool preloaded = false;
306 if (infoHandle != IntPtr.Zero)
308 err = Interop.ApplicationManager.AppInfoIsPreLoad(infoHandle, out preloaded);
309 if (err != Interop.ApplicationManager.ErrorCode.None)
311 Log.Warn(LogTag, "Failed to get the IsPreload value of " + _applicationId + ". err = " + err);
319 /// Gets the application's category values specified in the tizen-manifest
321 /// <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
322 /// <privlevel>platform</privlevel>
323 /// <since_tizen> 6 </since_tizen>
324 public IEnumerable<string> Categories
328 List<string> categories = new List<string>();
330 Interop.ApplicationManager.AppInfoCategoryCallback cb = (string category, IntPtr userData) =>
332 categories.Add(category);
336 IntPtr infoHandle = GetInfoHandle();
337 if (infoHandle != IntPtr.Zero)
339 err = Interop.ApplicationManager.AppInfoForeachCategory(infoHandle, cb, IntPtr.Zero);
340 if (err != Interop.ApplicationManager.ErrorCode.None)
342 Log.Warn(LogTag, "Failed to get application category of " + _applicationId + ". err = " + err);
350 /// Gets the shared data path.
353 /// An application that wants to use shared/data directory must declare http://tizen.org/privilege/appdir.shareddata privilege. If the application doesn't declare the privilege, the framework will not create shared/data directory for the application. This property will return empty string when the application doesn't have shared/data directory.
355 /// <since_tizen> 3 </since_tizen>
356 public string SharedDataPath
360 string path = string.Empty;
361 err = Interop.ApplicationManager.AppManagerGetSharedDataPath(ApplicationId, out path);
362 if (err != Interop.ApplicationManager.ErrorCode.None)
364 Log.Warn(LogTag, "Failed to get the SharedDataPath of " + _applicationId + ". err = " + err);
371 /// Gets the shared resource path.
373 /// <since_tizen> 3 </since_tizen>
374 public string SharedResourcePath
378 string path = string.Empty;
379 err = Interop.ApplicationManager.AppManagerGetSharedResourcePath(ApplicationId, out path);
380 if (err != Interop.ApplicationManager.ErrorCode.None)
382 Log.Warn(LogTag, "Failed to get the SharedResourcePath of " + _applicationId + ". err = " + err);
389 /// Gets the shared trust path.
391 /// <since_tizen> 3 </since_tizen>
392 public string SharedTrustedPath
396 string path = string.Empty;
397 err = Interop.ApplicationManager.AppManagerGetSharedTrustedPath(ApplicationId, out path);
398 if (err != Interop.ApplicationManager.ErrorCode.None)
400 Log.Warn(LogTag, "Failed to get the SharedTrustedPath of " + _applicationId + ". err = " + err);
407 /// Gets the external shared data path.
409 /// <since_tizen> 3 </since_tizen>
410 public string ExternalSharedDataPath
414 string path = string.Empty;
415 err = Interop.ApplicationManager.AppManagerGetExternalSharedDataPath(ApplicationId, out path);
416 if (err != Interop.ApplicationManager.ErrorCode.None)
418 Log.Warn(LogTag, "Failed to get the ExternalSharedDataPath of " + _applicationId + ". err = " + err);
425 /// Gets the resource controls.
427 /// <since_tizen> 9 </since_tizen>
428 public IEnumerable<ResourceControl> ResourceControls
432 List<ResourceControl> resourceControls = new List<ResourceControl>();
433 Interop.ApplicationManager.AppInfoResControlCallback cb = (string resType, string minResourceVersion, string maxResourceVersion, string isAutoClose, IntPtr userData) =>
435 resourceControls.Add(new ResourceControl(resType, minResourceVersion, maxResourceVersion, isAutoClose == "true"));
439 IntPtr infoHandle = GetInfoHandle();
440 if (infoHandle != null)
442 err = Interop.ApplicationManager.AppInfoForeachResControl(infoHandle, cb, IntPtr.Zero);
443 if (err != Interop.ApplicationManager.ErrorCode.None)
445 Log.Warn(LogTag, "Failed to get the resource controls of " + _applicationId + ". err = " + err);
449 return resourceControls;
454 /// Gets the localized label of the application for the given locale.
456 /// <param name="locale">Locale.</param>
457 /// <returns>The localized label.</returns>
458 /// <since_tizen> 3 </since_tizen>
459 public string GetLocalizedLabel(string locale)
461 string label = string.Empty;
462 err = Interop.ApplicationManager.AppInfoGetLocaledLabel(ApplicationId, locale, out label);
463 if (err != Interop.ApplicationManager.ErrorCode.None)
465 Log.Warn(LogTag, "Failed to get the GetLocalizedLabel of " + _applicationId + ". err = " + err);
471 private IntPtr GetInfoHandle()
473 if (_infoHandle == IntPtr.Zero)
475 IntPtr infoHandle = IntPtr.Zero;
476 err = Interop.ApplicationManager.AppManagerGetAppInfo(_applicationId, out infoHandle);
477 if (err != Interop.ApplicationManager.ErrorCode.None)
479 Log.Warn(LogTag, "Failed to get the handle of the ApplicationInfo. err = " + err);
481 _infoHandle = infoHandle;
487 /// Releases all resources used by the ApplicationInfo class.
489 /// <since_tizen> 3 </since_tizen>
490 public void Dispose()
493 GC.SuppressFinalize(this);
496 private void Dispose(bool disposing)
503 if (_infoHandle != IntPtr.Zero)
505 Interop.ApplicationManager.AppInfoDestroy(_infoHandle);
506 _infoHandle = IntPtr.Zero;