/* Ċ Ġ* ĠModule : Ġr 2 - streamer - kotlin Ċ Ġ* ĠDevelopers : ĠQu ent in ĠG li os ca Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠRead ium ĠFoundation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġa ĠBSD - style Ġlicense Ġwhich Ġis Ġdetailed Ġin Ġthe Ċ Ġ* ĠLICENSE Ġfile Ġpresent Ġin Ġthe Ġproject Ġrepository Ġwhere Ġthis Ġsource Ġcode Ġis Ġmaintained . Ċ Ġ*/ Ċ Ċ package Ġorg . read ium . r 2 . shared . publication Ċ Ċ import Ġandroidx . annotation . String Res Ċ import Ġorg . read ium . r 2 . shared . R Ċ import Ġorg . read ium . r 2 . shared . User Exception Ċ import Ġorg . read ium . r 2 . shared . fetcher . Fetcher Ċ import Ġorg . read ium . r 2 . shared . publication . asset . Publication Asset Ċ import Ġorg . read ium . r 2 . shared . publication . services . Content Protection Service Ċ import Ġorg . read ium . r 2 . shared . util . Try Ċ Ċ /** Ċ Ġ* ĠBridge Ġbetween Ġa ĠContent ĠProtection Ġtechnology Ġand Ġthe ĠRead ium Ġtoolkit . Ċ Ġ* Ċ Ġ* ĠIts Ġrespons ibilities Ġare Ġto : Ċ Ġ* Ġ- ĠUn lock Ġa Ġpublication Ġby Ġreturning Ġa Ġcustomized Ġ[ Fetcher ]. Ċ Ġ* Ġ- ĠCreate Ġa Ġ[ Content Protection Service ] Ġpublication Ġservice . Ċ Ġ*/ Ċ interface ĠContent Protection Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġunlock Ġa Ġpotentially Ġprotected Ġpublication Ġasset . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe ĠStream er Ġwill Ġcreate Ġa Ġleaf Ġ[ fetcher ] Ġfor Ġthe Ġlow - level Ġ[ asset ] Ġaccess Ġ( e . g . ĊĠĠĠĠ Ġ* ĠArchive Fetcher Ġfor Ġa ĠZIP Ġarchive ), Ġto Ġavoid Ġhaving Ġeach ĠContent ĠProtection Ġopen Ġthe Ġasset Ġto ĊĠĠĠĠ Ġ* Ġcheck Ġif Ġit 's Ġprotected Ġor Ġnot . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠA Ġpublication Ġmight Ġbe Ġprotected Ġin Ġsuch Ġa Ġway Ġthat Ġthe Ġpackage Ġformat Ġcan 't Ġbe Ġrecognized , ĊĠĠĠĠ Ġ* Ġin Ġwhich Ġcase Ġthe ĠContent ĠProtection Ġwill Ġhave Ġthe Ġresponsibility Ġof Ġcreating Ġa Ġnew Ġleaf ĊĠĠĠĠ Ġ* Ġ[ Fetcher ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġ[ Protected Asset ] Ġin Ġcase Ġof Ġsuccess , Ġnull Ġif Ġthe Ġasset Ġis Ġnot Ġprotected Ġby Ġthis ĊĠĠĠĠ Ġ* Ġtechnology Ġor Ġa Ġ[ Publication . Opening Exception ] Ġif Ġthe Ġasset Ġcan 't Ġbe Ġsuccessfully Ġopened , ĊĠĠĠĠ Ġ* Ġeven Ġin Ġrestricted Ġmode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġopen ( ĊĠĠĠĠĠĠĠ Ġasset : ĠPublic ation Asset , ĊĠĠĠĠĠĠĠ Ġfetch er : ĠFetch er , ĊĠĠĠĠĠĠĠ Ġcredentials : ĠString ?, ĊĠĠĠĠĠĠĠ Ġallow User Interaction : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġsender : ĠAny ? ĊĠĠĠ Ġ): ĠTry < Protected Asset , ĠPublic ation . Opening Exception >? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHold s Ġthe Ġresult Ġof Ġopening Ġa Ġ[ Publication Asset ] Ġwith Ġa Ġ[ Content Protection ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġasset ĠProtected Ġasset Ġwhich Ġwill Ġbe Ġprovided Ġto Ġthe Ġparsers . ĊĠĠĠĠ Ġ* ĠIn Ġmost Ġcases , Ġthis Ġwill Ġbe Ġthe Ġasset Ġprovided Ġto ĠContent Protection :: open (), ĊĠĠĠĠ Ġ* Ġbut Ġa ĠContent ĠProtection Ġmight Ġmodify Ġit Ġin Ġsome Ġcases : ĊĠĠĠĠ Ġ* Ġ- ĠIf Ġthe Ġoriginal Ġasset Ġhas Ġa Ġmedia Ġtype Ġthat Ġcan 't Ġbe Ġrecognized Ġby Ġparsers , ĊĠĠĠĠ Ġ* ĠĠ Ġthe ĠContent ĠProtection Ġmust Ġreturn Ġan Ġasset Ġwith Ġthe Ġmatching Ġun protected Ġmedia Ġtype . ĊĠĠĠĠ Ġ* Ġ- ĠIf Ġthe ĠContent ĠProtection Ġtechnology Ġneeds Ġto Ġredirect Ġthe ĠStream er Ġto Ġa Ġdifferent Ġfile . ĊĠĠĠĠ Ġ* ĠĠ ĠFor Ġexample , Ġthis Ġcould Ġbe Ġused Ġto Ġdecrypt Ġa Ġpublication Ġto Ġa Ġtemporary Ġsecure Ġlocation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property Ġfetch er ĠPrimary Ġleaf Ġfetch er Ġto Ġbe Ġused Ġby Ġparsers . ĊĠĠĠĠ Ġ* ĠThe ĠContent ĠProtection Ġcan Ġunlock Ġresources Ġby Ġmodifying Ġthe ĠFetch er Ġprovided Ġto ĊĠĠĠĠ Ġ* ĠContent Protection :: open (), Ġfor Ġexample Ġby : ĊĠĠĠĠ Ġ* Ġ- ĠWr apping Ġthe Ġgiven Ġfetch er Ġin Ġa ĠTransform ing Fetcher Ġwith Ġa Ġde cryption ĠResource . Transformer ĊĠĠĠĠ Ġ* ĠĠ Ġfunction . ĊĠĠĠĠ Ġ* Ġ- ĠDis card ing Ġthe Ġprovided Ġfetch er Ġal together Ġand Ġcreating Ġa Ġnew Ġone Ġto Ġhandle Ġaccess ĊĠĠĠĠ Ġ* ĠĠ Ġrestrictions . ĠFor Ġexample , Ġby Ġcreating Ġan ĠHTTP Fetcher Ġwhich Ġwill Ġinject Ġa ĠBearer ĠToken Ġin ĊĠĠĠĠ Ġ* ĠĠ Ġrequests . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ property ĠonCreate Publication ĠCalled Ġon Ġevery Ġparsed ĠPublic ation . Builder . ĊĠĠĠĠ Ġ* ĠIt Ġcan Ġbe Ġused Ġto Ġmodify Ġthe Ġ` Manifest `, Ġthe Ġroot Ġ[ Fetcher ] Ġor Ġthe Ġlist Ġof Ġservice Ġfactories ĊĠĠĠĠ Ġ* Ġof Ġa Ġ[ Publication ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠProtected Asset ( ĊĠĠĠĠĠĠĠ Ġval Ġasset : ĠPublic ation Asset , ĊĠĠĠĠĠĠĠ Ġval Ġfetch er : ĠFetch er , ĊĠĠĠĠĠĠĠ Ġval ĠonCreate Publication : ĠPublic ation . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRepresents Ġa Ġspecific ĠContent ĠProtection Ġtechnology , Ġuniquely Ġidentified Ġwith Ġan Ġ[ uri ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠScheme ( ĊĠĠĠĠĠĠĠ Ġval Ġuri : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠLocal ized String ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġuri . hashCode () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġ( other Ġas ? ĠScheme )?. uri Ġ== Ġuri ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠRead ium ĠL CP ĠD RM Ġscheme . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠL cp Ġ= ĠScheme ( uri Ġ= Ġ" http :// read ium . org / 2 0 1 4 / 0 1 / l cp ", Ġname Ġ= ĠLocal ized String (" Read ium ĠL CP ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠAdobe ĠA DE PT ĠD RM Ġscheme . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠA dept Ġ= ĠScheme ( uri Ġ= Ġ" http :// ns . adobe . com / ade pt ", Ġname Ġ= ĠLocal ized String (" A dobe ĠA DE PT ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠException ( user MessageId : ĠInt , Ġvar arg Ġargs : ĠAny ?, Ġquantity : ĠInt ? Ġ= Ġnull , Ġcause : ĠThrowable ? Ġ= Ġnull ) Ġ: ĠUser Exception ( user MessageId , Ġquantity , Ġ* args , Ġcause Ġ= Ġcause ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor (@ String Res Ġuser MessageId : ĠInt , Ġvar arg Ġargs : ĠAny ?, Ġcause : ĠThrowable ? Ġ= Ġnull ) Ġ: Ġthis ( user MessageId , Ġ* args , Ġquantity Ġ= Ġnull , Ġcause Ġ= Ġcause ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠException Ġreturned Ġwhen Ġthe Ġgiven ĠContent ĠProtection Ġ[ scheme ] Ġis Ġnot Ġsupported Ġby Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġapp . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġclass ĠScheme NotSupported ( val Ġscheme : ĠScheme ? Ġ= Ġnull ) Ġ: ĠException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scheme ?. name Ġ== Ġnull ) ĠR . string . r 2 _ shared _ publication _ content _ protection _ exception _ not _ supported _ unknown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠR . string . r 2 _ shared _ publication _ content _ protection _ exception _ not _ supported , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheme ?. name ?. string ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ