diff options
author | Yuta Doi <yuta-d@witz-inc.co.jp> | 2018-07-09 17:23:31 +0900 |
---|---|---|
committer | Yuta Doi <yuta-d@witz-inc.co.jp> | 2018-07-12 09:24:56 +0900 |
commit | 99b6f4d2fcd421d3a760a88a67e511fb6fc98068 (patch) | |
tree | 12c17f502e37b6742ead94e2d5bba07822300328 /src/pm_wrapper.hpp | |
parent | 8ab10aaafc6fb3dc7bbad755dce9b4bdaa41f287 (diff) |
Add PolicyManager as plugin
PolicyManager decides next layout by using occured event and current state
based on the policy table.
And PolicyManager is plugin for WindowManager.
Therefore the OEMs can replace it.
This patch provides PolicyManager I/F as reference implementation
and does not have policy table.
Therefore PolicyManager updates each layers
to draw the applications in normal.full area
in accordance with just like activate/deactivate request.
[APIs of PolicyManager class]
- int initialize(void)
Initialize PolicyManger.
input: none
output: 0(success), -1(error)
- void registerCallback(CallbackTable callback_table)
Register callback functions.
input: the pointers of callback handlers
output: none
"CallbackTable" type is as follows:
typedef struct
{
Handler onStateTransitioned;
Handler onError;
} CallbackTable;
"Handler" type is as follows:
using Handler = std::function<void(json_object *)>;
- int setInputEventData(json_object *json_in)
Set input event data for the policy table.
input: input event data as json_object
output: 0(success), -1(error)
- int executeStateTransition(void)
Execute state transition by using set input event data.
input: none
output: 0(success), -1(error)
- void undoState(void)
Undo state only once per once state transition.
input: none
output: none
[Callbacks of PolicyManager class]
- void onStateTransitioned(json_object *json_out)
When state transition succeeds, this callback is called.
The argument json_out has the state after transition.
- void onError(json_object *json_out)
When state transition fails, this callback is called.
The argument json_out has the error information
like message, inputed event datas and etc..
Bug-AGL: SPEC-1537
Change-Id: I44b771d4145078bf3ea05e26165bb9c1a03b10c3
Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
Diffstat (limited to 'src/pm_wrapper.hpp')
-rw-r--r-- | src/pm_wrapper.hpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/pm_wrapper.hpp b/src/pm_wrapper.hpp new file mode 100644 index 0000000..31ec002 --- /dev/null +++ b/src/pm_wrapper.hpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2018 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. + */ + +#ifndef TMCAGLWM_PM_WRAPPER_HPP +#define TMCAGLWM_PM_WRAPPER_HPP + +#include <functional> +#include <vector> +#include <string> +#include <map> +#include "policy_manager.hpp" +#include "request.hpp" + +struct json_object; +struct sd_event; +struct sd_event_source; +struct StmState; + +namespace wm +{ + +class PMWrapper +{ + public: + explicit PMWrapper(); + ~PMWrapper() = default; + + using StateTransitionHandler = std::function<void(std::vector<WMAction>)>; + using ErrorHandler = std::function<void(void)>; + + int initialize(); + void registerCallback(StateTransitionHandler on_state_transitioned, + ErrorHandler on_error); + int setInputEventData(Task task, std::string role, std::string area); + int executeStateTransition(); + void undoState(); + + // Do not use these functions + void updateStates(json_object *json_out); + void processError(); + + private: + // Disable copy and move + PMWrapper(PMWrapper const &) = delete; + PMWrapper &operator=(PMWrapper const &) = delete; + PMWrapper(PMWrapper &&) = delete; + PMWrapper &operator=(PMWrapper &&) = delete; + + typedef std::map<std::string, std::string> RoleState; + + PolicyManager pm; + StateTransitionHandler on_state_transitioned; + ErrorHandler on_error; + std::map<std::string, RoleState> prvlayer2rolestate; + std::map<std::string, RoleState> crrlayer2rolestate; + + void createLayoutChangeAction(json_object *json_out, std::vector<WMAction> &actions); +}; + +} // namespace wm + +#endif // TMCAGLWM_PM_WRAPPER_HPP |