Features
- feat(secondary): allow zero app dock slots (#560) @RogueBurger
- feat(android): Added Super ZSNES as a standalone SNES launcher (#559) @n8jadams
- feat(game-list): add independent list sizing (#553) @ItsRetroPup
- feat(windows): autodetect common emulator installs (#518) @ItsRetroPup
- feat(android): add Android Apps tab layout (#526) @ItsRetroPup
- feat(retroachievements): overhaul profile and achievement navigation (#536) @ItsRetroPup
- feat(screenscraper): identify a wrongly matched game by searching ScreenScraper (#567) @Codegnosis
- feat(emulators): add Eden Duo for Android Switch (#596) @ItsRetroPup
- feat(settings): optionally ignore articles when sorting games (#572) @ItsRetroPup
- feat(game-list): add shortcut to game achievements page (#573) @ItsRetroPup
- feat(saves): manage NeoSync and RomM saves from one Saves tab (#582) @tobygrice
- feat(scan): detect extracted PS3 game folders as single games (#566) @aaron4567891-prog
- feat(games): page the games list with shoulder buttons (#581) @ItsRetroPup
- feat(settings): import custom navigation sounds (#583) @ItsRetroPup
- feat(emulators): add DroidDeck for Steam and Windows (#603) @aaron4567891-prog
- feat(android): add PokeDaisy GBA emulator (#607) @ItsRetroPup
- feat(themes): carry the NeoGlass appearance in the theme JSON (#622) @misobadev
- feat(themes): add the Dmg (Game Boy) built-in theme (#623) @misobadev
- feat(emulators): add the GooseStation RetroArch core for PS1 (#620) @ItsRetroPup
- feat(collections): add rule-based smart collections (#576) @ItsRetroPup
- feat(systems): consolidate systems actions into a left options menu (#643) @misobadev
- feat(games): consolidate game actions into a left options menu (#644) @misobadev
Fixes
- fix(screenscraper): require username (not email) and report real auth failures (#563) @misobadev
- fix(screenscraper): stop retrying an exhausted quota and double-freeing its slot (#556) @Codegnosis
- fix(pcsx2): adds -batch launch argument to desktop platforms (#554) @ItsRetroPup
- fix(input): stop the arrow keys moving Flutter's focus on desktop (#568) @Codegnosis
- fix(android): controller buttons act once, on press (#569) @Codegnosis
- fix(nav): stop disposed navigators listening for keys (#570) @Codegnosis
- fix(logging): close redaction gaps and stop masking error names (#575) @Codegnosis
- fix(ra): ignore notifications after the provider is disposed (#577) @Codegnosis
- fix(esde): find nested artwork when gamelist paths are absolute (#578) @Codegnosis
- fix(storage): keep saved sign-ins when the user-data folder moves (#579) @Codegnosis
- fix(settings): let the last ROM folder be removed (#587) @Codegnosis
- fix(library): remove only the removed folder's games (#588) @Codegnosis
- fix(storage): move custom themes and art packs with the user data (#589) @Codegnosis
- fix(themes): keep theme card captions inside their grid cells (#591) @Codegnosis
- fix(neosync): keep the notification socket in step with the account (#595) @Codegnosis
- fix(retroachievements): follow stacked card layout with D-pad navigation (#584) @ItsRetroPup
- fix(neosync): let the controller close the plan modals (#599) @Codegnosis
- fix(ui): preserve system artwork padding when logos are hidden (#585) @ItsRetroPup
- fix(ui): stop the NeoGlass rim bleeding across the screen on Windows (#606) @tobygrice
- fix(games): localise the play time reset notification (#615) @Codegnosis
- fix(ui): horizontal full battery glyph and no clock icon (#624) @misobadev
- fix(settings): translate the ES-DE import strings (#621) @Codegnosis
- fix(android): translate the Screen Return access strings (#626) @Codegnosis
- fix(scanning): translate the scan status messages (#627) @Codegnosis
- fix(android): translate the second screen's fixed English (#628) @Codegnosis
- fix(settings): wait for a running scan before removing a ROM folder (#612) @Codegnosis
- fix(games): localise the scrape flow's login and system messages (#613) @Codegnosis
- fix(macos): restore folder and file pickers after sandbox removal (#616) @ItsRetroPup
- fix(steamos): persist credentials across desktop and gaming modes (#608) @ItsRetroPup
- fix(android): boot multi-disc .m3u games on disc 1 in Dolphin and ARMSX2 (#618) @ItsRetroPup
- fix(settings): translate the ES-DE error messages (#630) @Codegnosis
- fix(config): put a setting back when its save fails (#632) @Codegnosis
- fix(setup): say so when finishing setup can't save (#631) @Codegnosis
- fix(romm): log why a ROM download failed (#633) @Codegnosis
- fix(setup): show the setup wizard's messages on screen (#634) @Codegnosis
- fix(tools): translate the orphan cleanup and show "nothing to do" as info (#636) @Codegnosis
- fix(settings): say so when removing a ROM folder fails, and don't half-remove it (#637) @Codegnosis
- fix(android): translate the second screen's times, points and tab names (#638) @Codegnosis
- fix(scan): translate the scan's messages about ROM folders (#639) @Codegnosis
- fix(settings): say so when adding a ROM folder fails, or it's already listed (#640) @Codegnosis
- fix(cards): improve carousel spacing and simplify the recent card (#641) @misobadev
- fix(games): give box art and media tabs more breathing room (#642) @misobadev
Maintenance
- test: stop two tests depending on the host's timezone and packages (#564) @RogueBurger
- refactor(retroachievements): remove game-list leaderboard tab (#571) @ItsRetroPup
- refactor(neosync): route every standalone emulator through custom save folders (#600) @misobadev
- test: keep test runs out of the real user-data folder (#619) @Codegnosis
- test: wait for the RA summary in the provider dispose tests (#625) @Codegnosis
Dependencies
- build(deps): bump the pub-dependencies group with 7 updates (#611) @dependabot[bot]
Other
- Feature/romm allow linking to existing roms (#516) @jonstump
- Update security contact email in SECURITY.md (#590) @misobadev
- Deleted ko-fi in FUNDING.yml (#592) @misobadev
- Remove Ko-fi donations and keep Patreon only (#593) @misobadev
Full Changelog: v0.14.0+130...v0.15.0+131