package com.etiennelawlor.loop.fragments;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
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.LinearLayout;
import android.widget.TextView;
import com.etiennelawlor.loop.R;
import com.etiennelawlor.loop.adapters.CategoriesAdapter;
import com.etiennelawlor.loop.models.AccessToken;
import com.etiennelawlor.loop.network.ServiceGenerator;
import com.etiennelawlor.loop.network.VimeoService;
import com.etiennelawlor.loop.network.interceptors.AuthorizedNetworkInterceptor;
import com.etiennelawlor.loop.network.models.response.CategoriesEnvelope;
import com.etiennelawlor.loop.network.models.response.Category;
import com.etiennelawlor.loop.prefs.LoopPrefs;
import com.etiennelawlor.loop.ui.GridSpacesItemDecoration;
import com.etiennelawlor.loop.ui.LoadingImageView;
import com.etiennelawlor.loop.utilities.DisplayUtility;
import com.etiennelawlor.loop.utilities.FontCache;
import com.etiennelawlor.loop.utilities.NetworkLogUtility;
import com.etiennelawlor.loop.utilities.NetworkUtility;
import com.etiennelawlor.loop.utilities.TrestleUtility;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import jp.wasabeef.recyclerview.animators.SlideInUpAnimator;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import timber.log.Timber;
/**
* Created by etiennelawlor on 6/13/15.
*/
public class ExploreFragment extends BaseFragment implements CategoriesAdapter.OnItemClickListener {
// region Views
@BindView(R.id.rv)
RecyclerView recyclerView;
@BindView(android.R.id.empty)
View emptyView;
@BindView(R.id.loading_iv)
LoadingImageView loadingImageView;
@BindView(R.id.error_ll)
LinearLayout errorLinearLayout;
@BindView(R.id.error_tv)
TextView errorTextView;
@BindView(R.id.toolbar)
Toolbar toolbar;
// endregion
// region Member Variables
private CategoriesAdapter categoriesAdapter;
private VimeoService vimeoService;
private Typeface font;
private Unbinder unbinder;
// endregion
// region Listeners
@OnClick(R.id.reload_btn)
public void onReloadButtonClicked() {
errorLinearLayout.setVisibility(View.GONE);
loadingImageView.setVisibility(View.VISIBLE);
Call getCategoriesCall = vimeoService.getCategories();
calls.add(getCategoriesCall);
getCategoriesCall.enqueue(getCategoriesCallback);
}
// endregion
// region Callbacks
private Callback<CategoriesEnvelope> getCategoriesCallback = new Callback<CategoriesEnvelope>() {
@Override
public void onResponse(Call<CategoriesEnvelope> call, Response<CategoriesEnvelope> response) {
loadingImageView.setVisibility(View.GONE);
if (!response.isSuccessful()) {
int responseCode = response.code();
if(responseCode == 504) { // 504 Unsatisfiable Request (only-if-cached)
errorTextView.setText("Can't load data.\nCheck your network connection.");
errorLinearLayout.setVisibility(View.VISIBLE);
}
return;
}
CategoriesEnvelope categoriesEnvelope = response.body();
if (categoriesEnvelope != null) {
List<Category> categories = categoriesEnvelope.getCategories();
categoriesAdapter.addAll(categories);
}
}
@Override
public void onFailure(Call<CategoriesEnvelope> call, Throwable t) {
NetworkLogUtility.logFailure(call, t);
if (!call.isCanceled()){
loadingImageView.setVisibility(View.GONE);
if(NetworkUtility.isKnownException(t)){
errorTextView.setText("Can't load data.\nCheck your network connection.");
errorLinearLayout.setVisibility(View.VISIBLE);
}
}
}
};
// endregion
// region Constructors
public ExploreFragment() {
}
// endregion
// region Factory Methods
public static ExploreFragment newInstance() {
return new ExploreFragment();
}
public static ExploreFragment newInstance(Bundle extras) {
ExploreFragment fragment = new ExploreFragment();
fragment.setArguments(extras);
return fragment;
}
// endregion
// region Lifecycle Methods
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AccessToken token = LoopPrefs.getAccessToken(getActivity());
vimeoService = ServiceGenerator.createService(
VimeoService.class,
VimeoService.BASE_URL,
new AuthorizedNetworkInterceptor(token));
font = FontCache.getTypeface("Ubuntu-Medium.ttf", getContext());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_explore, container, false);
unbinder = ButterKnife.bind(this, rootView);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
if(ab != null){
ab.setHomeAsUpIndicator(R.drawable.ic_menu_light);
ab.setDisplayHomeAsUpEnabled(true);
ab.setTitle(TrestleUtility.getFormattedText(getString(R.string.explore), font));
}
LinearLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.addItemDecoration(new GridSpacesItemDecoration(DisplayUtility.dp2px(getActivity(), 8)));
categoriesAdapter = new CategoriesAdapter();
categoriesAdapter.setOnItemClickListener(this);
recyclerView.setItemAnimator(new SlideInUpAnimator());
recyclerView.setAdapter(categoriesAdapter);
Call getCategoriesCall = vimeoService.getCategories();
calls.add(getCategoriesCall);
getCategoriesCall.enqueue(getCategoriesCallback);
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
// endregion
// region CategoriesAdapter.OnItemClickListener Methods
@Override
public void onItemClick(int position, View view) {
Category category = categoriesAdapter.getItem(position);
Timber.d("");
// if (videoWrapper != null) {
// Video video = videoWrapper.getVideo();
// if (video != null) {
// Intent intent = new Intent(getActivity(), VideoDetailsActivity.class);
//
// Bundle bundle = new Bundle();
// bundle.putParcelable("video", video);
// intent.putExtras(bundle);
//
// Pair<View, String> p1 = Pair.create((View) view.findViewById(R.id.video_thumbnail_iv), "videoTransition");
// Pair<View, String> p2 = Pair.create((View) view.findViewById(R.id.title_tv), "titleTransition");
// Pair<View, String> p3 = Pair.create((View) view.findViewById(R.id.subtitle_tv), "subtitleTransition");
//// Pair<View, String> p4 = Pair.create((View)view.findViewById(R.id.uploaded_tv), "uploadedTransition");
//
// ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),
// p1, p2, p3);
//
//
// ActivityCompat.startActivity(getActivity(), intent, options.toBundle());
//
//// startActivity(intent);
// }
// }
}
// endregion
// region Helper Methods
// endregion
}