package Ġru . hs Helper . android App . ui . navigation Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Space Ċ import Ġandroid . widget . Table Layout Ċ import Ġandroid . widget . TableRow Ċ import Ġandroidx . appcompat . widget . AppCompat Button Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġru . hs Helper . R Ċ import Ġru . hs Helper . android App . data . Button Data Ċ import Ġru . hs Helper . android App . utils . getCurrent Window Width Ċ Ċ class ĠMain Buttons Observer ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġtable : ĠTable Layout Ċ ) Ġ: ĠObserver < List < Button Data >> Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġmain Buttons Raw Size Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġspace LayoutParams Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Row . LayoutParams (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 1 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpadding Ġ= Ġcontext . resources . get Dimension ( R . dim en . navigation _ button _ padding ). toInt () ĊĠĠĠ Ġprivate Ġval Ġbutton LayoutParams Ġ= Ġbutton LayoutParams () ĊĊĠĠĠ Ġprivate Ġfun Ġbutton LayoutParams (): ĠTable Row . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Window Width Ġ= ĠgetCurrent Window Width ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġp add ings Sum Ġ= Ġpadding Ġ* Ġ( main Buttons Raw Size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbutton Size Ġ= Ġ( current Window Width Ġ- Ġp add ings Sum ) Ġ/ Ġmain Buttons Raw Size ĊĠĠĠĠĠĠĠ Ġreturn ĠTable Row . LayoutParams (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweight Ġ= Ġ 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġbutton Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġbutton Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonChanged ( buttons : ĠList < Button Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtable Rows Ġ= Ġmake Main Buttons Rows ( buttons ) ĊĠĠĠĠĠĠĠ Ġtable . removeAll Views () ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġtable Rows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable . addView ( row ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Main Buttons Rows ( buttons : ĠList < Button Data >): ĠArrayList < TableRow > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuttons View Ġ= ĠArrayList < View >() ĊĠĠĠĠĠĠĠ Ġval Ġtable Rows Ġ= ĠArrayList < TableRow >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( button Ġin Ġbuttons ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuttons View . add ( make Main Button ( button )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buttons View . size Ġ== Ġmain Buttons Raw Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Rows . add ( make Main Buttons Row ( buttons View )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuttons View . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( buttons View . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuttons View . add ( Space ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buttons View . size Ġ== Ġmain Buttons Raw Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Rows . add ( make Main Buttons Row ( buttons View )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuttons View . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtable Rows ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Main Buttons Row ( buttons : ĠList < View >): ĠTable Row Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrow Ġ= ĠTable Row ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( 0 , Ġpadding , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrow . addView ( Space ( context ), Ġspace LayoutParams ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( button Ġin Ġbuttons ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . addView ( button , Ġbutton LayoutParams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . addView ( Space ( context ), Ġspace LayoutParams ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Main Button ( button : ĠButton Data ): ĠAppCompat Button Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAppCompat Button ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( R . attr . color Primary Variant , Ġtyped Value , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( typed Value . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( R . attr . color On Primary , Ġtyped Value , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( typed Value . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġbutton . main Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener ( button . listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ