return false;
}
+bool _appinfo_is_pkg_uninstalling(const char *pkgid)
+{
+ char *op;
+
+ if (pkg_pending == NULL)
+ return false;
+
+ op = g_hash_table_lookup(pkg_pending, pkgid);
+ if (op != NULL && !strcasecmp(op, "uninstall"))
+ return true;
+
+ return false;
+}
+
static char *__get_cert_value_from_pkginfo(const char *pkgid, uid_t uid)
{
int ret;
bool _appinfo_is_pkg_updating(const char *pkgid);
+bool _appinfo_is_pkg_uninstalling(const char *pkgid);
+
int _appinfo_get_cert_visibility(const char *pkgid, uid_t uid);
bool _appinfo_is_platform_app(const char *appid, uid_t uid);
return _appinfo_is_pkg_updating(pkgid);
}
+
+extern "C" EXPORT_API bool amd_appinfo_is_pkg_uninstalling(const char* pkgid) {
+ return _appinfo_is_pkg_uninstalling(pkgid);
+}
+
+
extern "C" EXPORT_API int amd_appinfo_get_cert_visibility(const char* pkgid,
uid_t uid) {
return _appinfo_get_cert_visibility(pkgid, uid);
bool amd_appinfo_is_pkg_updating(const char *pkgid);
+bool amd_appinfo_is_pkg_uninstalling(const char* pkgid);
+
int amd_appinfo_get_cert_visibility(const char *pkgid, uid_t uid);
bool amd_appinfo_is_platform_app(const char *appid, uid_t uid);
return ret;
}
+
+static int __uninstall_widget_cleanup(int pid, uid_t uid)
+{
+ GList *widget_list = __widgets;
+ widget_t *widget;
+
+ while (widget_list) {
+ widget = (widget_t *)widget_list->data;
+ widget_list = widget_list->next;
+ if (widget->pid == pid && widget->uid == uid) {
+ __widgets = g_list_remove(__widgets, widget);
+ __free_widget(widget);
+ LOGW("remove widget(%d) from list", pid);
+ }
+ }
+
+ LOGW("cleanup widget %d:%d", pid, uid);
+
+ return 0;
+}
+
static int __widget_cleanup(int pid, uid_t uid, int viewer_pid)
{
GList *widget_list = __widgets;
__widget_send_dead_signal(pid, uid, pkgid, is_faulted);
return 0;
+ } else if (amd_appinfo_is_pkg_uninstalling(pkgid)) {
+ __widget_send_dead_signal(pid, uid, pkgid, false);
+ __uninstall_widget_cleanup(pid, uid);
}
__widget_send_restart_signal(pid, uid, viewer_pid, pkgid,