Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

알림수집기 앱의 수정 이력...

Billcorea 2026. 4. 8. 15:33

 

작업 개요

오늘은 AGENTS.md 정리와 일일 알림 기능 점검/보완 작업을 진행했다.
주요 목표는 AI 에이전트 문서의 한국어 가독성을 높이고, 앱이 실행 중이 아니어도 매일 지정된 시간에 알림 대상이 있는지 확인하여 알림을 노출하도록 만드는 것이었다.

1. AGENTS.md 정리

작업 내용

  • 기존 루트 AGENTS.md를 기준으로 코드 구조를 다시 확인했다.
  • 프로젝트 특성에 맞는 한국어 메모를 각 섹션 아래에 보강했다.
  • 하단에 추가된 한국어 설명 문장을 Markdown 형식으로 정리했다.
  • ## 한국어 요약 메모 섹션을 추가하고, 항목별로 ### 제목과 불릿 목록으로 정돈했다.

정리한 주요 항목

  • Compose
  • Hilt
  • Room Database 미사용(raw SQLite 사용)
  • AI / Cloud Function 호출 흐름
  • API / 외부 연동
  • 알림 / 수집 흐름
  • WorkManager / 백그라운드
  • 테스트 현황
  • 작업 시 주의점

2. 일일 알림 기능 점검 및 구현

기존 구조 확인 결과

  • 설정 화면에는 alarmTime 선택 기능이 이미 존재했다.
  • 기존 알림 로직은 SettingsActivity2.kt + WorkDefLib.kt 중심의 WorkManager 흐름이었다.
  • 하지만 이 구조는 사용자가 선택한 시각에 매일 정확하게 체크하는 방식으로 보기 어려웠고,
    앱 미실행 상태나 재부팅 이후까지 안정적으로 유지되는 구조도 부족했다.
  • 또한 오늘 실제 알림 대상이 없더라도 알림이 발생할 가능성이 있었다.

구현/수정 내용

  • core/DailyReminderScheduler.kt 신규 추가
    • AlarmManager 기반으로 다음 일일 알림 시간을 예약하도록 구성
    • 저장된 alarmTime 값을 기준으로 다음 실행 시각 계산
    • 오늘 대상 데이터가 있을 때만 알림 노출
  • core/DailyReminderReceiver.kt 신규 추가
    • 일일 알림 브로드캐스트 수신
    • 부팅 완료, 앱 업데이트, 시간 변경, 타임존 변경 시 재예약 처리
  • AndroidManifest.xml 수정
    • RECEIVE_BOOT_COMPLETED 권한 추가
    • DailyReminderReceiver 등록
  • presentation/option/SettingsActivity2.kt 수정
    • 기존 WorkManager 지연 계산 로직 대신 새 스케줄러 호출로 단순화
  • presentation/composes/SettingScreen.kt 수정
    • 설정 저장 시 alarmTime 변경값으로 즉시 재예약되도록 반영
  • ComposeMainActivity.kt 수정
    • 앱 재진입 시 저장된 설정 기준으로 알림 예약이 동기화되도록 처리
  • core/WorkDefLib.kt 수정
    • 기존 반복 예약 대신 새 스케줄러 호출 중심으로 단순화
  • 문자열 리소스 추가
    • 일일 알림 채널명, 제목, 본문 문구 추가
    • values-ko/strings.xml에도 한국어 번역 반영

3. 알림 동작 기준

  • 매일 사용자가 설정한 시각에 체크하도록 예약
  • 오늘 날짜 기준으로 달력/출금 대상 데이터가 있는지 조회
  • 대상이 있을 때만 시스템 알림 표시
  • 알림 클릭 시 ComposeMainActivity로 진입하도록 구성
  • 앱이 꺼져 있어도, 부팅/시간 변경 이후 다시 예약되도록 구성

4. 검증 결과

코드/구조 점검

  • 설정 저장 경로와 알림 예약 경로가 연결되어 있는지 확인했다.
  • 클릭 시 메인 화면 진입 흐름이 연결되어 있는지 확인했다.
  • 재부팅/시간 변경 시 재예약되도록 매니페스트와 리시버 등록을 반영했다.

빌드 확인

아래 빌드를 직접 확인했다.

  • :app:compileDebugKotlin 성공
  • :app:assembleDebug 성공

5. 오늘 작업한 주요 파일

  • AGENTS.md
  • app/src/main/AndroidManifest.xml
  • app/src/main/java/com/nari/notify2kakao/core/DailyReminderScheduler.kt
  • app/src/main/java/com/nari/notify2kakao/core/DailyReminderReceiver.kt
  • app/src/main/java/com/nari/notify2kakao/core/WorkDefLib.kt
  • app/src/main/java/com/nari/notify2kakao/presentation/option/SettingsActivity2.kt
  • app/src/main/java/com/nari/notify2kakao/presentation/composes/SettingScreen.kt
  • app/src/main/java/com/nari/notify2kakao/ComposeMainActivity.kt
  • app/src/main/res/values/strings.xml
  • app/src/main/res/values-ko/strings.xml

6. 메모

  • 현재 구현은 앱 미실행 상태에서도 일일 체크가 가능하도록 보완한 상태다.
  • 실제 기기에서는 제조사 배터리 정책이나 정확한 알람 정책(Android 12+)에 따라 시각 오차가 일부 발생할 수 있으므로 추후 실기기 확인이 필요하다.
  • 필요 시 다음 단계로 알림 클릭 시 특정 화면/탭으로 직접 이동하는 개선도 가능하다.

2026-04-03 작업 이력

작업 개요

오늘은 layoutVersion 제거 이후 현재 프로젝트에 남아 있는 XML UI 사용 지점을 다시 정리하고,
향후 Compose 중심 구조로 전환하기 위한 계획을 정리했다.

2026-04-03 추가 반영: 이후 후속 정리를 진행하면서 SettingsActivity2.kt, settings_activity.xml, root_preferences.xml, activity_setting.xml, core/kakao/kakaoToast.kt, view_toast.xml까지 모두 제거되었고, 관련 TODO도 완료 처리했다.

1. 당시 기준 XML 사용 지점 정리

실제 사용 중인 layout

  • app/src/main/res/layout/settings_activity.xml
    • presentation/option/SettingsActivity2.kt에서 setContentView(...)로 사용
    • 설정용 PreferenceFragmentCompat를 담는 컨테이너 역할
  • app/src/main/res/layout/notify_setting.xml
    • LoginActivity.kt에서 NotifySettingBinding으로 사용
    • 알림 권한 안내 다이얼로그 내부 이미지 영역
  • app/src/main/res/layout/view_toast.xml
    • core/kakao/kakaoToast.kt에서 inflate 하여 사용
    • 커스텀 Toast + 광고 배너 표시 역할

XML 기반 설정 리소스

  • app/src/main/res/xml/root_preferences.xml
    • SettingsActivity2.ktPreferenceFragmentCompat에서 사용
    • kakao_use_ty, monthlydate, alarmTime 설정 항목 관리

정리 후보

  • app/src/main/res/layout/activity_setting.xml
    • 현재 코드/Manifest 기준 직접 사용 흔적이 없어 보이는 잔존 XML
    • 추후 실제 참조 여부를 다시 확인한 뒤 삭제 후보로 관리

2. 당시 기준 Compose 전환 방향

1단계: 로그인 권한 안내 XML 제거

  • notify_setting.xml 기반 다이얼로그를 Compose AlertDialog로 전환
  • LoginActivity.kt 내부에서 ViewBinding 없이 이미지와 버튼을 Compose로 직접 구성
  • 로그인 화면을 Compose 흐름으로 더 일관되게 정리

2단계: 설정 화면 XML 의존 축소

  • 현재 SettingsActivity2.kt + settings_activity.xml + root_preferences.xml 조합을 우선 유지하면서 동작을 정리
  • 이후 presentation/composes/SettingScreen.kt 쪽으로 설정 UI를 점진적으로 이동
  • 최종적으로는 설정 값 변경, 저장, 요약 표시를 Compose 화면에서 직접 처리하는 방향 검토

3단계: 커스텀 Toast 구조 개선

  • view_toast.xml 기반 커스텀 Toast 사용 범위를 재검토
  • 단순 안내 메시지는 Compose Snackbar 또는 화면 내 상태 기반 메시지로 대체 검토
  • 광고가 포함된 토스트는 사용자 경험과 정책 관점에서 별도 UI 방식으로 재설계하는 것이 더 안전함

4단계: 미사용 XML 정리

  • activity_setting.xml처럼 현재 직접 사용되지 않는 XML은 실제 참조 여부를 다시 확인 후 제거
  • XML 제거 시 함께 정리 가능한 문자열/리소스도 같이 점검

3. 전환 시 주의사항

  • 기존 SharedPreferences 키(kakao_use_ty, monthlydate, alarmTime)는 그대로 유지하는 방향이 안전함
  • 설정 화면 전환 시 현재 SettingScreen.kt에서 수행하는 알림 재예약(DailyReminderScheduler.schedule(...)) 동작이 동일하게 유지되어야 함
  • 로그인/오류 안내 UI처럼 기존 헬퍼를 제거하는 경우에도 실제 사용자 피드백 흐름은 유지되어야 함
  • Compose 전환은 한 번에 전체 변경보다, 로그인 안내 → 설정 화면 → 커스텀 토스트 순으로 점진 전환하는 방식이 안전함

4. 메모

  • 메인 화면 흐름은 Compose 중심으로 정리되었고, 지원 UI에 남아 있던 XML 의존도도 단계적으로 제거하는 방향으로 진행했다.
  • 따라서 이후 구조 개선 작업은 “남아 있는 레거시 UI/호환성 코드 정리”를 목표로 잡고 점진적으로 진행하는 것이 적절하다.

5. 다음 작업 TODO

  • LoginActivity.ktNotifySettingBinding 기반 권한 안내 다이얼로그를 Compose AlertDialog로 전환
  • notify_setting.xml 제거 후 권한 안내 UI가 기존과 동일하게 동작하는지 확인
  • SettingsActivity2.kt + settings_activity.xml + root_preferences.xml 구조를 SettingScreen.kt 중심으로 통합할 수 있는지 설계 정리
  • 설정 화면 전환 시 kakao_use_ty, monthlydate, alarmTime 저장 키를 그대로 유지하도록 검토
  • 설정 저장 이후 DailyReminderScheduler.schedule(...) 재호출 흐름이 Compose 설정 화면에서도 동일하게 유지되도록 점검
  • core/kakao/kakaoToast.ktview_toast.xml 사용 부분을 정리하고 로그인 오류 안내를 기본 Toast로 단순화
  • 광고가 포함된 커스텀 Toast는 정책/UX 측면에서 별도 UI로 둘 필요가 있는지 검토 후 제거
  • activity_setting.xml의 실제 참조 여부를 최종 확인한 뒤 삭제 여부 결정
  • XML 제거 시 함께 정리 가능한 문자열, drawable, binding 참조도 같이 점검

6. 추가 진행 내용

커스텀 Toast / XML 정리

  • LoginActivity.kt에서 카카오 로그인 실패 안내를 kakaoToast.makeToast(...) 대신 기본 Toast.makeText(...)로 변경했다.
  • 더 이상 사용되지 않는 core/kakao/kakaoToast.kt를 제거했다.
  • 마지막으로 남아 있던 레이아웃 리소스 res/layout/view_toast.xml를 삭제했다.
  • 정리 후 프로젝트 내 view_toast, kakaoToast, SettingsActivity2, root_preferences, activity_setting 참조가 남아 있지 않음을 다시 확인했다.

문서 최신화 메모

  • AGENTS.md의 구조 설명도 현재 상태에 맞게 수정했다.
  • 설정 관련 진입점은 SettingsActivity2.kt 기준 설명에서 presentation/composes/SettingScreen.kt 기준 설명으로 정리했다.
  • 로그인 오류 안내는 제거된 kakaoToast.kt 대신 LoginActivity.kt의 기본 Toast 흐름을 따라가면 되도록 문서를 맞췄다.

7. 일일 알림 후속 보완

보완 배경

  • 기존 일일 알림은 DailyReminderScheduler.kt에서 오늘 날짜의 withdrawList만 조회하고 있었다.
  • 따라서 월 반복 데이터가 withdrawMonthly에만 저장되어 있고, 사용자가 별도로 월 반복 적용을 실행하지 않은 경우에는 오늘 대상이 있어도 알림이 누락될 수 있는 구조였다.

보완 내용

  • core/DailyReminderScheduler.kt 수정
    • 알림 시점마다 현재 한국 시간 기준 오늘 날짜를 계산하도록 정리했다.
    • 알림 판단 전에 withdrawMonthly에서 오늘 일자와 일치하는 항목을 읽어오도록 보완했다.
    • 해당 항목이 오늘 withdrawList에 아직 없으면 자동으로 withdrawList에 반영한 뒤, 기존 일일 알림 요약 흐름을 그대로 재사용하도록 연결했다.
    • 알림 본문은 건수/합계 외에 remark 일부가 함께 보이도록 BigText 내용을 보강했다.
  • data/dbHandler/DBHandler.kt 수정
    • withdrawMonthly에서 오늘 일자에 해당하는 항목만 읽을 수 있도록 selectWithDrawMonthlyByDay(...) 조회 메서드를 추가했다.

확인 결과

  • 이제 매일 설정된 알림 시간에 실행될 때 withdrawMonthly의 오늘 대상 항목도 실제 알림 판단 경로에 포함된다.
  • withdrawList에 이미 같은 항목이 있는 경우에는 중복 저장을 피하도록 chkWithDraw(...) 검사를 유지했다.
  • 수정 후 :app:assembleDebug 빌드 성공을 확인했다.

2026-04-07 작업 이력

작업 개요

오늘은 알림 관련 권한을 알림 수집알림 표시로 분리해서 다시 정리하고,
ComposeMainActivitySettingScreen에서 현재 상태를 바로 확인하고 설정할 수 있도록 보완했다.

1. 알림 권한 구조 정리

작업 내용

  • 기존에는 메인 진입 시 권한 체크가 Notification Listener 중심으로만 해석될 수 있는 구조였다.
  • 이번에는 권한을 아래 3가지 상태로 분리했다.
    • 알림 수집 권한 : Notification Listener 허용 여부
    • 알림 표시 권한 : Android 13+ POST_NOTIFICATIONS 허용 여부
    • 앱 알림 사용 : 시스템에서 앱 알림 자체가 차단되었는지 여부
  • DailyReminderScheduler.getStatusSnapshot(...)도 같은 기준으로 상태를 반환하도록 확장했다.

2. ComposeMainActivity 권한 안내 개선

작업 내용

  • 알림 권한 확인 책임을 로그인 화면이 아닌 ComposeMainActivity.kt에 두도록 정리했다.
  • 메인 진입/복귀 시점(onResume)마다 현재 권한 상태를 다시 평가하도록 변경했다.
  • 통합 권한 안내 다이얼로그를 추가하여 부족한 권한별로 바로 처리할 수 있게 했다.
    • 알림 수집 권한이 없으면 알림 접근 설정 이동
    • 알림 표시 권한이 없으면 POST_NOTIFICATIONS 런타임 요청
    • 앱 알림이 꺼져 있으면 앱 알림 설정 이동
  • 관련 안내 문구를 values/strings.xml, values-ko/strings.xml에 추가했다.

3. SettingScreen 상태 표시 확장

작업 내용

  • 설정 화면의 일일 알림 상태 카드에서 기존 단일 알림 권한 표기를 세분화했다.
  • 현재는 아래 항목을 각각 확인할 수 있다.
    • 선택된 알림 시간
    • 알림 수집 권한
    • 알림 표시 권한
    • 앱 알림 사용
    • 정확 알람 사용 여부
    • 마지막 예약/실행/표시 시간
    • 최종 상태
  • 설정 화면에서도 바로 권한 조치를 할 수 있도록 버튼을 연결했다.
    • 알림 접근 설정
    • 알림 권한 요청
    • 앱 알림 설정

4. 수정 파일

  • app/src/main/java/com/nari/notify2kakao/ComposeMainActivity.kt
  • app/src/main/java/com/nari/notify2kakao/presentation/composes/SettingScreen.kt
  • app/src/main/java/com/nari/notify2kakao/core/DailyReminderScheduler.kt
  • app/src/main/res/values/strings.xml
  • app/src/main/res/values-ko/strings.xml

5. 검증 결과

  • 수정 후 :app:compileDebugKotlin 빌드 성공을 확인했다.
  • 이제 메인 화면과 설정 화면 모두에서 현재 권한 부족 상태를 같은 기준으로 확인할 수 있다.
  • 일일 알림 표시 가능 여부도 설정 화면에서 더 명확하게 확인할 수 있게 되었다.# 2026-04-02 작업 이력

작업 개요

오늘은 AGENTS.md 정리와 일일 알림 기능 점검/보완 작업을 진행했다.
주요 목표는 AI 에이전트 문서의 한국어 가독성을 높이고, 앱이 실행 중이 아니어도 매일 지정된 시간에 알림 대상이 있는지 확인하여 알림을 노출하도록 만드는 것이었다.

1. AGENTS.md 정리

작업 내용

  • 기존 루트 AGENTS.md를 기준으로 코드 구조를 다시 확인했다.
  • 프로젝트 특성에 맞는 한국어 메모를 각 섹션 아래에 보강했다.
  • 하단에 추가된 한국어 설명 문장을 Markdown 형식으로 정리했다.
  • ## 한국어 요약 메모 섹션을 추가하고, 항목별로 ### 제목과 불릿 목록으로 정돈했다.

정리한 주요 항목

  • Compose
  • Hilt
  • Room Database 미사용(raw SQLite 사용)
  • AI / Cloud Function 호출 흐름
  • API / 외부 연동
  • 알림 / 수집 흐름
  • WorkManager / 백그라운드
  • 테스트 현황
  • 작업 시 주의점

2. 일일 알림 기능 점검 및 구현

기존 구조 확인 결과

  • 설정 화면에는 alarmTime 선택 기능이 이미 존재했다.
  • 기존 알림 로직은 SettingsActivity2.kt + WorkDefLib.kt 중심의 WorkManager 흐름이었다.
  • 하지만 이 구조는 사용자가 선택한 시각에 매일 정확하게 체크하는 방식으로 보기 어려웠고,
    앱 미실행 상태나 재부팅 이후까지 안정적으로 유지되는 구조도 부족했다.
  • 또한 오늘 실제 알림 대상이 없더라도 알림이 발생할 가능성이 있었다.

구현/수정 내용

  • core/DailyReminderScheduler.kt 신규 추가
    • AlarmManager 기반으로 다음 일일 알림 시간을 예약하도록 구성
    • 저장된 alarmTime 값을 기준으로 다음 실행 시각 계산
    • 오늘 대상 데이터가 있을 때만 알림 노출
  • core/DailyReminderReceiver.kt 신규 추가
    • 일일 알림 브로드캐스트 수신
    • 부팅 완료, 앱 업데이트, 시간 변경, 타임존 변경 시 재예약 처리
  • AndroidManifest.xml 수정
    • RECEIVE_BOOT_COMPLETED 권한 추가
    • DailyReminderReceiver 등록
  • presentation/option/SettingsActivity2.kt 수정
    • 기존 WorkManager 지연 계산 로직 대신 새 스케줄러 호출로 단순화
  • presentation/composes/SettingScreen.kt 수정
    • 설정 저장 시 alarmTime 변경값으로 즉시 재예약되도록 반영
  • ComposeMainActivity.kt 수정
    • 앱 재진입 시 저장된 설정 기준으로 알림 예약이 동기화되도록 처리
  • core/WorkDefLib.kt 수정
    • 기존 반복 예약 대신 새 스케줄러 호출 중심으로 단순화
  • 문자열 리소스 추가
    • 일일 알림 채널명, 제목, 본문 문구 추가
    • values-ko/strings.xml에도 한국어 번역 반영

3. 알림 동작 기준

  • 매일 사용자가 설정한 시각에 체크하도록 예약
  • 오늘 날짜 기준으로 달력/출금 대상 데이터가 있는지 조회
  • 대상이 있을 때만 시스템 알림 표시
  • 알림 클릭 시 ComposeMainActivity로 진입하도록 구성
  • 앱이 꺼져 있어도, 부팅/시간 변경 이후 다시 예약되도록 구성

4. 검증 결과

코드/구조 점검

  • 설정 저장 경로와 알림 예약 경로가 연결되어 있는지 확인했다.
  • 클릭 시 메인 화면 진입 흐름이 연결되어 있는지 확인했다.
  • 재부팅/시간 변경 시 재예약되도록 매니페스트와 리시버 등록을 반영했다.

빌드 확인

아래 빌드를 직접 확인했다.

  • :app:compileDebugKotlin 성공
  • :app:assembleDebug 성공

5. 오늘 작업한 주요 파일

  • AGENTS.md
  • app/src/main/AndroidManifest.xml
  • app/src/main/java/com/nari/notify2kakao/core/DailyReminderScheduler.kt
  • app/src/main/java/com/nari/notify2kakao/core/DailyReminderReceiver.kt
  • app/src/main/java/com/nari/notify2kakao/core/WorkDefLib.kt
  • app/src/main/java/com/nari/notify2kakao/presentation/option/SettingsActivity2.kt
  • app/src/main/java/com/nari/notify2kakao/presentation/composes/SettingScreen.kt
  • app/src/main/java/com/nari/notify2kakao/ComposeMainActivity.kt
  • app/src/main/res/values/strings.xml
  • app/src/main/res/values-ko/strings.xml

6. 메모

  • 현재 구현은 앱 미실행 상태에서도 일일 체크가 가능하도록 보완한 상태다.
  • 실제 기기에서는 제조사 배터리 정책이나 정확한 알람 정책(Android 12+)에 따라 시각 오차가 일부 발생할 수 있으므로 추후 실기기 확인이 필요하다.
  • 필요 시 다음 단계로 알림 클릭 시 특정 화면/탭으로 직접 이동하는 개선도 가능하다.

2026-04-03 작업 이력

작업 개요

오늘은 layoutVersion 제거 이후 현재 프로젝트에 남아 있는 XML UI 사용 지점을 다시 정리하고,
향후 Compose 중심 구조로 전환하기 위한 계획을 정리했다.

2026-04-03 추가 반영: 이후 후속 정리를 진행하면서 SettingsActivity2.kt, settings_activity.xml, root_preferences.xml, activity_setting.xml, core/kakao/kakaoToast.kt, view_toast.xml까지 모두 제거되었고, 관련 TODO도 완료 처리했다.

1. 당시 기준 XML 사용 지점 정리

실제 사용 중인 layout

  • app/src/main/res/layout/settings_activity.xml
    • presentation/option/SettingsActivity2.kt에서 setContentView(...)로 사용
    • 설정용 PreferenceFragmentCompat를 담는 컨테이너 역할
  • app/src/main/res/layout/notify_setting.xml
    • LoginActivity.kt에서 NotifySettingBinding으로 사용
    • 알림 권한 안내 다이얼로그 내부 이미지 영역
  • app/src/main/res/layout/view_toast.xml
    • core/kakao/kakaoToast.kt에서 inflate 하여 사용
    • 커스텀 Toast + 광고 배너 표시 역할

XML 기반 설정 리소스

  • app/src/main/res/xml/root_preferences.xml
    • SettingsActivity2.ktPreferenceFragmentCompat에서 사용
    • kakao_use_ty, monthlydate, alarmTime 설정 항목 관리

정리 후보

  • app/src/main/res/layout/activity_setting.xml
    • 현재 코드/Manifest 기준 직접 사용 흔적이 없어 보이는 잔존 XML
    • 추후 실제 참조 여부를 다시 확인한 뒤 삭제 후보로 관리

2. 당시 기준 Compose 전환 방향

1단계: 로그인 권한 안내 XML 제거

  • notify_setting.xml 기반 다이얼로그를 Compose AlertDialog로 전환
  • LoginActivity.kt 내부에서 ViewBinding 없이 이미지와 버튼을 Compose로 직접 구성
  • 로그인 화면을 Compose 흐름으로 더 일관되게 정리

2단계: 설정 화면 XML 의존 축소

  • 현재 SettingsActivity2.kt + settings_activity.xml + root_preferences.xml 조합을 우선 유지하면서 동작을 정리
  • 이후 presentation/composes/SettingScreen.kt 쪽으로 설정 UI를 점진적으로 이동
  • 최종적으로는 설정 값 변경, 저장, 요약 표시를 Compose 화면에서 직접 처리하는 방향 검토

3단계: 커스텀 Toast 구조 개선

  • view_toast.xml 기반 커스텀 Toast 사용 범위를 재검토
  • 단순 안내 메시지는 Compose Snackbar 또는 화면 내 상태 기반 메시지로 대체 검토
  • 광고가 포함된 토스트는 사용자 경험과 정책 관점에서 별도 UI 방식으로 재설계하는 것이 더 안전함

4단계: 미사용 XML 정리

  • activity_setting.xml처럼 현재 직접 사용되지 않는 XML은 실제 참조 여부를 다시 확인 후 제거
  • XML 제거 시 함께 정리 가능한 문자열/리소스도 같이 점검

3. 전환 시 주의사항

  • 기존 SharedPreferences 키(kakao_use_ty, monthlydate, alarmTime)는 그대로 유지하는 방향이 안전함
  • 설정 화면 전환 시 현재 SettingScreen.kt에서 수행하는 알림 재예약(DailyReminderScheduler.schedule(...)) 동작이 동일하게 유지되어야 함
  • 로그인/오류 안내 UI처럼 기존 헬퍼를 제거하는 경우에도 실제 사용자 피드백 흐름은 유지되어야 함
  • Compose 전환은 한 번에 전체 변경보다, 로그인 안내 → 설정 화면 → 커스텀 토스트 순으로 점진 전환하는 방식이 안전함

4. 메모

  • 메인 화면 흐름은 Compose 중심으로 정리되었고, 지원 UI에 남아 있던 XML 의존도도 단계적으로 제거하는 방향으로 진행했다.
  • 따라서 이후 구조 개선 작업은 “남아 있는 레거시 UI/호환성 코드 정리”를 목표로 잡고 점진적으로 진행하는 것이 적절하다.

5. 다음 작업 TODO

  • LoginActivity.ktNotifySettingBinding 기반 권한 안내 다이얼로그를 Compose AlertDialog로 전환
  • notify_setting.xml 제거 후 권한 안내 UI가 기존과 동일하게 동작하는지 확인
  • SettingsActivity2.kt + settings_activity.xml + root_preferences.xml 구조를 SettingScreen.kt 중심으로 통합할 수 있는지 설계 정리
  • 설정 화면 전환 시 kakao_use_ty, monthlydate, alarmTime 저장 키를 그대로 유지하도록 검토
  • 설정 저장 이후 DailyReminderScheduler.schedule(...) 재호출 흐름이 Compose 설정 화면에서도 동일하게 유지되도록 점검
  • core/kakao/kakaoToast.ktview_toast.xml 사용 부분을 정리하고 로그인 오류 안내를 기본 Toast로 단순화
  • 광고가 포함된 커스텀 Toast는 정책/UX 측면에서 별도 UI로 둘 필요가 있는지 검토 후 제거
  • activity_setting.xml의 실제 참조 여부를 최종 확인한 뒤 삭제 여부 결정
  • XML 제거 시 함께 정리 가능한 문자열, drawable, binding 참조도 같이 점검

6. 추가 진행 내용

커스텀 Toast / XML 정리

  • LoginActivity.kt에서 카카오 로그인 실패 안내를 kakaoToast.makeToast(...) 대신 기본 Toast.makeText(...)로 변경했다.
  • 더 이상 사용되지 않는 core/kakao/kakaoToast.kt를 제거했다.
  • 마지막으로 남아 있던 레이아웃 리소스 res/layout/view_toast.xml를 삭제했다.
  • 정리 후 프로젝트 내 view_toast, kakaoToast, SettingsActivity2, root_preferences, activity_setting 참조가 남아 있지 않음을 다시 확인했다.

문서 최신화 메모

  • AGENTS.md의 구조 설명도 현재 상태에 맞게 수정했다.
  • 설정 관련 진입점은 SettingsActivity2.kt 기준 설명에서 presentation/composes/SettingScreen.kt 기준 설명으로 정리했다.
  • 로그인 오류 안내는 제거된 kakaoToast.kt 대신 LoginActivity.kt의 기본 Toast 흐름을 따라가면 되도록 문서를 맞췄다.

7. 일일 알림 후속 보완

보완 배경

  • 기존 일일 알림은 DailyReminderScheduler.kt에서 오늘 날짜의 withdrawList만 조회하고 있었다.
  • 따라서 월 반복 데이터가 withdrawMonthly에만 저장되어 있고, 사용자가 별도로 월 반복 적용을 실행하지 않은 경우에는 오늘 대상이 있어도 알림이 누락될 수 있는 구조였다.

보완 내용

  • core/DailyReminderScheduler.kt 수정
    • 알림 시점마다 현재 한국 시간 기준 오늘 날짜를 계산하도록 정리했다.
    • 알림 판단 전에 withdrawMonthly에서 오늘 일자와 일치하는 항목을 읽어오도록 보완했다.
    • 해당 항목이 오늘 withdrawList에 아직 없으면 자동으로 withdrawList에 반영한 뒤, 기존 일일 알림 요약 흐름을 그대로 재사용하도록 연결했다.
    • 알림 본문은 건수/합계 외에 remark 일부가 함께 보이도록 BigText 내용을 보강했다.
  • data/dbHandler/DBHandler.kt 수정
    • withdrawMonthly에서 오늘 일자에 해당하는 항목만 읽을 수 있도록 selectWithDrawMonthlyByDay(...) 조회 메서드를 추가했다.

확인 결과

  • 이제 매일 설정된 알림 시간에 실행될 때 withdrawMonthly의 오늘 대상 항목도 실제 알림 판단 경로에 포함된다.
  • withdrawList에 이미 같은 항목이 있는 경우에는 중복 저장을 피하도록 chkWithDraw(...) 검사를 유지했다.
  • 수정 후 :app:assembleDebug 빌드 성공을 확인했다.

2026-04-07 작업 이력

작업 개요

오늘은 알림 관련 권한을 알림 수집알림 표시로 분리해서 다시 정리하고,
ComposeMainActivitySettingScreen에서 현재 상태를 바로 확인하고 설정할 수 있도록 보완했다.

1. 알림 권한 구조 정리

작업 내용

  • 기존에는 메인 진입 시 권한 체크가 Notification Listener 중심으로만 해석될 수 있는 구조였다.
  • 이번에는 권한을 아래 3가지 상태로 분리했다.
    • 알림 수집 권한 : Notification Listener 허용 여부
    • 알림 표시 권한 : Android 13+ POST_NOTIFICATIONS 허용 여부
    • 앱 알림 사용 : 시스템에서 앱 알림 자체가 차단되었는지 여부
  • DailyReminderScheduler.getStatusSnapshot(...)도 같은 기준으로 상태를 반환하도록 확장했다.

2. ComposeMainActivity 권한 안내 개선

작업 내용

  • 알림 권한 확인 책임을 로그인 화면이 아닌 ComposeMainActivity.kt에 두도록 정리했다.
  • 메인 진입/복귀 시점(onResume)마다 현재 권한 상태를 다시 평가하도록 변경했다.
  • 통합 권한 안내 다이얼로그를 추가하여 부족한 권한별로 바로 처리할 수 있게 했다.
    • 알림 수집 권한이 없으면 알림 접근 설정 이동
    • 알림 표시 권한이 없으면 POST_NOTIFICATIONS 런타임 요청
    • 앱 알림이 꺼져 있으면 앱 알림 설정 이동
  • 관련 안내 문구를 values/strings.xml, values-ko/strings.xml에 추가했다.

3. SettingScreen 상태 표시 확장

작업 내용

  • 설정 화면의 일일 알림 상태 카드에서 기존 단일 알림 권한 표기를 세분화했다.
  • 현재는 아래 항목을 각각 확인할 수 있다.
    • 선택된 알림 시간
    • 알림 수집 권한
    • 알림 표시 권한
    • 앱 알림 사용
    • 정확 알람 사용 여부
    • 마지막 예약/실행/표시 시간
    • 최종 상태
  • 설정 화면에서도 바로 권한 조치를 할 수 있도록 버튼을 연결했다.
    • 알림 접근 설정
    • 알림 권한 요청
    • 앱 알림 설정

4. 수정 파일

  • app/src/main/java/com/nari/notify2kakao/ComposeMainActivity.kt
  • app/src/main/java/com/nari/notify2kakao/presentation/composes/SettingScreen.kt
  • app/src/main/java/com/nari/notify2kakao/core/DailyReminderScheduler.kt
  • app/src/main/res/values/strings.xml
  • app/src/main/res/values-ko/strings.xml

5. 검증 결과

  • 수정 후 :app:compileDebugKotlin 빌드 성공을 확인했다.
  • 이제 메인 화면과 설정 화면 모두에서 현재 권한 부족 상태를 같은 기준으로 확인할 수 있다.
  • 일일 알림 표시 가능 여부도 설정 화면에서 더 명확하게 확인할 수 있게 되었다.
반응형