package com.example.features.dashboard.view; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.Toast; import butterknife.BindView; import butterknife.OnClick; import com.example.App; import com.example.R; import com.example.features.dashboard.dagger.DaggerMainActivityComponent; import com.example.features.dashboard.dagger.MainActivityComponent; import com.example.features.dashboard.presenter.MainPresenter; import com.example.model.Shot; import com.example.tools.analytics.AnalyticsHelper; import com.example.util.mvp.base.BaseActivity; import timber.log.Timber; import javax.annotation.Nullable; import javax.inject.Inject; import java.util.List; import static android.view.View.GONE; import static android.view.View.VISIBLE; public class MainActivity extends BaseActivity<MainActivityComponent, MainView, MainPresenter, MainActivityViewState> implements MainView { private static final int RECYCLER_VIEW_SPAN_COUNT = 2; @BindView(R.id.recycler_view) RecyclerView recyclerView; @BindView(R.id.main_activity_progress_bar) ProgressBar progressBar; @BindView(R.id.activity_main_shots_loading_failed__container) ViewGroup shotsFailedActionContainer; @BindView(R.id.toolbar) Toolbar toolbar; @Inject AnalyticsHelper analyticsHelper; @Inject ShotsAdapter shotsAdapter; @Override protected int getLayoutId() { return R.layout.activity_main; } @Override protected MainActivityComponent constructComponent() { return DaggerMainActivityComponent.builder() .applicationComponent(App.getApplicationComponent()) .build(); } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initRecyclerView(); setSupportActionBar(toolbar); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_menu, menu); MenuItem reportAProblemMenuItem = menu.findItem(R.id.report_problem_menu_item); reportAProblemMenuItem.setOnMenuItemClickListener(menuItem -> { Toast.makeText(this, "report a problem clicked", Toast.LENGTH_SHORT).show(); return true; }); return super.onCreateOptionsMenu(menu); } private void initRecyclerView() { GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), RECYCLER_VIEW_SPAN_COUNT, LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(gridLayoutManager); recyclerView.setAdapter(shotsAdapter); } @Override protected void onFirstCreate() { Timber.d("Initializing activity for the first time - view state is currently empty."); getPresenter().fetchShots(); } @Override public void displayShotsList(List<Shot> shots) { Timber.i("Displaying shots: %s", shots); getViewState().saveShots(shots); progressBar.setVisibility(GONE); shotsAdapter.setData(shots); } @Override public void showLoadingBar() { Timber.v("Showing loading bar"); progressBar.setVisibility(VISIBLE); shotsFailedActionContainer.setVisibility(GONE); } @Override public void showLoadingFailureError() { Timber.v("Showing loading failure layouts."); progressBar.setVisibility(GONE); shotsFailedActionContainer.setVisibility(VISIBLE); } @OnClick(R.id.activity_main__shots_reload__button) void reloadShotsButtonClicked() { Timber.i("Reload shots button clicked - reloading shots."); getPresenter().fetchShots(); } }