package Ġcom . example . ta h fid z do aq up lay Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . google . android . ex op layer 2 . Default Render ers Factory Ċ import Ġcom . google . android . ex op layer 2 . Default Render ers Factory . Extension Renderer Mode Ċ import Ġcom . google . android . ex op layer 2 . Render ers Factory Ċ import Ġcom . google . android . ex op layer 2 . database . Database Provider Ċ import Ġcom . google . android . ex op layer 2 . database . Exo Database Provider Ċ import Ġcom . google . android . ex op layer 2 . offline .* Ċ import Ġcom . google . android . ex op layer 2 . upstream .* Ċ import Ġcom . google . android . ex op layer 2 . upstream . cache .* Ċ import Ġcom . google . android . ex op layer 2 . util . Log Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException ĊĊ Ċ /** Ċ Ġ* ĠPlace holder Ġapplication Ġto Ġfacilitate Ġoverriding ĠApplication Ġmethods Ġfor Ġdebugging Ġand Ġtesting . Ċ Ġ*/ Ċ class ĠDemo Application Ġ: ĠApplication () Ġ{ ĊĠĠĠ Ġprotected Ġvar Ġuser Agent : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdatabase Provider : ĠDatabase Provider ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠEx o Database Provider ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġdownload Directory : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġget External Files Dir ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġfiles Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ@ get : Synchron ized ĊĠĠĠ Ġprotected Ġvar Ġdownload Cache : ĠCache ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprotected Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Content Directory Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Directory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDOWN LOAD _ CONTENT _ DIRECTORY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Cache ( download Content Directory , ĠNo Op Cache Ev ictor (), Ġdatabase Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġvar Ġdownload Manager : ĠDownload Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdownload Tracker : ĠDownload Tracker ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġuser Agent Ġ= ĠUtil . getUser Agent ( this , Ġ" Exo Player Demo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġa Ġ[ DataSource . Factory ]. Ġ Ġ*/ ĊĠĠĠ Ġfun Ġbuild DataSource Factory (): ĠDataSource . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupstream Factory Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault DataSource Factory ( this , Ġbuild Http DataSource Factory ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild ReadOnly Cache DataSource ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupstream Factory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Cache ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Http DataSource . Factory ]. Ġ Ġ*/ ĊĠĠĠ Ġfun Ġbuild Http DataSource Factory (): ĠHttp DataSource . Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault Http DataSource Factory ( userAgent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġwhether Ġextension Ġrender ers Ġshould Ġbe Ġused . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġuse Extension Render ers (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" with Extensions " Ġ== ĠBuild Config . FL AV OR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Render ers Factory ( prefer Extension Renderer : ĠBoolean ): ĠRender ers Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Extension Renderer Mode Ġval Ġextension Renderer Mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Extension Render ers ()) Ġif Ġ( prefer Extension Renderer ) ĠDefault Render ers Factory . EXTENSION _ RENDER ER _ MODE _ PREFER Ġelse ĠDefault Render ers Factory . EXTENSION _ RENDER ER _ MODE _ ON Ġelse ĠDefault Render ers Factory . EXTENSION _ RENDER ER _ MODE _ OFF ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault Render ers Factory ( Ġ/* Ġcontext = Ġ*/ this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extension Renderer Mode ( extension Renderer Mode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Download Manager (): ĠDownload Manager ? Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Download Manager () ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Download Tracker (): ĠDownload Tracker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Download Manager () ĊĠĠĠĠĠĠĠ Ġreturn Ġdownload Tracker ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġinit Download Manager () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( download Manager Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdownload Index Ġ= ĠDefault Download Index ( database Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Action File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDOWN LOAD _ ACTION _ FILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Index , Ġ Ġ/* Ġadd New Downloads As Completed = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Action File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDOWN LOAD _ TRACK ER _ ACTION _ FILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Index , Ġ Ġ/* Ġadd New Downloads As Completed = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown loader Constructor Helper Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDown loader Constructor Helper ( download Cache , Ġbuild Http DataSource Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Manager Ġ= ĠDownload Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġdownload Index , ĠDefault Downloader Factory ( downloader Constructor Helper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Tracker Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDownload Tracker ( Ġ/* Ġcontext = Ġ*/ this , Ġbuild DataSource Factory (), Ġdownload Manager !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupgrade Action File ( ĊĠĠĠĠĠĠĠ ĠfileName : ĠString , ĊĠĠĠĠĠĠĠ Ġdownload Index : ĠDefault Download Index , ĊĠĠĠĠĠĠĠ Ġadd New Downloads As Completed : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAction File Upgrade Util . upgrade And Delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( download Directory , ĠfileName ), Ġ Ġ/* Ġdownload Id Provider = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Index , Ġ Ġ/* Ġdelete On Failure = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd New Downloads As Completed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġupgrade Ġaction Ġfile : Ġ$ fileName ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Demo Application " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDOWN LOAD _ ACTION _ FILE Ġ= Ġ" actions " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDOWN LOAD _ TRACK ER _ ACTION _ FILE Ġ= Ġ" tracked _ actions " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDOWN LOAD _ CONTENT _ DIRECTORY Ġ= Ġ" downloads " ĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġbuild ReadOnly Cache DataSource ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupstream Factory : ĠDataSource . Factory ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache : ĠCache ? ĊĠĠĠĠĠĠĠ Ġ): ĠCache DataSource Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCache DataSource Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupstream Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile DataSource Factory (), Ġ Ġ/* Ġcache Write Data Sink Factory = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache DataSource . FLAG _ IGNORE _ CACHE _ ON _ ERROR , Ġ Ġ/* Ġevent Listener = Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }