/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 Ġ- Ġpresent Ġ ĠIn structure , ĠInc . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* ĠĠĠĠ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* ĠĠĠĠ Ġthe ĠFree ĠSoftware ĠFoundation , Ġversion Ġ 3 Ġof Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* ĠĠĠĠ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠĠĠĠ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠĠĠĠ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* ĠĠĠĠ Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< http :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ package Ġcom . in structure . student . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġcom . in structure . canvas api 2 . managers . Course Manager Ċ import Ġcom . in structure . canvas api 2 . managers . Recipient Manager Ċ import Ġcom . in structure . canvas api 2 . models . Canvas Context Ċ import Ġcom . in structure . canvas api 2 . models . Canvas Context Permission Ċ import Ġcom . in structure . canvas api 2 . models . Recipient Ċ import Ġcom . in structure . canvas api 2 . utils . we ave .* Ċ import Ġcom . in structure . p anda utils . utils . Theme Prefs Ċ import Ġcom . in structure . p anda utils . utils . toast Ċ import Ġcom . in structure . student . R Ċ import Ġcom . in structure . student . holders . Recipient ViewHolder Ċ import Ġcom . in structure . student . interfaces . Adapter To Fragment Callback Ċ import Ġjava . util .* ĊĊ Ċ open Ġclass ĠIn box Recipient Adapter ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġcanvas Context : ĠCanvas Context , ĊĠĠĠ Ġprivate Ġval Ġselected Recipients : ĠHashSet < Recipient >, ĊĠĠĠ Ġprivate Ġval Ġadapter To Fragment Callback : ĠAdapter To Fragment Callback < Recipient > Ċ ) Ġ: ĠBase List Recycler Adapter < Recipient , ĠRe cipient ViewHolder >( context , ĠRe cipient :: class . java ) Ġ{ ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠStack Entry ( val Ġrecipient Group : ĠRe cipient ) ĊĊĠĠĠ Ġprivate Ġval Ġback Stack Ġ= ĠStack < Stack Entry >() ĊĊĠĠĠ Ġprivate Ġvar Ġrecipient Call : ĠWe ave Job ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcan Send Messages All Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġadapter Callback Ġ= Ġ{ Ġrecipient : ĠRe cipient , Ġposition : ĠInt , Ġis Checkbox : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( recipient . recipient Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSelect Ġand Ġde select Ġindividuals . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe cipient . Type . Person Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Or Remove Recipient ( recipient , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAlways Ġgo Ġto Ġa Ġme tag roup Ġ- ĠCanvas Ġwon 't Ġlet Ġyou Ġsend Ġa Ġmessage Ġto Ġan Ġentire Ġme tag roup ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe cipient . Type . Met ag roup Ġ-> Ġset Context Recipient ( recipient ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġit 's Ġa Ġgroup , Ġmake Ġsure Ġthere Ġare Ġactually Ġusers Ġin Ġthat Ġgroup . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe cipient . Type . Group Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipient . user Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Checkbox ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Or Remove Recipient ( recipient , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFilter Ġdown Ġto Ġthe Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Recipients . contains ( recipient )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast ( R . string . ent ire Group Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Context Recipient ( recipient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast ( R . string . no Users In Group ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Callback Ġ= Ġin box Item Callback ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġroot Ġrecipient Ġgroup , Ġadd Ġto Ġback Ġstack ĊĠĠĠĠĠĠĠ Ġval Ġroot Context Recipient Ġ= ĠRe cipient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Id Ġ= Ġcanvas Context . context Id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġback Stack . add ( Stack Entry ( root Context Recipient )) ĊĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Or Remove Recipient ( recipient : ĠRe cipient , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! selected Recipients . add ( recipient )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Recipients . remove ( recipient ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotify Item Changed ( position , Ġrecipient ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Context Recipient ( recipient : ĠRe cipient ) Ġ{ ĊĠĠĠĠĠĠĠ Ġback Stack . add ( Stack Entry ( recipient )) ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Back Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġback Stack . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpop Back Stack (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( back Stack . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Pag inated () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġload First Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecipient Call ?. cancel () ĊĠĠĠĠĠĠĠ Ġrecipient Call Ġ= Ġtry We ave Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( canvas Context . type Ġ== ĠCanvas Context . Type . CO URSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Send Messages All Ġ= Ġawait Api < Canvas Context Permission > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Manager . getC ourse Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas Context . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Canvas Context Permission . SEND _ MESSAGES _ ALL ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. send _ messages _ all ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġawait Pag inated < List < Recipient >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Request Ġ{ ĠRe cipient Manager . search Recipients ( null , Ġback Stack . peek (). recipient Group . string Id !! , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Response Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next Url ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Next Url ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter To RecyclerView Callback . set IsEmpty ( size () Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter To Fragment Callback . on Refresh Finished () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cause ?. printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter To Fragment Callback . on Refresh Finished () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Next Page ( next URL : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecipient Call ?. next () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecipient Call ?. cancel () ĊĠĠĠĠĠĠĠ Ġsuper . reset Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Recipients (): ĠList < Recipient > Ġ= Ġselected Recipients . toList () ĊĊĠĠĠ Ġoverride Ġfun Ġbind Holder ( recipient : ĠRe cipient , Ġholder : ĠRe cipient ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Callback , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Prefs . brand Color , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Recipients . contains ( recipient ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcan Send Messages All ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ViewHolder ( v : ĠView , Ġview Type : ĠInt ): ĠRe cipient ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRe cipient ViewHolder ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġitem Layout Res Id ( view Type : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRe cipient ViewHolder . HOLDER _ RES _ ID ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġrecipient Call ?. cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠDe coup led Ġfor Ġtest ability ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval Ġin box Item Callback Ġ= Ġobject Ġ: ĠBase List Recycler Adapter . Item Comparable Callback < Recipient >() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomparator Ġ= Ġcompare By < Recipient >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . recipient Type . ordinal Ġ}, Ġ// ĠCompare Ġtypes , Ġshould Ġsort Ġby Ġgroup Ġ> Ġme tag roup Ġ> Ġperson ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . name !!. toLowerCase () Ġ}, Ġ// ĠCompare Ġby Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . string Id Ġ} Ġ// ĠCompare Ġby Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠRe cipient , Ġnew Item : ĠRe cipient ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompare ( new Item , Ġold Item ) Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Unique ItemId ( recipient : ĠRe cipient ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrecipient . string Id !!. hashCode (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare ( o 1 : ĠRe cipient , Ġo 2 : ĠRe cipient ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcomparator . compare ( o 1 , Ġo 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( item 1 : ĠRe cipient , Ġitem 2 : ĠRe cipient ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitem 1 . string Id Ġ== Ġitem 2 . string Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ