Repository navigation
fix(drawer): external site links no longer stop working over time - #17445
Conversation
External link menu items are registered with MENU_ITEM_EXTERNAL_LINK + the link's local database _id. That column is AUTOINCREMENT and the link table is cleared and refilled on every refresh, so the IDs grow without bound. The click handler only accepted an offset of 0-100, so once the IDs passed that window every external link silently stopped responding. Dispatch on the menu group the items were registered under, and resolve the link by ID instead of by display name. Signed-off-by: about2crash <146389368+about2crash@users.noreply.github.com> Assisted-by: ClaudeCode:claude-opus-5
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
Signed-off-by: about2crash <146389368+about2crash@users.noreply.github.com>
|
Just pushed a fix for a recent merge conflict so this branch is fully up to date! @alperozturk96 would you be the right person to review this, or is there someone else I should ping? Let me know if you need any changes! |
| @@ -825,27 +823,28 @@ public void accountClicked(User user) { | |||
| } | |||
|
|
|||
| private void externalLinkClicked(MenuItem menuItem) { | |||
There was a problem hiding this comment.
Hello,
Thank you for the PR. Can we simplify the logic?
private void externalLinkClicked(MenuItem menuItem) {
int linkId = menuItem.getItemId() - MENU_ITEM_EXTERNAL_LINK;
externalLinksProvider.getExternalLink(ExternalLinkType.LINK, externalLinks -> {
ExternalLink link = externalLinks.stream()
.filter(candidate -> candidate.getId() == linkId)
.findFirst()
.orElse(null);
if (link == null) {
Log_OC.w(TAG, "No external link found for menu item: " + menuItem.getTitle());
} else {
openExternalLink(link);
}
return Unit.INSTANCE;
});
}
private void openExternalLink(ExternalLink link) {
if (link.getRedirect()) {
IntentUtil.startLinkIntent(this, link.getUrl());
return;
}
Intent intent = new Intent(getApplicationContext(), ExternalSiteWebView.class)
.putExtra(ExternalSiteWebView.EXTRA_TITLE, link.getName())
.putExtra(ExternalSiteWebView.EXTRA_URL, link.getUrl())
.putExtra(ExternalSiteWebView.EXTRA_SHOW_SIDEBAR, true);
startActivity(intent);
}
There was a problem hiding this comment.
Added the suggested simplification of the logic. Tested on a device with link IDs above 500 (normal and redirect links), works as expected.
Extract opening the link into openExternalLink() as suggested in review. Signed-off-by: about2crash <146389368+about2crash@users.noreply.github.com>
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
External link menu items are registered with
MENU_ITEM_EXTERNAL_LINK+ the link's local database_id. That column isAUTOINCREMENTand the link table is cleared and refilled on every refresh, so the IDs grow without bound. The click handler only accepted an offset of 0–100, so once the IDs passed that window every external link silently stopped responding, no error, and it never recovers.Dispatch on the menu group the items were registered under, and resolve the link by ID instead of by display name. The latter also fixes two links sharing a display name opening the same URL.
Reproduced with a link at local ID 501 (menu item 612): on master the tap logs
Unknown drawer menu item clickedand nothing happens.🧪 Testing
Verified manually on a device: with a link at local ID 501 in
external_links, the drawer entry does nothing on master and opens correctly with this change.Added
DrawerActivityIT#externalLinkWithIdBeyondLegacyRangeIsOpened, which inserts a link at ID 501 and asserts the drawer entry opensExternalSiteWebViewwith the link URL.🖼️ Screenshots
🏚️ Before (master)
record_before.mp4
🏡 After (this PR)
record_after.mp4
🏁 Checklist
🤖 AI (if applicable)