From 9ef2cb1731421f0af01510a3ca17daad27af6862 Mon Sep 17 00:00:00 2001 From: klaus Date: Thu, 2 Apr 2026 11:53:06 +0900 Subject: [PATCH] =?UTF-8?q?fix(mypage):=20=EC=BF=A0=ED=8F=B0=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=85=B8=EC=B6=9C=EA=B3=BC=20=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?=EB=B6=84=EA=B8=B0=EB=A5=BC=20=EC=A1=B0=EC=A0=95=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/mypage/MyPageFragment.kt | 38 ++++++++++----- ...20260402_쿠폰등록해외사용자본인인증예외.md | 47 +++++++++++++++++++ 2 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 docs/20260402_쿠폰등록해외사용자본인인증예외.md diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt index 92f397d3..745b08c4 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt @@ -403,7 +403,33 @@ class MyPageFragment : BaseFragment(FragmentMyBinding::inflat binding.btnIdentityVerification.root.visibility = View.INVISIBLE } - if (it.isAuth) { + binding.ivProfile.load(it.profileUrl) { + crossfade(true) + placeholder(R.drawable.ic_place_holder) + transformations(CircleCropTransformation()) + } + binding.tvNickname.text = it.nickname + + binding.tvCanAmount.text = (it.chargeCan + it.rewardCan).moneyFormat() + binding.tvPointAmount.text = it.point.moneyFormat() + + val shouldShowCouponButton = if (isKoreanUser) { + true + } else { + SharedPreferenceManager.isAdultContentVisible + } + + binding.btnCoupon.root.visibility = if (shouldShowCouponButton) { + View.VISIBLE + } else { + View.GONE + } + + if (!shouldShowCouponButton) { + return@observe + } + + if (it.isAuth || !isKoreanUser) { FunctionButtonHelper.setupFunctionButton( buttonView = binding.btnCoupon.root, iconRes = R.drawable.ic_my_coupon, @@ -431,16 +457,6 @@ class MyPageFragment : BaseFragment(FragmentMyBinding::inflat showAuthDialog() } } - - binding.ivProfile.load(it.profileUrl) { - crossfade(true) - placeholder(R.drawable.ic_place_holder) - transformations(CircleCropTransformation()) - } - binding.tvNickname.text = it.nickname - - binding.tvCanAmount.text = (it.chargeCan + it.rewardCan).moneyFormat() - binding.tvPointAmount.text = it.point.moneyFormat() } } diff --git a/docs/20260402_쿠폰등록해외사용자본인인증예외.md b/docs/20260402_쿠폰등록해외사용자본인인증예외.md new file mode 100644 index 00000000..1a53736d --- /dev/null +++ b/docs/20260402_쿠폰등록해외사용자본인인증예외.md @@ -0,0 +1,47 @@ +# 쿠폰 등록 버튼 노출 및 해외 사용자 본인인증 예외 수정 + +## 작업 목표 +- 마이페이지 `btnCoupon` 터치 시 한국 사용자는 기존처럼 본인인증이 필요하고, 한국이 아닌 사용자는 본인인증 없이 쿠폰 등록 화면으로 이동하도록 수정한다. +- 마이페이지 `btnCoupon`은 한국이 아닌 사용자에 한해 민감한 콘텐츠 보기 설정이 켜져 있을 때만 화면에 보이도록 수정한다. + +## 체크리스트 +- [x] AC1: `countryCode == "KR"` 이고 `isAuth == false`인 경우 기존처럼 인증 필요 토스트와 `showAuthDialog()`가 실행된다. + - QA: 한국 사용자 분기에서 기존 인증 요구 동작 유지 코드 확인 +- [x] AC2: `countryCode != "KR"` 이고 `isAuth == false`인 경우에도 `CanCouponActivity`로 이동한다. + - QA: 쿠폰 버튼 분기가 `isAuth || !isKoreanUser` 조건으로 허용되는지 코드 확인 +- [x] AC3: 이미 인증된 사용자는 국가와 무관하게 기존처럼 `CanCouponActivity`로 이동한다. + - QA: 인증 완료 사용자의 쿠폰 등록 진입 동작 유지 코드 확인 +- [x] AC4: 변경 파일 진단/검증 명령 결과를 기록한다. + - QA: `lsp_diagnostics`, 관련 Gradle 검증 명령 결과 기록 +- [x] AC5: `countryCode != "KR"` 이고 `SharedPreferenceManager.isAdultContentVisible == true`인 경우에만 `btnCoupon`이 화면에 보인다. + - QA: 비한국 사용자에서 `btnCoupon.root.visibility`가 민감한 콘텐츠 보기 설정값에 따라 제어되는지 코드 확인 +- [x] AC6: `countryCode != "KR"` 이고 `SharedPreferenceManager.isAdultContentVisible == false`인 경우 `btnCoupon`이 화면에 보이지 않는다. + - QA: 비한국 사용자에서 쿠폰 버튼이 `View.GONE` 처리되는지 코드 확인 +- [x] AC7: `countryCode == "KR"` 인 경우 쿠폰 버튼 노출과 기존 한국/비한국 클릭 분기는 유지된다. + - QA: 한국 사용자에서는 버튼이 계속 보이고, 클릭 시 기존 인증 분기가 유지되는지 코드 확인 + +## 검증 기록 +- 2026-04-02 + - 무엇/왜/어떻게: `MyPageFragment`의 쿠폰 등록 버튼은 기존에 `isAuth`만으로 진입 가능 여부를 판단해서 해외 사용자도 본인인증이 강제됐다. 한국 사용자만 인증이 필요하도록 `if (it.isAuth || !isKoreanUser)` 조건으로 최소 수정했다. + - 실행 명령/도구: + - `apply_patch(app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt)` + - `read(app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt)` + - `lsp_diagnostics(app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt)` + - `./gradlew :app:testDebugUnitTest :app:assembleDebug` + - 결과: + - `btnCoupon` 분기가 `it.isAuth || !isKoreanUser`로 반영되어 비한국 사용자는 미인증 상태에서도 `CanCouponActivity`로 진입하게 됐다. + - 한국 사용자이면서 미인증인 경우의 토스트 노출과 `showAuthDialog()` 호출 로직은 그대로 유지됐다. + - `.kt` 파일 대상 `lsp_diagnostics`는 현재 환경에 Kotlin LSP가 없어 실행 불가(`No LSP server configured for extension: .kt`)였다. + - `:app:testDebugUnitTest`, `:app:assembleDebug` 실행은 `BUILD SUCCESSFUL`로 완료됐다. +- 2026-04-02 + - 무엇/왜/어떻게: 추가 요구사항에 따라 쿠폰 버튼 자체 노출은 한국이 아닌 사용자에게만 민감한 콘텐츠 보기 설정을 따르도록 조정했다. `isKoreanUser`면 항상 버튼을 보여 주고, 비한국 사용자는 `SharedPreferenceManager.isAdultContentVisible`이 `true`일 때만 버튼을 보이게 하며, 숨겨질 때는 `return@observe`로 클릭 설정도 중단했다. + - 실행 명령/도구: + - `apply_patch(app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt)` + - `read(app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt)` + - `lsp_diagnostics(app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt)` + - `./gradlew :app:testDebugUnitTest :app:assembleDebug` + - 결과: + - 비한국 사용자는 `SharedPreferenceManager.isAdultContentVisible` 값에 따라 `btnCoupon.root.visibility`가 `View.VISIBLE` 또는 `View.GONE`으로 제어된다. + - 한국 사용자는 쿠폰 버튼이 계속 노출되고, 기존 인증 기반 클릭 분기도 유지된다. + - `.kt` 파일 대상 `lsp_diagnostics`는 현재 환경에 Kotlin LSP가 없어 실행 불가(`No LSP server configured for extension: .kt`)였다. + - `:app:testDebugUnitTest`, `:app:assembleDebug` 실행은 `BUILD SUCCESSFUL`로 완료됐다.