package Ġcom . demo . developer . der aes w . dem omo view es . ui . sorting Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . demo . developer . der aes w . dem omo view es . R Ċ import Ġcom . demo . developer . der aes w . dem omo view es . adapter . Sorting Adapter Ċ import Ġcom . demo . developer . der aes w . dem omo view es . core . data . model . Sort Item Ċ import Ġcom . demo . developer . der aes w . dem omo view es . utils . Constant ĊĊ Ċ class ĠSort ing Fragment Ġ: Ġandroidx . fragment . app . Fragment (), ĠSort ing Adapter . Sorting Movie Adapter Interface { ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠSort ing Fragment :: class . java . simple Name ĊĊĠĠĠ Ġclass ĠCategory Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ MOV IE ĠĠ Ġ= Ġ" SORT _ MOV IE " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ CAST ING Ġ= Ġ" SORT _ CAST ING " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSORT _ CRE W ĠĠĠ Ġ= Ġ" SORT _ CRE W " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG UMENT _ SORT _ CATEGORY Ġ= Ġ" ARGUMENT _ SORT _ CATEGORY " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG UMENT _ SORT _ CODE Ġ= Ġ" ARGUMENT _ SORT _ CODE " ĊĊĠĠĠĠĠĠĠ Ġfun Ġsetup ( category Sorting Ġ: ĠString , Ġ Ġcode Key Ġ: ĠString ) Ġ: ĠBundle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( ARGUMENT _ SORT _ CODE , Ġcode Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( ARGUMENT _ SORT _ CATEGORY , Ġcategory Sorting ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Adapter Ġ: ĠSort ing Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Code Ġ: ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Category : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Handle Ġ: ĠSort ing Fragment Interface ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġm Category Ġ= Ġarguments ?. getString ( ARGUMENT _ SORT _ CATEGORY ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġm Code Ġ= Ġarguments ?. getString ( ARGUMENT _ SORT _ CODE ) Ġ?: ĠConstant . Sorting Code . BY _ DEFAULT ĊĠĠĠĠĠĠĠ Ġif ( m Code Ġ== Ġ""){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Code Ġ= ĠConstant . Sorting Code . BY _ DEFAULT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Root Ġ= Ġinflater . inflate ( R . layout . fragment _ sorting , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ: Ġandroidx . recyclerview . widget . RecyclerView Ġ= Ġview Root . findViewById ( R . id . rv _ sorting _ options ) ĊĠĠĠĠĠĠĠ Ġ// re cyclerView . addItem Decoration ( Divider Item Decoration ( context , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġandroidx . recyclerview . widget . Linear LayoutManager ( context , Ġandroidx . recyclerview . widget . Linear LayoutManager . VERTICAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠSort ing Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġm Adapter ĊĊĠĠĠĠĠĠĠ Ġvar Ġsorting Option Code Ġ= ĠHashMap < Int , ĠString >() ĊĠĠĠĠĠĠĠ Ġvar Ġsorting Option Label Ġ= ĠarrayOf < String >() ĊĊĠĠĠĠĠĠĠ Ġwhen ( m Category ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCategory . SORT _ MOV IE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Option Code Ġ= ĠConstant . Sorting Code . Movie . CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Option Label Ġ= Ġresources . getString Array ( R . array . movie _ sorting _ label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCategory . SORT _ CAST ING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Option Code Ġ= ĠConstant . Sorting Code . Cast ing . CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Option Label Ġ= Ġresources . getString Array ( R . array . cast ing _ sorting _ label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCategory . SORT _ CRE W Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġmovie Sort List Ġ: ĠList < Sort Item > Ġ= ĠArrayList () Ċ // ĠĠĠĠĠĠĠ Ġsorting Option Code . to Sorted Map (). forEach { Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġindex , Ġvalue Ġ-> Ġmovie Sort List Ġ+= ĠSort Item ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Option Label [ index ], Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( value Ġ== Ġm Code ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Adapter . swap Data ( movie Sort List ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview Root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Handle Ġ= Ġcontext Ġas ĠSort ing Fragment Interface ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex Ġ: ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Must Ġimplement ĠSort ing Movie Fragment Interface ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclick On Item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Adapter . change SelectedItem ( position ) ĊĠĠĠĠĠĠĠ Ġm Code Ġ= Ġm Adapter . getItem At ( position ). key ĊĠĠĠĠĠĠĠ Ġm Handle . select Sorting Option ( m Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠSort ing Fragment Interface Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġselect Sorting Option ( code Ġ: ĠString ) ĊĠĠĠ Ġ} Ċ } Ċ