package Ġcom . example . me ar . management Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġcom . example . me ar . constants . Control Types Ċ Ċ import Ġjava . lang . Exception Ċ Ċ import Ġorg . jetbrains . ank o . db .* Ċ import Ġorg . jetbrains . ank o . db . Managed SQLite Open Helper Ċ Ċ import Ġcom . example . me ar . models . Play Controls Ċ import Ġcom . example . me ar . repositories . Shuffle Repository Ċ Ċ class ĠDatabase Manager ( ctx : ĠContext ): ĠManaged SQLite Open Helper ( ctx , Ġ" Me ar ", ĊĠĠĠ Ġnull , Ġ 1 ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠDatabase Manager ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( ctx : ĠContext ): ĠDatabase Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠDatabase Manager ( ctx . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSQLite Database ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Track ", Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id " Ġto ĠINTEGER Ġ+ ĠPRIMARY _ KEY Ġ+ ĠUNIQUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Title " Ġto ĠTEXT , Ġ" Album " Ġto ĠTEXT , Ġ" Artist " Ġto ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Duration " Ġto ĠINTEGER , Ġ" FilePath " Ġto ĠTEXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Track Count ", Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id " Ġto ĠINTEGER Ġ+ ĠPRIMARY _ KEY Ġ+ ĠUNIQUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Total S ongs " Ġto ĠINTEGER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Play Count ", Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id " Ġto ĠINTEGER Ġ+ ĠPRIMARY _ KEY Ġ+ ĠAUTO INCREMENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Play Count " Ġto ĠINTEGER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Track Id " Ġto ĠINTEGER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Settings ", Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id " Ġto ĠINTEGER Ġ+ ĠPRIMARY _ KEY Ġ+ ĠUNIQUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Dark Theme " Ġto Ġorg . jetbrains . ank o . db . REAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Shuffle ", Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id " Ġto ĠINTEGER Ġ+ ĠPRIMARY _ KEY Ġ+ ĠUNIQUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mode " Ġto ĠTEXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Repeat ", Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id " Ġto ĠINTEGER Ġ+ ĠPRIMARY _ KEY Ġ+ ĠUNIQUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mode " Ġto ĠTEXT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinitialize Shuffle ( db ) ĊĠĠĠĠĠĠĠ Ġinitialize Repeat ( db ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Upgrade ( db : ĠSQLite Database ?, Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. drop Table (" Track ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. drop Table (" Track Count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. drop Table (" Play Count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. drop Table (" Settings ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. drop Table (" Shuffle ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb !!. drop Table (" Repeat ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Shuffle ( db : ĠSQLite Database ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb !!. insert (" Shuffle ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mode " Ġto ĠControl Types . SH UFF LE _ OFF ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġinitialize Repeat ( db : ĠSQLite Database ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb !!. insert (" Repeat ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mode " Ġto ĠControl Types . REPEAT _ OFF ) ĊĠĠĠ Ġ} Ċ } ĊĊ