Ubisam-MobileGit/tasks/050-app-shell-and-bright-sky-theme.md
choiminyeong d1a45abc16 TASK-050..054: tabs, Home, Work, code viewer, C++ pairs, fold layouts
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>
2026-09-28 14:35:00 +09:00

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.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

  • 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 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.