main
dev
chore/365-cut-1.2.1
fix/363-pin-db-path
feat/351-contact-settings-menu
feat/349-window-geometry
feat/355-migration-merge
integration/290-306-335
release/1.1.2-rc.3-allplatforms
fix/309-path-len-decode
chore/298-path-logging
fix/285-ingest-timelog
fix/252-block-outgoing-dm
feat/64-observer-config
feat/batch1-ux
chore/offband-rebrand
v1.2.1
v1.2.0
v1.1.2-rc.3-allplatforms
v1.1.2-rc.3
v1.1.2-rc.2
v1.0.0
observer-g2-rc3
observer-g2-rc4
observer-g2-rc5
observer-g2-rc6
observer-g2-rc7
observer-g2-rc8
observer-g2-rc9
v1.1.0-rc.1
v1.1.0-rc.2
v1.1.0-rc.3
v1.1.2-beta.1
v1.1.2-beta.2
v1.1.2-beta.3
v1.1.2-ble-test
v1.1.2-queuediag
v1.1.2-rc.1
v1.1.2-rc.1-b45-nearbyrep
v1.1.2-rc.1-b46-pathhash
v1.1.2-rc.1-b47-tracewidth
v1.1.2-rc.1-b48-repeatertrace
v1.1.2-rc.1-b49-maptrace
v1.1.2-rc.1-b50-tracefix
v1.1.2-rc.1-b51-originstrip
v1.1.2-rc.1-b52-channelqr
v1.1.2-rc.1-b53-viarepeater
v1.1.2-rc.1-b54-rxfed
v1.1.2-rc.1-b55-topology
v1.1.2-rc.1-b57-routeux
v1.1.2-rc.1-b58-toporeadout
v1.1.2-rc.3-b59-pathlen
${ noResults }
3 Commits (6ccbc71c208c8b91131d4fd00664f44e425c5770)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
6ccbc71c20 |
feat(#290): move Disconnect and Settings into the panel footer
Epic C, rescoped. The original plan was to eliminate the overflow menu and move everything into the drawer. An inventory showed that premise was wrong: the ellipsis is six different menus sharing an icon, and most of what they hold is screen-level (force flood mode, path management, delete all discovered). Those cannot live in a global nav panel, which has no notion of which contact or channel is meant. Only Disconnect and Settings are app-level, which is exactly why they were duplicated across three screens. Those move; everything else stays put. - AppShell gains optional onDisconnect / onSettings, rendered as a pinned footer in the nav panel. Disconnect keeps the error colour it had as a red menu entry, since it drops the radio connection. - Channels, Contacts and Map pass both and drop those two menu entries. - Map's overflow menu is removed entirely, having nothing left. - Channels keeps its menu only for Manage Communities, which was already conditional on having joined a community. - Contacts keeps its menu for Discovered contacts. - No detail screen menu is touched. Pinned on a wide screen, Disconnect and Settings are now visible without opening anything. flutter analyze clean, dart format clean, 469 tests pass. Not yet run on hardware. |
2 days ago |
|
|
5c95a768e0 |
fix(#289): make the nav panel pinnable inside a channel too
The channel chat screen had a plain Drawer bolted onto it, so the panel could only be pinned open on the four primary views. Pinning it while reading a channel is the wide-screen case that was actually asked for: keeping the channel list and its unread counts visible without pulling it out. - AppShell now serves pushed detail screens as well: selectedIndex and onDestinationSelected are optional, and the bottom bar is omitted when they are absent (a pushed chat screen has no bottom bar). - New appBarBuilder(context, pinned) lets a screen vary its app bar with the dock state. ChannelChatScreen uses it to drop its hamburger when the panel is already pinned open, since there is nothing left to summon. - ChannelChatScreen builds on AppShell instead of a bare Scaffold, so it gets the same transient/pinned layout as everything else. The four primary views are untouched; the new parameters are additive. flutter analyze clean, dart format applied. Not yet run on hardware. |
2 days ago |
|
|
431b93f0fd |
feat(#292): shared app shell with hamburger nav drawer and pin
Epic A of the navigation redesign (#102). Adds AppShell, which owns the bottom QuickSwitchBar that Channels, Contacts, Map and Line-of-Sight each mounted separately, plus a left nav drawer: a transient slide-out on narrow layouts and a dockable panel that can be pinned open at >= 720px. - New lib/widgets/app_shell.dart. Reuses the 720px breakpoint established by settings_shell.dart. Pinned wide lays the panel out beside the body (Row), unpinned uses a standard Scaffold drawer so the hamburger is injected automatically; automaticallyImplyLeading:false was removed from the four app bars to allow that. - Pin state persists via UiViewStateService.navDrawerPinned. The load is placed before the channel-sort block in initialize(), which returns early and would otherwise skip it. - drawerContent is an empty slot here; the channel list fills it in Epic B (#289). Per owner decisions on #102 (2026-07-16): the bottom bar stays a bottom bar at every width (no left rail), and the drawer carries no view switcher, since the bottom bar owns view switching. flutter analyze clean, dart format applied. Not yet run on hardware. |
2 days ago |