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>
82 lines
4.6 KiB
Markdown
82 lines
4.6 KiB
Markdown
# TASK-050: App shell: four tabs, bright sky theme, real logo
|
|
|
|
Status: implemented; required checks pass; not yet confirmed on a device
|
|
Owner: Claude
|
|
Reviewer: human product owner
|
|
|
|
## Outcome
|
|
|
|
The human product owner asked for a UI that fits Git work as a whole ("전체적인 Git 관리에 맞는 UI/UX
|
|
디자인과 메인 화면"), in bright sky blue and white, designed in Claude Design first
|
|
(https://claude.ai/artifact/GoyQAsJK1kCckiLEthrzcR). This task builds the frame every later screen
|
|
sits in: four tabs (홈 / 저장소 / 작업 / 알림) along the bottom, or down the left edge once the window
|
|
is 600dp wide; a header on every tab that shows the UbiSam logo, the Gitea host and the account; a
|
|
visible back button on every screen below a tab; and a brighter palette than TASK-045's.
|
|
|
|
## Scope
|
|
|
|
- Included: `AppShell` (bottom bar / navigation rail), `Route.Home` and `Route.Work`, tab selection replacing
|
|
the route stack, an unread-notification badge, `BrandTopBar` / `ScreenTopBar` and the shared
|
|
elements in `ui/components`, the app's own stroke icon set (`res/drawable/ic_ub_*.xml`), the
|
|
palette and extended status colors, the real logo as a light and a night drawable, and the
|
|
existing screens (repository list, notifications, repository work items, settings) restyled to
|
|
match.
|
|
- Excluded: the content of the Home and Work tabs (TASK-051, TASK-052); the code viewer (TASK-053).
|
|
|
|
## Writable paths
|
|
|
|
- `app/src/main/java/com/ubisam/ubgitea/MainActivity.kt`
|
|
- `app/src/main/java/com/ubisam/ubgitea/ui/`
|
|
- `app/src/main/java/com/ubisam/ubgitea/feature/repositories/RepositoryListScreen.kt`
|
|
- `app/src/main/java/com/ubisam/ubgitea/feature/notifications/`
|
|
- `app/src/main/java/com/ubisam/ubgitea/feature/workitems/`
|
|
- `app/src/main/java/com/ubisam/ubgitea/feature/settings/`
|
|
- `app/src/main/res/`
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] Four tabs are reachable from every tab; the selected tab is marked by more than color.
|
|
- [x] At 600dp and wider the tabs are a rail on the left instead of a bar at the bottom.
|
|
- [x] Signed out, the app shows only the sign-in screen, with no tabs.
|
|
- [x] Every screen below a tab has a visible back button and a title; system back still works.
|
|
- [x] Back on a tab other than Home goes to Home; back on Home leaves the app.
|
|
- [x] Settings and sign-out are reached from the profile menu on every tab.
|
|
- [x] The route stack, including the new routes, survives being saved and restored.
|
|
- [x] The logo is the supplied artwork, with a separate drawable for dark mode.
|
|
- [x] No icon library or other dependency was added.
|
|
- [x] Build, unit tests and lint pass.
|
|
- [ ] Confirmed on the human product owner's device (phone and unfolded Z Fold).
|
|
|
|
## Security and privacy
|
|
|
|
No additional concerns. No OAuth, token or network code is changed by this task.
|
|
|
|
## Required checks
|
|
|
|
```text
|
|
./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug
|
|
```
|
|
|
|
## Evidence
|
|
|
|
Recorded on 2026-09-28 in the worktree `awesome-pascal-3f2ada`, with Android Studio's bundled JDK (`D:\AndroidStudio\jbr`, OpenJDK 21). TASK-050 to TASK-054 were built together and checked together:
|
|
|
|
- `./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug` -- passed.
|
|
- Unit tests: 409 in 45 suites, 0 failures, 0 errors (289 before this work).
|
|
- Lint: 0 errors, 55 warnings (dependency updates, unused resources, KTX suggestions).
|
|
- Emulator (API 36, `sdk_gphone64_x86_64`): the debug APK installs and launches without a crash and shows the sign-in screen with the logo and the new palette. Nothing past sign-in could be reached: that needs a company account.
|
|
- Not done: any check on a physical device. None was visible to `adb` during this work.
|
|
- New tests: `RouteEncodingTest` (13), `RelativeTimeTest` (6).
|
|
- Found on the emulator and fixed: centered Korean messages broke in the middle of a word; they now use `LineBreak.Heading`.
|
|
- The four existing screens were restyled by a delegated worker from `handoff/2026-09-28_restyle-existing-screens.md` and compiled and reviewed here.
|
|
- Unit tests were written by a delegated worker from `handoff/2026-09-28_unit-tests-redesign.md`; the full run above was repeated here afterwards.
|
|
|
|
## Known limitations
|
|
|
|
- The supplied logo file had opaque white around and inside its letters; the app uses a version with that made transparent. The dark-mode logo lightens the grey of "Ubi" so it shows on a dark surface; the product owner approved that on 2026-09-28.
|
|
- White text on the brand blue (#2F98F9) is about 3:1, so labelled controls use the deeper #0A6FD8 and the brand blue is kept for marks that carry no text.
|
|
|
|
## Review findings
|
|
|
|
None yet.
|