/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "request.hpp"
#include "json_helper.hpp"
-#define LC_AREA_PATH "/etc/areas.json"
-#define LC_LAYER_SETTING_PATH "/etc/layers.json"
+#define LC_AREA_FILE "areas.json"
+#define LC_LAYER_SETTING_FILE "layers.json"
#define LC_DEFAULT_AREA "fullscreen"
#define BACK_GROUND_LAYER "BackGroundLayer"
LayerControl::LayerControl(const std::string& root)
{
- string area_path = root + LC_AREA_PATH;
- string layer_path= root + LC_LAYER_SETTING_PATH;
+ string area_path(get_file_path(LC_AREA_FILE, root.c_str()));
+ string layer_path(get_file_path(LC_LAYER_SETTING_FILE, root.c_str()));
// load layers.setting.json
WMError ret = this->loadLayerSetting(layer_path);
assert(ret == WMError::SUCCESS);
WMError LayerControl::loadLayerSetting(const string &path)
{
- HMI_DEBUG("loading WMLayer(Application Containers) Setting from %s", path);
+ HMI_DEBUG("loading WMLayer(Application Containers) Setting from %s", path.c_str());
json_object *json_obj, *json_cfg;
int ret = jh::inputJsonFilie(path.c_str(), &json_obj);
unsigned surface = action.client->surfaceID();
auto rect = this->getAreaSize(action.area);
- HMI_DEBUG("Set layout %d, %d, %d, %d",rect.x, rect.y, rect.w, rect.h);
- ilm_commitChanges();
+ HMI_SEQ_INFO(action.req_num, "Set layout %d, %d, %d, %d",rect.x, rect.y, rect.w, rect.h);
+
+ // Sometimes, ivi_wm_surface_size signal doesn't reach window manager,
+ // then, Window Manager set set source size = 0.
+ if(!action.client->isSourceSizeSet())
+ {
+ ilmSurfaceProperties sp;
+ if (ILM_SUCCESS != ilm_getPropertiesOfSurface(surface, &sp))
+ return WMError::FAIL;
+
+ if (sp.origSourceHeight != sp.sourceHeight ||
+ sp.origSourceWidth != sp.sourceWidth)
+ {
+ HMI_SEQ_NOTICE(action.req_num, "set source size w:%d h%d", sp.origSourceWidth, sp.origSourceHeight);
+ ilm_surfaceSetSourceRectangle(surface, 0, 0, sp.origSourceWidth, sp.origSourceHeight);
+ ilm_commitChanges();
+ action.client->setSurfaceSizeCorrectly();
+ }
+ }
+
ilm_surfaceSetDestinationRectangle(surface, rect.x, rect.y, rect.w, rect.h);
ilm_commitChanges();
+ action.client->setArea(action.area);
for(auto &wm_layer: this->wm_layers)
{
// Store the state who is assigned to the area
return ret;
}
+WMError LayerControl::updateAreaList(const ChangeAreaReq& req)
+{
+ // error check
+ for(const auto& elem : req.area_req)
+ {
+ if(this->area2size.find(elem.first) == this->area2size.end())
+ {
+ HMI_ERROR("requested area %s is not registered in area list", elem.first.c_str());
+ return WMError::NOT_REGISTERED;
+ }
+ }
+ // update list
+ for(const auto& elem : req.area_req)
+ {
+ this->area2size[elem.first] = elem.second;
+ }
+ if(req.save)
+ {
+ HMI_NOTICE("Not implemented");
+ // TODO
+ }
+ return WMError::SUCCESS;
+}
+
+WMError LayerControl::getUpdateAreaList(ChangeAreaReq *req)
+{
+ for(const auto& wm_layer : this->wm_layers)
+ {
+ // get area name and compare it with elem
+ for(const auto& area : req->area_req)
+ {
+ string app = wm_layer->attachedApp(area.first);
+ if(!app.empty())
+ {
+ HMI_INFO("app %s changes area %s", app.c_str(), area.first.c_str());
+ req->update_app2area[app] = area.first;
+ }
+ }
+ }
+ return WMError::SUCCESS;
+}
+
void LayerControl::appTerminated(const shared_ptr<WMClient> client)
{
for(auto& l : this->wm_layers)
return ret;
}
-} // namespace wm
\ No newline at end of file
+} // namespace wm