2 * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
3 * Copyright (c) 2019 Konsulko Group
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include "stm_inner.h"
22 static StmState g_stm_crr_state;
23 static StmState g_stm_prv_state;
25 void stmInitializeInner() {
26 // Initialize previous state
27 memset(&g_stm_prv_state, 0, sizeof(g_stm_prv_state));
29 // Initialize current state
30 g_stm_crr_state = g_stm_prv_state;
33 int stmTransitionStateInner(int event, StmState* state) {
34 int event_no, category_no, area_no;
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);
40 // Backup previous state
41 g_stm_prv_state = g_stm_crr_state;
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)
51 if (StmCtgNoHomescreen == category_no)
53 g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoHms;
54 g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
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)
60 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
61 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
64 else if (StmCtgNoDebug == category_no)
66 if (StmAreaNoNormal == area_no)
68 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgNml;
70 else if (StmAreaNoSplitMain == area_no)
72 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplMain;
74 else if (StmAreaNoSplitSub == area_no)
76 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgSplSub;
78 else if (StmAreaNoFullscreen == area_no)
80 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoDbgFll;
82 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
84 else if (StmCtgNoSoftwareKeyboard == category_no)
86 g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoSftKbd;
87 g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE;
89 else if (StmCtgNoPopUp == category_no)
91 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoPopUp;
92 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
94 else if (StmCtgNoSystemAlert == category_no)
96 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt;
97 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
99 else if (StmCtgNoRemote == category_no)
101 g_stm_crr_state.layer[StmLayerNoRemoteApps].state = StmLayoutNoRmtFll;
102 g_stm_crr_state.layer[StmLayerNoRemoteApps].changed = STM_TRUE;
105 else if (StmEvtNoDeactivate == event_no)
107 if (StmCtgNoHomescreen == category_no)
109 g_stm_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoNone;
110 g_stm_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
112 else if (StmCtgNoDebug == category_no)
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))
119 g_stm_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
120 g_stm_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
123 else if (StmCtgNoSoftwareKeyboard == category_no)
125 if (StmLayoutNoSftKbd == g_stm_prv_state.layer[StmLayerNoNearHomescreen].state )
127 g_stm_crr_state.layer[StmLayerNoNearHomescreen].state = StmLayoutNoNone;
128 g_stm_crr_state.layer[StmLayerNoNearHomescreen].changed = STM_TRUE;
131 else if (StmCtgNoPopUp == category_no)
133 if (StmLayoutNoPopUp == g_stm_prv_state.layer[StmLayerNoOnScreen].state )
135 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
136 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
139 else if (StmCtgNoSystemAlert == category_no)
141 if (StmLayoutNoSysAlt == g_stm_prv_state.layer[StmLayerNoOnScreen].state )
143 g_stm_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
144 g_stm_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
147 else if (StmCtgNoRemote == category_no)
149 if (StmLayoutNoRmtFll == g_stm_prv_state.layer[StmLayerNoRemoteApps].state )
151 g_stm_crr_state.layer[StmLayerNoRemoteApps].state = StmLayoutNoNone;
152 g_stm_crr_state.layer[StmLayerNoRemoteApps].changed = STM_TRUE;
157 // Copy current state for return
158 memcpy(state, &g_stm_crr_state, sizeof(g_stm_crr_state));
163 void stmUndoStateInner() {
164 g_stm_crr_state = g_stm_prv_state;