Remove unnecessary code
[apps/agl-service-windowmanager.git] / src / policy_manager / policy_manager.cpp
index 23d1e29..0f7dc27 100644 (file)
@@ -20,6 +20,7 @@
 #include <istream>
 #include <thread>
 #include <map>
+#include <queue>
 #include <systemd/sd-event.h>
 #include <json-c/json.h>
 #include "policy_manager.hpp"
@@ -43,7 +44,6 @@ typedef std::vector<AreaState> AreaList;
 typedef struct LayoutState {
     std::string name;
     std::map<std::string, int> category_num;
-//    int category_num[stm::gStmCategoryNoNum];
     AreaList area_list;
     std::map<std::string, std::vector<std::string>> role_history;
 } LayoutState;
@@ -53,10 +53,17 @@ typedef struct LayerState {
     LayoutState layout_state;
 } LayerState;
 
+typedef struct EventInfo {
+    int event;
+    std::string role;
+    uint64_t delay;
+} EventInfo;
+
 struct sd_event* event_loop;
 std::map<int, struct sd_event_source*> event_source_list;
-std::map<int, std::string> g_event_info_list;
+std::map<int, std::string> g_req_role_list;
 PolicyManager::CallbackTable callback;
+std::queue<EventInfo> g_event_info_queue;
 
 std::unordered_map<std::string, LayerState> g_prv_layers;
 std::unordered_map<std::string, LayerState> g_crr_layers;
@@ -82,7 +89,7 @@ int PolicyManager::initialize() {
     int ret = 0;
 
     // Create convert map
-    for (unsigned int i=0; i<STM_NUM_EVT; i++) {
+    for (int i = stm::gStmEventNoMin; i <= stm::gStmEventNoMax; i++) {
         HMI_DEBUG("wm:pm", "event name:%s no:%d", stm::gStmEventName[i], stm::gStmEventNo[i]);
         this->eventname2no_[stm::gStmEventName[i]] = stm::gStmEventNo[i];
     }
@@ -92,7 +99,7 @@ int PolicyManager::initialize() {
         this->categoryname2no_[stm::gStmCategoryName[i]] = stm::gStmCategoryNo[i];
     }
 
-    for (unsigned int i=0; i<STM_NUM_ARA; i++) {
+    for (int i = stm::gStmAreaNoMin; i <= stm::gStmAreaNoMax; i++) {
         HMI_DEBUG("wm:pm", "area name:%s no:%d", stm::gStmAreaName[i], stm::gStmAreaNo[i]);
         this->areaname2no_[stm::gStmAreaName[i]] = stm::gStmAreaNo[i];
     }
@@ -196,8 +203,7 @@ static void addStateToJson(const char* layer_name, unsigned int changed,
     json_object_object_add(*json_out, "areas", json_areas);
 }
 
-
-static int checkPolicyEntry(int event, uint64_t delay_ms, const char* role);
+static int checkPolicyEntry(int event, uint64_t delay_ms, std::string role);
 static int checkPolicy(sd_event_source *source, void *data) {
     HMI_DEBUG("wm:pm", "Call");
     HMI_DEBUG("wm:pm", ">>>>>>>>>> START CHECK POLICY");
@@ -265,7 +271,7 @@ static int checkPolicy(sd_event_source *source, void *data) {
     // Store previous layers
     pm::g_prv_layers = pm::g_crr_layers;
 
-    std::string req_role = pm::g_event_info_list[event_data];
+    std::string req_role = pm::g_req_role_list[event_data];
     std::string req_evt = std::string(stm::gStmEventName[event_no]);
     std::string req_ctg = std::string(stm::gStmCategoryName[category_no]);
     std::string req_area = std::string(stm::gStmAreaName[area_no]);
@@ -572,11 +578,11 @@ static int checkPolicy(sd_event_source *source, void *data) {
     if (crr_state.car.is_changed) {
         if (stm::gStmCarStateNoRun == crr_state.car.state) {
             // Set delay event(restriction mode on)
-            checkPolicyEntry(STM_EVT_NO_RESTRICTION_MODE_ON, 3000, nullptr);
+            checkPolicyEntry(STM_EVT_NO_RESTRICTION_MODE_ON, 3000, "");
         }
         else if (stm::gStmCarStateNoStop == crr_state.car.state) {
             // Set event(restriction mode off)
-            checkPolicyEntry(STM_EVT_NO_RESTRICTION_MODE_OFF, 0, nullptr);
+            checkPolicyEntry(STM_EVT_NO_RESTRICTION_MODE_OFF, 0, "");
 
             // Stop timer for restriction on event
             if (pm::event_source_list.find(STM_EVT_NO_RESTRICTION_MODE_ON)
@@ -611,29 +617,26 @@ static int checkPolicy(sd_event_source *source, void *data) {
 }
 
 static int timerEvent(sd_event_source *source, uint64_t usec, void *data) {
+    HMI_DEBUG("wm:pm", "Call");
+
     int ret = checkPolicy(source, data);
     return ret;
-};
+}
 
-static int checkPolicyEntry(int event, uint64_t delay_ms, const char* role)
+static int checkPolicyEntry(int event, uint64_t delay_ms, std::string role)
 {
     HMI_DEBUG("wm:pm", "Call");
-    HMI_DEBUG("wm:pm", "event:0x%x", event);
+    HMI_DEBUG("wm:pm", "event:0x%x delay:%d role:%s", event, delay_ms, role.c_str());
 
-    // Store event info
-    if (nullptr == role) {
-        pm::g_event_info_list[event] = std::string("");
-    }
-    else {
-        pm::g_event_info_list[event] = std::string(role);
-    }
+    // Store requested role
+    pm::g_req_role_list[event] = role;
 
     if (0 == delay_ms) {
         int ret = sd_event_add_defer(pm::event_loop, NULL,
                                      &checkPolicy, new int(event));
         if (0 > ret) {
             HMI_ERROR("wm:pm", "Faild to sd_event_add_defer: errno:%d", ret);
-            pm::g_event_info_list.erase(event);
+            pm::g_req_role_list.erase(event);
             return -1;
         }
     }
@@ -653,7 +656,7 @@ static int checkPolicyEntry(int event, uint64_t delay_ms, const char* role)
                                     &timerEvent, new int(event));
         if (0 > ret) {
             HMI_ERROR("wm:pm", "Faild to sd_event_add_time: errno:%d", ret);
-            pm::g_event_info_list.erase(event);
+            pm::g_req_role_list.erase(event);
             return -1;
         }
 
@@ -665,11 +668,13 @@ static int checkPolicyEntry(int event, uint64_t delay_ms, const char* role)
 }
 
 void PolicyManager::registerCallback(CallbackTable callback) {
+    HMI_DEBUG("wm:pm", "Call");
+
     pm::callback.onStateTransitioned = callback.onStateTransitioned;
     pm::callback.onError             = callback.onError;
 }
 
-int PolicyManager::inputEvent(json_object* json_in) {
+int PolicyManager::setInputEventData(json_object* json_in) {
     HMI_DEBUG("wm:pm", "Call");
 
     // Check arguments
@@ -715,12 +720,47 @@ int PolicyManager::inputEvent(json_object* json_in) {
         HMI_DEBUG("wm:pm", "area(%s:%d)", area, area_no);
     }
 
-    // Check policy
-    checkPolicyEntry((event_no | category_no | area_no), 0, role);
+    // Set event info to the queue
+    pm::EventInfo event_info;
+    event_info.event = (event_no | category_no | area_no);
+    if (nullptr == role) {
+        event_info.role = std::string("");
+    }
+    else {
+        event_info.role = std::string(role);
+    }
+    event_info.delay = 0;
+    pm::g_event_info_queue.push(event_info);
 
     return 0;
 }
 
+int PolicyManager::executeStateTransition() {
+    HMI_DEBUG("wm:pm", "Call");
+
+    int ret;
+    pm::EventInfo event_info;
+
+    while (!pm::g_event_info_queue.empty()) {
+        // Get event info from queue and delete
+        event_info = pm::g_event_info_queue.front();
+        pm::g_event_info_queue.pop();
+
+        // Set event info for checking policy
+        ret = checkPolicyEntry(event_info.event, event_info.delay, event_info.role);
+    }
+    return ret;
+}
+
+void PolicyManager::undoState() {
+    HMI_DEBUG("wm:pm", "Call");
+
+    // Undo state of STM
+    stm::stmUndoState();
+
+    pm::g_crr_layers = pm::g_prv_layers;
+}
+
 extern const char* kDefaultRoleDb;
 int PolicyManager::loadRoleDb() {
     HMI_DEBUG("wm:pm", "Call");
@@ -940,13 +980,6 @@ int PolicyManager::loadLayoutDb() {
             HMI_DEBUG("wm:pm", ">>> >>> area    :%s", itr_area->name.c_str());
             HMI_DEBUG("wm:pm", ">>> >>> category:%s", itr_area->category.c_str());
             HMI_DEBUG("wm:pm", ">>> >>> role    :%s", itr_area->role.c_str());
-#if 0
-            for (auto itr_role = itr_area->second.begin();
-              itr_role != itr_area->second.end(); ++itr_role) {
-                HMI_DEBUG("wm:pm", ">>> >>> >>> attribute:%s, name:%s",
-                          itr_role->first.c_str(), itr_role->second.c_str());
-            }
-#endif
         }
     }