package Ġcom . news blur . fragment Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . news blur . R Ċ import Ġcom . news blur . activity . Main Ċ import Ġcom . news blur . databinding . Dialog Add Feed Binding Ċ import Ġcom . news blur . databinding . Row Add Feed Folder Binding Ċ import Ġcom . news blur . domain . Folder Ċ import Ġcom . news blur . fragment . Add Feed Fragment . Add Feed Adapter . Folder ViewHolder Ċ import Ġcom . news blur . network . API Manager Ċ import Ġcom . news blur . service . NB Sync Service Ċ import Ġcom . news blur . util . App Constants Ċ import Ġcom . news blur . util . Feed Utils Ċ import Ġcom . news blur . util . UI Utils Ċ import Ġcom . news blur . util . execute AsyncTask Ċ import Ġjava . util .* Ċ Ċ class ĠAdd Feed Fragment Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠDialog Add Feed Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapi Manager Ġ= ĠAPI Manager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠLayoutInflater . from ( require Context ()). inflate ( R . layout . dialog _ add _ feed , Ġnull ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠDialog Add Feed Binding . bind ( v ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( require Activity ()) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Choose Ġfolder Ġfor Ġ" Ġ+ Ġrequire Arguments (). getString ( FEED _ NAME )) ĊĠĠĠĠĠĠĠ Ġbuilder . setView ( v ) ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠAdd Feed Adapter ( object Ġ: ĠOn Folder ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( folder : ĠFolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Feed ( require Activity (), Ġapi Manager , Ġfolder . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . text Add Folder Title . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . container Add Folder . visibility Ġ== ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . container Add Folder . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . container Add Folder . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . ic Create Folder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . input Folder Name . text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠR . string . add _ folder _ name , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Feed To New Folder ( require Activity (), Ġapi Manager , Ġbinding . input Folder Name . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView Folders . addItem Decoration ( Divider Item Decoration ( require Context (), ĠLinearLayoutManager . VERTICAL )) ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView Folders . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġadapter . set Folders ( Feed Utils . db Helper !!. folders ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Feed To New Folder ( activity : ĠActivity , Ġapi Manager : ĠAPI Manager , Ġfolder Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . ic Create Folder . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . input Folder Name . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . execute AsyncTask ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo In Background Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Manager . add Folder ( folder Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Execute Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . input Folder Name . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . container Add Folder . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . input Folder Name . text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Feed ( activity , Ġapi Manager , Ġfolder Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Utils . safe Toast ( activity , ĠR . string . add _ folder _ error , ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Feed ( activity : ĠActivity , Ġapi Manager : ĠAPI Manager , Ġfolder Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . text Sync Status . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . execute AsyncTask ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo In Background Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠAdd Feed Progress Listener ). add Feed Started () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfeed Url Ġ= Ġrequire Arguments (). getString ( FEED _ URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Manager . add Feed ( feed Url , Ġfolder Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Execute Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Sync Status . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠMain :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtrigger Ġa Ġsync Ġwhen Ġwe Ġreturn Ġto ĠMain Ġso Ġthat Ġthe Ġnew Ġfeed Ġwill Ġshow Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNB Sync Service . force Feed s Folders () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Main . EXTRA _ FORCE _ SHOW _ FEED _ ID , Ġit . feed . feed Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Utils . safe Toast ( activity , ĠR . string . add _ feed _ error , ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠAdd Feed Adapter ĊĠĠĠ Ġconstructor ( private Ġval Ġlistener : ĠOn Folder ClickListener ) Ġ: ĠRecyclerView . Adapter < Folder ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfolders : ĠMutable List < Folder > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( view Group : ĠViewGroup , Ġposition : ĠInt ): ĠFolder ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( view Group . context ). inflate ( R . layout . row _ add _ feed _ folder , Ġview Group , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFolder ViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( view Holder : ĠFolder ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= Ġfolders [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( folder . name Ġ== ĠApp Constants . ROOT _ FOLDER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . binding . text Folder Title . setText ( R . string . top _ level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . binding . text Folder Title . text Ġ= Ġfolder . flat Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . item View . setOnClickListener Ġ{ Ġlistener . on Item Click ( folder ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġfolders . size ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Folders ( folders : ĠList < Folder >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . sort ( folders , ĠFolder . Folder Comparator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . folders . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . folders . addAll ( folders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠFolder ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding : ĠRow Add Feed Folder Binding Ġ= ĠRow Add Feed Folder Binding . bind ( item View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠAdd Feed Progress Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġadd Feed Started () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Folder ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( folder : ĠFolder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFE ED _ URI Ġ= Ġ" feed _ url " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFE ED _ NAME Ġ= Ġ" feed _ name " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( feed Uri : ĠString , Ġfeed Name : ĠString ): ĠAdd Feed Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrag Ġ= ĠAdd Feed Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString ( FEED _ URI , Ġfeed Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString ( FEED _ NAME , Ġfeed Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrag . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfrag ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }