- Let Noo be picked as a source (Files + Photos) by other apps' native
file/photo pickers via Android's GET_CONTENT intent, mirroring the
existing "Share to Noo" plumbing: MainActivity.kt/PickIntentService/
PickRequest, ServerProvider.pickRequest/confirmPick/cancelPick, and
pick-mode tap handling in FilesView/PhotosView. While picking, the
bottom nav and MoreTabsButton are restricted to Files/Photos only.
- Fix two account bugs: testConnection() failures no longer delete a
still-valid stored app password (only an actual 401 does), and
switchAccount() now retries a nominally-active-but-logged-out account
instead of no-op'ing - both were silently locking users out of "Continue
as" with no way back in except removing and re-adding the account
(now exposed via login_view.dart's inline remove button).
- Fix the login WebView: clear cookies before every load so "Add Account"
can't silently reuse an existing session, and push it as a
non-animated route to avoid a known WebView-as-PlatformView black-screen-
on-pop issue under Impeller.
- Redesign the Files/Photos selection toolbar to take over the top app bar
entirely (SyncedHeaderScaffold.selectionBar) instead of sitting as a
second bar under the controls row, with a horizontally-scrollable,
uniformly-colored actions row and the same one-shot scroll-hint nudge
the controls row uses.
- Redesign ShareUploadView to share the same SyncedHeaderScaffold chrome
as every tab, with the uploading-file summary (marqueed via the new
shared MarqueeTitle widget) and upload button grouped into one
rounded/elevated bottom sheet.
- Restyle ShareSheet to open on the same DetailsHeader every other
per-item sheet uses, and fix a couple of small design-language drifts
(hardcoded text style, a non-rounded icon).
- Settings' account card: icon buttons with tooltips instead of text
buttons for refresh/logout/remove, divider removed.
App lock (local_auth) gates the app behind the OS's biometric/device
credential prompt via a new lock screen, layered on top of the existing
Nextcloud session rather than replacing it.
Multi-account support lets users save several Nextcloud logins and switch
between them (AccountStore, per-account browsing prefs, avatar swipe-to-
cycle); logout() now keeps an account's saved credentials/prefs intact so
it can be resumed from a "Continue as..." list, while removeAccount()
stays the only destructive path.
The account settings screen is redesigned around a single profile card
(avatar/name/email, server host, storage quota with groups) with
Refresh Cache/Logout/Remove actions, replacing the old separate "Server
Connection Info" section.
Also fixes activity-tab timestamps: the OCS Activity API reports time as
an ISO 8601 `datetime` string, not the numeric `timestamp` field the code
incorrectly assumed, which made every activity render as Jan 1 1970.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Revert the scrollbar-thumb feature entirely (per-view Scrollbar
wrappers and the ScrollbarThemeData override) - back to plain
scrollables with no visible thumb
- Settings: move the logout button into the profile card (next to the
name/email), and move the ONLINE/OFFLINE badge + "Connected to..."
text out of the top row into a combined line at the bottom of the
card, instead of split between the AppBar and the top of the screen
- Update architecture.md/styling.md to drop the stale scrollbar-theme
documentation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Add SavedAccount/AccountStore and rework ServerProvider around a list
of saved accounts: switch/remove/add, swipe-to-cycle on the avatar
button, per-account browsing prefs (sort/view/filters/cache), and a
session-generation guard so a stale fetch from an abandoned account
can't land in the newly active one
- Migrate existing single-account installs into the new schema
automatically so upgrading users stay logged in
- Settings gains an Accounts section; LoginView gains an "add account"
mode pushed on top of the main shell instead of replacing it
- Give every Scrollbar in the app a thicker, draggable, Android-style
thumb via a shared ScrollbarTheme instead of the default hairline
- Splash screen: use the monochrome app icon (tinted per theme) and a
smaller spinner
- Update CLAUDE.md and .claude/context/*.md to reflect the accumulated
multi-account, sharing, and UI changes across this session, and add
a standing instruction to keep these docs current going forward
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Accept Android's "Share to..." intent (ACTION_SEND/SEND_MULTIPLE) to
upload a shared file, with a new destination-folder picker screen
- Unlink Files/Photos sort settings and make Files remember sort
per folder (like per-folder view settings), instead of one shared
global sort field for both tabs
- Media viewer: show the file name (marquee-scrolling if too long) in
the top bar next to a resized back button, slide the top bar out of
view instead of fading it, and unify icon color/contrast across the
top bar, bottom action bar, and video transport controls
- Add a scrollbar thumb to every scrollable list in the app (all tab
views via SyncedHeaderScaffold, search results, settings, the new
upload folder picker, share sheet, and the Details sheet's tabs)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Remove peek details sheet from media viewer; scope Activity tab to
the current file via client-side filtering instead of unreliable
server-side query params
- Add file rename action (WebDAV MOVE); fix search result taps to
switch to Files tab and rebuild breadcrumbs from an absolute path
- Add swipe-to-delete confirmation dialog; fix a crash from disposing
the rename dialog's TextEditingController too early
- Rework pull-to-sync gesture so sync and lock-open thresholds fire
independently within one gesture, raise thresholds, and add a
classic Material refresh spinner
- Add "tap active tab to scroll to top" behavior with a settings toggle
- Align selection toolbar padding with the sort/filter controls row
- Replace app icon assets (adaptive icon + splash screen) with
updated IconKitchen export
- Replace the seek bar style dropdown with a Default/Wavy/Slim/Squiggly
preset picker, each rendered with a live, perpetually-animated
preview via a new shared SeekBarPainter/SeekBarPreview
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Major additions since the initial rebuild:
- New tabs: Trash, Shares, Recent, configurable tab visibility/order/default
- Nextcloud sharing: search users/teams, internal link, email shares,
public links, "others with access" - in its own Share bottom sheet
- Details bottom sheet (Info/Versions/Activity) with a persistent peek
panel in the media viewer, reachable from selection, swipe, and the
media viewer
- Files/Photos: tap-and-hold multi-select with a sticky selection toolbar,
swipe actions (favorite/delete/share), sticky sort/filter controls,
list/grid views, breadcrumb chips, whole-account Photos view
- Media viewer: pinch/double-tap zoom on images, predictive-back support,
fixed PDF zoom-out floor
- Settings: Material You theming incl. AMOLED black, configurable bottom
bar tabs, swipe actions, media seek bar style, and folder-listing cache
policy (never/periodic/manual) to cut down on refetching
- Login flow moved to an in-app Chrome Custom Tab with retry-tolerant
polling
- Replaced ad hoc widgets with native Material 3 equivalents (toggle
IconButtons, SliverAppBar selection toolbar, SearchBar, drag handles)
- Rebrand: app renamed to Noo throughout, package id -> dev.ayushya.noo,
new adaptive launcher icon
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replaces the starter template with Login Flow v2 auth, WebDAV-backed
Files/Photos/Activity tabs, a swipeable media viewer with PDF/text/video
preview, Material You dynamic theming, a frosted-glass floating nav bar,
and a rebranded app icon/identity (com.example -> family.nasa).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>