package io.github.scarletsky.bangumi.ui.fragments;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme;
import com.rengwuxian.materialedittext.MaterialEditText;
import io.github.scarletsky.bangumi.BangumiApplication;
import io.github.scarletsky.bangumi.R;
import io.github.scarletsky.bangumi.api.ApiManager;
import io.github.scarletsky.bangumi.api.models.User;
import io.github.scarletsky.bangumi.events.SessionChangeEvent;
import io.github.scarletsky.bangumi.utils.BusProvider;
import io.github.scarletsky.bangumi.utils.SessionManager;
import io.github.scarletsky.bangumi.utils.ToastManager;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
/**
* Created by scarlex on 15-7-6.
*/
public class LoginFragment extends BaseToolbarFragment {
private static final String TAG = LoginFragment.class.getSimpleName();
private MaterialDialog mProgressDialog;
private MaterialEditText mUsernameField;
private MaterialEditText mPasswordField;
private SessionManager mSession = BangumiApplication.getInstance().getSession();
@Override
public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override
public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_login, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initProgressDialog();
mUsernameField = (MaterialEditText) getView().findViewById(R.id.username_field);
mPasswordField = (MaterialEditText) getView().findViewById(R.id.password_field);
Button loginBtn = (Button) getView().findViewById(R.id.btn_login);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username = mUsernameField.getText().toString();
String password = mPasswordField.getText().toString();
if (isInputsValid(username, password)) {
showProgressDialog();
login(username, password);
}
}
});
}
@Override
protected void setToolbarTitle() {
getToolbar().setTitle(getString(R.string.title_login));
}
private void login(String username, String password) {
ApiManager.getBangumiApi().auth(username, password, new Callback<User>() {
@Override
public void success(User user, Response response) {
hideProgressDialog();
if (user.getAuth() == null) {
ToastManager.show(getActivity(), getString(R.string.toast_username_or_password_wrong));
} else {
mSession.setIsLogin(true);
mSession.setAuth(user.getAuth());
mSession.setAuthEncode(user.getAuthEncode());
mSession.setUserId(user.getId());
mSession.setUserNickname(user.getNickname());
mSession.setUserAvatar(user.getAvatar().getLarge());
BusProvider.getInstance().post(new SessionChangeEvent(true));
ToastManager.show(getActivity(), getString(R.string.toast_login_successfully));
}
}
@Override
public void failure(RetrofitError error) {
hideProgressDialog();
ToastManager.show(getActivity(), getString(R.string.toast_network_error));
}
});
}
private void initProgressDialog() {
mProgressDialog = new MaterialDialog
.Builder(getActivity())
.content(getString(R.string.dialog_logining))
.progress(true, 0)
.theme(Theme.LIGHT)
.cancelable(false)
.build();
}
private void showProgressDialog() {
mProgressDialog.show();
}
private void hideProgressDialog() {
mProgressDialog.dismiss();
}
private boolean isInputsValid(String username, String password) {
boolean flag = true;
if (username.trim().length() == 0) {
flag = false;
mUsernameField.setError(getString(R.string.error_username_must_not_be_empty));
}
if (password.trim().length() == 0) {
flag = false;
mPasswordField.setError(getString(R.string.error_password_must_not_be_empty));
}
return flag;
}
}