package Ġua . it ay son lab . home feed er . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġua . it ay son lab . home feed er . R Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Locale Ċ import Ġkotlin . math . min Ċ Ċ object ĠRelative Time Helper Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcalendar : ĠCalendar ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCalendar . getInstance () ĊĊĠĠĠ Ġprivate Ġval ĠcurrentTime : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĊĠĠĠ Ġprivate Ġfun Ġget Absolute Date ( context : ĠContext , Ġi : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval Ġj Ġ= Ġi Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= Ġcalendar ĊĠĠĠĠĠĠĠ Ġval Ġi 2 Ġ= Ġcalendar . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . MINUTE , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . HOUR _ OF _ DAY , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . MILLI SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtime In Millis Ġ= Ġcalendar . time In Millis ĊĠĠĠĠĠĠĠ Ġvar Ġj 2 Ġ= Ġ 8 6 4 0 0 0 0 0 . to Long () ĊĠĠĠĠĠĠĠ Ġvar Ġj 3 Ġ= Ġtime In Millis Ġ+ Ġj 2 ĊĠĠĠĠĠĠĠ Ġvar Ġj 4 Ġ= Ġj 3 Ġ+ Ġj 2 ĊĠĠĠĠĠĠĠ Ġj 2 Ġ= Ġtime In Millis Ġ- Ġj 2 ĊĠĠĠĠĠĠĠ Ġcalendar . time In Millis Ġ= Ġj ĊĠĠĠĠĠĠĠ Ġj 4 -- ĊĠĠĠĠĠĠĠ Ġval Ġlocale : ĠLocale ĊĠĠĠĠĠĠĠ Ġval Ġstr : ĠString ĊĠĠĠĠĠĠĠ Ġvar Ġformat : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( j Ġin Ġj 3 .. j 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . EN GL ISH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ= Ġ"% s Ġ% s Ġ% d :% 0 2 d " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtomorrow Ġ= Ġresources . getString ( R . string . tom orrow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Ġ= Ġresources . getString ( if Ġ( calendar . get ( Calendar . HOUR _ OF _ DAY ) Ġ== Ġ 1 ) ĠR . string . date _ at _ 1 am Ġelse ĠR . string . date _ at ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour OfDay Ġ= Ġcalendar . get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġcalendar . get ( Calendar . MINUTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠString . format ( locale , Ġstr , Ġtomorrow , Ġat , Ġhour OfDay , Ġminute ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġj 3 -- ĊĠĠĠĠĠĠĠ Ġif Ġ( j Ġin Ġtime In Millis .. j 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . EN GL ISH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ= Ġ"% s Ġ% s Ġ% d :% 0 2 d " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoday Ġ= Ġresources . getString ( R . string . today ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Ġ= Ġresources . getString ( if Ġ( calendar . get ( Calendar . HOUR _ OF _ DAY ) Ġ== Ġ 1 ) ĠR . string . date _ at _ 1 am Ġelse ĠR . string . date _ at ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour OfDay Ġ= Ġcalendar . get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġcalendar . get ( Calendar . MINUTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠString . format ( locale , Ġstr , Ġtoday , Ġat , Ġhour OfDay , Ġminute ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( j Ġ< Ġj 2 Ġ|| Ġj Ġ>= Ġtime In Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring : ĠString Ġ= Ġif Ġ( calendar . get ( Calendar . YEAR ) Ġ!= Ġi 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . date _ format _ day _ month _ year , Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ), Ġresources . getString Array ( R . array . date _ short months )[ min ( calendar . get ( 2 ), ĠCalendar . HOUR _ OF _ DAY )], Ġcalendar . get ( Calendar . YEAR )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . date _ format _ day _ month , Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ), Ġresources . getString Array ( R . array . date _ short months )[ min ( calendar . get ( 2 ), ĠCalendar . HOUR _ OF _ DAY )]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( string ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . EN GL ISH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr 2 Ġ= Ġ" Ġ% s Ġ% d :% 0 2 d " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Ġ= Ġresources . getString ( if Ġ( calendar . get ( Calendar . HOUR _ OF _ DAY ) Ġ== Ġ 1 ) ĠR . string . date _ at _ 1 am Ġelse ĠR . string . date _ at ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour OfDay Ġ= Ġcalendar . get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġcalendar . get ( Calendar . MINUTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠString . format ( locale , Ġstr 2 , Ġat , Ġhour OfDay , Ġminute ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠstringBuilder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Ġ= ĠLocale . EN GL ISH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ= Ġ"% s Ġ% s Ġ% d :% 0 2 d " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyesterday Ġ= Ġresources . getString ( R . string . y esterday ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Ġ= Ġresources . getString ( if Ġ( calendar . get ( Calendar . HOUR _ OF _ DAY ) Ġ== Ġ 1 ) ĠR . string . date _ at _ 1 am Ġelse ĠR . string . date _ at ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour OfDay Ġ= Ġcalendar . get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġcalendar . get ( Calendar . MINUTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠString . format ( locale , Ġstr , Ġyesterday , Ġat , Ġhour OfDay , Ġminute ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġformat ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ- ĠContext Ġto Ġuse Ġwith Ġresources ĊĠĠĠĠ Ġ* Ġ@ param Ġi Ġ- ĠTime Ġin Ġseconds Ġ( Unix Ġtimestamp ) ĊĠĠĠĠ Ġ* Ġ@ return ĠTime Ġrelative Ġto Ġthis ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget DateFormat ted Relative ( context : ĠContext , Ġi : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠcurrentTime Ġ- Ġi ĊĠĠĠĠĠĠĠ Ġif Ġ( currentTime Ġ>= Ġ 1 4 4 0 0 Ġ|| ĠcurrentTime Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Absolute Date ( context , Ġi ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ>= Ġ 1 0 8 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString Array ( R . array . date _ ago _ h rs )[ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ>= Ġ 7 2 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString Array ( R . array . date _ ago _ h rs )[ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ>= Ġ 3 6 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString Array ( R . array . date _ ago _ h rs )[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ>= Ġ 6 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Quantity String ( R . plurals . date _ ago _ mins , Ġ( currentTime Ġ/ Ġ 6 0 ). toInt (), Ġ( currentTime Ġ/ Ġ 6 0 ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentTime Ġ<= Ġ 1 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . date _ ago _ now ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Quantity String ( R . plurals . date _ ago _ secs , ĠcurrentTime . toInt (), ĠcurrentTime . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }