package Ġcom . she pel ie v . webrtc _ plugin . plugin Ċ Ċ import Ġandroid . os . AsyncTask Ċ import Ġandroid . util . Log Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ Ċ type alias ĠMethod Handler < T > Ġ= Ġ( MethodCall ) Ġ-> ĠT ? Ċ Ċ private Ġval ĠTAG Ġ= ĠMethod Call Handlers :: class . java . simple Name Ċ Ċ class ĠMethod Call Handlers ( var arg Ġhandlers : ĠMap < String , ĠMethod Handler <* >>) Ġ: ĊĠĠĠ ĠMethod Channel . MethodCall Handler Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġhandlers : ĠMap < String , ĠMethod Handler <* >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . handlers Ġ= Ġhandlers . fold ( map Of ()) Ġ{ Ġacc , Ġitem Ġ-> Ġacc Ġ+ Ġitem Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall ( method Call : ĠMethod Call , Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Call Ġof Ġmethod Ġ'${ method Call . method } (${ method Call . arguments }) ") ĊĠĠĠĠĠĠĠ Ġhandlers . filter Keys Ġ{ Ġit Ġ== Ġmethod Call . method Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠHandle Method Task ( it , Ġresult ). execute ( method Call ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Method Ġ'${ method Call . method }' Ġis Ġnot Ġimplemented Ġyet .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġclass ĠHandle Method Task ( ĊĠĠĠ Ġprivate Ġval Ġhandler : ĠMethod Handler <* >, ĊĠĠĠ Ġprivate Ġval Ġmethod Channel Result : ĠResult Ċ ) Ġ: ĠAsync Task < MethodCall , ĠNothing , ĠPair < Throwable ?, ĠAny ? >>() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġparams : ĠMethod Call ): ĠPair < Throwable ?, ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmethod Call Ġ= Ġparams [ 0 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Result Ġ= Ġhandler ( method Call ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( null , Ġhandler Result ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ"{ method =\" ${ method Call . method }\ ", Ġarguments =${ method Call . arguments }}" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġmessage , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( e , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Post Execute ( result : ĠPair < Throwable ?, ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . first ?. let Ġ{ Ġmethod Channel Result . error (" UN HAND LED _ EXCEPTION ", Ġit . message , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmethod Channel Result . success ( result . second ) ĊĠĠĠ Ġ} Ċ } Ċ