summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2018-12-06 10:05:47 -0500
committerScott Murray <scott.murray@konsulko.com>2018-12-07 09:15:24 -0500
commit24794d197e6d27fbfba9790be1da190fe573a058 (patch)
tree7d506a9a319fdf3823fab40c5e37825c60e69430 /src
parent6a20800629fca350b00ce71a09ba4d71e2f2ee1d (diff)
Add configuration file over-ride mechanism
Reusing the windowmanager on the cluster demo platform requires modifications to the layers.json, areas.db, 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. Bug-AGL: SPEC-1805 Change-Id: Ia3e1af0703794079f9537b934b124788129c045c Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Diffstat (limited to 'src')
-rw-r--r--src/layers.cpp16
-rw-r--r--src/util.cpp37
-rw-r--r--src/util.hpp12
-rw-r--r--src/window_manager.cpp28
-rw-r--r--src/window_manager.hpp5
5 files changed, 54 insertions, 44 deletions
diff --git a/src/layers.cpp b/src/layers.cpp
index bbe7c09..21d975d 100644
--- a/src/layers.cpp
+++ b/src/layers.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.
@@ -18,6 +19,7 @@
#include "layers.hpp"
#include "json_helper.hpp"
+#include "util.hpp"
#include "hmi-debug.h"
namespace wm
@@ -210,19 +212,7 @@ int layer_map::loadAreaDb()
{
HMI_DEBUG("wm:lm", "Call");
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("wm:lm", "afm_app_install_dir:%s", afm_app_install_dir);
-
- std::string file_name;
- if (!afm_app_install_dir)
- {
- HMI_ERROR("wm:lm", "AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/areas.db");
- }
+ std::string file_name(get_file_path("areas.db"));
// Load area.db
json_object *json_obj;
diff --git a/src/util.cpp b/src/util.cpp
index 672b089..e4cc2ef 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.
@@ -21,9 +22,12 @@
#include <cstdio>
#include <cstdlib>
#include <ctime>
+#include <fstream>
#include <unistd.h>
+#include "hmi-debug.h"
+
#ifdef SCOPE_TRACING
thread_local int ScopeTrace::indent = 0;
ScopeTrace::ScopeTrace(char const *func) : f(func)
@@ -93,3 +97,36 @@ void rectangle::set_aspect(double ratio)
}
}
+std::string get_file_path(const char *file_name, const char *log_category)
+{
+ char const *default_base_path = getenv("AFM_APP_INSTALL_DIR");
+ std::string path("");
+
+ if(!file_name) {
+ return path;
+ }
+
+ if (!default_base_path)
+ {
+ HMI_ERROR(log_category, "AFM_APP_INSTALL_DIR is not defined");
+ }
+ else
+ {
+ 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(log_category, "Using %s", path.c_str());
+ return path;
+}
diff --git a/src/util.hpp b/src/util.hpp
index 2f17845..8782353 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.
@@ -20,16 +21,10 @@
#include <functional>
#include <thread>
#include <vector>
+#include <string>
#include <sys/poll.h>
-#ifndef DO_NOT_USE_AFB
-extern "C"
-{
-#include <afb/afb-binding.h>
-};
-#endif
-
#define CONCAT_(X, Y) X##Y
#define CONCAT(X, Y) CONCAT_(X, Y)
@@ -163,4 +158,7 @@ class rectangle
long _bottom;
};
+// Configuration file path helper
+std::string get_file_path(const char *file_name, const char *log_category = "wm");
+
#endif // !WM_UTIL_HPP
diff --git a/src/window_manager.cpp b/src/window_manager.cpp
index 42930dc..e9cc53a 100644
--- a/src/window_manager.cpp
+++ b/src/window_manager.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.
@@ -19,6 +20,7 @@
#include "window_manager.hpp"
#include "json_helper.hpp"
+#include "util.hpp"
#include "applist.hpp"
extern "C"
@@ -123,17 +125,7 @@ WindowManager::WindowManager(wl::display *d)
id_alloc{},
pending_events(false)
{
- char const *path_layers_json = getenv("AFM_APP_INSTALL_DIR");
- std::string path;
- if (!path_layers_json)
- {
- HMI_ERROR("wm", "AFM_APP_INSTALL_DIR is not defined");
- path = std::string(path_layers_json);
- }
- else
- {
- path = std::string(path_layers_json) + std::string("/etc/layers.json");
- }
+ std::string path(get_file_path("layers.json"));
try
{
@@ -1371,19 +1363,7 @@ const char* WindowManager::convertRoleOldToNew(char const *old_role)
int WindowManager::loadOldRoleDb()
{
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("wm", "afm_app_install_dir:%s", afm_app_install_dir);
-
- std::string file_name;
- if (!afm_app_install_dir)
- {
- HMI_ERROR("wm", "AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/old_roles.db");
- }
+ std::string file_name(get_file_path("old_roles.db"));
// Load old_role.db
json_object* json_obj;
diff --git a/src/window_manager.hpp b/src/window_manager.hpp
index 6cbd355..967a87a 100644
--- a/src/window_manager.hpp
+++ b/src/window_manager.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.
@@ -29,6 +30,10 @@
#include "hmi-debug.h"
#include "request.hpp"
#include "wm_error.hpp"
+extern "C"
+{
+#include <afb/afb-binding.h>
+}
struct json_object;