/* * Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.network.api; import com.android.volley.DefaultRetryPolicy; import com.android.volley.VolleyError; import me.zhanghai.android.douya.network.api.credential.ApiCredential; public class FrodoTokenRequest extends TokenRequest { private FrodoTokenRequest() { super(Method.POST, ApiContract.Request.Token.URL); addParam(ApiContract.Request.Token.CLIENT_ID, ApiCredential.Frodo.KEY); addParam(ApiContract.Request.Token.CLIENT_SECRET, ApiCredential.Frodo.SECRET); addParam(ApiContract.Request.Token.REDIRECT_URI, ApiContract.Request.Token.RedirectUris.FRODO); addHeaderUserAgent(ApiContract.Request.Frodo.USER_AGENT); addHeaderAcceptCharsetUtf8(); } public FrodoTokenRequest(String username, String password) { this(); addParam(ApiContract.Request.Token.GRANT_TYPE, ApiContract.Request.Token.GrantTypes.PASSWORD); addParam(ApiContract.Request.Token.USERNAME, username); addParam(ApiContract.Request.Token.PASSWORD, password); setRetryPolicy(new RetryPolicy(20000, 0, 1.0f)); } public FrodoTokenRequest(String refreshToken) { this(); addParam(ApiContract.Request.Token.GRANT_TYPE, ApiContract.Request.Token.GrantTypes.REFRESH_TOKEN); addParam(ApiContract.Request.Token.REFRESH_TOKEN, refreshToken); setRetryPolicy(new RetryPolicy(2500, 1, 1.0f)); } private static class RetryPolicy extends DefaultRetryPolicy { public RetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier) { super(initialTimeoutMs, maxNumRetries, backoffMultiplier); } @Override public void retry(VolleyError error) throws VolleyError { //noinspection ThrowableResultOfMethodCallIgnored Error tokenError = Error.wrap(error); if (tokenError.code != 0) { throw error; } else { super.retry(error); } } } }