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>
134 lines
9.0 KiB
Markdown
134 lines
9.0 KiB
Markdown
# TASK-039: Design pass — app icon, visibility badge, header truncation, PR-label Korean-ization
|
|
|
|
Status: implemented; all required checks pass; live-confirmed on the human product owner's device
|
|
Owner: Claude
|
|
Reviewer: Codex
|
|
|
|
## Outcome
|
|
|
|
The human product owner asked for an open-ended design review: "디자인 수정해줄래? 앱의 아이콘부터
|
|
해서 전체적으로 확인해보고 부족한 부분 고쳐줘" (fix the design — starting with the app icon, review
|
|
the whole app and fix what's lacking). This task covers the first batch of concrete gaps found and
|
|
fixed while screen-by-screen reviewing the app (repository list, references/branches, work items,
|
|
notifications, settings) in both light and dark mode:
|
|
|
|
- **App icon**: the app had no custom launcher icon at all — Android's bare default was showing on
|
|
the home screen and app switcher. Added a full adaptive icon (background + foreground + monochrome
|
|
layers) with an original hand-drawn git-branch glyph on the app's own established primary green.
|
|
- **Repository visibility label**: the 공개/비공개 (public/private) text on each repository-list row
|
|
had no explicit style (rendered oversized/inconsistent next to the other metadata lines) and took a
|
|
full-width line. Replaced with a small rounded badge, matching the compact-chip look Gitea's own web
|
|
UI uses for the same information.
|
|
- **References screen header truncation**: a repository with a long owner/name combination (a real
|
|
one already in the human product owner's own Gitea instance) wrapped the title to 3 lines, pushing
|
|
the branch/tag list far down the screen. Capped it to 2 lines with an ellipsis.
|
|
- **"Pull Request" → "PR"**: two string resources (the work-items tab label, the notifications subject
|
|
label) were the only English text left in an otherwise fully-Korean UI, and were also the widest
|
|
word in a `Row` that doesn't wrap gracefully — on the live notifications list this visibly broke
|
|
"Pull Request" across two lines next to the state label. The rest of the app had already settled on
|
|
"PR" as the Korean-context abbreviation (`workitems_permission_denied`, `workitems_pr_refs`, etc.);
|
|
matched that.
|
|
|
|
## Scope
|
|
|
|
- Included: `mipmap-anydpi-v26/ic_launcher.xml`/`ic_launcher_round.xml` + their three drawable layers;
|
|
`AndroidManifest.xml`'s `android:icon`/`android:roundIcon`; `RepositoryListScreen.kt`'s new
|
|
`VisibilityBadge` composable and the references-header title's `maxLines`/`overflow`;
|
|
`strings_workitems.xml`/`strings_notifications.xml`'s `Pull Request` → `PR` string values.
|
|
- Excluded: no icon library was introduced (this app has never depended on
|
|
`androidx.compose.material.icons` — see Design notes); no change to `WorkItemsScreen.kt` to surface
|
|
which repository/branch a work-items or code-browser screen belongs to (a real gap noticed while
|
|
reviewing, but it needs new state threaded through the ViewModel/use-case layer, not just a view
|
|
change — flagged for a follow-up task rather than folded into this visual-polish batch); no explicit
|
|
in-app back button anywhere (deliberate, pre-existing, app-wide pattern — this device's own 3-button
|
|
system navigation already provides a visible back affordance, so this wasn't treated as a gap).
|
|
|
|
## Design notes
|
|
|
|
- **Original glyph, not Gitea's logo**: the launcher icon is a hand-drawn trunk-and-branch motif (a
|
|
straight line, a curved line, three circular nodes) built from plain vector primitives — deliberately
|
|
not a reproduction of Gitea's own trademarked logo.
|
|
- **Same green as the in-app theme**: the icon background reuses `GreenPrimaryLight` (`#3B6A1F`,
|
|
`ui/theme/Color.kt`) exactly, so the home-screen icon and the in-app Material 3 theme read as one
|
|
deliberate color choice rather than two unrelated greens.
|
|
- **Adaptive icon only, no legacy PNG mipmaps**: `minSdk` is 28 (> 26), so only the
|
|
`mipmap-anydpi-v26` adaptive-icon XML wrappers are needed; there is no pre-Android-8 device this app
|
|
can run on that would need a flat PNG fallback.
|
|
- **`VisibilityBadge` reuses the existing chip pattern**: a `Surface` + `RoundedCornerShape(4.dp)` +
|
|
`labelSmall` text, the same construction already used for `FilterChip` elsewhere in this screen —
|
|
not a new UI primitive, just the same small-badge shape applied to a second piece of metadata.
|
|
- **"PR" was already this app's own convention, not a new one**: `strings_workitems.xml` already used
|
|
"PR" in half a dozen other strings (`workitems_pr_refs`, `workitems_permission_denied`, the
|
|
"PR/이슈" button label on the repository-detail header) — only the tab label and the notifications
|
|
subject label had been left as the English "Pull Request". This was a one-line fix per file, not a
|
|
design decision made fresh here.
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] The app has a custom launcher icon (visible on the home screen and in Recents), not Android's
|
|
bare default.
|
|
- [x] The icon renders correctly as both a round and non-round adaptive icon shape.
|
|
- [x] Repository visibility (공개/비공개) renders as a small styled badge, not an unstyled full-width
|
|
text line.
|
|
- [x] A repository with a long owner/name combination shows a 2-line-max, ellipsized title on the
|
|
references screen instead of pushing the branch list down with a 3-line wrap.
|
|
- [x] No user-facing English text remains next to otherwise-Korean labels in the work-items tabs or
|
|
the notifications list.
|
|
- [x] Dark mode reviewed for the repository list and references screens: badges, selected-branch
|
|
highlighting, and text all stay legible with no contrast regressions.
|
|
- [x] Build, unit tests, and lint pass.
|
|
- [x] Live-confirmed on the human product owner's device for every change above.
|
|
|
|
## Required checks
|
|
|
|
```text
|
|
./gradlew compileDebugKotlin testDebugUnitTest assembleDebug lintDebug
|
|
```
|
|
|
|
## Evidence
|
|
|
|
- `app/src/main/res/drawable/ic_launcher_background.xml`, `ic_launcher_foreground.xml`,
|
|
`ic_launcher_monochrome.xml`; `app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml`,
|
|
`ic_launcher_round.xml`; `AndroidManifest.xml`'s new `android:icon`/`android:roundIcon`.
|
|
- `feature/repositories/RepositoryListScreen.kt`: new private `VisibilityBadge` composable, used in
|
|
place of the old unstyled `Text` for `repositories_private`/`repositories_public`; the references
|
|
header's repository-name `Text` gained `maxLines = 2, overflow = TextOverflow.Ellipsis`.
|
|
- `res/values/strings_workitems.xml`: `workitems_tab_pull_requests` changed from `Pull Request` to
|
|
`PR`. `res/values/strings_notifications.xml`: `notifications_subject_pull_request` changed the same
|
|
way.
|
|
- `./gradlew compileDebugKotlin testDebugUnitTest assembleDebug lintDebug`: BUILD SUCCESSFUL, all
|
|
unit tests passing, 0 lint errors (run twice — once after the icon/badge/truncation changes, once
|
|
after the PR-label change).
|
|
- Live device: installed over wireless `adb` after each round.
|
|
- App icon: screenshot-confirmed rendering cleanly in the Recents/task-switcher view.
|
|
- `VisibilityBadge`: screenshot-confirmed on the repository list — compact rounded badges (gray for
|
|
비공개, green-tinted for 공개) replacing the old full-width text line.
|
|
- Header truncation: screenshot-confirmed on `RobotAutomationDevelopment-Dept/LGE-OC6-Inline-CylinderTypeWelder-PRI-REPO`
|
|
(a real, already-long-named repository) — title now wraps to exactly 2 lines with a trailing
|
|
ellipsis instead of 3, and the branch/tag list starts noticeably higher on screen.
|
|
- PR label: screenshot-confirmed on the notifications "전체" tab against real data (a repository
|
|
with an actual PR/issue history) — every row now reads "PR" inline with "이슈"/"열림"/"닫힘"/"병합됨"
|
|
on one line instead of wrapping "Pull" and "Request" onto two.
|
|
- Dark mode: forced via `adb shell cmd uimode night yes`, screenshot-reviewed the repository list,
|
|
references, code-browser file tree, commit history list, and the colorized per-file diff view,
|
|
restored to `night no` afterward — no contrast or legibility issues found anywhere reviewed.
|
|
- Also reviewed without code changes (already well-designed, nothing to fix): the code-browser file
|
|
tree (폴더/파일 rows, breadcrumb), the commit history list, and the per-file diff view — which
|
|
already does proper red/green (`DiffAddedColor`/`colorScheme.error`) side-by-side 기존/변경
|
|
columns in monospace, in both light and dark mode.
|
|
|
|
## Known limitations
|
|
|
|
- Work-items and code-browser screens still don't show which repository/branch they belong to in
|
|
their own header — noticed during this review but scoped out (see Scope) since it needs new state
|
|
threaded through the ViewModel/use-case layer, not a view-only change.
|
|
- Dark-mode review now also covers the code browser and commit/diff screens (see Evidence above), but
|
|
not yet notifications/settings/work-items — those still need a dark-mode pass.
|
|
- Work-item and PR detail views with real content, and the text/image/CSV/PDF file viewers, haven't
|
|
been screen-reviewed yet — this task covers the batch of concrete fixes found so far, not a fully
|
|
complete pass.
|
|
|
|
## Review findings
|
|
|
|
None yet — no Codex review pending (Codex retired, 2026-09-29).
|