X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=apps%2Fagl-service-windowmanager-2017.git;a=blobdiff_plain;f=src%2Fpm_wrapper.cpp;fp=src%2Fpm_wrapper.cpp;h=0000000000000000000000000000000000000000;hp=1454bf9cb51860cf29ff7f6838bb6a8180e91474;hb=c6f9a9b8468b3746a3dec7ee2a0b7d84ec9fb44a;hpb=e4222ca8da3b02afca5625fa2cef6832aa8ce90e diff --git a/src/pm_wrapper.cpp b/src/pm_wrapper.cpp deleted file mode 100644 index 1454bf9..0000000 --- a/src/pm_wrapper.cpp +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2018 TOYOTA MOTOR CORPORATION - * - * 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. - */ - -#include "pm_wrapper.hpp" -#include "json_helper.hpp" -#include "hmi-debug.h" - -namespace wm -{ - -static PMWrapper *g_context; - -namespace -{ - -static void onStateTransitioned(json_object *json_out) -{ - g_context->updateStates(json_out); -} - -static void onError(json_object *json_out) -{ - HMI_DEBUG("wm", "error message from PolicyManager:%s", - json_object_get_string(json_out)); - - g_context->processError(); -} - -} // namespace - -PMWrapper::PMWrapper() {} - -int PMWrapper::initialize() -{ - int ret = 0; - - ret = this->pm.initialize(); - if (0 > ret) - { - HMI_ERROR("wm:pmw", "Faild to initialize PolicyManager"); - } - - g_context = this; - - return ret; -} - -void PMWrapper::registerCallback(StateTransitionHandler on_state_transitioned, - ErrorHandler on_error) -{ - this->on_state_transitioned = on_state_transitioned; - this->on_error = on_error; - - PolicyManager::CallbackTable my_callback; - my_callback.onStateTransitioned = onStateTransitioned; - my_callback.onError = onError; - this->pm.registerCallback(my_callback); -} - -int PMWrapper::setInputEventData(Task task, std::string role, std::string area) -{ - const char* event; - if (Task::TASK_ALLOCATE == task) - { - event = "activate"; - } - else if (Task::TASK_RELEASE == task) - { - event = "deactivate"; - } - else - { - event = ""; - } - - json_object *json_in = json_object_new_object(); - json_object_object_add(json_in, "event", json_object_new_string(event)); - json_object_object_add(json_in, "role", json_object_new_string(role.c_str())); - json_object_object_add(json_in, "area", json_object_new_string(area.c_str())); - - int ret; - ret = this->pm.setInputEventData(json_in); - if (0 > ret) - { - HMI_ERROR("wm:pmw", "Faild to set input event data to PolicyManager"); - } - json_object_put(json_in); - - return ret; -} - -int PMWrapper::executeStateTransition() -{ - int ret; - ret = this->pm.executeStateTransition(); - if (0 > ret) - { - HMI_ERROR("wm:pmw", "Failed to execute state transition for PolicyManager"); - } - - return ret; -} - -void PMWrapper::undoState() -{ - this->pm.undoState(); - - this->crrlayer2rolestate = this->prvlayer2rolestate; -} - -void PMWrapper::updateStates(json_object *json_out) -{ - std::vector actions; - - HMI_DEBUG("wm", "json_out dump:%s", json_object_get_string(json_out)); - - this->createLayoutChangeAction(json_out, actions); - - this->on_state_transitioned(actions); -} - -void PMWrapper::createLayoutChangeAction(json_object *json_out, std::vector &actions) -{ - // Get displayed roles from previous layout - json_object *json_layers; - if (!json_object_object_get_ex(json_out, "layers", &json_layers)) - { - HMI_DEBUG("wm", "Not found key \"layers\""); - return; - } - - int len = json_object_array_length(json_layers); - HMI_DEBUG("wm", "json_layers len:%d", len); - - for (int i = 0; i < len; i++) - { - json_object *json_tmp = json_object_array_get_idx(json_layers, i); - - std::string layer_name = jh::getStringFromJson(json_tmp, "name"); - json_bool changed = jh::getBoolFromJson(json_tmp, "changed"); - HMI_DEBUG("wm", "layer:%s changed:%d", layer_name.c_str(), changed); - - if (changed) - { - json_object *json_areas; - if (!json_object_object_get_ex(json_tmp, "areas", &json_areas)) - { - HMI_DEBUG("wm", "Not found key \"areas\""); - return; - } - - int len = json_object_array_length(json_areas); - HMI_DEBUG("wm", "json_layers len:%d", len); - - // Store previous role state in this layer - this->prvlayer2rolestate[layer_name] = this->crrlayer2rolestate[layer_name]; - - RoleState crr_roles; - RoleState prv_roles = this->prvlayer2rolestate[layer_name]; - for (int j = 0; j < len; j++) - { - json_object *json_tmp2 = json_object_array_get_idx(json_areas, j); - - std::string area_name = jh::getStringFromJson(json_tmp2, "name"); - std::string role_name = jh::getStringFromJson(json_tmp2, "role"); - - crr_roles[role_name] = area_name; - - auto i_prv = prv_roles.find(role_name); - HMI_DEBUG("wm", "current role:%s area:%s", - role_name.c_str(), area_name.c_str()); - - // If current role does not exist in previous - if (prv_roles.end() == i_prv) - { - HMI_DEBUG("wm", "current role does not exist in previous"); - - // Set activate action - bool end_draw_finished = false; - WMAction act - { - "", - role_name, - area_name, - TaskVisible::VISIBLE, - end_draw_finished - }; - actions.push_back(act); - } - else - { - HMI_DEBUG("wm", "previous role:%s area:%s", - i_prv->first.c_str(), i_prv->second.c_str()); - - // If current role exists in previous and area is different with previous - if (area_name != i_prv->second) - { - HMI_DEBUG("wm", "current role exists in previous and area is different with previous"); - - // Set activate action - bool end_draw_finished = false; - WMAction act - { - "", - role_name, - area_name, - TaskVisible::VISIBLE, - end_draw_finished - }; - actions.push_back(act); - } - - // Remove role which exist in current list from previous list - prv_roles.erase(i_prv); - } - } - - // Deactivate roles which remains in previous list - // because these are not displayed in current layout - for (auto i_prv : prv_roles) - { - HMI_DEBUG("wm", "Deactivate role:%s", i_prv.first.c_str()); - - // Set deactivate action - bool end_draw_finished = true; - WMAction act - { - "", - i_prv.first, - "", - TaskVisible::INVISIBLE, - end_draw_finished - }; - actions.push_back(act); - } - - // Update previous role list - this->crrlayer2rolestate[layer_name] = crr_roles; - } - } -} - -void PMWrapper::processError() -{ - this->on_error(); -} - -} // namespace wm