@@ -52,14 +52,20 @@ fn enqueue_focus_event_if_applicable(
5252struct AdapterChangeHandler < ' a > {
5353 events : & ' a mut Vec < QueuedEvent > ,
5454 node_id_map : & ' a mut NodeIdMap ,
55+ accessibility_focus : Option < jint > ,
5556 enqueued_window_content_changed : bool ,
5657}
5758
5859impl < ' a > AdapterChangeHandler < ' a > {
59- fn new ( events : & ' a mut Vec < QueuedEvent > , node_id_map : & ' a mut NodeIdMap ) -> Self {
60+ fn new (
61+ events : & ' a mut Vec < QueuedEvent > ,
62+ node_id_map : & ' a mut NodeIdMap ,
63+ accessibility_focus : Option < jint > ,
64+ ) -> Self {
6065 Self {
6166 events,
6267 node_id_map,
68+ accessibility_focus,
6369 enqueued_window_content_changed : false ,
6470 }
6571 }
@@ -142,6 +148,28 @@ impl TreeChangeHandler for AdapterChangeHandler<'_> {
142148 y : scroll_y,
143149 } ) ;
144150 }
151+ if old_node. numeric_value ( ) != new_node. numeric_value ( ) && new_node. data ( ) . value ( ) . is_none ( )
152+ {
153+ if let ( Some ( current) , Some ( min) , Some ( max) ) = (
154+ new_node. numeric_value ( ) ,
155+ new_node. min_numeric_value ( ) ,
156+ new_node. max_numeric_value ( ) ,
157+ ) {
158+ let id = self . node_id_map . get_or_create_java_id ( new_node) ;
159+ let event_type = if self . accessibility_focus == Some ( id) {
160+ EVENT_VIEW_SELECTED
161+ } else {
162+ EVENT_VIEW_SCROLLED
163+ } ;
164+ self . events . push ( QueuedEvent :: RangeValueChanged {
165+ virtual_view_id : id,
166+ event_type,
167+ current,
168+ min,
169+ max,
170+ } ) ;
171+ }
172+ }
145173 // TODO: other events
146174 }
147175
@@ -205,10 +233,11 @@ impl State {
205233fn update_tree (
206234 events : & mut Vec < QueuedEvent > ,
207235 node_id_map : & mut NodeIdMap ,
236+ accessibility_focus : Option < jint > ,
208237 tree : & mut Tree ,
209238 update : TreeUpdate ,
210239) {
211- let mut handler = AdapterChangeHandler :: new ( events, node_id_map) ;
240+ let mut handler = AdapterChangeHandler :: new ( events, node_id_map, accessibility_focus ) ;
212241 tree. update_and_process_changes ( update, & mut handler) ;
213242}
214243
@@ -261,7 +290,13 @@ impl Adapter {
261290 }
262291 State :: Active ( tree) => {
263292 let mut events = Vec :: new ( ) ;
264- update_tree ( & mut events, & mut self . node_id_map , tree, update_factory ( ) ) ;
293+ update_tree (
294+ & mut events,
295+ & mut self . node_id_map ,
296+ self . accessibility_focus ,
297+ tree,
298+ update_factory ( ) ,
299+ ) ;
265300 Some ( QueuedEvents ( events) )
266301 }
267302 }
@@ -518,7 +553,13 @@ impl Adapter {
518553 tree_id,
519554 focus : focus_id,
520555 } ;
521- update_tree ( events, & mut self . node_id_map , tree, update) ;
556+ update_tree (
557+ events,
558+ & mut self . node_id_map ,
559+ self . accessibility_focus ,
560+ tree,
561+ update,
562+ ) ;
522563 let request = ActionRequest {
523564 action : Action :: SetTextSelection ,
524565 target_tree : tree_id,
0 commit comments