2026/05/15

오늘의 이야기



#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase

🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ

근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨

그것도 구글 Gemini로다가!

그래서 앱 하나 만들었지
👉 “로또 예상번호 by Gemini” 🎱

AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨

재미로 해도 좋고…
혹시 모르는 거잖아? 😏


https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127




오늘의 이야기


#스하리1000명프로젝트

오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲

이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.

앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao





오늘의 이야기


#스하리1000명프로젝트,
บางครั้งการพูดคุยกับแรงงานต่างด้าวก็ยากใช่ไหม?
ฉันสร้างแอปง่ายๆ ที่ช่วยได้! คุณเขียนเป็นภาษาของคุณ และคนอื่นๆ ก็เห็นเป็นภาษาของพวกเขา
มันแปลอัตโนมัติตามการตั้งค่า
มีประโยชน์มากสำหรับการแชทที่ง่ายดาย ควรดูเมื่อมีโอกาส!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416




오늘의 이야기


#billcorea #운동동아리관리앱
🏸 Schneedle แอปที่สโมสรแบดมินตันต้องมี!
👉 แมทช์เพลย์ – บันทึกคะแนนและค้นหาคู่ต่อสู้ 🎉
เหมาะสำหรับทุกที่ คนเดียว กับเพื่อนฝูง หรือในคลับ! 🤝
ถ้าคุณชอบแบดมินตันลองดูแน่นอน

ไปที่แอป 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기

 


작업 개요


오늘은 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 빌드 성공을 확인했다.

  • 이제 메인 화면과 설정 화면 모두에서 현재 권한 부족 상태를 같은 기준으로 확인할 수 있다.

  • 일일 알림 표시 가능 여부도 설정 화면에서 더 명확하게 확인할 수 있게 되었다.





오늘의 이야기


#스하리1000명프로젝트,
迷失在韓國?即使您不會說韓語,這個應用程式也可以幫助您輕鬆出行。
只需說出您的語言即可 - 它會翻譯、搜尋並以您的語言顯示結果。
非常適合旅行者!支援英語、日語、中文、越南語等10多種語言。
現在就試試吧!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/05/14

오늘의 이야기



#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase

🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ

근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨

그것도 구글 Gemini로다가!

그래서 앱 하나 만들었지
👉 “로또 예상번호 by Gemini” 🎱

AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨

재미로 해도 좋고…
혹시 모르는 거잖아? 😏


https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127




오늘의 이야기


#스하리1000명프로젝트

오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲

이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.

앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao





오늘의 이야기


#스하리1000명프로젝트,
Иногда сложно разговаривать с иностранными работниками, правда?
Я сделал простое приложение, которое помогает! Вы пишете на своем языке, а другие видят это на своем.
Он автоматически переводит в зависимости от настроек.
Очень удобно для легкого общения. Посмотрите, когда будет возможность!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416




오늘의 이야기


#billcorea #운동동아리관리앱
🏸 Schneedle — незаменимое приложение для бадминтонных клубов!
👉 Матчевая игра: записывайте результаты и находите противников 🎉
Идеально подходит для любого места: в одиночку, с друзьями или в клубе! 🤝
Если вам нравится бадминтон, обязательно попробуйте

Зайди в приложение 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기

앱 설명서



이 앱은 

이 앱은 타로카드 이미지를 AI 을 통해 한복을 입은 모습을 그리다 보니, 생각 나서 타로 카드 선택을 통해, 마음의 평화(?) 필요한 분 들에게 대나무숲(전래 동화에 나오는)이 되어 드리고자 합니다.


 


이 앱에서 작성 되는 내용은 타인에게 공유 되지 않습니다.  다만, 타로 카드와 사용자의 입력을 조합해 사용자에게 응답을 주기 위해 Groq API 호출을 이용해 글을 구성하기 위해서만 제공 되며, 앱 시작시 사전 동의를 구하고 있습니다. 


 


동의 는 사용 중에도 철회할 수 있으며, 그 즉시 앱이 종료 됩니다. 


 


데이터 수집 동의 화면



 


앱은 사용은 

오늘의 타로 카드 선택 하기
1, 3장 타로 선택하기 
타로 프롬프트 
최근 기록 

** 오늘의 타로는 1장의 타로 카드와 사용자의 질문(?)을 조합해 사용자 에게 응답을 제공 합니다.   선택 되는 타로 카드에 따라 다른 응답이 제공 됩니다. 


타로 카드 선택



 


타로 카드는 선택하기는 오늘의 카드, 스레드 중에서 1장, 3장 뽑기를 선택할 수 있습니다.  카드는 원형으로 펼쳐진 78장의 이미지 에서 선택하시면 됩니다. 카드는 랜덤으로 배치 되기 때문에 뽑을 때 마다 다른 카드가 선택 됩니다. 


 


"선택 완료" 를 클릭 하면 다음 화면에서 선택한 카드 이름을 보여 줍니다.  다른 "리딩 결과 보기" 를 클릭 하면  다음 화면으로 이동하면서 리딩 결과를 볼 수 있습니다. 


 


상담 입력 으로 이동 

 


상담 입력 화면



상담입력에서는 이전 화면에서 제시된 글들을 보고 나의 마음을 정리하는 시간을 가지는 공간 입니다. 여기서 입력된 기록은 두고 두고 볼 수 있습니다. 


 


다음 화면으로 이동은 홈으로 돌아가기,  방금 저장한 저널 보기 등으로 구분해 이동할 수 있습니다.


 


전체 보기 (홈 화면에서 기록 전체 보기)

저널 보기



홈 화면에서 "전체보기" 을 클릭하면 저널 목록으로 이동 하고 항목 중에서 하나를 클릭 하면 상세 화면으로 이동 합니다.  


저널 상세에서 지난 이야기의 내용을 확인해 볼 수 있습니다. 


 


다음 이야기 

 


이 앱의 기능은 다른 부분으로 개선 될 수 있습니다. 개선이 발생하는 경우는 사전 공지가 없을 수 있으므로 양해를 부탁 드립니다. 


이 앱에서 작성되는 내용에 타인과 공유는 되지 않음으로 내 마음의 기록을 남기는 작은 공간으로 활용 하시길 바랍니다. 





오늘의 이야기

분석 결과: 회차 당첨번호 증가간격 짝수:홀수 총합 평균 총합_이전일치_간격 평균_이전일치_간격 최고일치율 최고일치율_이전일치_간격 1204 8,16,28,30,31,44 8,12,2,1,13 4:2 157 26.17 N/A N/A N/A N/...