e_policy_appinfo: add e_policy_appinfo
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 23 Apr 2019 04:53:52 +0000 (13:53 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 23 Apr 2019 06:52:30 +0000 (15:52 +0900)
The e_policy_appinfo provide the interface for the information of
the application information.
The server contains the information from the clients using this inteface.

Change-Id: I60dbdf2804a6d09c12295f2e5bfcae69782bebc9

src/bin/Makefile.mk
src/bin/e_includes.h
src/bin/e_policy_appinfo.c [new file with mode: 0644]
src/bin/e_policy_appinfo.h [new file with mode: 0644]

index 02b5429078fa25913a5f727040afc5dcc6ad8f11..a71c73b13709c8a9c9573391817b06be5bc35b72 100644 (file)
@@ -126,6 +126,7 @@ src/bin/e_policy_visibility.h \
 src/bin/e_policy_private_data.h \
 src/bin/e_policy_wl.h \
 src/bin/e_policy_wl_display.h \
+src/bin/e_policy_appinfo.h \
 src/bin/e_process.h \
 src/bin/e_privilege.h \
 src/bin/e_security.h \
@@ -241,6 +242,7 @@ src/bin/e_policy_stack.c  \
 src/bin/e_policy_visibility.c \
 src/bin/e_policy_wl.c \
 src/bin/e_policy_wl_display.c \
+src/bin/e_policy_appinfo.c \
 src/bin/e_process.c \
 src/bin/e_privilege.c \
 src/bin/e_security.c \
index 0bd76ce694f2a397a1f82f3423397a841ad9c205..82a562797cd6e5bfefdf1c22550f6e54bca388b1 100644 (file)
@@ -70,6 +70,7 @@
 #include "e_policy.h"
 #include "e_policy_conformant.h"
 #include "e_policy_visibility.h"
+#include "e_policy_appinfo.h"
 #include "e_process.h"
 #include "e_splitlayout.h"
 #include "e_slot.h"
diff --git a/src/bin/e_policy_appinfo.c b/src/bin/e_policy_appinfo.c
new file mode 100644 (file)
index 0000000..afdd095
--- /dev/null
@@ -0,0 +1,125 @@
+#include "e.h"
+#include "e_policy_appinfo.h"
+
+Eina_List *appinfo_list;
+
+struct _E_Policy_Appinfo
+{
+   pid_t               pid;
+   Eina_Stringshare   *appid;
+   Eina_Bool base_output_available;
+   int base_output_width;
+   int base_output_height;
+};
+
+EINTERN E_Policy_Appinfo *
+e_policy_appinfo_new(void)
+{
+   E_Policy_Appinfo *epai = NULL;
+
+   epai = E_NEW(E_Policy_Appinfo, 1);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(epai, NULL);
+
+   appinfo_list = eina_list_append(appinfo_list, epai);
+
+   ELOGF("POL_APPINFO", "appinfo(%p) create", NULL, NULL, epai);
+
+   return epai;
+}
+
+EINTERN void
+e_policy_appinfo_del(E_Policy_Appinfo *epai)
+{
+   EINA_SAFETY_ON_NULL_RETURN(epai);
+
+   ELOGF("POL_APPINFO", "appinfo(%p) delete", NULL, NULL, epai);
+
+   if (epai->appid)
+     eina_stringshare_del(epai->appid);
+
+   appinfo_list = eina_list_remove(appinfo_list, epai);
+
+   E_FREE(epai);
+}
+
+EINTERN Eina_Bool
+e_policy_appinfo_pid_set(E_Policy_Appinfo *epai, pid_t pid)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(epai, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(pid <= 0, EINA_FALSE);
+
+   epai->pid = pid;
+
+   ELOGF("POL_APPINFO", "appinfo(%p) set pid(%u)", NULL, NULL, epai, pid);
+
+   return EINA_TRUE;
+}
+
+EINTERN Eina_Bool
+e_policy_appinfo_appid_set(E_Policy_Appinfo *epai, const char *appid)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(epai, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(appid, EINA_FALSE);
+
+   if (epai->appid)
+     eina_stringshare_del(epai->appid);
+
+   epai->appid = eina_stringshare_add(appid);
+
+   ELOGF("POL_APPINFO", "appinfo(%p) set appid(%s)", NULL, NULL, epai, appid);
+
+   return EINA_TRUE;
+}
+
+EINTERN Eina_Bool
+e_policy_appinfo_base_output_resolution_get(E_Policy_Appinfo *epai, int *width, int *height)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(epai, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(width, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(height, EINA_FALSE);
+
+   if (!epai->base_output_available)
+     {
+        *width = 0;
+        *height = 0;
+        return EINA_FALSE;
+     }
+
+   *width = epai->base_output_width;
+   *height = epai->base_output_height;
+
+   return EINA_TRUE;
+}
+
+EINTERN E_Policy_Appinfo *
+e_policy_appinfo_find_with_pid(pid_t pid)
+{
+   E_Policy_Appinfo *epai = NULL;
+   Eina_List *l = NULL;
+
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(pid <= 0, EINA_FALSE);
+
+   EINA_LIST_FOREACH(appinfo_list, l, epai)
+     {
+        if (epai->pid == pid)
+          return epai;
+     }
+
+   return NULL;
+}
+
+EINTERN Eina_Bool
+e_policy_appinfo_base_output_resolution_set(E_Policy_Appinfo *epai, int width, int height)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(epai, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(width < 0, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(height < 0, EINA_FALSE);
+
+   epai->base_output_width = width;
+   epai->base_output_height = height;
+   epai->base_output_available = EINA_TRUE;
+
+   ELOGF("POL_APPINFO", "appinfo(%p) set base_output_resolution(%d, %d):(pid,%u)", NULL, NULL, epai, width, height, epai->pid);
+
+   return EINA_TRUE;
+}
diff --git a/src/bin/e_policy_appinfo.h b/src/bin/e_policy_appinfo.h
new file mode 100644 (file)
index 0000000..0ffd8e8
--- /dev/null
@@ -0,0 +1,12 @@
+typedef struct _E_Policy_Appinfo E_Policy_Appinfo;
+
+EINTERN E_Policy_Appinfo *e_policy_appinfo_new(void);
+EINTERN void              e_policy_appinfo_del(E_Policy_Appinfo *epai);
+EINTERN Eina_Bool         e_policy_appinfo_pid_set(E_Policy_Appinfo *epai, pid_t pid);
+EINTERN Eina_Bool         e_policy_appinfo_appid_set(E_Policy_Appinfo *epai, const char *appid);
+EINTERN Eina_Bool         e_policy_appinfo_base_output_resolution_get(E_Policy_Appinfo *epai, int *width, int *height);
+
+EINTERN E_Policy_Appinfo *e_policy_appinfo_find_with_pid(pid_t pid);
+EINTERN Eina_Bool         e_policy_appinfo_base_output_resolution_set(E_Policy_Appinfo *epai, int width, int height);
+
+