From 66acc7474e2280bc23d47a856891343fc778ace1 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Mon, 26 Jan 2026 15:27:39 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=95=8C=EB=A6=BC=20=EC=8A=A4?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=ED=86=A0=EA=B8=80=20=EC=8B=9C=20=EC=A6=89?= =?UTF-8?q?=EC=8B=9C=20=ED=86=A0=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/mypage/MyPageFragment.kt | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt index 502b98ce1..4b33f712d 100644 --- a/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt +++ b/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt @@ -63,6 +63,7 @@ class MyPageFragment : BaseFragment(ScreenId.MYPAGE_MAIN) override fun onResume() { super.onResume() myPageViewModel.fetchMyInfo() // 닉네임 변경 등으로부터 복귀 시 정보 갱신 + checkNotificationPermissionChange() // 설정 화면에서 돌아왔을 때 권한 상태 확인 } private fun setupObservers() { @@ -105,6 +106,11 @@ class MyPageFragment : BaseFragment(ScreenId.MYPAGE_MAIN) binding.tvNickname.text = "닉네임을 설정해주세요" } + // 초기 권한 상태 저장 (처음 로드될 때만) + if (lastNotificationPermissionState == null) { + lastNotificationPermissionState = checkNotificationPermission(requireContext()) + } + // 알람 스위치 (리스너 잠시 해제 후 값 반영) binding.alarmSwitch.setOnCheckedChangeListener(null) binding.alarmSwitch.isChecked = state.isAlarmOn @@ -114,13 +120,9 @@ class MyPageFragment : BaseFragment(ScreenId.MYPAGE_MAIN) } private fun handleAlarmSwitchChange(isChecked: Boolean) { - val nowDatetime = LocalDateTime.now() - val formattedDate = nowDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")) - if (isChecked) { if (checkNotificationPermission(requireContext())) { myPageViewModel.setNotificationOn() - showInfoToast(getString(R.string.toast_notification_enable, formattedDate)) } else { showNotificationPermissionDialog() // 권한 미허용이면 스위치 원복 @@ -132,7 +134,6 @@ class MyPageFragment : BaseFragment(ScreenId.MYPAGE_MAIN) } } else { myPageViewModel.setNotificationOff() - showInfoToast(getString(R.string.toast_notification_disable, formattedDate)) } } @@ -220,6 +221,28 @@ class MyPageFragment : BaseFragment(ScreenId.MYPAGE_MAIN) } else true } + private var lastNotificationPermissionState: Boolean? = null + + private fun checkNotificationPermissionChange() { + val currentPermissionState = checkNotificationPermission(requireContext()) + + // 이전 권한 상태가 저장되어 있고, 현재 상태와 다른 경우에만 토스트 표시 + if (lastNotificationPermissionState != null && lastNotificationPermissionState != currentPermissionState) { + val nowDatetime = LocalDateTime.now() + val formattedDate = nowDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")) + + if (currentPermissionState) { + showInfoToast(getString(R.string.toast_notification_enable, formattedDate)) + myPageViewModel.setNotificationOn() + } else { + showInfoToast(getString(R.string.toast_notification_disable, formattedDate)) + myPageViewModel.setNotificationOff() + } + } + + lastNotificationPermissionState = currentPermissionState + } + private fun showLogoutDialog() { requireContext().run { showDialog("로그아웃", "로그아웃 하시겠습니까?") { From 547ab83814dedc50ea38085870fd530c1eeef9ef Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Mon, 26 Jan 2026 15:29:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20MainActivity=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EA=B0=84?= =?UTF-8?q?=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/eatssu/android/presentation/MainActivity.kt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt b/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt index a007b5a29..0a7897488 100644 --- a/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt +++ b/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt @@ -110,17 +110,13 @@ class MainActivity : BaseActivity( ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) - val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()) - if (requestCode == 1000) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 권한이 승인됨 - showInfoToast("EAT-SSU 알림 수신을 동의하였습니다.") - myPageViewModel.setNotificationOn() //바로 알림 받도록 설정 + myPageViewModel.setNotificationOn() } else { // 권한이 거부됨 - showInfoToast("EAT-SSU 알림 수신을 거부하였습니다.\n$dateFormat") - myPageViewModel.setNotificationOff() //바로 알림 받도록 설정 + myPageViewModel.setNotificationOff() } } } From 2ef20d769106683e9ebb34878dc6dd0e2866112b Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Tue, 3 Mar 2026 19:33:20 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EB=84=A4=EC=9D=B4=ED=8B=B0=EB=B8=8C?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=EC=B0=BD=20=ED=97=88=EC=9A=A9/=EA=B1=B0?= =?UTF-8?q?=EB=B6=80=20=EC=8B=9C=20=EA=B2=B0=EA=B3=BC=20=ED=86=A0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=9C=EB=A0=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/eatssu/android/presentation/MainActivity.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt b/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt index 0a7897488..90f574e06 100644 --- a/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt +++ b/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt @@ -33,6 +33,8 @@ import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.Locale import javax.inject.Inject +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter @AndroidEntryPoint @@ -111,11 +113,16 @@ class MainActivity : BaseActivity( super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == 1000) { + val nowDatetime = LocalDateTime.now() + val formattedDate = nowDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")) + if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 권한이 승인됨 + showInfoToast(getString(R.string.toast_notification_enable, formattedDate)) myPageViewModel.setNotificationOn() } else { // 권한이 거부됨 + showInfoToast(getString(R.string.toast_notification_disable, formattedDate)) myPageViewModel.setNotificationOff() } }