@@ -34,24 +34,27 @@ class OnOffSwitchMenuItem extends BaseSwitchMenuItem {
3434 processingMode as BasePageMenu .ProcessingMode
3535 ) {
3636 var itemState = sitemapSwitch .getSwitchItem ().getState ();
37- if ( ! ( itemState .equals ( SwitchItem .ITEM_STATE_ON )
38- || itemState .equals ( SwitchItem .ITEM_STATE_OFF ) )
39- ) {
40- throw new JsonParsingException ( " Switch '" + sitemapSwitch .getLabel () + " ': invalid state '" + itemState + " '" );
41- }
4237 _isEnabled = parseItemState ( itemState );
4338 _smallIcon = sitemapSwitch .getLinkedPage () != null ;
4439 _stateDrawable = new OnOffStateDrawable ( _isEnabled , _smallIcon );
4540
41+ if ( sitemapSwitch .getSwitchItem ().getType ().equals ( " Dimmer" ) ) {
42+ var displayState = sitemapSwitch .getDisplayState ();
43+ System .println ( displayState );
44+ var stateTextResponsive = sitemapSwitch .getSwitchItem ().getType ().equals ( " Dimmer" )
45+ ? sitemapSwitch .getDisplayState ()
46+ : sitemapSwitch .hasRemoteDisplayState ()
47+ ? sitemapSwitch .getRemoteDisplayState ()
48+ : null ;
49+ System .println ( stateTextResponsive );
50+ }
51+
4652 // Initialize the superclass
4753 // For the toggle switch we support the display
4854 // of a display state, if provided by the server
4955 BaseSwitchMenuItem .initialize ( {
5056 :sitemapWidget => sitemapSwitch ,
51- :stateTextResponsive =>
52- sitemapSwitch .hasRemoteDisplayState ()
53- ? sitemapSwitch .getRemoteDisplayState ()
54- : null ,
57+ :stateTextResponsive => getStateTextResponsive ( sitemapSwitch ),
5558 :stateDrawable => _stateDrawable ,
5659 :isActionable => false ,
5760 :parent => parent ,
@@ -68,16 +71,41 @@ class OnOffSwitchMenuItem extends BaseSwitchMenuItem {
6871 : SwitchItem .ITEM_STATE_ON ;
6972 }
7073
74+ // Determines the display state of a toggle switch.
75+ // Special handling is applied for Dimmers, which are rendered manually
76+ // to ensure consistent appearance throughout the app.
77+ private static function getStateTextResponsive (
78+ sitemapSwitch as SitemapSwitch
79+ ) as String ? {
80+ return
81+ sitemapSwitch .getSwitchItem ().getType ().equals ( " Dimmer" )
82+ ? sitemapSwitch .getDisplayState ()
83+ : sitemapSwitch .hasRemoteDisplayState ()
84+ ? sitemapSwitch .getRemoteDisplayState ()
85+ : null ;
86+ }
87+
7188 // Converts the string state to a Boolean for _isEnabled
72- // ON => true; OFF => false
89+ // The widget supports string states:
90+ // "ON" => true; "OFF" => false
91+ // And numeric states:
92+ // 0 => false; 1-100 => true
7393 private function parseItemState ( itemState as String ) as Boolean {
7494 if ( itemState .equals ( SwitchItem .ITEM_STATE_ON ) ) {
7595 return true ;
7696 } else if ( itemState .equals ( SwitchItem .ITEM_STATE_OFF ) ) {
7797 return false ;
7898 } else {
79- throw new GeneralException ( " OnOffSwitchMenuItem: state '" + itemState + " ' is not supported" );
99+ var numericState = itemState .toNumber ();
100+ if ( numericState != null ) {
101+ if ( numericState == 0 ) {
102+ return false ;
103+ } else if ( numericState > 0 && numericState <= 100 ) {
104+ return true ;
105+ }
106+ }
80107 }
108+ throw new GeneralException ( " OnOffSwitchMenuItem: state '" + itemState + " ' is not supported" );
81109 }
82110
83111 // Update the member and Drawable
@@ -92,11 +120,7 @@ class OnOffSwitchMenuItem extends BaseSwitchMenuItem {
92120 public function updateWidget ( sitemapWidget as SitemapWidget ) as Void {
93121 BaseSwitchMenuItem .updateWidget ( sitemapWidget );
94122 _smallIcon = sitemapWidget .getLinkedPage () != null ;
95- // Update the display state provided by the server
96- setStateTextResponsive (
97- sitemapWidget .hasRemoteDisplayState ()
98- ? sitemapWidget .getRemoteDisplayState ()
99- : null
100- );
123+ // Update the display state
124+ setStateTextResponsive ( getStateTextResponsive ( sitemapWidget as SitemapSwitch ) );
101125 }
102126}
0 commit comments