2026/05/18

오늘의 이야기


#스하리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 #운동동아리관리앱
🏸スチーニーたち、バドミントン同好会必須アプリ登場!
👉マッチプレイ - スコア記録&試合相手を探す🎉
一人で、友達、同好会どこでもぴったりです! 🤝
バドミントン好きならぜひ使ってみてください

アプリショートカット👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기

BarcodeVoucher0407 개발일기 #07



날짜: 2026-04-19
주제: Phase 2 마무리 + 레거시 QR 스캔 UX 폴리싱



QR Scanner



 


오늘의 목표


오늘은 Phase 2의 흐름을 유지하면서, 실제 사용 중 눈에 띄는 불편 요소를 줄이는 데 집중했다.
특히 레거시 QR 스캔 화면의 시스템바 겹침 문제버튼 가시성 문제를 해결하는 것이 핵심이었다.




배경: 왜 이 작업이 필요했나


기능 자체는 동작했지만, 실제 디바이스에서 아래 문제가 반복적으로 보였다.



  • 상단의 뒤로가기/플래시 버튼이 상태바, 컷아웃 영역과 겹쳐 보이는 경우가 있음

  • 하단 스캔 안내 문구(예: "바코드를 선에 맞춰주세요")가 네비게이션 바와 시각적으로 겹침

  • ic_media_previous 아이콘이 "뒤로가기" 의미보다 "미디어 이전" 느낌에 가까워 직관성이 떨어짐


즉, 기능 완성도보다 실사용 UX 디테일을 끌어올리는 작업이 필요했다.




오늘 적용한 변경 사항


1) 레거시 스캔 화면 안전영역(insets) 보정



  • 파일: app/src/main/java/com/billcorea/barcodevoucher0407/feature/scan/LegacyQrScanActivity.kt

  • applySystemBarInsets에서 상단/하단 인셋을 분리 반영

    • 상단 인셋: 뒤로가기/플래시 버튼 margin 보정

    • 하단 인셋: 스캔 안내 문구(statusView) 패딩 보정




val topBars = insets.getInsets(
WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.displayCutout(),
)
val bottomBars = insets.getInsets(WindowInsetsCompat.Type.navigationBars())

(backButton.layoutParams as FrameLayout.LayoutParams).topMargin = baseBackTop + topBars.top
(flashButton.layoutParams as FrameLayout.LayoutParams).topMargin = baseFlashTop + topBars.top
statusView.setPadding(0, 0, 0, baseStatusBottom + bottomBars.bottom)

효과:



  • 버튼/안내 문구가 시스템 UI와 겹치지 않고 안정적으로 배치됨


2) 뒤로가기/플래시 버튼 시인성 개선



  • 파일: app/src/main/res/layout/activity_legacy_qr_scan.xml

  • 변경 내용:

    • 버튼 배경을 원형 반투명으로 통일

    • padding, scaleType 조정으로 아이콘 가독성 향상



  • 추가 리소스: app/src/main/res/drawable/bg_round_translucent_button.xml


<ImageButton
android:id="@+id/btnBack"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_round_translucent_button"
android:padding="12dp"
android:scaleType="centerInside"
android:src="@drawable/ic_arrow_back_24" />

효과:



  • 카메라 프리뷰 위에서도 버튼이 더 잘 보임


3) 뒤로가기 아이콘 교체 (media_previous -> arrow_back)



  • 기존: @android:drawable/ic_media_previous

  • 신규: @drawable/ic_arrow_back_24

  • 추가 리소스: app/src/main/res/drawable/ic_arrow_back_24.xml


<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
</vector>

효과:



  • 버튼 의미가 더 명확해져 사용자 혼란 감소


4) 리소스 lint 정리



  • android:tint 관련 경고/오류 포인트 정리

  • 현재 아이콘은 벡터 자체를 흰색으로 지정해 불필요 속성 제거


<!-- before -->
android:src="@drawable/ic_arrow_back_24"
android:tint="@android:color/white"

<!-- after -->
android:src="@drawable/ic_arrow_back_24"

효과:



  • 리소스 검사 에러 없이 안정 상태 유지




Phase 2 진행 맥락 정리


agent.md 기준으로 Phase 2는 체크 완료 상태이며, 오늘 작업은 그중 2-3 UX 개선 항목의 완성도 보강에 해당한다.


이미 완료된 Phase 2 주요 축:



  • 검색/필터/정렬

  • 영수증 이미지 첨부

  • 스캔 실패/중복 처리 UX 개선

  • DataStore 설정화


오늘은 위 기능들을 실제 화면 품질 관점에서 다듬는 "마감 폴리싱" 성격이었다.




작업하면서 얻은 인사이트



  • 기능 구현이 끝나도, 카메라 화면처럼 시스템 UI와 맞물리는 영역은 인셋 처리가 UX 품질을 크게 좌우한다.

  • 아이콘은 단순 미관이 아니라 행동 의미 전달 그 자체다. (media_previous vs arrow_back)

  • 작은 시각 개선(배경, 패딩, 배치)이 사용자 체감 품질을 빠르게 끌어올린다.




다음 계획


Phase 3로 넘어가며 아래 순서로 진행할 예정이다.



  1. Kakao Map 연동(상세 -> 지도)

  2. In-app Update 적용

  3. 통계/리포트(월별 금액, 카테고리)




한 줄 회고


오늘은 "새 기능 추가"보다 "이미 있는 기능을 편하게 쓰게 만드는 작업"이 얼마나 중요한지 다시 확인한 하루였다.





오늘의 이야기


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




2026/05/17

오늘의 이야기



#스치니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, a must-have app for badminton clubs!
👉 Match Play – Record Scores & Find Opponents 🎉
Perfect for anywhere, alone, with friends, or in a club! 🤝
If you like badminton, definitely try it

Go to app 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기

**) 단계별 구현 로드맵 (MVP -> 확장)


앱 작업중 이미지



 


Phase 1 - MVP (핵심 기능)



  • Hilt/Room 기본 세팅

  • Receipt Entity/DAO/Repository 구현

  • 스캔 화면 + 코드값 저장

  • 목록/상세/수정/삭제 (현재 상세는 Edit 화면 겸용)

  • 기본 테스트(DAO + ViewModel)


Phase 2 - 사용자 경험 강화



  • 검색/필터/정렬

  • 영수증 이미지 첨부

  • 스캔 실패/중복 처리 UX 개선

  • DataStore 설정화


2-1) 검색/필터/정렬


세부 작업



  • ReceiptUiStatesort, filters 상태(기간/금액/저장여부 등) 추가

  • ReceiptListScreen 상단을 검색 + 필터 + 정렬 UI로 확장

  • ReceiptDao에 필터/정렬 쿼리 추가(또는 통합 쿼리 전략 적용)

  • ReceiptRepository.observeReceipts(...)를 query + sort + filter 입력으로 확장

  • ReceiptViewModel에서 검색/필터/정렬을 단일 Flow 파이프라인으로 결합


완료 기준 (Acceptance Criteria)



  • 검색어/필터/정렬 변경 시 목록이 즉시 반영된다

  • 빈 결과/초기 상태/검색 결과 상태가 UI에서 구분된다


권장 테스트 포인트



  • DAO 테스트: 정렬 우선순위 및 필터 조합 결과 검증

  • ViewModel 테스트: query/sort/filter 변경 시 상태 전이 검증


2-2) 영수증 이미지 첨부


세부 작업



  • ReceiptEditScreen에 이미지 첨부/변경/삭제 액션 및 썸네일 추가

  • ActivityResult 기반 이미지 선택 플로우 연결

  • imageUri 저장/수정 경로를 Repository 저장 로직에 반영

  • URI 접근 실패 시 플레이스홀더 + 재선택 안내 UI 제공

  • 목록 카드에서 첨부 여부(썸네일/아이콘) 표시


완료 기준 (Acceptance Criteria)



  • 이미지 첨부 후 저장 시 재진입해도 첨부 상태가 유지된다

  • 잘못된 URI/권한 문제 시 크래시 없이 복구 안내가 표시된다


권장 테스트 포인트



  • Repository 테스트: imageUri 저장/수정/삭제 검증

  • UI 테스트: 첨부 전/후/삭제 상태 렌더링 검증


2-3) 스캔 실패/중복 처리 UX 개선


세부 작업



  • 스캔 결과 모델을 성공/취소/실패/중복으로 구분

  • 취소/실패(raw 없음) 시 사용자 피드백 + 재시도 액션 제공

  • 중복 판단 기준 정의 및 DAO/Repository 중복 조회 API 추가

  • 중복 시 기존 열기/신규 저장 선택 다이얼로그 제공

  • 실패/중복 이벤트를 scan_history에 기록


완료 기준 (Acceptance Criteria)



  • 취소/실패/중복 상황에서 다음 행동(재시도/이동) 안내가 제공된다

  • 동일 코드 재스캔 시 중복 정책 분기가 일관되게 동작한다


권장 테스트 포인트



  • Repository 테스트: 중복 판단 경계값 검증

  • UI 테스트: 실패/중복 다이얼로그 표시 및 액션 검증


2-4) DataStore 설정화


세부 작업



  • DataStore 의존성 추가 및 버전 카탈로그 반영

  • 설정 모델(SortOrder, 기본 필터, 스캔 옵션)과 SettingsDataStore 구현

  • Hilt 모듈에 DataStore/Settings Repository 제공 추가

  • ViewModel에서 DataStore Flow와 목록 Flow 결합

  • 최소 UI(정렬/필터 선택)에서 설정 저장 연결


완료 기준 (Acceptance Criteria)



  • 선택한 정렬/필터 기본값이 앱 재실행 후에도 유지된다

  • 설정 변경 시 목록이 즉시 반영된다


권장 테스트 포인트



  • DataStore 테스트: 기본값/쓰기/읽기/복원 검증

  • ViewModel 테스트: 설정 Flow 반영으로 목록 상태 변경 검증


Phase 3 - 고도화 기능



  • Kakao Map 연동(상세 -> 지도)

  • In-app Update 적용

  • 통계/리포트(월별 금액, 카테고리)





오늘의 이야기


#스하리1000명프로젝트,
Bị lạc ở Hàn Quốc? Ngay cả khi bạn không nói được tiếng Hàn, ứng dụng này vẫn giúp bạn đi lại dễ dàng.
Chỉ cần nói ngôn ngữ của bạn—nó sẽ dịch, tìm kiếm và hiển thị kết quả bằng ngôn ngữ của bạn.
Tuyệt vời cho du khách! Hỗ trợ hơn 10 ngôn ngữ bao gồm tiếng Anh, tiếng Nhật, tiếng Trung, tiếng Việt, v.v.
Hãy thử nó ngay bây giờ!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




오늘의 이야기

#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase 🎯 야 너 토요일마다 로또 확인하냐? 나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ 근데 이제는 그냥 안 해 AI한테 맡겼어 🤖✨ 그것도 구글 Gemini로다가! ...