package com.pennapps.labs.pennmobile;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.pennapps.labs.pennmobile.adapters.DiningAdapter;
import com.pennapps.labs.pennmobile.api.Labs;
import com.pennapps.labs.pennmobile.classes.DiningHall;
import com.pennapps.labs.pennmobile.classes.Venue;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
public class DiningFragment extends ListFragment {
private Labs mLabs;
private ListView mListView;
private MainActivity mActivity;
@Bind(R.id.loadingPanel) RelativeLayout loadingPanel;
@Bind(R.id.no_results) TextView no_results;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLabs = MainActivity.getLabsInstance();
mActivity = (MainActivity) getActivity();
mActivity.closeKeyboard();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
mListView = getListView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_dining, container, false);
ButterKnife.bind(this, v);
getDiningHalls();
return v;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case android.R.id.home:
mActivity.onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
mActivity.getActionBarToggle().setDrawerIndicatorEnabled(false);
mActivity.getActionBarToggle().syncState();
Fragment fragment = new MenuFragment();
Bundle args = new Bundle();
args.putParcelable("DiningHall", ((DiningAdapter.ViewHolder) v.getTag()).hall);
fragment.setArguments(args);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.dining_fragment, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null)
.commitAllowingStateLoss();
}
private void getDiningHalls() {
mLabs.venues()
.flatMap(new Func1<List<Venue>, Observable<Venue>>() {
@Override
public Observable<Venue> call(List<Venue> venues) {
return Observable.from(venues);
}
})
.flatMap(new Func1<Venue, Observable<DiningHall>>() {
@Override
public Observable<DiningHall> call(Venue venue) {
DiningHall hall = new DiningHall(venue.id, venue.name, venue.isResidential(), venue.getHours(), venue);
return Observable.just(hall);
}
})
.toList()
.subscribe(new Action1<List<DiningHall>>() {
@Override
public void call(final List<DiningHall> diningHalls) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (loadingPanel != null) {
DiningAdapter adapter = new DiningAdapter(mActivity, diningHalls);
mListView.setAdapter(adapter);
loadingPanel.setVisibility(View.GONE);
}
}
});
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (loadingPanel != null) {
loadingPanel.setVisibility(View.GONE);
}
if (no_results != null) {
no_results.setVisibility(View.VISIBLE);
}
}
});
}
});
}
@Override
public void onResume() {
super.onResume();
getActivity().setTitle(R.string.dining);
mActivity.setNav(R.id.nav_dining);
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
}