오늘은 뽀모도로 타이머를 만들어봤다.
뽀모도로는 기법은 시간 관리 방법론 25분간 집중해서 일을 한 다음 5분간 휴식하는 방식이다. '뽀모도로'는 이탈리아어로 토마토를 뜻한다.
프란체스코 시릴로가 대학생 시절 토마토 모양으로 생긴 요리용 타이머를 이용해 25분간 집중 후 휴식하는 일처리 방법을 제안한데서 그 이름이 유래했다. 출처 - 위키백과
사용자가 SeekBar를 이용하여 원하는 시간을 분 단위로 맞춘다.
시간을 설정하면 째깍 거리는 소리와 함께 카운트다운이 실행된다.
카운트 다운 완료 후에는 00초를 알리는 알람을 울려준다.
seekBar의 타이머가 카운트다운 되고 있을 때, 시간을 재설정하면
시간이 두가지로 나뉘어 함께 카운트 되는 이슈가 있었다.
SeekBar의 onStopTrackingTouch(), 즉 시간 설정이 끝났을 때 타이머를 재시작하는 로직으로 구현하여 타이머가 하나 더 생성된 것이 이유였다.
시간을 변경 하려고 seekBar를 터치하는 순간에 타이머를 정지 시키기 위해, onStartTrackingTouch() 에 타이머를 정지 시키도록 구현하여 해결 하였다.
// soundPool 빌드 처리
private val soundPool = SoundPool.Builder().build()
// 알람
private var bellId: Int? = null
bellId = soundPool.load(this, R.raw.timer_bell, 1)
bellId?.let { it ->
soundPool.play(it, 1F, 1F, 0, -1, 1F)
}
soundPool.play에 필요한 파라미터들은 다음과 같다.추가적으로, soundPool의 경우 메모리를 많이 잡아 먹기 때문에 destroy될 때 마다 할당된 음악을 해제해주는 것이 좋다.
override fun onDestroy() {
super.onDestroy()
soundPool.release() // soundPool에 로드되었던 파일들 해제
}
UI 전체 색을 변경하더라도, APP을 시작할때 잠깐, 하얀색이 비춰지는 것을 볼 수 있다.
APP의 UI도 결국, window창 위에 그려지는 것이기 때문에 이 window창 색 까지 변경 해 주어야 하는 것이다.
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.PomodoroTimer" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- 이 부분을 추가하여 변경해준다. -->
<item name="android:windowBackground">@color/main_red</item>
</style>
</resources>
Gif로 첨부해야해서 아쉽다!!
실제로 영상을 보면 째깍째깍 하는 소리가 넘 상큼하다.