/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 , ĠB oom Apps ĠLLC . ĠĊ Ġ* ĠAll Ġrights Ġreserved . Ċ */ Ċ package Ġcom . boom apps . ste em app . ui . post Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . constraint . Constraint Layout Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . webkit . Web Chrome Client Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġcom . boom apps . ste em app . R Ċ import Ġcom . boom apps . ste em app . ui . Base Activity Ċ import Ġcom . boom apps . ste em app . ui . ViewState Ċ import Ġcom . boom apps . ste em app . ui . dialogs . Vote Post Dialog Ċ import Ġcom . boom apps . ste em app . ui . dialogs . Warning Dialog Ċ import Ġcom . boom apps . ste em app . ui . editor . input post ing key . Input New Post ing Key Activity Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġkotlinx . android . synt hetic . main . activity _ post .* Ċ import Ġjava . util .* Ċ Ċ class ĠPost View Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ ACTIVITY _ TITLE Ġ= Ġ" activity _ title " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ POST _ ID Ġ= Ġ" post _ id " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ URL Ġ= Ġ" url " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ TITLE Ġ= Ġ" title " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ AUTHOR Ġ= Ġ" author " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ AV AT AR _ URL Ġ= Ġ" avatar _ url " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ DATE Ġ= Ġ" date " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ COMMENTS _ NUM Ġ= Ġ" comments _ num " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ LINK _ NUM Ġ= Ġ" link _ num " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ V OTE _ NUM Ġ= Ġ" vote _ num " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ AMOUNT Ġ= Ġ" amount " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠINPUT _ NEW _ KEY _ POST _ ACTIVITY _ CODE Ġ= Ġ 3 2 ĊĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠPost ViewModel ĊĠĠĠ Ġvar Ġp Full Width Ġ= Ġ 0 ĊĊĠĠĠ Ġlateinit Ġvar Ġextra Url : ĠString ĊĠĠĠ Ġvar Ġextra Post Id : ĠLong Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġextra Title Ġ= Ġ"" ĊĠĠĠ Ġvar Ġextra Avatar U tl Ġ= Ġ"" ĊĠĠĠ Ġvar Ġextra Author Ġ= Ġ"" ĊĠĠĠ Ġvar Ġextra Date Ġ= Ġ- 1 L ĊĠĠĠ Ġvar Ġextra Amount Ġ= Ġ 0 . 0 f ĊĠĠĠ Ġvar Ġextra Comment Num Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġextra Links Num Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġextra Vote Num Ġ= Ġ 0 ĊĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprogress Params : ĠConstraint Layout . LayoutParams ĊĊĠĠĠ Ġ@ Suppress Lint (" Set JavaScript Enabled ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ post ) ĊĠĠĠĠĠĠĠ Ġval Ġbar Ġ= Ġsupport ActionBar ĊĠĠĠĠĠĠĠ Ġif Ġ( bar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbar . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġextract Extras () ĊĠĠĠĠĠĠĠ Ġinit Post Data UI () ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġintent . extras . getString ( EXTRA _ ACTIVITY _ TITLE ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠPost ViewModel Factory ( extra Post Id , Ġextra Url , Ġextra Title )). get ( Post ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġprogress Params Ġ= Ġpost WebView Progress . layout Params Ġas ĠConstraint Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġinit WebView () ĊĠĠĠĠĠĠĠ Ġobserve State () ĊĠĠĠĠĠĠĠ ĠviewModel . full Story Data . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ?. is V oted Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ vote Price Layout . setBackground Resource ( R . drawable . bg _ feed _ card _ price _ v oted _ selector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ tv Full Price . setTextColor ( Context Compat . getColor State List ( this , ĠR . color . feed _ card _ price _ un v oted _ text _ selector )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ vote Price Layout . setBackground Resource ( R . drawable . bg _ feed _ card _ price _ un v oted _ selector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ tv Full Price . setTextColor ( Context Compat . getColor State List ( this , ĠR . color . feed _ card _ price _ v oted _ text _ selector )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġa Post _ vote Price Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . has Post ing Key ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Invalid Re Enter Post ing Key Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis V oted Ġ= ĠviewModel . is V oted () Ġ?: Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is V oted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Un Vote Confirm Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Vote Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve State () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . state . observe ( this , ĠObserver < ViewState > Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( t ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView State . COMMON Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView State . PROGRESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis V oted Ġ= ĠviewModel . is V oted () Ġ?: Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is V oted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cancel ing Ġvote Ġ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sending Ġvote Ġ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView State . FAULT _ RESULT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . view State Pro ceeded () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . string Error . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWarning Dialog . getInstance (). show Special ( this , Ġnull , ĠviewModel . string Error , Ġ" Ok ", Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView State . SUCCESS _ RESULT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit WebView () Ġ{ ĊĠĠĠĠĠĠĠ Ġpost WebView . add On Layout ChangeListener ( object Ġ: ĠView . On Layout ChangeListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Layout Change ( v : ĠView ?, Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt , Ġold Left : ĠInt , Ġold Top : ĠInt , Ġold Right : ĠInt , Ġold Bottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Full Width Ġ= Ġright Ġ- Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost WebView . remove On Layout ChangeListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġpost WebView . web View Client Ġ= ĠWebView Client () // ĠLoading WebView Client ( loading Listener ) ĊĠĠĠĠĠĠĠ Ġpost WebView . web Chrome Client Ġ= Ġobject Ġ: ĠWeb Chrome Client () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( view : ĠWebView , Ġnew Progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Progress Changed ( view , Ġnew Progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpost WebView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġpost WebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġpost WebView . settings . load With Overview Mode Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġpost WebView . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . post Data . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Html ( it . body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Extras () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġin Data Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġif Ġ( inData Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Url Ġ= Ġin Data . getString Extra ( EXTRA _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Post Id Ġ= Ġin Data . getLong Extra ( EXTRA _ POST _ ID , Ġ- 1 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Title Ġ= Ġif Ġ( inData . has Extra ( EXTRA _ TITLE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Data . getString Extra ( EXTRA _ TITLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Avatar U tl Ġ= Ġin Data . getString Extra ( EXTRA _ AV AT AR _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Author Ġ= Ġin Data . getString Extra ( EXTRA _ AUTHOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Date Ġ= Ġin Data . getLong Extra ( EXTRA _ DATE , Ġ- 1 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Amount Ġ= Ġin Data . get Float Extra ( EXTRA _ AMOUNT , Ġ 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Comment Num Ġ= Ġin Data . getInt Extra ( EXTRA _ COMMENTS _ NUM , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Links Num Ġ= Ġin Data . getInt Extra ( EXTRA _ LINK _ NUM , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Vote Num Ġ= Ġin Data . getInt Extra ( EXTRA _ V OTE _ NUM , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Post Data UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( extra Avatar U tl . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( extra Avatar U tl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . disk Cache Strategy Of ( Disk Cache Strategy . ALL )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . circle Crop Transform ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( a Post _ iv Author Avatar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa Post _ tv Author . text Ġ= Ġextra Author ĊĠĠĠĠĠĠĠ Ġa Post _ tv Votes Number . text Ġ= Ġextra Vote Num . toString () ĊĠĠĠĠĠĠĠ Ġa Post _ tv Comment Number . text Ġ= Ġextra Comment Num . toString () ĊĠĠĠĠĠĠĠ Ġa Post _ tv Link Number . text Ġ= Ġextra Links Num . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( extra Date Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated . time In Millis Ġ= Ġextra Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs Created Ġ= Ġ" unknown " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( created . time In Millis Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Cal Ġ= Ġcurrent Date () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyears Delta Ġ= Ġcur Cal . get ( Calendar . YEAR ) Ġ- Ġcreated . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Delta Ġ= Ġcur Cal . get ( Calendar . MONTH ) Ġ- Ġcreated . get ( Calendar . MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Delta Ġ= Ġcur Cal . get ( Calendar . DAY _ OF _ YEAR ) Ġ- Ġcreated . get ( Calendar . DAY _ OF _ YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( years Delta Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ tv Last Activity Time . text Ġ= Ġformat Date ( years Delta , Ġresources . get Quantity String ( R . plurals . years , Ġyears Delta )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( month Delta Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ tv Last Activity Time . text Ġ= Ġformat Date ( month Delta , Ġresources . get Quantity String ( R . plurals . months , Ġmonth Delta )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( day Delta Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ tv Last Activity Time . text Ġ= Ġformat Date ( day Delta , Ġresources . get Quantity String ( R . plurals . days , Ġday Delta )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Post _ tv Last Activity Time . text Ġ= ĠgetString ( R . string . feed _ card _ date _ format _ y esterday ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa Post _ tv Full Price . text Ġ= ĠString . format ("$ Ġ%. 2 f ", Ġextra Amount ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcurrent Date (): ĠCalendar Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġc . time In Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġreturn Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Date ( days : ĠInt , Ġplural Value : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( getString ( R . string . feed _ card _ date _ format _ common ), Ġdays , Ġplural Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel . load Post () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprett ify Html ( raw Body : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( raw Body . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfull Html Ġ= ĠString . format ("% s % s % s ", ĠgetString ( R . string . post _ prefix ), Ġraw Body , ĠgetString ( R . string . pos _ postfix )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Pattern Ġ= ĠRegex ("\\ s (@ \\ w *) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseparate Links Pattern Ġ= ĠRegex ("< .* >(( https ?| ftp | file ) :// .* ?) < .* ?> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Results Ġ= Ġuser Pattern . findAll ( full Html ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( mr Ġin Ġmatch Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġmr . range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġmr . group Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Users Ġ= Ġuser Pattern . replace ( full Html , Ġ{ Ġmatch Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġmatch Result . group Values ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Res Ġ= Ġif Ġ( groups . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< a Ġhref =\" https :// ste emit . com /${ match Result . value }\ ">${ match Result . value }</ a >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< a Ġhref =\" https :// ste emit . com /$ groups [ 1 ] }\ ">${ groups [ 1 ] }</ a >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġu Res ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Links Ġ= Ġseparate Links Pattern . replace ( with Users , Ġ{ Ġmatch Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Result . group Values . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġconvert Link To Html ( match Result . group Values [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġconvert Link To Html ( match Result . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwith Links ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġraw Body ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Link To Html ( in Link : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Ext Ġ= Ġin Link . substring After Last (".") ĊĠĠĠĠĠĠĠ Ġif Ġ( is Ext . length Ġin Ġ 1 .. 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ext . endsWith (" png ") Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ext . endsWith (" jpg ") Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ext . endsWith (" jpeg ") Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ext . endsWith (" gif ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"< img Ġsrc =\" $ in Link \" Ġalt =\" img ${ in Link . length }\ ">" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"< a Ġhref =\" https :// ste emit . com /$ in Link \"> $ in Link </ a >" ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġshow Html ( html : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( getString ( R . string . post _ new _ prefix )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("< h 1 > "). append ( extra Title ). append ("</ h 1 >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( html ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( getString ( R . string . pos _ postfix )) ĊĠĠĠĠĠĠĠ Ġval Ġfull Html Ġ= Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġpost WebView . load Data ( sb . toString (), Ġ" text / html ", Ġ" UTF - 8 ") ĊĠĠĠĠĠĠĠ Ġpost WebView Progress . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( post WebView . can Go Back ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost WebView . go Back () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Vote Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠV ote Post Dialog . newInstance ( object Ġ: ĠV ote Post Dialog . On Vote Percent Select Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSelect ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . vote ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). show ( support FragmentManager , ĠV ote Post Dialog . TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Un Vote Confirm Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġshow Ġun vote Ġconfirmation Ġdialog ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ); ĊĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . d _ cancel _ vote _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . d _ cancel _ vote _ message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . d _ cancel _ vote _ btn _ ok ), Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . un Vote () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . d _ cancel _ vote _ btn _ cancel ), Ġ{ Ġdialog , Ġid Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbuilder . create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Invalid Re Enter Post ing Key Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ); ĊĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . d _ w ron _ post _ key _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . d _ w ron _ post _ key _ message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . d _ w ron _ post _ key _ btn _ ok ), Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Screen For Enter New Post ing Key () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . d _ w ron _ post _ key _ btn _ cancel ), Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Screen For Enter New Post ing Key () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠInput New Post ing Key Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠINPUT _ NEW _ KEY _ POST _ ACTIVITY _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġrequest Code Ġ== ĠINPUT _ NEW _ KEY _ POST _ ACTIVITY _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . save New Post ing Key ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Invalid Re Enter Post ing Key Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }