package Ġcom . jos hu acer den ia . android . nice feed . ui . fragment Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . jos hu acer den ia . android . nice feed . R Ċ import Ġcom . jos hu acer den ia . android . nice feed . data . local . N ice Feed Preferences Ċ import Ġcom . jos hu acer den ia . android . nice feed . data . model . feed . Feed Manage able Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . On Finished Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . On Toolbar In fl ated Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . adapter . Feed Manager Adapter Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . dialog . Confirm Action Fragment Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . dialog . Confirm Action Fragment . Companion . EXPORT Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . dialog . Confirm Action Fragment . Companion . REMOVE Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . dialog . Edit Category Fragment Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . dialog . Edit Feed Fragment Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . dialog . Sort Feed Manager Fragment Ċ import Ġcom . jos hu acer den ia . android . nice feed . ui . view model . Manage Feed s ViewModel Ċ import Ġcom . jos hu acer den ia . android . nice feed . util . Op ml Exporter Ċ import Ġcom . jos hu acer den ia . android . nice feed . util . extensions . hide Ċ import Ġcom . jos hu acer den ia . android . nice feed . util . extensions . show Ċ import Ġcom . le in ard i . android . speed dial . Speed Dial Action Item Ċ import Ġcom . le in ard i . android . speed dial . Speed Dial View Ċ Ċ class ĠManage Feed s Fragment : ĠVis ible Fragment (), ĊĠĠĠ ĠEdit Category Fragment . Callbacks , ĊĠĠĠ ĠEdit Feed Fragment . Callback , ĊĠĠĠ ĠConfirm Action Fragment . On Remove Confirmed , ĊĠĠĠ ĠConfirm Action Fragment . On Export Confirmed , ĊĠĠĠ ĠSort Feed Manager Fragment . Callbacks , ĊĠĠĠ ĠFeed Manager Adapter . Item CheckBox Listener , ĊĠĠĠ ĠOp ml Exporter . Export Result Listener Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback s : ĠOn Toolbar In fl ated , ĠOn Finished Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Add Feed s Selected () ĊĠĠĠĠĠĠĠ Ġfun Ġon Export Op ml Selected () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠManage Feed s ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoolbar : ĠToolbar ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġselect All CheckBox : ĠCheckBox ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcounter TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġempty Message TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠFeed Manager Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspeed Dial : ĠSpeed Dial View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch Item : ĠMenuItem ĊĊĠĠĠ Ġprivate Ġvar Ġop ml Exporter : ĠOp ml Exporter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcallbacks : ĠCallback s ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġfragment Ġ= Ġthis @ Manage Feed s Fragment ĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler () ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġcallbacks Ġ= Ġcontext Ġas ĠCallback s ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Manage Feed s ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . set Order ( N ice Feed Preferences . get Feed Manager Order ( require Context ())) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠFeed Manager Adapter ( this , ĠviewModel . selected Items ) ĊĠĠĠĠĠĠĠ Ġop ml Exporter Ġ= ĠOp ml Exporter ( require Context (), Ġthis ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ manage _ feeds , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtoolbar Ġ= Ġview . findViewById ( R . id . toolbar ) ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= Ġview . findViewById ( R . id . progress _ bar ) ĊĠĠĠĠĠĠĠ Ġselect All CheckBox Ġ= Ġview . findViewById ( R . id . select _ all _ checkbox ) ĊĠĠĠĠĠĠĠ Ġcounter TextView Ġ= Ġview . findViewById ( R . id . counter _ text _ view ) ĊĠĠĠĠĠĠĠ Ġempty Message TextView Ġ= Ġview . findViewById ( R . id . empty _ message _ text _ view ) ĊĠĠĠĠĠĠĠ Ġspeed Dial Ġ= Ġview . findViewById ( R . id . speed _ dial ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġview . findViewById ( R . id . recycler _ view ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= ĠgetString ( R . string . manage _ feeds ) ĊĠĠĠĠĠĠĠ Ġcallbacks ?. on Toolbar In fl ated ( toolbar ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠprogressBar . show () ĊĠĠĠĠĠĠĠ Ġsetup Speed Dial () ĊĊĠĠĠĠĠĠĠ ĠviewModel . feeds Manage able LiveData . observe ( view Lifecycle Owner , Ġ{ Ġfeeds Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( feeds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect All CheckBox . isChecked Ġ= Ġfeeds . size Ġ== ĠviewModel . selected Items . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feeds . size Ġ> Ġ 1 ) Ġselect All CheckBox . show () Ġelse Ġselect All CheckBox . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feeds . isEmpty ()) Ġempty Message TextView . show () Ġelse Ġempty Message TextView . hide () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . any Is Selected . observe ( view Lifecycle Owner , Ġ{ Ġany Is Selected Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Counter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( any Is Selected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Dial . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Dial . open () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Dial . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġtoolbar . setOnClickListener Ġ{ Ġre cyclerView . smooth Scroll To Position ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġselect All CheckBox . setOnClickListener Ġ{ Ġ( it Ġas ĠCheckBox ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isChecked ) ĠviewModel . reset Selection ( adapter . current List ) Ġelse ĠviewModel . reset Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . toggle CheckBox es ( it . isChecked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . fragment _ manage _ feeds , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsearch Item Ġ= Ġmenu . find Item ( R . id . menu _ item _ search ) ĊĊĠĠĠĠĠĠĠ Ġsearch Item . setOn Action Expand Listener ( object : ĠMenuItem . On Action Expand Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon MenuItem Action Expand ( item : ĠMenuItem ?): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon MenuItem Action Collapse ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear Query () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ( search Item . action View Ġas ĠSearch View ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . query . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Item . expand Action View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Query ( viewModel . query , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( query Text : ĠString ): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query Text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . submit Query ( query Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ item _ sort Ġ-> Ġhandle Sort Feed s () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ item _ export Ġ-> Ġhandle Export All () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ item _ add _ feeds Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks ?. on Add Feed s Selected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Speed Dial () Ġ{ ĊĠĠĠĠĠĠĠ Ġspeed Dial . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action Item ( default Speed Dial Item ( R . id . fab _ edit , ĠR . drawable . ic _ edit _ light )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action Item ( default Speed Dial Item ( R . id . fab _ remove , ĠR . drawable . ic _ delete _ light )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action Item ( default Speed Dial Item ( R . id . fab _ export , ĠR . drawable . ic _ export _ light )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On ChangeListener ( object Ġ: ĠSpeed Dial View . On ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Toggle Changed ( isOpen : ĠBoolean ) Ġ{ Ġ} Ġ// ĠBl ank Ġon Ġpurpose ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Main Action Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Action Selected Listener Ġ{ Ġaction Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Item . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fab _ edit Ġ-> Ġhandle Edit Selected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fab _ remove Ġ-> Ġhandle Remove Selected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . fab _ export Ġ-> Ġhandle Export Selected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdefault Speed Dial Item ( id : ĠInt , Ġicon Res : ĠInt ): ĠSpeed Dial Action Item Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSpeed Dial Action Item . Builder ( id , Ġicon Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Fab BackgroundColor ( Context Compat . getColor ( require Context (), ĠR . color . color Accent )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Counter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠviewModel . selected Items . size ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter TextView . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter TextView . text Ġ= ĠgetString ( R . string . number _ selected , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter TextView . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Edit Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠviewModel . selected Items . size ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEdit Category Fragment . newInstance ( viewModel . getC ategories (), Ġnull , Ġcount ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Fragment ( fragment , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment . parent FragmentManager , Ġ" Edit Category Fragment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEdit Feed Fragment . newInstance ( viewModel . selected Items . first (), ĠviewModel . getC ategories ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Fragment ( fragment , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment . parent FragmentManager , Ġ" Edit Feed Fragment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Feed Info Submitted ( title : ĠString , Ġcategory : ĠString , Ġis Changed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Changed ) Ġreturn ĊĠĠĠĠĠĠĠ ĠviewModel . update Feed Details ( viewModel . selected Items . first (). url , Ġtitle , Ġcategory ) ĊĠĠĠĠĠĠĠ Ġsearch Item . collapse Action View () ĊĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . saved _ changes _ to , Ġtitle ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠ Ġ). show () Ġ}, Ġ 2 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Edit Category Confirmed ( category : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( feed Ġin ĠviewModel . selected Items ) Ġids . add ( feed . url ) ĊĠĠĠĠĠĠĠ ĠviewModel . update Category By Feed Ids ( ids , Ġcategory ) ĊĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠĠĠĠĠ Ġsearch Item . collapse Action View () ĊĠĠĠĠĠĠĠ Ġ// ĠCr ude Ġsolution Ġto ĠSn ackbar Ġjump ing : Ġwait Ġuntil Ġkeyboard Ġis Ġfully Ġhidden ĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ Ġshow Feed s Categor ized Notice ( category , Ġids . size ) Ġ}, Ġ 4 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Feed s Categor ized Notice ( category : ĠString , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeeds Updated Ġ= Ġresources . get Quantity String ( R . plurals . numberOf Feed s , Ġcount , Ġcount ) ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . category _ assigned , Ġcategory , Ġfeeds Updated ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ). setAction ( R . string . done ) Ġ{ Ġcallbacks ?. on Finished () Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Remove Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠviewModel . selected Items . size ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġif Ġ( count Ġ== Ġ 1 ) ĠviewModel . selected Items . first (). title Ġelse Ġnull ĊĠĠĠĠĠĠĠ ĠConfirm Action Fragment . newInstance ( REMOVE , Ġtitle , Ġcount ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Fragment ( fragment , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment . parent FragmentManager ," Confirm Action Fragment ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Remove Confirmed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeed Ids Ġ= ĠviewModel . selected Items . map Ġ{ Ġfeed Ġ-> Ġfeed . url Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ ĠviewModel . delete Items (* feed Ids ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( feed Ids . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Feed s Removed Notice ( title Ġ= ĠviewModel . selected Items . first (). title ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Feed s Removed Notice ( feed Ids . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġlast Ġviewed Ġfeed Ġwas Ġjust Ġdeleted , Ġprevent Ġmain Ġpage Ġfrom Ġloading Ġit : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast View ed Feed Id Ġ= ĠNice Feed Preferences . getLast View ed Feed Id ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( feed Ids . contains ( last View ed Feed Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNice Feed Preferences . save Last View ed Feed Id ( require Context (), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Feed s Removed Notice ( count : ĠInt Ġ= Ġ 1 , Ġtitle : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeeds Removed Ġ= Ġtitle Ġ?: Ġresources . get Quantity String ( R . plurals . numberOf Feed s , Ġcount , Ġcount ) ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView , ĠgetString ( R . string . un subscribed _ message , Ġfeeds Removed ), ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . done ) Ġ{ Ġcallbacks ?. on Finished () Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Export All (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġselect All CheckBox . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠviewModel . reset Selection ( adapter . current List ) ĊĠĠĠĠĠĠĠ Ġadapter . toggle CheckBox es ( true ) ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Export Selected () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Export Selected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠviewModel . selected Items . size ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġif Ġ( count Ġ== Ġ 1 ) ĠviewModel . selected Items . first (). title Ġelse Ġnull ĊĠĠĠĠĠĠĠ ĠConfirm Action Fragment . newInstance ( EXPORT , Ġtitle , Ġcount ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Fragment ( fragment , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment . parent FragmentManager ," Confirm Action Fragment ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Export Confirmed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfeeds Ġ= ĠviewModel . selected Items ĊĠĠĠĠĠĠĠ Ġop ml Exporter ?. submit Feed s ( feeds ) ĊĠĠĠĠĠĠĠ Ġcallbacks ?. on Export Op ml Selected () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite Op ml ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġop ml Exporter ?. execute Export ( uri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Export At tempted ( is Successful : ĠBoolean , ĠfileName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠviewModel . selected Items . size ĊĠĠĠĠĠĠĠ Ġval Ġitem String Ġ= Ġresources . get Quantity String ( R . plurals . numberOf Feed s , Ġcount , Ġcount ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġif Ġ( is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . exported _ message , Ġitem String ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . error _ message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreset Selection () ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( re cyclerView , Ġmessage , ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . done ) Ġ{ Ġcallbacks ?. on Finished () Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Sort Feed s (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠSort Feed Manager Fragment . newInstance ( viewModel . order ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Target Fragment ( fragment , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( fragment . parent FragmentManager , Ġ" Sort Feed Manager Fragment ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Order Selected ( order : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . set Order ( order ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Selection () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . reset Selection () ĊĠĠĠĠĠĠĠ Ġselect All CheckBox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġadapter . toggle CheckBox es ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( feed : ĠFeed Manage able , Ġis Checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add Selection ( feed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect All CheckBox . isChecked Ġ= ĠviewModel . selected Items . size Ġ== Ġadapter . current List . size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove Selection ( feed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect All CheckBox . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . selected Items Ġ= ĠviewModel . selected Items ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon All Items Checked ( isChecked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect All CheckBox . isChecked Ġ= Ġis Checked ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĠNice Feed Preferences . save Feed Manager Order ( it , ĠviewModel . order ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġcallbacks Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠManage Feed s Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠManage Feed s Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }