package Ġme . jacob rr . whats app analyzer . logic Ċ Ċ import Ġjava . io . Serializable Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . DateFormat . getDate Instance Ċ import Ġjava . text . ParseException Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Zone Id Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashMap Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġj acob Ġon Ġ 2 2 / 1 1 / 2 0 1 5 . Ċ Ġ* ĠS ister Ġclass Ġof ĠCon versation Data , Ġit 's Ġused Ġto Ġstore Ġpart Ġof Ġthe Ġdata Ġto Ġthe Ġlocal ĠDB Ċ Ġ*/ Ċ class ĠCon versation Data DB Ġ: ĠI Conversation Data Ġ{ ĊĠĠĠ Ġ// < Name , Ġ< messages , ĠMessage Share , ĠWord s Avg >> ĊĠĠĠ Ġprivate Ġvar Ġid : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġparticipants Map : ĠMap < String , ĠTrip let > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġvar Ġmost Talk ed Day T : ĠTuple B ĊĠĠĠ Ġprivate Ġvar Ġmost Talk ed Month T : ĠTuple A ĊĠĠĠ Ġoverride Ġvar Ġtotal Messages : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġval Ġparticipants : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġparticipants Map . keys . toList () ĊĠĠĠ Ġoverride Ġval Ġmost Talk ed Day : ĠLocalDate ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmost Talk ed Day T . x ĊĠĠĠ Ġoverride Ġvar Ġtotal Days Talk ed : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġval Ġmost Talk ed Month : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmost Talk ed Month T . x ĊĠĠĠ Ġoverride Ġvar Ġdaily Avg : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġvar Ġreal Daily Avg : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġvar Ġconversation Name : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġmonth DB : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ most Talk ed Month T " ĊĊĠĠĠ Ġval Ġday DB : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ most Talk ed Day T " ĊĊĠĠĠ Ġval Ġparticipants DB : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġparticipants Map . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġres Ġ+ Ġ" |" Ġ+ Ġs Ġ+ Ġ"-" Ġ+ Ġparticipants Map [ s ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( id : ĠInt , Ġdaily Avg : ĠFloat , Ġmost Talk ed Day : ĠString , Ġmost Talk ed Month : ĠString , Ġparticipants : ĠString , Ġreal Daily Avg : ĠFloat , Ġtotal Days Talk ed : ĠInt , Ġtotal Messages : ĠInt , Ġconversation Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġthis . daily Avg Ġ= Ġdaily Avg ĊĠĠĠĠĠĠĠ Ġthis . most Talk ed Day T Ġ= ĠTuple B ( most Talk ed Day ) ĊĠĠĠĠĠĠĠ Ġthis . most Talk ed Month T Ġ= ĠTuple A ( most Talk ed Month ) ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠHashMap < String , ĠTrip let >() ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġparticipants . split ("\\ | ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġfor Ġ( part Ġin Ġparts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( part Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin ip art Ġ= Ġpart . split ("- ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa [ min ip art [ 0 ]] Ġ= ĠTrip let ( min ip art [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . participants Map Ġ= Ġa ĊĠĠĠĠĠĠĠ Ġthis . conversation Name Ġ= Ġconversation Name ĊĠĠĠĠĠĠĠ Ġthis . real Daily Avg Ġ= Ġreal Daily Avg ĊĠĠĠĠĠĠĠ Ġthis . total Days Talk ed Ġ= Ġtotal Days Talk ed ĊĠĠĠĠĠĠĠ Ġthis . total Messages Ġ= Ġtotal Messages ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( cv : ĠI Conversation Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . most Talk ed Day T Ġ= ĠTuple B ( cv . most Talk ed Day , Ġcv . get Day Data ( cv . most Talk ed Day )) ĊĠĠĠĠĠĠĠ Ġthis . most Talk ed Month T Ġ= ĠTuple A ( cv . most Talk ed Month , Ġcv . getMonth Data ( cv . most Talk ed Month )) ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= ĠHashMap < String , ĠTrip let >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġcv . participants ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn [ s ] Ġ= ĠTrip let ( cv . get Participant Count ( s ), Ġcv . get Participant Share ( s ), Ġcv . get Words Avg ( s )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . participants Map Ġ= Ġn ĊĠĠĠĠĠĠĠ Ġthis . total Messages Ġ= Ġcv . total Messages ĊĠĠĠĠĠĠĠ Ġthis . total Days Talk ed Ġ= Ġcv . total Days Talk ed ĊĠĠĠĠĠĠĠ Ġthis . daily Avg Ġ= Ġcv . daily Avg ĊĠĠĠĠĠĠĠ Ġthis . real Daily Avg Ġ= Ġcv . real Daily Avg ĊĠĠĠĠĠĠĠ Ġthis . conversation Name Ġ= Ġcv . conversation Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Participant Count ( pt : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparticipants Map [ pt ] !!. x ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Participant Share ( pt : ĠString ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparticipants Map [ pt ] !!. y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Words Avg ( pt : ĠString ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparticipants Map [ pt ] !!. z ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Month Data ( month : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmost Talk ed Month T . y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Day Data ( date : ĠLocalDate ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmost Talk ed Day T . y ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠTuple A Ġ: ĠSerializable Ġ{ ĊĠĠĠ Ġvar Ġx : ĠString ĊĠĠĠ Ġvar Ġy : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġconstructor ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġs . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġparts [ 0 ] ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= ĠInteger . parseInt ( parts [ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( x : ĠString , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ x ,$ y " ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠTuple B Ġ: ĠSerializable Ġ{ ĊĠĠĠ Ġvar Ġx : ĠLocalDate ĊĠĠĠ Ġvar Ġy : ĠInt ĊĊĠĠĠ Ġconstructor ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġs . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= ĠInstant . of Epoch Milli ( sdf . parse ( parts [ 0 ]) !!. time ). at Zone ( Zone Id . system Default ()). to LocalDate () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= ĠLocalDate . now () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . y Ġ= ĠInteger . parseInt ( parts [ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( x : ĠLocalDate , Ġy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ sdf . format ( Date . from ( x . at Start OfDay (). at Zone ( Zone Id . system Default ()). to Instant ())) }, $ y " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= Ġget Date Instance ( DateFormat . SHORT ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠTrip let Ġ: ĠSerializable Ġ{ ĊĠĠĠ Ġval Ġx : ĠInt ĊĠĠĠ Ġval Ġy : ĠFloat ĊĠĠĠ Ġval Ġz : ĠFloat ĊĊĠĠĠ Ġconstructor ( x : ĠInt , Ġy : ĠFloat , Ġz : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġs . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= ĠInteger . parseInt ( parts [ 0 ]) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġjava . lang . Float . parseFloat ( parts [ 1 ]) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġjava . lang . Float . parseFloat ( parts [ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ x ,$ y ,$ z " ĊĠĠĠ Ġ} Ċ }