package Ġeu . kan ade . t ach iy omi . ui . setting Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . text . build Sp anned String Ċ import Ġandroidx . preference . Preference Screen Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ import Ġcom . h ipp o . un if ile . Uni File Ċ import Ġeu . kan ade . t ach iy omi . R Ċ import Ġeu . kan ade . t ach iy omi . data . database . Database Helper Ċ import Ġeu . kan ade . t ach iy omi . data . database . models . Category Ċ import Ġeu . kan ade . t ach iy omi . data . preference . Preferences Helper Ċ import Ġeu . kan ade . t ach iy omi . data . preference . as Immediate Flow Ċ import Ġeu . kan ade . t ach iy omi . ui . base . controller . Dialog Controller Ċ import Ġeu . kan ade . t ach iy omi . util . preference . defaultValue Ċ import Ġeu . kan ade . t ach iy omi . util . preference . entries Res Ċ import Ġeu . kan ade . t ach iy omi . util . preference . int List Preference Ċ import Ġeu . kan ade . t ach iy omi . util . preference . multi Select List Preference Ċ import Ġeu . kan ade . t ach iy omi . util . preference . onClick Ċ import Ġeu . kan ade . t ach iy omi . util . preference . preference Ċ import Ġeu . kan ade . t ach iy omi . util . preference . preference Category Ċ import Ġeu . kan ade . t ach iy omi . util . preference . switch Preference Ċ import Ġeu . kan ade . t ach iy omi . util . preference . title Res Ċ import Ġeu . kan ade . t ach iy omi . util . system . toast Ċ import Ġeu . kan ade . t ach iy omi . widget . material dialogs . Quad State TextView Ċ import Ġeu . kan ade . t ach iy omi . widget . material dialogs . set Quad State Multi Choice Items Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġu y . ko hes ive . in jekt . In jekt Ċ import Ġu y . ko hes ive . in jekt . api . get Ċ import Ġu y . ko hes ive . in jekt . inject Lazy Ċ import Ġjava . io . File Ċ import Ġeu . kan ade . t ach iy omi . data . preference . Preference Keys Ġas ĠKeys Ċ Ċ class ĠSettings Download Controller Ġ: ĠSettings Controller () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdb : ĠDatabase Helper Ġby Ġinject Lazy () ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Preference Screen ( screen : ĠPreference Screen ) Ġ= Ġscreen . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ category _ downloads ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Categories Ġ= Ġdb . getC ategories (). execute As Blocking () ĊĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= ĠlistOf ( Category . create Default ( context )) Ġ+ Ġdb Categories ĊĊĠĠĠĠĠĠĠ Ġpreference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . downloads Directory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ download _ directory ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctrl Ġ= ĠDownload Directories Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctrl . target Controller Ġ= Ġthis @ Settings Download Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctrl . show Dialog ( router ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . downloads Directory (). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġpath Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠUni File . from Uri ( context , Ġpath . to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġdir . filePath Ġ?: Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġswitch Preference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . download Only Over Wifi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . connected _ to _ wifi ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpreference Category Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ category _ delete _ chapter s ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Preference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . remove After Marked As Read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ remove _ after _ marked _ as _ read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint List Preference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . remove After Read Slots ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ remove _ after _ read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries Res Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . disabled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . last _ read _ chapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . second _ to _ last , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . third _ to _ last , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . four th _ to _ last , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . f ifth _ to _ last ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Values Ġ= ĠarrayOf ("- 1 ", Ġ" 0 ", Ġ" 1 ", Ġ" 2 ", Ġ" 3 ", Ġ" 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ"- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġ"% s " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Preference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . remove Book marked Chapter s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ remove _ book marked _ chapter s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Select List Preference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . remove Exclude Categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ remove _ exclude _ categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries Ġ= Ġcategories . map Ġ{ Ġit . name Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry Values Ġ= Ġcategories . map Ġ{ Ġit . id . toString () Ġ}. to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . remove Exclude Categories (). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġmutable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Ġ= Ġmutable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġid Ġ-> Ġcategories . find Ġ{ Ġit . id Ġ== Ġid . toInt () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . order Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġif Ġ( selected . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources ?. getString ( R . string . none ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected . join ToString Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. launch In ( view Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpreference Category Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ category _ auto _ download ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Preference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . download New ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . pref _ download _ new ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠKeys . download New Categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Ġ= ĠR . string . categories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Categories Dialog (). show Dialog ( router ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . download New (). as Immediate Flow Ġ{ Ġis Visible Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġupdate Summary () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Categories Ġ= Ġpreferences . download New Categories (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġid Ġ-> Ġcategories . find Ġ{ Ġit . id Ġ== Ġid . toInt () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . order Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincluded Items Text Ġ= Ġif Ġ( selected Categories . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . all ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Categories . join ToString Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexcluded Categories Ġ= Ġpreferences . download New Categories Exclude (). get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġid Ġ-> Ġcategories . find Ġ{ Ġit . id Ġ== Ġid . toInt () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . order Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexcluded Items Text Ġ= Ġif Ġ( excluded Categories . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . none ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexcluded Categories . join ToString Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġbuild Sp anned String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( context . getString ( R . string . include , Ġincluded Items Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( context . getString ( R . string . exclude , Ġexcluded Items Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . download New Categories (). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġupdate Summary () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . download New Categories Exclude (). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġupdate Summary () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDOWN LOAD _ DIR Ġ-> Ġif Ġ( data Ġ!= Ġnull Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġapplication Context Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" New Api ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . take Persist able Uri Permission ( uri , Ġflags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠUni File . from Uri ( context , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . downloads Directory (). set ( file . uri . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpredefined Directory Selected ( selected Dir : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠFile ( selected Dir ). to Uri () ĊĠĠĠĠĠĠĠ Ġpreferences . downloads Directory (). set ( path . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcustom Directory Selected () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT _ TREE ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠDOWN LOAD _ DIR ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. toast ( R . string . file _ picker _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDownload Directories Dialog Ġ: ĠDialog Controller () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreferences : ĠPreferences Helper Ġ= ĠIn jekt . get () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( saved ViewState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Dir Ġ= Ġpreferences . downloads Directory (). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Dirs Ġ= Ġ( get External Dirs () Ġ+ ĠFile ( activity . getString ( R . string . custom _ dir ))). map ( File :: toString ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Index Ġ= Ġexternal Dirs . indexOf First Ġ{ Ġit Ġin Ġcurrent Dir Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMaterial AlertDialog Builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . pref _ download _ directory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Single Choice Items ( external Dirs . to Typed Array (), Ġselected Index ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Index Ġ= Ġwhich ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġtarget Controller Ġas ? ĠSettings Download Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ== Ġexternal Dirs . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. custom Directory Selected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. pre defined Directory Selected ( external Dirs [ selectedIndex ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget External Dirs (): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Dir Ġ= ĠEnvironment . get External Storage Directory (). absolute Path Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile . separator Ġ+ Ġresources ?. getString ( R . string . app _ name ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile . separator Ġ+ Ġ" downloads " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmutable ListOf ( File ( default Dir )) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get External Files Dirs ( activity !! , Ġ""). filter NotNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDownload Categories Dialog Ġ: ĠDialog Controller () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreferences : ĠPreferences Helper Ġ= ĠIn jekt . get () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb : ĠDatabase Helper Ġ= ĠIn jekt . get () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( saved ViewState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Categories Ġ= Ġdb . getC ategories (). execute As Blocking () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= ĠlistOf ( Category . create Default ( activity !! )) Ġ+ Ġdb Categories ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġcategories . map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġselected Ġ= Ġcategories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . id . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġpreferences . download New Categories (). get () Ġ-> ĠQuad State TextView . State . CHECK ED . ordinal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġpreferences . download New Categories Exclude (). get () Ġ-> ĠQuad State TextView . State . IN VER SED . ordinal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠQuad State TextView . State . UN CHECK ED . ordinal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to IntArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMaterial AlertDialog Builder ( activity !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . categories ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Quad State Multi Choice Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠR . string . pref _ download _ new _ categories _ details , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġitems , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Selected Ġ= Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġselections Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ= Ġselections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincluded Ġ= Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġvalue Ġ-> Ġif Ġ( value Ġ== ĠQuad State TextView . State . CHECK ED . ordinal ) Ġindex Ġelse Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcategories [ it ]. id . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexcluded Ġ= Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġvalue Ġ-> Ġif Ġ( value Ġ== ĠQuad State TextView . State . IN VER SED . ordinal ) Ġindex Ġelse Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcategories [ it ]. id . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . download New Categories (). set ( included ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . download New Categories Exclude (). set ( excluded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠDOWN LOAD _ DIR Ġ= Ġ 1 0 4 Ċ