package Ġio . pet ros . movies . movies . toolbar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . core . view . isIn visible Ċ import Ġandroidx . core . view . isVisible Ċ import Ġio . pet ros . movies . feature . movies . R Ċ import Ġio . pet ros . movies . feature . movies . databinding . Movies Toolbar Binding Ċ import Ġio . pet ros . movies . utils . Month OfYear Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Suppress (" Too Many Functions ", Ġ" Member Visibility Can Be Private ") Ċ class ĠMov ies Toolbar ( ĊĠĠĠ Ġctx : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ċ ) Ġ: ĠLinearLayout ( ctx , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġvar Ġcallback : ĠMov ies Toolbar Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Visible ForTesting Ġval Ġbinding Ġ= ĠMov ies Toolbar Binding . inflate ( LayoutInflater . from ( context ), Ġthis ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Filter Icon () ĊĠĠĠĠĠĠĠ Ġinit Close Icon () ĊĠĠĠĠĠĠĠ Ġinit Year Filter () ĊĠĠĠĠĠĠĠ Ġinit Month Filter () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Filter Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv Toolbar Filter Icon . setOnClickListener Ġ{ Ġcallback ?. on Filter Clicked () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Close Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv Toolbar Close Icon . setOnClickListener Ġ{ Ġcallback ?. onClose Clicked () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Year Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Year . setOnClickListener Ġ{ Ġcallback ?. on Year Clicked () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Month Filter () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Month . setOnClickListener Ġ{ Ġcallback ?. on Month Clicked () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠSHOW / HIDE Ġ*/ ĊĊĠĠĠ Ġfun Ġshow Filter Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv Toolbar Filter Icon . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . iv Toolbar Close Icon . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Close Icon () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv Toolbar Filter Icon . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . iv Toolbar Close Icon . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Year ( year : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Year . isIn visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Year . text Ġ= Ġyear Ġ?: Ġcontext . getString ( R . string . tv Toolbar Filter Year ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Year () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Year . isIn visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Year . text Ġ= Ġcontext . getString ( R . string . tv Toolbar Filter Year ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Month ( month : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Month . isIn visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Month . text Ġ= Ġmonth Ġ?: Ġcontext . getString ( R . string . tv Toolbar Filter Month ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide Month () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Month . isIn visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . tv Toolbar Filter Month . text Ġ= Ġcontext . getString ( R . string . tv Toolbar Filter Month ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠYEAR Ġ*/ ĊĊĠĠĠ Ġfun Ġset Year ( year : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Year ( year . toString ()) ĊĠĠĠĠĠĠĠ Ġshow Month () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Sw allowed Exception ") ĊĠĠĠ Ġfun Ġget Year (): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġbinding . tv Toolbar Filter Year . text . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear . toInt () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( n fe : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Cannot Ġconvert Ġthe Ġyear Ġtext Ġto Ġan Ġinteger , Ġdefault ing Ġto Ġnull . Ġ[ Year : Ġ$ year ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Year () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Year () ĊĠĠĠĠĠĠĠ Ġhide Month () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠMON TH Ġ*/ ĊĊĠĠĠ Ġfun Ġset Month ( month : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Month ( Month OfYear . from ( month ). label ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Month (): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmonth OfYear Ġ= ĠMonth OfYear . from ( binding . tv Toolbar Filter Month . text ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( month OfYear Ġ!= ĠMonth OfYear . UNKNOWN _ MONTH ) Ġmonth OfYear . number Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠCONFIG URATION ĠCHANGE Ġ*/ ĊĊĠĠĠ Ġfun Ġon Restore InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Restore Icon InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġon Restore Year InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġon Restore Month InstanceState ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Restore Icon InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclose Icon Ġ= ĠsavedInstanceState . getBoolean ( INSTANCE _ STATE _ KEY _ CLOSE _ ICON ) ĊĠĠĠĠĠĠĠ Ġif Ġ( close Icon ) Ġshow Close Icon () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Restore Year InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsavedInstanceState . getString ( INSTANCE _ STATE _ KEY _ YEAR _ FILTER )?. let Ġ{ Ġset Year ( it . toInt ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Restore Month InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsavedInstanceState . getString ( INSTANCE _ STATE _ KEY _ MONTH _ FILTER )?. let Ġ{ Ġset Month ( it . toInt ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Save Close Icon InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġon Save Year InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġon Save Month InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Save Close Icon InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Boolean ( INSTANCE _ STATE _ KEY _ CLOSE _ ICON , Ġbinding . iv Toolbar Close Icon . isVisible Ġ&& Ġget Year () Ġ!= Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Save Year InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Year ()?. let Ġ{ Ġout State . putString ( INSTANCE _ STATE _ KEY _ YEAR _ FILTER , Ġit . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Save Month InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Month ()?. let Ġ{ Ġout State . putString ( INSTANCE _ STATE _ KEY _ MONTH _ FILTER , Ġit . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Visible ForTesting Ġconst Ġval ĠINSTANCE _ STATE _ KEY _ CLOSE _ ICON Ġ= Ġ" CLOSE _ ICON " ĊĊĠĠĠĠĠĠĠ Ġ@ Visible ForTesting Ġconst Ġval ĠINSTANCE _ STATE _ KEY _ YEAR _ FILTER Ġ= Ġ" YEAR _ FILTER " ĊĊĠĠĠĠĠĠĠ Ġ@ Visible ForTesting Ġconst Ġval ĠINSTANCE _ STATE _ KEY _ MONTH _ FILTER Ġ= Ġ" MONTH _ FILTER " ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ