package com.xda.one.auth;
import com.squareup.otto.Subscribe;
import com.xda.one.R;
import com.xda.one.api.inteface.UserClient;
import com.xda.one.api.misc.Consumer;
import com.xda.one.api.misc.Result;
import com.xda.one.api.retrofit.RetrofitUserClient;
import com.xda.one.constants.XDAConstants;
import com.xda.one.event.user.UserProfileEvent;
import com.xda.one.event.user.UserProfileFailedEvent;
import com.xda.one.ui.listener.MultipleNonEmptyTextViewListener;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import retrofit.client.Response;
public class RegisterFragment extends Fragment {
private UserClient mUserClient;
private EditText mUsername;
private EditText mPassword;
private EditText mEmail;
private EditText mResponse;
private ReCaptcha mReCaptcha;
private ProgressDialog mProgressDialog;
private Object mEventListener;
private ImageView mRecaptchaView;
public static Fragment createInstance() {
return new RegisterFragment();
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserClient = RetrofitUserClient.getClient(getActivity());
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setTitle("Registering...");
mProgressDialog.setMessage("Registering...");
mProgressDialog.setIndeterminate(true);
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mEventListener != null) {
mUserClient.getBus().unregister(mEventListener);
}
}
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
@Nullable final Bundle savedInstanceState) {
return inflater.inflate(R.layout.register_fragment, container, false);
}
@Override
public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
mRecaptchaView = (ImageView) view.findViewById(R.id.recaptcha_imageview);
mReCaptcha = new ReCaptcha(XDAConstants.RECAPTCHA_PUBLIC_KEY);
mReCaptcha.showImageChallenge(mRecaptchaView);
mUsername = (EditText) view.findViewById(R.id.register_fragment_username);
mPassword = (EditText) view.findViewById(R.id.register_fragment_password);
mEmail = (EditText) view.findViewById(R.id.register_fragment_email);
mResponse = (EditText) view.findViewById(R.id.register_fragment_response);
final Button submit = (Button) view.findViewById(R.id.register_fragment_submit);
submit.setEnabled(false);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
submitData();
}
});
final MultipleNonEmptyTextViewListener listener = new MultipleNonEmptyTextViewListener
(submit, mUsername, mPassword, mEmail, mResponse);
listener.registerAll();
}
private void submitData() {
mProgressDialog.show();
final String username = mUsername.getText().toString();
final String password = mPassword.getText().toString();
final String email = mEmail.getText().toString();
final String response = mResponse.getText().toString();
mUserClient.register(email, username, password, mReCaptcha.getImageToken(), response,
new Consumer<Response>() {
@Override
public void run(final Response data) {
mEventListener = new EventListener();
mUserClient.getBus().register(mEventListener);
// Loggging in...
mProgressDialog.setTitle("Logging in...");
mProgressDialog.setMessage("Logging in...");
mUserClient.getUserProfileAsync();
}
}, new Consumer<Result>() {
@Override
public void run(final Result data) {
mProgressDialog.dismiss();
mReCaptcha.showImageChallenge(mRecaptchaView);
Toast.makeText(getActivity(), data.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
private final class EventListener {
@Subscribe
public void onUserProfileReceived(final UserProfileEvent event) {
mEventListener = null;
mUserClient.getBus().unregister(this);
mProgressDialog.setTitle("Updating forums database");
mProgressDialog.setMessage("Updating forums database");
getLoaderManager().initLoader(0, null, new AuthForumLoaderCallbacks(getActivity(),
event.account, mProgressDialog));
}
@Subscribe
public void onLoginFailed(final UserProfileFailedEvent event) {
mEventListener = null;
mUserClient.getBus().unregister(this);
mProgressDialog.dismiss();
final String output = event.result == null ? "Something went wrong"
: event.result.getMessage();
mReCaptcha.showImageChallenge(mRecaptchaView);
Toast.makeText(getActivity(), output, Toast.LENGTH_SHORT).show();
}
}
}