package Ġcom . os k ho j . swing planner . ui . component Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Accel erate De cel erate Interpolator Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . AppCompat ImageView Ċ import Ġandroidx . core . content . Context Compat . startActivity Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . youtube . player . YouTube Intent s Ċ import Ġcom . os k ho j . swing planner . App Preferences Ċ import Ġcom . os k ho j . swing planner . R Ċ import Ġcom . os k ho j . swing planner . firebase . analytics . ANAL YT ICS _ TE AC HER _ LIKE _ CLICK Ċ import Ġcom . os k ho j . swing planner . firebase . analytics . ANAL YT ICS _ TE AC HER _ Y OUT UBE _ CLICK Ċ import Ġcom . os k ho j . swing planner . firebase . analytics . Analytics Helper Ċ import Ġcom . os k ho j . swing planner . firebase . analytics . PROPERTY _ CAN _ HANDLE _ Y OUT UBE _ INT ENT Ċ import Ġcom . os k ho j . swing planner . firebase . analytics . PROPERTY _ IS _ LIK ED Ċ import Ġcom . os k ho j . swing planner . firebase . analytics . PROPERTY _ NAME Ċ import Ġcom . os k ho j . swing planner . model . Event Summary Ċ import Ġcom . os k ho j . swing planner . model . Teacher Ċ import Ġcom . os k ho j . swing planner . model . Teacher Events Response Ċ import Ġcom . os k ho j . swing planner . util . Teacher Expanded Listener Ċ import Ġcom . os k ho j . swing planner . util . ViewHolder List Ċ import Ġcom . os k ho j . swing planner . util . animate To G one Ċ import Ġcom . os k ho j . swing planner . util . getLong Ċ import Ġcom . os k ho j . swing planner . util . g one Ċ import Ġcom . os k ho j . swing planner . util . inflate View Ċ import Ġcom . os k ho j . swing planner . util . restore Size Ċ import Ġcom . os k ho j . swing planner . util . start Animation Ċ import Ġcom . os k ho j . swing planner . util . visible Ċ import Ġcom . os k ho j . swing planner . util . visible If Ċ import Ġkotlinx . android . synt hetic . main . teacher _ row . view .* Ċ import Ġnet . c ach apa . expand able layout . Expand able Layout Ċ import Ġorg . jetbrains . ank o . design . sn ackbar Ċ import Ġtim ber . log . Tim ber Ċ Ċ // ĠTODO : ĠAdd Ġa Ġpresenter Ġthat Ġhandles Ġexpand Ġevents Ġand Ġloading Ġ/ Ġdisplaying Ġnew Ġevents Ġfrom Ġthe Ġlist Ċ class ĠTe acher Adapter ( var Ġte achers : ĠList < Teacher >, Ġprivate Ġval ĠviewHolder List : ĠViewHolder List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Teacher Click : Ġ( Int ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Event Click : Ġ( Event Summary ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Favorite Click : Ġ( Int , ĠBoolean ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġexpanded Listener : ĠTe acher Expanded Listener ) Ġ: ĠRecyclerView . Adapter < Teacher Adapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġno ItemSelected Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġvar Ġselected Item Ġ= Ġno ItemSelected ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĠViewHolder ( parent . inflate View ( R . layout . teacher _ row )) ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ= Ġholder . bind ( te achers [ position ], Ġon Teacher Click ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġte achers . size ĊĊĠĠĠ Ġ// ĠTODO : ĠDiff util Ġthis Ġin Ġa Ġbetter Ġway ĊĠĠĠ Ġfun Ġload Te achers ( new Te achers : ĠList < Teacher >) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Loading Ġnew Ġte achers Ġwith Ġsize Ġ${ new Te achers . size }") ĊĠĠĠĠĠĠĠ Ġclose Expanded Row () ĊĠĠĠĠĠĠĠ Ġte achers Ġ= Ġnew Te achers . sorted () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Teacher Events ( teacher Events Response : ĠTe acher Events Response ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewHolder List . find ViewHolder For Position ( selected Item )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Events ( teacher Events Response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose Expanded Row () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewHolder List . find ViewHolder For Position ( selected Item )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Name View . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpand able Layout . collapse () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġselected Item Ġ= Ġno ItemSelected ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ), ĠView . OnClickListener , ĠExpand able Layout . On Expansion Update Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfavorite Image : ĠAppCompat ImageView Ġ= ĠitemView . favorite _ icon ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġarrow Image : ĠAppCompat ImageView Ġ= ĠitemView . arrow _ icon ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfavorite Button : ĠAppCompat ImageView Ġ= ĠitemView . teacher _ favorite _ button ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġyou Tube Button : ĠAppCompat ImageView Ġ= ĠitemView . teacher _ youtube _ button ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġteacher Header : ĠLinearLayout Ġ= ĠitemView . teacher _ item _ header ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠprogressBar : ĠProgress Bar Ġ= ĠitemView . teacher _ events _ progressbar ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġteacher Events : ĠRecyclerView Ġ= ĠitemView . teacher _ events _ recycler ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġteacher : ĠTe acher ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġteacher Events Adapter : ĠEvent Adapter Ġ= ĠEvent Adapter ( emptyList ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Clicked Ġon Ġevent Ġwith Ġid Ġ${ it . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Event Click ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġteacher Name View : ĠTextView Ġ= ĠitemView . teacher _ name ĊĠĠĠĠĠĠĠ Ġval Ġexpand able Layout : ĠExpand able Layout Ġ= ĠitemView . expanded _ teacher _ layout ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( teacher : ĠTe acher , Ġlistener : Ġ( Int ) Ġ-> ĠUnit ) Ġ= Ġwith ( item View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ ViewHolder . teacher Ġ= Ġteacher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteacher _ name . text Ġ= Ġteacher . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Header . setOnClickListener ( this @ ViewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpand able Layout . set Interpolator ( Accel erate De cel erate Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpand able Layout . setOn Expansion Update Listener ( this @ ViewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Image . visible If Ġ{ ĠApp Preferences . has Favorite Teacher ( teacher . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Now Favorite Ġ= ĠApp Preferences . toggle Favorite Teacher ( teacher . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Favorite Click ( teacher . id , Ġis Now Favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Helper . log Event ( ANAL YT ICS _ TE AC HER _ LIKE _ CLICK , ĠPROPERTY _ IS _ LIK ED Ġto Ġis Now Favorite , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPROPERTY _ NAME Ġto Ġteacher . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Now Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Image . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore Size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Animation ( R . anim . heartbeat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Image . animate To G one ( getLong ( R . integer . anim _ duration _ medium )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyou Tube Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Helper . log Event ( ANAL YT ICS _ TE AC HER _ Y OUT UBE _ CLICK , ĠPROPERTY _ CAN _ HANDLE _ Y OUT UBE _ INT ENT Ġto ĠYouTube Intent s . can Resolve Search Intent ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPROPERTY _ NAME Ġto Ġteacher . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( YouTube Intent s . can Resolve Search Intent ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Redirect ing Ġto ĠYouTube Ġfor Ġ[ ${ teacher . name }] ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( context , ĠYouTube Intent s . create Search Intent ( context , Ġteacher . name ), ĠBundle . EMPTY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" YouTube Ġnot Ġinstalled Ġon Ġdevice ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar ( context . getString ( R . string . youtube _ not _ available )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Events . adapter Ġ= Ġteacher Events Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder List . find ViewHolder For Position ( selected Item )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Name View . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand able Layout . collapse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Position Ġ== Ġselected Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno ItemSelected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Teacher Adapter . on Teacher Click ( teacher . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Name View . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand able Layout . expand () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpanded Listener . on Teacher Expanded ( you Tube Button , Ġfavorite Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdisplay Events ( teacher Events Response : ĠTe acher Events Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Events Adapter . load Events ( teacher Events Response . events ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . g one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteacher Events . visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Expansion Update ( expansion Fraction : ĠFloat , Ġstate : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExpand able Layout . State . COLL AP SED Ġ-> Ġarrow Image . setImage Resource ( R . drawable . ic _ keyboard _ arrow _ down _ black _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExpand able Layout . State . EXP AN DED Ġ-> Ġarrow Image . setImage Resource ( R . drawable . ic _ keyboard _ arrow _ up _ black _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }