package com.wangdaye.mysplash.common.data.service; import android.content.Context; import com.wangdaye.mysplash.Mysplash; import com.wangdaye.mysplash.common.data.api.AuthorizeApi; import com.wangdaye.mysplash.common.data.entity.unsplash.AccessToken; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Authorize service. * */ public class AuthorizeService { private Call call; public static AuthorizeService getService() { return new AuthorizeService(); } private AuthorizeApi buildApi() { return new Retrofit.Builder() .baseUrl(Mysplash.UNSPLASH_URL) .addConverterFactory(GsonConverterFactory.create()) .build() .create((AuthorizeApi.class)); } public void requestAccessToken(Context c, String code, final OnRequestAccessTokenListener l) { Call<AccessToken> getAccessToken = buildApi() .getAccessToken( Mysplash.getAppId(c, true), Mysplash.getSecret(c), "mysplash://" + Mysplash.UNSPLASH_LOGIN_CALLBACK, code, "authorization_code"); getAccessToken.enqueue(new Callback<AccessToken>() { @Override public void onResponse(Call<AccessToken> call, Response<AccessToken> response) { if (l != null) { l.onRequestAccessTokenSuccess(call, response); } } @Override public void onFailure(Call<AccessToken> call, Throwable t) { if (l != null) { l.onRequestAccessTokenFailed(call, t); } } }); call = getAccessToken; } public void cancel() { if (call != null) { call.cancel(); } } // interface. public interface OnRequestAccessTokenListener { void onRequestAccessTokenSuccess(Call<AccessToken> call, retrofit2.Response<AccessToken> response); void onRequestAccessTokenFailed(Call<AccessToken> call, Throwable t); } }