Add remote display support
[apps/agl-service-windowmanager.git] / policy_manager / stm / stub / stm_inner.c
1 /*
2  * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
3  * Copyright (c) 2019 Konsulko Group
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include <string.h>
19 #include "stm.h"
20 #include "stm_inner.h"
21
22 static StmState g_stm_crr_state;
23 static StmState g_stm_prv_state;
24
25 void stmInitializeInner() {
26     // Initialize previous state
27     memset(&g_stm_prv_state, 0, sizeof(g_stm_prv_state));
28
29     // Initialize current state
30     g_stm_crr_state = g_stm_prv_state;
31 }
32
33 int stmTransitionStateInner(int event, StmState* state) {
34     int event_no, category_no, area_no;
35
36     event_no    = STM_GET_EVENT_FROM_ID(event);
37     category_no = STM_GET_CATEGORY_FROM_ID(event);
38     area_no     = STM_GET_AREA_FROM_ID(event);
39
40     // Backup previous state
41     g_stm_prv_state = g_stm_crr_state;
42
43     // -------------------------------------------------------
44     // There is no policy table by default.
45     // Therefore update each layers
46     // to draw the applications in requested area
47     // in accordance with inputed activate/deactivate events.
48     // -------------------------------------------------------
49     if (StmEvtNoActivate == event_no)
50     {
51         if (StmCtgNoHomescreen == category_no)
52         {
53             g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoHms;
54             g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
55
56             // For AGL JIRA SPEC-1407
57             // Apps layer is invisibled only when Homescreen app is started already
58             if (StmLayoutNoHms == g_stm_prv_state.layer[StmLayerNoHomescreen].state)
59             {
60                 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
61                 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
62             }
63         }
64         else if (StmCtgNoDebug == category_no)
65         {
66             if (StmAreaNoNormal == area_no)
67             {
68                 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgNml;
69             }
70             else if (StmAreaNoSplitMain == area_no)
71             {
72                 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplMain;
73             }
74             else if (StmAreaNoSplitSub == area_no)
75             {
76                 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplSub;
77             }
78             else if (StmAreaNoFullscreen == area_no)
79             {
80                 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgFll;
81             }
82             g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
83         }
84         else if (StmCtgNoSoftwareKeyboard == category_no)
85         {
86             g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoSftKbd;
87             g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE;
88         }
89         else if (StmCtgNoPopUp == category_no)
90         {
91             g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoPopUp;
92             g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
93         }
94         else if (StmCtgNoSystemAlert == category_no)
95         {
96             g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt;
97             g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
98         }
99         else if (StmCtgNoRemote == category_no)
100         {
101             g_stm_crr_state.layer[StmLayerNoRemoteApps].state = StmLayoutNoRmtFll;
102             g_stm_crr_state.layer[StmLayerNoRemoteApps].changed = STM_TRUE;
103         }
104     }
105     else if (StmEvtNoDeactivate == event_no)
106     {
107         if (StmCtgNoHomescreen == category_no)
108         {
109             g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoNone;
110             g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
111         }
112         else if (StmCtgNoDebug == category_no)
113         {
114             if ((StmLayoutNoDbgNml     == g_stm_prv_state.layer[StmLayerNoApps].state) ||
115                 (StmLayoutNoDbgSplMain == g_stm_prv_state.layer[StmLayerNoApps].state) ||
116                 (StmLayoutNoDbgSplSub  == g_stm_prv_state.layer[StmLayerNoApps].state) ||
117                 (StmLayoutNoDbgFll     == g_stm_prv_state.layer[StmLayerNoApps].state))
118             {
119                 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
120                 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
121             }
122         }
123         else if (StmCtgNoSoftwareKeyboard == category_no)
124         {
125             if (StmLayoutNoSftKbd == g_stm_prv_state.layer[StmLayerNoNearHomescreen].state )
126             {
127                 g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoNone;
128                 g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE;
129             }
130         }
131         else if (StmCtgNoPopUp == category_no)
132         {
133             if (StmLayoutNoPopUp == g_stm_prv_state.layer[StmLayerNoOnScreen].state )
134             {
135                 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
136                 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
137             }
138         }
139         else if (StmCtgNoSystemAlert == category_no)
140         {
141             if (StmLayoutNoSysAlt == g_stm_prv_state.layer[StmLayerNoOnScreen].state )
142             {
143                 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
144                 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
145             }
146         }
147         else if (StmCtgNoRemote == category_no)
148         {
149             if (StmLayoutNoRmtFll == g_stm_prv_state.layer[StmLayerNoRemoteApps].state )
150             {
151                 g_stm_crr_state.layer[StmLayerNoRemoteApps].state = StmLayoutNoNone;
152                 g_stm_crr_state.layer[StmLayerNoRemoteApps].changed = STM_TRUE;
153             }
154         }
155     }
156
157     // Copy current state for return
158     memcpy(state, &g_stm_crr_state, sizeof(g_stm_crr_state));
159
160     return 0;
161 }
162
163 void stmUndoStateInner() {
164     g_stm_crr_state = g_stm_prv_state;
165 }