package be.digitalia.fosdem.fragments;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.Loader;
import android.support.v7.widget.ConcatAdapter;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import be.digitalia.fosdem.R;
import be.digitalia.fosdem.adapters.EventsAdapter;
import be.digitalia.fosdem.db.DatabaseManager;
import be.digitalia.fosdem.loaders.SimpleCursorLoader;
import be.digitalia.fosdem.model.Person;
public class PersonInfoListFragment extends RecyclerViewFragment implements LoaderCallbacks<Cursor> {
private static final int PERSON_EVENTS_LOADER_ID = 1;
private static final String ARG_PERSON = "person";
private Person person;
private EventsAdapter adapter;
public static PersonInfoListFragment newInstance(Person person) {
PersonInfoListFragment f = new PersonInfoListFragment();
Bundle args = new Bundle();
args.putParcelable(ARG_PERSON, person);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new EventsAdapter(getActivity());
person = getArguments().getParcelable(ARG_PERSON);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.person, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.more_info:
String url = person.getUrl();
if (url != null) {
try {
Activity context = getActivity();
new CustomTabsIntent.Builder()
.setToolbarColor(ContextCompat.getColor(context, R.color.color_primary))
.setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left)
.setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right)
.build()
.launchUrl(context, Uri.parse(url));
} catch (ActivityNotFoundException ignore) {
}
}
return true;
}
return false;
}
@Override
protected void onRecyclerViewCreated(RecyclerView recyclerView, Bundle savedInstanceState) {
final int contentMargin = getResources().getDimensionPixelSize(R.dimen.content_margin);
recyclerView.setPadding(contentMargin, contentMargin, contentMargin, contentMargin);
recyclerView.setClipToPadding(false);
recyclerView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
recyclerView.setAdapter(new ConcatAdapter(new HeaderAdapter(), adapter));
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setEmptyText(getString(R.string.no_data));
setProgressBarVisible(true);
getLoaderManager().initLoader(PERSON_EVENTS_LOADER_ID, null, this);
}
private static class PersonEventsLoader extends SimpleCursorLoader {
private final Person person;
public PersonEventsLoader(Context context, Person person) {
super(context);
this.person = person;
}
@Override
protected Cursor getCursor() {
return DatabaseManager.getInstance().getEvents(person);
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new PersonEventsLoader(getActivity(), person);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data != null) {
adapter.swapCursor(data);
}
setProgressBarVisible(false);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
static class HeaderAdapter extends RecyclerView.Adapter<HeaderAdapter.ViewHolder> {
@Override
public int getItemCount() {
return 1;
}
@Override
public int getItemViewType(int position) {
return R.layout.header_person_info;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.header_person_info, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// Nothing to bind
}
static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
}
}