// ĠCopyright Ġ 2 0 1 8 - 2 0 2 0 ĠTwitter , ĠInc . Ċ // ĠLicensed Ġunder Ġthe ĠMo Pub ĠSDK ĠLicense ĠAgreement Ċ // Ġhttp :// www . m op ub . com / legal / sdk - license - agreement / Ċ Ċ package Ġcom . m op ub . mobile ads Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . Type Adapter Ċ import Ġcom . google . gson . Type Adapter Factory Ċ import Ġcom . google . gson . annotations . Expose Ċ import Ġcom . google . gson . annotations . SerializedName Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcom . google . gson . stream . Json Reader Ċ import Ġcom . google . gson . stream . Json Token Ċ import Ġcom . google . gson . stream . Json Writer Ċ import Ġcom . m op ub . common .* Ċ import Ġcom . m op ub . common . Url Handler . Result Actions Ċ import Ġcom . m op ub . common . logging . Mo Pub Log . Sdk Log Event . CUSTOM Ċ import Ġcom . m op ub . common . logging . Mo Pub Log . log Ċ import Ġcom . m op ub . common . util . Intent s Ċ import Ġcom . m op ub . exceptions . Intent Not Res olvable Exception Ċ import Ġcom . m op ub . mobile ads . Video Tracking Event .* Ċ import Ġcom . m op ub . mobile ads . Video Tracking Event . Companion . fromString Ċ import Ġcom . m op ub . network . Tracking Request . make V ast Tracking HttpRequest Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Serializable Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ import Ġkotlin . math . min Ċ Ċ @ Mock able Ċ class ĠV ast Video Config Ġ: ĠSerializable Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠserialVersionUID : ĠLong Ġ= Ġ 3 L ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class , ĠClass NotFoundException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġfrom V ast Video Config String ( input : ĠString ): ĠV ast Video Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter Factory ( V ast Video Config Type Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( input , ĠV ast Video Config :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ IMP RESS ION ) ĊĠĠĠ Ġprivate Ġval Ġ_ imp ression Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġimp ression Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ imp ression Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ PAUSE ) ĊĠĠĠ Ġprivate Ġval Ġ_ pause Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġpause Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ pause Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ RE SU ME ) ĊĠĠĠ Ġprivate Ġval Ġ_ resume Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġresume Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ resume Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ COMPLETE ) ĊĠĠĠ Ġprivate Ġval Ġ_ complete Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġcomplete Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ complete Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ CLOSE ) ĊĠĠĠ Ġprivate Ġval Ġ_ close Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġclose Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ close Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ SKIP ) ĊĠĠĠ Ġprivate Ġval Ġ_ skip Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġskip Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ skip Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ CLICK ) ĊĠĠĠ Ġprivate Ġval Ġ_ click Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġclick Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ click Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ ERROR ) ĊĠĠĠ Ġprivate Ġval Ġ_ error Track ers Ġ= Ġmutable ListOf < V ast Tracker >() ĊĠĠĠ Ġval Ġerror Track ers : ĠArrayList < V ast Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ error Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ FR ACTION AL ) ĊĠĠĠ Ġprivate Ġval Ġ_ fraction al Track ers Ġ= Ġmutable ListOf < V ast Fraction al Progress Tracker >() ĊĠĠĠ Ġval Ġfraction al Track ers : ĠArrayList < V ast Fraction al Progress Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ fraction al Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ TRACK ERS _ AB SOL UTE ) ĊĠĠĠ Ġprivate Ġval Ġ_ absolute Track ers Ġ= Ġmutable ListOf < V ast Absolute Progress Tracker >() ĊĠĠĠ Ġval Ġabsolute Track ers : ĠArrayList < V ast Absolute Progress Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArrayList (_ absolute Track ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose Ġ@ SerializedName ( Constants . VIEW ABILITY _ VER IFICATION _ RESOURCES ) ĊĠĠĠ Ġprivate Ġval Ġ_ view ability V endors Ġ= Ġmutable Set Of < View ability Vendor >() ĊĠĠĠ Ġval Ġview ability V endors : ĠSet < View ability Vendor > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHashSet (_ view ability V endors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ URL _ CLICK TH ROUGH ) ĊĠĠĠ Ġvar Ġclick Through Url : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ URL _ NETWORK _ MEDIA _ FILE ) ĊĠĠĠ Ġvar Ġnetwork Media File Url : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ URL _ DISK _ MEDIA _ FILE ) ĊĠĠĠ Ġvar Ġdisk Media File Url : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ SKIP _ OFFSET ) ĊĠĠĠ Ġvar Ġskip Offset : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ COMP AN ION _ AD _ LAND SC APE ) ĊĠĠĠ Ġprivate Ġvar Ġlandscape V ast Companion Ad Config : ĠV ast Companion Ad Config ? Ġ= Ġnull ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ COMP AN ION _ AD _ POR TRA IT ) ĊĠĠĠ Ġprivate Ġvar Ġpor trait V ast Companion Ad Config : ĠV ast Companion Ad Config ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ ICON _ CONFIG ) ĊĠĠĠ Ġvar Ġvast Icon Config : ĠV ast Icon Config ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ IS _ RE WAR DED ) ĊĠĠĠ Ġvar Ġis Rew arded : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ ENABLE _ CLICK _ EXP ) ĊĠĠĠ Ġvar Ġenable Click Experiment : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ// ĠCustom Ġextensions ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ CUSTOM _ TEXT _ CT A ) ĊĠĠĠ Ġvar Ġcustom C ta Text : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue Ġ?: Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ CUSTOM _ TEXT _ SKIP ) ĊĠĠĠ Ġvar Ġcustom Skip Text : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue Ġ?: Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ CUSTOM _ CLOSE _ ICON _ URL ) ĊĠĠĠ Ġvar Ġcustom Close Icon Url : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue Ġ?: Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ VIDEO _ VIEW ABILITY _ TRACK ER ) ĊĠĠĠ Ġvar Ġvideo View ability Tracker : ĠVideo View ability Tracker ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue Ġ?: Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMo Pub - specific Ġmetadata ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ DSP _ CRE ATIVE _ ID ) ĊĠĠĠ Ġvar Ġd sp Creative Id : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue Ġ?: Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ PRIV ACY _ ICON _ IMAGE _ URL ) ĊĠĠĠ Ġvar Ġprivacy Information Icon ImageUrl : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue Ġ?: Ġfield ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ@ Expose ĊĠĠĠ Ġ@ SerializedName ( Constants . V AST _ PRIV ACY _ ICON _ CLICK _ URL ) ĊĠĠĠ Ġvar Ġprivacy Information Icon Click through Url : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet ters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Imp ression Track ers ( imp ression Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ imp ression Track ers . addAll ( imp ression Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Resume Track ers ( resume Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ resume Track ers . addAll ( resume Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Fraction al Track ers ( fraction al Track ers : ĠList < V ast Fraction al Progress Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ fraction al Track ers . addAll ( fraction al Track ers ) ĊĠĠĠĠĠĠĠ Ġ_ fraction al Track ers . sort () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Absolute Track ers ( absolute Track ers : ĠList < V ast Absolute Progress Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ absolute Track ers . addAll ( absolute Track ers ) ĊĠĠĠĠĠĠĠ Ġ_ absolute Track ers . sort () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Complete Track ers ( complete Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ complete Track ers . addAll ( complete Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Pause Track ers ( pause Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ pause Track ers . addAll ( pause Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Close Track ers ( close Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ close Track ers . addAll ( close Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Skip Track ers ( skip Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ skip Track ers . addAll ( skip Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Click Track ers ( click Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ click Track ers . addAll ( click Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Error Track ers ( error Track ers : ĠList < V ast Tracker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ error Track ers . addAll ( error Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd View ability V endors ( view ability V endors : ĠSet < View ability Vendor > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ability V endors ?. let Ġ{ Ġ_ view ability V endors . addAll ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġinternal Ġvideo Ġtrack ers Ġfrom Ġa ĠJSONObject Ġin Ġthe Ġform : ĊĠĠĠĠ Ġ* Ġ{ ĊĠĠĠĠ Ġ* Ġurls : Ġ[ Ġ"... %% VIDEO _ EVENT %% ...", Ġ... Ġ], ĊĠĠĠĠ Ġ* Ġevents : Ġ[ Ġ" comp anion Ad View ", Ġ... Ġ] ĊĠĠĠĠ Ġ* Ġ} ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠEach Ġevent Ġadds Ġa Ġcorresponding Ġtracker Ġtype Ġwith Ġall Ġthe Ġlisted Ġurls , Ġwith Ġ%% VIDEO _ EVENT %% ĊĠĠĠĠ Ġ* Ġreplaced Ġwith Ġthe Ġevent Ġname . ĠThe Ġcurrently Ġsupported Ġtrack ers Ġand Ġtheir Ġmappings Ġare : ĊĠĠĠĠ Ġ* Ġ> Ġstart : Ġadd Absolute Track ers ( url , Ġ 0 ) ĊĠĠĠĠ Ġ* Ġ> Ġfirst Qu art ile : Ġadd Fraction al Track ers ( url , Ġ 0 . 2 5 f ) ĊĠĠĠĠ Ġ* Ġ> Ġmid point : Ġadd Fraction al Track ers ( url , Ġ 0 . 5 f ) ĊĠĠĠĠ Ġ* Ġ> Ġthird Qu art ile : Ġadd Fraction al Track ers ( url , Ġ 0 . 7 5 f ) ĊĠĠĠĠ Ġ* Ġ> Ġcomplete : Ġadd Complete Track ers ( url ) ĊĠĠĠĠ Ġ* Ġ> Ġcompanion Ad View : ĠV ast Companion Ad Config . add Creative View Track ers ĊĠĠĠĠ Ġ* Ġ> Ġcompanion Ad Click : ĠV ast Companion Ad Config . add Click Track ers ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Track ers ĠA ĠJSONObject Ġwith Ġthe Ġurls Ġand Ġevents Ġto Ġtrack ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Video Track ers ( video Track ers : ĠJSONObject ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( video Track ers Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġurls Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Track ers . opt JSONArray ( Constants . VIDEO _ TRACK ING _ URL S _ KEY ) ĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Track ers . opt JSONArray ( Constants . VIDEO _ TRACK ING _ EVENTS _ KEY ) ĊĠĠĠĠĠĠĠ Ġif Ġ( urls Ġ== Ġnull Ġ|| Ġevents Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġevents . length ()) Ġ{ Ġ// ĠJSONArray Ġisn 't ĠIterable Ġ- _- ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠeventName Ġ= Ġevents . opt String ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurls For Event Ġ= Ġh yd rate Urls ( eventName , Ġurls ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġfrom String ( eventName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( eventName Ġ== Ġnull Ġ|| Ġurls For Event Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTART Ġ-> Ġadd Start Track ers For Urls ( urls For Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIRST _ QU AR TILE , ĠM ID POINT , ĠTH IRD _ QU AR TILE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Fraction al Track ers For Urls ( urls For Event , Ġevent . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMP LETE Ġ-> Ġadd Complete Track ers For Urls ( urls For Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMP AN ION _ AD _ VIEW Ġ-> Ġadd Companion Ad View Track ers For Urls ( urls For Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMP AN ION _ AD _ CLICK Ġ-> Ġadd Companion Ad Click Track ers For Urls ( urls For Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlog ( CUSTOM , Ġ" Encounter ed Ġunknown Ġvideo Ġtracking Ġevent : Ġ$ eventName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset V ast Companion Ad ( ĊĠĠĠĠĠĠĠ Ġlandscape V ast Companion Ad Config : ĠV ast Companion Ad Config ?, ĊĠĠĠĠĠĠĠ Ġpor trait V ast Companion Ad Config : ĠV ast Companion Ad Config ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . land scape V ast Companion Ad Config Ġ= Ġlandscape V ast Companion Ad Config ĊĠĠĠĠĠĠĠ Ġthis . portrait V ast Companion Ad Config Ġ= Ġpor trait V ast Companion Ad Config ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget V ast Companion Ad ( orientation : ĠInt ): ĠV ast Companion Ad Config ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . OR IENTATION _ POR TRA IT Ġ-> Ġpor trait V ast Companion Ad Config ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration . OR IENTATION _ LAND SC APE Ġ-> Ġlandscape V ast Companion Ad Config ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlandscape V ast Companion Ad Config ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġor Ġnot Ġthere Ġis Ġa Ġcompanion Ġad Ġset . ĠThere Ġmust Ġbe Ġboth Ġa Ġlandscape Ġand Ġa ĊĠĠĠĠ Ġ* Ġpor trait Ġcompanion Ġad Ġset Ġfor Ġthis Ġto Ġbe Ġtrue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġboth Ġthe Ġlandscape Ġand Ġpor trait Ġcompanion Ġads Ġare Ġset , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Companion Ad (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlandscape V ast Companion Ad Config Ġ!= Ġnull Ġ&& Ġpor trait V ast Companion Ad Config Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġstarts Ġplaying . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Imp ression ( context : ĠContext , Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ imp ression Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġclicked . ĠHandles Ġforwarding Ġthe Ġuser Ġto Ġthe Ġspecified Ġclick Ġthrough ĊĠĠĠĠ Ġ* Ġurl , Ġcalling Ġ[ Activity . on Activity Result ] Ġwhen Ġdone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity ĠĠĠĠĠĠĠ ĠUsed Ġto Ġcall ĠstartActivity For Result Ġwith Ġprovided Ġrequest Code . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime Ġwhen Ġclicked . ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĠĠĠĠ ĠCode Ġthat Ġidentifies Ġwhat Ġkind Ġof Ġactivity Ġrequest Ġis Ġgoing Ġto Ġbe ĊĠĠĠĠ Ġ* Ġmade . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Click For Result ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity , Ġcontent Play Head : ĠInt , ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Click ( activity , Ġcontent Play Head , Ġrequest Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġclicked . ĠHandles Ġforwarding Ġthe Ġuser Ġto Ġthe Ġspecified Ġclick Ġthrough ĊĠĠĠĠ Ġ* Ġurl . ĠDoes Ġnot Ġprovide Ġany Ġfeedback Ġwhen Ġopened Ġactivity Ġis Ġfinished . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠUsed Ġto Ġcall ĠstartActivity . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime Ġwhen Ġclicked . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Click Without Result ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġcontent Play Head : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Click ( context . application Context , Ġcontent Play Head , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġclicked . ĠHandles Ġforwarding Ġthe Ġuser Ġto Ġthe Ġspecified Ġclick Ġthrough ĊĠĠĠĠ Ġ* Ġurl . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠIf Ġan ĠActivity Ġcontext , Ġused Ġto Ġcall ĠstartActivity For Result Ġwith ĊĠĠĠĠ Ġ* Ġprovided Ġrequest Code ; Ġotherwise , Ġused Ġto Ġcall ĠstartActivity . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime Ġwhen Ġclicked . ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĠĠĠĠ ĠRequired Ġwhen Ġthe Ġcontext Ġis Ġan ĠActivity ; Ġcode Ġthat Ġidentifies Ġwhat ĊĠĠĠĠ Ġ* Ġkind Ġof Ġactivity Ġrequest Ġis Ġgoing Ġto Ġbe Ġmade . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle Click ( context : ĠContext , Ġcontent Play Head : ĠInt , Ġrequest Code : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ click Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( click Through Url . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Handler Ġ= ĠUrl Handler . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with D sp Creative Id ( dsp Creative Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. without Mo Pub Browser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Supported Url Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . IGNORE _ AB OUT _ SCHEME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . OPEN _ APP _ MARK ET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . OPEN _ NATIVE _ BROWSER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . OPEN _ IN _ APP _ BROWSER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . HANDLE _ SHARE _ TW E ET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . FOLLOW _ DE EP _ LINK _ WITH _ FALL BACK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUrl Action . FOLLOW _ DE EP _ LINK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Result Actions ( object Ġ: ĠResult Actions Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġurl Handling Succeeded ( url : ĠString , Ġurl Action : ĠUrl Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url Action Ġ== ĠUrl Action . OPEN _ IN _ APP _ BROWSER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Mo Pub Browser . DEST INATION _ URL _ KEY , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Mo Pub Browser . DSP _ CRE ATIVE _ ID , Ġd sp Creative Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠMo Pub Browser :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠInt ents . getStart Activity Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , Ġclazz , Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Activity Ġcontext Ġrequires Ġa Ġrequest Code " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . startActivity ( context , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCUSTOM , Ġ" Activity Ġ${ clazz . name } Ġnot Ġfound . ĠDid Ġyou Ġdeclare Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" it Ġin Ġyour ĠAndroid Manifest . xml ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIntent Not Res olvable Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCUSTOM , Ġ" Activity Ġ${ clazz . name } Ġnot Ġfound . ĠDid Ġyou Ġdeclare Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" it Ġin Ġyour ĠAndroid Manifest . xml ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġurl Handling Failed ( url : ĠString , Ġlast Failed Url Action : ĠUrl Action ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclick Through Url ?. let Ġ{ Ġurl Handler . handle Url ( context , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġnot Ġfinished Ġand Ġis Ġres umed Ġfrom Ġthe Ġmiddle Ġof Ġthe Ġvideo . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Resume ( context : ĠContext , Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ resume Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġnot Ġfinished Ġand Ġis Ġpaused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Pause ( context : ĠContext , Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ pause Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġclosed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Close ( context : ĠContext , Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ close Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġskipped . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Skip ( context : ĠContext , Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ skip Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġvideo Ġis Ġplayed Ġcompletely Ġwithout Ġskipping . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime Ġ( should Ġbe Ġduration Ġof Ġvideo ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Complete ( context : ĠContext , Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ complete Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthere Ġis Ġa Ġproblem Ġwith Ġthe Ġvideo . ĠRefer Ġto Ġthe Ġpossible Ġ[ V ast ErrorCode ] s ĊĠĠĠĠ Ġ* Ġfor Ġa Ġlist Ġof Ġproblems . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠĠĠĠ ĠThe Ġcontext . ĠCan Ġbe Ġapplication Ġor Ġactivity Ġcontext . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontent Play Head ĠCurrent Ġvideo Ġplayback Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Error ( context : ĠContext , ĠerrorCode : ĠV ast ErrorCode ?, Ġcontent Play Head : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmake V ast Tracking HttpRequest ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error Track ers , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Play Head , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Media File Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġunt rigger ed ĠV AST Ġprogress Ġtrack ers Ġwith Ġa Ġprogress Ġbefore Ġthe Ġprovided Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcurrent Position Millis Ġthe Ġcurrent Ġvideo Ġposition Ġin Ġmilliseconds . ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Length Millis Ġthe Ġtotal Ġvideo Ġlength . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Unt rigger ed Track ers Before ( ĊĠĠĠĠĠĠĠ Ġcurrent Position Millis : ĠInt , ĊĠĠĠĠĠĠĠ Ġvideo Length Millis : ĠInt ĊĠĠĠ Ġ): ĠList < V ast Tracker > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( video Length Millis Ġ<= Ġ 0 Ġ|| Ġcurrent Position Millis Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList < V ast Tracker >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabsolute Test Ġ= ĠV ast Absolute Progress Tracker . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", Ġcurrent Position Millis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ absolute Track ers . forEach Ġ{ Ġtracker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tracker Ġ<= Ġabsolute Test Ġ&& Ġ! tracker . is Tracked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( tracker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction al Test Ġ= ĠV ast Fraction al Progress Tracker . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Position Millis Ġ/ Ġvideo Length Millis . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ fraction al Track ers . forEach Ġ{ Ġtracker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tracker Ġ<= Ġfraction al Test Ġ&& Ġ! tracker . is Tracked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( tracker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnumber Ġof Ġunt rigger ed Ġprogress Ġtrack ers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠInteger Ġcount Ġ>= Ġ 0 Ġof Ġthe Ġremaining Ġprogress Ġtrack ers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġremaining Progress Tracker Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Unt rigger ed Track ers Before ( Int . MAX _ VALUE , ĠInt . MAX _ VALUE ). size ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġskip Ġoffset Ġin Ġmilliseconds . ĠIf Ġthe Ġskip Ġoffset Ġwould Ġbe Ġpast Ġthe Ġvideo Ġduration , ĊĠĠĠĠ Ġ* Ġthis Ġreturns Ġthe Ġvideo Ġduration . ĠReturns Ġnull Ġwhen Ġthe Ġskip Ġoffset Ġis Ġnot Ġset Ġor Ġcannot Ġbe Ġparsed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvideo Duration ĠUsed Ġto Ġcalculate Ġpercentage Ġbased Ġoffsets . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġskip Ġoffset Ġin Ġmilliseconds . ĠCan Ġreturn Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Number FormatException :: class ) ĊĠĠĠ Ġfun Ġget Skip Offset Millis ( video Duration : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġskip Offset ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Absolute Progress Tracker . is Absolute Tracker ( it ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Absolute Progress Tracker . parse Absolute Offset ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Fraction al Progress Tracker . is Percentage Tracker ( it ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Fraction al Progress Tracker . parse Percentage Offset ( it , Ġvideo Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( CUSTOM , Ġ" Invalid ĠV AST Ġskip offset Ġformat : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġskip Ms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( skip Ms , Ġvideo Duration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthis ĠV ast Video Config Ġto Ġa ĠString Ġ( for Ġparcel ization ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠString Ġrepresenting Ġthis ĠV ast Video Config . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠtoJson String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter Factory ( V ast Video Config Type Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠ Ġreturn Ġgson . toJson ( this @ V ast Video Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġh yd rate Urls ( event : ĠString ?, Ġurls : ĠJSONArray ): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhy dr ated Urls : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġurls . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġurls . opt String ( i ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhy dr ated Urls . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . replace ( Constants . VIDEO _ TRACK ING _ URL _ MACRO , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhy dr ated Urls ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate V ast Track ers For Urls ( urls : ĠList < String >): ĠList < V ast Tracker > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġurls . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Tracker . Builder ( it ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Complete Track ers For Urls ( urls : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Complete Track ers ( create V ast Track ers For Urls ( urls )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Start Track ers For Urls ( urls : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Absolute Track ers ( urls . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Absolute Progress Tracker . Builder ( it , Ġ 0 ). build () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Fraction al Track ers For Urls ( urls : ĠList < String >, Ġfraction : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Fraction al Track ers ( urls . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ast Fraction al Progress Tracker . Builder ( it , Ġfraction ). build () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Companion Ad View Track ers For Urls ( urls : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompanion Ad View Track ers Ġ= Ġcreate V ast Track ers For Urls ( urls ) ĊĠĠĠĠĠĠĠ Ġlandscape V ast Companion Ad Config ?. add Creative View Track ers ( comp anion Ad View Track ers ) ĊĠĠĠĠĠĠĠ Ġpor trait V ast Companion Ad Config ?. add Creative View Track ers ( comp anion Ad View Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Companion Ad Click Track ers For Urls ( urls : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompanion Ad Click Track ers Ġ= Ġcreate V ast Track ers For Urls ( urls ) ĊĠĠĠĠĠĠĠ Ġlandscape V ast Companion Ad Config ?. add Click Track ers ( comp anion Ad Click Track ers ) ĊĠĠĠĠĠĠĠ Ġpor trait V ast Companion Ad Config ?. add Click Track ers ( comp anion Ad Click Track ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠV ast Video Config Type Adapter Factory Ġ: ĠType Adapter Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny ?> Ġcreate ( gson : ĠGson ?, Ġtype Token : ĠType Token < T >? ): ĠType Adapter < T >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type Token Ġ== Ġnull Ġ|| Ġ! Class :: class . java . isAssignableFrom ( type Token . raw Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠV ast Video Config . V ast Video Config Type Adapter () Ġas ĠType Adapter < T > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠV ast Video Config Type Adapter Ġ: ĠType Adapter < Class < *> ?> () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( json Writer : ĠJson Writer ?, Ġclazz : ĠClass < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer Ġ== Ġnull Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Writer . null Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġjson Writer . value ( clazz . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread ( json Reader : ĠJson Reader ?): ĠClass < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Reader Ġ== Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Reader . peek () Ġ== ĠJson Token . NULL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Reader . next Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass . forName ( json Reader . next String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ