package Ġio . dot lott ie . loader Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġio . dot lott ie . loader . defaults . Default Dot Lot tie Cache Ċ import Ġio . dot lott ie . loader . defaults . Default Dot Lot tie Converter Ċ import Ġio . dot lott ie . loader . models . Dot Lot tie Ċ import Ġio . dot lott ie . loader . models . Dot Lot tie Config Ċ import Ġio . dot lott ie . loader . models . Dot Lot tie Result Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . InputStream Ċ import Ġjava . util . zip . Zip InputStream Ċ Ċ /** Ċ Ġ* ĠProt otype Ġfor Ġload ers , Ċ Ġ* Ġsubclasses Ġmust Ġprovide Ġimplementation Ġfor Ġ[ load Internal ] Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Loader ( protected Ġval Ġcontext : ĠContext ) Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfiguration . ĠEither Ġper Ġinstance Ġor Ġdefault Ġto Ġglobal ĊĠĠĠĠ Ġ* Ġconfig Ġset Ġvia Ġ[ Dot Lot tie Loader . set Config ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdl Call Config : ĠDot Lot tie Config Ġ= ĠDot Lot tie Loader . global Config ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġmethod Ġto Ġset Ġa Ġcustom Ġconfiguration ĊĠĠĠĠ Ġ* Ġfor Ġthis Ġrequest Ġonly ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwith Config ( config : ĠDot Lot tie Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdl Call Config Ġ= Ġconfig . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Manager ?. initialize ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġaccessors Ġto Ġcache Ġstuff , Ġfallback Ġto Ġglobals ĊĠĠĠ Ġ// Ġthe Ġug lin ess Ġbecause Ġsome Ġj ack ass Ġmight 've Ġinit Ġa Ġglobal Ġconfig ĊĠĠĠ Ġ// Ġwith Ġnull s ? Ġno Ġbut Ġthat 's Ġon Ġyou Ġd ude ĊĠĠĠ Ġprivate Ġval Ġcache Manager : ĠDot Lot tie Cache ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdl Call Config . cache Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Dot Lot tie Loader . global Config . cache Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Default Dot Lot tie Cache . apply Ġ{ Ġinitialize ( context ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcache Strategy : ĠDot Lot tie Cache Strategy ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdl Call Config . cache Strategy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Dot Lot tie Loader . global Config . cache Strategy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Dot Lot tie Cache Strategy . DISK ĊĊĠĠĠ Ġprivate Ġval Ġconverter : ĠDot Lot tie Converter ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdl Call Config . converter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠDot Lot tie Loader . global Config . converter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠDefault Dot Lot tie Converter () ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcommit Ġactual Ġload , Ġlaunch Ġcoroutine Ġscope Ġand ĊĠĠĠĠ Ġ* Ġpass Ġup Ġthe Ġresult ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload ( listener : ĠDot Lot tie Result , Ġcache Key : String ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ( context . lifecycle Owner ()?. lifecycle Scope Ġ?: Global Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġcache Key ?: getDefault Cache Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcache Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Cache ( key , Ġcache Strategy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġload Internal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Manager . put Cache ( this , Ġkey , Ġcache Strategy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġon ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Success ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ Ġlistener . onError ( e ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġresource Ġentry Ġname Ġfor Ġraw Ġresource ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġval Ġfile Entry Name : ĠString ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinternal Ġloader Ġfunction Ġto Ġbe Ġoverridden ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġsuspend Ġfun Ġload Internal (): ĠDot Lot tie ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturn Ġdefault Ġcache Ġkey Ġfor Ġloader Ġtype ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġsuspend Ġfun ĠgetDefault Cache Name (): ĠString ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġparse Ġinput Ġstream ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġsuspend Ġfun Ġparse InputStream ( inputStream : ĠInputStream ): ĠDot Lot tie ? Ġ= ĊĠĠĠĠĠĠĠ Ġconverter . parse FileInputStream ( inputStream , Ġfile Entry Name ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġparse Ġzip Ġinput Ġstream ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġsuspend Ġfun Ġparse Zip InputStream ( inputStream : ĠInputStream ): ĠDot Lot tie ? Ġ= ĊĠĠĠĠĠĠĠ Ġconverter . parse Zip InputStream ( Zip InputStream ( inputStream )) ĊĊ Ċ }