#include "signal_receiver.hh"
+#include "log.hh"
+#include "../../installer/src/pkgmgr_installer.h"
+
namespace pkgmgr {
namespace client {
#define AGENT_APPID "signal_agent"
-SignalReceiver::SignalReceiver(bool is_system)
- : PkgSignal(is_system ? "" : AGENT_APPID, is_system) {
+SignalReceiver::SignalReceiver(bool is_system, int status_type)
+ : PkgSignal(is_system ? "" : AGENT_APPID, is_system),
+ status_type_(status_type) {
}
SignalReceiver::~SignalReceiver() {
}
+const std::map<std::string, int> signal_map = {
+ {PKGMGR_INSTALLER_INSTALL_EVENT_STR, PKGMGR_CLIENT_STATUS_INSTALL},
+ {PKGMGR_INSTALLER_UNINSTALL_EVENT_STR, PKGMGR_CLIENT_STATUS_UNINSTALL},
+ {PKGMGR_INSTALLER_UPGRADE_EVENT_STR, PKGMGR_CLIENT_STATUS_UPGRADE},
+ {PKGMGR_INSTALLER_CLEAR_EVENT_STR, PKGMGR_CLIENT_STATUS_CLEAR_DATA},
+ {PKGMGR_INSTALLER_MOVE_EVENT_STR, PKGMGR_CLIENT_STATUS_MOVE},
+ {PKGMGR_INSTALLER_INSTALL_PERCENT_KEY_STR,
+ PKGMGR_CLIENT_STATUS_INSTALL_PROGRESS},
+ {PKGMGR_INSTALLER_GET_SIZE_KEY_STR, PKGMGR_CLIENT_STATUS_GET_SIZE},
+ {PKGMGR_INSTALLER_CLEAR_CACHE_KEY_STR,
+ PKGMGR_CLIENT_STATUS_CLEAR_CACHE},
+ {PKGMGR_INSTALLER_APP_ENABLE_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_ENABLE_APP},
+ {PKGMGR_INSTALLER_APP_DISABLE_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_DISABLE_APP},
+ {PKGMGR_INSTALLER_APP_ENABLE_SPLASH_SCREEN_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_ENABLE_APP_SPLASH_SCREEN},
+ {PKGMGR_INSTALLER_APP_DISABLE_SPLASH_SCREEN_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_DISABLE_APP_SPLASH_SCREEN},
+ {PKGMGR_INSTALLER_RES_COPY_EVENT_STR, PKGMGR_CLIENT_STATUS_RES_COPY},
+ {PKGMGR_INSTALLER_RES_CREATE_DIR_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_RES_CREATE_DIR},
+ {PKGMGR_INSTALLER_RES_REMOVE_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_RES_REMOVE},
+ {PKGMGR_INSTALLER_RES_UNINSTALL_EVENT_STR,
+ PKGMGR_CLIENT_STATUS_RES_UNINSTALL}
+};
+
void SignalReceiver::OnAsyncResult(std::string signal, int targetUid,
std::string reqId, std::vector<pkg_signal::PkgInfo> pkgs,
std::string key, std::string val) {
+ if (status_type_ != PKGMGR_CLIENT_STATUS_ALL) {
+ auto it = signal_map.find(signal);
+ if (it == signal_map.end()) {
+ _E("Unexpected signal : %s", signal.c_str());
+ return;
+ }
+
+ if ((it->second & status_type_) == 0) {
+ return;
+ }
+ }
+
HandleHandler(targetUid, reqId, pkgs, key, val);
HandleGlobalHandler(targetUid, reqId, pkgs, key, val);
HandleSizeInfoHandler(reqId, pkgs, key, val);
void SignalReceiver::OnAsyncResultForResource(std::string signal,
int targetUid, std::string reqId, std::string pkgid,
std::string status, pkg_signal::ExtraData extra) {
+ if (status_type_ != PKGMGR_CLIENT_STATUS_ALL) {
+ auto it = signal_map.find(signal);
+ if (it == signal_map.end()) {
+ _E("Unexpected signal : %s", signal.c_str());
+ return;
+ }
+
+ if ((it->second & status_type_) == 0) {
+ return;
+ }
+ }
+
HandleResHandler(signal, targetUid, reqId, pkgid, status, extra);
HandleGlobalResHandler(signal, targetUid, reqId, pkgid, status, extra);
}
return sId;
}
+void SignalReceiver::SetStatusType(int status_type) {
+ status_type_ = status_type;
+}
+
int SignalReceiver::GetRequestId() {
return ++request_id_;
class SignalReceiver : public pkg_group::PkgSignal {
public:
- SignalReceiver(bool is_system);
+ SignalReceiver(bool is_system, int status_type);
virtual ~SignalReceiver();
void OnAsyncResult(std::string signal, int targetUid, std::string reqId,
int AddEventHandler(std::string req_key, pkgmgr_res_handler event_cb,
void* data);
int AddEventHandler(pkgmgr_pkg_upgrade_handler event_cb, void* data);
+ void SetStatusType(int status_type);
private:
static int GetRequestId();
private:
static inline int request_id_;
+ int status_type_;
std::map<std::string, std::tuple<int, pkgmgr_handler, pkgmgr_app_handler,
void*>> handlers_;
std::list<std::tuple<int, pkgmgr_handler, pkgmgr_app_handler, void*>> global_handlers_;