package Ġcom . k yle cor ry . trail _ sense . shared . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġcom . k yle cor ry . trail _ sense . R Ċ import Ġcom . k yle cor ry . trail _ sense . databinding . View Error Banner Binding Ċ import Ġcom . k yle cor ry . trail _ sense . shared . Error Banner Reason Ċ import Ġcom . k yle cor ry . trail _ sense . shared . User Preferences Ċ Ċ class ĠError Banner View ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠConstraint Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠView Error Banner Binding ĊĊĠĠĠ Ġprivate Ġval Ġerrors : ĠMutable List < User Error > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprivate Ġval Ġprefs Ġby Ġlazy Ġ{ ĠUser Preferences ( this . context ) Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġon Action : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . view _ error _ banner , Ġthis ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠView Error Banner Binding . bind ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . error Action . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . error Close . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreason Ġ= Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . first OrNull ()?. reason ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reason Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss ( reason ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreport ( error : ĠUser Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! prefs . errors . can Show Error ( error . reason )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . removeAll Ġ{ Ġit . reason Ġ== Ġerror . reason Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . add ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . sortBy Ġ{ Ġit . reason . id Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisplay Next Error () ĊĠĠĠĠĠĠĠ Ġshow () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss ( reason : ĠError Banner Reason ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . removeAll Ġ{ Ġit . reason Ġ== Ġreason Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisplay Next Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdismiss All () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisplay Next Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Next Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . first OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( first Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Error ( first ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Error ( error : ĠUser Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . error Text . text Ġ= Ġerror . title ĊĠĠĠĠĠĠĠ Ġbinding . error Action . text Ġ= Ġerror . action ĊĠĠĠĠĠĠĠ Ġbinding . error Icon . setImage Resource ( error . icon ) ĊĠĠĠĠĠĠĠ Ġon Action Ġ= Ġerror . on Action ĊĠĠĠĠĠĠĠ Ġif Ġ( error . action . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . error Action . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . error Action . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow () Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide () Ġ{ ĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} Ċ Ċ }