package Ġcom . pe ch uro . bs uir schedule . feature . navigation Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġcom . bs uir . pe ch uro . bs uir schedule . R Ċ import Ġcom . pe ch uro . bs uir schedule . common . base . Base ViewHolder Ċ import Ġcom . pe ch uro . bs uir schedule . domain . entity . Schedule Ċ import Ġcom . pe ch uro . bs uir schedule . ext . set Safe ClickListener Ċ import Ġcom . pe ch uro . bs uir schedule . feature . navigation . Navigation Sheet Item Information .* Ċ import Ġcom . pe ch uro . bs uir schedule . feature . navigation . Navigation Sheet Item Information . Content . Update State .* Ċ import Ġkotlinx . android . synt hetic . main . item _ navigation _ sheet _ content .* Ċ import Ġkotlinx . android . synt hetic . main . item _ navigation _ sheet _ empty .* Ċ import Ġkotlinx . android . synt hetic . main . item _ navigation _ sheet _ hint .* Ċ Ċ private Ġval ĠDIFF _ CALLBACK Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Navigation Sheet Item Information >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠNavigation Sheet Item Information , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠNavigation Sheet Item Information ĊĠĠĠ Ġ) Ġ= Ġold Item Ġ== Ġnew Item ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠNavigation Sheet Item Information , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠNavigation Sheet Item Information ĊĠĠĠ Ġ) Ġ= Ġold Item Ġ== Ġnew Item Ċ } Ċ Ċ class ĠNavigation Drawer Adapter Ġ: ĠList Adapter < Navigation Sheet Item Information , ĠBase ViewHolder < Navigation Sheet Item Information >>( DIFF _ CALLBACK ) Ġ{ ĊĊĠĠĠ Ġinterface ĠAction Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Schedule Clicked ( schedule : ĠSchedule ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Hint Dis missed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEMPTY _ VIEW _ DISPLAY _ DELAY _ MS Ġ= Ġ 1 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġaction Callback : ĠAction Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġschedule ClickListener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġschedule Ġ= Ġit . tag Ġas ? ĠSchedule Ġ?: Ġreturn @ OnClickListener ĊĠĠĠĠĠĠĠ Ġaction Callback ?. on Schedule Clicked ( schedule ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder < Navigation Sheet Item Information > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Sheet Item Information . ID _ DI VIDER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . item _ navigation _ sheet _ divider , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Sheet Item Information . ID _ TITLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . item _ navigation _ sheet _ title , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTitle ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Sheet Item Information . ID _ CONTENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . item _ navigation _ sheet _ content , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Sheet Item Information . ID _ EMPTY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . item _ navigation _ sheet _ empty , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Sheet Item Information . ID _ HINT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . item _ navigation _ sheet _ hint , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHint ViewHolder ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Not Ġsupported Ġtype : Ġ$ view Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= ĠgetItem ( position ). id ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder : ĠBase ViewHolder < Navigation Sheet Item Information >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠ Ġ) Ġ= Ġholder . on Bind ( getItem ( position )) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ) Ġ= ĠgetItem ( position ). hashCode (). to Long () ĊĊĠĠĠ Ġfun ĠgetItem At ( position : ĠInt ): ĠNavigation Sheet Item Information Ġ= ĠgetItem ( position ) ĊĊĠĠĠ Ġprivate Ġclass ĠDiv ider ViewHolder ( view : ĠView ) Ġ: ĠBase ViewHolder < Divider >( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( data : ĠDiv ider ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠEmpty ViewHolder ( view : ĠView ) Ġ: ĠBase ViewHolder < Empty >( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( data : ĠEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Empty Parent View . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Empty Parent View . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠEMPTY _ VIEW _ DISPLAY _ DELAY _ MS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTitle ViewHolder ( view : ĠView ) Ġ: ĠBase ViewHolder < Title >( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( data : ĠTitle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Res Ġ= Ġwhen Ġ( data . schedule Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTitle . Type . CLASSES Ġ-> ĠR . string . navigation _ title _ classes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTitle . Type . EX AMS Ġ-> ĠR . string . navigation _ title _ ex ams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTitle . Type . PART _ TIME Ġ-> ĠR . string . navigation _ title _ part _ time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( container View Ġas ? ĠTextView )?. setText ( title Res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠContent ViewHolder ( view : ĠView ) Ġ: ĠBase ViewHolder < Content >( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( data : ĠContent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Content Text . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdata . schedule . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġdata . isSelected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Safe ClickListener ( on ClickListener Ġ= Ġschedule ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġdata . schedule ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Content Update Parent View . isVisible Ġ= Ġdata . update State Ġ!= ĠNOT _ AVAILABLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Content Update Loader View . isVisible Ġ= Ġdata . update State Ġ== ĠIN _ PROGRESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Content Update Success Text . isVisible Ġ= Ġdata . update State Ġ== ĠSUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Content Update Error Text . isVisible Ġ= Ġdata . update State Ġ== ĠERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Content Update Available Text . isVisible Ġ= Ġdata . update State Ġ== ĠA VA IL ABLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Swipe Allowed Ġ= Ġdata . update State Ġ== ĠNOT _ AVAILABLE Ġ|| Ġdata . update State Ġ== ĠA VA IL ABLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠHint ViewHolder ( view : ĠView ) Ġ: ĠBase ViewHolder < Hint >( view ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Item Hint Ok Button . set Safe ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Callback ?. on Hint Dis missed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( data : ĠHint ) Ġ{} ĊĠĠĠ Ġ} Ċ }