4444 */
4545class PdfViewModeController implements
4646 TextSelectionManager .OnTextSelectionModeChangeListener , TextSelectionManager .OnTextSelectionChangeListener ,
47- ToolbarCoordinatorLayout .OnContextualToolbarLifecycleListener , FormEditingBar .OnFormEditingBarLifecycleListener {
47+ ToolbarCoordinatorLayout .OnContextualToolbarLifecycleListener ,
48+ ToolbarCoordinatorLayout .OnContextualToolbarMovementListener ,
49+ FormEditingBar .OnFormEditingBarLifecycleListener {
4850
4951 private final PdfView parent ;
5052
@@ -135,7 +137,9 @@ public void onPrepareContextualToolbar(@NonNull ContextualToolbar contextualTool
135137 // Apply toolbar position configuration
136138 String toolbarPosition = parent .getToolbarPosition ();
137139 com .facebook .react .bridge .ReadableArray supportedPositions = parent .getSupportedToolbarPositions ();
138-
140+
141+ ToolbarCoordinatorLayout .LayoutParams .Position appliedPosition = null ;
142+
139143 if (toolbarPosition != null || supportedPositions != null ) {
140144 ToolbarCoordinatorLayout .LayoutParams .Position position = null ;
141145 EnumSet <ToolbarCoordinatorLayout .LayoutParams .Position > supportedPositionsSet = null ;
@@ -179,13 +183,18 @@ public void onPrepareContextualToolbar(@NonNull ContextualToolbar contextualTool
179183
180184 // Create and set LayoutParams with position and supported positions
181185 contextualToolbar .setLayoutParams (new ToolbarCoordinatorLayout .LayoutParams (finalPosition , supportedPositionsSet ));
186+ appliedPosition = finalPosition ;
182187 } else if (position != null ) {
183188 // Only position is set, use setPosition method
184189 contextualToolbar .setPosition (position );
190+ appliedPosition = position ;
185191 }
186192 }
187-
193+
188194 if (contextualToolbar instanceof AnnotationCreationToolbar ) {
195+ if (appliedPosition != null ) {
196+ parent .setToolbarPosition (toolbarPositionString (appliedPosition ));
197+ }
189198 if (itemGroupingRule != null ) {
190199 contextualToolbar .setMenuItemGroupingRule (itemGroupingRule );
191200 }
@@ -263,8 +272,29 @@ public void onPrepareContextualToolbar(@NonNull ContextualToolbar contextualTool
263272 }
264273 }
265274
275+ private static String toolbarPositionString (@ NonNull ToolbarCoordinatorLayout .LayoutParams .Position position ) {
276+ if (position == ToolbarCoordinatorLayout .LayoutParams .Position .TOP ) {
277+ return "top" ;
278+ }
279+ if (position == ToolbarCoordinatorLayout .LayoutParams .Position .LEFT ) {
280+ return "left" ;
281+ }
282+ if (position == ToolbarCoordinatorLayout .LayoutParams .Position .RIGHT ) {
283+ return "right" ;
284+ }
285+ return "top" ;
286+ }
287+
288+ private void syncToolbarPositionFromContextualToolbar (@ NonNull ContextualToolbar contextualToolbar ) {
289+ ToolbarCoordinatorLayout .LayoutParams .Position position = contextualToolbar .getPosition ();
290+ if (position != null ) {
291+ parent .setToolbarPosition (toolbarPositionString (position ));
292+ }
293+ }
294+
266295 @ Override
267296 public void onDisplayContextualToolbar (@ NonNull ContextualToolbar contextualToolbar ) {
297+ syncToolbarPositionFromContextualToolbar (contextualToolbar );
268298 if (contextualToolbar instanceof AnnotationCreationToolbar ) {
269299 annotationCreationActive = true ;
270300 }
@@ -277,6 +307,7 @@ public void onDisplayContextualToolbar(@NonNull ContextualToolbar contextualTool
277307
278308 @ Override
279309 public void onRemoveContextualToolbar (@ NonNull ContextualToolbar contextualToolbar ) {
310+ syncToolbarPositionFromContextualToolbar (contextualToolbar );
280311 if (contextualToolbar instanceof AnnotationCreationToolbar ) {
281312 annotationCreationActive = false ;
282313 }
@@ -287,6 +318,21 @@ public void onRemoveContextualToolbar(@NonNull ContextualToolbar contextualToolb
287318 parent .updateState ();
288319 }
289320
321+ @ Override
322+ public void onDragContextualToolbar (@ NonNull ContextualToolbar contextualToolbar , int dx , int dy ) {
323+ syncToolbarPositionFromContextualToolbar (contextualToolbar );
324+ }
325+
326+ @ Override
327+ public void onAttachContextualToolbar (@ NonNull ContextualToolbar contextualToolbar ) {
328+ syncToolbarPositionFromContextualToolbar (contextualToolbar );
329+ }
330+
331+ @ Override
332+ public void onDetachContextualToolbar (@ NonNull ContextualToolbar contextualToolbar ) {
333+ syncToolbarPositionFromContextualToolbar (contextualToolbar );
334+ }
335+
290336 @ Override
291337 public void onPrepareFormEditingBar (@ NonNull FormEditingBar formEditingBar ) {
292338 // Not required.
0 commit comments