package com.fernandocejas.android10.sample.presentation.viewmodel;
import android.content.Intent;
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.util.Log;
import android.view.View;
import com.fernandocejas.android10.sample.data.dto.User;
import com.fernandocejas.android10.sample.domain.interactor.DefaultSubscriber;
import com.fernandocejas.android10.sample.domain.interactor.GetUserList;
import com.fernandocejas.android10.sample.domain.interactor.UseCase;
import com.fernandocejas.android10.sample.presentation.AndroidApplication;
import com.fernandocejas.android10.sample.presentation.mapper.UserModelDataMapper;
import com.fernandocejas.android10.sample.presentation.model.UserModel;
import com.fernandocejas.android10.sample.presentation.navigation.ActivityNavigator;
import com.fernandocejas.android10.sample.presentation.view.activity.UserDetailsActivity;
import com.fernandocejas.android10.sample.presentation.view.adapter.UsersAdapter;
import java.util.Collection;
import java.util.List;
/**
* Created by rocko on 15-11-5.
*/
public class UserListViewModel extends LoadingViewModel {
private final static String TAG = UserListViewModel.class.getSimpleName();
public final ObservableBoolean showContentList = new ObservableBoolean(false);
public final ObservableField<UsersAdapter> usersListAdapter = new ObservableField<>();
UseCase getUserList = new GetUserList(AndroidApplication.getContext());
UserModelDataMapper userModelDataMapper = new UserModelDataMapper();
@BindView
@Override
public void showLoading() {
super.showLoading();
showContentList.set(false);
}
@BindView
@Override
public void showRetry() {
super.showRetry();
showContentList.set(false);
}
@BindView
public void showContentList(UsersAdapter usersAdapter) {
showLoading.set(false);
showRetry.set(false);
showContentList.set(true);
usersListAdapter.set(usersAdapter);
}
@BindView
public void showMoreContent() {
// userAdapter
}
@Command
public void loadUsersCommand() {
if (showLoading.get()) {
return;
}
showLoading();
getUserList.execute(new DefaultSubscriber<List<User>>() {
@Override
public void onNext(List<User> users) {
Collection<UserModel> userModelsCollection = userModelDataMapper.transformUsers(users);
UsersAdapter usersAdapter = new UsersAdapter(AndroidApplication.getContext(), userModelsCollection);
usersAdapter.setOnItemClickListener(onUserItemClick());
showContentList(usersAdapter);
}
@Override
public void onError(Throwable e) {
showRetry();
}
});
}
@Override
public View.OnClickListener onRetryClick() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
loadUsersCommand();
}
};
}
public UsersAdapter.OnItemClickListener onUserItemClick() {
return new UsersAdapter.OnItemClickListener() {
@Override
public void onUserItemClicked(UserModel userModel) {
Intent intent = UserDetailsActivity.getCallingIntent(AndroidApplication.getInstance().getCurrentActivity(), userModel.getUserId());
ActivityNavigator.navigateTo(UserDetailsActivity.class, intent);
}
};
}
}