package Ġch . r my . android . http _ shortcuts . views Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . LinearLayout Compat Ċ import Ġch . r my . android . http _ shortcuts . R Ċ import Ġch . r my . android . http _ shortcuts . extensions . set ContentView Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġk ot ter knife . bind View Ċ Ċ class ĠLabel led Spinner Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 , Ċ ) Ġ: ĊĠĠĠ ĠLinearLayout Compat ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlabel : ĠTextView Ġby Ġbind View ( R . id . label ) ĊĠĠĠ Ġprivate Ġval Ġspinner : ĠSp inner Ġby Ġbind View ( R . id . spinner ) ĊĊĠĠĠ Ġprivate Ġval Ġselection Change Subject Ġ= ĠPublish Subject . create < String >() ĊĊĠĠĠ Ġval Ġselection Changes : ĠObservable < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġselection Change Subject ĊĊĠĠĠ Ġvar Ġitems : ĠList < Item > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . adapter Ġ= ĠArray Adapter ( context , Ġandroid . R . layout . simple _ spinner _ dropdown _ item , Ġvalue . map Ġ{ Ġit . value Ġ?: Ġit . key Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Items From Pairs ( items : ĠList < Pair < String , ĠString >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . items Ġ= Ġitems . map Ġ{ Ġ( key , Ġvalue ) Ġ-> ĠItem ( key , Ġvalue ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠV ERT ICAL ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . labelled _ spinner ) ĊĠĠĠĠĠĠĠ Ġspinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( p 0 : ĠAdapter View < *> ?, Ġp 1 : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Ġ= Ġitems [ position ]. key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( p 0 : ĠAdapter View < *> ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa : ĠTyped Array ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Re cycle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠATTRIBUT E _ IDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . text Ġ= Ġa . getText ( ATTRIBUTE _ IDS . indexOf ( android . R . attr . text )) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ?. recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġselected Item : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. indexOf First Ġ{ Ġit . key Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Unless Ġ{ Ġit Ġ== Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspinner . setSelection ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( before Ġ!= Ġvalue Ġ&& Ġbefore . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Change Subject . onNext ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠItem ( val Ġkey : ĠString , Ġval Ġvalue : ĠString ? Ġ= Ġnull ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠATTRIBUT E _ IDS Ġ= Ġint ArrayOf ( android . R . attr . text ) ĊĊĠĠĠ Ġ} Ċ Ċ }