package Ġcom . a oo en . blog _ arch iver Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . a oo en . blog _ arch iver . database .* Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ private Ġconst Ġval ĠEX PORT _ FILE _ FOLDER Ġ= Ġ" exports " Ċ private Ġconst Ġval ĠEX PORT _ FILE _ NAME Ġ= Ġ" blog . db " Ċ Ċ class ĠList Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġblog Dao : ĠBlog Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġblog List : ĠList < Blog > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġblog Dao Ġ= ĠDatabase . getInstance ( this ). blog Dao () ĊĠĠĠĠĠĠĠ Ġblog List Ġ= Ġblog Dao . getB logs () ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠgetString ( R . string . list _ title _ main ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġon Blog Clicked Ġ= ĠOn Blog Clicked () ĊĠĠĠĠĠĠĠ Ġval Ġblog List Layout Ġ= ĠLinearLayout ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( ListView ( this @ List Activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠArray Adapter ( this @ List Activity , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġblog List . map Ġ{ Ġit . title Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġon Blog Clicked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( blog List Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠOn Blog Clicked Ġ: ĠAdapter View . On ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblog Ġ= Ġblog List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent List Ġ= Ġblog Dao . get Blog With Articles ( blog . blog Id )?. articles ?. sorted With ( compare By < Article > Ġ{ Ġit . article No Ġ}. then By Descending Ġ{ Ġit . arch ived At Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġblog . title ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content List Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Content Clicked Ġ= ĠOn Content Clicked ( content List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent List Layout Ġ= ĠLinearLayout ( this @ List Activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( ListView ( this @ List Activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠArray Adapter ( this @ List Activity , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġcontent List . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ", ĠLocale . K ORE A ). format ( it . createdAt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ date Ġ${ it . title }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġon Content Clicked ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetContentView ( content List Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠOn Content Clicked ( val Ġcontent List : ĠList < Article >) Ġ: ĠAdapter View . On ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( parent : ĠAdapter View < *> ?, Ġview : ĠView ?, Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġcontent List [ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġcontent . title ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent List Layout Ġ= ĠScroll View ( this @ List Activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( TextView ( this @ List Activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġcontent . content . replace ("\\ n ", Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetContentView ( content List Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . list _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . export Action Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb File Ġ= Ġget Database Path ( DB _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexport File Ġ= ĠFile ( get External Files Dir ( EXPORT _ FILE _ FOLDER ), ĠEX PORT _ FILE _ NAME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDatabase . getInstance ( this ). close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( export File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . list _ export _ error _ exist , Ġexport File . path ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexport File . parent File ?. mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileInputStream ( db File ). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( export File ). use Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen Ġ= ĠinputStream . read ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( len Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( buf , Ġ 0 , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . list _ export _ success , Ġexport File . path ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }