package Ġcom . nik ola . jak sh ic . d agger . match stats . comparison Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġco il . load Ċ import Ġcom . nik ola . jak sh ic . d agger . R Ċ import Ġcom . nik ola . jak sh ic . d agger . databinding . Fragment Comparison Binding Ċ import Ġcom . nik ola . jak sh ic . d agger . match stats . Match Stats UI Ċ import Ġcom . nik ola . jak sh ic . d agger . match stats . Match Stats ViewModel Ċ import Ġcom . nik ola . jak sh ic . d agger . util . D ota Util Ċ import Ġcom . nik ola . jak sh ic . spider chart . Spider Data Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ // ĠNot Ġusing Ġ@ Android EntryPoint , ĠViewModel Ġis Ġinstantiated Ġby Ġparent - fragment . Ċ class ĠComparison Fragment Ġ: ĠFragment ( R . layout . fragment _ comparison ), ĊĠĠĠ ĠComparison Dialog . Comparison ClickListener Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Match Stats ViewModel >( ĊĠĠĠĠĠĠĠ Ġowner Producer Ġ= Ġ{ Ġrequire Parent Fragment () Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Comparison Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġval ĠMAX _ HER O _ DA MAGE _ PER _ MINUTE Ġ= Ġ 8 0 0 F ĊĠĠĠ Ġprivate Ġval ĠMAX _ TO WER _ DA MAGE _ PER _ MINUTE Ġ= Ġ 3 0 0 F ĊĠĠĠ Ġprivate Ġval ĠMAX _ LAST _ H ITS _ PER _ MINUTE Ġ= Ġ 1 2 F ĊĠĠĠ Ġprivate Ġval ĠMAX _ DEN IES _ PER _ MINUTE Ġ= Ġ 3 F ĊĠĠĠ Ġprivate Ġval ĠMAX _ G OLD _ PER _ MINUTE Ġ= Ġ 7 0 0 F ĊĠĠĠ Ġprivate Ġval ĠMAX _ EX PER I ENCE _ PER _ MINUTE Ġ= Ġ 6 0 0 F ĊĊĠĠĠ Ġprivate Ġvar Ġleft Player Index Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġright Player Index Ġ= Ġ 5 ĊĊĠĠĠ Ġprivate Ġvar ĠSELECT ED _ PLAYER Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġval ĠSELECT ED _ PLAYER _ LEFT Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠSELECT ED _ PLAYER _ RIGHT Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġvar Ġstats : ĠMatch Stats UI ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġleft Player Index Ġ= ĠsavedInstanceState ?. getInt (" player 1 ", Ġ 0 ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġright Player Index Ġ= ĠsavedInstanceState ?. getInt (" player 2 ", Ġ 5 ) Ġ?: Ġ 5 ĊĠĠĠĠĠĠĠ ĠSELECT ED _ PLAYER Ġ= ĠsavedInstanceState ?. getInt (" selected Player ", Ġ- 1 ) Ġ?: Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Comparison Binding . bind ( view ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . match . observe ( view Lifecycle Owner ) Ġ{ Ġstats Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stats ?. players ?. size Ġ== Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stats Ġ= Ġstats ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetData ( stats ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdialog : ĠComparison Dialog ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsetup Dialog () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dialog ?. is Added Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Ġ= ĠComparison Dialog . newInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Player Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Player Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats . players . map Ġ{ Ġit . hero Id Ġ}. toList (). to Long Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. setTarget Fragment ( this , Ġ 3 0 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. show ( parent FragmentManager , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . player 1 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ED _ PLAYER Ġ= ĠSELECT ED _ PLAYER _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . player 2 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ED _ PLAYER Ġ= ĠSELECT ED _ PLAYER _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Int (" player 1 ", Ġleft Player Index ) ĊĠĠĠĠĠĠĠ Ġout State . put Int (" player 2 ", Ġright Player Index ) ĊĠĠĠĠĠĠĠ Ġout State . put Int (" selected Player ", ĠSELECT ED _ PLAYER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetData ( stats : ĠMatch Stats UI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= ĠlistOf (" LH ", Ġ" DN ", Ġ" TD ", Ġ" G PM ", Ġ" X PM ", Ġ" HD ") ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer 1 Ġ= Ġstats . players [ left Player Index ] ĊĠĠĠĠĠĠĠ Ġval Ġplayer 2 Ġ= Ġstats . players [ right Player Index ] ĊĊĠĠĠĠĠĠĠ Ġval Ġduration In Minutes Ġ= ĠTimeUnit . SECONDS . to Minutes ( stats . duration ) ĊĊĠĠĠĠĠĠĠ Ġval Ġentries 1 Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 1 . last Hits . toFloat () Ġ/ Ġ( MAX _ LAST _ H ITS _ PER _ MINUTE Ġ* Ġduration In Minutes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 1 . den ies . toFloat () Ġ/ Ġ( MAX _ DEN IES _ PER _ MINUTE Ġ* Ġduration In Minutes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 1 . tower Damage . toFloat () Ġ/ Ġ( MAX _ TO WER _ DA MAGE _ PER _ MINUTE Ġ* Ġduration In Minutes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 1 . gold Per Min . toFloat () Ġ/ Ġ( MAX _ G OLD _ PER _ MINUTE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 1 . xp Per Min . toFloat () Ġ/ Ġ( MAX _ EX PER I ENCE _ PER _ MINUTE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 1 . hero Damage Ġ/ Ġ( MAX _ HER O _ DA MAGE _ PER _ MINUTE Ġ* Ġduration In Minutes ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġentries 2 Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 2 . last Hits . toFloat () Ġ/ Ġ( MAX _ LAST _ H ITS _ PER _ MINUTE Ġ* Ġduration In Minutes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 2 . den ies . toFloat () Ġ/ Ġ( MAX _ DEN IES _ PER _ MINUTE Ġ* Ġduration In Minutes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 2 . tower Damage . toFloat () Ġ/ Ġ( MAX _ TO WER _ DA MAGE _ PER _ MINUTE Ġ* Ġduration In Minutes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 2 . gold Per Min . toFloat () Ġ/ Ġ( MAX _ G OLD _ PER _ MINUTE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 2 . xp Per Min . toFloat () Ġ/ Ġ( MAX _ EX PER I ENCE _ PER _ MINUTE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ* Ġplayer 2 . hero Damage Ġ/ Ġ( MAX _ HER O _ DA MAGE _ PER _ MINUTE Ġ* Ġduration In Minutes ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor 1 Ġ= ĠContext Compat . getColor ( require Context (), ĠR . color . comparison _ player 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġcolor 2 Ġ= ĠContext Compat . getColor ( require Context (), ĠR . color . comparison _ player 2 ) ĊĊĠĠĠĠĠĠĠ Ġbinding . spider Chart . setData ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ider Data ( entries 1 , Ġcolor 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ider Data ( entries 2 , Ġcolor 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . spider Chart . set Labels ( labels ) ĊĠĠĠĠĠĠĠ Ġbinding . spider Chart . setRotation Angle ( 1 2 0 f ) ĊĠĠĠĠĠĠĠ Ġbinding . spider Chart . refresh () ĊĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Hero . load ( D ota Util . get Hero ( require Context (), Ġplayer 1 . hero Id )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Hero . load ( D ota Util . get Hero ( require Context (), Ġplayer 2 . hero Id )) ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Player 1 Name . text Ġ= Ġget Player Name ( player 1 ) ĊĠĠĠĠĠĠĠ Ġbinding . tv Player 2 Name . text Ġ= Ġget Player Name ( player 2 ) ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Player 1 K da . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . match _ k da , Ġplayer 1 . k ills , Ġplayer 1 . deaths , Ġplayer 1 . ass ists ) ĊĠĠĠĠĠĠĠ Ġbinding . tv Player 2 K da . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . match _ k da , Ġplayer 2 . k ills , Ġplayer 2 . deaths , Ġplayer 2 . ass ists ) ĊĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item 0 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item 0 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item 1 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item 1 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item 2 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item 2 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item 3 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item 3 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item 4 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item 4 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item 5 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item 5 )) ĊĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Back pack 0 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . back pack 0 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Back pack 1 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . back pack 1 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Back pack 2 . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . back pack 2 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 1 Item Neutral . load ( D ota Util . getItem ( require Context (), Ġplayer 1 . item Neutral )) ĊĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item 0 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item 0 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item 1 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item 1 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item 2 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item 2 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item 3 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item 3 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item 4 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item 4 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item 5 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item 5 )) ĊĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Back pack 0 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . back pack 0 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Back pack 1 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . back pack 1 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Back pack 2 . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . back pack 2 )) ĊĠĠĠĠĠĠĠ Ġbinding . img Player 2 Item Neutral . load ( D ota Util . getItem ( require Context (), Ġplayer 2 . item Neutral )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Player Name ( item : ĠMatch Stats UI . Player Stats UI ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ! TextUtils . isEmpty ( item . name ) Ġ-> Ġitem . name ĊĠĠĠĠĠĠĠ Ġ! TextUtils . isEmpty ( item . persona Name ) Ġ-> Ġitem . persona Name ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Unknown " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( player Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stats Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( SELECTED _ PLAYER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ED _ PLAYER _ RIGHT Ġ-> Ġright Player Index Ġ= Ġplayer Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ED _ PLAYER _ LEFT Ġ-> Ġleft Player Index Ġ= Ġplayer Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetData ( stats !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }