2727import com .google .android .gms .tasks .Tasks ;
2828import com .google .firebase .FirebaseApp ;
2929import com .google .firebase .functions .FirebaseFunctionsException .Code ;
30- import com .squareup .okhttp .Call ;
31- import com .squareup .okhttp .Callback ;
32- import com .squareup .okhttp .MediaType ;
33- import com .squareup .okhttp .OkHttpClient ;
34- import com .squareup .okhttp .Request ;
35- import com .squareup .okhttp .RequestBody ;
36- import com .squareup .okhttp .Response ;
3730import java .io .IOException ;
31+ import java .io .InterruptedIOException ;
3832import java .net .MalformedURLException ;
3933import java .net .URL ;
4034import java .util .HashMap ;
4135import java .util .Map ;
36+ import okhttp3 .Call ;
37+ import okhttp3 .Callback ;
38+ import okhttp3 .MediaType ;
39+ import okhttp3 .OkHttpClient ;
40+ import okhttp3 .Request ;
41+ import okhttp3 .RequestBody ;
42+ import okhttp3 .Response ;
4243import org .json .JSONException ;
4344import org .json .JSONObject ;
4445
@@ -197,7 +198,7 @@ public void useFunctionsEmulator(String origin) {
197198 * @param data Parameters to pass to the function. Can be anything encodable as JSON.
198199 * @return A Task that will be completed when the request is complete.
199200 */
200- Task <HttpsCallableResult > call (String name , @ Nullable Object data ) {
201+ Task <HttpsCallableResult > call (String name , @ Nullable Object data , HttpsCallOptions options ) {
201202 return providerInstalled
202203 .getTask ()
203204 .continueWithTask (task -> contextProvider .getContext ())
@@ -207,7 +208,7 @@ Task<HttpsCallableResult> call(String name, @Nullable Object data) {
207208 return Tasks .forException (task .getException ());
208209 }
209210 HttpsCallableContext context = task .getResult ();
210- return call (name , data , context );
211+ return call (name , data , context , options );
211212 });
212213 }
213214
@@ -220,7 +221,7 @@ Task<HttpsCallableResult> call(String name, @Nullable Object data) {
220221 * @return A Task that will be completed when the request is complete.
221222 */
222223 private Task <HttpsCallableResult > call (
223- String name , @ Nullable Object data , HttpsCallableContext context ) {
224+ String name , @ Nullable Object data , HttpsCallableContext context , HttpsCallOptions options ) {
224225 if (name == null ) {
225226 throw new IllegalArgumentException ("name cannot be null" );
226227 }
@@ -243,17 +244,28 @@ private Task<HttpsCallableResult> call(
243244 request = request .header ("Firebase-Instance-ID-Token" , context .getInstanceIdToken ());
244245 }
245246
247+ OkHttpClient callClient = options .apply (client );
248+ Call call = callClient .newCall (request .build ());
249+
246250 TaskCompletionSource <HttpsCallableResult > tcs = new TaskCompletionSource <>();
247- Call call = client .newCall (request .build ());
248251 call .enqueue (
249252 new Callback () {
250253 @ Override
251- public void onFailure (Request request , IOException e ) {
252- tcs .setException (e );
254+ public void onFailure (Call ignored , IOException e ) {
255+ if (e instanceof InterruptedIOException ) {
256+ FirebaseFunctionsException exception =
257+ new FirebaseFunctionsException (
258+ Code .DEADLINE_EXCEEDED .name (), Code .DEADLINE_EXCEEDED , null , e );
259+ tcs .setException (exception );
260+ } else {
261+ FirebaseFunctionsException exception =
262+ new FirebaseFunctionsException (Code .INTERNAL .name (), Code .INTERNAL , null , e );
263+ tcs .setException (exception );
264+ }
253265 }
254266
255267 @ Override
256- public void onResponse (Response response ) throws IOException {
268+ public void onResponse (Call ignored , Response response ) throws IOException {
257269 Code code = Code .fromHttpStatus (response .code ());
258270 String body = response .body ().string ();
259271
0 commit comments