2 * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 const char* kStmEventName[] = {
24 "restriction_mode_off",
25 "restriction_mode_1_on",
26 "restriction_mode_2_on",
30 const char* kStmCategoryName[] = {
43 const char* kStmAreaName[] = {
51 "restriction.split.main",
52 "restriction.split.sub",
56 const char* kStmLayoutName[] = {
68 "restriction.split.main",
69 "restriction.split.sub",
74 const char* kStmLayerName[] = {
82 const char* kStmModeName[] = {
92 const char* kStmRestrictionModeStateName[] = {
98 const char** kStmModeStateNameList[] = {
99 kStmRestrictionModeStateName,
102 static StmState g_crr_state;
103 static StmState g_prv_state;
105 void stmInitialize() {
106 // Initialize previous state
107 memset(&g_prv_state, 0, sizeof(g_prv_state));
109 // Initialize current state
110 g_crr_state = g_prv_state;
113 int stmTransitionState(int event, StmState* state) {
114 int event_no, category_no;
116 event_no = STM_GET_EVENT_FROM_ID(event);
117 category_no = STM_GET_CATEGORY_FROM_ID(event);
119 // Backup previous state
120 g_prv_state = g_crr_state;
122 // Clear current state
123 memset(&g_prv_state, 0, sizeof(g_prv_state));
125 // -------------------------------------------------------
126 // There is no policy table by default.
127 // Therefore update each layers
128 // to draw the applications in normal.full area
129 // in accordance with inputed activate/deactivate events.
130 // -------------------------------------------------------
131 if (StmEvtNoActivate == event_no)
133 if (StmCtgNoHomescreen == category_no)
135 g_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoHms;
136 g_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
138 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
139 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
141 else if (StmCtgNoMap == category_no)
143 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoMapNml;
144 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
146 else if (StmCtgNoGeneral == category_no)
148 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoGenNml;
149 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
151 else if (StmCtgNoSystem == category_no)
153 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoSysNml;
154 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
156 else if (StmCtgNoSplitable == category_no)
158 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoSplNml;
159 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
161 else if (StmCtgNoPopUp == category_no)
163 g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoPopUp;
164 g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
166 else if (StmCtgNoSystemAlert == category_no)
168 g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoSysAlt;
169 g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
172 else if (StmEvtNoDeactivate == event_no)
174 if (StmCtgNoHomescreen == category_no)
176 g_crr_state.layer[StmLayerNoHomescreen].state = StmLayoutNoNone;
177 g_crr_state.layer[StmLayerNoHomescreen].changed = STM_TRUE;
179 else if (StmCtgNoMap == category_no)
181 if (StmLayoutNoMapNml == g_prv_state.layer[StmLayerNoApps].state )
183 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
184 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
187 else if (StmCtgNoGeneral == category_no)
189 if (StmLayoutNoGenNml == g_prv_state.layer[StmLayerNoApps].state )
191 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
192 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
195 else if (StmCtgNoSystem == category_no)
197 if (StmLayoutNoSysNml == g_prv_state.layer[StmLayerNoApps].state )
199 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
200 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
203 else if (StmCtgNoSplitable == category_no)
205 if (StmLayoutNoSplNml == g_prv_state.layer[StmLayerNoApps].state )
207 g_crr_state.layer[StmLayerNoApps].state = StmLayoutNoNone;
208 g_crr_state.layer[StmLayerNoApps].changed = STM_TRUE;
211 else if (StmCtgNoPopUp == category_no)
213 if (StmLayoutNoPopUp == g_prv_state.layer[StmLayerNoOnScreen].state )
215 g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
216 g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
219 else if (StmCtgNoSystemAlert == category_no)
221 if (StmLayoutNoSysAlt == g_prv_state.layer[StmLayerNoOnScreen].state )
223 g_crr_state.layer[StmLayerNoOnScreen].state = StmLayoutNoNone;
224 g_crr_state.layer[StmLayerNoOnScreen].changed = STM_TRUE;
229 // Copy current state for return
230 memcpy(state, &g_crr_state, sizeof(g_crr_state));
235 void stmUndoState() {
236 g_crr_state = g_prv_state;