/* * Copyright (c) 2019 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "hs-apprecover.h" #include "hs-appinfo.h" #include "hs-proxy.h" #include "hs-clientmanager.h" HS_AppRecover* HS_AppRecover::me = nullptr; /** * screen_update event handler * * #### Parameters * - api : the api * - event : received event name * - object : received json object * * #### Return * 0 : event can transfer to others * 1 : event not transfer to others */ int on_screen_update_event(afb_api_t api, const char *event, struct json_object *object) { return 0; } /** * get instance * * #### Parameters * - Nothing * * #### Return * HS_AppRecover instance pointer * */ HS_AppRecover* HS_AppRecover::instance(void) { if(me == nullptr) me = new HS_AppRecover(); return me; } /** * HS_AppRecover initialize function * * #### Parameters * - api : the api serving the request * * #### Return * 0 : init success * 1 : init fail * */ int HS_AppRecover::init(afb_api_t api) { HS_WmProxy wm_proxy; wm_proxy.subscribe(api, HS_WmProxy::Event_ScreenUpdated); setEventHook("windowmanager/screenUpdated", on_screen_update_event); return 0; } /** * starting recover applications * * #### Parameters * - api : the api * - map : recover app map * * #### Return * None * */ void HS_AppRecover::startRecovery(afb_api_t api, recover_map &map) { HS_AfmMainProxy afm_proxy; for(auto &key : HS_Config::keys_recover_type) { for(auto &m : map[key]){ struct app_recover_info recover_info; recover_info.recover_type = key; recover_info.visibility = m.visibility; m_recover_apps_list[m.appid] = std::move(recover_info); // recover application m_recovering_set.insert(m.appid); afm_proxy.start(api, HS_AppInfo::instance()->getAppProperty(m.appid, _keyId)); } } } /** * register started applications * * #### Parameters * - appid : application id liked "dashboard" * * #### Return * false : not all application recovered * true : all applications recovered */ bool HS_AppRecover::registerRecoveredApp(std::string &appid) { auto it = m_recovering_set.find(appid); if(it != m_recovering_set.end()) { m_recovering_set.erase(appid); auto ip = m_recover_apps_list.find(appid); if(ip != m_recover_apps_list.end() && ip->second.visibility) { HS_ClientManager::instance()->pushEvent("showWindow", nullptr, appid); } } return m_recovering_set.empty() ? true : false; }