package Ġkr . os am . admin . ui . signin Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior . Bottom Sheet Callback Ċ import Ġkr . os am . admin . R Ċ import Ġkr . os am . admin . data . Unit Item Ċ import Ġkr . os am . admin . ui . k orean indexer . K orean Indexer RecyclerView Ċ import Ġkr . os am . admin . ui . main . MainActivity Ċ import Ġkr . os am . admin . ui . signin . adapter . Unit Bottom Sheet Adapter Ċ import Ġkr . os am . admin . ui . signin . presenter . SignIn Contract Ċ import Ġkr . os am . admin . ui . signin . presenter . SignIn Presenter Ċ import Ġkr . os am . admin . util . Injection Ċ import Ġkr . os am . core . activity . Activity Base Ċ import Ġkr . os am . core . toast . Toast Util Ċ Ċ class ĠSign In Activity Ġ: ĠActivity Base (), ĠSign In Contract . View Ġ{ ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġpresenter : ĠSign In Contract . Presenter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġregister Button : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġunit Bottom Sheet Adapter : ĠUnit Bottom Sheet Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbottom Sheet Card View : ĠLinearLayout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtitle TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput EditText : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġk orean Indexer RecyclerView : ĠK orean Indexer RecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView Title TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġunit Bottom Sheet Behavior : ĠUnit Bottom Sheet Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbehavior : ĠBottom Sheet Behavior < LinearLayout > ĊĠĠĠ Ġprivate Ġvar Ġis Section Use : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġunit List : ĠArrayList < Unit Item > Ġ= Ġarray ListOf () ĊĠĠĠ Ġprivate Ġvar Ġsearch Unit List : ĠArrayList < Unit Item > Ġ= Ġarray ListOf () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġunit Select TextView : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġselect Unit : ĠUnit Item ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ sign _ in ) ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ ĠSign In Presenter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInjection . provide Unit Repository ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInjection . provide Scheduler Provider () ĊĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Bottom Sheet () ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġunit Select TextView Ġ= ĠfindViewById ( R . id . unit _ select _ text _ view ) ĊĠĠĠĠĠĠĠ Ġregister Button Ġ= ĠfindViewById ( R . id . register _ button ) ĊĠĠĠĠĠĠĠ Ġbottom Sheet Card View Ġ= ĠfindViewById ( R . id . unit _ card _ view ) ĊĠĠĠĠĠĠĠ Ġtitle TextView Ġ= ĠfindViewById ( R . id . title ) ĊĠĠĠĠĠĠĠ Ġinput EditText Ġ= ĠfindViewById ( R . id . search _ edit _ text ) ĊĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView Ġ= ĠfindViewById ( R . id . bottom _ sheet _ recycler _ view ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Title TextView Ġ= ĠfindViewById ( R . id . recycler _ view _ title _ text _ view ) ĊĠĠĠĠĠĠĠ Ġtitle TextView . text Ġ= Ġ" ë¶Ģ ëĮĢ ìĦł íĥĿ " ĊĠĠĠĠĠĠĠ Ġinput EditText . hint Ġ= Ġ" ë¶Ģ ëĮĢ ëªħ ìĿĦ Ġìŀħëł¥ íķ´ ì£¼ ìĦ¸ìļĶ ." ĊĠĠĠĠĠĠĠ Ġre cyclerView Title TextView . hint Ġ= Ġ" ë¶Ģ ëĮĢ ëªħ " ĊĠĠĠĠĠĠĠ Ġunit Select TextView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbehavior . state Ġ= ĠBottom Sheet Behavior . STATE _ EXP AN DED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinput EditText . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs : ĠCharSequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ= ĠUnit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate RecyclerView Item () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġregister Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( select Unit Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . getInstance (). make Short (" ë¶Ģ ëĮĢ ë¥¼ ĠìĦłíĥĿ íķ´ ì£¼ ìĦ¸ìļĶ .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Unit ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . register Unit ( unit Name , Ġunit Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġpresenter . subscribe () ĊĠĠĠĠĠĠĠ Ġbehavior . state Ġ= ĠBottom Sheet Behavior . STATE _ HIDDEN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgo To Main () Ġ{ ĊĠĠĠĠĠĠ ĠIntent ( this , ĠMainActivity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Progress Dialog ( R . string . loading ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Progress Dialog () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Unit Item ( unit List : ĠList < Unit Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . unit List . clear () ĊĠĠĠĠĠĠĠ Ġthis . unit List . addAll ( unit List ) ĊĠĠĠĠĠĠĠ Ġupdate RecyclerView Item () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Message ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast Util . getInstance (). make Short ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast Util . getInstance (). make Short ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Bottom Sheet () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= Ġ( getWindow Height () Ġ* ĠBOTTOM _ SHE ET _ SIZE _ SHOW _ PERCENT ). toInt () ĊĠĠĠĠĠĠĠ Ġbehavior Ġ= ĠBottom Sheet Behavior . from ( bottom Sheet Card View ) ĊĠĠĠĠĠĠĠ Ġbehavior . peek Height Ġ= ĠmaxHeight ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġbottom Sheet Card View . layout Params ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġget Bottom Sheet Dialog Default Height (). toInt () ĊĠĠĠĠĠĠĠ Ġbottom Sheet Card View . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġbehavior . add Bottom Sheet Callback ( object Ġ: ĠBottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ HIDDEN , ĠBottom Sheet Behavior . STATE _ EXP AN DED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . STATE _ COLL AP SED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslide Offset : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġunit Bottom Sheet Adapter Ġ= ĠUnit Bottom Sheet Adapter ( search Unit List , Ġthis ) ĊĠĠĠĠĠĠĠ Ġunit Bottom Sheet Behavior Ġ= ĠUnit Bottom Sheet Adapter ( unit List , Ġthis ) ĊĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . set Keyword List ( convert Unit List To Key List ( unit List )) ĊĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . layout Manager Ġ= ĠGrid LayoutManager ( this , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . setOn ItemClickListener Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġ 0 ) Ġreturn @ run ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunit Select TextView . text Ġ= Ġsearch Unit List [ i ]. unit Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Unit Ġ= Ġsearch Unit List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbehavior . state Ġ= ĠBottom Sheet Behavior . STATE _ HIDDEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . adapter Ġ= Ġunit Bottom Sheet Adapter ĊĠĠĠĠĠĠĠ Ġupdate Section () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate RecyclerView Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsearch Text : ĠString Ġ= Ġinput EditText . text . toString () ĊĠĠĠĠĠĠĠ Ġsearch Unit List . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( search Text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Unit List . addAll ( unit List ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġunit List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unit List [ i ]. unit Name . contains ( search Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Unit List . add ( unit List [ i ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġunit Bottom Sheet Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġupdate Section () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Section Use ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input EditText . text . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . set Use Section ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . set Keyword List ( convert Unit List To Key List ( unit List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . set Use Section ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk orean Indexer RecyclerView . set Use Section ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bottom Sheet Dialog Default Height (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Window Height () Ġ* ĠBOTTOM _ SHE ET _ SIZE _ EXP ENDED _ PERCENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Window Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Metrics ( display Metrics ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdisplay Metrics . height Pixels ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Unit List To Key List ( unit List : ĠList < Unit Item >): ĠArrayList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( unit Ġin Ġunit List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( unit . unit Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . unsubscribe () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBOTTOM _ SHE ET _ SIZE _ SHOW _ PERCENT Ġ= Ġ 0 . 6 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBOTTOM _ SHE ET _ SIZE _ EXP ENDED _ PERCENT Ġ= Ġ 0 . 9 ĊĠĠĠ Ġ} Ċ } Ċ