package Ġcom . guardian ange ls . foot ball . ui . players . player list Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . drawable . Inset Drawable Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . view . menu . Menu Builder Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġandroidx . fragment . app . set Fragment Result Listener Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . guardian ange ls . foot ball . R Ċ import Ġcom . guardian ange ls . foot ball . data . Player Ċ import Ġcom . guardian ange ls . foot ball . network . Network State Ċ import Ġcom . guardian ange ls . foot ball . ui . base . Base Player List Fragment Ċ import Ġcom . guardian ange ls . foot ball . ui . base . Section ed Player ListAdapter Ċ import Ġcom . guardian ange ls . foot ball . ui . base . Toolbar State Ċ import Ġcom . guardian ange ls . foot ball . util . Constants Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Android EntryPoint Ċ class ĠPlayer List Fragment Ġ: ĠBase Player List Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Player List Fragment " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlisten For Fragment Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Fragment Result Listener ( Constants . REQUEST _ PLAYER _ UPLOAD _ COMPLETE _ KEY ) Ġ{ Ġ_, Ġbundle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbundle . getBoolean ( Constants . B UNDLE _ PLAYER _ UPLOAD _ COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Section ed Player Result LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTo Ġhandle Ġre cycler view Ġitem Ġclicks ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġplayer ItemClickListener ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . multi Selection Handler . is Multi Selection State Active ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . multi Selection Handler . add Or Remove Players From Selected List ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" player ItemClickListener : ĠSelected Ġ${ player . player Name }") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" player ItemClickListener : ĠM oved Ġto Ġanother ĠFragment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( Player List Fragment Directions . action Players To Player Details Fragment ( player )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbutton Click Listeners ( adapter : ĠSection ed Player ListAdapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . button Click Listeners ( adapter ) ĊĊĠĠĠĠĠĠĠ Ġbinding . confirm Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Players With Confirmation () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . options Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Pop Up Menu () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Players With Confirmation () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Confirm ĠDe letion ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" The Ġselected Ġplayers Ġwill Ġbe Ġper manently Ġdeleted .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button (" Cancel ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" Delete ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . multi Selection Handler . delete Players () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve ViewModel ( adapter : ĠSection ed Player ListAdapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . observe ViewModel ( adapter ) ĊĠĠĠĠĠĠĠ ĠviewModel . multi Selection Handler . deleted State . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" observe ViewModel : ĠSuccess Ġ${ it . data }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . multi Selection Handler . clear Selected List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . multi Selection Handler . set Toolbar State ( Toolbar State . Normal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Title () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Section ed Player Result LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork State . Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( TAG ). d (" observe ViewModel : ĠFailed : Ġ${ it . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" Delete ĠFailed . Ġ${ it . message }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToolbar Ġstates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġset Normal State Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is User LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . options Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmode View Visibility ( View . GONE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetSelected State Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . options Button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġmode View Visibility ( View . VISIBLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmode View Visibility ( visibility : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . confirm Button . visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġbinding . cancel Selection Button . visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġbinding . confirm Button . visibility Ġ= Ġvisibility ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOptions Ġmenu ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") Ġ// ĠRequired Ġfor Ġset Optional Icons Visible ĊĠĠĠ Ġprivate Ġfun Ġshow Pop Up Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpopup Menu Ġ= ĠPopup Menu ( require Context (), Ġbinding . options Button ) ĊĠĠĠĠĠĠĠ Ġpopup Menu . menu Inflater . inflate ( R . menu . players _ popup _ menu , Ġpopup Menu . menu ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( popup Menu . menu Ġis ĠMenu Builder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Builder Ġ= Ġpopup Menu . menu Ġas ĠMenu Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Builder . set Optional Icons Visible ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġmenu Builder . visible Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Margin Px Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġ 8 . 0 F , Ġresources . display Metrics ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . icon Ġ= ĠIn set Drawable ( item . icon , Ġicon Margin Px , Ġ 0 , Ġicon Margin Px , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpopup Menu . setOn MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . add Players Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( Player List Fragment Directions . action Players ToAdd Player Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete Players Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . multi Selection Handler . set Toolbar State ( Toolbar State . Multi Select State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpopup Menu . show () ĊĠĠĠ Ġ} ĊĊ Ċ }