사고의 흐름 #1,#2,#3
-
싱글 액티비티 + 네비게이션 컴포넌트
- DeepLink 로 구성하여 화면 이동 및 데이터 전달
-
Navigation action
- popUpTo 속성은 주어진 도착점(destination)이 나올 때까지 백 스택을 팝업
- popUpToInclusive 속성은 주어진 목적지를 포함해서 모든 목적지들을 백 스택에서 제거
-
- UTC : 실제 경과 시간은 시간대/언어의 영향을 받지 않기 때문에 경과 시간에 기반한 알람(예: 30초마다 실행되는 알람)을 설정하는 데 적합
- RTC : 실시간 시계 유형은 현재 언어에 따라 달라지는 알람에 더 적합
- 시간대 알림
-
재생은 MediaPlayer, RingToneManager 가 있는것으로 확인됨
- 링톤 타입의 아이템을 재생할 것이기에 RingToneManager를 사용하기로 선택
- 알람이름,
- 알람시간,
- 알람설정여부,
- 링톤 Uri
-
아키텍처 설계
-
AppModule(Activity)
- common
- ui
- feature
- alarmList
- settings
- alarm
- dataBase
- common
-
CommonModule
- UI 구현시 재사용이 많은 BaseActivity, BaseFragment, ListAdapter, ViewHolder
-
-
Data 정의
-
DataTable 구현 및 테스트 코드
- Room 의 In Memory Database를 생성하여 UnitTest
-
UseCase 작성
-
ViewModel 기능 구현 및 테스트 코드 작성
-
UI 구현
-
알람매니저 기능 테스트
-
[리마인드 알림] UI 구현
- 네비게이션 컴포넌트를 잘 활용할 수 있어야 함
- 알람 등록/해제(AlarmManager, PendingIntent)
- 알람이 울리는 조건(중요)
- 알람 재등록시 현재시간보다 이전이면 바로 울리기 때문에 +1 Day 를 해주어야 함
- BroadCastReceiver action 처리
- 사용자 디바이스 재부팅시 알람 재등록 관련 암시적 브로드 캐스트 예외
대상 간 이동을 위해 Safe Args Gradle 플러그인을 사용하는 것이 좋습니다. 이 플러그인은 대상 간 유형 안전 탐색 및 인수 전달을 사용 설정하는 간단한 객체 및 빌더 클래스를 생성합니다.
- classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") 추가
아래와 같이 사용 가능 override fun onClick(view: View) { val action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment() view.findNavController().navigate(action) }
전달
override fun onClick(v: View) {
val amountTv: EditText = view!!.findViewById(R.id.editTextAmount)
val amount = amountTv.text.toString().toInt()
val action = SpecifyAmountFragmentDirections.confirmationAction(amount)
v.findNavController().navigate(action)
}
수신
val args: ConfirmationFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val tv: TextView = view.findViewById(R.id.textViewAmount)
val amount = args.amount
tv.text = amount.toString()
}