+}
+
+/**
+ * screenUpdated event handler
+ *
+ * #### Parameters
+ * - obj : screenUpdate object
+ *
+ * #### Return
+ * None
+ *
+ */
+void HS_AppRecover::screenUpdated(struct json_object *obj)
+{
+ std::set<std::string> s_mode;
+ struct json_object *ids_obj;
+ if(json_object_object_get_ex(obj, key_ids.c_str(), &ids_obj)) {
+ if(json_object_get_type(ids_obj) == json_type_array) {
+ int array_len = json_object_array_length(ids_obj);
+ for (int i = 0; i < array_len; ++i) {
+ struct json_object *j_id = json_object_array_get_idx(ids_obj, i);
+ std::string appid = json_object_get_string(j_id);
+ if(!isHomescreenApp(appid)) {
+ s_mode.insert(appid);
+ }
+ }
+ if(!s_mode.empty()) {
+ updateLastmode(s_mode);
+ }
+ }
+ else {
+ AFB_WARNING("screenUpdated list isn't array.");
+ }
+ }
+}
+
+/**
+ * update lastmode file
+ *
+ * #### Parameters
+ * - set : new lastmode set
+ *
+ * #### Return
+ * None
+ *
+ */
+void HS_AppRecover::updateLastmode(std::set<std::string> &set)
+{
+ if(set.size() == m_lastmode_list.size()) {
+ bool is_same = true;
+ for(auto &m : set) {
+ auto it = m_lastmode_list.find(m);
+ if(it == m_lastmode_list.end()) {
+ is_same = false;
+ break;
+ }
+ }
+ if(is_same) { // lastmode aren't changed
+ return;
+ }
+ }
+
+ m_lastmode_list.swap(set);
+ struct json_object *arr_obj = json_object_new_array();
+ for(auto &it : m_lastmode_list) {
+ struct json_object *j_obj = json_object_new_object();
+ json_object_object_add(j_obj, HS_Config::key_appid.c_str(), json_object_new_string(it.c_str()));
+ json_object_object_add(j_obj, HS_Config::key_visibility.c_str(), json_object_new_string("visible"));
+ json_object_array_add(arr_obj, j_obj);
+ }
+
+ auto path = HS_Config::root_dir + "/etc/" + HS_Config::lastmode_json;
+ if(writeJsonFile(path.c_str(), arr_obj) < 0) {
+ AFB_ERROR("write lastmode error.");
+ }
+}