package Ġcom . k ido zh . dis cu zh ub . activities ĊĊ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Activity Options Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os .* Ċ import Ġandroid . text . Html Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . On Focus ChangeListener Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . text . Html Compat Ċ import Ġandroidx . fragment . app . Fragment State Pager Adapter Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . recyclerview . widget . Concat Adapter Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . integration . okhttp 3 . Ok Http Url Loader Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . bump tech . glide . load . model . G lide Url Ċ import Ġcom . bump tech . glide . load . model . Lazy Headers Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . k ido zh . dis cu zh ub . R Ċ import Ġcom . k ido zh . dis cu zh ub . activities . ui . bbs Poll Fragment . bbs Poll Fragment Ċ import Ġcom . k ido zh . dis cu zh ub . activities . ui . smile y . Sm iley Fragment . On Sm iley Pressed Interaction Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Network Indicator Adapter Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Network Indicator Adapter . On Refresh Btn Listener Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Post Adapter Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Post Adapter .* Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Sm iley ViewPager Adapter Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Thread Count Adapter Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Thread Count Adapter . On Recommend Btn Pressed Ċ import Ġcom . k ido zh . dis cu zh ub . adapter . Thread Properties Adapter . On Thread Property Clicked Ċ import Ġcom . k ido zh . dis cu zh ub . database . View History Database Ċ import Ġcom . k ido zh . dis cu zh ub . databinding . Activity View Thread Binding Ċ import Ġcom . k ido zh . dis cu zh ub . dialogs . Report Post Dialog Fragment Ċ import Ġcom . k ido zh . dis cu zh ub . dialogs . Report Post Dialog Fragment . Report Dialog Listener Ċ import Ġcom . k ido zh . dis cu zh ub . entities .* Ċ import Ġcom . k ido zh . dis cu zh ub . results . Api Message ActionResult Ċ import Ġcom . k ido zh . dis cu zh ub . results . Buy Thread Result Ċ import Ġcom . k ido zh . dis cu zh ub . utilities .* Ċ import Ġcom . k ido zh . dis cu zh ub . utilities . Animation Utils . get Animated Adapter Ċ import Ġcom . k ido zh . dis cu zh ub . utilities . Animation Utils . get Recycler view Animation Ċ import Ġcom . k ido zh . dis cu zh ub . view Models . Sm iley ViewModel Ċ import Ġcom . k ido zh . dis cu zh ub . view Models . Thread ViewModel Ċ import Ġes . dm oral . toast y . Toast y Ċ import Ġokhttp 3 .* Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . text . DateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠThread Activity Ġ: ĠBase Status Activity (), ĠOn Sm iley Pressed Interaction , Ġon Filter Changed , Ġon Adapter Reply , ĠOn Link Clicked , Ġb bs Poll Fragment . On Fragment Interaction Listener , ĠOn Thread Property Clicked , ĠOn Advance Option Clicked , ĠReport Dialog Listener , ĠOn Refresh Btn Listener , ĠOn Recommend Btn Pressed Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠActivity View Thread Binding ĊĠĠĠ Ġvar Ġsubject : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġtid Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġfid Ġ= Ġ 0 ĊĊĠĠĠ Ġlateinit Ġvar Ġpost Adapter : ĠPost Adapter ĊĠĠĠ Ġlateinit Ġvar Ġcount Adapter : ĠThread Count Adapter ĊĠĠĠ Ġvar Ġform Hash : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġforum : ĠFor um ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġdis cu z : ĠDis cu z ĊĠĠĠ Ġlateinit Ġvar Ġthread : ĠThread ĊĠĠĠ Ġprivate Ġvar Ġhas Load Once Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġnotify Load All Ġ= Ġfalse ĊĠĠĠ Ġvar Ġpoll : ĠPoll ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġselected Thread Comment : ĠPost ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsm iley Picker : ĠSm iley Picker ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhandler : ĠEm otion Input Handler ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġthread Detail ViewModel : ĠThread ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsm iley ViewModel : ĠSm iley ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconcat Adapter : ĠConcat Adapter ĊĠĠĠ Ġprivate Ġval Ġnetwork Indicator Adapter Ġ= ĠNetwork Indicator Adapter () ĊĠĠĠ Ġlateinit Ġvar Ġsm iley ViewPager Adapter : ĠSm iley ViewPager Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity View Thread Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel Ġ= ĠViewModel Provider ( this ). get ( Thread ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġsm iley ViewModel Ġ= ĠViewModel Provider ( this ). get ( Sm iley ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġconfigure Intent Data () ĊĠĠĠĠĠĠĠ Ġinit Thread Status () ĊĠĠĠĠĠĠĠ Ġconfigure Client () ĊĠĠĠĠĠĠĠ Ġconfigure Toolbar () ĊĠĠĠĠĠĠĠ Ġbind ViewModel () ĊĠĠĠĠĠĠĠ Ġconfigure Recycler view () ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value ?. let Ġ{ Ġthread Detail ViewModel . get Thread Detail ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġget Thread Comment (); ĊĠĠĠĠĠĠĠ Ġconfigure Swipe Refresh Layout () ĊĠĠĠĠĠĠĠ Ġconfigure Comment Btn () ĊĠĠĠĠĠĠĠ Ġconfigure Sm iley Layout () ĊĠĠĠĠĠĠĠ Ġconfigure Chip Group () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Intent Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġforum Ġ= Ġintent . get Parcelable Extra ( Const Utils . PASS _ FOR UM _ THREAD _ KEY ) ĊĠĠĠĠĠĠĠ Ġdis cu z Ġ= Ġintent . get Serializable Extra ( Const Utils . PASS _ BB S _ ENTITY _ KEY ) Ġas ĠDis cu z ĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġintent . get Serializable Extra ( Const Utils . PASS _ BB S _ USER _ KEY ) Ġas ĠUser ? ĊĠĠĠĠĠĠĠ Ġthread Ġ= Ġintent . get Serializable Extra ( Const Utils . PASS _ THREAD _ KEY ) Ġas ĠThread ĊĊĠĠĠĠĠĠĠ Ġtid Ġ= Ġintent . getInt Extra (" TID ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġfid Ġ= Ġintent . getInt Extra (" F ID ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġsubject Ġ= Ġintent . getString Extra (" SUBJECT ") ĊĠĠĠĠĠĠĠ Ġ// Ġhas Load Once Ġ= Ġintent . getBoolean Extra ( bbs Const Utils . PASS _ IS _ VIEW _ HISTORY , false ); ĊĠĠĠĠĠĠĠ ĠURL Utils . set BB S ( dis cu z ) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . set BB S Info ( dis cu z , Ġuser , Ġforum , Ġtid ) ĊĠĠĠĠĠĠĠ Ġsm iley ViewModel . configure Dis cu z ( dis cu z , Ġuser ) ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠHtml . from Html ( thread !!. subject , ĠHtml Compat . FROM _ HTML _ MODE _ LEG ACY ) ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( sp ) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Subject . setText ( span nable String , ĠTextView . Buffer Type . SPAN N ABLE ) ĊĠĠĠĠĠĠĠ Ġsm iley ViewPager Adapter Ġ= ĠSm iley ViewPager Adapter ( support FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment State Pager Adapter . BE HAV IOR _ RE SU ME _ ONLY _ CURRENT _ FRAGMENT , dis cu z , this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Thread Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Thread Query Status Ġ= ĠView Thread Query Status ( tid , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Set Ġstatus Ġwhen Ġinit Ġdata ") ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value Ġ= Ġview Thread Query Status ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck With Perm ( status : ĠInt , Ġperm : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstatus Ġand Ġperm Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Sm iley Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler Ġ= ĠEm otion Input Handler ( binding . bbs Thread Detail Comment EditText ) Ġ{ Ġ_: ĠBoolean , Ġ_: ĠString ? Ġ-> Ġ} ĊĠĠĠĠĠĠĠ Ġsm iley Picker Ġ= ĠSm iley Picker ( this , Ġdis cu z ) ĊĠĠĠĠĠĠĠ Ġsm iley Picker !!. set Listener Ġ{ Ġstr : ĠString ?, Ġa : ĠDrawable ? Ġ-> Ġhandler !!. insert Sm iley ( str , Ġa ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . bbs Comment Sm iley Tab Layout . setup With ViewPager ( binding . bbs Comment Sm iley ViewPager ) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Comment Sm iley ViewPager . adapter Ġ= Ġsm iley ViewPager Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Chip Group (){ ĊĠĠĠĠĠĠĠ Ġbinding . thread Property . setOn Checked ChangeListener Ġ{ Ġ_, Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" GET Ġclicked Ġid Ġ$ checked Id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( checked Id Ġ== ĠR . drawable . ic _ price _ outlined _ 2 4 px ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . buy _ thread _ loading ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . get Thread Price Info ( tid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetProperty Chip ( res : ĠInt , Ġstring : ĠString , Ġicon Color : ĠInt Ġ): ĠCh ip { ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCh ip ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip Icon Ġ= ĠContext Compat . get Drawable ( context , res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġres ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Start Padding Ġ= Ġ 8 . 0 F ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġbind ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġpersonal Ġinfo ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . bbs Person Info Mutable LiveData . observe ( this , Ġ{ Ġuser Brief Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Brief Info ?. auth Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Comment Constraint Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Comment Constraint Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . total Post List LiveData . observe ( this ,{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Update Ġlist Ġ"+ post Adapter . item Count +" Ġnew Ġlist Ġ"+ it . size +" Ġis Ġequal Ġ"+ ( post Adapter . get Posts () Ġ== Ġit ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġauthor id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Result Ġ= Ġthread Detail ViewModel . thread Post Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Thread Query Status Ġ: ĠView Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value Ġas ĠView Thread Query Status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thread Result ?. thread Post Variables Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor id Ġ= Ġthread Result . thread Post Variables . detailed Thread Info . author Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Adapter . set Posts ( it Ġas ĠMutable List < Post >, view Thread Query Status , author id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( view Thread Query Status . page Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . posts Recycler view . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . network Status . observe ( this , Ġ{ Ġinteger : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" network Ġchanged Ġ$ integer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( integer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConst Utils . NETWORK _ STATUS _ LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Swipe Refresh Layout . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Indicator Adapter . set Loading Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConst Utils . NETWORK _ STATUS _ LOADED _ ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Swipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . d ( TAG ," Network Ġchanged Ġ"+ integer ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Indicator Adapter . set Loaded All Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConst Utils . NETWORK _ STATUS _ SUCCESS FULL Y Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Swipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Indicator Adapter . set Load Successful Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Swipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . errorMessage Mutable LiveData . observe ( this , Ġ{ ĠerrorMessage : ĠError Message ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errorMessage Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dis cu z _ api _ message _ template , ĠerrorMessage . key , ĠerrorMessage . content ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Indicator Adapter . setError Status ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Error ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . poll LiveData . observe ( this , Ġ{ Ġb bs Poll Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bbs Poll Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get Ġpoll Ġ" Ġ+ Ġb bs Poll Info . vot ers Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( R . id . bbs _ thread _ poll _ fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb bs Poll Fragment . newInstance ( bbs Poll Info , Ġuser , Ġtid , Ġform Hash )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get Ġpoll Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . form Hash . observe ( this , Ġ{ Ġs Ġ-> Ġform Hash Ġ= Ġs Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . observe ( this , Ġ{ Ġview Thread Query Status Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" L ived ata Ġchanged Ġ" Ġ+ Ġview Thread Query Status . date line Asc end ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Thread Query Status . date line Asc end ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar Subtitle . setText ( getString ( R . string . bbs _ thread _ status _ asc end )) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . toolbar Subtitle . setText ( getString ( R . string . bbs _ thread _ status _ desc end )) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . detailed Thread Info Mutable LiveData . observe ( this , Ġ{ Ġdetailed Thread Info Ġ-> Ġ// Ġclosed Ġsituation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprepare Ġnotification Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Notification List : ĠMutable List < Thread Count > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . price Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . price Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Ġ= ĠgetProperty Chip ( R . drawable . ic _ price _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ buy _ price , Ġdetailed Thread Info . price ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( R . color . color Pump kin ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . setOnClickListener { Ġv -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . buy _ thread _ loading ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . get Thread Price Info ( tid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( chip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ price _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ reward _ price , Ġdetailed Thread Info . price ), Ġget Color ( R . color . color Pump kin )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . subject Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠHtml . from Html ( detailed Thread Info . subject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( sp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Subject . setText ( span nable String , ĠTextView . Buffer Type . SPAN N ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . closed Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . set Hint ( R . string . thread _ is _ closed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . advance Post Icon . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! User Preference Utils . conc ise RecyclerView ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġdetailed Thread Info . closed Ġ== Ġ 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ highlight _ off _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ is _ closed ), Ġget Color ( R . color . color P ome gran ate )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . advance Post Icon . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . set Hint ( R . string . bbs _ thread _ say _ something ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . read perm Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthread Detail ViewModel . thread Post Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Brief Info Ġ= Ġresult . thread Post Variables . user Brief Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġnull Ġ&& Ġuser !!. read Perm Ġ>= Ġdetailed Thread Info . read perm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! User Preference Utils . conc ise RecyclerView ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġto Ġdisplay Ġin Ġconcise Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ verified _ user _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ read perm , Ġdetailed Thread Info . read perm , Ġuser !!. read Perm ), Ġget Color ( R . color . color Tur quo ise )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ read _ perm _ uns atisf ied _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ ano y mous _ read perm , Ġdetailed Thread Info . read perm ), Ġget Color ( R . color . color As best os )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ read _ perm _ uns atisf ied _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ read perm , Ġdetailed Thread Info . read perm , Ġuser !!. read Perm ), Ġget Color ( R . color . color Ali z ar in )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ thread _ visibility _ off _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ is _ hidden ), Ġget Color ( R . color . color W ister ia )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġneed Ġanother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . highlight Ġ!= Ġnull Ġ&& Ġdetailed Thread Info . highlight Ġ!= Ġ" 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ highlight _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ is _ highlighted ), Ġget Color ( R . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . digest Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ digest _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ is _ digest ed ), Ġget Color ( R . color . color G re ense a )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . is _ arch ived ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ archive _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ is _ arch ived ), Ġget Color ( R . color . color Mid night blue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! User Preference Utils . conc ise RecyclerView ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġsee Ġin Ġnot Ġconcise Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . mod erated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ mod erated _ outlined _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ is _ mod erated ), Ġget Color ( R . color . color Orange )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . stick Reply ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . vector _ drawable _ reply _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ stick _ reply ), Ġget Color ( R . color . color W et as ph alt )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrecommend ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Notification List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Count ( R . drawable . ic _ thumb _ up _ outlined _ 2 4 px , Ġdetailed Thread Info . recommend _ add . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Notification List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Count ( R . drawable . ic _ thumb _ down _ outlined _ 2 4 px , Ġdetailed Thread Info . recommend _ sub . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Notification List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Count ( R . drawable . ic _ favorite _ 2 4 px , Ġdetailed Thread Info . fav times . toString (), Ġ" FA V OR ITE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Notification List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Count ( R . drawable . ic _ share _ outlined _ 2 4 px , Ġdetailed Thread Info . shared times . toString (), Ġ" SHARE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( detailed Thread Info . he ats Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Notification List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Count ( R . drawable . ic _ what shot _ outlined _ 2 4 px , Ġdetailed Thread Info . he ats . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġdetailed Thread Info . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġwith Ġperm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTATUS _ CACHE _ THREAD _ LOCATION Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTATUS _ ONLY _ SE E _ BY _ POST ER Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTATUS _ RE WARD _ L OT TO Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTATUS _ DESC END _ REPLY Ġ= Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTATUS _ EXIST _ ICON Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTATUS _ NOTIFY _ AUTHOR Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check With Perm ( status , ĠSTATUS _ CACHE _ THREAD _ LOCATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ cache _ thread _ location _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ cache _ location ), Ġget Color ( R . color . color Mid night blue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check With Perm ( status , ĠSTATUS _ ONLY _ SE E _ BY _ POST ER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ reply _ only _ see _ by _ poster _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ reply _ only _ see _ by _ poster ), Ġget Color ( R . color . color Ne ph rit is )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check With Perm ( status , ĠSTATUS _ RE WARD _ L OT TO )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ thread _ reward _ lot to _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ reward _ lot to ), Ġget Color ( R . color . color Sun flower )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! User Preference Utils . conc ise RecyclerView ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcheck With Perm ( status , ĠSTATUS _ NOTIFY _ AUTHOR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . thread Property . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetProperty Chip ( R . drawable . ic _ thread _ notify _ author _ 2 4 px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . thread _ notify _ author ), Ġget Color ( R . color . color Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Adapter . set Thread Count List ( thread Notification List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġnormal Ġrendering ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Comment Number . text Ġ= ĠgetString ( R . string . bbs _ thread _ reply _ number , Ġdetailed Thread Info . replies ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread View Number . text Ġ= Ġdetailed Thread Info . views . toString () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Post Result Mutable LiveData . observe ( this , Ġ{ Ġthread Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thread Result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( thread Result . thread Post Variables . detailed Thread Info . subject Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠHtml . from Html ( thread Result . thread Post Variables . detailed Thread Info . subject , Html Compat . FROM _ HTML _ MODE _ COMP ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( sp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Subject . setText ( span nable String , ĠTextView . Buffer Type . SPAN N ABLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Adapter . merge Comment Map ( thread Result . thread Post Variables . comment List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetailed Thread Info Ġ= Ġthread Result . thread Post Variables . detailed Thread Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Load Once ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Load Once Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecord History Ġ= ĠUser Preference Utils . view History Enabled ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( record History ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert View History ( View History ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Utils . getDefault Avatar Url By Uid ( detailed Thread Info . author Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetailed Thread Info . author , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis cu z . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetailed Thread Info . subject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView History . VIEW _ TYPE _ THREAD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetailed Thread Info . fid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . d ( TAG ," Thread Ġpost Ġresult Ġerror Ġ"+ Ġthread Result . isError ()+" Ġ"+ Ġthread Result . thread Post Variables . message ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrewrite Rule Ġ= Ġthread Result . thread Post Variables . rewrite Rule ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( rewrite Rule Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget And Save Rewrite Rule ( rewrite Rule , ĠUser Preference Utils . REWRITE _ FORM _ DISPLAY _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget And Save Rewrite Rule ( rewrite Rule , ĠUser Preference Utils . REWRITE _ VIEW _ THREAD _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget And Save Rewrite Rule ( rewrite Rule , ĠUser Preference Utils . REWRITE _ HOME _ SPACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġsecure Ġreason ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . secure Info . observe ( this , ĠObserver Ġ{ Ġsecure Info Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secure Info Result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( secure Info Result . secure Variables Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġneed Ġa Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha EditText . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha Image view . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha EditText . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha Image view . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha Image view . setImage Drawable ( Context Compat . get Drawable ( this , R . drawable . ic _ captcha _ placeholder _ 2 4 px )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġneed Ġa Ġcapt cha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha URL Ġ= Ġsecure Info Result . secure Variables . sec Code URL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha Image URL Ġ= ĠURL Utils . get Sec Code Image URL ( secure Info Result . secure Variables . sec Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġload Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( captcha URL Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( captcha URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Call ( captcha Request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġsession ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha Image view . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠOk Http Url Loader . Factory ( client ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . get ( application ). registry . replace ( G lide Url :: class . java , ĠInputStream :: class . java , Ġfactory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor bid Ġcache Ġcapt cha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠRequest Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit Center () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disk Cache Strategy ( Disk Cache Strategy . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ captcha _ placeholder _ 2 4 px ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ post _ status _ warn ed _ 2 4 px ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpicture G lide URL Ġ= ĠG lide Url ( captcha Image URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Headers . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Refer er ", Ġcapt cha URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( picture G lide URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . bbs Post Captcha Image view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġknow Ġthe Ġsituation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha EditText . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha Image view . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . favorite Thread LiveData . observe ( this , Ġ{ Ġfavorite Thread Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Get Ġfavorite Ġthread Ġin Ġobserver $ favorite Thread ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . recommend Result Mutable LiveData . observe ( this , Ġ{ Ġapi Message ActionResult : ĠApi Message ActionResult ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Message ActionResult Ġ!= Ġnull Ġ&& Ġapi Message ActionResult . message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Result Ġ= Ġapi Message ActionResult . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Result . key Ġ== Ġ" recommend _ suc ceed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġmessage Result . key , Ġmessage Result . content ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġmessage Result . key , Ġmessage Result . content ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . interact Error Mutable LiveData . observe ( this , Ġ{ ĠerrorMessage : ĠError Message ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errorMessage Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Indicator Adapter . setError Status ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , ĠerrorMessage . key , ĠerrorMessage . content ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Price Info Mutable LiveData . observe ( this , Ġ{ Ġbuy Thread Result : ĠBu y Thread Result ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buy Thread Result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Result Ġ= Ġbuy Thread Result . variable Results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMaterial AlertDialog Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . buy _ thread _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . buy _ thread _ dialog _ message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariable Result . author , Ġvariable Result . price . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variable Result . credit Ġ== Ġnull ) Ġ"" Ġelse Ġvariable Result . credit . title , Ġvariable Result . balance . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġdialog : ĠDialog Interface ?, Ġwhich : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . buy _ thread _ send ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . buy Thread ( tid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . buy Thread Result Mutable LiveData . observe ( this , Ġ{ Ġbuy Thread Result : ĠBu y Thread Result ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buy Thread Result ?. message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġbuy Thread Result . message !!. key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġ" thread _ pay _ suc ceed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( this , ĠgetString ( R . string . dis cu z _ api _ message _ template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy Thread Result . message !!. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy Thread Result . message !!. content )). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload The Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . warning ( this , ĠgetString ( R . string . dis cu z _ api _ message _ template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy Thread Result . message !!. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy Thread Result . message !!. content )). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . report Result Mutable LiveData . observe ( this , Ġ{ Ġapi Message ActionResult : ĠApi Message ActionResult ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Message ActionResult Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Message ActionResult . message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Message ActionResult . message !!. key Ġ== Ġ" report _ suc ceed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġapi Message ActionResult . message !!. key , Ġapi Message ActionResult . message !!. content ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġapi Message ActionResult . message !!. key , Ġapi Message ActionResult . message !!. content ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . api _ message _ return _ null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġsm iley ViewModel . smile y Result LiveData . observe ( this , ĠObserver Ġ{ Ġit -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsm iley List Ġ= Ġit . variables . smile y List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsm iley Category Cnt Ġ= Ġsm iley List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Comment Sm iley Tab Layout . removeAll Tabs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġsm iley Category Cnt ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Comment Sm iley Tab Layout . add Tab ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Comment Sm iley Tab Layout . new Tab (). setText (( i Ġ+ Ġ 1 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsm iley ViewPager Adapter . smile y List Ġ= Ġsm iley List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Comment Sm iley Tab Layout . get Tab At ( 0 )?. icon Ġ= ĠContext Compat . get Drawable ( this , R . drawable . ic _ baseline _ history _ 2 4 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget And Save Rewrite Rule ( rewrite Rule : ĠMap < String , ĠString >, Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rule . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Preference Utils . save Rewrite Rule ( this , Ġdis cu z , Ġkey , Ġrewrite Rule [ key ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Swipe Refresh Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Swipe Refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisLoading Ġ= Ġthread Detail ViewModel . network Status . value Ġ== ĠConst Utils . NETWORK _ STATUS _ LOADING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload The Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value ?. let Ġ{ Ġthread Detail ViewModel . get Thread Detail ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠNetwork Utils . get Preferred Client With Cookie Jar ByUser ( this , Ġuser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Comment Btn () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġadvance Ġpost ĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . advance Post Icon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġbinding . bbs Thread Detail Comment EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠPublish Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ FOR UM _ THREAD _ KEY , Ġforum ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ POST _ TYPE , ĠConst Utils . TYPE _ POST _ REPLY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ POST _ MESSAGE , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ REPLY _ POST , Ġselected Thread Comment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" tid ", Ġtid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" fid ", Ġfid . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( forum Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" fid _ name ", Ġforum !!. name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcapt cha ĊĠĠĠĠĠĠĠ Ġbinding . bbs Post Captcha Image view . setOnClickListener Ġ{ Ġ// Ġupdate Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . secure Info ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setOnClickListener ( View . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Message Ġ= Ġbinding . bbs Thread Detail Comment EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha String Ġ= Ġbinding . bbs Post Captcha EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( need Captcha () Ġ&& Ġcapt cha String . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . warning ( application Context , ĠgetString ( R . string . captcha _ required ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ OnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comment Message . length Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( application Context , ĠgetString ( R . string . bbs _ require _ comment ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" SELECTED ĠTHREAD ĠCOMMENT Ġ$ selected Thread Comment ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Thread Comment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdirectly Ġcomment Ġthread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Comment To Thread ( comment Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpid Ġ= Ġselected Thread Comment !!. pid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Send ĠReply Ġto Ġ$ pid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Reply To Some one In Thread ( pid , Ġcomment Message , Ġselected Thread Comment !!. message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . smile y Root Layout . visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsm iley Ġpicker Ġnot Ġvisible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . setImage Drawable ( Context Compat . get Drawable ( context , R . drawable . vector _ drawable _ keyboard _ 2 4 px )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġclose Ġkeyboard ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġget System Service ( INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( binding . bbs Thread Detail Comment EditText . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . smile y Root Layout . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtab Ġlayout Ġbinding ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsm iley ViewModel . get Sm iley List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . smile y Root Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . setImage Drawable ( Context Compat . get Drawable ( context , R . drawable . ic _ edit _ em ot icon _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . on Focus ChangeListener Ġ= ĠOn Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus Ġ&& Ġbinding . smile y Root Layout . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . smile y Root Layout . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . setImage Drawable ( Context Compat . get Drawable ( context , R . drawable . ic _ edit _ em ot icon _ 2 4 dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Sm iley Press ( str : ĠString , Ġa : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġ\ Ġand Ġ/ ĊĠĠĠĠĠĠĠ Ġval Ġdecode Str Ġ= Ġstr . replace ("/", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ ", Ġ"") ĊĠĠĠĠĠĠĠ Ġhandler !!. insert Sm iley ( decode Str , Ġa ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Press Ġstring Ġ$ decode Str ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreply To Some One ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthread Comment Info Ġ= Ġpost ĊĠĠĠĠĠĠĠ Ġselected Thread Comment Ġ= Ġthread Comment Info ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Chip . text Ġ= Ġthread Comment Info . author ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Chip . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . hint Ġ= ĠString . format ("@ % s ", Ġthread Comment Info . author ) ĊĠĠĠĠĠĠĠ Ġvar Ġdecode String Ġ= Ġthread Comment Info . message ĊĠĠĠĠĠĠĠ Ġ// Ġfilter Ġquote ĊĠĠĠĠĠĠĠ Ġval Ġquote Regex In Ver 4 Ġ= Ġ"^ < div Ġclass =\" reply _ wrap \ ">( .+ ? )</ div >< br Ġ. >" ĊĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġit Ġif Ġpossible ĊĠĠĠĠĠĠĠ Ġval Ġquote Pattern In Ver 4 Ġ= ĠPattern . compile ( quote Regex In Ver 4 , ĠPattern . DOT ALL ) ĊĠĠĠĠĠĠĠ Ġval Ġquote Matcher In Ver 4 Ġ= Ġquote Pattern In Ver 4 . matcher ( decode String ) ĊĠĠĠĠĠĠĠ Ġdecode String Ġ= Ġquote Matcher In Ver 4 . replaceAll ("") ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠHtml . from Html ( decode String , Html Compat . FROM _ HTML _ MODE _ LEG ACY ) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Content . setText ( sp , ĠTextView . Buffer Type . SPAN N ABLE ) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Content . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Chip . setOn Close Icon ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Chip . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Reply Content . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . set Hint ( R . string . bbs _ thread _ say _ something ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Thread Comment Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Poll Result F etched () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġreset Ġpoll Ġto Ġget Ġreal time Ġresult ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" POLL Ġis Ġv oted ") ĊĠĠĠĠĠĠĠ Ġpoll Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . poll LiveData . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreload The Page () ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value ?. let Ġ{ Ġthread Detail ViewModel . get Thread Detail ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Author Id ( author Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value Ġas ĠView Thread Query Status ĊĠĠĠĠĠĠĠ Ġview Thread Query Status . set Init Author Id ( author Id ) ĊĠĠĠĠĠĠĠ Ġreload The Page ( view Thread Query Status ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrefresh Ġit ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value ?. let Ġ{ Ġthread Detail ViewModel . get Thread Detail ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse URL And Open ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Parse Ġand Ġopen ĠURL Ġ$ url ") ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( url ) ĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull Ġ&& Ġuri . path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri . getQuery Parameter (" mod ") Ġ!= Ġnull Ġ&& Ġuri . getQuery Parameter (" mod ") Ġ== Ġ" redirect " Ġ&& Ġuri . getQuery Parameter (" goto ") Ġ!= Ġnull Ġ&& Ġuri . getQuery Parameter (" goto ") Ġ== Ġ" find post " Ġ&& Ġuri . getQuery Parameter (" pid ") Ġ!= Ġnull Ġ&& Ġuri . getQuery Parameter (" pt id ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpid String Ġ= Ġuri . getQuery Parameter (" pid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtid String Ġ= Ġuri . getQuery Parameter (" pt id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġredirect Tid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġredirect Pid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Tid Ġ= Ġtid String !!. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Pid Ġ= Ġpid String !!. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Find Ġthe Ġcurrent Ġ$ redirect Pid Ġtid Ġ$ redirect Tid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( redirect Tid Ġ!= Ġtid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġput Thread Info Ġ= ĠThread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Thread Info . tid Ġ= Ġredirect Tid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠThread Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ THREAD _ KEY , Ġput Thread Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" F ID ", Ġfid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" TID ", Ġredirect Tid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" SUBJECT ", Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġscroll Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Infos Ġ= Ġpost Adapter . get Posts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpost Infos . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Post Ġ= Ġpost Infos [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Post . pid Ġ== Ġredirect Pid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . posts Recycler view . smooth Scroll To Position ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Post ion Ġ= Ġpost Infos [ i ]. position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( this , ĠgetString ( R . string . scroll _ to _ pid _ successfully , Ġpost Post ion ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . scroll _ to _ pid _ failed , Ġpid String ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( uri . getQuery Parameter (" mod ") Ġ!= Ġnull Ġ&& Ġuri . getQuery Parameter (" mod ") Ġ== Ġ" view thread " Ġ&& Ġuri . getQuery Parameter (" tid ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtid String Ġ= Ġuri . getQuery Parameter (" tid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġredirect Tid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Tid Ġ= Ġtid String !!. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġput Thread Info Ġ= ĠThread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Thread Info . tid Ġ= Ġredirect Tid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠThread Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ THREAD _ KEY , Ġput Thread Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" F ID ", Ġfid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" TID ", Ġredirect Tid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" SUBJECT ", Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( uri . getQuery Parameter (" mod ") Ġ!= Ġnull Ġ&& Ġuri . getQuery Parameter (" mod ") Ġ== Ġ" forum display " Ġ&& Ġuri . getQuery Parameter (" fid ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfid String Ġ= Ġuri . getQuery Parameter (" fid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfid String !!. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠFor um Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclicked Forum Ġ= ĠFor um () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicked Forum . fid Ġ= Ġfid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ FOR UM _ THREAD _ KEY , Ġclicked Forum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" put Ġbase Ġurl Ġ" Ġ+ Ġdis cu z . base _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( uri . getQuery Parameter (" mod ") Ġ!= Ġnull Ġ&& Ġuri . getQuery Parameter (" mod ") Ġ== Ġ" space " Ġ&& Ġuri . getQuery Parameter (" uid ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid Str Ġ= Ġuri . getQuery Parameter (" uid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Str !!. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠUser Profile Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" UID ", Ġuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠInternal WebView Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ URL _ KEY , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Input ted ĠURL Ġ$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠInternal WebView Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ URL _ KEY , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Input ted ĠURL Ġ$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Link Clicked ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġun escaped URL Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("& amp ;", Ġ"& ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("& lt ;", Ġ"< ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("& gt ;", Ġ"> ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("& nbsp ;", Ġ" Ġ") ĊĠĠĠĠĠĠĠ Ġ// Ġjudge Ġthe Ġhost ĊĠĠĠĠĠĠĠ Ġval Ġbase URL Ġ= ĠURL Utils . get BaseUrl () ĊĠĠĠĠĠĠĠ Ġval Ġbase Uri Ġ= ĠUri . parse ( base URL ) ĊĠĠĠĠĠĠĠ Ġval Ġclicked Uri Ġ= ĠUri . parse ( unes caped URL ) ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" checking Ġwith Ġ${ unes caped URL } Ġ${ clicked Uri . host } Ġ${ base Uri . host } Ġ${ clicked Uri . host Ġ== Ġnull } Ġ${ clicked Uri . host Ġ== Ġbase Uri . host }") ĊĠĠĠĠĠĠĠ Ġif Ġ( clicked Uri . host Ġ== Ġnull Ġ|| Ġclicked Uri . host Ġ== Ġbase Uri . host ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinternal Ġlink ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthread Detail ViewModel . thread Post Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," Recv Ġresult Ġin Ġthe Ġclicked Ġpath Ġ${ result Ġ!= Ġnull }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrewrite Rules : ĠMutable Map < String , ĠString >? Ġ= Ġresult . thread Post Variables . rewrite Rule ?. to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclicked URL Path Ġ= Ġclicked Uri . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," clicked URL Path Ġ${ clicked URL Path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clicked URL Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbased URL Path Ġ= Ġbase Uri . path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clicked URL Path Ġ!= Ġnull Ġ&& Ġbased URL Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clicked URL Path . matches ( Regex ("^ $ based URL Path .* "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicked URL Path Ġ= Ġclicked URL Path . substring ( based URL Path . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," new Ġpot ient ial Ġclicked URL Path Ġ${ clicked URL Path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġcatch Ġtwo Ġtype Ġ: Ġforum _ forum display Ġ& Ġforum _ view thread ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġ 8 . 0 + Ġsupport Ġreverse Ġcopy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," new Ġjudge Ġ${ Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O } Ġ${ rewrite Rules }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġload Ġfrom Ġcache Ġif Ġnot Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Forum Rewrite Rule Ġ= ĠUser Preference Utils . get Rewrite Rule ( context , dis cu z , Ġrewrite Key Ġ= ĠUser Preference Utils . REWRITE _ FORM _ DISPLAY _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( rewrite Rules Ġ== Ġnull Ġ|| Ġ! rewrite Rules . containsKey (" forum _ forum display ")) && display Forum Rewrite Rule != null ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rules ?. put (" forum _ forum display ", Ġdisplay Forum Rewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Thread Rewrite Rule Ġ= ĠUser Preference Utils . get Rewrite Rule ( context , dis cu z , Ġrewrite Key Ġ= ĠUser Preference Utils . REWRITE _ VIEW _ THREAD _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( rewrite Rules Ġ== Ġnull Ġ|| Ġ! rewrite Rules . containsKey (" forum _ view thread ") Ġ) && view Thread Rewrite Rule != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rules ?. put (" forum _ view thread ", Ġview Thread Rewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Space Rewrite Rule Ġ= ĠUser Preference Utils . get Rewrite Rule ( context , dis cu z , Ġrewrite Key Ġ= ĠUser Preference Utils . REWRITE _ HOME _ SPACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( rewrite Rules Ġ== Ġnull Ġ|| Ġ! rewrite Rules . containsKey (" home _ space ")) Ġ&& Ġhome Space Rewrite Rule != null ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rules ?. put (" home _ space ", Ġhome Space Rewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," after Ġfix Ġ Ġ${ rewrite Rules }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rules Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rules . containsKey (" forum _ forum display ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrewrite Rule Ġ= Ġrewrite Rules [" forum _ forum display "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Preference Utils . save Rewrite Rule ( context , Ġdis cu z , ĠUser Preference Utils . REWRITE _ FORM _ DISPLAY _ KEY , Ġrewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rule Ġ== Ġnull Ġ|| Ġclicked URL Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmatch Ġtemplate Ġsuch Ġas Ġf { fid }-{ page } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcrate Ġreverse Ġcopy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ fid }", Ġ"( ?< fid > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ page }", Ġ"( ?< page > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ( rewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( clicked URL Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfid Str Ġ= Ġmatcher . group (" fid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Str Ġ= Ġmatcher . group (" page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fid Str Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfid Str . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġpage Ġ= ĠInteger . parseInt ( page Str ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠFor um Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclicked Forum Ġ= ĠFor um () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclicked Forum . fid Ġ= Ġfid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ FOR UM _ THREAD _ KEY , Ġclicked Forum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" put Ġbase Ġurl Ġ" Ġ+ Ġdis cu z . base _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rules Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rules . containsKey (" forum _ view thread ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmatch Ġtemplate Ġsuch Ġas Ġt { tid }-{ page }-{ prev page } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrewrite Rule Ġ= Ġrewrite Rules [" forum _ view thread "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Preference Utils . save Rewrite Rule ( context , Ġdis cu z , ĠUser Preference Utils . REWRITE _ VIEW _ THREAD _ KEY , Ġrewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rule Ġ== Ġnull Ġ|| Ġclicked URL Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG ," Match Ġview Ġthread Ġ${ rewrite Rule } Ġ: Ġ${ clicked URL Path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmatch Ġtemplate Ġsuch Ġas Ġf { fid }-{ page } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcrate Ġreverse Ġcopy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ tid }", Ġ"( ?< tid > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ page }", Ġ"( ?< page > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ prev page }", Ġ"( ?< prev page > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ( rewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( clicked URL Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtid Str Ġ= Ġmatcher . group (" tid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Str Ġ= Ġmatcher . group (" page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tid Str Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġput Thread Info Ġ= ĠThread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtid Str . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Thread Info . tid Ġ= Ġtid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠThread Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ THREAD _ KEY , Ġput Thread Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" F ID ", Ġfid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" TID ", Ġtid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" SUBJECT ", Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠActivity Options . make Scene Transition Animation ( context Ġas ĠActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġoptions . to Bundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent , Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rules Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rules . containsKey (" home _ space ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmatch Ġtemplate Ġsuch Ġas Ġt { tid }-{ page }-{ prev page } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrewrite Rule Ġ= Ġrewrite Rules [" home _ space "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get Ġhome Ġspace Ġurl Ġ$ rewrite Rule ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Preference Utils . save Rewrite Rule ( context , Ġdis cu z , ĠUser Preference Utils . REWRITE _ HOME _ SPACE , Ġrewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rewrite Rule Ġ== Ġnull Ġ|| Ġclicked URL Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmatch Ġtemplate Ġsuch Ġas Ġf { fid }-{ page } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcrate Ġreverse Ġcopy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ user }", Ġ"( ?< user > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrewrite Rule Ġ= Ġrewrite Rule . replace ("{ value }", Ġ"( ?< value > \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ( rewrite Rule ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( clicked URL Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser String Ġ= Ġmatcher . group (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid String Ġ= Ġmatcher . group (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uid String Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid String . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠUser Profile Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" UID ", Ġuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate For Click ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠActivity Options . make Scene Transition Animation ( context Ġas ĠActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġoptions . to Bundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent , Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġparse Ġthe ĠURL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse URL And Open ( unes caped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Link Warn Ġ= Ġprefs . getBoolean ( getString ( R . string . preference _ key _ out link _ warn ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( out Link Warn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . out link _ warn _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . out link _ warn _ message , Ġclicked Uri . host , Ġbase Uri . host )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( R . string . bbs _ show _ in _ internal _ browser ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠInternal WebView Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ URL _ KEY , Ġun escaped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Input ted ĠURL Ġ$ unes caped URL ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . bbs _ show _ in _ external _ browser ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( unes caped URL )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel ) Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠInternal WebView Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ URL _ KEY , Ġun escaped URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Input ted ĠURL Ġ$ unes caped URL ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Recommend ( recommend : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . recommend Thread ( tid , Ġrecommend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuy Thread Property Clicked () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġbuy Ġthe Ġthread Ġdialog ĊĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . buy _ thread _ loading ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . get Thread Price Info ( tid ) ĊĠĠĠĠĠĠĠ Ġ// Ġprompt Ġdialog Ġfirst ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreport Post ( post : ĠPost ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . warning ( this , ĠgetString ( R . string . report _ login _ required ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreport Post Dialog Fragment Ġ= ĠReport Post Dialog Fragment ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Post Dialog Fragment . show ( fragment Manager , ĠReport Post Dialog Fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Report Submit ( pid : ĠInt , Ġreport Reason : ĠString , Ġreport For Other Reason : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . report Post ( pid , Ġreport Reason , Ġreport For Other Reason ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh Btn Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value ĊĠĠĠĠĠĠĠ Ġstatus !!. page Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( status Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . get Thread Detail ( status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Recycler view () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// binding . posts Recycler view . set Has Fixed Size ( true ); ĊĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . posts Recycler view . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠ Ġbinding . posts Recycler view . item Animator Ġ= Ġget Recycler view Animation ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value Ġas ĠView Thread Query Status ĊĊĠĠĠĠĠĠĠ Ġpost Adapter Ġ= ĠPost Adapter ( dis cu z , user , status ) ĊĊĠĠĠĠĠĠĠ Ġconcat Adapter Ġ= ĠConcat Adapter ( post Adapter , Ġnetwork Indicator Adapter ) ĊĠĠĠĠĠĠĠ Ġbinding . posts Recycler view . adapter Ġ= Ġget Animated Adapter ( this , Ġconcat Adapter ) ĊĊĠĠĠĠĠĠĠ Ġbinding . posts Recycler view . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! re cyclerView . can Scroll Vert ically ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠnewState Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisLoading Ġ= Ġthread Detail ViewModel . network Status . value Ġ== ĠConst Utils . NETWORK _ STATUS _ LOADING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Load All Ġ= Ġthread Detail ViewModel . network Status . value Ġ== ĠConst Utils . NETWORK _ STATUS _ LOADED _ ALL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Recycler view Ġcan Ġscroll Ġvert Ġhas Load All Ġ$ has Load All Ġis loading Ġ$ isLoading ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isLoading Ġ&& Ġview Thread Query Status Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Load All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġload Ġall Ġposts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! notify Load All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnever Ġvi br ate Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( User Preference Utils . vi br ate When Loading All ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ibrate Utils . vi br ate S light ly ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Load All Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . notify Load All . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . all _ posts _ loaded _ template , Ġpost Adapter . item Count ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Thread Query Status . page Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . get Thread Detail ( view Thread Query Status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġcount Adapter Ġ= ĠThread Count Adapter () ĊĠĠĠĠĠĠĠ Ġif Ġ(! User Preference Utils . conc ise RecyclerView ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġto Ġbind Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Interactive Recycler view . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Interactive Recycler view . item Animator Ġ= Ġget Recycler view Animation ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Interactive Recycler view . layout Manager Ġ= ĠGrid LayoutManager ( this , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Interactive Recycler view . adapter Ġ= Ġget Animated Adapter ( this , Ġcount Adapter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġneed Captcha (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ!( thread Detail ViewModel . secure Info Result Mutable LiveData . value Ġ== Ġnull Ġ|| Ġthread Detail ViewModel . secure Info Result Mutable LiveData . value !!. secure Variables Ġ== Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Comment To Thread ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Get Time Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġform Body Builder Ġ= ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" subject ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" use sig ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" post time ", Ġ( time Get Time . time Ġ/ Ġ 1 0 0 0 Ġ- Ġ 1 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form hash ", Ġform Hash ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( charset Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ GB K Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" message ", ĠURL Encoder . encode ( message , Ġ" GB K ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ BIG 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" message ", ĠURL Encoder . encode ( message , Ġ" BIG 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" message ", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( need Captcha ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecure Info Result Ġ= Ġthread Detail ViewModel . secure Info Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" sec code hash ", Ġsecure Info Result !!. secure Variables . sec Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" sec code mod id ", Ġ" forum :: view thread ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha Ġ= Ġbinding . bbs Post Captcha EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( charset Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ GB K Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" sec code verify ", ĠURL Encoder . encode ( captcha , Ġ" GB K ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ BIG 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" sec code verify ", ĠURL Encoder . encode ( captcha , Ġ" BIG 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" sec code verify ", Ġcapt cha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= Ġform Body Builder . build () ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get ĠForm Ġ" Ġ+ Ġmessage Ġ+ Ġ" Ġhash Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġform Hash Ġ+ Ġ" Ġfid Ġ" Ġ+ Ġfid Ġ+ Ġ" Ġtid Ġ" Ġ+ Ġtid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠAPI Ġ-> " Ġ+ ĠURL Utils . get Reply Thread Url ( fid , Ġtid ) Ġ+ Ġ" Ġform hash Ġ" Ġ+ Ġform Hash ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( URL Utils . get Reply Thread Url ( fid , Ġtid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( form Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" refer er ", ĠURL Utils . getView Thread Url ( tid , Ġ" 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġm Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠ Ġ// ĠUI ĠChange ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ comment ting ) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ thread _ comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . bbs _ comment _ failed ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġresponse . body !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Recv Ġcomment Ġinfo Ġ$ s ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned Message Ġ= Ġb bs Parse Utils . parse Return Message ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returned Message Ġ!= Ġnull Ġ&& Ġreturned Message . value Ġ== Ġ" post _ reply _ suc ceed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsuccess ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . smile y Root Layout . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . call OnClick () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ thread _ comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// reload The Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value ?. let Ġ{ Ġthread Detail ViewModel . get Thread Detail ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Thread Comment (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġreturned Message . value , Ġreturned Message . string ), ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ thread _ comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returned Message Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . network _ failed ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġreturned Message . value , Ġreturned Message . string ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload The Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Thread Query Status Ġ: ĠView Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value Ġas ĠView Thread Query Status ĊĠĠĠĠĠĠĠ Ġview Thread Query Status . set Init Page ( 1 ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Set Ġstatus Ġwhen Ġreload Ġpage ") ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . post Value ( view Thread Query Status ) ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . notify Load All . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnotify Load All Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġpost Adapter . clear List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload The Page ( view Thread Query Status : ĠView Thread Query Status ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Thread Query Status . set Init Page ( 1 ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Set Ġstatus Ġwhen Ġinit Ġdata Ġ$ view Thread Query Status ") ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value Ġ= Ġview Thread Query Status ĊĠĠĠĠĠĠĠ Ġthread Detail ViewModel . notify Load All . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnotify Load All Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġpost Adapter . clear List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Reply To Some one In Thread ( reply Pid : ĠInt , Ġmessage : ĠString , Ġnotice Author Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġnotice Author Msg Ġ<> ĊĠĠĠĠĠĠĠ Ġvar Ġnotice Author Msg Ġ= Ġnotice Author Msg ĊĠĠĠĠĠĠĠ Ġnotice Author Msg Ġ= Ġnotice Author Msg . replace ("< .* >". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠDate Format . get DateTime Instance ( DateFormat . DEFAULT , ĠDate Format . FULL , ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġval Ġpublish At String Ġ= Ġdf . format ( selected Thread Comment !!. publish At ) ĊĠĠĠĠĠĠĠ Ġval ĠMAX _ CHAR _ LENGTH Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġtrim End Ġ= ĠMath . min ( MAX _ CHAR _ LENGTH , Ġnotice Author Msg . length ) ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġto Ġtrim ĊĠĠĠĠĠĠĠ Ġ// int Ġtrim End Ġ= Ġnotice Author Msg . length (); ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Reply Ġmsg Ġ$ notice Author Msg ") ĊĠĠĠĠĠĠĠ Ġvar Ġreply Message Ġ= Ġnotice Author Msg . substring ( 0 , Ġtrim End ) ĊĠĠĠĠĠĠĠ Ġif Ġ( notice Author Msg . length Ġ> ĠMAX _ CHAR _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply Message Ġ+= Ġ" ..." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnotice Msg Trim String Ġ= ĠgetString ( R . string . bbs _ reply _ notice _ author _ string , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL Utils . get Reply Post URL In Label ( selected Thread Comment !!. pid , Ġselected Thread Comment !!. tid ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Thread Comment !!. author , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublish At String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply Message ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Get Ġmessage Ġ$ notice Author Msg $ notice Msg Trim String ") ĊĠĠĠĠĠĠĠ Ġval Ġform Body Builder Ġ= ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form hash ", Ġform Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" handle key ", Ġ" reply ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" use sig ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" re pp id ", Ġreply Pid . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" re pp ost ", Ġreply Pid . toString ()) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( charset Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ GB K Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" message ", ĠURL Encoder . encode ( message , Ġ" GB K ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" notice auth orm sg ", ĠURL Encoder . encode ( notice Author Msg , Ġ" GB K ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Encoded (" not ic et rim str ", ĠURL Encoder . encode ( notice Msg Trim String , Ġ" GB K ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ BIG 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" message ", ĠURL Encoder . encode ( message , Ġ" BIG 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" notice auth orm sg ", ĠURL Encoder . encode ( notice Author Msg , Ġ" BIG 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Encoded (" not ic et rim str ", ĠURL Encoder . encode ( notice Msg Trim String , Ġ" BIG 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" message ", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" notice auth orm sg ", Ġnotice Author Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" not ic et rim str ", Ġnotice Msg Trim String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( need Captcha ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecure Info Result Ġ= Ġthread Detail ViewModel . secure Info Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcapt cha Ġ= Ġbinding . bbs Post Captcha EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" sec code hash ", Ġsecure Info Result !!. secure Variables . sec Hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" sec code mod id ", Ġ" forum :: view thread ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( charset Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ GB K Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" sec code verify ", ĠURL Encoder . encode ( captcha , Ġ" GB K ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHARSET _ BIG 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add Encoded (" sec code verify ", ĠURL Encoder . encode ( captcha , Ġ" BIG 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body Builder . add (" sec code verify ", Ġcapt cha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= Ġform Body Builder . build () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( URL Utils . get Reply Thread Url ( fid , Ġtid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( form Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ comment ting ) ĊĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġm Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠ Ġclient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ thread _ comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . network _ failed ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġresponse . body !!. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned Message Ġ= Ġb bs Parse Utils . parse Return Message ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Recv Ġreply Ġcomment Ġinfo Ġ$ s ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returned Message Ġ!= Ġnull Ġ&& Ġreturned Message . value Ġ== Ġ" post _ reply _ suc ceed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsuccess ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . smile y Root Layout . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail E mo ij Button . call OnClick () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ thread _ comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment EditText . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload The Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . thread Status Mutable LiveData . value ?. let Ġ{ Ġthread Detail ViewModel . get Thread Detail ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Thread Comment (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġreturned Message . value , Ġreturned Message . string ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . setText ( R . string . bbs _ thread _ comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bbs Thread Detail Comment Button . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returned Message Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . network _ failed ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . error ( application Context , ĠgetString ( R . string . dis cu z _ api _ message _ template , Ġreturned Message . value , Ġreturned Message . string ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . subtitle Ġ= Ġthread . tid . toString () ĊĊĠĠĠĠĠĠĠ Ġ// get Support ActionBar (). setTitle ( subject ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Favorite Thread Dialog ( favorite Thread : ĠF avorite Thread ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfavorite Dialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġfavorite Dialog . setTitle ( R . string . favorite _ description ) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠEditText ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġlp Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġinput . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠ Ġfavorite Dialog . setView ( input ) ĊĠĠĠĠĠĠĠ Ġfavorite Dialog . set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdescription : ĠString ? Ġ= Ġinput . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġif Ġ( TextUtils . isEmpty ( description )) Ġ"" Ġelse Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . favorite Thread ( favorite Thread , true , description ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfavorite Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġview Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Url : ĠString Ġ= Ġif Ġ( view Thread Query Status Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURL Utils . getView Thread Url ( tid , Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠURL Utils . getView Thread Url ( tid , Ġview Thread Query Status . page . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish After Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ forum _ nav _ personal _ center Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠUser Profile Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" UID ", Ġuser !!. uid . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ settings Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠSettings Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ forum _ nav _ draft _ box Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠThread Draft Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ forum _ nav _ show _ in _ webview Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠInternal WebView Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ URL _ KEY , Ġcurrent Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Input ted ĠURL Ġ$ current Url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ forum _ nav _ show _ in _ external _ browser Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( current Url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Input ted ĠURL Ġ$ current Url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ forum _ nav _ date line _ sort Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" You Ġpress Ġsort Ġbtn Ġ" Ġ+ Ġview Thread Query Status !!. date line Asc end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġb bs Thread Status Ġthread Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . getValue (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Thread Query Status . date line Asc end Ġ= Ġ! view Thread Query Status . date line Asc end ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Changed ĠAsc end Ġmode Ġ" Ġ+ Ġview Thread Query Status . date line Asc end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload The Page ( view Thread Query Status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" After Ġreload ĠAsc end Ġmode Ġ" Ġ+ Ġthread Detail ViewModel . thread Status Mutable LiveData . value !!. date line Asc end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Thread Query Status . date line Asc end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( context , ĠgetString ( R . string . bbs _ thread _ status _ asc end ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . success ( context , ĠgetString ( R . string . bbs _ thread _ status _ desc end ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreload Ġthe Ġparameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" date line Ġasc end Ġ" Ġ+ Ġview Thread Query Status . date line Asc end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . get Thread Detail ( view Thread Query Status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthread Detail ViewModel . thread Post Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetailed Thread Info Ġ= Ġresult . thread Post Variables . detailed Thread Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Intent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Intent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Intent . putExtra ( Intent . EXTRA _ TEXT , ĠgetString ( R . string . share _ template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetailed Thread Info . subject , Ġcurrent Url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Intent . type Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent . create Chooser ( send Intent , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( share Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . share _ not _ prepared ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ favorite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthread Detail ViewModel . thread Post Result Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetailed Thread Info Ġ= Ġresult . thread Post Variables . detailed Thread Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfavorite Thread Ġ= Ġdetailed Thread Info . to Favorite Thread ( dis cu z . id , Ġif Ġ( user Ġ!= Ġnull ) Ġuser !!. uid Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġit Ġto Ġthe Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboolean Ġis Favorite Ġ= Ġthread Detail ViewModel . is Favorite Thread Mutable LiveData . getValue (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfavorite Thread In DB Ġ= Ġthread Detail ViewModel . favorite Thread LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Favorite Ġ= Ġfavorite Thread In DB Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Get ĠF avro ite Ġthread $ favorite Thread In DB ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( favorite Thread In DB Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Detail ViewModel . favorite Thread ( favorite Thread In DB , Ġfalse ," ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" is ĠF avorite Ġ$ is Favorite ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġopen Ġup Ġa Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Favorite Thread Dialog ( favorite Thread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// new ĠF avor iting Thread AsyncTask ( favorite Thread , true ). execute (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast y . info ( this , ĠgetString ( R . string . favorite _ thread _ not _ prepared ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ search Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠSearch Posts Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . bbs _ about _ app Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠAbout App Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . paging _ view Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , Thread Page Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ ENTITY _ KEY , Ġdis cu z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ BB S _ USER _ KEY , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ THREAD _ KEY , thread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ FOR UM _ THREAD _ KEY , forum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Const Utils . PASS _ PAGE _ KEY , 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġ// Ġconfigure Intent Data (); ĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . bbs _ in cognitive _ thread _ nav _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . bbs _ thread _ nav _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( support ActionBar Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠView Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View Thread Query Status Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" ON ĠCREATE ĠGET Ġasc end Ġmode Ġin Ġmenu Ġ" Ġ+ ĠView Thread Query Status . date line Asc end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View Thread Query Status . date line Asc end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ forum _ nav _ date line _ sort ). icon Ġ= ĠContext Compat . get Drawable ( application , ĠR . drawable . ic _ baseline _ arrow _ up ward _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ forum _ nav _ date line _ sort ). icon Ġ= ĠContext Compat . get Drawable ( application , ĠR . drawable . ic _ baseline _ arrow _ down ward _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠView Thread Query Status Ġ= Ġthread Detail ViewModel . thread Status Mutable LiveData . value ĊĠĠĠĠĠĠĠ Ġif Ġ( View Thread Query Status Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" ON ĠPRE PARE ĠGET Ġasc end Ġmode Ġin Ġmenu Ġ" Ġ+ ĠView Thread Query Status . date line Asc end ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( View Thread Query Status . date line Asc end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ forum _ nav _ date line _ sort ). icon Ġ= ĠContext Compat . get Drawable ( this , R . drawable . ic _ baseline _ arrow _ up ward _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ forum _ nav _ date line _ sort ). icon Ġ= ĠContext Compat . get Drawable ( this , R . drawable . ic _ baseline _ arrow _ down ward _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// boolean Ġis Favorite Ġ= Ġthread Detail ViewModel . is Favorite Thread Mutable LiveData . getValue (); ĊĠĠĠĠĠĠĠ Ġval Ġfavorite Thread Ġ= Ġthread Detail ViewModel . favorite Thread LiveData . value ĊĠĠĠĠĠĠĠ Ġval Ġis Favorite Ġ= Ġfavorite Thread Ġ!= Ġnull ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Trigger ing Ġfavorite Ġstatus Ġ$ is Favorite ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ favorite ). icon Ġ= Ġget Drawable ( R . drawable . ic _ not _ favorite _ 2 4 px ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ favorite ). setTitle ( R . string . favorite ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ favorite ). icon Ġ= Ġget Drawable ( R . drawable . ic _ favorite _ 2 4 px ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . bbs _ favorite ). setTitle ( R . string . un favorite ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert View History ( view History : ĠView History ){ ĊĠĠĠĠĠĠĠ Ġval Ġdao Ġ= ĠView History Database . getInstance ( application Context ). dao ĊĠĠĠĠĠĠĠ ĠThread { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Hist ories Ġ= Ġdao . getView History By BB S Id And Tid ( view History . bel on ged BB S Id , Ġview History . tid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( view Hist ories . size Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert ( view History ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġview Hist ories . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated View History Ġ= Ġview Hist ories [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated View History . record At Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert ( view Hist ories ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠThread Activity :: class . java . simple Name ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ