package com.smarthomies.realtimetalk.viewmodels; import android.databinding.BaseObservable; import android.databinding.Bindable; 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.AccountManager; import com.smarthomies.realtimetalk.managers.AuthenticationManager; import com.smarthomies.realtimetalk.managers.ContactsManager; import com.smarthomies.realtimetalk.models.db.User; import com.smarthomies.realtimetalk.models.network.AuthenticationResponse; import com.smarthomies.realtimetalk.models.network.UserResponse; import com.smarthomies.realtimetalk.models.network.UsersResponse; import com.smarthomies.realtimetalk.utils.NavigationSubject; import com.smarthomies.realtimetalk.views.activities.LoginActivity; import com.smarthomies.realtimetalk.views.activities.MainActivity; import com.smarthomies.realtimetalk.views.activities.ProfileActivity; import com.smarthomies.realtimetalk.views.activities.SearchActivity; import java.util.List; import rx.Observable; import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import rx.subjects.AsyncSubject; import rx.subscriptions.CompositeSubscription; /** * Created by ensar on 15/11/16. */ public class MainViewModel extends BaseObservable { public static final String TAG = MainViewModel.class.getSimpleName(); private AsyncSubject logoutSubject; private CompositeSubscription subscription; private ObservableField> contacts = new ObservableField<>(); private ObservableField userViewModel = new ObservableField<>(); public MainViewModel() { logoutSubject = AsyncSubject.create(); subscription = new CompositeSubscription(); userViewModel.set(new UserViewModel()); } public void loadContacts() { subscription.add(new ContactsManager().getContacts() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(UsersResponse usersResponse) { contacts.set(usersResponse.getData()); } })); } public void loadProfile() { subscription.add(new AccountManager().getProfile() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(UserResponse userResponse) { userViewModel.get().setModel(userResponse.getData()); userViewModel.notifyChange(); } })); } public AsyncSubject createLogoutSubject() { logoutSubject = AsyncSubject.create(); return logoutSubject; } public AsyncSubject getLogoutSubject() { return logoutSubject; } private void logoutUser() { new AuthenticationManager().logout().subscribeOn(Schedulers.io()).subscribe(logoutSubject); } public ObservableField> getContacts() { return contacts; } public void setContacts(ObservableField> contacts) { this.contacts = contacts; } @Bindable public UserViewModel getUserViewModel() { return userViewModel.get(); } public View.OnClickListener onSearchClick() { return new View.OnClickListener() { @Override public void onClick(View v) { NavigationSubject.getInstance().onNext(new Pair, Bundle>(SearchActivity.class, null)); } }; } public void onLogoutClick() { logoutUser(); } public void onProfileClick() { NavigationSubject.getInstance().onNext(new Pair, Bundle>(ProfileActivity.class, null)); } public void onLogoutDone() { NavigationSubject.getInstance().onNext(new Pair, Bundle>(LoginActivity.class, null)); } public void clear() { if(subscription != null && !subscription.isUnsubscribed()) { subscription.unsubscribe(); } } }