public class LatestVideosFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{
private View view;
private RecyclerView recyclerView;
private FrontpageVideosAdapter latestVideosAdapter;
private Context context;
private SwipeRefreshLayout swipeRefreshLayout;
private LinearLayoutManager mLayoutManager;
ArrayList<Video> videoItem;
private boolean loading = true;
int pastVisiblesItems, visibleItemCount, totalItemCount;
private int page = 2;
NestedScrollView nestedScrollView;
private ViewPager viewPager;
private LinearLayout layout_dots;
private AdapterImageSlider adapterImageSlider;
private Runnable runnable = null;
private Handler handler = new Handler();
public LatestVideosFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_latest_videos, container, false);
initialization();
initScrollListener();
getFeaturedVideos();
return view;
}
private void initialization() {
context = getActivity();
videoItem = new ArrayList<>();
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh_layout);
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary);
nestedScrollView = view.findViewById(R.id.nested_scroll_view);
recyclerView = view.findViewById(R.id.recyclerView);
mLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
/**
* Showing Swipe Refresh animation on activity create
* As animation won't start on onCreate, post runnable is used
*/
swipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(true);
populateData();
}
}
);
}
private void initScrollListener() {
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) {
{
visibleItemCount = mLayoutManager.getChildCount();
totalItemCount = mLayoutManager.getItemCount();
pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
//loading = false;
Log.v("...", "Last Item Wow !");
//if(page <= 2) {
loadMoreData(page);
page++;
//}
}
}
}
}
}
});
}
private void populateData() {
// showing refresh animation before making http call
swipeRefreshLayout.setRefreshing(true);
page = 2;
LatestInterface apiService = APIClient.getClient().create(LatestInterface.class);
Call<LatestResponse> call = apiService.getResults();
call.enqueue(new Callback<LatestResponse>() {
@Override
public void onResponse(Call<LatestResponse> call, Response<LatestResponse> response) {
if (response.isSuccessful()) {
try {
Constant.showLoading(context, "Videos are being loaded...");
List<LatestAPI> videos = response.body().getData();
videoItem.clear();
//latestVideosAdapter.notifyDataSetChanged();
for (int i = 0; i < videos.size(); i++) {
videoItem.add(new Video(
videos.get(i).getVid_category_title(),
videos.get(i).getVid_created_at(),
videos.get(i).getVid_url(),
videos.get(i).getVid_category_id(),
videos.get(i).getVid_start(),
videos.get(i).getVid_end())
);
}
latestVideosAdapter = new FrontpageVideosAdapter(context, videoItem);
recyclerView.setAdapter(latestVideosAdapter);
Constant.hideLoading();
//Toast.makeText(context, "latestVideosAdapter: " + latestVideosAdapter.getItemCount(), Toast.LENGTH_SHORT).show();
} catch (Throwable e) {
Constant.hideLoading();
//Constant.showGeneralWarning(context, "Error (Throwable): " + e.getMessage());
Log.d(TAG, "Error (Throwable): " + e.getMessage());
}
// stopping swipe refresh
swipeRefreshLayout.setRefreshing(false);
} else {
Constant.hideLoading();
if(response.code() == 401){
}
Log.d(TAG, "Retrofit Failed: " + response.message());
}
}
@Override
public void onFailure(Call<LatestResponse> call, Throwable t) {
// stopping swipe refresh
swipeRefreshLayout.setRefreshing(false);
Log.d(TAG, "Kapuso Error: " + t.getMessage());
}
});
}
public void loadMoreData(int page) {
Toast.makeText(context, "loadmoredata: " + page, Toast.LENGTH_SHORT).show();
//swipeRefreshLayout.setRefreshing(true);
Constant.showLoading(context, "Loading videos...");
LatestInterface apiService = APIClient.getClient().create(LatestInterface.class);
Call<LatestResponse> call = apiService.loadMore(page);
call.enqueue(new Callback<LatestResponse>() {
@Override
public void onResponse(Call<LatestResponse> call, Response<LatestResponse> response) {
if (response.isSuccessful()) {
try {
List<LatestAPI> videos = response.body().getData();
for (int i = 0; i < videos.size(); i++) {
videoItem.add(new Video(
videos.get(i).getVid_category_title(),
videos.get(i).getVid_created_at(),
videos.get(i).getVid_url(),
videos.get(i).getVid_category_id(),
videos.get(i).getVid_start(),
videos.get(i).getVid_end())
);
}
recyclerView.setAdapter(latestVideosAdapter);
int curSize = latestVideosAdapter.getItemCount();
latestVideosAdapter.notifyItemRangeChanged(curSize, videoItem.size() - 1);
Constant.hideLoading();
} catch (Throwable e) {
Constant.hideLoading();
//Constant.showGeneralWarning(context, "Error (Throwable): " + e.getMessage());
Log.d(TAG, "Error (Throwable): " + e.getMessage());
}
// stopping swipe refresh
Constant.hideLoading();
} else {
if (response.code() == 401) {
}
Log.d(TAG, "Retrofit Failed: " + response.message());
Constant.hideLoading();
}
}
@Override
public void onFailure(Call<LatestResponse> call, Throwable t) {
// stopping swipe refresh
Constant.hideLoading();
Log.d(TAG, "Kapuso Error: " + t.getMessage());
}
});
}
public void initFeaturedSlider(final ArrayList<Video> videoItem) {
layout_dots = view.findViewById(R.id.layout_dots);
viewPager = view.findViewById(R.id.pager);
adapterImageSlider = new AdapterImageSlider(getActivity(), new ArrayList<Video>(), context);
adapterImageSlider.setItems(videoItem);
viewPager.setAdapter(adapterImageSlider);
// displaying selected image first
viewPager.setCurrentItem(0);
addBottomDots(layout_dots, adapterImageSlider.getCount(), 0);
((TextView) view.findViewById(R.id.title)).setText(videoItem.get(0).getTitle());
((TextView) view.findViewById(R.id.brief)).setText(videoItem.get(0).getDate());
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int pos, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int pos) {
((TextView) view.findViewById(R.id.title)).setText(videoItem.get(pos).getTitle());
((TextView) view.findViewById(R.id.brief)).setText(videoItem.get(pos).getDate());
addBottomDots(layout_dots, adapterImageSlider.getCount(), pos);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
startAutoSlider(adapterImageSlider.getCount());
}
private void getFeaturedVideos() {
FeaturedInterface apiService = APIClient.getClient().create(FeaturedInterface.class);
Call<FeaturedResponse> call = apiService.getResults();
call.enqueue(new Callback<FeaturedResponse>() {
@Override
public void onResponse(Call<FeaturedResponse> call, Response<FeaturedResponse> response) {
if (response.isSuccessful()) {
try {
List<FeaturedAPI> videos = response.body().getData();
ArrayList<Video> videoItem = new ArrayList<>();
Log.v(TAG, "Videos Size: " + videos.size());
for (int i = 0; i < videos.size(); i++) {
videoItem.add( new Video(
videos.get(i).getVid_category_title(),
videos.get(i).getVid_created_at(),
videos.get(i).getVid_url(),
videos.get(i).getVid_category_id(),
videos.get(i).getVid_start(),
videos.get(i).getVid_end())
);
}
initFeaturedSlider(videoItem);
} catch (Throwable e) {
Log.d(TAG, "Error (Throwable): " + e.getMessage());
Toast.makeText(context, "Retrofit Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
} else {
if(response.code() == 401){
}
Log.d(TAG, "Retrofit Failed: " + response.message());
}
}
@Override
public void onFailure(Call<FeaturedResponse> call, Throwable t) {
Log.d(TAG, "Kapuso Error: " + t.getMessage());
Toast.makeText(context, "Retrofit Error: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
private void addBottomDots(LinearLayout layout_dots, int size, int current) {
ImageView[] dots = new ImageView[size];
layout_dots.removeAllViews();
for (int i = 0; i < dots.length; i++) {
dots[i] = new ImageView(context);
int width_height = 15;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(width_height, width_height));
params.setMargins(10, 0, 10, 0);
dots[i].setLayoutParams(params);
dots[i].setImageResource(R.drawable.shape_circle_outline);
dots[i].setColorFilter(ContextCompat.getColor(context, R.color.grey_40), PorterDuff.Mode.SRC_ATOP);
layout_dots.addView(dots[i]);
}
if (dots.length > 0) {
dots[current].setImageResource(R.drawable.shape_circle);
dots[current].setColorFilter(ContextCompat.getColor(context, R.color.grey_40), PorterDuff.Mode.SRC_ATOP);
}
}
private void startAutoSlider(final int count) {
runnable = new Runnable() {
@Override
public void run() {
int pos = viewPager.getCurrentItem();
pos = pos + 1;
if (pos >= count) pos = 0;
viewPager.setCurrentItem(pos);
handler.postDelayed(runnable, 5000);
}
};
handler.postDelayed(runnable, 5000);
}
private static class AdapterImageSlider extends PagerAdapter {
private Activity act;
private List<Video> items;
private Context context;
private AdapterImageSlider.OnItemClickListener onItemClickListener;
private interface OnItemClickListener {
void onItemClick(View view, Video obj);
}
public void setOnItemClickListener(AdapterImageSlider.OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
// constructor
private AdapterImageSlider(Activity activity, List<Video> items, Context context) {
this.act = activity;
this.items = items;
this.context = context;
}
@Override
public int getCount() {
return this.items.size();
}
public Video getItem(int pos) {
return items.get(pos);
}
public void setItems(List<Video> items) {
this.items = items;
notifyDataSetChanged();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
final Video o = items.get(position);
LayoutInflater inflater = (LayoutInflater) act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.item_slider_image, container, false);
TextView featured_title = v.findViewById(R.id.featured_title);
RelativeLayout featured_wrapper = v.findViewById(R.id.featured_wrapper);
MaterialRippleLayout lyt_parent = v.findViewById(R.id.lyt_parent);
//Tools.displayImageOriginal(act, image, o.image);
lyt_parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(v, o);
}
}
});
featured_title.setText(items.get(position).getTitle());
featured_wrapper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String VIDEO_URL = items.get(position).getUrl();
int VIDEO_CATEGORY_ID = items.get(position).getCategory_id();
String VIDEO_TITLE = items.get(position).getTitle();
int VIDEO_START = items.get(position).getStart();
int VIDEO_END = items.get(position).getEnd();
String VIDEO_DATE = items.get(position).getDate();
String videoType = VIDEO_URL.substring(VIDEO_URL.length() - 4);
final String part = (VIDEO_START == 0) ? " - Full" : " - Part " + VIDEO_START + " of " + VIDEO_END;
if(videoType.equals(".mp4")) {
Intent dailyIntent = new Intent(view.getContext(), WatchMp4Activity.class);
dailyIntent.putExtra("url", VIDEO_URL);
dailyIntent.putExtra("category_id", VIDEO_CATEGORY_ID);
dailyIntent.putExtra("title", VIDEO_TITLE);
dailyIntent.putExtra("part", part);
dailyIntent.putExtra("date", VIDEO_DATE);
context.startActivity(dailyIntent);
} else {
Intent mp4Intent = new Intent(context, WatchDailymotionActivity.class);
mp4Intent.putExtra("url", VIDEO_URL);
mp4Intent.putExtra("category_id", VIDEO_CATEGORY_ID);
mp4Intent.putExtra("title", VIDEO_TITLE);
mp4Intent.putExtra("part", part);
mp4Intent.putExtra("date", VIDEO_DATE);
context.startActivity(mp4Intent);
}
}
});
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((RelativeLayout) object);
}
}
public void onRefresh() {
initialization();
initScrollListener();
getFeaturedVideos();
}
}