/* * Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.account.content; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import com.android.volley.VolleyError; import me.zhanghai.android.douya.network.Request; import me.zhanghai.android.douya.network.RequestFragment; import me.zhanghai.android.douya.network.api.TokenRequest; import me.zhanghai.android.douya.network.api.TokenRequests; import me.zhanghai.android.douya.util.FragmentUtils; public class AuthenticateRequest extends RequestFragment<AuthenticateRequest.RequestState, TokenRequest.Response> { private static final String FRAGMENT_TAG_DEFAULT = AuthenticateRequest.class.getName(); public static AuthenticateRequest attachTo(Fragment fragment, String tag, int requestCode) { FragmentActivity activity = fragment.getActivity(); AuthenticateRequest instance = FragmentUtils.findByTag(activity, tag); if (instance == null) { //noinspection deprecation instance = new AuthenticateRequest(); instance.targetAt(fragment, requestCode); FragmentUtils.add(instance, activity, tag); } return instance; } public static AuthenticateRequest attachTo(Fragment fragment) { return attachTo(fragment, FRAGMENT_TAG_DEFAULT, REQUEST_CODE_INVALID); } /** * @deprecated Use {@code attachTo()} instead. */ public AuthenticateRequest() {} public void start(String authTokenType, String username, String password) { start(new RequestState(authTokenType, username, password)); } @Override protected Request<TokenRequest.Response> onCreateRequest(RequestState requestState) { return TokenRequests.newRequest(requestState.authTokenType, requestState.username, requestState.password); } @Override protected void onRequestStarted() { getListener().onAuthenticateStarted(getRequestCode()); } @Override protected void onRequestFinished(boolean successful, RequestState requestState, TokenRequest.Response response, VolleyError error) { getListener().onAuthenticateFinished(getRequestCode()); if (successful) { getListener().onAuthenticateSuccess(getRequestCode(), requestState, response); } else { getListener().onAuthenticateError(getRequestCode(), requestState, error); } } private Listener getListener() { return (Listener) getTarget(); } public static class RequestState { public String authTokenType; public String username; public String password; public RequestState(String authTokenType, String username, String password) { this.authTokenType = authTokenType; this.username = username; this.password = password; } } public interface Listener { void onAuthenticateStarted(int requestCode); void onAuthenticateFinished(int requestCode); void onAuthenticateSuccess(int requestCode, RequestState requestState, TokenRequest.Response response); void onAuthenticateError(int requestCode, RequestState requestState, VolleyError error); } }