package Ġnet . n end . n end plugin Ċ Ċ import Ġandroid . app . Activity Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġnet . n end . android . N end Ad User Feature Ċ import Ġnet . n end . android . N end Ad Video Ċ import Ġorg . json . JSONObject Ċ Ċ abstract Ġclass ĠVideo Ad < Ad Ġ: ĠN end Ad Video >( private Ġval Ġactivity : ĠActivity ?) Ġ: ĠAd B rid ger () Ġ{ ĊĊĠĠĠ Ġvar Ġvideo : ĠAd ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall ( call : ĠMethod Call , Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( target Method ( call . method )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . Is Ready Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . success ( video ?. is Loaded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . Load Ad Ġ-> Ġvideo ?. load Ad () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . Show Ad Ġ-> Ġvideo ?. show Ad ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . Release Ad Ġ-> Ġvideo ?. release Ad () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . Med iation Name Ġ-> Ġvideo ?. set Med iation Name ( call . argument (" medi ation Name ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . UserId Ġ-> Ġvideo ?. set UserId ( call . argument (" userId ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Name . User Feature Ġ-> Ġvideo ?. setUser Feature ( generate User Feature From ( call . arguments ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġinit Ad ( ad Unit : ĠAd Unit ?) ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate User Feature From ( arguments : ĠJSONObject ): ĠN end Ad User Feature Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠN end Ad User Feature . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . opt JSONObject (" user Feature ") ?. let Ġ{ Ġuser Feature Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Feature . has (" age ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Age ( user Feature . getInt (" age ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Feature . has (" gender ")) Ġuser Feature . getInt (" gender "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġset Gender ( N end Ad User Feature . Gender . M ALE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġset Gender ( N end Ad User Feature . Gender . F EM ALE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Feature . opt JSONObject (" birthday ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Birth day ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getInt (" year "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getInt (" month "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getInt (" day ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Feature . opt JSONObject (" custom String Params ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Custom Feature ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Feature . opt JSONObject (" custom Integer Params ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Custom Feature ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Feature . opt JSONObject (" custom Double Params ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Custom Feature ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Feature . opt JSONObject (" custom Boolean Params ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Custom Feature ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Custom Feature ( builder : ĠN end Ad User Feature . Builder , Ġjson Obj : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġit Ġ= Ġjson Obj . keys () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( it . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Custom Feature ( key , Ġjson Obj . getString ( key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ