package Ġcom . kr ake . core . widget Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . widget . AppCompat Button Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . core . graphics . drawable . Drawable Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . kr ake . core . Or chard Error Ċ import Ġcom . kr ake . core . R Ċ import Ġcom . kr ake . core . Signal er Ċ import Ġcom . kr ake . core . app . Login And Privacy Activity Ċ import Ġcom . kr ake . core . login . Login Manager Ċ import Ġcom . kr ake . core . model . Content Item Ċ import Ġcom . kr ake . core . model . Record With Identifier Ċ import Ġcom . kr ake . core . network . Remote Request Ċ import Ġcom . kr ake . core . network . Remote Response Ċ Ċ /** Ċ Ġ* ĠCl asse Ġche Ġgest ice Ġle ĠUser ĠRe action . Ċ Ġ* ĠLe Ġuser Ġreaction Ġdev ono Ġessere Ġagg ang iate Ġai Ġconten uti Ġl ato ĠBO Ġdi ĠOr chard Ġed ĠÃ¨ Ġnecess ario Ġab ilit are Ġle Ċ Ġ* Ġreaction Ġche Ġsi Ġv og l ion o Ġper Ġil Ġsing olo Ġtipo Ġdi Ġconten uto . Ċ Ġ* Ċ Ġ* ĠLa Ġview Ġfa Ġl ' inflate Ġdi ĠR . style able . User Reaction View _ root Layout Ġ( default ĠR . layout . user _ reaction _ root _ layout ) Ċ Ġ* Ġcome Ġrad ice Ġdella Ġsi ua Ġview . ĠLa Ġview Ġrad ice Ġdeve Ġconten ere Ġuna Ġsub View Ġcon Ġid ĠR . id . user Reaction Root Layout Ċ Ġ* Ġche Ġdeve Ġer edit are Ġda Ġview Ġgroup . ĠAll ' intern o Ġdi Ġquesta Ġsar anno Ġinser ite Ġle Ġsing ole Ġview Ġper Ġgest ire Ġle Ġreaction . Ċ Ġ* Ċ Ġ* ĠLa Ġsing ola Ġview Ġper Ġgest ire Ġla Ġreaction ĠÃ¨ Ġpres a Ġda ĠR . style able . User Reaction View _ element Layout Ġ( default ĠR . layout . user _ reaction _ element ). Ċ Ġ* ĠVi ene Ġconfigur ata Ġd alla Ġclasse Ġdi Ġlibr eria Ġsolo Ġse ĠÃ¨ Ġun ĠButton . ĠAlt ri ment i Ġsar Ãł Ġnecess ario Ġf are Ġoverwrite Ġdi Ċ Ġ* Ġcreate View For Reaction () Ċ Ġ*/ Ċ open Ġclass ĠUser Reaction View Ġ: ĠFrame Layout , ĊĠĠĠĠĠĠĠ ĠContent Item View , ĊĠĠĠĠĠĠĠ ĠView . OnClickListener , ĠObserver < Boolean > Ċ { ĊĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcontainer : ĠContent Item View Container ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinflater : ĠLayoutInflater ĊĠĠĠ Ġprivate Ġvar Ġelement Layout Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot View : ĠViewGroup ĊĠĠĠ Ġprivate Ġvar Ġm User Authenticated Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm User Authorized Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġcontent Identifier : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġt int Color List : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġshow Reaction Name : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ContentView ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ContentView ( context , Ġattrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ContentView ( context , Ġattrs ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ContentView ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . theme . obtain Styled Attributes ( attrs , ĠR . style able . User Reaction View , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġinflater Ġ= Ġcontext . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĊĠĠĠĠĠĠĠ Ġinflater . inflate ( a . getResource Id ( R . style able . User Reaction View _ root Layout , ĠR . layout . user _ reaction _ root _ layout ), Ġthis , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġshow Reaction Name Ġ= Ġa . getBoolean ( R . style able . User Reaction View _ show _ reaction _ name , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġroot View Ġ= ĠfindViewById ( R . id . user Reaction Root Layout ) ĊĊĠĠĠĠĠĠĠ Ġelement Layout Ġ= Ġa . getResource Id ( R . style able . User Reaction View _ element Layout , ĠR . layout . user _ reaction _ element ) ĊĊĠĠĠĠĠĠĠ Ġt int Color List Ġ= Ġa . getResource Id ( R . style able . User Reaction View _ element Color List , ĠR . color . user _ reaction _ color ) ĊĊĠĠĠĠĠĠĠ Ġthis . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ ĠLogin Manager . shared . is Logged . observe Fore ver ( this ) ĊĠĠĠĠĠĠĠ ĠonChanged ( Login Manager . shared . is Logged . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ ĠLogin Manager . shared . is Logged . remove Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow ( content Item : ĠContent Item , Ġcache Valid : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( content Item Ġis ĠRecord With Identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Identifier Ġ!= Ġcontent Item . identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Identifier Ġ= Ġcontent Item . identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Updated User Reaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Updated User Reaction () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRemote Request ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Method ( Remote Request . Method . GET ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Query ( getString ( R . string . orch ard _ api _ identifier _ for _ user _ reaction ), Ġthis . content Identifier . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Path ( getString ( R . string . orch ard _ api _ user _ reaction )) ĊĊĠĠĠĠĠĠĠ ĠSign aler . shared ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke API ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġobject Ġ: Ġ( Remote Response ?, ĠOr chard Error ?) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠRemote Response ?, Ġp 2 : ĠOr chard Error ?) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Api Call Result ( p 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( p 2 Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġload Data From Reaction ( reaction Object : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot View . removeAll Views () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reaction Object . get (" Content Id "). as Long Ġ== Ġthis . content Identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre actions Ġ= Ġreaction Object . getAs JsonArray (" Re actions ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm User Authorized Ġ= Ġreaction Object . get (" User Authorized "). as Boolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm User Authenticated Ġ= Ġreaction Object . get (" User Authenticated "). as Boolean ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 .. reactions . size () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreaction Ġ= Ġre actions . get ( index ). as JsonObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcreate View For Reaction ( reaction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . tag Ġ= Ġreaction . get ( RE ACTION _ ID _ KEY ). as Long ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . isEnabled Ġ= Ġm User Authorized Ġ|| Ġ! m User Authenticated ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġprotected Ġfun Ġcreate View For Reaction ( reaction : ĠJsonObject ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġreaction Name Ġ= Ġreaction . get (" TypeName "). asString ĊĊĠĠĠĠĠĠĠ Ġval Ġres ID Ġ= Ġresources . getIdentifier (" rc _" Ġ+ Ġreaction Name , Ġ" drawable ", Ġcontext . packageName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( res ID Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġinflater . inflate ( element Layout , Ġthis , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠButton ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdrawable : ĠDrawable Ġ= ĠResources Compat . get Drawable ( resources , Ġres ID , Ġnull ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= ĠDrawable Compat . wrap ( drawable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDrawable Compat . set Tint List ( drawable , ĠResources Compat . getColor State List ( resources , Ġt int Color List , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// drawable . setBounds ( 0 , Ġ 0 , Ġdrawable . intrinsic Width , Ġdrawable . intrinsic Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v Ġas ĠAppCompat Button ). set Compound Draw ables Relative With Intr insic Bounds ( null , Ġdrawable , Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr ind Id Ġ= Ġresources . getIdentifier (" rc _" Ġ+ Ġreaction Name , Ġ" string ", Ġcontext . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! show Reaction Name Ġ|| Ġstr ind Id Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . text Ġ= Ġreaction . get ( RE ACTION _ QU ANT ITY _ KEY ). asString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . text Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . reaction _ text _ number _ format ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( str ind Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreaction . get ( RE ACTION _ QU ANT ITY _ KEY ). asString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . setSelected ( reaction . get ( RE ACTION _ CLICK ED _ KEY ). as Int Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m User Authorized ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . addProperty ( getString ( R . string . orch ard _ api _ identifier _ for _ user _ reaction ), Ġthis . content Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . addProperty ( getString ( R . string . orch ard _ api _ reaction _ identifier ), Ġv . tag Ġas ĠLong ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRemote Request ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Path ( getString ( R . string . orch ard _ api _ user _ reaction )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Method ( Remote Request . Method . POST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Body ( query ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSign aler . shared ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke API ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġobject Ġ: Ġ( Remote Response ?, ĠOr chard Error ?) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠRemote Response ?, Ġp 2 : ĠOr chard Error ?) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Api Call Result ( p 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( p 2 Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar Utils . create Snackbar ( this @ User Reaction View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 . getUser Friendly Message ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ? ĠLogin And Privacy Activity )?. show Login Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Api Call Result ( remote Response : ĠRemote Response ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġreaction Object Ġ= Ġremote Response . jsonObject ()?. getAs JsonObject (" Data ") ĊĠĠĠĠĠĠĠ Ġif Ġ( reaction Object Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reaction Object . has (" Status ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreaction Object Ġ= Ġreaction Object . getAs JsonObject (" Status ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreaction Object ?. let Ġ{ Ġload Data From Reaction ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChanged ( t : ĠBoolean ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġtrue Ġ&& Ġ! m User Authenticated Ġ&& Ġ! m User Authorized ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Updated User Reaction () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠRE ACTION _ ID _ KEY Ġ= Ġ" TypeId " ĊĠĠĠĠĠĠĠ Ġval ĠRE ACTION _ QU ANT ITY _ KEY Ġ= Ġ" Quantity " ĊĠĠĠĠĠĠĠ Ġval ĠRE ACTION _ CLICK ED _ KEY Ġ= Ġ" Clicked " ĊĠĠĠ Ġ} Ċ } Ċ