/* Ċ Copyright Ġ( C ) Ġ 2 0 1 9 ĠMat thew ĠCh andler Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ċ this Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ċ the ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ċ use , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ċ the ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ċ subject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ċ The Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ copies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ IMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS Ċ FOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR Ċ COPY RIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER Ċ IN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN Ċ CONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ */ Ċ Ċ package Ġorg . mat tv ch andler . progress bars . list Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . util . Log Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġandroidx . databinding . Observable Int Ċ import Ġorg . mat tv ch andler . progress bars . R Ċ import Ġorg . mat tv ch andler . progress bars . db . Data Ċ import Ġorg . mat tv ch andler . progress bars . settings . Settings . Companion . get _ date _ format Ċ import Ġorg . mat tv ch andler . progress bars . settings . Settings . Companion . get _ time _ format Ċ import Ġjava . lang . Math .* Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util .* Ċ Ċ // Ġis Ġa Ġgiven Ġyear Ġa Ġle ap Ġyear ? Ċ private Ġfun Ġis _ le ap _ year ( year : ĠInt ): ĠBoolean Ċ { ĊĠĠĠ Ġreturn Ġwhen ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġyear Ġ% Ġ 4 Ġ!= Ġ 0 ĠĠ Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġyear Ġ% Ġ 1 0 0 Ġ!= Ġ 0 Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġyear Ġ% Ġ 4 0 0 Ġ!= Ġ 0 Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġnumber Ġof Ġdays Ġin Ġeach Ġmonth . Ġassumes Ġnon - le ap Ġyear Ġfor ĠFeb . Ċ private Ġval Ġdays _ in _ mon Ġ= Ġint ArrayOf ( 3 1 , Ġ 2 8 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 , Ġ 3 0 , Ġ 3 1 ) Ċ Ċ // Ġstruct Ġbound Ġto Ġprogress _ bar _ row Ġlayout Ċ // Ġclass Ġand Ġfields Ġneed Ġto Ġbe Ġpublic Ġso Ġthey Ġcan Ġbe Ġaccessed Ġby Ġbinding Ċ class ĠView _ data Ġ( context : ĠContext , Ġdata : ĠData ): ĠData ( data ) Ġ// Ġcontains Ġall ĠDB Ġdata Ġfrom Ġinherited Ġstruct Ċ { ĊĠĠĠ Ġ// Ġfields Ġused Ġby ĠUI ĊĠĠĠ Ġval Ġstart _ date _ disp Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġstart _ time _ disp Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġend _ date _ disp ĠĠ Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġend _ time _ disp ĠĠ Ġ= ĠObservable Field < String >() ĊĊĠĠĠ Ġval Ġprogress _ disp Ġ= ĠObservable Int () ĊĠĠĠ Ġval Ġpercentage _ disp Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġtime _ text _ disp Ġ= ĠObservable Field < String >() ĊĊĠĠĠ Ġ// Ġonly Ġshow Ġcount down Ġwhen Ġthere Ġis Ġsomething Ġto Ġshow ĊĠĠĠ Ġvar Ġshow _ time _ text : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġstart _ time _ date Ġ= ĠDate () ĊĠĠĠ Ġprivate Ġval Ġend _ time _ date Ġ= ĠDate () ĊĊĠĠĠ Ġprivate Ġfun Ġcalc _ percentage ( total _ interval : ĠLong , Ġelapsed : ĠLong , Ġnow _ s : ĠLong ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġconvert Ġand Ġround Ġpercentage Ġto Ġthe Ġspecified Ġprecision ĊĠĠĠĠĠĠĠ Ġvar Ġdec _ format Ġ= Ġ" 0 " ĊĊĠĠĠĠĠĠĠ Ġif ( precision Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdec _ format Ġ+= Ġ"." ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġprecision ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdec _ format Ġ+= Ġ" 0 " ĊĊĠĠĠĠĠĠĠ Ġdec _ format Ġ+= Ġ"% " ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġstart Ġand Ġend Ġare Ġthe Ġsame Ġtime , Ġset Ġto Ġ 1 0 0 Ġif Ġin Ġthe Ġpast , Ġ 0 Ġif Ġin Ġthe Ġfuture ĊĠĠĠĠĠĠĠ Ġwhen ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal _ interval Ġ!= Ġ 0 L Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage _ fraction Ġ= Ġmin ( max ( elapsed . toDouble () Ġ/ Ġtotal _ interval . toDouble (), Ġ 0 . 0 ), Ġ 1 . 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage _ disp . set ( Decimal Format ( dec _ format ). format ( percentage _ fraction )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress _ disp . set (( percentage _ fraction Ġ* Ġ 1 0 0 . 0 ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnow _ s Ġ>= Ġend _ time Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage _ disp . set ( Decimal Format ( dec _ format ). format ( 1 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress _ disp . set ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage _ disp . set ( Decimal Format ( dec _ format ). format ( 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress _ disp . set ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġget Ġremaining Ġtime Ġ- Ġtime Ġbased Ġ( easy ) ĊĠĠĠ Ġprivate Ġfun Ġget _ remaining _ easy ( res : ĠResources , Ġto _ start : ĠLong , Ġremaining : ĠLong ): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġand Ġformat Ġremaining Ġtime ĊĠĠĠĠĠĠĠ Ġvar Ġrev ised _ remaining Ġ= Ġremaining Ġ// Ġwork Ġaround Ġfor Ġlack Ġof Ġpass Ġby Ġcopy ĊĠĠĠĠĠĠĠ Ġval Ġremaining _ prefix : ĠString ĊĊĠĠĠĠĠĠĠ Ġwhen ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto _ start Ġ>= Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġis Ġbefore Ġstart , Ġso Ġcount Ġdown Ġto Ġstart Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrev ised _ remaining Ġ= Ġto _ start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ prefix Ġ= Ġif ( separate _ time ) Ġpre _ text Ġelse Ġsingle _ pre _ text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrev ised _ remaining Ġ>= Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġis Ġbetween Ġstart Ġand Ġend , Ġso Ġcount Ġdown Ġto Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ prefix Ġ= Ġcount down _ text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! separate _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" get _ remaining _ easy ", Ġ" countdown Ġon Ġsingle Ġtime : Ġto _ start Ġ$ to _ start , Ġremaining : Ġ$ remaining , Ġrev ised _ remaining : Ġ$ rev ised _ remaining ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġis Ġafter Ġend , Ġso Ġcount Ġup Ġfrom Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ prefix Ġ= Ġif ( separate _ time ) Ġpost _ text Ġelse Ġsingle _ post _ text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġ# Ġof Ġeach Ġunit ĊĠĠĠĠĠĠĠ Ġval Ġweeks Ġ= Ġabs ( rev ised _ remaining ) Ġ/ Ġ( 7 L Ġ* Ġ 2 4 L Ġ* Ġ 6 0 L Ġ* Ġ 6 0 L ) ĊĠĠĠĠĠĠĠ Ġvar Ġdays Ġ= Ġabs ( rev ised _ remaining ) Ġ/ Ġ( 2 4 L Ġ* Ġ 6 0 L Ġ* Ġ 6 0 L ) ĊĠĠĠĠĠĠĠ Ġvar Ġhours Ġ= Ġabs ( rev ised _ remaining ) Ġ/ Ġ( 6 0 L Ġ* Ġ 6 0 L ) ĊĠĠĠĠĠĠĠ Ġvar Ġminutes Ġ= Ġabs ( rev ised _ remaining ) Ġ/ Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġseconds Ġ= Ġabs ( rev ised _ remaining ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġeach Ġunit Ġshown , Ġtake Ġits Ġvalue Ġout Ġof Ġthe Ġsmaller Ġunit Ġcounts ĊĠĠĠĠĠĠĠ Ġ// Ġex : Ġif Ġthere Ġis Ġ 1 Ġminute Ġand Ġ 9 0 Ġseconds , Ġpull Ġ 6 0 Ġseconds Ġout Ġto Ġgive Ġ 2 m Ġ 3 0 s ĊĠĠĠĠĠĠĠ Ġif ( show _ week s ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ% = Ġ 7 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ% = Ġ 7 L Ġ* Ġ 2 4 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ% = Ġ 7 L Ġ* Ġ 2 4 L Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ% = Ġ 7 L Ġ* Ġ 2 4 L Ġ* Ġ 6 0 L Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( show _ days ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ% = Ġ 2 4 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ% = Ġ 2 4 L Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ% = Ġ 2 4 L Ġ* Ġ 6 0 L Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( show _ hours ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ% = Ġ 6 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ% = Ġ 6 0 L Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( show _ minutes ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ% = Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġformat _ text ( res , Ġremaining _ prefix , Ġseconds , Ġminutes , Ġhours , Ġdays , Ġweeks , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġget Ġremaining Ġtime Ġ- Ġcalendar Ġbased Ġ( not Ġas Ġeasy ) ĊĠĠĠ Ġprivate Ġfun Ġget _ remaining _ hard ( res : ĠResources , Ġto _ start : ĠLong , Ġremaining : ĠLong ): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcal _ start Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġvar Ġcal _ end Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcal _ end . time Ġ= Ġend _ time _ date ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġand Ġformat Ġremaining Ġtime ĊĠĠĠĠĠĠĠ Ġval Ġremaining _ prefix : ĠString ĊĊĠĠĠĠĠĠĠ Ġwhen ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto _ start Ġ>= Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġis Ġbefore Ġstart , Ġso Ġcount Ġdown Ġto Ġstart Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ prefix Ġ= Ġif ( separate _ time ) Ġpre _ text Ġelse Ġsingle _ pre _ text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( separate _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal _ end . time Ġ= Ġstart _ time _ date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Ġ>= Ġ 0 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġis Ġbetween Ġstart Ġand Ġend , Ġso Ġcount Ġdown Ġto Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ prefix Ġ= Ġcount down _ text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! separate _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" get _ remaining _ hard ", Ġ" countdown Ġon Ġsingle Ġtime : Ġto _ start Ġ$ to _ start , Ġremaining : Ġ$ remaining , Ġcal _ start : Ġ$ cal _ start , Ġcal _ end : Ġ$ cal _ end ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġis Ġafter Ġend , Ġso Ġcount Ġup Ġfrom Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ prefix Ġ= Ġif ( separate _ time ) Ġpost _ text Ġelse Ġsingle _ post _ text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal _ end Ġ= Ġcal _ start . clone () Ġas ĠCalendar ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal _ start . time Ġ= Ġend _ time _ date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġseconds Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġminutes Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġhours Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġdays Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġweeks : ĠLong ĊĠĠĠĠĠĠĠ Ġvar Ġmonths Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġyears Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġ// Ġsubtract Ġcalendar Ġdates , Ġwith Ġmanual Ġborrow ing Ġbetween Ġunits ĊĠĠĠĠĠĠĠ Ġseconds Ġ+= Ġ( cal _ end . get ( Calendar . SECOND ) Ġ- Ġcal _ start . get ( Calendar . SECOND )). to Long () ĊĠĠĠĠĠĠĠ Ġif ( seconds Ġ< Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ-= Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ+= Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġminutes Ġ+= Ġ( cal _ end . get ( Calendar . MINUTE ) Ġ- Ġcal _ start . get ( Calendar . MINUTE )). to Long () ĊĠĠĠĠĠĠĠ Ġif ( minutes Ġ< Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ-= Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ+= Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhours Ġ+= Ġ( cal _ end . get ( Calendar . HOUR _ OF _ DAY ) Ġ- Ġcal _ start . get ( Calendar . HOUR _ OF _ DAY )). to Long () ĊĠĠĠĠĠĠĠ Ġif ( hours Ġ< Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ-= Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ+= Ġ 2 4 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdays Ġ+= Ġ( cal _ end . get ( Calendar . DAY _ OF _ MONTH ) Ġ- Ġcal _ start . get ( Calendar . DAY _ OF _ MONTH )). to Long () ĊĠĠĠĠĠĠĠ Ġif ( days Ġ< Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġborrow ing Ġfrom Ġmonths Ġis Ġtricky , Ġbecause Ġthe Ġ# Ġof Ġdays Ġ/ Ġmon Ġvar ies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonths Ġ-= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcal _ end _ month Ġ= Ġcal _ end . get ( Calendar . MONTH ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ+= Ġif ( cal _ end _ month Ġ== ĠCalendar . M ARCH Ġ&& Ġis _ le ap _ year ( cal _ end . get ( Calendar . YEAR ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor ĠFeb Ġon Ġa Ġle ap Ġyear , Ġwe Ġget Ġ 2 9 Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 9 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġget Ġprevious Ġmonth 's Ġ# Ġof Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cal _ end _ month Ġ== ĠCalendar . J AN U ARY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays _ in _ mon [ Calendar . DE CE MBER ]. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays _ in _ mon [ cal _ end _ month Ġ- Ġ 1 ]. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġre calculate Ġweeks Ġfrom Ġ# Ġof Ġdays ĊĠĠĠĠĠĠĠ Ġweeks Ġ= Ġdays Ġ/ Ġ 7 L ĊĠĠĠĠĠĠĠ Ġdays Ġ% = Ġ 7 L ĊĊĠĠĠĠĠĠĠ Ġmonths Ġ+= Ġ( cal _ end . get ( Calendar . MONTH ) Ġ- Ġcal _ start . get ( Calendar . MONTH )). to Long () ĊĠĠĠĠĠĠĠ Ġif ( months Ġ< Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyears Ġ-= Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonths Ġ+= Ġ 1 2 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġyears Ġ+= Ġ( cal _ end . get ( Calendar . YEAR ) Ġ- Ġcal _ start . get ( Calendar . YEAR )). to Long () ĊĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġeach Ġunit Ġnot Ġshown , Ġadd Ġits Ġvalue Ġto Ġthe Ġnext Ġsmaller Ġunit ĊĠĠĠĠĠĠĠ Ġif (! show _ years ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonths Ġ+= Ġyears Ġ* Ġ 1 2 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif (! show _ months ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġagain , Ġtricky Ġlogic Ġfor Ġmonths ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġa Ġraw Ġnumber Ġof Ġdays , Ġincluding Ġweeks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtmp _ days Ġ= Ġdays Ġ+ Ġ 7 L Ġ* Ġweeks ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurr _ mon Ġ= Ġcal _ start . get ( Calendar . MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurr _ year Ġ= Ġcal _ start . get ( Calendar . YEAR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġeach Ġmonth Ġin Ġthe Ġremaining Ġrange , Ġadd Ġcorrect Ġ# Ġof Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( m Ġin Ġ 0 Ġuntil Ġmonths Ġ% Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp _ days Ġ+= Ġif ( curr _ mon Ġ== ĠCalendar . FE BR U ARY Ġ&& Ġis _ le ap _ year ( curr _ year )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 9 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays _ in _ mon [ curr _ mon ]. to Long () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġwe Ġwrap Ġaround Ġthe Ġyear 's Ġend , Ġget Ġthe Ġremaining Ġcounts Ġfrom Ġthe Ġend 's Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ++ curr _ mon Ġ== Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr _ mon Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr _ year Ġ= Ġcal _ end . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre calculate Ġweeks Ġand Ġdays ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweeks Ġ= Ġtmp _ days Ġ/ Ġ 7 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġtmp _ days Ġ% Ġ 7 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif (! show _ week s ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ+= Ġweeks Ġ* Ġ 7 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif (! show _ days ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ+= Ġdays Ġ* Ġ 2 4 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif (! show _ hours ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ+= Ġhours Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif (! show _ minutes ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ+= Ġminutes Ġ* Ġ 6 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġformat _ text ( res , Ġremaining _ prefix , Ġseconds , Ġminutes , Ġhours , Ġdays , Ġweeks , Ġmonths , Ġyears ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat _ text ( res : ĠResources , Ġremaining _ prefix : ĠString , Ġseconds : ĠLong , Ġminutes : ĠLong , Ġhours : ĠLong , Ġdays : ĠLong , Ġweeks : ĠLong , Ġmonths : ĠLong , Ġyears : ĠLong ): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġremaining _ str Ġ= Ġremaining _ prefix ĊĊĠĠĠĠĠĠĠ Ġ// Ġfigure Ġout Ġwhich Ġunits Ġto Ġdisplay , Ġbased Ġon Ġuser Ġselection Ġand Ġomit ting Ġany Ġw / Ġ 0 Ġvalues ĊĠĠĠĠĠĠĠ Ġval Ġseconds _ shown Ġ= Ġshow _ seconds ĊĠĠĠĠĠĠĠ Ġval Ġminutes _ shown Ġ= Ġshow _ minutes Ġ&& Ġ( minutes Ġ> Ġ 0 Ġ|| Ġ! seconds _ shown ) ĊĠĠĠĠĠĠĠ Ġval Ġhours _ shown Ġ= Ġshow _ hours Ġ&& Ġ( hours Ġ> Ġ 0 Ġ|| Ġ! minutes _ shown Ġ&& Ġ! seconds _ shown ) ĊĠĠĠĠĠĠĠ Ġval Ġdays _ shown Ġ= Ġshow _ days Ġ&& Ġ( days Ġ> Ġ 0 Ġ|| Ġ! hours _ shown Ġ&& Ġ! minutes _ shown Ġ&& Ġ! seconds _ shown ) ĊĠĠĠĠĠĠĠ Ġval Ġweeks _ shown Ġ= Ġshow _ week s Ġ&& Ġ( week s Ġ> Ġ 0 Ġ|| Ġ! days _ shown Ġ&& Ġ! hours _ shown Ġ&& Ġ! minutes _ shown Ġ&& Ġ! seconds _ shown ) ĊĠĠĠĠĠĠĠ Ġval Ġmonths _ shown Ġ= Ġshow _ months Ġ&& Ġ( months Ġ> Ġ 0 Ġ|| Ġ! week s _ shown Ġ&& Ġ! days _ shown Ġ&& Ġ! hours _ shown Ġ&& Ġ! minutes _ shown Ġ&& Ġ! seconds _ shown ) ĊĠĠĠĠĠĠĠ Ġval Ġyears _ shown Ġ= Ġshow _ years Ġ&& Ġ( years Ġ> Ġ 0 Ġ|| Ġ! months _ shown Ġ&& Ġ! week s _ shown Ġ&& Ġ! days _ shown Ġ&& Ġ! hours _ shown Ġ&& Ġ! minutes _ shown Ġ&& Ġ! seconds _ shown ) ĊĊĠĠĠĠĠĠĠ Ġval Ġand Ġ= Ġres . getString ( R . string . and ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfigure Ġout Ġplural ity Ġand Ġwhich Ġunit Ġto Ġadd Ġ' and ' Ġto ĊĠĠĠĠĠĠĠ Ġif ( years _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . year , Ġyears . toInt (), Ġyears . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrailing Ġ= Ġ( if ( months _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( week s _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( days _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( hours _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( minutes _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( seconds _ shown ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( trailing Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( trailing Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ$ and Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( months _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . month , Ġmonths . toInt (), Ġmonths . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrailing Ġ= Ġ( if ( week s _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( days _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( hours _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( minutes _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( seconds _ shown ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( trailing Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( trailing Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ$ and Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( week s _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . week , Ġweeks . toInt (), Ġweeks . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrailing Ġ= Ġ( if ( days _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( hours _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( minutes _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( seconds _ shown ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( trailing Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( trailing Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ$ and Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( days _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . day , Ġdays . toInt (), Ġdays . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrailing Ġ= Ġ( if ( hours _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if ( minutes _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( seconds _ shown ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( trailing Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( trailing Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ$ and Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( hours _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . hour , Ġhours . toInt (), Ġhours . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrailing Ġ= Ġ( if ( minutes _ shown ) Ġ 1 Ġelse Ġ 0 ) Ġ+ Ġif ( seconds _ shown ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( trailing Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( trailing Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ$ and Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( minutes _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . minute , Ġminutes . toInt (), Ġminutes . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( seconds _ shown ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġ", Ġ$ and Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( seconds _ shown ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining _ str Ġ+= Ġres . get Quantity String ( R . plurals . second , Ġseconds . toInt (), Ġseconds . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġremaining _ str ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġrun Ġevery Ġsecond . Ġupdates Ġpercentage Ġand Ġtime Ġremaining Ġtext ĊĠĠĠ Ġfun Ġupdate _ display ( res : ĠResources ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġnow , Ġstart Ġand Ġend Ġtimes Ġas Ġunix Ġepoch Ġtimestamps ĊĠĠĠĠĠĠĠ Ġval Ġnow _ s Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġcalculate Ġpercentage Ġif Ġis Ġbeing Ġshown ĊĠĠĠĠĠĠĠ Ġif ( show _ progress Ġ&& Ġseparate _ time ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal _ interval Ġ= Ġend _ time Ġ- Ġstart _ time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed Ġ= Ġnow _ s Ġ- Ġstart _ time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc _ percentage ( total _ interval , Ġelapsed , Ġnow _ s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġare Ġat Ġthe Ġstart , Ġshow Ġstarted Ġtext ĊĠĠĠĠĠĠĠ Ġif ( separate _ time Ġ&& Ġnow _ s Ġ== Ġstart _ time ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ text _ disp . set ( start _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġare Ġat Ġthe Ġend Ġ( or Ġpast Ġwhen Ġterminate Ġis Ġset ) Ġshow Ġcompleted Ġtext ĊĠĠĠĠĠĠĠ Ġelse Ġif (( terminate Ġ&& Ġnow _ s Ġ> Ġend _ time ) Ġ Ġ|| Ġnow _ s Ġ== Ġend _ time ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( separate _ time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ text _ disp . set ( complete _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ text _ disp . set ( single _ complete _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġcalculate Ġtime Ġremaining Ġif Ġstart Ġor Ġcomplete Ġtext Ġshouldn 't Ġbe Ġshown ĊĠĠĠĠĠĠĠ Ġif ( show _ time _ text ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtime Ġfrom Ġnow Ġto Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremaining Ġ= Ġend _ time Ġ- Ġnow _ s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtime Ġfrom Ġnow Ġto Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto _ start Ġ= Ġif ( separate _ time ) Ġstart _ time Ġ- Ġnow _ s Ġelse Ġremaining ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnot Ġneeding Ġcalendar Ġtime Ġdifference , Ġwe Ġcan Ġdo Ġcalculation Ġfrom Ġthe Ġdifference Ġin Ġseconds Ġ( m uch Ġeasier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremaining _ str Ġ= Ġif (! show _ years Ġ&& Ġ! show _ months ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget _ remaining _ easy ( res , Ġto _ start , Ġremaining ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget _ remaining _ hard ( res , Ġto _ start , Ġremaining ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ text _ disp . set ( remaining _ str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġre init ( context : ĠContext ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġformat Ġstart Ġand Ġend Ġdates Ġand Ġtimes ĊĠĠĠĠĠĠĠ Ġval Ġdate _ df Ġ= Ġget _ date _ format ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġtime _ df Ġ= Ġget _ time _ format () ĊĊĠĠĠĠĠĠĠ Ġstart _ time _ date . time Ġ= Ġstart _ time Ġ* Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠ Ġend _ time _ date . time Ġ= Ġend _ time Ġ* Ġ 1 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġstart _ date _ disp . set ( date _ df . format ( start _ time _ date )) ĊĠĠĠĠĠĠĠ Ġstart _ time _ disp . set ( time _ df . format ( start _ time _ date )) ĊĠĠĠĠĠĠĠ Ġend _ date _ disp . set ( date _ df . format ( end _ time _ date )) ĊĠĠĠĠĠĠĠ Ġend _ time _ disp . set ( time _ df . format ( end _ time _ date )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġinitial Ġpercentage Ġto Ġ 0 ĊĠĠĠĠĠĠĠ Ġprogress _ disp . set ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġshow _ time _ text Ġ= Ġshow _ years Ġ|| Ġshow _ months Ġ|| Ġshow _ week s Ġ|| Ġshow _ days Ġ|| Ġshow _ hours Ġ|| Ġshow _ minutes Ġ|| Ġshow _ seconds ĊĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġa Ġrun Ġnow , Ġto Ġset Ġup Ġremaining Ġdisplay Ġdata ĊĠĠĠĠĠĠĠ Ġupdate _ display ( context . resources ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġinit ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġre init ( context ) ĊĠĠĠ Ġ} Ċ } Ċ