Files
sodalive-android/docs/20260324_라이브룸캡처녹화정합개선.md

3.5 KiB

20260324 라이브룸 캡처/녹화 정합 개선

구현 체크리스트

  • 기존 구현에서 FLAG_SECURE와 스크린샷/녹화 콜백 결합 지점을 다시 점검한다. (QA: LiveRoomActivity 캡처 보안 관련 함수 흐름 확인)
  • FLAG_SECURE 유지 기준으로 dead path인 스크린샷 콜백 경로를 제거한다. (QA: registerScreenCaptureCallback/관련 상태 플래그 제거 확인)
  • 녹화 상태 기반 강제 mute 경로만 유지되도록 로직과 주석을 정리한다. (QA: addScreenRecordingCallback 경로 단일화 확인)
  • Manifest에서 불필요해진 스크린샷 감지 권한을 제거한다. (QA: DETECT_SCREEN_CAPTURE 선언 제거 확인)
  • 진단/테스트/빌드 및 수동 QA 결과를 누적 기록한다. (QA: 실행 명령과 결과 로그 확인)

검증 기록

  • 2026-03-24
    • 무엇: 후속 정합 개선 작업 계획 문서를 생성했다.
    • 왜: 사용자 요청(더 나은/최신 방식 반영)에 맞춰 변경 범위와 완료 기준을 명확히 고정하기 위해서다.
    • 어떻게: docs/20260324_라이브룸캡처녹화정합개선.md 파일을 생성하고 체크리스트/검증 섹션을 작성했다.
  • 2026-03-24
    • 무엇: 스크린샷 콜백 경로를 제거하고 녹화 기반 강제 mute 경로만 유지하도록 구현을 단순화했다.
    • 왜: FLAG_SECURE를 유지하는 현재 전략에서 스크린샷 콜백 기반 강제 mute는 실질 동작하지 않는 dead path였기 때문이다.
    • 어떻게:
      • app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt에서 registerScreenCaptureCallback/unregisterScreenCaptureCallback 관련 함수, 스크린샷 상태 플래그(isScreenshotMuteActive) 및 타이머 상수/러너블을 제거했다.
      • 강제 mute 계산을 isScreenRecordingActive 단일 상태로 정리했다.
  • 2026-03-24
    • 무엇: Manifest에서 불필요 권한을 제거했다.
    • 왜: 스크린샷 콜백 경로를 제거했으므로 DETECT_SCREEN_CAPTURE 권한이 더 이상 필요하지 않다.
    • 어떻게: app/src/main/AndroidManifest.xml에서 <uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" /> 선언을 삭제하고 DETECT_SCREEN_RECORDING만 유지했다.
  • 2026-03-24
    • 무엇: 설계 근거와 실행 검증을 완료했다.
    • 왜: 변경이 실제로 dead path 제거 + 기존 보안 전략 유지를 만족하는지 객관적으로 확인하기 위해서다.
    • 어떻게:
      • 외부 근거 확인:
        • Android Activity.ScreenCaptureCallback 문구 "This is not invoked if the activity window has WindowManager.LayoutParams.FLAG_SECURE set."를 근거로 스크린샷 콜백 비동작 조건을 재확인했다.
        • WindowManager API 레퍼런스(addScreenRecordingCallback, SCREEN_RECORDING_STATE_VISIBLE, Added in API level 35)와 WindowManager.LayoutParams.FLAG_SECURE 레퍼런스를 확인해 녹화 상태 콜백/보안 플래그의 현재 문서 기준을 재점검했다.
      • 정적 진단:
        • lsp_diagnostics 결과: .kt/.xml LSP 서버 미구성으로 진단 불가, .md 파일은 diagnostics 없음.
      • 빌드/테스트:
        • 실행 명령: ./gradlew :app:testDebugUnitTest :app:assembleDebug
        • 결과: BUILD SUCCESSFUL
      • 수동 QA:
        • 실행 명령: python3 검증 스크립트(FLAG_SECURE 유지, 스크린샷 API 제거, recording-only mute 계산, Manifest 권한 정합 확인)
        • 결과: MANUAL QA PASS: FLAG_SECURE 유지 + dead screenshot path 제거 + recording-only mute flow verified.