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

Arrow Keys jump to URLs and do not move cursor #621

Closed
Zocker1999NET opened this issue May 3, 2023 · 4 comments · Fixed by #634
Closed

Arrow Keys jump to URLs and do not move cursor #621

Zocker1999NET opened this issue May 3, 2023 · 4 comments · Fixed by #634

Comments

@Zocker1999NET
Copy link
Contributor

Zocker1999NET commented May 3, 2023

This might be a regression of #136 & #178 solved by commit 696858e.

I use LineageOS+microG and AnySoftKeyboard. Using the arrow buttons of AnySoftKeyboard or the feature of LineageOS to use the hardware volume keys as arrow keys do jump between the URLs available and do not move to cursor as expected.

App Version: 6.15.4 (at time of writing, the newest)
LineageOS Version: 20-20230410-microG-FP4

@tibbi
Copy link
Member

tibbi commented May 3, 2023

Im pretty sure that is the expected behaviour. Anyway, such things are handled by the system, not us.

@tibbi tibbi closed this as completed May 3, 2023
@Zocker1999NET
Copy link
Contributor Author

Zocker1999NET commented May 19, 2023

I wouldn't call that expected behavior. If I'm inserting text & having a blinking "text" cursor, I'm expecting that my arrow keys do move the "text" cursor & not jump in between elements.

However, I found out the exact conditions the issue is appearing (tested with version 6.15.5):

  1. Enable "Make links and emails clickable" in the app settings
  2. Creating a note with a link for testing the issue
  3. Fully restart the app to ensure that said link is recognized as such
  4. Reopen the note & verify that arrow keys are working as expected (moving text cursor)
  5. Now long press anything to trigger Android's sub menu
    • EDIT: It does not need to be the link which has to be selected, anything selecting works, making the app barely usable with this setting. However, the setting from point 1 needs to be enabled.
  6. Press anywhere in the text to give focus back to the input
  7. Now verify that the arrow keys (IMO falsely) do not move the text cursor but jump between/to the links

This is a screen record where I reproduce the issue:

_screencapture.mp4

I have no real experience in Android development specific, but to me it looks like the focus isn't correctly set to be only on the text input after the link was selected once. I cannot say if this might be an issue with the Android system, but this is the only app where I experience this. Anyway, I will keep my eyes open to find an app with a similar simple text UI & link recognizing to see if it experiences the same error.

@tibbi
Copy link
Member

tibbi commented May 20, 2023

that is all done by the system, not us.

Zocker1999NET added a commit to Zocker1999NET/Simple-Notes that referenced this issue May 20, 2023
@Zocker1999NET
Copy link
Contributor Author

Zocker1999NET commented May 20, 2023

Sorry, I value the huge work you put in this app, but I disagree with you. I've looked in-depth into the code & I found out the hotfix added in 1741070 is causing that, with "Make links and emails clickable" enabled, the fix you introduced in 696858e for #136 is reverted at runtime in the case I presented above.


Your fix for #136 wants to use MyMovementMethod instead of LinkMovementMethod with linksClickable=true to solve it:

if (config!!.clickableLinks) {
view.text_note_view.apply {
linksClickable = true
autoLinkMask = Linkify.WEB_URLS or Linkify.EMAIL_ADDRESSES
movementMethod = MyMovementMethod.getInstance()
}
}

And it does in my case, after a fresh launch, the arrow keys work fine.

But when selecting a text, this hotfix comes in to solve an issue in Android <=6 Google "couldn't" fix by enabling ArrowKeyMovementMethod when a selection is triggered to avoid a crash. It would eventually revert the hotfix when the text is deselected, but it reverts it to LinkMovementMethod, ultimately reverting your work in 696858e at runtime:

if (config.clickableLinks) {
noteViewWithTextSelected?.movementMethod = LinkMovementMethod.getInstance()
}


So I concluded that changing line 257 to use MyMovementMethod and not LinkMovementMethod should fix the issue I have, and after testing I see that it does fix my issue. I've created PR #634 to propose this change.

Alternatively, or rather additionally, the hotfix may be guarded to be only applied on Android <=6 devices (like proposed here), to avoid further hassle with this workaround where it is not needed, as it feels kind of "hacky" and hopefully is only required on such old Android versions (However, that requires further testing with older devices at least I cannot do, that's why I didn't add this to my PR).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants