package com.smarthomies.realtimetalk.viewmodels; import android.databinding.BaseObservable; import android.databinding.ObservableField; import android.os.Bundle; import android.util.Pair; import android.view.View; import com.smarthomies.realtimetalk.RTTActivity; import com.smarthomies.realtimetalk.managers.AuthenticationManager; import com.smarthomies.realtimetalk.models.network.AuthenticationResponse; import com.smarthomies.realtimetalk.utils.NavigationSubject; import com.smarthomies.realtimetalk.utils.RTTUtil; import com.smarthomies.realtimetalk.views.activities.MainActivity; import com.smarthomies.realtimetalk.views.activities.RegistrationActivity; import rx.functions.Action0; import rx.functions.Action1; import rx.schedulers.Schedulers; import rx.subjects.AsyncSubject; /** * Created by ensar on 01/11/16. */ public class LoginViewModel extends BaseObservable { public static final String TAG = LoginViewModel.class.getSimpleName(); private AsyncSubject loginSubject; private ObservableField username = new ObservableField<>(); private ObservableField usernameError = new ObservableField<>(); private ObservableField password = new ObservableField<>(); private ObservableField passwordError = new ObservableField<>(); private ObservableField requestInProgress = new ObservableField<>(); public LoginViewModel() { requestInProgress.set(false); loginSubject = AsyncSubject.create(); } public AsyncSubject createLoginSubject() { loginSubject = AsyncSubject.create(); return loginSubject; } public AsyncSubject getLoginSubject() { return loginSubject; } private void loginUser() { requestInProgress.set(true); new AuthenticationManager().loginUser(username.get(), password.get()).subscribeOn(Schedulers.io()).subscribe(loginSubject); } private boolean validateFields() { clearErrors(); passwordError.set(RTTUtil.getPasswordError(password.get())); usernameError.set(RTTUtil.getRequiredFieldError(username.get())); return passwordError.get() == 0 && usernameError.get() == 0; } private void clearErrors() { usernameError.set(0); passwordError.set(0); } public View.OnClickListener onLoginClick() { return new View.OnClickListener() { @Override public void onClick(View v) { if(validateFields()) { loginUser(); } } }; } public View.OnClickListener onRegisterClick() { return new View.OnClickListener() { @Override public void onClick(View v) { NavigationSubject.getInstance().onNext(new Pair, Bundle>(RegistrationActivity.class, null)); } }; } public void onLoginDone() { NavigationSubject.getInstance().onNext(new Pair, Bundle>(MainActivity.class, null)); NavigationSubject.getInstance().onNext(null); } public void onRequestCompleted() { requestInProgress.set(false); } public ObservableField getUsername() { return username; } public void setUsername(ObservableField username) { this.username = username; } public ObservableField getUsernameError() { return usernameError; } public void setUsernameError(ObservableField usernameError) { this.usernameError = usernameError; } public ObservableField getPassword() { return password; } public void setPassword(ObservableField password) { this.password = password; } public ObservableField getPasswordError() { return passwordError; } public void setPasswordError(ObservableField passwordError) { this.passwordError = passwordError; } public ObservableField getRequestInProgress() { return requestInProgress; } public void setRequestInProgress(ObservableField requestInProgress) { this.requestInProgress = requestInProgress; } }