package com.huhx0015.gw2at.view.fragments;
import android.app.ProgressDialog;
import android.databinding.DataBindingUtil;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.huhx0015.gw2at.R;
import com.huhx0015.gw2at.view.activities.MainActivity;
import com.huhx0015.gw2at.constants.GW2Constants;
import com.huhx0015.gw2at.model.objects.GW2Account;
import com.huhx0015.gw2at.databinding.FragmentLoginBinding;
import com.huhx0015.gw2at.interfaces.RetrofitInterface;
import com.huhx0015.gw2at.model.responses.account.AccountResponse;
import com.huhx0015.gw2at.utils.DialogUtils;
import com.huhx0015.gw2at.utils.SnackbarUtils;
import com.huhx0015.gw2at.viewmodels.fragments.LoginFragmentViewModel;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
/**
* Created by Michael Yoon Huh on 2/2/2017.
*/
public class LoginFragment extends ApiFragment implements LoginFragmentViewModel.LoginFragmentViewModelListener {
/** CLASS VARIABLES ________________________________________________________________________ **/
// DATABINDING VARIABLES
private FragmentLoginBinding mBinding;
private LoginFragmentViewModel mViewModel;
// LOGGING VARIABLES
private static final String LOG_TAG = LoginFragment.class.getSimpleName();
/** CONSTRUCTOR METHODS ____________________________________________________________________ **/
public static LoginFragment newInstance() {
return new LoginFragment();
}
/** FRAGMENT LIFECYCLE METHODS _____________________________________________________________ **/
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(getActivity().getLayoutInflater(), R.layout.fragment_login, null, false);
mViewModel = new LoginFragmentViewModel(true);
mViewModel.setListener(this);
mBinding.setViewModel(mViewModel);
return mBinding.getRoot();
}
/** FRAGMENT EXTENSION METHODS _____________________________________________________________ **/
@Override
public void onLoginButtonClicked() {
queryAccount(mBinding.loginApiKeyField.toString());
}
/** NETWORK METHODS ________________________________________________________________________ **/
private void queryAccount(final String key) {
final ProgressDialog progressDialog = DialogUtils.createProgressDialog(mContext);
RetrofitInterface accountResponse = mNetworkAdapter.create(RetrofitInterface.class);
Observable<AccountResponse> call = accountResponse.getAccount(GW2Constants.API_BEARER + key);
call.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<AccountResponse>() {
@Override
public void onSubscribe(Disposable d) {}
@Override
public void onNext(AccountResponse value) {
GW2Account.getInstance().setAccount(value);
mViewModel.setLoginContainerVisible(false);
((MainActivity) getContext()).loadFragment(CharacterFragment.newInstance(),
CharacterFragment.class.getSimpleName());
((MainActivity) getContext()).updateNavigationMenu();
}
@Override
public void onError(Throwable t) {
progressDialog.dismiss();
SnackbarUtils.displaySnackbarWithAction(mBinding.getRoot(), t.getLocalizedMessage(),
Snackbar.LENGTH_INDEFINITE, Color.RED, getString(R.string.retry),
new View.OnClickListener() {
@Override
public void onClick(View v) {
queryAccount(key);
}
});
Log.e(LOG_TAG, "queryAccount(): ERROR: " + t.getLocalizedMessage());
}
@Override
public void onComplete() {
progressDialog.dismiss();
}
});
}
}