package Ġcom . bas ick otlin . new user Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bas ick otlin . R Ċ import Ġcom . bas ick otlin . views . Rounded Bottom Sheet Dialog Ċ import Ġcom . e . custom bottom sheet . Callbacks Ċ import Ġcom . e . custom bottom sheet . Custom Bottom Sheet Ċ import Ġcom . google . android . material . text field . TextInput EditText Ċ Ċ class ĠNew User Activity Ġ: ĠAppCompatActivity (), ĠF lower Adapter . Callback , ĠCallback s Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġis Selected : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġdata selected : ĠData Model ĊĠĠĠ Ġlateinit Ġvar Ġre cy _ user : ĠRecyclerView ĊĠĠĠ Ġlateinit Ġvar Ġre cy _ adapter : ĠF lower Adapter ĊĠĠĠ Ġval Ġf lower List Ġ= ĠArrayList < DataModel >() ĊĊĠĠĠ Ġlateinit Ġvar Ġlin _ suggest ed _ user : ĠLinearLayout ĊĠĠĠ Ġlateinit Ġvar Ġlin _ suggest ed _ user _ error : ĠLinearLayout ĊĠĠĠ Ġlateinit Ġvar Ġet _ user _ name : ĠText Input EditText ĊĠĠĠ Ġlateinit Ġvar Ġtxt _ already _ taken _ error : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġlin _ parent : ĠScroll View ĊĊĠĠĠ Ġprivate Ġval Ġreg One Letter Ġ= Ġ" .* [ a - zA - Z ]+ .* "; ĊĠĠĠ Ġprivate Ġval Ġreg One No Ġ= Ġ" .* \\ d .* " ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ new _ user ) ĊĊĠĠĠĠĠĠĠ Ġlin _ parent Ġ= ĠfindViewById ( R . id . lin _ parent ) ĊĠĠĠĠĠĠĠ Ġtxt _ already _ taken _ error Ġ= ĠfindViewById ( R . id . txt _ already _ taken _ error ) ĊĠĠĠĠĠĠĠ Ġet _ user _ name Ġ= ĠfindViewById ( R . id . et _ user _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġtxt _ user _ guide line : ĠTextView Ġ= ĠfindViewById ( R . id . txt _ user _ guide line ) ĊĠĠĠĠĠĠĠ Ġtxt _ user _ guide line . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġet _ user _ name . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Change () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck User () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Change () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck User () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user _ error Ġ= ĠfindViewById ( R . id . lin _ suggest ed _ user _ error ) ĊĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user Ġ= ĠfindViewById ( R . id . lin _ suggest ed _ user ) ĊĊĠĠĠĠĠĠĠ Ġre cy _ user Ġ= ĠfindViewById ( R . id . re cy _ user ) ĊĊĠĠĠĠĠĠĠ Ġre cy _ user . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġre cy _ user . setLayout Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayoutManager . HORIZONTAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġre cy _ user . setItem Animator ( Default Item Animator ()) ĊĠĠĠĠĠĠĠ Ġre cy _ adapter Ġ= ĠF lower Adapter ( this , Ġf lower List , Ġthis ) ĊĠĠĠĠĠĠĠ Ġre cy _ user . adapter Ġ= Ġre cy _ adapter ĊĊĠĠĠĠĠĠĠ Ġval Ġimg _ submit : ĠImageView Ġ= ĠfindViewById ( R . id . img _ submit ) ĊĠĠĠĠĠĠĠ Ġimg _ submit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck User () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtxt _ password : ĠTextView Ġ= ĠfindViewById ( R . id . txt _ password ) ĊĠĠĠĠĠĠĠ Ġtxt _ password . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠNew Pass Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" USER ID ", Ġet _ user _ name . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Key Board Open ( lin _ parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck User () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check User id (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ already _ taken _ error . text Ġ= Ġcheck User id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ already _ taken _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( et _ user _ name . text ?. trim (). toString (). equals (" abc 1 2 3 ", Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf lower List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf lower List . addAll ( Datasource ( this ). get Flow er List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cy _ adapter . update Data ( flower List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ already _ taken _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( et _ user _ name . text ?. trim (). toString (). equals (" xyz 1 2 3 ", Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf lower List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf lower List . addAll ( Datasource ( this ). get Company List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cy _ adapter . update Data ( flower List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ already _ taken _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ already _ taken _ error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected Ġ&& Ġ! et _ user _ name . text . toString (). equals ( data selected . name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated list Ġ= Ġre cy _ adapter . getName List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġupdated list . indexOf ( data selected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata selected . selection Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdated list [ pos ] Ġ= Ġdata selected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cy _ adapter . notify Item Changed ( pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclicked ( data : ĠData Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . clicked ( data ) ĊĠĠĠĠĠĠĠ Ġet _ user _ name . setText ( data . name ) ĊĠĠĠĠĠĠĠ Ġet _ user _ name . setSelection ( et _ user _ name . text ?. trim (). toString (). length ) ĊĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdata selected Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Key Board Open ( view Group : ĠViewGroup ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġview Group ?. view Tree Observer ?. add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Group . getWindow Visible Display Frame ( rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Height Ġ= Ġview Group . root View . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey pad Height Ġ= Ġscreen Height Ġ- Ġrect . bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key pad Height Ġ> Ġscreen Height Ġ* Ġ 0 . 1 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ suggest ed _ user _ error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcheck User id (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuserid Ġ= Ġet _ user _ name . text . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( userid . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Enter Ġa Ġuser Ġid " ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( userid . length Ġ< Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . char _ count _ user ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! userid . matches ( reg One Letter . to Regex ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . alphabet ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! userid . matches ( reg One No . to Regex ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . num ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġbottom Sheet () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . util . ArrayList () ĊĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . char _ count _ user )) ĊĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . no _ space )) ĊĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . composition _ user )) ĊĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . no _ ss n )) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbottom sheet Ġ= ĠCustom Bottom Sheet ( this @ New User Activity ) ĊĠĠĠĠĠĠĠ Ġbottom sheet . set Callbacks ( this @ New User Activity ) ĊĠĠĠĠĠĠĠ Ġbottom sheet . title (" USERNAME ") ĊĠĠĠĠĠĠĠ Ġbottom sheet . subtitle (" Profile ") ĊĠĠĠĠĠĠĠ Ġbottom sheet . content ( list ) ĊĠĠĠĠĠĠĠ Ġbottom sheet . show () Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġm Bottom Sheet Dialog Ġ= ĠRo unded Bottom Sheet Dialog ( this ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġsheet View Ġ= Ġlayout Inflater . inflate ( R . layout . dialog _ pass _ guidelines , Ġnull ) Ċ // ĠĠĠĠĠĠĠ Ġm Bottom Sheet Dialog . set ContentView ( sheet View ) Ċ // ĠĠĠĠĠĠĠ Ġcreate UserGuide Line ( sheet View ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġbtn _ close : ĠButton Ġ= Ġsheet View . findViewById ( R . id . btn _ close ) Ċ // ĠĠĠĠĠĠĠ Ġbtn _ close . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Bottom Sheet Dialog . dismiss () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġm Bottom Sheet Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose Clicked () Ġ{ ĊĊĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠ Ġprivate Ġfun Ġcreate UserGuide Line ( sheet View : ĠView ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġlin _ pass _ guidelines : ĠLinearLayout Ġ= Ġsheet View . findViewById ( R . id . lin _ pass _ guidelines ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < String > Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġjava . util . ArrayList () Ċ // ĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . char _ count _ user )) Ċ // ĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . no _ space )) Ċ // ĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . composition _ user )) Ċ // ĠĠĠĠĠĠĠ Ġlist . add ( getString ( R . string . no _ ss n )) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlist . indices ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow View : ĠView Ġ= Ġinflater . inflate ( R . layout . item _ pass _ guide line , Ġnull ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġorder Ġto Ġget Ġthe Ġview Ġwe Ġhave Ġto Ġuse Ġthe Ġnew Ġview Ġwith Ġtext _ layout Ġin Ġit Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView : ĠTextView Ġ= Ġrow View . findViewById ( R . id . text ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġlist [ i ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġnew Ġrow Ġbefore Ġthe Ġadd Ġfield Ġbutton . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlin _ pass _ guidelines . addView ( row View , Ġi ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ }