package Ġcom . ar jan v lek . oxy gen updater . database Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite Open Helper Ċ import Ġandroidx . core . content . content Values Of Ċ import Ġcom . ar jan v lek . oxy gen updater . models . News Item Ċ import Ġjava . util .* Ċ Ċ class ĠNews Database Helper ( context : ĠContext ?) Ġ: ĠSQLite Open Helper ( ĊĠĠĠ Ġcontext , ĊĠĠĠ ĠDATABASE _ NAME , ĊĠĠĠ Ġnull , ĊĠĠĠ ĠDATABASE _ VERSION Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġreadable Sq Lite Database : ĠSQLite Database ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwritable Sq Lite Database : ĠSQLite Database ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Writable Database (): ĠSQLite Database Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( writable Sq Lite Database Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwritable Sq Lite Database Ġ= Ġsuper . get Writable Database () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwritable Sq Lite Database !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Readable Database (): ĠSQLite Database Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( readable Sq Lite Database Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreadable Sq Lite Database Ġ= Ġsuper . get Readable Database () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreadable Sq Lite Database !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSQLite Database ) Ġ= Ġdb . exec SQL ( SQL _ CREATE _ ENTR IES ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Upgrade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġcode Ġif Ġthe Ġdatabase Ġneeds Ġto Ġbe Ġupgraded . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Down grade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġcode Ġif Ġthe Ġdatabase Ġneeds Ġto Ġbe Ġdown graded . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġall News Items : ĠList < News Item > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems : ĠMutable List < News Item > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsort Order Ġ= Ġ"$ COLUMN _ ID ĠDESC " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġreadable Database . query ( TABLE _ NAME , Ġnull , Ġnull , Ġnull , Ġnull , Ġnull , Ġsort Order ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( from Database Cursor ( cursor )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget News Item ( id : ĠLong ?) Ġ= Ġif Ġ( id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreadable Database . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTABLE _ NAME , Ġ Ġ// ĠThe Ġtable Ġto Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġ Ġ// ĠReturn Ġall Ġcolumns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ COLUMN _ ID Ġ= Ġ?", Ġ Ġ// ĠThe Ġcolumns Ġfor Ġthe ĠWHERE Ġclause ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( id . toString ()), Ġ Ġ// ĠThe Ġvalues Ġfor Ġthe ĠWHERE Ġclause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġ Ġ// Ġdon 't Ġgroup Ġthe Ġrows ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġ Ġ// Ġdon 't Ġfilter Ġby Ġrow Ġgroups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ COLUMN _ ID ĠASC " Ġ// ĠThe Ġsort Ġorder ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġif Ġ( it . moveTo First ()) Ġfrom Database Cursor ( it ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave News Items ( news Items : ĠList < News Item > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! news Items . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnews Items Ids Ġ= Ġnews Items . map Ġ{ Ġit . id Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAll ĠIDs Ġthat Ġare Ġin Ġthe Ġdatabase Ġbut Ġare Ġnot Ġin Ġthe Ġresult Ġshould Ġbe Ġdeleted Ġfrom Ġthe Ġdatabase . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall News Items . map Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġ! news Items Ids . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġdelete News Item ( it !! ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnews Items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave News Item ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġitem Ġexists , Ġupdate Ġit . ĠOtherwise , Ġcreate Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave News Item ( news Item : ĠNews Item ) Ġ= Ġget News Item ( news Item . id )?. let Ġ{ Ġexisting Ġ-> ĊĠĠĠĠĠĠĠ Ġupdate News Item ( existing . id !! , Ġnews Item ) ĊĠĠĠ Ġ} Ġ?: Ġinsert News Item ( news Item ) ĊĊĠĠĠ Ġfun Ġmark News Item Read ( news Item : ĠNews Item ) Ġ= Ġto Database Contents ( news Item ). let Ġ{ Ġvalues Ġ-> ĊĠĠĠĠĠĠĠ Ġvalues . put ( COLUMN _ READ , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġwritable Database . update ( TABLE _ NAME , Ġvalues , Ġ"$ COLUMN _ ID Ġ ĠLIKE Ġ?", ĠarrayOf ( news Item . id . toString ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinsert News Item ( news Item : ĠNews Item ) Ġ= Ġto Database Contents ( news Item ). let Ġ{ Ġvalues Ġ-> ĊĠĠĠĠĠĠĠ Ġvalues . put ( COLUMN _ READ , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġwritable Database . insert ( TABLE _ NAME , Ġnull , Ġvalues ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate News Item ( id : ĠLong , Ġnews Item : ĠNews Item ) Ġ= Ġwritable Database . update ( ĊĠĠĠĠĠĠĠ ĠTABLE _ NAME , ĊĠĠĠĠĠĠĠ Ġto Database Contents ( news Item ), ĊĠĠĠĠĠĠĠ Ġ"$ COLUMN _ ID ĠLIKE Ġ?", ĊĠĠĠĠĠĠĠ ĠarrayOf ( id . toString ()) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġdelete News Item ( id : ĠLong ) Ġ= Ġwritable Database . delete ( ĊĠĠĠĠĠĠĠ ĠTABLE _ NAME , ĊĠĠĠĠĠĠĠ Ġ"$ COLUMN _ ID ĠLIKE Ġ?", ĊĠĠĠĠĠĠĠ ĠarrayOf ( id . toString ()) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġfrom Database Cursor ( cursor : ĠCursor ) Ġ= ĠNews Item ( ĊĠĠĠĠĠĠĠ Ġcursor . getLong ( cursor . getColumnIndex OrThrow ( COLUMN _ ID )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ D UT CH _ TITLE )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ EN GL ISH _ TITLE )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ D UT CH _ SUB TITLE )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ EN GL ISH _ SUB TITLE )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ IMAGE _ URL )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ D UT CH _ TEXT )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ EN GL ISH _ TEXT )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ DATE _ PUBL ISHED )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ DATE _ LAST _ EDIT ED )), ĊĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( COLUMN _ AUTHOR _ NAME )), ĊĠĠĠĠĠĠĠ Ġcursor . getInt ( cursor . getColumnIndex OrThrow ( COLUMN _ READ )) Ġ== Ġ 1 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġto Database Contents ( news Item : ĠNews Item ?) Ġ= Ġif Ġ( news Item Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠContent Values () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Values Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ ID Ġto Ġnews Item . id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ D UT CH _ TITLE Ġto Ġnews Item . dut ch Title , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ EN GL ISH _ TITLE Ġto Ġnews Item . english Title , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ D UT CH _ SUB TITLE Ġto Ġnews Item . dut ch Subtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ EN GL ISH _ SUB TITLE Ġto Ġnews Item . english Subtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ IMAGE _ URL Ġto Ġnews Item . imageUrl , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ D UT CH _ TEXT Ġto Ġnews Item . dut ch Text , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ EN GL ISH _ TEXT Ġto Ġnews Item . english Text , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ DATE _ PUBL ISHED Ġto Ġnews Item . date Published , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ DATE _ LAST _ EDIT ED Ġto Ġnews Item . date Last Edited , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ AUTHOR _ NAME Ġto Ġnews Item . author Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCOLUMN _ READ Ġis ĠNOT Ġedited Ġhere , Ġbecause Ġit Ġcan Ġonly Ġbe Ġtriggered Ġonce Ġwhen Ġthe Ġitem Ġis Ġmarked Ġas Ġread . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġthis Ġvalue Ġwould Ġbe Ġoverwritten . ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġchange Ġthe Ġdatabase Ġschema , Ġyou Ġmust Ġincrement Ġthe Ġdatabase Ġversion . ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDATABASE _ VERSION Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDATABASE _ NAME Ġ= Ġ" News Items . db " ĊĊĠĠĠĠĠĠĠ Ġ// ĠTable Ġname ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTABLE _ NAME Ġ= Ġ" news _ item " ĊĊĠĠĠĠĠĠĠ Ġ// ĠTable Ġcolumns Ġ( id , Ġd utch _ title , Ġenglish _ title , Ġd utch _ subtitle , Ġenglish _ subtitle , Ġimage _ url , Ġd utch _ text , Ġenglish _ text , Ġdate _ published , Ġauthor _ name , Ġread ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ ID Ġ= Ġ" id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ D UT CH _ TITLE Ġ= Ġ" dut ch _ title " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ EN GL ISH _ TITLE Ġ= Ġ" english _ title " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ D UT CH _ SUB TITLE Ġ= Ġ" dut ch _ subtitle " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ EN GL ISH _ SUB TITLE Ġ= Ġ" english _ subtitle " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ IMAGE _ URL Ġ= Ġ" image _ url " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ D UT CH _ TEXT Ġ= Ġ" dut ch _ text " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ EN GL ISH _ TEXT Ġ= Ġ" english _ text " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ DATE _ PUBL ISHED Ġ= Ġ" date _ published " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ DATE _ LAST _ EDIT ED Ġ= Ġ" date _ last _ edited " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ AUTHOR _ NAME Ġ= Ġ" author _ name " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLUMN _ READ Ġ= Ġ" read " ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġdatabase ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSQL _ CREATE _ ENTR IES Ġ= Ġ" CREATE ĠTABLE Ġ" Ġ+ ĠTABLE _ NAME Ġ+ Ġ" Ġ(" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ ID Ġ+ Ġ" ĠINTEGER ĠPRIMARY ĠKEY ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ D UT CH _ TITLE Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ EN GL ISH _ TITLE Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ D UT CH _ SUB TITLE Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ EN GL ISH _ SUB TITLE Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ IMAGE _ URL Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ D UT CH _ TEXT Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ DATE _ PUBL ISHED Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ DATE _ LAST _ EDIT ED Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ EN GL ISH _ TEXT Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ AUTHOR _ NAME Ġ+ Ġ" ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOLUMN _ READ Ġ+ Ġ" ĠINTEGER " Ġ+ Ġ Ġ// Ġ 0 Ġ= Ġfalse , Ġ 1 Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ")" ĊĠĠĠ Ġ} Ċ } Ċ