@@ -48,6 +48,8 @@ class SetupSteps(IntEnum):
4848_use_external_metadata : bool = False
4949_reconfigured_device : AtvDevice | None = None
5050_use_chromecast : bool = False
51+ _use_chromecast_volume : bool = False
52+ _volume_step : float = 10
5153
5254# TODO #9 externalize language texts
5355_user_input_discovery = RequestUserInput (
@@ -297,9 +299,13 @@ async def handle_configuration_mode(
297299 _setup_step = SetupSteps .RECONFIGURE
298300 _reconfigured_device = selected_device
299301 use_chromecast = selected_device .use_chromecast if selected_device .use_chromecast else False
302+ use_chromecast_volume = (
303+ selected_device .use_chromecast_volume if selected_device .use_chromecast_volume else False
304+ )
300305 use_external_metadata = (
301306 selected_device .use_external_metadata if selected_device .use_external_metadata else False
302307 )
308+ volume_step = selected_device .volume_step if selected_device .volume_step else 10
303309
304310 return RequestUserInput (
305311 {
@@ -316,6 +322,14 @@ async def handle_configuration_mode(
316322 },
317323 "field" : {"checkbox" : {"value" : use_chromecast }},
318324 },
325+ {
326+ "id" : "chromecast_volume" ,
327+ "label" : {
328+ "en" : "Set volume through Chromecast" ,
329+ "fr" : "Régler le volume par Chromecast" ,
330+ },
331+ "field" : {"checkbox" : {"value" : use_chromecast_volume }},
332+ },
319333 {
320334 "id" : "external_metadata" ,
321335 "label" : {
@@ -325,6 +339,14 @@ async def handle_configuration_mode(
325339 },
326340 "field" : {"checkbox" : {"value" : use_external_metadata }},
327341 },
342+ {
343+ "id" : "volume_step" ,
344+ "label" : {
345+ "en" : "Volume step in percent (Chromecast only)" ,
346+ "fr" : "Pallier de volume en pourcentage (Chromecast uniquement)" ,
347+ },
348+ "field" : {"number" : {"value" : volume_step , "min" : 1 , "max" : 50 , "steps" : 1 , "decimals" : 0 }},
349+ },
328350 ],
329351 )
330352 case "reset" :
@@ -437,6 +459,14 @@ async def _handle_discovery(msg: UserDataResponse) -> RequestUserInput | SetupEr
437459 },
438460 "field" : {"checkbox" : {"value" : False }},
439461 },
462+ {
463+ "id" : "chromecast_volume" ,
464+ "label" : {
465+ "en" : "Set volume through Chromecast" ,
466+ "fr" : "Régler le volume par Chromecast" ,
467+ },
468+ "field" : {"checkbox" : {"value" : False }},
469+ },
440470 {
441471 "id" : "external_metadata" ,
442472 "label" : {
@@ -446,6 +476,14 @@ async def _handle_discovery(msg: UserDataResponse) -> RequestUserInput | SetupEr
446476 },
447477 "field" : {"checkbox" : {"value" : False }},
448478 },
479+ {
480+ "id" : "volume_step" ,
481+ "label" : {
482+ "en" : "Volume step in percent (Chromecast only)" ,
483+ "fr" : "Pallier de volume en pourcent (Chromecast uniquement)" ,
484+ },
485+ "field" : {"number" : {"value" : 10 , "min" : 1 , "max" : 50 , "steps" : 1 , "decimals" : 0 }},
486+ },
449487 ],
450488 )
451489
@@ -461,12 +499,16 @@ async def handle_device_choice(msg: UserDataResponse) -> RequestUserInput | Setu
461499 """
462500 global _pairing_android_tv
463501 global _use_chromecast
502+ global _use_chromecast_volume
464503 global _setup_step
465504 global _use_external_metadata
505+ global _volume_step
466506
467507 choice = msg .input_values ["choice" ]
468508 _use_external_metadata = msg .input_values .get ("external_metadata" , "false" ) == "true"
469509 _use_chromecast = msg .input_values .get ("chromecast" , "false" ) == "true"
510+ _use_chromecast_volume = msg .input_values .get ("chromecast_volume" , "false" ) == "true"
511+ _volume_step = float (msg .input_values .get ("volume_step" , 10 ))
470512 name = ""
471513
472514 for discovered_tv in _discovered_android_tvs :
@@ -484,6 +526,8 @@ async def handle_device_choice(msg: UserDataResponse) -> RequestUserInput | Setu
484526 id = "" ,
485527 use_external_metadata = False ,
486528 use_chromecast = False ,
529+ use_chromecast_volume = _use_chromecast_volume ,
530+ volume_step = _volume_step ,
487531 ),
488532 )
489533 _LOG .info ("Chosen Android TV: %s. Start pairing process..." , choice )
@@ -564,8 +608,10 @@ async def handle_user_data_pin(msg: UserDataResponse) -> SetupComplete | SetupEr
564608 address = _pairing_android_tv .address ,
565609 use_external_metadata = _use_external_metadata ,
566610 use_chromecast = _use_chromecast ,
611+ use_chromecast_volume = _use_chromecast_volume ,
567612 manufacturer = device_info .get ("manufacturer" , "" ),
568613 model = device_info .get ("model" , "" ),
614+ volume_step = _volume_step ,
569615 )
570616
571617 config .devices .add_or_update (device ) # triggers AndroidTv instance creation
@@ -595,15 +641,25 @@ async def _handle_device_reconfigure(
595641 return SetupError ()
596642
597643 use_chromecast = msg .input_values .get ("chromecast" , "false" ) == "true"
644+ use_chromecast_volume = msg .input_values .get ("chromecast_volume" , "false" ) == "true"
598645 use_external_metadata = msg .input_values .get ("external_metadata" , "false" ) == "true"
646+ volume_step = float (msg .input_values .get ("volume_step" , 10 ))
599647
600648 _LOG .debug ("User has changed configuration" )
601649 _reconfigured_device .use_chromecast = use_chromecast
650+ _reconfigured_device .use_chromecast_volume = use_chromecast_volume
602651 _reconfigured_device .use_external_metadata = use_external_metadata
652+ _reconfigured_device .volume_step = volume_step
603653
604654 config .devices .add_or_update (_reconfigured_device ) # triggers ATV instance update
605655 await asyncio .sleep (1 )
606- _LOG .info ("Setup successfully completed for %s" , _reconfigured_device .name )
656+ _LOG .info (
657+ "Setup successfully completed for %s (chromecast %s, external metadata %s, volume step %s)" ,
658+ _reconfigured_device .name ,
659+ _reconfigured_device .use_chromecast ,
660+ _reconfigured_device .use_external_metadata ,
661+ _reconfigured_device .volume_step ,
662+ )
607663
608664 return SetupComplete ()
609665
0 commit comments