package Ġcom . bo h reg ard . ex op layer comp osable Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . compose . runtime . static Composition Local Of Ċ import Ġcom . google . android . ex op layer 2 . database . Exo Database Provider Ċ import Ġcom . google . android . ex op layer 2 . upstream .* Ċ import Ġcom . google . android . ex op layer 2 . upstream . cache . Cache Data Sink Ċ import Ġcom . google . android . ex op layer 2 . upstream . cache . Cache DataSource Ċ import Ġcom . google . android . ex op layer 2 . upstream . cache . Least Recent ly Used Cache Ev ictor Ċ import Ġcom . google . android . ex op layer 2 . upstream . cache . Simple Cache Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġjava . io . File Ċ Ċ val ĠLocal DataStore Cache Ġ= Ġstatic Composition Local Of < DataStore Cache > Ġ{ ĊĠĠĠ Ġerror (" Cache Ġmust Ġbe Ġdefined ") Ċ } Ċ Ċ class ĠData Store Cache ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġ@ String Res Ġprivate Ġval ĠappName : ĠInt Ċ ) Ġ: ĠDataSource . Factory Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmax Cache Size Ġ= Ġ 1 0 0 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 L ĊĠĠĠ Ġprivate Ġval Ġmax FileSize Ġ= Ġ 5 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 L ĊĊĠĠĠ Ġprivate Ġval ĠdataSource Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbm Ġ= ĠDefault Bandwidth Meter . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġuser Agent Ġ= ĠUtil . getUser Agent ( context , Ġcontext . getString ( appName )) ĊĠĠĠĠĠĠĠ ĠDefault DataSource Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbm , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Http DataSource . Factory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set UserAgent ( userAgent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transfer Listener ( bm ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsimple Cache Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSimple Cache ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( context . cacheDir , Ġ" exo _ player _ cache "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLe ast Recent ly Used Cache Ev ictor ( max Cache Size ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx o Database Provider ( context ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate DataSource (): ĠDataSource Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCache DataSource ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Cache , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource . create DataSource (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile DataSource (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Data Sink ( simple Cache , Ġmax FileSize ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache DataSource . FLAG _ BLOCK _ ON _ CACHE Ġor ĠCache DataSource . FLAG _ IGNORE _ CACHE _ ON _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }