- Code viewer: the outline opens with a swipe from the left edge and closes
with a swipe left, with one pane or two.
- Side-by-side .h/.cpp: a draggable handle resizes the panes (20% to 80%).
- Directory listing reads Git tree objects instead of the contents endpoint,
which looked up the last commit of every entry.
- A listing that needs more than one request shows percent and count.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Repository names get a line to themselves; the repository, work and notification tabs lose their title; a today count on Home opens today's activity of that kind; the outline is a foldable tree of classes and methods without fields; Home can show only starred repositories and remembers the choice; settings has a light/dark/system theme choice.
Whether the app is dark is now the app's decision (UBGiteaTheme.isDark), so the logo moved off a -night drawable. 420 unit tests pass, lint reports 0 errors. Installed on the product owner's Z Fold7.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Four tabs in an app shell that becomes a rail from 600dp, a brighter sky-blue palette with the real UbiSam logo, a Home tab built on Gitea's activity feeds, a Work tab that searches issues and pull requests across repositories, a full-screen code viewer with search, outline and Visual Studio colors, C/C++ header/source pairing, and two-pane layouts for wide windows.
The five tasks were built and checked together, so they are one commit: MainActivity, the routes and the shared components belong to all of them. 409 unit tests pass, lint reports 0 errors. Verified on an emulator up to the sign-in screen only; no physical device was available.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Includes the two same-day follow-ups that fixed horizontal scrolling. See tasks/048-code-viewer-readability.md.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The header's 'Commit' button (onViewHistory) just switched
BranchDetailScreen's pager to page 1 -- the exact same action the
top-level 'Commit' tab's own onClick already performs. No path/file
info ever flowed through it, so it was never actually file-specific
history, just a duplicate shortcut that TASK-031's rename made obvious.
Removed the button, its parameter threading, and the now-unused
codebrowser_history string.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- '히스토리' label -> '커밋' across the branch-detail tab, code-browser
history button, and the one permission-denied sentence that used the
word, matching what that screen actually shows.
- SourceContentClassifier now tries EUC-KR (strictly, same discipline as
its existing UTF-8 attempt) before giving up, so legacy Korean-encoded
.cpp/.h source files render instead of failing as UnsupportedEncoding.
A byte sequence invalid in both charsets still correctly falls through.
- OkHttpTransport's default client is now one shared, longer-timeout
OkHttpClient (15s/30s/15s) instead of a fresh unconfigured OkHttpClient()
per call site -- fixes a large commit history/directory listing on this
app's home-NAS-hosted Gitea being misreported as offline purely because
it took longer than the previous 10s default to answer, and lets calls
to the same host reuse one connection pool instead of ~8 separate ones.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Opening a .pdf file (detected by %PDF- magic bytes) now renders its pages via
Android's built-in PdfRenderer -- no new dependency -- with the same
swipe-between-pages, pinch-zoom, pan, and double-tap-to-toggle-zoom
interaction as the image viewer. The shared gesture logic was extracted into
a ZoomableSwipeableBox composable so it's genuinely reused, not duplicated.
maxInputBytes raised 1MB -> 10MB so real-world photos and PDFs aren't
rejected as Oversized before ever being classified.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
TASK-027: opening an image (PNG/JPEG/GIF/BMP/WebP, detected by magic bytes)
now decodes and shows it, with swipe navigation to the previous/next image
in the same folder; opening a .csv file shows a scrollable table instead of
raw text. Both reuse the tab-swipe/content-scroll gesture-conflict fix so
neither ever triggers the Files/History tab to change underneath it.
TASK-028: the Issues/PR list shows up to 5 numbered page buttons plus a
[ page / total ] jump field, backed by Gitea's X-Total-Count header
(verified against Gitea's own source) and a server-side type=issues filter
so the count excludes pull requests. Every other paginated list is
unchanged, per this session's earlier scoping decision.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Branch/tag tap opens one screen with swipeable Files/History tabs (Route.BranchDetail replaces Route.CodeBrowser/Route.History)
- Repository rows show last-commit time; repository All/Favorites tabs are swipeable
- Fix overlapping commit-detail layout (BoxWithConstraints sibling stacking)
- Fix BranchDetailScreen tab row jammed against status bar
- Fix diff view horizontal scroll not working
- Simplify references-loading message; remove in-app back buttons in favor of system back gesture; replace manual refresh buttons with pull-to-refresh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Paginated commit history for the current ref, commit detail with
distinguished added/modified/deleted/renamed file status, bounded and
explicitly-truncated patch text, and a ref comparison flow validating
one entered ref against the currently open ref as base.
Reuses TASK-004's listCommits and this session's own TASK-009
HistoryRepository; no shared/domain file touched. Entry point is a new
history button on the existing code browser header.
Self-review caught and fixed a bug before writing tests: a failed
commit-detail fetch discarded which commit had failed, so retry
silently reloaded the whole list instead of re-fetching the commit the
user tried to open.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>