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>
4.6 KiB
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.HomeandRoute.Work, tab selection replacing the route stack, an unread-notification badge,BrandTopBar/ScreenTopBarand the shared elements inui/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.ktapp/src/main/java/com/ubisam/ubgitea/ui/app/src/main/java/com/ubisam/ubgitea/feature/repositories/RepositoryListScreen.ktapp/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
- Four tabs are reachable from every tab; the selected tab is marked by more than color.
- At 600dp and wider the tabs are a rail on the left instead of a bar at the bottom.
- Signed out, the app shows only the sign-in screen, with no tabs.
- Every screen below a tab has a visible back button and a title; system back still works.
- Back on a tab other than Home goes to Home; back on Home leaves the app.
- Settings and sign-out are reached from the profile menu on every tab.
- The route stack, including the new routes, survives being saved and restored.
- The logo is the supplied artwork, with a separate drawable for dark mode.
- No icon library or other dependency was added.
- 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
./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
adbduring 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.mdand 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.