Skip to content

Instantly share code, notes, and snippets.

@cr5315
Last active December 17, 2015 16:28
Show Gist options
  • Save cr5315/d1903a063b4774c729b8 to your computer and use it in GitHub Desktop.
Save cr5315/d1903a063b4774c729b8 to your computer and use it in GitHub Desktop.
Simple MVP Example
package butzow.me.chan.ui.main;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import com.mikepenz.materialize.MaterializeBuilder;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butzow.me.chan.R;
import butzow.me.chan.retrofit.Boards;
import timber.log.Timber;
public class MainActivity extends AppCompatActivity implements IMainView, SwipeRefreshLayout.OnRefreshListener, MainRecyclerAdapter.Callback {
@Bind(R.id.recyclerView)
RecyclerView recyclerView;
@Bind(R.id.toolbar)
Toolbar toolbar;
private IMainPresenter presenter;
private MainRecyclerAdapter recyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
new MaterializeBuilder(this).build();
recyclerAdapter = new MainRecyclerAdapter(this, this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(recyclerAdapter);
presenter = new MainPresenter(this);
presenter.loadBoards();
}
@Override
public void displayBoards(List<Boards.Board> boards) {
Timber.i("displayBoards()");
recyclerAdapter.updateBoards(boards);
}
@Override
public void displayBoardError(Throwable t, int stringRes) {
Timber.i("displayBoardError");
Timber.e(t.toString());
Snackbar.make(findViewById(R.id.coordinatorLayout), stringRes, Snackbar.LENGTH_LONG)
.setAction(R.string.action_retry, v -> {
presenter.loadBoards();
}).show();
}
@Override
public void onRefresh() {
presenter.loadBoards();
}
@Override
public void onItemClicked(String board, String title) {
startActivity(presenter.getBoardIntent(this, board, title));
}
}
package butzow.me.chan.ui.main;
import android.content.Context;
import android.content.Intent;
import butzow.me.chan.R;
import butzow.me.chan.retrofit.Boards;
import butzow.me.chan.ui.board.BoardActivity;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
/**
* @author cr5315
*/
public class MainPresenter implements IMainPresenter {
private IMainView view;
public MainPresenter(IMainView view) {
this.view = view;
}
@Override
public void loadBoards() {
Timber.i("loadBoards()");
Boards.getAdapter().getBoards().enqueue(new Callback<Boards.Boardz>() {
@Override
public void onResponse(Response<Boards.Boardz> response, Retrofit retrofit) {
view.displayBoards(response.body().getBoards());
}
@Override
public void onFailure(Throwable t) {
view.displayBoardError(t, R.string.activity_main_error_loading_boards);
}
});
}
@Override
public Intent getBoardIntent(Context context, String board, String title) {
Intent intent = new Intent(context, BoardActivity.class);
intent.putExtra(BoardActivity.EXTRA_BOARD, board);
intent.putExtra(BoardActivity.EXTRA_TITLE, title);
return intent;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment