2 * Copyright (c) 2019 TOYOTA MOTOR CORPORATION
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "hs-config.h"
20 const std::array<std::string, 3> HS_Config::keys_recover_type = { // based on hs-conf.json
25 const std::string HS_Config::lastmode_json = "lastmode.json";
26 const std::string HS_Config::key_appid = "appid";
27 const std::string HS_Config::key_visibility = "visibility";
28 std::string HS_Config::root_dir = "";
31 * read configuration file to memory
40 int HS_Config::readConfig(void)
42 root_dir = std::string(getenv("AFM_APP_INSTALL_DIR"));
43 auto path = root_dir + "/etc/" + hs_conf_json;
44 if(readJsonFile(path.c_str(), &m_hs_conf) < 0) {
45 AFB_ERROR("read %s failed.", hs_conf_json.c_str());
49 path = root_dir + "/etc/" + lastmode_json;
50 if(readJsonFile(path.c_str(), &m_lastmode) < 0) {
51 AFB_ERROR("read %s failed.", lastmode_json.c_str());
59 * parse configuration file contents
69 int HS_Config::parseConfig(void)
71 struct json_object *handshake_obj, *times_obj, *sleep_obj;
72 if(json_object_object_get_ex(m_hs_conf, key_handshake.c_str(), &handshake_obj)
73 && json_object_object_get_ex(handshake_obj, key_times.c_str(), ×_obj)
74 && json_object_object_get_ex(handshake_obj, key_sleep.c_str(), &sleep_obj)) {
75 m_handshake_info.times = json_object_get_int(times_obj);
76 m_handshake_info.sleep = json_object_get_int(sleep_obj);
79 AFB_WARNING("get handshake info error, use default value.");
82 struct json_object *recover_obj;
83 if(json_object_object_get_ex(m_hs_conf, key_recover.c_str(), &recover_obj)) {
84 for(auto &m : keys_recover_type) {
85 struct json_object *obj;
86 if(json_object_object_get_ex(recover_obj, m.c_str(), &obj)) {
87 if(json_object_get_type(obj) != json_type_array ) {
90 m_recover_map[m] = std::move(getRecoverAppInfo(obj));
94 if(m_recover_map.empty()) {
95 AFB_ERROR("get homescreen recover list failed.");
100 AFB_ERROR("get homescreen recover object failed.");
104 if(json_object_get_type(m_lastmode) == json_type_array ) {
105 struct std::vector<recover_app_info> v_lastmode = std::move(getRecoverAppInfo(m_lastmode));
106 if(!v_lastmode.empty()) { // got saving lastmode isn't null, instead of default lastmode
107 m_recover_map[keys_recover_type[1]] = std::move(v_lastmode);
115 * get recover application information
119 * - obj : application information
122 * recover_app_info vector
125 std::vector<struct recover_app_info> HS_Config::getRecoverAppInfo(struct json_object *obj)
127 int array_len = json_object_array_length(obj);
128 std::vector<struct recover_app_info> v_app_info;
129 for (int i = 0; i < array_len; ++i) {
130 struct json_object *info_obj = json_object_array_get_idx(obj, i);
131 struct recover_app_info info;
132 struct json_object *value_obj;
133 if(json_object_object_get_ex(info_obj, key_appid.c_str(), &value_obj)) {
134 info.appid = json_object_get_string(value_obj);
137 AFB_ERROR("recover infomation doesn't include appid.");
141 if(json_object_object_get_ex(info_obj, key_visibility.c_str(), &value_obj)) {
142 std::string visibility = json_object_get_string(value_obj);
143 info.visibility = (visibility == "visible") ? true:false;
146 info.visibility = false;
148 v_app_info.push_back(info);