From 6ecc7e2a386a20ba5f2225acb70b7719b2dbb31f Mon Sep 17 00:00:00 2001 From: William Brawner Date: Sat, 4 Jul 2020 19:41:45 -0700 Subject: [PATCH] Play sounds on each timer phase --- app/src/main/assets/audio/cool.mp3 | Bin 0 -> 14320 bytes app/src/main/assets/audio/high.mp3 | Bin 0 -> 19588 bytes app/src/main/assets/audio/low.mp3 | Bin 0 -> 4840 bytes app/src/main/assets/audio/rest.mp3 | Bin 0 -> 6489 bytes app/src/main/assets/audio/warm.mp3 | Bin 0 -> 6459 bytes .../activetimer/ActiveTimerFragment.kt | 40 ++++++++++++++++-- .../activetimer/ActiveTimerViewModel.kt | 15 +++---- .../trainterval/model/IntervalTimer.kt | 25 ++++++++--- .../main/res/layout/fragment_active_timer.xml | 12 ++++-- 9 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 app/src/main/assets/audio/cool.mp3 create mode 100644 app/src/main/assets/audio/high.mp3 create mode 100644 app/src/main/assets/audio/low.mp3 create mode 100644 app/src/main/assets/audio/rest.mp3 create mode 100644 app/src/main/assets/audio/warm.mp3 diff --git a/app/src/main/assets/audio/cool.mp3 b/app/src/main/assets/audio/cool.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ea98e2c2bd9792923df9e5f2a2d6bc2b0a706d22 GIT binary patch literal 14320 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 literal 0 HcmV?d00001 diff --git a/app/src/main/assets/audio/low.mp3 b/app/src/main/assets/audio/low.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cc18c07f2722005aac2f293ee5a86ec546b725c1 GIT binary patch literal 4840 zcmd^?dpuNY+sE%UX3WqqlkHfvSBM&oCWoD*j8jyK+N#N+XB?x#RCd|2voM2DjUA?1$@9K%&;H}t@8{Eh@Adi2nsu+a*6({=*L~mX zT7!*=rQqL<7ZSDwzsA5nFaT=3fW=~2SXkKD*x1|KySTWlS+mB&!^6|llaE_aP*8Yy zcw}VczJ2==5)#B>@sT4(PU4oIpI=;DTvk?AQBiUA>ec%C`nz}Uw&3>U$rG7O*3;87 zFfj1p!-p?lzF-)Jv)oT`_+tFEI3#!17CnB^F+I8$EqBFkS7UL7u^zH2IlueycV9eu z>)f&jF&LJxZF%1MkdUn(Dtz!ok=iQBSYJ>eSE1Ogo&GK?E~hYwrJPhd;-N8}p`wX9 zV8suTi}6Tl3={w}i6pXLs~e>$HY$M#GDQM$xAL2HBu1otezDUeS<-Ret<)YRV8)+M z_66EZz@Fju@czIwOBh%KEA7@eN?aV@&VyFrG+`;LD}tJqL+xl8bf@KEaCcctP-`s# z#D?0BGxpmlgf;{4>_L|1kcVAh^(viu=PsJ+;S2vpxL@4MXX>r~C8nco5}ax56#pAYv}v9bH#Y(R$$B8{uz22OvRhbw=k`# zv(B`|u;6{1ktLFl;Z3AQ#BIMxoBiIJ^D30C<0XFU^vYWOAflKF1WR)1KQ!>p7S=QxW=JzP zrRG5}i3c*h%Es+`OV4}_e&|`{4@|%$rjD6g=!lImrJoVUN)zY0;jX#oD3Yu65kn2@ zl=4ijm|G{AwJ0Y>;&Ob+RO4YXr3djo^XbInNoq?H!5Km7Guf81*VkmfQi`ogwx`Do5WkMq9w|T0 zqUqxi0Wbs>Z7NnIovI(^`MuWxSr@b;SS#+8IcQq}oOVATX?6i74KZfIAWELBt#Nf#Ih0a&?C}yQMc0}&bwGle6K?z0K!I^ z4*aO)NY>?}M!MF1g*SX9{IEROze%LZUmQ!`wpnFi=#|&QJz3Z&UeO63>xPNTmNSYm zIcun7{r1=wJABcvbrW4=FCf;zCsF?UQeVf@G67hiZK9S;b?jF^oNm+HegH(CGV>_TIsS%18-1PTa%8Q4>2y6$m(CS`(yG*)({(d&(% zLz}OAT*JmV(vQITnTd&POC3BR%D+?^=y;L}am#H;E8jOGfjsQF?bO6z6%$K;lh=M7 z$)CL#+o>~9y)$a;{Oj|Y=*a9e0LTXcHX(T&laav?t0_9JfWNrf-Y)YICf5xeiody0 zl}xp(4WHUzxXgrBb;Fk{3JGmWNq!_Qz(ZYJFi$|SpBt2XmS?3z#P%8N=dcY{$FSf_ zqAgdcL%In%8OG`HB=m`**`6H@34M&oa9n)^8i+Ltz{1=_CWVYDoyqqNYcfeSTIc#A z+ANic29QZK$pzh{ed4d-W7u$b41W5yHH!s;`2-!P!fD+G$C(QPW<=f~^S#x=f`!6M zoNeJC1@u`2?iA$#uZrAu6$=+XNIjD&Jslpd*rNJa`~1uuxbs z;HQvo%d9dPWdYt=1wH|>NSRmS^(fUR$exu4W`8tM5Q^4pS?*`2;1U`$iNNH?v3i6i z1vEnenRxPH$Q=P&?;OU0lPQIfx&l|`{9*^qdVK^2N|xgsahUmL(86(qnmN>YC7$~4 z94ao(J9Y1?7T!CDs!wZejB3l#<|+mAH-L^x8j8oU9ja$0F&`yx&FVRbV|SRLXvNY$ z26ZX(8Wcul`p7hrxo*0{G``DxqGNmpD>I(YULCnI=RGCACfnDsba{#9Oq2BZWbj1c z(;KO2KS&e+4lc_|GPPhTXDmrP*{?Y+^@HWIlUAIKZ}XSExvoAkmEYIMhQN}B*c>WQ zOf|F=x?7YeXQ9febuZywAmxzRqtb0}y%(?9h5HWmt_J_SL=)rcknD8l(VP|AAL(q4 z6{iMKZl&t)ox8hZq~M?bOZtxJ>Rf1Y|9}L#$s$=-u1rP=7^IJQ<9%yiUcK>JD9<#V zT%ljL+#r6j(BsLPPkk!2g8fV1;jo>cwor+vPd{5LpJG&Xv}gdnqLPCS-MZbkxUP$i@s z!bMfJ+ih<3Zw?fhu2N$cA#D&mJbvtaL^q^&E@di%iF|Gn0(5cb7_2Z;8)V)t;;8>N zgIEW{h*K|{;B=}|@}u#5z-+!9=ek*50+VbstsFLV`H42__%<9*1N$=8Hs<*xyCN#D z+-qC4YeV0Xv+H8qFsx7FGt)AuextR)$-50IbPlrGsp@{x%aF#G2G+VxV#IiOoeS$Lv5(3z4)IT?;m=a`zSF}6Auf}j;$BWe46}N}Cm`HZAtP;VA--&*& z3udMDXbprY4H+1;T7mOl##1cIdrbE7_Q1d1AsCo|{7^g}IIp~>`N5*RyEt-fSA*|;K7TE*{#t|+ z*RbG-Us-cg!>Uly6V=Acv}Op^YgW<7n3pUu{aHmZX?oUlEF>KH-5~UUljaGF%`g1Z=dSaFLkkxEc7E9NKXAU1K~a-U8JYQa~7XZ%}dfT>2(SYV)y{@brn~tpFke0e~Uw#6i@6n4d35y#?NB z{rzM|DFq`cR|Akm^*iCPMC{SornZ9G4*d&RX1S6pXYS7otg4!`F>t73!UP+e&hU5X z$-HY{pT0!tXD70A;DweFaqP||=DNKOI>Nk6cNYL08zKQ2`Hdml^_3GZV>_VE`tT{r z85`YT@4}6f^Ftg)ho7eXtz7?F>u;_Q961o-`v=b_=P>0=G_~9H8;|cnDJ~{B?~&`7 zY$w!MKWB@mFjA54@eSwu3<%C3xGu!&W=!Jy2zw*Rven;5`WqF3^9EdZG+u-ny_GqY#U-ZOjl8F)FT7yNJh z!}jh*>co&A6#%&apoE}}V2!W|!4F{%!a)JC2nh%o2&WJ#5E=wDBV0x3M!1DAfiNXt z7U2!TCxm4L7y%i}!_CIs!Pvmud_T7RFO^JbYFLU5Kurtuc)wNs;$JWRzdYe(KH?xU zU(@5uM@Sc2{wl#L2LNqzeRw2C$-8HBOTF-PE3u5==+Y?g86Nd2EiDx(2)q)<1OSDa zL4W{2V|sdeMvymbOH0dykEp4cnO88hUSRu`sa1T!kJyu|s>&+@rvr=_0-y*=S#Ei} z@o>#W4GypcWh{JJI;xm%B`K|I&w@HMxceovSOf6E&kKH z=>*jq&D!@i2o<{&(mX!0xJ}aOwj%3(n|nMclz+dJ7++X$xf339TC&br`H^2RR{q-u z816EWIUnv{zr4j%zTOqlP40@7d}U$(jwhoJ>MmbNfZ-kPRw7<^cAAX5e!POThsUg8 z_{)`DrnR+oBO_x~%Wy)9jVHxNS{(O#9SfNO5yclTeRSpUZ5itIF35o8gz6{qQ!Vit zXiyx~WEx73FJ=*JLp4#ML6(#d=98_epot3NjMT~k%whOzJu(EsM5oih?|nN~;kT*| zZ4*ev@`li#i+seaiS_`?@EEL>Anr-A3)(Z|<48!a(Fh{p`_sBd(T8a>L?v8lL&|d+ z7!-e{rN0CI_D_NETiC1jQzr};x;$ED0+bs7%6tg|8z;HIz^sYp1A}G;u7V3;?3uGc z#mT8?Xj}zlG7u2i^>o(X;y%br)`l}o3ga9n+9ZXFsH82(2Q*#mGH>(|n@AlYa+0#pH8&UQsAuHN^RGc= zL-Fwhw-_1x7iQ>(>UH#(nwRz2$K!V!(Ia_64vJPDVNII!Z{jlSi`6@I!pa<mPfwr|QqN{^8k(KBkoS?g&%y z7Bald>b(y#=ZS_ZuOSu1(yEn4XR^uKLdlI{hW1IpfrR0{talaR2egxJ8l`3pWOE6p zj9-{PB~wS)cX2UPtQ^qOPIMxCoed(8+#{)Wm}Jj~;r=vHoa6RyJD;blOyS6FNy z?&c}n^q$*(fot!bB!I}=86Y-jRet7I4)@2L8lC7f+BqNiRYk>BK|(_2LX5+qi$mg` zdB#|u&@2(@$*-lkV)S7ru1iss!j~!%QQ8}4lIkPkKCL#pS$vH8r%i*^twh=pL$1C?~l`iMLli>EmtLk6Xw29dJ`kz47bjuA-gYfrRQ1SFr64&dnFZJ@*GSb(_zEKyA! zm_z_5&rAb`g8ndj7(sgB9B?P&nQ-!{p)akv0a%TlsW_vokl#iKZfT;?5}FyACK5d* zLRldFN$n+qHc!t(9*7s2(L$MR)11VNu{G6k9hcreKD?t?C|s%NaM07Hp@q@#xKQKu ze#UXW@}1gQ59|!yrG-7O4u4RbGqm3GNm|X0@rH-X`u;v)9(UAJ3>D-}Y~@&7Z?uYE zPF{_Ux|5GvTg53AZ(UNco7Z4>m7lapO=YibLx4<~9XB^v&D-`aJ-je{xIfo9#9b#% zEyI~U-LS?$BPArdRHHxROYbEv0A9;L>;f6y%Z>p42wkpAu0*2#X|JNj#WC}weT$AQ$Q9SbD2#T zfQEYG3BTuW+171_bASLBD_!$ow3?ioI8K%YDyl-LCK&*Q?^)*XBwDriQ!>*S7!FuR zl^0Q&4xg7nm0Zx;+j1m+>s?}#QI6f4%}Q|+DH{NDh%Ai;3?jlm@ZO29c1?48St&m?$AXTbgv@zM2M>mJ|lX zuw-n)*^W>plbk%zWD%R>E=72m*}DL6ZJyFClOo2C@N#(@r|uA_>attbiB1{zoG{O?*CceKsZ@Zv z^^&OKpK-kpj2s-1m8ijOmNBGPj^=I2gW+G-gSTtAW%j+0n17VCLl7*!L+Tc)n(c1^ zMp;J}wzB2J<5xIH{P!potVSA*g#MaB0;EDJ2HM9VXi+yLH7ETPlWP#qP4-u!%0nIi zeP>H?1M&Ge9CKj)4YK^cLejDTPfaHlD9gJ#-`GM`q*d~)yI9n3^YzMdkUq5x)bNaG z!D~JjwU)~*n&+mWQ+;cjuGGZnokzMOJcZ$?Put&5gtd~&QawC23QcO6h=$0B)aBDq zF-^#xf+Qz<4bv)A5{6J&67G%UGf|s7HRE=uql$y8aity1~f{|9Udd7!<^!1l!8U$V7pW?q#QS4zPI_|U; zuVk9+L7~_LlZGz!`;&TR0ab-d?pr>JXxiK2t0(yY<2Vg~jTN~WO?W6NLd@FhZoEHs z>W8=JFu7&NK_&*bfbnE$+Cdu3M+=>S^E=DHLyPLIf?*Qix}SOHZ3mC}Rd4ztV#hn? zeDFo%QNI zq=c@VXZN-rpn8aF)$w#m_lh1Cz&g7ody7Wwv`CfP8yvhEe4lh|j<9eD>G#;>R(pE? z`|U%f+?K-qv+V}1d9xj!wTDdqiN3zR0j)+y1j8IQQPF{y8NHtYPEp@;C^EHdM@ook zcDx%3oDe4|j5!~_bK21L1>(@!jSuV#TA0Zc8+EDC)TrQ-oOH8A^9-i6w_VIJK9E{B ze@zCu_QI1%jV51mMa?m57b*-aBR4>}uA?N3O<(5I&T@^{yVk!hNdNR9+91wGd}f68T4j)qC?BA$o-jiH9cw?w&)>2*7FVEob)#iMd4L3#;P|Kh&TB5 zB4i44qK+qwy$wNF>U6qXV%tWlztDqp3Q11#s3(W(K;4YaO>ZOdh#;(ge1vL(mYdHA zb2xKWC^YC|H+sNc@j;Q%OSg1v>00PRsf@$+tlPN4Qut7(6R;?fuvSPU7m(`D6&q`6Djnf_`zt z<?3=~i$e5sr`yAlYCKN2KW zIw(G}DNPJe6x$c)#Jy4Bj*O*~S`offOKjMgH+JVsHt>FuK?-F$z-;T`my0f&2=GG# zq#s4Z-c0Twnd?UjzFk79W_w=62FFn~vu~e0eY5EB$)Y5h6IGP6bOw^<0G{x3EHaN@ z&Vm{J8|1)W1{xw4HZ8rQa5V9|;7$mOe9%-QqUBM13=lWd!?9A(*X{83hlX4*RJSor z#xbE6=2*0KR=5$6#E@*6b)IXplO_FM=dUOuma1GS1t@h0?7FU)@*6?*W`OMnF_FM5 zMXG_^frrXjOwZcV+y&Ghm%is68~95L3)2k+*dxL+lVH*5yia4DHCRYGkmDt0&89eUbD@0e%gD4|AV0kRoakv?3Yy_P1Wy zDNEl~J7DNQ#hex5T6ExgWLTPvOq5OOStU#lwKs6ukG>-skgki&t0f?4P`P zY%)PrJj2EL-tJTx!8HX!*XQ|)sejM#_=BF&eS&~F5B2}jHGg-sMum#swbU3yZjv}% z)h=H$*EhZ%IX<>_@@#H*VJZXr70>$B2l(hUMr7QG`?_VY`wzdH@k?KmDs4*H@_0_JZh}CKt5H#K zhfC|X^*bUIkNhs&cWTm*h7J^*jB+j`{^DL6o$Y0fe9HF~;HmUO7k9>Bd+r>Jph?5a zG-QdSCF`z3w5B~vVIRw$$L{|5r+=eB=)(6k=}ZcWK@9cK!lDvyL8VO5z(fkciO$gT zHF;re+!iGx1eNOac(nsm)eb?If3pg&xa6T}6u_Ei_{e6aU9h2|*)>8)ri^DPq4C}- z8lgVk6I3B|kwAm*5WYZn-9khK>mx4o*!g|f#ApdB1C1&vMx9GEn_=$cbD(cec`o_w ziQ`GE&_yj08vLmbnHu)3N98)wSUJ>8&ctoj0YjQ1weKY-0uyfo%${B+?`^^88-pJ9 zRO%1cOsIrqfvXUi5(Ujbar~N)vI4BI%S+Vct{_%?g~a@$R2vR-m)#^+TxqnDVveWN zj67?|*YYt6O3)x17?xfA(Kc|_aC$ru7}k*M6ooXHw}XcbsoTgN42(!t!i%OQGoOQE z&23b|2DBX{g~N!Vnd}g}JQ|d;$Vx;E7Sp-Zp>g)ftr7|c&GeXssALS2B9BRVE|P@_ z>JgQ>fEe$SPk^e434Y*qCM{JofNIoJ?3z6@@h_{c8i#CyD2umM`aGZ5W}~&3146I$ zPnd^vG)j!0PAS%6Y$Kcx#iDt(;fHq37p0bW%c`iH_F2Akk4gUXvPVl|uHUIG5o&&q zd}Bj*oT|~Kd1^EwK;>6?ER0Eeb&0JgDasTLb#hp>rB ziFDdn$#&7BMp`^(QoS6vXKcF$eI;Px@=Nf5^OhyC{~PcM8=(uwNf+AR z{o<~k>0Ikf3Lm#@t|J)S!wMe{XwTW5Np z#!_ieMopzBI7-d^PUhemZpBkr>P*7i&x&Tj5_t*ww&}YLea6!&aJ5U>tln!!6{@eE zaAMTJqJ!SC$+!kEIw6s{2V2u`{9f|KN+-MEZ`%F0R0-xY2TnAksW%)_r!^#3 nTb5X={kJIpH+l*_L1vSBxNG#MgJxL(So4u9l)q{Bf35ll7%-4p literal 0 HcmV?d00001 diff --git a/app/src/main/assets/audio/warm.mp3 b/app/src/main/assets/audio/warm.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..67c2870c200da7491558051778c36ed289a71743 GIT binary patch literal 6459 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerFragment.kt b/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerFragment.kt index c9569f9..8f8d25c 100644 --- a/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerFragment.kt +++ b/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerFragment.kt @@ -1,26 +1,29 @@ package com.wbrawner.trainterval.activetimer +import android.media.AudioManager +import android.media.SoundPool import android.os.Bundle import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat.getSystemService import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.Observer +import androidx.lifecycle.viewModelScope import androidx.navigation.fragment.findNavController import com.wbrawner.trainterval.Logger import com.wbrawner.trainterval.R import com.wbrawner.trainterval.model.IntervalTimerDao +import com.wbrawner.trainterval.model.Phase import kotlinx.android.synthetic.main.fragment_active_timer.* -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel -import kotlinx.coroutines.launch +import kotlinx.coroutines.* import org.koin.android.ext.android.inject import org.koin.core.parameter.parametersOf + class ActiveTimerFragment : Fragment() { private var coroutineScope: CoroutineScope? = null @@ -28,11 +31,29 @@ class ActiveTimerFragment : Fragment() { private val logger: Logger by inject(parameters = { parametersOf("ActiveTimerStore") }) private val timerDao: IntervalTimerDao by inject() private var timerId: Long = 0 + private lateinit var soundPool: SoundPool + private val soundIds = mutableListOf() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) timerId = requireArguments().getLong(EXTRA_TIMER_ID) setHasOptionsMenu(true) + soundPool = SoundPool.Builder() + .setMaxStreams(Phase.values().size) + .build() + activeTimerViewModel.viewModelScope.launch { + if (soundIds.isEmpty()) { + val assetManager = context?.assets ?: return@launch + withContext(Dispatchers.IO) { + Phase.values().forEachIndexed { index, phase -> + soundIds.add( + index, + soundPool.load(assetManager.openFd("audio/${phase.soundFile}"), 1) + ) + } + } + } + } } override fun onOptionsItemSelected(item: MenuItem): Boolean = @@ -94,6 +115,17 @@ class ActiveTimerFragment : Fragment() { timeRemaining.text = state.timeRemaining timerSets.text = state.currentSet.toString() timerRounds.text = state.currentRound.toString() + state.soundId?.let { + playSound(soundIds[it]) + } + } + + private fun playSound(soundId: Int) { + val context = context ?: return + val audioManager = getSystemService(context, AudioManager::class.java) ?: return + val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC).toFloat() + val volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC).toFloat() / maxVolume + soundPool.play(soundId, volume, volume, 1, 0, 1f) } override fun onDestroyView() { diff --git a/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerViewModel.kt b/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerViewModel.kt index f7da846..27dfbb4 100644 --- a/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerViewModel.kt +++ b/app/src/main/java/com/wbrawner/trainterval/activetimer/ActiveTimerViewModel.kt @@ -42,16 +42,7 @@ class ActiveTimerViewModel : ViewModel() { currentRound = timer.cycles timeRemaining = timer.warmUpDuration currentPhase = Phase.WARM_UP - timerState.postValue( - TimerRunningState( - timer, - timeRemaining, - currentSet, - currentRound, - currentPhase, - timerJob != null - ) - ) + updateTimer() } } @@ -220,6 +211,7 @@ sealed class IntervalTimerActiveState { val timeRemaining: String, val currentSet: Int, val currentRound: Int, + val soundId: Int?, @ColorRes val timerBackground: Int, @DrawableRes val playPauseIcon: Int ) : IntervalTimerActiveState() { @@ -236,6 +228,9 @@ sealed class IntervalTimerActiveState { currentSet = currentSet, currentRound = currentRound, timerBackground = phase.colorRes, + soundId = if (timerRunning && timeRemaining == timer.durationForPhase(phase)) + phase.ordinal + else null, playPauseIcon = if (timerRunning) R.drawable.ic_pause else R.drawable.ic_play_arrow ) } diff --git a/app/src/main/java/com/wbrawner/trainterval/model/IntervalTimer.kt b/app/src/main/java/com/wbrawner/trainterval/model/IntervalTimer.kt index 0d8a718..2fcb578 100644 --- a/app/src/main/java/com/wbrawner/trainterval/model/IntervalTimer.kt +++ b/app/src/main/java/com/wbrawner/trainterval/model/IntervalTimer.kt @@ -18,14 +18,25 @@ data class IntervalTimer( val coolDownDuration: Long = TimeUnit.MINUTES.toMillis(5), val sets: Int = 4, val cycles: Int = 1 -) +) { + fun durationForPhase(phase: Phase) = when (phase) { + Phase.WARM_UP -> warmUpDuration + Phase.LOW_INTENSITY -> lowIntensityDuration + Phase.HIGH_INTENSITY -> highIntensityDuration + Phase.REST -> restDuration + Phase.COOL_DOWN -> coolDownDuration + } +} -enum class Phase(@ColorRes val colorRes: Int) { - WARM_UP(R.color.colorSurface), - LOW_INTENSITY(R.color.colorSurfaceLowIntensity), - HIGH_INTENSITY(R.color.colorSurfaceHighIntensity), - REST(R.color.colorSurfaceRest), - COOL_DOWN(R.color.colorSurfaceCoolDown), +enum class Phase( + @ColorRes val colorRes: Int, + val soundFile: String +) { + WARM_UP(R.color.colorSurface, "warm.mp3"), + LOW_INTENSITY(R.color.colorSurfaceLowIntensity, "low.mp3"), + HIGH_INTENSITY(R.color.colorSurfaceHighIntensity, "high.mp3"), + REST(R.color.colorSurfaceRest, "rest.mp3"), + COOL_DOWN(R.color.colorSurfaceCoolDown, "cool.mp3"), } @Dao diff --git a/app/src/main/res/layout/fragment_active_timer.xml b/app/src/main/res/layout/fragment_active_timer.xml index 90e9ec1..33f6a95 100644 --- a/app/src/main/res/layout/fragment_active_timer.xml +++ b/app/src/main/res/layout/fragment_active_timer.xml @@ -52,13 +52,15 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_set" - android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" /> + android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" + android:textColor="@color/colorOnSurface" /> @@ -77,13 +79,15 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_round" - android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" /> + android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" + android:textColor="@color/colorOnSurface" />