aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2018-12-18 12:43:42 -0500
committerScott Murray <scott.murray@konsulko.com>2019-01-17 21:24:17 +0000
commita33cbe3e083318a4f48d44a645ee24447536e3a6 (patch)
treeb3603fa28b97b9ccd9989365747a107268cdcaa1
parent1d0966212b15c0481b506ba35374935601b0c861 (diff)
Reusing the windowmanager on the cluster demo platform requires modifications to the layers.json, areas.json, etc. configuration files. To allow this without breaking potential shared package feeds by building two versions, add a mechanism to allow over-riding the configuration files present in the widget with files in the directory /etc/xdg/windowmanager. Affected code has been refactored to use a new common configuration file path determination helper function to reduce duplication. Cherry-picked from flounder branch with rework to accommodate changes in master branch. Bug-AGL: SPEC-1805 Change-Id: Ib0014756fe684167950ddac534ea2363a1b6e7c3 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-rw-r--r--policy_manager/policy_manager.cpp30
-rw-r--r--src/util.cpp36
-rw-r--r--src/util.hpp4
-rw-r--r--src/wm_layer_control.cpp11
4 files changed, 49 insertions, 32 deletions
diff --git a/policy_manager/policy_manager.cpp b/policy_manager/policy_manager.cpp
index 1c6995b..90256bb 100644
--- a/policy_manager/policy_manager.cpp
+++ b/policy_manager/policy_manager.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018 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.
@@ -729,20 +730,7 @@ int PolicyManager::setStateTransitionProcessToSystemd(int event_id, uint64_t del
int PolicyManager::loadRoleDb()
{
- std::string file_name;
-
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("afm_app_install_dir:%s", afm_app_install_dir);
-
- if (!afm_app_install_dir)
- {
- HMI_ERROR("AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/roles.db");
- }
+ std::string file_name(get_file_path("roles.db"));
// Load roles.db
json_object *json_obj;
@@ -832,19 +820,7 @@ int PolicyManager::loadStateDb()
{
HMI_DEBUG("Call");
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("afm_app_install_dir:%s", afm_app_install_dir);
-
- std::string file_name;
- if (!afm_app_install_dir)
- {
- HMI_ERROR("AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/states.db");
- }
+ std::string file_name(get_file_path("states.db"));
// Load states.db
json_object *json_obj;
diff --git a/src/util.cpp b/src/util.cpp
index eb6425d..f26a4a1 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,5 +1,6 @@
/*
* 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.
@@ -20,6 +21,7 @@
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
+#include <fstream>
#include <unistd.h>
@@ -140,3 +142,37 @@ void _DUMP(enum LOG_LEVEL level, const char *log, ...)
va_end(args);
free(message);
}
+
+std::string get_file_path(const char *file_name, const char *root_path)
+{
+ char const *default_base_path = root_path;
+ std::string path("");
+
+ if(!file_name) {
+ return path;
+ }
+
+ if (!default_base_path) {
+ default_base_path = getenv("AFM_APP_INSTALL_DIR");
+ if (!default_base_path) {
+ HMI_ERROR("AFM_APP_INSTALL_DIR is not defined");
+ }
+ }
+ if (default_base_path) {
+ path = default_base_path;
+ path.append("/etc/");
+ path.append(file_name);
+ }
+
+ // Check for over-ride in /etc/xdg/windowmanager
+ std::string override_path("/etc/xdg/windowmanager/");
+ override_path.append(file_name);
+ std::ifstream i(override_path);
+ if (i.good()) {
+ path = override_path;
+ }
+ i.close();
+
+ HMI_INFO("Using %s", path.c_str());
+ return path;
+}
diff --git a/src/util.hpp b/src/util.hpp
index 65b29e0..36e556c 100644
--- a/src/util.hpp
+++ b/src/util.hpp
@@ -1,5 +1,6 @@
/*
* 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.
@@ -117,4 +118,7 @@ class rectangle
long _bottom;
};
+// Configuration file path helper
+std::string get_file_path(const char *file_name, const char *root_path = NULL);
+
#endif // !WM_UTIL_HPP
diff --git a/src/wm_layer_control.cpp b/src/wm_layer_control.cpp
index 17443de..6c9aa6c 100644
--- a/src/wm_layer_control.cpp
+++ b/src/wm_layer_control.cpp
@@ -1,5 +1,6 @@
/*
* 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.
@@ -21,8 +22,8 @@
#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"
@@ -58,8 +59,8 @@ static void layerCallback_static(t_ilm_layer layer,
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);
@@ -640,4 +641,4 @@ bool LayerControl::moveForeGround(const shared_ptr<WMClient> client)
return ret;
}
-} // namespace wm \ No newline at end of file
+} // namespace wm