package com.gaiagps.iburn.fragment; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.gaiagps.iburn.CurrentDateProvider; import com.gaiagps.iburn.R; import com.gaiagps.iburn.adapters.CursorRecyclerViewAdapter; import com.gaiagps.iburn.adapters.DividerItemDecoration; import com.gaiagps.iburn.adapters.EventSectionedCursorAdapter; import com.gaiagps.iburn.api.typeadapter.PlayaDateTypeAdapter; import com.gaiagps.iburn.database.DataProvider; import com.gaiagps.iburn.database.EventTable; import com.gaiagps.iburn.database.PlayaDatabase; import com.squareup.sqlbrite.SqlBrite; import com.tonicartos.superslim.LayoutManager; import java.util.Calendar; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import timber.log.Timber; /** * Fragment displaying all Playa Events * <p/> * Created by davidbrodsky on 8/3/13. */ public class ExploreListViewFragment extends PlayaListViewFragment { public static ExploreListViewFragment newInstance() { return new ExploreListViewFragment(); } protected CursorRecyclerViewAdapter getAdapter() { return new EventSectionedCursorAdapter(getActivity(), null, this); } @Override public Subscription createSubscription() { Calendar modifiedDate = Calendar.getInstance(); modifiedDate.setTime(CurrentDateProvider.getCurrentDate()); String lowerBoundDateStr = PlayaDateTypeAdapter.iso8601Format.format(modifiedDate.getTime()); modifiedDate.add(Calendar.HOUR, 7); String upperBoundDateStr = PlayaDateTypeAdapter.iso8601Format.format(modifiedDate.getTime()); // Get Events that start now to the next several hours return DataProvider.getInstance(getActivity().getApplicationContext()) .subscribeOn(Schedulers.computation()) .flatMap(dataProvider -> dataProvider.createQuery(PlayaDatabase.EVENTS, "SELECT " + DataProvider.makeProjectionString(adapter.getRequiredProjection()) + " FROM " + PlayaDatabase.EVENTS + " WHERE " + EventTable.startTime + " > '" + lowerBoundDateStr + "' AND " + EventTable.startTime + " < '" + upperBoundDateStr + "\' ORDER BY " + EventTable.startTime + " ASC LIMIT 100")) .map(SqlBrite.Query::run) .observeOn(AndroidSchedulers.mainThread()) .subscribe(cursor -> { Timber.d("Data onNext %d items", cursor.getCount()); onDataChanged(cursor); }, throwable -> Timber.e(throwable, "Data onError"), () -> Timber.d("Data onComplete")); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_playa_list_view, container, false); mEmptyText = (TextView) v.findViewById(android.R.id.empty); mRecyclerView = ((RecyclerView) v.findViewById(android.R.id.list)); mRecyclerView.setLayoutManager(new LayoutManager(getActivity())); mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); return v; } @Override public String getEmptyText() { return getString(R.string.no_now_items); } }