package Ġcom . ms 8 . smart ir hub . android . remote _ control . views Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Observable Ċ import Ġandroidx . databinding . Observable List Ċ import Ġcom . ms 8 . smart ir hub . android . R Ċ import Ġcom . ms 8 . smart ir hub . android . database . AppState Ċ import Ġcom . ms 8 . smart ir hub . android . databinding . F Remote Current Binding Ċ import Ġcom . ms 8 . smart ir hub . android . remote _ control . button . creation . Button Creator Ċ import Ġcom . ms 8 . smart ir hub . android . remote _ control . button . models . Button Ċ import Ġcom . ms 8 . smart ir hub . android . remote _ control . creation . Remote Creator Ċ import Ġcom . ms 8 . smart ir hub . android . remote _ control . models . Remote Profile Ċ Ċ class ĠRemote Layout Ġ{ ĊĠĠĠ Ġvar Ġbinding : ĠF Remote Current Binding ? Ġ= Ġnull ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. remote Layout ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Creator . context Ġ= Ġit . context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . top Padding Ġ= Ġtop Padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Background Tint () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Creator . context Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Listening Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġbutton Creator Ġ= ĠButton Creator () ĊĊĠĠĠ Ġprivate Ġval Ġremote Layout Adapter Ġ= ĠRemote Layout Adapter () ĊĊĠĠĠ Ġvar Ġtop Padding Ġ= Ġ 0 ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. top Padding Ġ= Ġtop Padding ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Button Pressed Listener ( listener : Ġ( button Position : ĠInt , Ġcommand : ĠRemote Profile . Command ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremote Layout Adapter . on Button Pressed Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Background Tint () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠisIn Edit Mode Ġ= ĠApp State . temp Data . temp Remote Profile . in Edit Mode . get () ĊĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Tint List Ġ= Ġif Ġ( isIn Edit Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor State List ( context , ĠR . color . color Remote BG _ Editing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor State List ( context , ĠR . color . color Remote BG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ /* Ċ -------------------------------- --------------- ĊĠĠĠ ĠListener ĠH ell ĠBelow Ċ -------------------------------- --------------- Ċ */ ĊĊĠĠĠ Ġ// ĠIs Ġtriggered Ġwhenever Ġthe Ġuser Ġent ers / ex its Ġ" edit Ġmode " Ġon Ġthe Ġremote Ġ( i . e . Ġby Ġclicking Ġthe Ġcenter Ġedit Ġbutton ) ĊĠĠĠ Ġprivate Ġval Ġedit Mode Listener Ġ Ġ= Ġ Ġobject Ġ: ĠObservable . On PropertyChanged Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon PropertyChanged ( sender : ĠObservable ?, Ġproperty Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Background Tint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Layout Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIs Ġtriggered Ġwhenever Ġtemp Remote Profile Ġchange 's Ġ' is Creating New Button ' Ġ( i . e . Ġwhen Ġa Ġuser Ġclicks Ġ' add Ġbutton ' ĊĠĠĠ Ġprivate Ġval Ġadd Button Listener Ġ= Ġobject Ġ: ĠObservable . On PropertyChanged Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon PropertyChanged ( sender : ĠObservable ?, Ġproperty Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( AppState . temp Data . temp Remote Profile . is Creating New Button . get () Ġ&& ĠApp State . temp Data . temp Remote Profile . in Edit Mode . get ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" TEST ", Ġ" add Button ĠDET ECT ED ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// on AddNew Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Creator . show Bottom Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIs Ġtriggered Ġwhenever Ġthe Ġbutton Ġcreation Ġprocess Ġis Ġcomplete Ġ( i . e . Ġwhenever Ġa Ġbutton Ġis Ġadded Ġto Ġtemp Remote Profile . buttons ) ĊĠĠĠ Ġprivate Ġval Ġbutton Listener Ġ= Ġobject Ġ: ĠObservable List . On List Changed Callback < Observable List < Button >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( sender : ĠObservable List < Button > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Remote Layout Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Prompt Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Removed ( sender : ĠObservable List < Button > ?, Ġposition Start : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Layout Adapter . notify Item Range Removed ( position Start , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Remote Layout Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Prompt Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Moved ( sender : ĠObservable List < Button > ?, Ġfrom Position : ĠInt , Ġto Position : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Prompt Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Remote Layout Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Inserted ( sender : ĠObservable List < Button > ?, Ġposition Start : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. adapter ?. notify Item Range Inserted ( position Start , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Prompt Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Remote Layout Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Range Changed ( sender : ĠObservable List < Button > ?, Ġposition Start : ĠInt , Ġitem Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. adapter ?. notify Item Range Changed ( position Start , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Prompt Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Remote Layout Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtodo Ġ- Ġthis Ġis Ġa Ġquick Ġfix Ġto Ġa Ġbug Ġwhere Ġthe Ġadapter Ġdoesn 't Ġad here Ġto Ġitem Count ĊĠĠĠ Ġprivate Ġfun Ġupdate Remote Layout Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. setup Adapter ( remote Layout Adapter ) ĊĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Prompt Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠisEmpty Remote Ġ= ĠApp State . temp Data . temp Remote Profile . buttons . size Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! AppState . temp Data . temp Remote Profile . in Edit Mode . get () ĊĠĠĠĠĠĠĠ Ġval Ġis First Time Remote Ġ= ĠisEmpty Remote ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠApp State . userData . rem otes . size Ġ== Ġ 0 ĊĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis First Time Remote Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Create First Remote P 1 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( R . string . new _ remote _ prompt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Compound Draw ables With Intr insic Bounds ( null , Ġnull , ĠContext Compat . get Drawable ( this . context , ĠR . drawable . ic _ new _ remote _ icon ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Create First Remote P 2 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( R . string . icon _ period ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Remote Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Create First Remote P 1 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( R . string . add _ buttons _ prompt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Compound Draw ables With Intr insic Bounds ( null , Ġnull , ĠContext Compat . get Drawable ( this . context , ĠR . drawable . ic _ mode _ edit _ white _ 2 4 dp ), Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Create First Remote P 2 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( R . string . icon _ period ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Create First Remote P 1 . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt Create First Remote P 2 . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Log Not Tim ber ") ĊĠĠĠ Ġfun Ġsetup Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" Remote Layout ", Ġ" setup Adapter Ġ- Ġattempted Ġto Ġset Ġup Ġadapter Ġwithout Ġbinding !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding ?. remote Layout ?. setup Adapter ( remote Layout Adapter )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Prompt Visibility () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Listening () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Listening ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Listening Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠButton Creator ĠList eners ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// AppState . temp Data . temp Remote Profile . is Creating New Button . add On PropertyChanged Callback ( add Button Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp State . temp Data . temp Remote Profile . buttons . add On List Changed Callback ( button Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp State . temp Data . temp Remote Profile . in Edit Mode . add On PropertyChanged Callback ( edit Mode Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Listening () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Listening Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠButton Creator Ġlisteners ĊĠĠĠĠĠĠĠ Ġ// AppState . temp Data . temp Remote Profile . is Creating New Button . remove On PropertyChanged Callback ( add Button Listener ) ĊĠĠĠĠĠĠĠ ĠApp State . temp Data . temp Remote Profile . buttons . remove On List Changed Callback ( button Listener ) ĊĠĠĠĠĠĠĠ ĠApp State . temp Data . temp Remote Profile . in Edit Mode . remove On PropertyChanged Callback ( edit Mode Listener ) ĊĠĠĠ Ġ} Ċ }