package Ġcom . fa iry . lib . network . factory Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . fa iry . lib . network . Thread Schedulers Ċ import Ġretrofit 2 . Call Adapter Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġjava . lang . reflect . Type Ċ Ċ /** Ċ Ġ* ĠLive Data æķ°æį® æºĲ éĢĤ éħį åĻ¨ Ċ Ġ* Ċ Ġ* Ġ@ author : ĠF air y . Ċ Ġ* Ġ@ date Ġ Ġ: Ġ 2 0 2 0 / 1 0 / 1 4 . Ċ Ġ*/ Ċ class ĠLive Data Call Adapter Factory ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¿ĶåĽŀ åĩ½æķ° è¿Ĳè¡Į çļĦ çº¿ç¨ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġthread Schedulers : ĠThread Schedulers Ġ= ĠThread Schedulers . MAIN _ THREAD , ĊĠĠĠ Ġprivate Ġval Ġon Failure : Ġ( t : ĠThrowable ) Ġ-> ĠUnit Ċ ) Ġ: ĊĠĠĠ ĠCall Adapter . Factory () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġcall Ġadapter Ġfor Ġinterface Ġmethods Ġthat Ġreturn Ġ` returnType `, Ġor Ġnull Ġif Ġit ĊĠĠĠĠ Ġ* Ġcannot Ġbe Ġhandled Ġby Ġthis Ġfactory . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget ( ĊĠĠĠĠĠĠĠ ĠreturnType : ĠType , ĊĠĠĠĠĠĠĠ Ġannotations : ĠArray < Annotation >, ĊĠĠĠĠĠĠĠ Ġretrofit : ĠRet rofit ĊĠĠĠ Ġ): ĠCall Adapter < *, Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Type : ĠType ĊĊĠĠĠĠĠĠĠ Ġif Ġ( getRaw Type ( returnType ) Ġ!= ĠLive Data :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" return Ġtype Ġmust Ġbe Ġparameter ized ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġobservable Type Ġ= Ġget Parameter Upper Bound ( 0 , ĠreturnType Ġas ĠParameter ized Type ) ĊĠĠĠĠĠĠĠ Ġval Ġraw Observable Type Ġ= Ġget Raw Type ( observable Type ) ĊĠĠĠĠĠĠĠ Ġresponse Type Ġ= Ġif Ġ( raw Observable Type Ġ== ĠResponse :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( observable Type Ġ! is ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Response Ġmust Ġbe Ġparameter ized ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Parameter Upper Bound ( 0 , Ġobservable Type ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLive Data Call Adapter < Any >( response Type , Ġthread Schedulers , Ġon Failure ) ĊĠĠĠ Ġ} Ċ } ĊĊ