package Ġcom . inst ri ker . w cre . repositories Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite Exception Ċ import Ġandroid . util . Log Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ Ċ import Ġcom . inst ri ker . w cre . R Ċ import Ġcom . inst ri ker . w cre . config . Constants Ċ Ċ // https :// gist . github . com / 1 2 7 1 7 9 5 Ċ Ċ class ĠGame Content Open Helper ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġopen Database (): ĠSQLite Database Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb File Ġ= Ġcontext . get Database Path ( DB _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(!_ database Inited ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Game Content Open Helper ", Ġ" Initializing Ġthe Ġdatabase ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . initial ise Database For Current Version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ database Inited Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġopen Readonly Database ( db File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġinitialise Database For Current Version () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb File Ġ= Ġcontext . get Database Path ( DB _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen Readonly Database For Current Version ( db File ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠOK Ġfound , Ġjust Ġcontinue ĊĠĠĠĠĠĠĠ Ġif Ġ( db Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Game Content Open Helper ", Ġ" Database Ġalready Ġexists , Ġskipping Ġinitialization ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCould Ġnot Ġfind Ġthe Ġdb , Ġinitialize Ġit ĊĠĠĠĠĠĠĠ Ġthis . copy Database ( db File ) ĊĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen Readonly Database For Current Version ( db File ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( db Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Could Ġnot Ġfind Ġthe Ġdatabase Ġfor Ġthe Ġcurrent Ġapplication Ġversion .") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġopen Readonly Database For Current Version ( db File : ĠFile ): ĠSQLite Database ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdb : ĠSQLite Database ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġopen Readonly Database ( db File ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġversion : ĠInt ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġdb . version ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Game Content Open Helper ", Ġ" Current Ġdatabase Ġis Ġversion Ġ$ version ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠSQLite Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Version Ġ= Ġthis . context . resources . getInteger ( R . integer . expected Database Version ) ĊĠĠĠĠĠĠĠ Ġif Ġ( version Ġ!= Ġexpected Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Game Content Open Helper ", Ġ" Invalid Ġversion , Ġwas Ġexpecting Ġ$ expected Version ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠSQLite Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġopen Readonly Database ( db File : ĠFile ): ĠSQLite Database Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSQLite Database . open Database ( db File . path , Ġnull , ĠSQLite Database . OPEN _ READ ONLY Ġor ĠSQLite Database . NO _ LOCAL IZED _ COLL ATORS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcopy Database ( db File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Game Content Open Helper ", Ġ" Creating Ġnew ĠDatabase Ġfile ") ĊĠĠĠĠĠĠĠ Ġif Ġ( createNew Database ( db File )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Database Content ( db File ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Could Ġnot Ġinitialize Ġdatabase Ġfile .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcreate New Database ( db File : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġfile Ġif Ġit Ġdoes Ġnot Ġexist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġdb File . parent File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! path . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġpath . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġsuccess Ġ&& Ġdb File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġsuccess Ġ&& Ġdb File . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuccess ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Constants . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Game Content Open Helper ", Ġ" Unexpected Ġerror Ġoccurs Ġwhile Ġcop ing Ġgame Ġcontent Ġdatabase ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcopy Database Content ( db File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Game Content Open Helper ", Ġ" Fill ing ĠDatabase Ġdata ") ĊĊĠĠĠĠĠĠĠ Ġvar ĠinputStream : ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġcontext . assets . open ( DB _ NAME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( db File ). use Ġ{ Ġos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . copy To ( os ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Game Content Open Helper ", Ġ" Database Ġready ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Constants . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Game Content Open Helper ", Ġ" Unexpected Ġerror Ġoccurs Ġwhile Ġcop ing Ġgame Ġcontent Ġdatabase ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Constants . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Game Content Open Helper ", Ġ" Unexpected Ġerror Ġoccurs Ġwhile Ġcop ing Ġgame Ġcontent Ġdatabase ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDB _ NAME Ġ= Ġ" Red bg c Content . sqlite " ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġ_ database Inited Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ }