package Ġec . com . paul . oauth 2 android . api Ċ Ċ import Ġec . com . paul . oauth 2 android . shared _ pref . Token Manager Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠPaul ĠY ag u ach i Ġon Ġ 2 9 / 6 / 2 0 1 9 . Ċ Ġ* ĠPaul ĠLocal Ċ Ġ*/ Ċ class ĠWeb Service OAuth Ġprivate Ġconstructor () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġretrofit : ĠRet rofit ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠhttpClient Builder : ĠOk HttpClient . Builder ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBASE _ URL Ġ= Ġ" http :// 1 9 2 . 1 6 8 . 1 0 0 . 2 5 : 8 0 7 1 /" ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlogging Interceptor : ĠHttp Logging Interceptor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠWeb Service OAuth ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠWeb Service OAuth Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠWeb Service OAuth () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠhttpClient Builder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ Ġlogging Interceptor Ġ= ĠHttp Logging Interceptor (). setLevel ( Http Logging Interceptor . Level . BODY ) ĊĠĠĠĠĠĠĠ ĠhttpClient Builder Ġ= ĠOk HttpClient . Builder (). add Interceptor ( logging Interceptor !! ) ĊĠĠĠĠĠĠĠ Ġretrofit Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( httpClient Builder !!. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġ< S > Ġcreate Service ( service Class : ĠClass < S >): ĠS Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit !!. create ( service Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< S > Ġcreate Service With OAuth 2 ( service Class : ĠClass < S >, Ġtoken Manager : ĠToken Manager ): ĠS Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Client Ġ= ĠhttpClient Builder !!. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Original Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġrequest Original . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( token Manager . getToken (). accessToken Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġtoken Manager . getToken (). accessToken ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠ Ġ}. auth enticator ( Custom Authenticator . getInstance ( token Manager )). build () ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit !!. newBuilder (). client ( new Client ). build (). create ( service Class ) ĊĠĠĠ Ġ} Ċ Ċ }