private static event EventHandler<PackageManagerEventArgs> s_updateEventHandler;
private static event EventHandler<PackageManagerEventArgs> s_moveEventHandler;
private static event EventHandler<PackageManagerEventArgs> s_clearDataEventHandler;
+ private static event EventHandler<PackageManagerClearCacheEventArgs> s_clearCacheEventHandler;
private static readonly object s_pkgEventLock = new object();
private static Interop.PackageManager.PackageManagerEventCallback s_packageManagerEventCallback = new Interop.PackageManager.PackageManagerEventCallback(InternalEventCallback);
}
}
+ /// <summary>
+ /// ClearCacheProgressChanged event. This event occurs when cache directories are cleared in the given package.
+ /// </summary>
+ /// <exception cref="IOException">Thrown when subscribing to package manager event failed.</exception>
+ /// <since_tizen> 12 </since_tizen>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static event EventHandler<PackageManagerClearCacheEventArgs> ClearCacheProgressChanged
+ {
+ add
+ {
+ lock (s_pkgEventLock)
+ {
+ SetPackageManagerEventStatus(Interop.PackageManager.EventStatus.ClearCache);
+ RegisterPackageManagerEventIfNeeded();
+ s_clearCacheEventHandler += value;
+ }
+ }
+ remove
+ {
+ lock (s_pkgEventLock)
+ {
+ s_clearCacheEventHandler -= value;
+ UnregisterPackageManagerEventIfNeeded();
+ UnsetPackageManagerEventStatus();
+ }
+ }
+ }
+
private static SafePackageManagerHandle Handle
{
get
if (s_updateEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.Upgrade;
if (s_moveEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.Move;
if (s_clearDataEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.ClearData;
+ if (s_clearCacheEventHandler != null) eventStatus |= Interop.PackageManager.EventStatus.ClearCache;
if (eventStatus != Interop.PackageManager.EventStatus.All)
eventStatus |= Interop.PackageManager.EventStatus.Progress;
private static void RegisterPackageManagerEventIfNeeded()
{
- if (s_installEventHandler != null && s_uninstallEventHandler != null && s_updateEventHandler != null && s_moveEventHandler != null && s_clearDataEventHandler != null)
+ if (s_installEventHandler != null && s_uninstallEventHandler != null && s_updateEventHandler != null && s_moveEventHandler != null && s_clearDataEventHandler != null && s_clearCacheEventHandler != null)
return;
if ((s_registered_eventStatus & s_eventStatus) == s_eventStatus)
}
}
- private static void InternalEventCallback(string packageType, string packageId, Interop.PackageManager.EventType eventType, Interop.PackageManager.PackageEventState eventState, int progress, Interop.PackageManager.ErrorCode error, IntPtr user_data)
- {
+ private static void HandlePackageEventCallback(string packageType, string packageId, Interop.PackageManager.EventType eventType, Interop.PackageManager.PackageEventState eventState, int progress, Interop.PackageManager.ErrorCode error, IntPtr user_data) {
PackageManagerEventArgs args;
try
{
handlers?.Invoke(null, args);
}
+ private static void HandleClearCacheEventCallback(string packageId, Interop.PackageManager.PackageEventState eventState, IntPtr user_data)
+ {
+ PackageManagerClearCacheEventArgs args;
+ try
+ {
+ args = new PackageManagerClearCacheEventArgs(packageId, (PackageEventState)eventState);
+ }
+ catch (Exception e)
+ {
+ Log.Warn(LogTag, e.Message);
+ return;
+ }
+
+ EventHandler<PackageManagerClearCacheEventArgs> handlers = null;
+ lock (s_pkgEventLock)
+ {
+ handlers = s_clearCacheEventHandler;
+ }
+
+ handlers?.Invoke(null, args);
+ }
+
+ private static void InternalEventCallback(string packageType, string packageId, Interop.PackageManager.EventType eventType, Interop.PackageManager.PackageEventState eventState, int progress, Interop.PackageManager.ErrorCode error, IntPtr user_data)
+ {
+ if (eventType == Interop.PackageManager.EventType.ClearCache) {
+ HandleClearCacheEventCallback(packageId, eventState, user_data);
+ } else {
+ HandlePackageEventCallback(packageType, packageId, eventType, eventState, progress, error, user_data);
+ }
+ }
+
private static void UnregisterPackageManagerEventIfNeeded()
{
- if (s_packageManagerEventCallback == null || s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null || s_moveEventHandler != null || s_clearDataEventHandler != null)
+ if (s_packageManagerEventCallback == null || s_installEventHandler != null || s_uninstallEventHandler != null || s_updateEventHandler != null || s_moveEventHandler != null || s_clearDataEventHandler != null || s_clearCacheEventHandler != null)
{
return;
}
--- /dev/null
+/*
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.ComponentModel;
+
+namespace Tizen.Applications
+{
+ /// <summary>
+ /// PackageManagerClearCacheEventArgs class. This class is an event arguments of the ClearCacheProgressChanged events.
+ /// </summary>
+ /// <since_tizen> 12 </since_tizen>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class PackageManagerClearCacheEventArgs : EventArgs
+ {
+ private readonly string _packageId;
+ private readonly PackageEventState _state;
+
+ internal PackageManagerClearCacheEventArgs(string packageId, PackageEventState state)
+ {
+ _packageId = packageId;
+ _state = state;
+ }
+
+ /// <summary>
+ /// Package ID, Target of clear cache event.
+ /// </summary>
+ /// <since_tizen> 12 </since_tizen>
+ public string PackageId { get { return _packageId; } }
+
+ /// <summary>
+ /// Current state of the request to the package manager.
+ /// </summary>
+ /// <since_tizen> 12 </since_tizen>
+ public PackageEventState State { get { return _state; } }
+ }
+}