package com.github.simonpercic.oklogexample.ui;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.github.simonpercic.oklogexample.R;
import com.github.simonpercic.oklogexample.data.api.ApiService;
import com.github.simonpercic.oklogexample.data.api.ApiServiceProvider;
import com.github.simonpercic.oklogexample.data.api.model.request.show.CreateShowRequest;
import com.github.simonpercic.oklogexample.data.api.model.request.show.ShowNetworkRequest;
import com.github.simonpercic.oklogexample.data.api.model.request.watched.WatchedRequest;
import java.util.List;
import butterknife.BindView;
import butterknife.BindViews;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
/**
* @author Simon Percic <a href="https://github.com/simonpercic">https://github.com/simonpercic</a>
*/
public class MainActivity extends AppCompatActivity {
private static final ButterKnife.Setter<View, Boolean> ENABLE_VIEW = (view, value, index) -> view.setEnabled(value);
@BindView(R.id.activity_root_coordinator_layout) CoordinatorLayout coordinatorLayout;
@BindViews({R.id.btn_get, R.id.btn_post, R.id.btn_put, R.id.btn_delete, R.id.btn_header}) List<View> buttonViews;
private ApiService apiService;
private Subscription subscription;
private final Action1<Throwable> errorAction = throwable -> {
enableButtons();
String message = String.format("Error: %s", throwable.getMessage());
showSnackbar(message);
};
// region Activity lifecycle callbacks
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
apiService = ApiServiceProvider.createApiService();
ButterKnife.bind(this);
}
@Override protected void onDestroy() {
super.onDestroy();
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
}
// endregion Activity lifecycle callbacks
// region Click listeners
@OnClick(R.id.btn_get)
public void onBtnGetClicked() {
disableButtons();
subscription = apiService.getShows()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponse -> {
enableButtons();
showSnackbar(String.format("Got %s TV show items", listResponse.size()));
}, errorAction);
}
@OnClick(R.id.btn_post)
public void onBtnPostClicked() {
WatchedRequest request = new WatchedRequest(5);
disableButtons();
subscription = apiService.watched(request)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> {
enableButtons();
showSnackbar(String.format("Watched %s times", response.getWatchedCount()));
}, errorAction);
}
@OnClick(R.id.btn_put)
public void onBtnPutClicked() {
ShowNetworkRequest showNetworkRequest = new ShowNetworkRequest(8);
CreateShowRequest request = new CreateShowRequest("True Detective", 60, showNetworkRequest);
disableButtons();
subscription = apiService.createShow(request)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> {
enableButtons();
showSnackbar(String.format("Created show %s", response.getName()));
}, errorAction);
}
@OnClick(R.id.btn_delete)
public void onBtnDeleteClicked() {
disableButtons();
subscription = apiService.deleteShow(5)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> {
enableButtons();
showSnackbar(String.format("Deleted show %s", response.getName()));
}, errorAction);
}
@OnClick(R.id.btn_header)
public void onBtnHeaderClicked() {
disableButtons();
subscription = apiService.getShowsHeader()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(v -> {
enableButtons();
showSnackbar("Got header");
}, errorAction);
}
// endregion Click listeners
// region Helper methods
private void disableButtons() {
ButterKnife.apply(buttonViews, ENABLE_VIEW, false);
}
private void enableButtons() {
ButterKnife.apply(buttonViews, ENABLE_VIEW, true);
}
private void showSnackbar(String message) {
Snackbar.make(coordinatorLayout, message, Snackbar.LENGTH_SHORT).show();
}
// endregion Helper methods
}