package Ġcom . not ade veloper . app . black board . ui . adapters Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . content . Context Compat . startActivity Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget .* Ċ import Ġcom . not ade veloper . app . black board . R Ċ import Ġcom . not ade veloper . app . black board . models . Fac ulty Ċ import Ġcom . not ade veloper . app . black board . util . Ret rofit Interface Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . dialog _ schedule .* Ċ import Ġjava . util . jar . Manifest Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġk rs nv Ġon Ġ 1 0 / 1 1 / 2 0 1 7 . Ċ Ġ*/ ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġk rs nv Ġon Ġ 1 0 / 1 0 / 2 0 1 7 . Ċ Ġ*/ Ċ class Ġfac ulty list _ adapter ( ĊĠĠĠ Ġprivate Ġval Ġlist : ĠList < Fac ulty >) Ġ: ĠRecyclerView . Adapter < fac ulty list _ adapter . view holder >() Ġ{ ĊĠ Ġvar Ġm Filter edList : ĠList < Fac ulty > ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġm Filter edList Ġ= Ġlist ĊĠ Ġ} ĊĊĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): Ġview holder Ġ{ ĊĠĠĠ Ġcontext Ġ= Ġparent . context ĊĠĠĠ Ġm Filter edList Ġ= Ġlist ĊĠĠĠ Ġval ĠitemView Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . list _ item , Ġparent , Ġfalse ) ĊĊĠĠĠ Ġreturn Ġview holder ( item View ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : Ġview holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġfac ulty Ġ= Ġm Filter edList . get ( position ) ĊĠĠĠ Ġholder . tv 1 . text Ġ= Ġfac ulty . name Ġ+ Ġ" ("+ Ġfac ulty . dept +") " ĊĠĠĠ Ġholder . tv 2 . text Ġ= Ġfac ulty . phone ĊĠĠĠ Ġholder . container _ fac ulty . setOnClickListener Ġ{ ĊĠĠĠĠĠ Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠ Ġval Ġapi Service Ġ= ĠRet rofit Interface . create () ĊĠĠĠĠĠ Ġcomposite Disposable . add ( ĊĠĠĠĠĠĠĠĠĠ Ġapi Service . get Fac ulty Schedule ( fac ulty . fac ulty Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" eg ", Ġresult . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . dialog _ schedule , null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setView ( in flater ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Schedule Ġof Ġ"+ fac ulty . name ) Ċ // Ġ 3 . ĠGet Ġthe ĠAlertDialog Ġfrom Ġcreate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . call . text Ġ= Ġ" CALL Ġ"+ fac ulty . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . call . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi : ĠIntent Ġ= ĠIntent ( Intent . ACTION _ CALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : Bundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . setData ( Uri . parse (" tel :"+ fac ulty . phone )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Activity Compat . check Self Permission ( holder . tv 1 . context , Ġandroid . Manifest . permission . CALL _ PHONE )!= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ GRAN TED ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( holder . tv 1 . context ," Please Ġgrant Ġthe Ġrequired Ġpermission !", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( holder . tv 1 . context Ġas ĠActivity , ĠarrayOf ( android . Manifest . permission . CALL _ PHONE ), 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( holder . tv 1 . context , i , b ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexp Lv : ĠExpand able ListView Ġ= Ġdialog . findViewById ( R . id . ex pl v _ dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmon day list Ġ= ĠArray < String >( 8 , Ġ{ Ġ" Free ĠPeriod " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt uesday list Ġ= ĠArray < String >( 8 , Ġ{ Ġ" Free ĠPeriod " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw ed nesday list Ġ= ĠArray < String >( 8 , Ġ{ Ġ" Free ĠPeriod " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġth ursday list Ġ= ĠArray < String >( 8 , Ġ{ Ġ" Free ĠPeriod " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf riday list Ġ= ĠArray < String >( 8 , Ġ{ Ġ" Free ĠPeriod " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday 1 Ġ= Ġitem . day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day 1 . equals (" Monday ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmon day list [( item . hour ). toInt () Ġ- Ġ 1 ] Ġ= Ġitem . class Id Ġ+ Ġ"," Ġ+ Ġitem . subj Code Ġ+ Ġ"," Ġ+ Ġitem . class Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( day 1 . equals (" Tuesday ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt uesday list [( item . hour ). toInt () Ġ- Ġ 1 ] Ġ= Ġitem . class Id Ġ+ Ġ"," Ġ+ Ġitem . subj Code Ġ+ Ġ"," Ġ+ Ġitem . class Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( day 1 . equals (" Wednesday ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ed nesday list [( item . hour ). toInt () Ġ- Ġ 1 ] Ġ= Ġitem . class Id Ġ+ Ġ"," Ġ+ Ġitem . subj Code Ġ+ Ġ"," Ġ+ Ġitem . class Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( day 1 . equals (" Thursday ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġth ursday list [( item . hour ). toInt () Ġ- Ġ 1 ] Ġ= Ġitem . class Id Ġ+ Ġ"," Ġ+ Ġitem . subj Code Ġ+ Ġ"," Ġ+ Ġitem . class Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( day 1 . equals (" Friday ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf riday list [( item . hour ). toInt () Ġ- Ġ 1 ] Ġ= Ġitem . class Id Ġ+ Ġ"," Ġ+ Ġitem . subj Code Ġ+ Ġ"," Ġ+ Ġitem . class Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Data Header Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Data Child Ġ= ĠHashMap < String , ĠList < String >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mon day list . isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Child . put (" Monday ", Ġmon day list . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Header . add (" Monday ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t uesday list . isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Child . put (" Tuesday ", Ġt uesday list . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Header . add (" Tuesday ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wed nesday list . isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Child . put (" Wednesday ", Ġw ed nesday list . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Header . add (" Wednesday ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( th ursday list . isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Child . put (" Thursday ", Ġth ursday list . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Header . add (" Thursday ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f riday list . isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Child . put (" Friday ", Ġf riday list . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Data Header . add (" Friday ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Data Header . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" No ĠData ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" eg ", Ġlist Data Header . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" dh g ", Ġlist Data Child . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Adapter Ġ= ĠExpand able ListAdapter ( context , Ġlist Data Header , Ġlist Data Child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexp Lv . setAdapter ( list Adapter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" No ĠData ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĊĠ Ġ} ĊĠĠĠ Ġpublic Ġfun Ġrequest _ permissions () ĊĠĠĠ Ġ{} ĊĊĊĊĠ Ġclass Ġview holder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠ Ġval Ġtv 1 : ĠTextView ĊĠĠĠ Ġval Ġtv 2 : ĠTextView ĊĠĠĠ Ġval Ġcontainer _ fac ulty : ĠRelative Layout ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġtv 1 Ġ= ĠitemView . findViewById ( R . id . text 1 ) ĊĠĠĠĠĠ Ġtv 2 Ġ= ĠitemView . findViewById ( R . id . text 2 ) ĊĠĠĠĠĠĠĠ Ġcontainer _ fac ulty Ġ= ĠitemView . findViewById ( R . id . container _ respons ibility ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġm Filter edList . size ĊĠ Ġfun Ġget Filter ( dept : ĠString ): ĠFilter Ġ{ ĊĊĠĠĠ Ġreturn Ġobject Ġ: ĠFilter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġperform Filtering ( char Sequence : ĠCharSequence ): ĠFilter Results Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġchar String Ġ= Ġchar Sequence . toString () ĊĊĊĠĠĠĠĠĠĠ Ġval Ġfilter edList Ġ= ĠArrayList < Fac ulty >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( fac ulty Ġin Ġlist ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( fac ulty . name . toLowerCase (). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar String . toLowerCase ()) Ġ&& Ġfac ulty . dept Ġ== Ġdept ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter edList . add ( fac ulty ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Filter edList Ġ= Ġfilter edList ĊĊĊĠĠĠĠĠĠĠ Ġval Ġfilter Results Ġ= ĠFilter Results () ĊĠĠĠĠĠĠĠ Ġfilter Results . values Ġ= Ġm Filter edList ĊĠĠĠĠĠĠĠ Ġreturn Ġfilter Results ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġpublish Results ( char Sequence : ĠCharSequence , Ġfilter Results : ĠFilter Results ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Filter edList Ġ= Ġfilter Results . values Ġas ĠList < Fac ulty > ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊ Ċ }