Bug fix: Always changed flag becomes true when restriction mode is changed
[apps/agl-service-windowmanager.git] / src / policy_manager / zipc / dummy_stm.c
index 50efaf3..0b2120a 100644 (file)
@@ -3,7 +3,6 @@
 #include "hmi-debug.h"
 
 const char* gStmEventName[] = {
-    "none",
     "activate",
     "deactivate",
     "trans_gear_neutral",
@@ -22,7 +21,6 @@ const char* gStmEventName[] = {
 };
 
 const int gStmEventNo[] = {
-    STM_EVT_NO_NONE,
     STM_EVT_NO_ACTIVATE,
     STM_EVT_NO_DEACTIVATE,
     STM_EVT_NO_TRANS_GEAR_N,
@@ -41,19 +39,17 @@ const int gStmEventNo[] = {
 };
 
 const char* gStmCategoryName[] = {
-    "none",
     "homescreen",
     "map",
     "general",
     "splitable",
-    "popup",
+    "pop_up",
     "system_alert",
     "restriction",
     "system",
 };
 
 const int gStmCategoryNo[] = {
-    STM_CTG_NO_NONE,
     STM_CTG_NO_HOMESCREEN,
     STM_CTG_NO_MAP,
     STM_CTG_NO_GENERAL,
@@ -70,7 +66,7 @@ const char* gStmAreaName[] = {
     "normal",
     "split.main",
     "split.sub",
-    "onscreen",
+    "pop_up",
     "restriction.normal",
     "restriction.split.main",
     "restriction.split.sub",
@@ -82,49 +78,49 @@ const int gStmAreaNo[] = {
     STM_ARA_NO_NORMAL,
     STM_ARA_NO_SPLIT_MAIN,
     STM_ARA_NO_SPLIT_SUB,
-    STM_ARA_NO_ON_SCREEN,
+    STM_ARA_NO_POP_UP,
     STM_ARA_NO_RESTRICTION_NORMAL,
     STM_ARA_NO_RESTRICTION_SPLIT_MAIN,
     STM_ARA_NO_RESTRICTION_SPLIT_SUB,
 };
 
 // String for state
-const char* gStmTransGearStateNo2Name[] = {
-    "trans_gear_neutral",
-    "trans_gear_not_neutral"
+const char* gStmTransGearStateName[] = {
+    "neutral",
+    "not_neutral"
 };
 
-const char* gStmParkingBrakeStateNo2Name[] = {
-    "parking_brake_off",
-    "parking_brake_on"
+const char* gStmParkingBrakeStateName[] = {
+    "off",
+    "on"
 };
 
-const char* gStmAccelPedalStateNo2Name[] = {
-    "accel_pedal_off",
-    "accel_pedal_on"
+const char* gStmAccelPedalStateName[] = {
+    "off",
+    "on"
 };
 
-const char* gStmRunningNo2Name[] = {
-    "car_stop",
-    "car_run"
+const char* gStmRunningStateNo2Name[] = {
+    "stop",
+    "run"
 };
 
-const char* gStmLampStateNo2Name[] = {
-    "lamp_off",
-    "lamp_on"
+const char* gStmLampStateName[] = {
+    "off",
+    "on"
 };
 
-const char* gStmLightstatusBrakeStateNo2Name[] = {
-    "lightstatus_brake_off",
-    "lightstatus_brake_on"
+const char* gStmLightstatusBrakeStateName[] = {
+    "off",
+    "on"
 };
 
-const char* gStmRestrictionModeStateNo2Name[] = {
-    "restriction_mode_off",
-    "restriction_mode_on"
+const char* gStmRestrictionModeStateName[] = {
+    "off",
+    "on"
 };
 
-const char* gStmLayoutNo2Name[] = {
+const char* gStmLayoutName[] = {
     "none",
     "pu",
     "sa",
@@ -142,7 +138,6 @@ const char* gStmLayoutNo2Name[] = {
 };
 
 const char* gStmLayerName[] = {
-    "none",
     "homescreen",
     "apps",
     "restriction",
@@ -160,17 +155,18 @@ const char* gStmCarElementName[] = {
 };
 
 const char** gStmCarStateNameList[] = {
-    gStmTransGearStateNo2Name,
-    gStmParkingBrakeStateNo2Name,
-    gStmAccelPedalStateNo2Name,
-    gStmRunningNo2Name,
-    gStmLampStateNo2Name,
-    gStmLightstatusBrakeStateNo2Name,
-    gStmRestrictionModeStateNo2Name,
+    gStmTransGearStateName,
+    gStmParkingBrakeStateName,
+    gStmAccelPedalStateName,
+    gStmRunningStateNo2Name,
+    gStmLampStateName,
+    gStmLightstatusBrakeStateName,
+    gStmRestrictionModeStateName,
 };
 
 stm_state_t g_crr_state;
 stm_state_t g_prv_state;
+int g_prv_on_screen_state_car_stop = 0;
 int g_prv_restriction_state_car_stop = 0;
 int g_prv_apps_state_car_stop = 0;
 int g_map_is_activated = STM_FALSE;
@@ -197,7 +193,7 @@ void stmInitialize() {
 
 int stmTransitionState(int event, stm_state_t* state) {
     int event_no, category_no, area_no;
-    int restriction_state, apps_state;
+    int on_screen_state, restriction_state, apps_state;
     int trans_gear_state, parking_brake_state, lightstatus_brake_state, accel_pedal_state, car_state, lamp_state, restriction_mode_state;
 
     event_no    = event & STM_MSK_EVT_NO;
@@ -208,6 +204,7 @@ int stmTransitionState(int event, stm_state_t* state) {
     g_prv_state = g_crr_state;
 
     // Get previous state
+    on_screen_state   = g_prv_state.layer[gStmLayerNoOnScreen].state;
     restriction_state = g_prv_state.layer[gStmLayerNoRestriction].state;
     apps_state        = g_prv_state.layer[gStmLayerNoApps].state;
     trans_gear_state        = g_prv_state.car_element[gStmCarElementNoTransGear].state;
@@ -219,17 +216,17 @@ int stmTransitionState(int event, stm_state_t* state) {
     restriction_mode_state  = g_prv_state.car_element[gStmCarElementNoRestrictionMode].state;
 
     // Clear flags
-    g_crr_state.layer[gStmLayerNoOnScreen].is_changed    = STM_FALSE;
-    g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_FALSE;
-    g_crr_state.layer[gStmLayerNoApps].is_changed        = STM_FALSE;
-    g_crr_state.layer[gStmLayerNoHomescreen].is_changed  = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoTransGear].is_changed        = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoParkingBrake].is_changed     = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoLightstatusBrake].is_changed = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoAccelPedal].is_changed       = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoRunning].is_changed          = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoLamp].is_changed             = STM_FALSE;
-    g_crr_state.car_element[gStmCarElementNoRestrictionMode].is_changed  = STM_FALSE;
+    g_crr_state.layer[gStmLayerNoOnScreen].changed    = STM_FALSE;
+    g_crr_state.layer[gStmLayerNoRestriction].changed = STM_FALSE;
+    g_crr_state.layer[gStmLayerNoApps].changed        = STM_FALSE;
+    g_crr_state.layer[gStmLayerNoHomescreen].changed  = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoTransGear].changed        = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoParkingBrake].changed     = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoAccelPedal].changed       = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoRunning].changed          = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoLamp].changed             = STM_FALSE;
+    g_crr_state.car_element[gStmCarElementNoRestrictionMode].changed  = STM_FALSE;
 
 
     // Set car state
@@ -237,61 +234,61 @@ int stmTransitionState(int event, stm_state_t* state) {
     case STM_EVT_NO_TRANS_GEAR_N:
         if (gStmTransGearStateNoN != trans_gear_state) {
             g_crr_state.car_element[gStmCarElementNoTransGear].state = gStmTransGearStateNoN;
-            g_crr_state.car_element[gStmCarElementNoTransGear].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoTransGear].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_TRANS_GEAR_NOT_N:
         if (gStmTransGearStateNoNotN != trans_gear_state) {
             g_crr_state.car_element[gStmCarElementNoTransGear].state = gStmTransGearStateNoNotN;
-            g_crr_state.car_element[gStmCarElementNoTransGear].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoTransGear].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_PARKING_BRAKE_OFF:
         if (gStmParkingBrakeStateNoOff != parking_brake_state) {
             g_crr_state.car_element[gStmCarElementNoParkingBrake].state = gStmParkingBrakeStateNoOff;
-            g_crr_state.car_element[gStmCarElementNoParkingBrake].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoParkingBrake].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_PARKING_BRAKE_ON:
         if (gStmParkingBrakeStateNoOn != parking_brake_state) {
             g_crr_state.car_element[gStmCarElementNoParkingBrake].state = gStmParkingBrakeStateNoOn;
-            g_crr_state.car_element[gStmCarElementNoParkingBrake].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoParkingBrake].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_ACCEL_PEDAL_OFF:
         if (gStmAccelPedalStateNoOff != accel_pedal_state) {
             g_crr_state.car_element[gStmCarElementNoAccelPedal].state = gStmAccelPedalStateNoOff;
-            g_crr_state.car_element[gStmCarElementNoAccelPedal].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoAccelPedal].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_ACCEL_PEDAL_ON:
         if (gStmAccelPedalStateNoOn != accel_pedal_state) {
             g_crr_state.car_element[gStmCarElementNoAccelPedal].state = gStmAccelPedalStateNoOn;
-            g_crr_state.car_element[gStmCarElementNoAccelPedal].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoAccelPedal].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_LAMP_OFF:
         if (gStmLampStateNoOff != lamp_state) {
             g_crr_state.car_element[gStmCarElementNoLamp].state = gStmLampStateNoOff;
-            g_crr_state.car_element[gStmCarElementNoLamp].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoLamp].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_LAMP_ON:
         if (gStmLampStateNoOn != lamp_state) {
             g_crr_state.car_element[gStmCarElementNoLamp].state = gStmLampStateNoOn;
-            g_crr_state.car_element[gStmCarElementNoLamp].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoLamp].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_LIGHTSTATUS_BRAKE_OFF:
         if (gStmLightstatusBrakeStateNoOff != lightstatus_brake_state) {
             g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state = gStmLightstatusBrakeStateNoOff;
-            g_crr_state.car_element[gStmCarElementNoLightstatusBrake].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_TRUE;
         }
         break;
     case STM_EVT_NO_LIGHTSTATUS_BRAKE_ON:
         if (gStmLightstatusBrakeStateNoOn != lightstatus_brake_state) {
             g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state = gStmLightstatusBrakeStateNoOn;
-            g_crr_state.car_element[gStmCarElementNoLightstatusBrake].is_changed = STM_TRUE;
+            g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed = STM_TRUE;
         }
         break;
     default:
@@ -300,27 +297,27 @@ int stmTransitionState(int event, stm_state_t* state) {
     }
 
 #if 1 // FOR ALS
-    if (g_crr_state.car_element[gStmCarElementNoLightstatusBrake].is_changed
-        || g_crr_state.car_element[gStmCarElementNoAccelPedal].is_changed) {
+    if (g_crr_state.car_element[gStmCarElementNoLightstatusBrake].changed
+        || g_crr_state.car_element[gStmCarElementNoAccelPedal].changed) {
         if ((gStmLightstatusBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state)
             && (gStmAccelPedalStateNoOn == g_crr_state.car_element[gStmCarElementNoAccelPedal].state)){
 #else
-    if (g_crr_state.car_element[gStmCarElementNoParkingBrake].is_changed
-        || g_crr_state.car_element[gStmCarElementNoTransGear].is_changed) {
+    if (g_crr_state.car_element[gStmCarElementNoParkingBrake].changed
+        || g_crr_state.car_element[gStmCarElementNoTransGear].changed) {
         if ((gStmParkingBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoParkingBrake].state)
             && (gStmTransGearStateNoNotN == g_crr_state.car_element[gStmCarElementNoTransGear].state)){
 #endif
             if (gStmRunningNoRun != car_state) {
                 // Car state is changed stop -> run
                 g_crr_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoRun;
-                g_crr_state.car_element[gStmCarElementNoRunning].is_changed = STM_TRUE;
+                g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_TRUE;
             }
         }
         else {
             if (gStmRunningNoStop != car_state) {
                 // Car state is changed run -> stop
                 g_crr_state.car_element[gStmCarElementNoRunning].state = gStmRunningNoStop;
-                g_crr_state.car_element[gStmCarElementNoRunning].is_changed = STM_TRUE;
+                g_crr_state.car_element[gStmCarElementNoRunning].changed = STM_TRUE;
             }
         }
     }
@@ -332,19 +329,24 @@ int stmTransitionState(int event, stm_state_t* state) {
 
         // Restriction mode is changed OFF -> ON
         g_crr_state.car_element[gStmCarElementNoRestrictionMode].state = gStmRestrictionModeStateNoOn;
-        g_crr_state.car_element[gStmCarElementNoRestrictionMode].is_changed = STM_TRUE;
+        g_crr_state.car_element[gStmCarElementNoRestrictionMode].changed = STM_TRUE;
+
+        // Update on screen layer
+        g_prv_on_screen_state_car_stop = on_screen_state;
+        g_crr_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoNone;
+        g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE;
 
         // Update restriction layer
         g_prv_restriction_state_car_stop = restriction_state;
         g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone;
-        g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+        g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
 
         // Update apps layer
         g_prv_apps_state_car_stop = apps_state;
         if ((STM_TRUE == g_map_is_activated)
            && (gStmLayoutNoSystem != apps_state)) {
             g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1;
-            g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+            g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
         }
     }
     else if ((STM_EVT_NO_RESTRICTION_MODE_OFF == event_no)
@@ -353,16 +355,20 @@ int stmTransitionState(int event, stm_state_t* state) {
 
         // Restriction mode is changed ON -> OFF
         g_crr_state.car_element[gStmCarElementNoRestrictionMode].state = gStmRestrictionModeStateNoOff;
-        g_crr_state.car_element[gStmCarElementNoRestrictionMode].is_changed = STM_TRUE;
+        g_crr_state.car_element[gStmCarElementNoRestrictionMode].changed = STM_TRUE;
+
+        // Update on screen layer
+        g_crr_state.layer[gStmLayerNoOnScreen].state = g_prv_on_screen_state_car_stop;
+        g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE;
 
         // Update restriction layer
         g_crr_state.layer[gStmLayerNoRestriction].state = g_prv_restriction_state_car_stop;
-        g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+        g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
 
         // Update apps layer
         if (STM_TRUE == g_map_is_activated) {
             g_crr_state.layer[gStmLayerNoApps].state = g_prv_apps_state_car_stop;
-            g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+            g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
         }
     }
 
@@ -374,12 +380,12 @@ int stmTransitionState(int event, stm_state_t* state) {
             case STM_CTG_NO_HOMESCREEN:
                 // Homescreen layer
                 g_crr_state.layer[gStmLayerNoHomescreen].state = gStmLayoutNoHs;
-                g_crr_state.layer[gStmLayerNoHomescreen].is_changed = STM_TRUE;
+                g_crr_state.layer[gStmLayerNoHomescreen].changed = STM_TRUE;
 
                 // Apps layer
                 if (gStmLayoutNoNone != apps_state) {
                     g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoNone;
-                    g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                    g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                 }
                 break;
             case STM_CTG_NO_MAP:
@@ -392,7 +398,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoMf;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     }
                     break;
@@ -404,11 +410,11 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     case gStmLayoutNoS1:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                     }
                     break;
                 case STM_ARA_NO_SPLIT_MAIN:
@@ -417,7 +423,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                     case gStmLayoutNoS1:
                     case gStmLayoutNoS2:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     default:
                         // nop
@@ -436,7 +442,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoG;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     }
                     break;
@@ -455,7 +461,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoSystem;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     }
                     break;
@@ -471,7 +477,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                     switch (apps_state) {
                     case gStmLayoutNoM1:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     case gStmLayoutNoMf:
                     case gStmLayoutNoS1:
@@ -479,7 +485,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS1;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     }
                     break;
@@ -488,11 +494,11 @@ int stmTransitionState(int event, stm_state_t* state) {
                     switch (apps_state) {
                     case gStmLayoutNoS1:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     case gStmLayoutNoS2:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     default:
                         // nop
@@ -504,19 +510,19 @@ int stmTransitionState(int event, stm_state_t* state) {
                     switch (apps_state) {
                     case gStmLayoutNoM1:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     case gStmLayoutNoM2:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     case gStmLayoutNoS1:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     case gStmLayoutNoS2:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoS2;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     default:
                         // nop
@@ -548,7 +554,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoM1;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                     }
                     break;
                 }
@@ -563,7 +569,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                         break;
                     default:
                         g_crr_state.layer[gStmLayerNoApps].state = gStmLayoutNoSystem;
-                        g_crr_state.layer[gStmLayerNoApps].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoApps].changed = STM_TRUE;
                         break;
                     }
                     break;
@@ -597,7 +603,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                     case gStmLayoutNoNone:
                         if (g_crr_state.layer[gStmLayerNoApps].state == gStmLayoutNoS1) {
                             g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestriction;
-                            g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                            g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
                         }
                         break;
                     default:
@@ -609,7 +615,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                     switch (restriction_state) {
                     case gStmLayoutNoNone:
                         g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitMain;
-                        g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                        g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
                         break;
                     default:
                         // nop
@@ -621,7 +627,7 @@ int stmTransitionState(int event, stm_state_t* state) {
                     case gStmLayoutNoNone:
                         if (g_crr_state.layer[gStmLayerNoApps].state == gStmLayoutNoM2) {
                             g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitSub;
-                            g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                            g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
                         }
                         break;
                     default:
@@ -641,7 +647,7 @@ int stmTransitionState(int event, stm_state_t* state) {
             case gStmLayoutNoRestrictionSplitMain:
             case gStmLayoutNoRestrictionSplitSub:
                 g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone;
-                g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
                 break;
             default:
                 // nop
@@ -649,27 +655,53 @@ int stmTransitionState(int event, stm_state_t* state) {
             }
         }
     }
-    else if (g_crr_state.layer[gStmLayerNoApps].is_changed) {
+    else if (g_crr_state.layer[gStmLayerNoApps].changed) {
         if (gStmLightstatusBrakeStateNoOff == g_crr_state.car_element[gStmCarElementNoLightstatusBrake].state) {
             if (gStmLayoutNoM2 == g_crr_state.layer[gStmLayerNoApps].state) {
                 g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestrictionSplitSub;
-                g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
             }
             else if (gStmLayoutNoS1 == g_crr_state.layer[gStmLayerNoApps].state) {
                 g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoRestriction;
-                g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
             }
             else {
                 if (gStmLayoutNoNone != g_crr_state.layer[gStmLayerNoRestriction].state) {
                     g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone;
-                    g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                    g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
                 }
             }
         }
         else {
             if (gStmLayoutNoNone != g_crr_state.layer[gStmLayerNoRestriction].state) {
                 g_crr_state.layer[gStmLayerNoRestriction].state = gStmLayoutNoNone;
-                g_crr_state.layer[gStmLayerNoRestriction].is_changed = STM_TRUE;
+                g_crr_state.layer[gStmLayerNoRestriction].changed = STM_TRUE;
+            }
+        }
+    }
+
+    // Set on screen layer
+    if (STM_CTG_NO_POPUP == category_no) {
+        if (STM_EVT_NO_ACTIVATE == event_no) {
+            switch (on_screen_state) {
+            case gStmLayoutNoNone:
+                g_crr_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoPu;
+                g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE;
+                break;
+            default:
+                // nop
+                break;
+            }
+        }
+        else if (STM_EVT_NO_DEACTIVATE == event_no) {
+            switch (on_screen_state) {
+            case gStmLayoutNoPu:
+                g_crr_state.layer[gStmLayerNoOnScreen].state = gStmLayoutNoNone;
+                g_crr_state.layer[gStmLayerNoOnScreen].changed = STM_TRUE;
+                break;
+            default:
+                // nop
+                break;
             }
         }
     }
@@ -678,7 +710,7 @@ int stmTransitionState(int event, stm_state_t* state) {
     memcpy(state, &g_crr_state, sizeof(g_crr_state));
 
     if ((STM_FALSE == g_map_is_activated)
-        && (STM_TRUE == g_crr_state.layer[gStmLayerNoApps].is_changed)
+        && (STM_TRUE == g_crr_state.layer[gStmLayerNoApps].changed)
         && ((gStmLayoutNoM1 == g_crr_state.layer[gStmLayerNoApps].state)
             || (gStmLayoutNoM2 == g_crr_state.layer[gStmLayerNoApps].state)
             || (gStmLayoutNoMf == g_crr_state.layer[gStmLayerNoApps].state))) {