feat(android): 버블이 가사 상태와 오버레이 표시 여부를 명확히 알린다 - #29
Merged
Conversation
버블 테두리 색 하나에 번역 상태만 실려 있어, 정작 자주 궁금한 두 가지를 알 수 없었다 — 지금 가사를 찾는 중인지, 오버레이가 켜져 있는지. 채널을 셋으로 나눈다(한 채널에 여러 뜻을 겹치면 무엇이 바뀐 건지 읽을 수 없다). - 테두리 링 = 가사 상태. 검색 중이면 흐린 트랙 위로 악센트 호가 회전하고 (플레이스토어 다운로드 링과 같은 감각), 찾았으면 실선 밝게, 못 찾았으면 회색. 음표 글리프도 함께 흰색/회색으로 움직인다. - 안쪽 채움 = 오버레이가 지금 보이는가. 보이면 링 색으로 채우고 음표를 어두운색으로 반전한다. 투명도 0.75/1.0만 바꾸던 이전 방식은 밝은 배경 위에서 구분이 되지 않았다. 근거는 _bandExpanded가 아니라 실제 표시 여부(_bandVisible) — 펼쳐 뒀어도 일시정지·무가사면 밴드는 보이지 않는다. - 우상단 점 = 번역 예외(한도·실패 주황 / API 꺼짐 회색 / 정상은 점 없음). 링에서 밀려난 번역 상태를 잃지 않게 한다. 회전은 ValueAnimator가 아니라 핸들러 틱(16ms)으로 돈다 — 개발자 옵션에서 애니메이션 배율이 0이면 ValueAnimator는 즉시 끝나 스피너가 멈춘다. 검색 중에만 돌고 버블을 뗄 때 Stop()으로 확실히 멈춘다. 색은 사용자 팔레트(OverlayTextColor/OverlayKaraokeColor)를 따르고, 상태 문구를 ContentDescription으로도 넣어 TalkBack이 읽는다. 코어·엔진 무변경(골든룰). Release 빌드 경고 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
"표시 중"을 링 색(기본 흰색)으로 꽉 채워 알렸더니 버블이 불투명해져 뒤의 화면이 가려졌다. 채움은 가림과 직결되므로 상태 채널로 쓰지 않는다. - 안쪽 채움은 상태와 무관하게 오버레이 배경 설정(색·불투명도)을 따른다 — 밴드와 같은 재질로 보인다. 배경을 꺼 뒀으면 검정 45%, 불투명도가 아주 낮아도 25%까지만 내려간다(완전 투명이면 밝은 화면 위에서 음표가 안 읽힌다). - "지금 보이는가"는 링이 전담한다: 보이면 3dp + 안쪽 보조 링 + 완전 불투명, 안 보이면 2dp 단선 65%. 선택된 라디오 버튼과 같은 관례라 즉시 읽힌다. - 링이 굵어질 때 바깥 지름은 고정하고 안쪽으로만 자란다 — 안 그러면 상태가 바뀔 때마다 버블이 커졌다 작아졌다 한다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
두 가지를 고친다.
1) 링 표기 — 오버레이가 보일 때 링을 3dp·불투명으로 굵혀 놨더니 선이
도드라져 화면을 방해했다. 굵기(2dp)도 밝기(70%)도 상태에 따라 바꾸지
않고, 안쪽에 같은 선을 하나 더 그려 **줄 수만** 달라지게 한다.
2) 펼침/접힘 유지 — 곡이 바뀌면 밴드를 접고 있었다(_onTrackChanged,
0.3.0부터 있던 동작이며 이번 상태 표기 작업과는 무관하다). 곡이 넘어갈
때마다 버블을 다시 눌러야 했다. 펼침/접힘은 사용자가 버블 탭으로 정하는
상태이므로 직접 끄기 전까지 유지한다.
- 이동 모드는 옮기려면 밴드가 보여야 해 강제로 펼치지만, 끝나면 들어가기
전 상태로 되돌린다(_expandedBeforeMove).
- 설정 저장(ActionRefreshDisplay)도 접지 않는다 — 접는 건 버블 모드로
막 들어왔을 때(버블을 새로 붙일 때) 한 번뿐이다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
배경
버블 테두리 색 하나에 번역 상태만 실려 있었다(회색=API 꺼짐, 주황=실패, 흰색=정상). 그래서 정작 자주 궁금한 두 가지를 알 수 없었다 — 지금 가사를 찾는 중인지, 오버레이가 켜져 있는지. "표시 중"은 투명도 0.75/1.0 차이뿐이라 밝은 배경 위에서는 구분이 안 됐다.
한 채널에 여러 뜻을 겹치면 무엇이 바뀐 건지 읽을 수 없다. 채널을 셋으로 나눈다.
표기 규칙
음표 글리프 색도 가사 상태를 따라 흰색/회색으로 함께 움직인다(요청대로).
설계 판단 두 가지
_bandExpanded가 아니라 실제 표시 여부(_bandVisible) — 펼쳐 뒀어도 일시정지·무가사면 밴드는 보이지 않는다. 펼침 플래그로 칠하면 버블이 거짓말을 한다.ValueAnimator가 아니라 핸들러 틱(16ms) — 개발자 옵션에서 애니메이션 배율을 0으로 둔 기기에서는ValueAnimator가 즉시 끝나 스피너가 멈춘다. 틱은 검색 중에만 돌고, 버블을 뗄 때Stop()으로 확실히 멈춰 프레임 예약이 남지 않는다.그 밖에
OverlayTextColor, 검색 호 =OverlayKaraokeColor).ContentDescription으로도 넣어 TalkBack이 읽는다.Searching없이 바로Cache를 발행하므로 스피너가 깜빡이지 않는다(즉시 "찾음").Views/BubbleStatusDrawable.cs하나.검증
dotnet build -c Release경고 0, 서명 APK 산출(22.1MB) → 실기기 확인 예정.🤖 Generated with Claude Code