package Ġorg . dh is 2 . utils . filters . dates Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . databinding . Observable Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Date Ċ import Ġorg . dh is 2 . R Ċ import Ġorg . dh is 2 . databinding . Filter Period Binding Ċ import Ġorg . dh is 2 . utils . Date Utils Ċ import Ġorg . dh is 2 . utils . Period Ċ import Ġorg . dh is 2 . utils . filters . Enrollment Date Filter Ċ import Ġorg . dh is 2 . utils . filters . Filter Item Ċ import Ġorg . dh is 2 . utils . filters . Filter Manager Ċ import Ġorg . dh is 2 . utils . filters . Period Filter Ċ import Ġorg . h isp . dh is . android . core . period . Date Period Ċ Ċ class ĠFilter Period View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ), ĠCompound Button . On Checked ChangeListener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbinding Ġ= ĊĠĠĠĠĠĠĠ ĠFilter Period Binding . inflate ( LayoutInflater . from ( context ), Ġthis , Ġtrue ) ĊĠĠĠ Ġprivate Ġvar Ġperiod Request : Ġ( Filter Manager . Period Request , ĠInt ) Ġ-> ĠUnit Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠ Ġprivate Ġvar Ġon Period Selected : Ġ( List < Date Period >, ĠInt ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Filter Item ( filter Item : ĠFilter Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Selection ( R . id . any time ) ĊĠĠĠĠĠĠĠ Ġif Ġ( filter Item Ġis ĠEn rollment Date Filter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Enrollment Filter ( filter Item ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( filter Item Ġis ĠPeriod Filter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Period Filter ( filter Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Enrollment Filter ( filter Item : ĠEn rollment Date Filter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter Item . observe Period () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On PropertyChanged Callback ( object Ġ: ĠObservable . On PropertyChanged Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon PropertyChanged ( sender : ĠObservable ?, Ġproperty Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection ( filter Item . observe Period (). get () Ġ?: ĠR . id . any time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġperiod Request Ġ= Ġ{ Ġperiod Request , Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection ( checked Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Item . request Period ( period Request , Ġchecked Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Period Selected Ġ= Ġ{ Ġperiods , Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Item . setSelected Period ( periods , Ġchecked Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Period Filter ( filter Item : ĠPeriod Filter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter Item . observe Period () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On PropertyChanged Callback ( object Ġ: ĠObservable . On PropertyChanged Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon PropertyChanged ( sender : ĠObservable ?, Ġproperty Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection ( filter Item . observe Period (). get () Ġ?: ĠR . id . any time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġperiod Request Ġ= Ġ{ Ġperiod Request , Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection ( checked Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Item . request Period ( period Request , Ġchecked Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Period Selected Ġ= Ġ{ Ġperiods , Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Item . setSelected Period ( periods , Ġchecked Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon CheckedChanged ( compound Button : ĠCompound Button , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠInt Ġ= Ġcompound Button . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= ĠR . id . other Ġ&& Ġid Ġ!= ĠR . id . from To ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdates : ĠArray < Date ?> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . today Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDate From Date And Period ( calendar . time , ĠPeriod . DA IL Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . y esterday Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DAY _ OF _ YEAR , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance (). getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . DA IL Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tom orrow Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DAY _ OF _ YEAR , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance (). getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . DA IL Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . this _ week Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDate From Date And Period ( calendar . time , ĠPeriod . WEEK LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . last _ week Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . WEEK _ OF _ YEAR , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance (). getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . WEEK LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . next _ week Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . WEEK _ OF _ YEAR , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance (). getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . WEEK LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . this _ month Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . MONTH LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . last _ month Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . MONTH , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance (). getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . MONTH LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . next _ month Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . MONTH , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdates Ġ= ĠDate Utils . getInstance (). getDate From Date And Period ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPeriod . MONTH LY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperiods Ġ= Ġif Ġ( dates Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Period . builder (). startDate ( dates [ 0 ]). endDate ( dates [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Period Selected ( periods , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Selection ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . today . isChecked Ġ= Ġid Ġ== ĠR . id . today ĊĠĠĠĠĠĠĠ Ġbinding . y esterday . isChecked Ġ= Ġid Ġ== ĠR . id . y esterday ĊĠĠĠĠĠĠĠ Ġbinding . tom orrow . isChecked Ġ= Ġid Ġ== ĠR . id . tom orrow ĊĠĠĠĠĠĠĠ Ġbinding . this Week . isChecked Ġ= Ġid Ġ== ĠR . id . this _ week ĊĠĠĠĠĠĠĠ Ġbinding . last Week . isChecked Ġ= Ġid Ġ== ĠR . id . last _ week ĊĠĠĠĠĠĠĠ Ġbinding . next Week . isChecked Ġ= Ġid Ġ== ĠR . id . next _ week ĊĠĠĠĠĠĠĠ Ġbinding . this Month . isChecked Ġ= Ġid Ġ== ĠR . id . this _ month ĊĠĠĠĠĠĠĠ Ġbinding . last Month . isChecked Ġ= Ġid Ġ== ĠR . id . last _ month ĊĠĠĠĠĠĠĠ Ġbinding . next Month . isChecked Ġ= Ġid Ġ== ĠR . id . next _ month ĊĠĠĠĠĠĠĠ Ġbinding . from To . isChecked Ġ= Ġid Ġ== ĠR . id . from To ĊĠĠĠĠĠĠĠ Ġbinding . other . isChecked Ġ= Ġid Ġ== ĠR . id . other ĊĠĠĠĠĠĠĠ Ġbinding . any time . isChecked Ġ= Ġid Ġ== ĠR . id . any time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . today . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . y esterday . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . tom orrow . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . this Week . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . last Week . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . next Week . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . this Month . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . last Month . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . next Month . setOn Checked ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . from To . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . from To . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperiod Request ( Filter Manager . Period Request . FROM _ TO , ĠR . id . from To ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . other . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . other . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperiod Request ( Filter Manager . Period Request . OTHER , ĠR . id . other ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . any time . setOn Checked ChangeListener ( this ) ĊĠĠĠ Ġ} Ċ } Ċ