Replaces the Material 3 screens with the Noo design system: warm
neutrals, one violet accent, pill controls, Schibsted Grotesk/
Instrument Sans, Lucide icons, no gradients/shadows.
- New lib/widgets/noo/ component kit (core, lists, files, media, nav,
overlays) plus lib/theme/design_tokens.dart for the color/type/space/
radius/motion tokens.
- Rebuilt the app shell (top/bottom bars, drawer, desktop sidebar and
toolbar), every tab (Files/Offline, Photos, Favorites, Recent,
Activity, Trash, Shares), Settings, the lock and login screens, the
media viewer, search, the details/share sheets, and the share-upload
and move/copy destination pickers.
- Added a design canvas (linked from DESIGN_SYSTEM.md) covering the
screens the spec didn't already describe, with matching Android and
iOS chrome; wrote up the approved recipes into DESIGN_SYSTEM.md §4.
- Removed now-dead legacy widgets (media_grid_tile, swipeable_item,
sync_status_badge, selectable_thumbnail) and updated
architecture.md/styling.md/standards.md to describe the new
structure and component/testing conventions.
- Added widget tests for the noo/ component kit.
This is a UI-only rework: no provider/model/service behavior changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Release builds now sign with a dedicated keystore (local
android/key.properties or CI secrets, both gitignored) instead of each
machine's own debug key, so a downloaded release APK can actually
update a previous install instead of failing with "App not installed"
(mismatched signature).
- The Files tab's "+" -> "Upload File" now goes through the same
ShareUploadView destination picker and background foreground-service
upload as receiving a file via Android's "Share to..." sheet, instead
of a separate blocking in-app-only upload path. Removed the
now-unused ServerProvider/NextcloudService.uploadFileFromPath.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Trigger on pushing a tag matching RC* instead of every push to main
- tag the commit you want built: git tag RC1 && git push origin RC1
- Rename the built APK to Noo-<version>.apk (from pubspec.yaml's version)
- Replace the plain artifact upload with akkuman/gitea-release-action,
which creates/updates a Gitea release named after the triggering tag
and attaches the versioned APK to it - the GitHub-flavored
actions/upload-artifact and release actions don't reliably work
against Gitea's own API, this one talks to Gitea natively
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
actions/upload-artifact@v4 speaks a newer artifact backend protocol
that Gitea Actions doesn't implement yet, failing with
GHESNotSupportedError even though this isn't GHES. v3 uses the older
protocol Gitea does support. The build itself (flutter analyze +
flutter build apk --release) already succeeded before this step.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Google removed the legacy standalone "tools" package from the Android
SDK repository (~Sep 2026); android-actions/setup-android@v3's default
packages list ("tools platform-tools") now fails its own sdkmanager
call for everyone. Pin packages: platform-tools instead - that's all
this step needs, flutter build fetches whatever platform/build-tools
versions it actually needs on its own.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Checks out, sets up JDK 17 + Flutter (stable) + Android SDK, runs
flutter analyze, then builds and uploads a release APK artifact.
Requires a registered Gitea Actions runner - see the setup notes
given alongside this commit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>