package Ġcom . react nat iven avigation . views . stack . top bar . title bar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Restrict To Ċ import Ġcom . react nat iven avigation . options . Alignment Ċ import Ġcom . react nat iven avigation . options . Font Options Ċ import Ġcom . react nat iven avigation . options . params . Colour Ċ import Ġcom . react nat iven avigation . options . parsers . Type face Loader Ċ import Ġcom . react nat iven avigation . utils . Compat Utils Ċ import Ġcom . react nat iven avigation . utils . Ui Utils Ċ import Ġcom . react nat iven avigation . utils . View Utils Ċ import Ġcom . react nat iven avigation . utils . log d Ċ Ċ const Ġval ĠDEFAULT _ LEFT _ M ARGIN Ġ= Ġ 1 6 Ċ Ċ class ĠMain ToolBar ( context : ĠContext ) Ġ: ĠRelative Layout ( context ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcomponent : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġcenter Frame Layout Ġ= ĠFrame Layout ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠCompat Utils . generate View Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtitle Sub Title Bar Ġ= ĠTitle Sub Title Layout ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠCompat Utils . generate View Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġleft Buttons Bar Ġ= ĠLeft Buttons Bar ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= ĠCompat Utils . generate View Id () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġright Buttons Bar : ĠRight Buttons Bar Ġ= ĠRight Buttons Bar ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= ĠCompat Utils . generate View Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . addView ( left Buttons Bar , ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( ALIGN _ PARENT _ START ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( CENTER _ VERTICAL ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . addView ( title Sub Title Bar , ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( END _ OF , Ġleft Buttons Bar . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( START _ OF , Ġright Buttons Bar . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( CENTER _ VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Start Ġ= ĠUi Utils . dp To Px ( context , ĠDEFAULT _ LEFT _ M ARGIN ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . addView ( center Frame Layout , ĠLayout Params ( LayoutParams . MATCH _ PARENT , ĠLayout Params . MATCH _ PARENT )) ĊĠĠĠĠĠĠĠ Ġthis . addView ( right Buttons Bar , ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( ALIGN _ PARENT _ END ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( CENTER _ VERTICAL ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Component ( component : ĠView , Ġalignment : ĠAlignment Ġ= ĠAlignment . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog d (" set Component Ġwith Ġthis . component :$ ${ this . component ?. id Ġ?: Ġ- 9 9 9 }, Ġnew Component :${ component . id }, Ġalignment :${ alignment }") ĊĠĠĠĠĠĠĠ Ġif Ġ( this . component Ġ== Ġcomponent ) Ġreturn ĊĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠ Ġthis . component Ġ= Ġcomponent ĊĠĠĠĠĠĠĠ Ġif Ġ( alignment Ġ== ĠAlignment . Center ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . center Frame Layout . addView ( this . component , ĠFrame Layout . LayoutParams ( Frame Layout . LayoutParams . WRAP _ CONTENT , ĠFrame Layout . LayoutParams . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . gravity Ġ= ĠGr avity . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addView ( this . component , ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( END _ OF , Ġleft Buttons Bar . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( START _ OF , Ġright Buttons Bar . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( CENTER _ VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Start Ġ= ĠUi Utils . dp To Px ( context , ĠDEFAULT _ LEFT _ M ARGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetTitle ( title : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Component () ĊĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . setTitle ( title ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Subtitle ( title : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġclear Component () ĊĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . set Subtitle ( title ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetTitle Bar Alignment ( alignment : ĠAlignment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog d (" setTitle Bar Alignment Ġ$ alignment Ġon Ġ${ if Ġ( this . component Ġ== Ġnull ) Ġ" title Sub Title " Ġelse Ġ" component "} Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . layout Params Ġ= ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alignment Ġ!= ĠAlignment . Center ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( END _ OF , Ġleft Buttons Bar . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( START _ OF , Ġright Buttons Bar . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( CENTER _ VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Start Ġ= ĠUi Utils . dp To Px ( context , ĠDEFAULT _ LEFT _ M ARGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Start Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rule ( CENTER _ IN _ PARENT , ĠTRUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Layout Direction ( layout Direction : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . layout Direction Ġ= Ġlayout Direction ĊĠĠĠĠĠĠĠ Ġthis . right Buttons Bar . layout Direction Ġ= Ġlayout Direction ĊĠĠĠĠĠĠĠ Ġthis . left Buttons Bar . layout Direction Ġ= Ġlayout Direction ĊĠĠĠĠĠĠĠ Ġsuper . setLayout Direction ( layout Direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Sub Title Text Alignment ( alignment : ĠAlignment ) Ġ= Ġthis . title Sub Title Bar . set Sub Title Alignment ( alignment ) ĊĊĠĠĠ Ġfun ĠsetTitle Text Alignment ( alignment : ĠAlignment ) Ġ= Ġthis . title Sub Title Bar . setTitle Alignment ( alignment ) ĊĊĠĠĠ Ġfun Ġset BackgroundColor ( color : ĠColour ) Ġ= Ġif Ġ( color . hasValue ()) Ġset BackgroundColor ( color . get ()) Ġelse ĠUnit ĊĊĠĠĠ Ġfun ĠsetTitle FontSize ( size : ĠFloat ) Ġ= Ġthis . title Sub Title Bar . setTitle FontSize ( size ) ĊĊĠĠĠ Ġfun ĠsetTitle Type face ( type face Loader : ĠType face Loader , Ġfont : ĠFont Options ) Ġ= Ġthis . title Sub Title Bar . setTitle Type face ( type face Loader , Ġfont ) ĊĊĠĠĠ Ġfun Ġset Subtitle Type face ( type face Loader : ĠType face Loader , Ġfont : ĠFont Options ) Ġ= Ġthis . title Sub Title Bar . set Subtitle Type face ( type face Loader , Ġfont ) ĊĊĠĠĠ Ġfun Ġset Subtitle FontSize ( size : ĠFloat ) Ġ= Ġthis . title Sub Title Bar . set Subtitle FontSize ( size ) ĊĊĠĠĠ Ġfun Ġset Subtitle Color (@ Color Int Ġcolor : ĠInt ) Ġ= Ġthis . title Sub Title Bar . set Subtitle TextColor ( color ) ĊĊĠĠĠ Ġfun ĠsetTitle Color (@ Color Int Ġcolor : ĠInt ) Ġ= Ġthis . title Sub Title Bar . setTitle TextColor ( color ) ĊĊĠĠĠ Ġfun Ġget Title (): ĠString Ġ= Ġthis . title Sub Title Bar . getTitle () ĊĊĠĠĠ Ġfun Ġset Height ( height : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpixel Height Ġ= ĠUi Utils . dp To Px ( context , Ġheight ) ĊĠĠĠĠĠĠĠ Ġif Ġ( this . layout Params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pixel Height Ġ== Ġlayout Params . height ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlp . height Ġ= Ġpixel Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Main ToolBar . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . layout Params Ġ= ĠMargin LayoutParams ( LayoutParams . WRAP _ CONTENT , Ġpixel Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Top Margin ( top Margin : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpixel Top Margin Ġ= ĠUi Utils . dp To Px ( context , Ġtop Margin ) ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Params Ġis ĠMargin LayoutParams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlp Ġ= Ġlayout Params Ġas ĠMargin LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lp . top Margin Ġ== Ġpixel Top Margin ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top Margin Ġ= Ġpixel Top Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Main ToolBar . layout Params Ġ= Ġlp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . child Count Ġ> Ġ 0 Ġ&& Ġthis . component Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . title Sub Title Bar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclear Component () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġclear Component () Ġ= Ġthis . component ?. let Ġ{ ĠView Utils . remove From Parent ( it ); Ġthis . component Ġ= Ġnull ; Ġ} ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . TESTS , ĠRe strict To . Scope . LIBRARY ) ĊĠĠĠ Ġfun Ġget Title Component () Ġ= Ġthis . component Ġ?: Ġthis . title Sub Title Bar ĊĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . TESTS ) ĊĠĠĠ Ġfun Ġget Component () Ġ= Ġthis . component ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . TESTS ) ĊĠĠĠ Ġfun Ġget Title Subtitle Bar () Ġ= Ġthis . title Sub Title Bar Ċ Ċ }