Notable changes
- Learn chess basics
- Practice chess feature
- New translations
What's Changed
- Implement learn feature by @veloce in #3681
- feat: add button to create a new study by @tom-anders in #3533
- fix custom background selection by @HaonRekcef in #3701
- migrate markdown package to material_ui by @HaonRekcef in #3705
- don't throw unnecessary Exceptions in search screen by @HaonRekcef in #3702
- Team updates by @HaonRekcef in #3700
- feat: button to add PGN to study in analysis screen by @tom-anders in #3698
- New Crowdin mobile translations by @github-actions[bot] in #3703
- New Crowdin lila sources and translations by @github-actions[bot] in #3685
- Build Android CI targets on ubuntu instead of macOS by @slick-daddy in #3715
- Cancel the eval stream subscription of a replaced eval request by @slick-daddy in #3718
- refactor: extract EngineToggleButton to dedup toggle guard across bottom bars by @slick-daddy in #3716
- Share one JSON row helper across storages by @slick-daddy in #3714
- Index openings.epd for per-position lookup by @slick-daddy in #3713
- Remove unused downloadFiles and deprecated appThemeSeed by @slick-daddy in #3721
- refactor: move view contracts to model by @slick-daddy in #3724
- ci: improve workflow triggers and enable Flutter cache in build/deploy by @slick-daddy in #3731
- Unify duplicated NAG annotation tables by @slick-daddy in #3728
- fix(engine): compare Maia weight file claims by URI, not path by @slick-daddy in #3723
- Log swallowed catch failures by @slick-daddy in #3726
- Accept FENs with illegal positions in the board editor by @jmr in #3687
- Don't restart the move-expiration timer on unrelated rebuilds by @slick-daddy in #3664
- Refactor FCM open handling and foreground display by @slick-daddy in #3732
- fix: guard controller entry points against state without value by @slick-daddy in #3730
- fix: use exact host check in onLinkifyOpen by @slick-daddy in #3725
- disable links on the About page when offline by @vidya-gamer in #3708
- Rebase withClientCacheFor/withAggregatorCacheFor on RefExtension.cacheFor by @slick-daddy in #3727
- fix: refresh following list after unfollow from profile by @slick-daddy in #3720
- Practice feature by @veloce in #3689
- Localize hardcoded UI strings with new mobile translations by @slick-daddy in #3712
- New Crowdin mobile translations by @github-actions[bot] in #3751
- New Crowdin lila sources and translations by @github-actions[bot] in #3752
- fix: sync swipe unfollow following list by @slick-daddy in #3734
- fix: clean up superseded openings databases before copying by @slick-daddy in #3736
- Move Speed, Perf and Variant icons out of the model layer by @slick-daddy in #3739
- Send email login credentials in POST body instead of query string by @slick-daddy in #3722
- fix: blink next mistake button in retro review (#2953) by @Kaemiemi in #3759
- fix engine button popup bug by @vidya-gamer in #3696
- Bump protobufjs from 7.6.0 to 7.6.6 in /scripts/firebase by @dependabot[bot] in #3709
- Bump the ci-dependencies group across 1 directory with 2 updates by @dependabot[bot] in #3707
- Persist friend sort by @andy-ife in #3733
- Bump rubyzip from 2.4.1 to 3.4.0 in /android by @dependabot[bot] in #3760
- Bump rubyzip from 2.4.1 to 3.4.0 in /ios by @dependabot[bot] in #3745
- Make it easier to find saved themes when offline by @vidya-gamer in #3756
- Remove unrequired abiFilters in build.gradle.kts by @julien4215 in #3750
- Add date range selection to opening explorer by @veloce in #3764
- ci: cancel superseded PR runs so only latest commit is tested by @slick-daddy in #3763
- Fix stats page title overflowing on long translations by @jkartiwa in #3766
- test: assert selection state instead of nonexistent keys by @slick-daddy in #3740
- Fix layout jumping on the home screen by @raylillywhite in #3747
- New Crowdin mobile translations by @github-actions[bot] in #3773
- New Crowdin lila sources and translations by @github-actions[bot] in #3772
- Disambiguate server analysis request refusals by @slick-daddy in #3748
- clean up ignores that do not suppress any diagnostic by @vidya-gamer in #3776
- Dismiss promotion selector when navigating on the analysis board by @jkartiwa in #3777
- Only rebuild app theme on theme-relevant preference changes by @slick-daddy in #3767
- Persist time controls by @andy-ife in #3774
New Contributors
- @jmr made their first contribution in #3687
- @Kaemiemi made their first contribution in #3759
- @jkartiwa made their first contribution in #3766
- @raylillywhite made their first contribution in #3747
Full Changelog: v0.28.4...v0.29.1