Repository navigation
Settings and admin: subscreens for accounts and About, announcement date pickers - #94
Merged
Merged
Conversation
The users section rendered every account inline, so on an instance with any real number of them the invite codes, announcements and maintenance sections below it were several screens down, and the search field had scrolled out of sight by the time you reached the results it filtered. The panel now carries a row with the account count that opens a screen holding the search field and nothing else. Search also waits for a pause in typing before asking: filtering is server-side, so "alex" used to be four requests, three of them stale on arrival.
Closes #89. The schedule fields wanted a hand-typed "2026-12-31T00:00:00Z". One typo and the server rejected the whole announcement, and getting it right meant doing the UTC conversion yourself. Both are now a checkbox, a date picker and a time row, seeded through the shared helpers that already keep the front-history picker from landing a day early. The invite code expiry had the same free-text field and gets the same treatment. Visible-while-logged-out has existed server-side since 0.2.0 and was simply absent from the Android models, so an announcement meant for the login page could only be set up from the web client. It is a checkbox in the editor and a marker in the list, matching the web. Unticking a schedule now sends the clear flag: PATCH treats an omitted timestamp as "leave it alone", so without it a removed start or expiry came straight back.
Closes #63. The About row packed version, commit, build time and flavour onto one ellipsised line, so on a narrow screen the commit was cut off and the only way to read it was to turn the phone sideways. Tapping it now opens a screen where each fact is its own row, wraps instead of truncating, and copies to the clipboard. It carries the full commit hash rather than the short one, since that is what a bug report wants, and a Server section with the instance address and whatever the instance reports about itself: version, tag, commit, build time and mode. A server that says nothing gets an explanation and a retry rather than a blank space, because "too old to answer" and "couldn't be reached" look identical from here.
The custom fields list put a privacy chip and three icon buttons in the row's trailing slot. ListItem hands that slot the width it asks for and gives the headline whatever is left, which on a narrow screen was about one character: "Primary Source(s)" rendered as a vertical column of letters. Reported from the field. The chip moves down beside the field type, where it has a line to itself, leaving only the three buttons trailing. The name is capped at two lines with an ellipsis so nothing added to that slot later can collapse it again. Same shape as the fix on a member's profile, and as the groups list, which never had the problem because it gives the name a weighted column of its own.
SiteRelEnby
enabled auto-merge
September 26, 2026 03:01
fullynocturnal
added a commit
that referenced
this pull request
Sep 26, 2026
#94 made TimeInputRow shared so every screen asks for a time of day the same way. Now that history uses the Material time picker, move it into ui/components as TimePickerButton and switch the admin schedule fields (announcement start and expiry, invite code expiry) over to it, so both screens still match. TimeInputRow has no callers left and is removed. Also adds changelog entries for the time picker and the shorter member list, and updates #94's entry to say time picker.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four settings and admin surfaces, all of them about giving things enough room.
Closes #63. Closes #89.
The account list is its own screen
It rendered every account inline, so on an instance with any real number of them the invite codes, announcements and maintenance sections were several screens down, and the search field had scrolled out of sight by the time you reached the results it filtered. The panel now carries a row with the account count that opens a screen holding the search field and the list, and nothing else.
Search waits for a pause in typing before asking. Filtering is server-side, so "alex" used to be four requests, three of them stale by the time they landed.
The user actions moved into their own view model rather than sharing the panel's, so opening the screen doesn't re-fetch stats, invites and announcements to show a list of accounts.
Announcement scheduling, and the login page (#89)
The start and expiry wanted a hand-typed
2026-12-31T00:00:00Z. One typo and the server rejected the whole announcement, and getting it right meant doing the UTC conversion yourself. Both are now a checkbox, a date picker and a time row, seeded through the same helpers that keep the front history picker from landing a day early. The invite code expiry had the identical field and gets the same treatment.visible_while_logged_outhas existed server-side since 0.2.0 and was simply absent from the Android models, so an announcement meant for the login page could only be set up from the web client. It's a checkbox in the editor and a marker in the list, matching the web.Unticking a schedule now sends the clear flag. PATCH treats an omitted timestamp as "leave it alone", so without it, removing a start or expiry looked like it saved and silently didn't.
About has a screen (#63)
The row packed version, commit, build time and flavour onto one ellipsised line, so on a narrow screen the commit was cut off and the only way to read it was to turn the phone sideways. Each fact is now its own row, wraps instead of truncating, and copies to the clipboard. It carries the full commit hash rather than the short one, since that's what a bug report wants.
There's a Server section with the instance address and whatever the instance reports about itself: version, tag, commit, build time and mode. A server that says nothing gets an explanation and a retry rather than a blank space, because "older than the version endpoint" and "couldn't be reached" look identical from the client.
Long custom field names
ListItemhands its trailing slot the width it asks for and gives the headline what's left. With a privacy chip and three icon buttons in there, a long field name was left a column one character wide and spelled itself vertically down the screen. The chip moves down beside the field type, and the name is capped at two lines so nothing added to that slot later can collapse it again.Same shape as the fix on a member's profile in 1.3.x. Groups never had it, because the name gets a weighted column of its own there; tags and front history don't use the pattern at all.
Testing
TimeInputRowmoved into the shared components package so the announcement editor and the front history sheet use one implementation rather than two copies.Three new contract tests cover the announcement wire format, including the clear flag and the snake_case mapping that would otherwise make the new checkbox a no-op. Nothing new for the two layout fixes: both were invisible to the compiler and the suite, and the honest answer for catching a third one is a screenshot harness rather than another hand-placed
maxLines.About verified on a device. The admin screens need a reachable backend and want a look before merge.