package com.novoda.todoapp.tasks.view.loading;
import android.support.design.widget.Snackbar;
import android.view.View;
import com.novoda.todoapp.tasks.loading.displayer.TasksLoadingDisplayer;
import com.novoda.todoapp.tasks.loading.displayer.RetryActionListener;
public class AndroidTasksLoadingDisplayer implements TasksLoadingDisplayer {
private final TasksLoadingView loadingView;
private final View contentView;
private Snackbar snackBar;
public AndroidTasksLoadingDisplayer(TasksLoadingView loadingView, View contentView) {
this.loadingView = loadingView;
this.contentView = contentView;
}
@Override
public void attach(final RetryActionListener retryActionListener) {
loadingView.setRetryButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
retryActionListener.onRetry();
}
});
}
@Override
public void detach(RetryActionListener retryActionListener) {
loadingView.setRetryButtonClickListener(null);
}
@Override
public void showLoadingIndicator() {
contentView.setVisibility(View.VISIBLE);
loadingView.setVisibility(View.GONE);
displaySnackBar("Still loading data");
}
@Override
public void showLoadingScreen() {
contentView.setVisibility(View.GONE);
loadingView.setVisibility(View.VISIBLE);
loadingView.setAsLoading();
}
@Override
public void showData() {
dismissSnackBar();
contentView.setVisibility(View.VISIBLE);
loadingView.setVisibility(View.GONE);
}
@Override
public void showEmptyTasksScreen() {
dismissSnackBar();
contentView.setVisibility(View.GONE);
loadingView.setVisibility(View.VISIBLE);
loadingView.setAsEmptyTasks();
}
@Override
public void showEmptyActiveTasksScreen() {
dismissSnackBar();
contentView.setVisibility(View.GONE);
loadingView.setVisibility(View.VISIBLE);
loadingView.setAsEmptyActiveTasks();
}
@Override
public void showEmptyCompletedTasksScreen() {
dismissSnackBar();
contentView.setVisibility(View.GONE);
loadingView.setVisibility(View.VISIBLE);
loadingView.setAsEmptyCompletedTasks();
}
@Override
public void showErrorIndicator() {
contentView.setVisibility(View.VISIBLE);
loadingView.setVisibility(View.GONE);
displaySnackBar("An error has occurred");
}
@Override
public void showErrorScreen() {
dismissSnackBar();
contentView.setVisibility(View.GONE);
loadingView.setVisibility(View.VISIBLE);
loadingView.setAsError();
}
private void dismissSnackBar() {
if (snackBar != null) {
snackBar.dismiss();
}
}
private void displaySnackBar(String message) {
if (snackBar != null && snackBar.isShown()) {
snackBar.setText(message);
} else {
snackBar = Snackbar.make(contentView, message, Snackbar.LENGTH_INDEFINITE);
snackBar.show();
}
}
}