package org.fossasia.openevent.fragments;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
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.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.TextView;
import com.squareup.otto.Subscribe;
import org.fossasia.openevent.OpenEventApp;
import org.fossasia.openevent.R;
import org.fossasia.openevent.adapters.SponsorsListAdapter;
import org.fossasia.openevent.dbutils.DataDownloadManager;
import org.fossasia.openevent.dbutils.DbSingleton;
import org.fossasia.openevent.events.SponsorDownloadEvent;
import org.fossasia.openevent.utils.NetworkUtils;
import org.fossasia.openevent.utils.ShowNotificationSnackBar;
import butterknife.BindView;
import timber.log.Timber;
/**
* Created by MananWason on 05-06-2015.
*/
public class SponsorsFragment extends BaseFragment {
private SponsorsListAdapter sponsorsListAdapter;
@BindView(R.id.txt_no_sponsors)
TextView noSponsorsView;
@BindView(R.id.sponsor_swipe_refresh)
SwipeRefreshLayout swipeRefreshLayout;
@BindView(R.id.list_sponsors)
RecyclerView sponsorsRecyclerView;
private Snackbar snackbar;
private LinearLayoutManager linearLayoutManager;
private Toolbar toolbar;
private AppBarLayout.LayoutParams layoutParams;
private int SCROLL_OFF = 0;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
final View view = super.onCreateView(inflater, container, savedInstanceState);
OpenEventApp.getEventBus().register(this);
final DbSingleton dbSingleton = DbSingleton.getInstance();
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});
sponsorsListAdapter = new SponsorsListAdapter(getContext(), dbSingleton.getSponsorList(),
getActivity(), true);
sponsorsRecyclerView.setAdapter(sponsorsListAdapter);
linearLayoutManager = new LinearLayoutManager(getActivity());
sponsorsRecyclerView.setLayoutManager(linearLayoutManager);
sponsorsRecyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
layoutParams = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
if (linearLayoutManager.findLastCompletelyVisibleItemPosition() == linearLayoutManager.getChildCount() - 1) {
layoutParams.setScrollFlags(SCROLL_OFF);
toolbar.setLayoutParams(layoutParams);
}
sponsorsRecyclerView.getViewTreeObserver().removeOnPreDrawListener(this);
return false;
}
});
if (sponsorsListAdapter.getItemCount() != 0) {
noSponsorsView.setVisibility(View.GONE);
sponsorsRecyclerView.setVisibility(View.VISIBLE);
} else {
noSponsorsView.setVisibility(View.VISIBLE);
sponsorsRecyclerView.setVisibility(View.GONE);
}
return view;
}
@Override
protected int getLayoutResource() {
return R.layout.list_sponsors;
}
@Override
public void onDestroyView() {
super.onDestroyView();
OpenEventApp.getEventBus().unregister(this);
layoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL);
toolbar.setLayoutParams(layoutParams);
}
@Subscribe
public void sponsorDownloadDone(SponsorDownloadEvent event) {
swipeRefreshLayout.setRefreshing(false);
if (event.isState()) {
sponsorsListAdapter.refresh();
Timber.d("Refresh done");
} else {
if (getActivity() != null) {
Snackbar.make(getView(), getActivity().getString(R.string.refresh_failed), Snackbar.LENGTH_LONG).setAction(R.string.retry_download, new View.OnClickListener() {
@Override
public void onClick(View view) {
refresh();
}
}).show();
}
Timber.d("Refresh not done");
}
}
private void refresh() {
if (NetworkUtils.haveNetworkConnection(getActivity())) {
if (NetworkUtils.isActiveInternetPresent()) {
//Internet is working
DataDownloadManager.getInstance().downloadSponsors();
} else {
//Device is connected to WI-FI or Mobile Data but Internet is not working
ShowNotificationSnackBar showNotificationSnackBar = new ShowNotificationSnackBar(getContext(),getView(),swipeRefreshLayout) {
@Override
public void refreshClicked() {
refresh();
}
};
//show snackbar will be useful if user have blocked notification for this app
snackbar = showNotificationSnackBar.showSnackBar();
//show notification
showNotificationSnackBar.buildNotification();
}
} else {
Snackbar.make(getView(), getActivity().getString(R.string.refresh_failed), Snackbar.LENGTH_LONG).setAction(R.string.retry_download, new View.OnClickListener() {
@Override
public void onClick(View view) {
refresh();
}
}).show();
OpenEventApp.getEventBus().post(new SponsorDownloadEvent(true));
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
super.onCreateOptionsMenu(menu, inflater);
}
}