Skip to content

feat(downloads): remove downloads by swipe or multi-select in the Downloaded list - #2709

Merged
maxrave-dev merged 6 commits into
maxrave-dev:devfrom
cuong-tran:delete-download
Nov 3, 2026
Merged

maxrave-dev merged 6 commits into
maxrave-dev:devfrom
cuong-tran:delete-download

Conversation

@cuong-tran

@cuong-tran cuong-tran commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

What & why

The only way to remove one downloaded song was the song menu's "Downloaded" toggle, which few people find (#2176), and there was no way to remove several at once. This adds both to Library › Downloaded:

  • Swipe left on a song to remove its download. A red trash icon shows under the row, and it fires only once the row is dragged all the way, like the existing swipe right for Add to queue, which is unchanged.
  • Multi-select (long press) gets a red Remove download row in its actions sheet. The Download row is hidden on this list, since everything in it is already downloaded.
  • Song menu (⋯): the download row now names what a tap does: Remove download for a downloaded song (was "Downloaded") and Cancel download while it downloads (was "Downloading"). The icon still shows the state.

Removed songs leave the list at once, because the Downloaded list is read once rather than observed, and they leave the search results too while searching. There is no confirmation, matching the song menu's toggle and Remove from playlist, and one toast covers a whole batch. Removal runs off the main thread, since on Desktop each one scans the downloads folder.

Two fixes to the shared song row (SongFullWidthItems) came along: a swipe that is cancelled, or interrupted because the row starts playing or selection starts, now springs back instead of leaving the row pushed aside; and in right-to-left languages the row now follows the finger (offset {} mirrors there while drag amounts stay physical).

Needs maxrave-dev/core#43. Without it, a download removed on Android could be written back as "downloading": Media3 reports STATE_REMOVING first, which DownloadUtils read as downloading, and the removed song never left its download map. This PR does not bump core; bump it once #43 is merged.

Notes for review:

  • Downloaded rows now swipe both ways (toward the end: Add to queue; toward the start: remove download).
  • New strings remove_download and cancel_download, English only; translations go through Crowdin. Until then, other languages show these two in English where the menu used to show a translated "Downloaded" or "Downloading".
  • On Desktop, Cancel download resets the song but does not stop the transfer yet, so the song comes back as downloaded when it finishes. That was already the case behind the old "Downloading" label, and it needs its own core fix.
  • Removing a Smart download still lets the next daily pass download it again while it stays among the most played, the same as removing it from the song menu.

Linked issue

Closes #2176

Checklist

  • This PR addresses an accepted issue (linked above)
  • I wrote or personally reviewed every line of this change
  • I tested it on Android and MacOS

Tested on both. Android: debug build on an emulator, with core#43 included, removing songs by swipe and by multi-select; afterwards the removed songs had no files left in the download cache, no Media3 download record, and downloadState 0, with none stuck at downloading. Desktop: the macOS build.

Screenshots

Screenshot 2026-10-19 at 13 41 34 Screenshot 2026-10-19 at 13 41 18 Screenshot 2026-10-19 at 13 35 57 Screenshot 2026-10-19 at 13 35 33 image

…move its download, add Remove download to that list's multi-select sheet in place of Download, keep search results in step with removals and spring a cancelled swipe back
…n thread, since Desktop scans the downloads folder once per song
…drag, which happens when the row starts or stops playing or selection starts, instead of leaving it pushed aside
…anguages, where offset mirrors but drag amounts stay physical, so a swipe toward the end reveals Add to queue and one toward the start reveals delete, as in left-to-right
Downloaded becomes Remove download, and Downloading becomes Cancel download. The icon already shows the state, and a label that only repeated it hid the one place a single download could be removed (maxrave-dev#2176).
@maxrave-dev
maxrave-dev merged commit c947576 into maxrave-dev:dev Nov 3, 2026
2 checks passed
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 this pull request may close these issues.

Delete Issue in download section

2 participants