Watch Pomodoro Timer — Overview
Android 모바일 앱과 Wear OS 워치 앱을 함께 제공하는 포모도로 타이머입니다. 모바일과 워치 어느 쪽에서도 독립적으로 타이머를 실행할 수 있고, 기록은 두 기기에서 공유됩니다.
주요 기능
- 포모도로 타이머 — 작업/휴식/긴 휴식 3단계 루프. 세션 수와 각 단계 길이를 사용자 지정
- 모바일 타이머 — 포그라운드 서비스 +
AlarmManager로 Doze Mode 및 백그라운드 상태에서도 정확한 만료 보장 (v6.0.0+)
- 워치 독립 타이머 — 모바일 없이 워치 단독 사용 가능
- 홈 화면 위젯 — 2x2 / 4x4 크기로 타이머 상태 확인 및 제어 (v7.0.0+)
- 워치페이스 컴플리케이션 — 오늘의 완료 세션 수를 워치페이스에 표시
- 통계 대시보드 — 일간/주간 집중 시간, 시간대별 패턴, 연속 기록, 월별 잔디 차트
- 동기 부여 인용구 — 타이머 시작 시 짧은 인용구 (v5.0.0+)
- 온보딩 — 첫 실행 시 가이드
기술 스택
- 모바일 앱: Kotlin, Fragment, ViewBinding + DataBinding, ViewModel, LiveData, DataStore (Preferences), Gson, Material Components
- 워치 앱: Kotlin, Jetpack Compose for Wear OS, Horologist, Wear Complications API
- 기기 간 통신: Wear Data Layer (
MessageClient, DataClient)
- 백그라운드 실행: Foreground Service (
specialUse), AlarmManager.setExact() + USE_EXACT_ALARM
- 수익화: Google AdMob, Google Play Billing, User Messaging Platform (GDPR)
- 최소 SDK: 26 (앱), 30 (워치)
아키텍처 요약
- 모바일 앱은 단일
MainActivity 하위에 MainFragment / SettingsFragment / TimerRecordsFragment 구조
- 공유 ViewModel(
MainViewModel)이 설정과 타이머 기록 LiveData를 관리
- 타이머 기록은
DataStore("timer_records")에 Gson JSON으로 저장
- 설정은
SharedPreferences("MySettings")에 저장
- 모바일/워치 기록 충돌은 타임스탬프 ±5분 + 동일 타이머 타입 기준으로 모바일 우선 병합