Ubisam-MobileGit/tasks/040-repository-list-header-overflow-menu.md
choiminyeong f6ac20c8ed TASK-063: task records say what is actually open
No task waits on a Codex review; the redesign tasks are confirmed on the
product owner's Z Fold7; TASK-016's leftovers are on hold; no biometric
reauthentication.

Agent: main (opus)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 20:25:49 +09:00

4.2 KiB

TASK-040: Replace repository-list header buttons with a single overflow menu

Status: implemented; all required checks pass; live-confirmed on the human product owner's device (light and dark mode) Owner: Claude Reviewer: Codex

Outcome

The human product owner asked to stop adding more always-visible buttons to the repository list's top bar and instead collapse 설정/알림/로그아웃 (Settings/Notifications/Logout) behind a single hamburger-style overflow menu button: "UI에 버튼 이런거 만들지말고 햄버거 버튼인가? 그런거 해서 거기서 눌러서 설정창, 로그아웃, 알림 이런거 확인 할 수 있게 해줘."

RepositoryListScreen.kt's main header now shows one button (a "☰" glyph) instead of three OutlinedButtons. Tapping it opens a DropdownMenu with three items — 설정, 알림, 로그아웃 — each calling the same existing callback (onViewSettings/onViewNotifications/onLogout) the three buttons already called; no navigation or ViewModel wiring changed, only how the trigger is presented.

Scope

  • Included: feature/repositories/RepositoryListScreen.kt — new private OverflowMenuButton composable, RepositoryContent's header Row now calls it instead of three OutlinedButtons.
  • Excluded: the references (repository-detail) screen's lone 로그아웃 button was left as-is — it's a single button in a different context (viewing one repository, not the account-level menu group), not the three-button cluster the human product owner was referring to. No change to any ViewModel/use-case/navigation code — this is a presentation-only change reusing the exact same three callbacks.

Design notes

  • Unicode glyph, not an icon library: this app has never depended on androidx.compose.material.icons (see CLAUDE.md's established convention) — the trigger button uses the plain "☰" character the same way ★/☆ are already used elsewhere for favorites, not a drawable/vector icon asset.
  • Same three callbacks, just regrouped: OverflowMenuButton takes the exact same onViewSettings/onViewNotifications/onLogout lambdas RepositoryContent already received — this is purely how they're triggered from the UI, not a change to what they do.

Acceptance criteria

  • The repository list's top bar shows one overflow-menu button instead of three separate buttons.
  • Tapping it opens a dropdown with 설정/알림/로그아웃; each item navigates exactly like its old button did.
  • Build, unit tests, and lint pass.
  • Live-confirmed on the human product owner's device: the "☰" button renders cleanly next to the title (both portrait and the foldable's unfolded landscape layout), the dropdown opens with all three items, and 설정 correctly navigates to the Settings screen. Re-checked in dark mode too.

Required checks

./gradlew compileDebugKotlin testDebugUnitTest assembleDebug lintDebug

Evidence

  • feature/repositories/RepositoryListScreen.kt: new private OverflowMenuButton(onViewSettings, onViewNotifications, onLogout) (an IconButton showing "☰" plus a DropdownMenu with three DropdownMenuItems); RepositoryContent's header now calls it in place of the three OutlinedButtons it used to render directly.
  • ./gradlew compileDebugKotlin testDebugUnitTest assembleDebug lintDebug: BUILD SUCCESSFUL, all unit tests passing unmodified (no test referenced the old buttons' text/structure), 0 lint errors.
  • No androidTest UI-test suite exists in this project to update — only JVM unit tests, which don't touch Compose UI structure.
  • Live device: installed over wireless adb once debugging resumed. Screenshot-confirmed the "☰" button next to the title in both portrait and the foldable's unfolded landscape layout; opened the dropdown (설정/알림/로그아웃 all visible and correctly positioned); tapped 설정 and confirmed it navigated to the Settings screen exactly like the old button did. Repeated the button + dropdown check with adb shell cmd uimode night yes — both render with good contrast in dark mode; restored to night no afterward.

Known limitations

None outstanding for this task.

Review findings

None yet — no Codex review pending (Codex retired, 2026-09-29).