package com.hitherejoe.bourbon.ui.browse;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
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.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.hitherejoe.bourbon.R;
import com.hitherejoe.bourboncorecommon.data.model.Shot;
import com.hitherejoe.bourboncorecommon.ui.browse.BrowseMvpView;
import com.hitherejoe.bourboncorecommon.ui.browse.BrowsePresenter;
import com.hitherejoe.bourbon.ui.base.BaseActivity;
import com.hitherejoe.bourbon.ui.shot.ShotActivity;
import com.hitherejoe.bourbon.util.DisplayMetricsUtil;
import java.util.List;
import javax.inject.Inject;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class BrowseFragment extends Fragment implements BrowseMvpView,
BrowseAdapter.ClickListener {
@Inject BrowseAdapter mBrowseAdapter;
@Inject BrowsePresenter mBrowsePresenter;
@Bind(R.id.button_message) Button mMessageButton;
@Bind(R.id.image_message) ImageView mMessageImage;
@Bind(R.id.progress) ProgressBar mRecyclerProgress;
@Bind(R.id.recycler_shots) RecyclerView mShotRecycler;
@Bind(R.id.swipe_to_refresh) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.text_message) TextView mMessageText;
@Bind(R.id.toolbar_browse) Toolbar mToolbar;
@Bind(R.id.layout_message) View mMessageLayout;
private boolean mIsTabletLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
((BaseActivity) getActivity()).activityComponent().inject(this);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_browse, container, false);
ButterKnife.bind(this, fragmentView);
mBrowsePresenter.attachView(this);
((AppCompatActivity) getActivity()).setSupportActionBar(mToolbar);
mIsTabletLayout = DisplayMetricsUtil.isScreenW(600);
setupViews();
mBrowsePresenter.getShots(BrowsePresenter.SHOT_COUNT, BrowsePresenter.SHOT_PAGE);
return fragmentView;
}
private void setupViews() {
mBrowseAdapter.setClickListener(this);
mShotRecycler.setLayoutManager(setLayoutManager());
mShotRecycler.setHasFixedSize(true);
mShotRecycler.setAdapter(mBrowseAdapter);
mSwipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.colorAccent);
mSwipeRefreshLayout.setColorSchemeResources(R.color.colorPrimaryDark);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mBrowsePresenter.getShots(BrowsePresenter.SHOT_COUNT, BrowsePresenter.SHOT_PAGE);
}
});
}
private RecyclerView.LayoutManager setLayoutManager() {
RecyclerView.LayoutManager layoutManager;
if (!mIsTabletLayout) {
layoutManager = new LinearLayoutManager(getActivity());
} else {
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 6);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return 3;
}
});
layoutManager = gridLayoutManager;
}
return layoutManager;
}
@OnClick(R.id.button_message)
public void onReloadButtonClick() {
mBrowsePresenter.getShots(BrowsePresenter.SHOT_COUNT, BrowsePresenter.SHOT_PAGE);
}
@Override
public void onShotClick(Shot shot) {
Intent intent = ShotActivity.getStartIntent(getActivity(), shot);
startActivity(intent);
}
/** Browse MVP View method implementation **/
@Override
public void showProgress() {
if (mShotRecycler.getVisibility() == View.VISIBLE && mBrowseAdapter.getItemCount() > 0) {
mSwipeRefreshLayout.setRefreshing(true);
} else {
mRecyclerProgress.setVisibility(View.VISIBLE);
}
}
@Override
public void hideProgress() {
mSwipeRefreshLayout.setRefreshing(false);
mRecyclerProgress.setVisibility(View.GONE);
}
@Override
public void showShots(final List<Shot> shots) {
mBrowseAdapter.setShots(shots);
mBrowseAdapter.notifyDataSetChanged();
mShotRecycler.setVisibility(View.VISIBLE);
}
@Override
public void showError() {
mShotRecycler.setVisibility(View.GONE);
mMessageImage.setImageResource(R.drawable.ic_sentiment_very_dissatisfied_gray_120dp);
mMessageText.setText(getString(R.string.text_error_loading_shots));
mMessageButton.setText(getString(R.string.text_reload));
showMessageLayout(true);
}
@Override
public void showEmpty() {
mShotRecycler.setVisibility(View.GONE);
mMessageImage.setImageResource(R.drawable.ic_empty_glass_gray_120dp);
mMessageText.setText(getString(R.string.text_no_shots));
mMessageButton.setText(getString(R.string.text_check_again));
showMessageLayout(true);
}
@Override
public void showMessageLayout(boolean show) {
mMessageLayout.setVisibility(show ? View.VISIBLE : View.GONE);
}
}