Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RNMobile] Avoid keyboard dismiss when interacting text blocks #57070

Merged

Conversation

fluiddot
Copy link
Contributor

@fluiddot fluiddot commented Dec 14, 2023

Related PRs:

What?

This PR solves the following cases that are affected by the keyboard’s disruptive hide-and-show behavior:

  • Insert a new block by pressing the enter key in a text-based block.
  • Merge blocks by pressing the backspace key in a text-based block.

However, there's a remaining case that this PR won't cover:

  • Replace blocks when interacting with the List block.

We haven't found a solution to this yet, as a next step, we'd need to explore further the actions performed during block creation and merging in the List block.

Why?

This PR will greatly improve the usability when writing content, as the hide-and-show behavior impacts negatively the editing experience.

How?

Solve blur/focus event conflicts

Each RichtText component instance triggers blur/focus events based on its state (e.g. will be unmounted, gains/loses selection) without considering other instances states. This leads to conflicts between blur and focus events in different cases like pressing enter on a Paragraph block to insert a new paragraph.

Here is an example of the sequence of events generated when pressing enter:

  • Paragraph 1 triggers blur event. This comes from the componentDidUpdate function due to changing its selection state from selected to unselected.
    • This blur is the culprit of the keyboard being dismissed, as it executed first.
  • Paragraph 2 triggers focus event when it's mounted (i.e. from the componentDidMount function).
  • This focus event makes the keyboard to open.
  • Paragraph 2 triggers focus a second time. However, this event is innocuous. This comes from the componentDidUpdate function due to changing its selection state from unselected to selected.
  • Paragraph 1 triggers blur event. This comes from the _onBlur callback triggered by Aztec because the text input lost focus. This event is innocuous.

To solve this conflict, this PR introduces the usage of debounce in the blur event (b6f237f). It will ensure that focus events take precedence when blur events have been triggered at the same time, as well as cancel them to avoid the keyboard to be dismissed.

iOS - Keyboard dismisses automatically when text input is removed

Another case to solve is when two blocks are merged. The editor internally replaces the blocks which implies removing one of them. On iOS, this presents a problem because the keyboard will be automatically dismissed. No blur events are generated so a different approach was taken.

The solution (a71b1c5) implied tweaking the order of native commands invoked for blur and focus events (reference). The focus event triggered by the new block created (i.e. the one that contains the merged content) happens at the same time the other block is removed. So, the workaround for this case is to ensure that focus events are prepended in the pending UI blocks list of the UIManager (reference 1 , reference 2).

Android - Avoid triggering blur events on unmounted instances

As mentioned below, when RichText/AztecView is unmounted a blur event is triggered. On Android, this behavior in combination with using debounce leads to an exception because we try to blur a text input that no longer exists. To address this, a new function has been introduced in the Aztec input state (blurOnUnmount) that is only called for the component unmounting case (634867f). This function has two purposes:

  1. Cancel potential previous blur calls to avoid exceptions.
  2. Hide the keyboard, as it would happen in a regular blur event. Note that the call to hide the keyboard uses debounce. This is needed to avoid dismissing the keyboard if a focus event happens at the same time.

Other changes

As a side note, the blur event triggered when unmounting the RichText component has been moved to the AztecView component as seems a better fit for this logic (d3fb486).

Testing Instructions

Note

It's recommended to use the installable builds for testing:

1 - Post title

  1. Open the app.
  2. Create an empty post.
  3. Observe that the title is focused.
  4. Type some words and press enter.
  5. Observe the following:
    1. The Paragraph block is focused.
    2. The keyboard remained open when transitioning.
  6. Press backspace.
  7. Observe the following depending on the platform:
    1. Android
      1. The Paragraph block remains focused.
      2. The keyboard remains open.
    2. iOS
      1. The Paragraph block remains focused.
      2. The keyboard reopens (this should be tackled in the future)

2 - Insert a new block by pressing the enter key in a text-based block

  1. Open the app.
  2. Create an empty post.
  3. Select the first Paragraph block.
  4. Type some words and press enter.
  5. Observe the following:
  6. A new Paragraph block is created and focused.
  7. The keyboard remained open when transitioning.

3 - Merge blocks by pressing the backspace key in a text-based block (iOS only)

  1. Open the app.
  2. Create an empty post.
  3. Select the first Paragraph block.
  4. Type some words and press enter.
  5. Press backspace.
  6. Observe the following:
    1. The second Paragraph block is removed.
    2. The first Paragraph block is focused and the text caret is at the end of the content.
    3. The keyboard remained open when transitioning.
  7. Place the text caret between two words.
  8. Press enter.
  9. Observe the following:
    1. The paragraph is split into a new Paragraph block and it's focused.
    2. The keyboard remained open when transitioning.
  10. Press backspace.
  11. Observe the following:
    1. The paragraph is merged with the first one and it's focused.
    2. The keyboard remained open when transitioning.

4 - Automatically dismiss the keyboard when selecting non-text-based-blocks

  1. Open the app.
  2. Create an empty post.
  3. Add an Image block and set an image.
  4. Tap on the caption field.
  5. Observe the following:
    1. The caption field is focused.
    2. The keyboard opens.
  6. Type some words and press enter.
  7. Observe the following:
    1. A new Paragraph block is created and focused.
    2. The keyboard remained open when transitioning.
  8. Press backspace.
    1. The Image block is selected.
    2. The keyboard closes.
  9. Insert a Paragraph block and type some words.
  10. Observe that the Paragraph block is focused.
  11. Tap on the Image block.
  12. Observe the following:
    1. The Paragraph block is no longer focused.
    2. The keyboard closes.

5 - Manually dismiss the keyboard

  1. Open the app.
  2. Create an empty post.
  3. Select the first Paragraph block.
  4. Observe the following:
    1. The Paragraph block is focused.
    2. The keyboard opens.
  5. Tap on the keyboard icon located in the toolbar.
  6. Observe the following:
    1. The Paragraph block is no longer focused.
    2. The keyboard closes.

6 - The keyboard is dismissed and restored when opening modals

NOTE: On Android, this case will be covered by #57069.

  1. Open the app.
  2. Create an empty post.
  3. Select the first Paragraph block.
  4. Open the block settings.
  5. Observe the following:
    1. The Paragraph block is no longer focused.
    2. The block settings bottom sheet opens.
    3. The keyboard closes.
  6. Dismiss the bottom sheet.
  7. Observe the following:
    1. The Paragraph block is focused again.
    2. The keyboard opens.
  8. Navigate to the bottom of the post.
  9. Tap on the empty area below the content.
  10. Observe the following:
    1. A new Paragraph block is created and focused.
    2. The keyboard remained open when transitioning.

6 - Writing flow

It's recommended to cover the writing flow test suite by manually testing.

Testing Instructions for Keyboard

N/A

Screenshots or screencast

Header Header
ios-avoid-keyboard-dismiss-when-interacting-text-blocks.MP4
android-avoid-keyboard-dismiss-when-interacting-text-blocks.mp4

@fluiddot fluiddot added Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) Mobile App - Automation Label used to initiate Mobile App PR Automation [Type] Bug An existing feature does not function as intended labels Dec 14, 2023
Copy link

github-actions bot commented Dec 14, 2023

Size Change: -762 B (0%)

Total Size: 1.71 MB

Filename Size Change
build/block-editor/index.min.js 245 kB -1.89 kB (-1%)
build/block-library/blocks/image/view.min.js 2.02 kB -3 B (0%)
build/block-library/index.min.js 214 kB +433 B (0%)
build/components/index.min.js 257 kB +2 B (0%)
build/data/index.min.js 8.94 kB +68 B (+1%)
build/edit-post/index.min.js 31.6 kB -290 B (-1%)
build/edit-site/index.min.js 194 kB +106 B (0%)
build/edit-site/style-rtl.css 14.7 kB +36 B (0%)
build/edit-site/style.css 14.7 kB +37 B (0%)
build/editor/index.min.js 55 kB +731 B (+1%)
build/interactivity/image.min.js 2.15 kB -1 B (0%)
build/interactivity/index.min.js 12.5 kB +10 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 964 B
build/annotations/index.min.js 2.71 kB
build/api-fetch/index.min.js 2.29 kB
build/autop/index.min.js 2.11 kB
build/blob/index.min.js 590 B
build/block-directory/index.min.js 7.25 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.29 kB
build/block-editor/content.css 4.28 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 15.2 kB
build/block-editor/style.css 15.2 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 228 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 343 B
build/block-library/blocks/form-submission-notification/editor.css 342 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.75 kB
build/block-library/blocks/gallery/style.css 1.75 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.61 kB
build/block-library/blocks/image/style.css 1.6 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/navigation/view.min.js 1.04 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 345 B
build/block-library/blocks/post-featured-image/style.css 345 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/query/view.min.js 647 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 613 B
build/block-library/blocks/search/style.css 613 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.49 kB
build/block-library/blocks/social-links/style.css 1.49 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 399 B
build/block-library/blocks/table/editor.css 399 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.4 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.3 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 2.73 kB
build/core-data/index.min.js 72.7 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 651 B
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/style-rtl.css 7.16 kB
build/edit-post/style.css 7.15 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.71 kB
build/edit-widgets/style.css 4.71 kB
build/editor/style-rtl.css 4.38 kB
build/editor/style.css 4.38 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.76 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/file.min.js 442 B
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 791 B
build/interactivity/search.min.js 610 B
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.49 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2.01 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/index.min.js 5.27 kB
build/patterns/style-rtl.css 564 B
build/patterns/style.css 564 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.26 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 994 B
build/react-i18n/index.min.js 631 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.74 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 10.5 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 1.98 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.83 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 967 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

Copy link

github-actions bot commented Dec 14, 2023

Flaky tests detected in 17dcda5.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/7221803754
📝 Reported issues:

Copy link
Member

@geriux geriux left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! This is a major improvement to the writing flow experience 🤩

The code changes look good to me, I'm happy that we were able to achieve this with not that many code changes or refactors 🚀

I've tested all test cases scenarios including the writing flow without any issues or regressions.

Devices used:

  • iPhone 15 Pro (OS 17.1.2)
  • Samsung Galaxy A23 5G (OS Android 13)
  • Redmi Note 8T (OS Android 11)

Really nice work! 👏

@fluiddot
Copy link
Contributor Author

fluiddot commented Dec 18, 2023

@geriux since this PR is already approved, let me know if you'd like to put the merge on hold until we merge #57069 into this branch. From my side, this option makes sense as that PR is also approved.

@geriux
Copy link
Member

geriux commented Dec 18, 2023

@geriux since this PR is already approved, let me know if you'd like to put the merge on hold until we merge #57069 into this branch. From my side, this option makes sense as that PR is also approved.

I think to simplify things we could merge #57069 into this branch and then merge this one into trunk

)

* React Native Bridge - Android - Introduces showAndroidSoftKeyboard to show the keyboard if there's a focused TextInput

* Mobile - Bottom Sheet - Adds usage of showAndroidSoftKeyboard when closing the Modal so it shows the Keyboard on Android for focused TextInputs

* React Native Bridge - Android - Introduces hideAndroidSoftKeyboard to hide the keyboard without triggering blur events

* React Native Bridge - Remove console warnings for unsupported methods, as their names are self-explanatory.

* Update showAndroidSoftKeyboard to take into account when the window focus changed, when we show the Modals these are shown on top of the editor activity.

It also adds an option to delay this for full screen modals

* Mobile - BottomSheet - Enable hardwareAccelerated and useNativeDriverForBackdrop props to improve performance on Android

* Update snapshots

* Removes hasWindowFocus condition as it is not being called hence not needed

* Refactor showAndroidSoftKeyboard to split into several functions, it also removes the delay functionality as it is no longer needed. It fixes an issue where mKeyboardRunnable was not being set.

It removes the delay logic from the Bottom Sheet component and the bridge.

* Updates createShowKeyboardRunnable to get the activity within the runnable instead of getting it as an param

* Remove unneeded check
@geriux
Copy link
Member

geriux commented Dec 18, 2023

The changes from #57069 are now merged into this branch 🎉

@fluiddot
Copy link
Contributor Author

Before heading to merge the PR, I'll update the changelog to reflect the fixes.

@fluiddot fluiddot enabled auto-merge (squash) December 18, 2023 19:00
@fluiddot fluiddot merged commit b81790d into trunk Dec 18, 2023
52 checks passed
@fluiddot fluiddot deleted the rnmobile/fix/avoid-keyboard-dismiss-when-interacting-text-blocks branch December 18, 2023 19:26
@github-actions github-actions bot added this to the Gutenberg 17.4 milestone Dec 18, 2023
@jhnstn
Copy link
Contributor

jhnstn commented Dec 26, 2023

Hi @fluiddot, I ran into a crash on Android from these changes.
I get the following error when trying to insert a new block from inserter menu: Unable to execute operation dispatchViewManagerCommand: blur on view with tag: 1633, since the view does not exist
It doesn't seem limited to a specific block but I am able to get new paragraph blocks when hitting return from another rich text block (post title or initial paragraph).

Screen:

screen-20231226-171440.mp4

I get the error from anywhere on the post with or without any existing content.

I'm running the app locally on a Pixel 8 with WP-Android checked out at wordpress-mobile/WordPress-Android@70eb2d9 . I don't get the error after reverting the PR merge commit.

@geriux
Copy link
Member

geriux commented Dec 27, 2023

Hey @jhnstn 👋 I'll investigate this issue, thanks for reporting!

@geriux
Copy link
Member

geriux commented Dec 27, 2023

@jhnstn This issue is happening because we haven't released an alpha version of Gutenberg Mobile and these changes include native code.

If you build Gutenberg Mobile from source it should fix it, you can do this by changing your local local-builds.gradle file in WordPress Android and uncommenting the localGutenbergMobilePath = "../gutenberg-mobile" line.

Let us know if this fixes the problem until we create an alpha tag.

@jhnstn
Copy link
Contributor

jhnstn commented Dec 27, 2023

Thanks @geriux ! setting up the local GB path fixed it

artemiomorales pushed a commit that referenced this pull request Jan 4, 2024
* Use debounce in Aztec's blur function

* Execute `focus` UI block before other blocks

* Add `hideAndroidSoftKeyboard` to RN bridge

* Add `blurOnUnmount` to Aztec input state manager.

This function will help us to deal with the special case of unfocusing an Aztec view upon unmounting.

* Dismiss keyboard when Aztec view unmounts

This was previously handled in the `RichText` component.

* Fix unit test related to `AztecInputState` after adding debounce to `blur` function

* Remove console warning from `hideAndroidSoftKeyboard`

* Update inline comments of `blurOnUnmount` function

* [Mobile] - Android - Bring the Keyboard back when closing modals (#57069)

* React Native Bridge - Android - Introduces showAndroidSoftKeyboard to show the keyboard if there's a focused TextInput

* Mobile - Bottom Sheet - Adds usage of showAndroidSoftKeyboard when closing the Modal so it shows the Keyboard on Android for focused TextInputs

* React Native Bridge - Android - Introduces hideAndroidSoftKeyboard to hide the keyboard without triggering blur events

* React Native Bridge - Remove console warnings for unsupported methods, as their names are self-explanatory.

* Update showAndroidSoftKeyboard to take into account when the window focus changed, when we show the Modals these are shown on top of the editor activity.

It also adds an option to delay this for full screen modals

* Mobile - BottomSheet - Enable hardwareAccelerated and useNativeDriverForBackdrop props to improve performance on Android

* Update snapshots

* Removes hasWindowFocus condition as it is not being called hence not needed

* Refactor showAndroidSoftKeyboard to split into several functions, it also removes the delay functionality as it is no longer needed. It fixes an issue where mKeyboardRunnable was not being set.

It removes the delay logic from the Bottom Sheet component and the bridge.

* Updates createShowKeyboardRunnable to get the activity within the runnable instead of getting it as an param

* Remove unneeded check

* Update `react-native-editor` changelog

---------

Co-authored-by: Gerardo Pacheco <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Mobile App - Automation Label used to initiate Mobile App PR Automation Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants