package com.hitherejoe.bourbon.ui.shot;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
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.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.hitherejoe.bourbon.R;
import com.hitherejoe.bourboncorecommon.data.model.Comment;
import com.hitherejoe.bourboncorecommon.data.model.Shot;
import com.hitherejoe.bourboncorecommon.ui.shot.ShotMvpView;
import com.hitherejoe.bourboncorecommon.ui.shot.ShotPresenter;
import com.hitherejoe.bourbon.ui.base.BaseActivity;
import java.util.List;
import javax.inject.Inject;
import butterknife.Bind;
import butterknife.ButterKnife;
public class ShotFragment extends Fragment implements ShotMvpView {
private static final String ARGUMENT_SHOT = "ARGUMENT_SHOT";
@Inject CommentAdapter mCommentsAdapter;
@Inject ShotPresenter mShotPresenter;
@Bind(R.id.recycler_comments) RecyclerView mCommentsRecycler;
@Bind(R.id.toolbar_shot) Toolbar mToolbar;
@Bind(R.id.image_shot) ImageView mShotImage;
@Bind(R.id.text_title) TextView mTitleText;
@Bind(R.id.text_like_count) TextView mLikeText;
@Bind(R.id.text_comments_title) TextView mCommentsTitleText;
@Bind(R.id.progress) View mProgress;
@Bind(R.id.text_error_message) View mErrorText;
public static ShotFragment newInstance(Shot shot) {
ShotFragment shotFragment = new ShotFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(ARGUMENT_SHOT, shot);
shotFragment.setArguments(bundle);
return shotFragment;
}
@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_shot, container, false);
ButterKnife.bind(this, fragmentView);
Shot shot = getArguments().getParcelable(ARGUMENT_SHOT);
if (shot == null) {
throw new IllegalArgumentException("Shotfragment requires a shot instance");
}
((AppCompatActivity) getActivity()).setSupportActionBar(mToolbar);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
}
mShotPresenter.attachView(this);
mCommentsRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mCommentsRecycler.setHasFixedSize(true);
mCommentsRecycler.setAdapter(mCommentsAdapter);
setupLayout(shot);
mShotPresenter.getComments(shot.id, ShotPresenter.SHOT_COUNT, ShotPresenter.SHOT_PAGE);
return fragmentView;
}
private void setupLayout(Shot shot) {
Glide.with(this).load(shot.images.normal)
.diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mShotImage);
mTitleText.setText(shot.title);
mLikeText.setText(shot.likes_count);
}
@Override
public void showProgress() {
mProgress.setVisibility(View.VISIBLE);
}
@Override
public void hideProgress() {
mProgress.setVisibility(View.GONE);
}
@Override
public void showComments(List<Comment> comments) {
mCommentsAdapter.setComments(comments);
mCommentsAdapter.notifyDataSetChanged();
mCommentsRecycler.setVisibility(View.VISIBLE);
}
@Override
public void showCommentsTitle(boolean hasComments) {
mCommentsTitleText.setText(getString(hasComments ?
R.string.text_recent_comments : R.string.text_no_recent_comments));
mCommentsTitleText.setVisibility(View.VISIBLE);
}
@Override
public void showError() {
mCommentsRecycler.setVisibility(View.GONE);
mCommentsTitleText.setVisibility(View.GONE);
mErrorText.setVisibility(View.VISIBLE);
}
@Override
public void showEmptyComments() {
mCommentsTitleText.setVisibility(View.VISIBLE);
mCommentsRecycler.setVisibility(View.GONE);
}
}