/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.text.style.URLSpan; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import com.galaxy.meetup.client.android.EsCursorLoader; import com.galaxy.meetup.client.android.EventCardAdapter; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.analytics.OzViews; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsEventData; import com.galaxy.meetup.client.android.content.EsProvider; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.service.EsServiceListener; import com.galaxy.meetup.client.android.ui.view.ColumnGridView; import com.galaxy.meetup.client.android.ui.view.EventDestinationCardView; import com.galaxy.meetup.client.android.ui.view.HostActionBar; import com.galaxy.meetup.client.android.ui.view.ItemClickListener; import com.galaxy.meetup.client.util.HelpUrl; import com.galaxy.meetup.server.client.util.JsonUtil; import com.galaxy.meetup.server.client.v2.domain.Event; /** * * @author sihai * */ public class HostedEventListFragment extends HostedEsFragment implements LoaderCallbacks, View.OnClickListener, ItemClickListener { private EventCardAdapter mAdapter; private int mCurrentMode; private int mCurrentSpinnerPosition; private boolean mDataPresent; private ColumnGridView mGridView; private final Handler mHandler = new Handler(); private boolean mInitialLoadDone; private final EsServiceListener mListener = new EsServiceListener() { public final void onEventHomeRequestComplete(int i) { if(mNewerReqId != null && i == mNewerReqId.intValue()) { mNewerReqId = null; mRefreshNeeded = false; getActionBar().hideProgressIndicator(); mHandler.post(new Runnable() { public final void run() { if(getActivity() != null && !getActivity().isFinishing()) getLoaderManager().restartLoader(0, null, HostedEventListFragment.this); } }); } }}; private boolean mRefreshNeeded; private ArrayAdapter mSpinnerAdapter; public HostedEventListFragment() { mCurrentMode = 0; } private void fetchData() { FragmentActivity fragmentactivity = getActivity(); if(mNewerReqId == null && fragmentactivity != null) { if(!mDataPresent) showEmptyViewProgress(getView(), getString(R.string.loading)); getActionBar().showProgressIndicator(); mNewerReqId = EsService.getEventHome(fragmentactivity, mAccount); } } private void setCreationVisibility(int i) { getView().findViewById(R.id.createButton).setVisibility(i); getView().findViewById(R.id.createText).setVisibility(i); } public final OzViews getViewForLogging() { return OzViews.MY_EVENTS; } protected final boolean isEmpty() { boolean flag; if(mAdapter == null || mAdapter.isEmpty()) flag = true; else flag = false; return flag; } public final void onActionButtonClicked(int i) { if(0 == i) { startActivity(Intents.getCreateEventActivityIntent(getActivity().getApplicationContext(), mAccount)); } } public void onClick(View view) { if(!(view instanceof EventDestinationCardView)) { if(view.getId() == R.id.createButton) startActivity(Intents.getCreateEventActivityIntent(getActivity().getApplicationContext(), mAccount)); } else { Event event = ((EventDestinationCardView)view).getEvent(); if(event != null) { String s = event.get_id(); String s1 = event.getPublisher(); startActivity(Intents.getHostedEventIntent(getActivity(), mAccount, s, s1, null)); } } } public final void onCreate(Bundle bundle) { super.onCreate(bundle); if(bundle != null) { mRefreshNeeded = bundle.getBoolean("events_refresh", false); mInitialLoadDone = bundle.getBoolean("events_initialload", false); mCurrentMode = bundle.getInt("events_currentmode", 0); mDataPresent = bundle.getBoolean("events_datapresent", false); } else { mRefreshNeeded = getArguments().getBoolean("refresh", false); } getLoaderManager().initLoader(0, null, this); } public final Loader onCreateLoader(int i, Bundle bundle) { return new EventsLoader(getActivity(), mAccount, mCurrentMode); } public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { View view = layoutinflater.inflate(R.layout.hosted_events_fragment, viewgroup, false); mGridView = (ColumnGridView)view.findViewById(R.id.grid); mAdapter = new EventCardAdapter(getActivity(), mAccount, null, this, this, mGridView); mGridView.setAdapter(mAdapter); setupEmptyView(view, R.string.no_events); Button button = (Button)view.findViewById(R.id.createButton); button.setClickable(true); button.setOnClickListener(this); return view; } @Override public final void onLoadFinished(Loader loader, Object obj) { int mode; Cursor cursor = (Cursor)obj; mAdapter.changeCursor(cursor); mDataPresent = cursor != null && cursor.getCount() > 0; if (mDataPresent && cursor.moveToFirst()) { byte[] bytes = cursor.getBlob(1); if (EsEventData.isEventOver((Event) JsonUtil.fromByteArray(bytes, Event.class), System.currentTimeMillis())) mCurrentSpinnerPosition = 1; else mCurrentSpinnerPosition = 0; } boolean isShowCreation = !mDataPresent && !mRefreshNeeded && mCurrentMode == 0; if(isShowCreation) setCreationVisibility(View.VISIBLE); else setCreationVisibility(View.GONE); if(mDataPresent) showContent(getView()); else if(mRefreshNeeded) showEmptyViewProgress(getView(), getString(R.string.loading)); else if(isShowCreation) showContent(getView()); else showEmptyView(getView(), getString(R.string.no_events)); if(mRefreshNeeded) { invalidateActionBar(); return; } else { mInitialLoadDone = true; if(!(loader instanceof EventsLoader)) { invalidateActionBar(); return; } else { mode = ((EventsLoader)loader).getCurrentMode(); if(!mDataPresent) { if(mode != mCurrentMode) getLoaderManager().restartLoader(0, null, this); invalidateActionBar(); return; } else { mCurrentMode = mode; invalidateActionBar(); return; } } } } public final void onLoaderReset(Loader loader) { } public final boolean onOptionsItemSelected(MenuItem menuitem) { boolean flag; if(menuitem.getItemId() == R.id.help) { String s = getResources().getString(R.string.url_param_help_events); startExternalActivity(new Intent("android.intent.action.VIEW", HelpUrl.getHelpUrl(getActivity(), s))); flag = true; } else { flag = super.onOptionsItemSelected(menuitem); } return flag; } public final void onPause() { EsService.unregisterListener(mListener); super.onPause(); } protected final void onPrepareActionBar(HostActionBar hostactionbar) { mSpinnerAdapter = new ArrayAdapter(getActivity(), R.layout.simple_spinner_item); mSpinnerAdapter.setDropDownViewResource(0x1090009); CharSequence acharsequence[] = getResources().getTextArray(R.array.event_spinner_items); int i = 0; for(int j = acharsequence.length; i < j; i++) mSpinnerAdapter.add(acharsequence[i].toString()); if(mCurrentMode != 0 || mDataPresent) hostactionbar.showPrimarySpinner(mSpinnerAdapter, mCurrentSpinnerPosition); hostactionbar.showActionButton(0, R.drawable.icn_events_create_event, R.string.event_button_add_event_label); hostactionbar.showRefreshButton(); if(mNewerReqId != null) hostactionbar.showProgressIndicator(); } public final void onPrimarySpinnerSelectionChange(int i) { if(mCurrentSpinnerPosition != i) { mCurrentSpinnerPosition = i; int j; if(mCurrentSpinnerPosition == 0) j = 2; else j = 1; mCurrentMode = j; mGridView.setSelectionToTop(); getLoaderManager().restartLoader(0, null, this); } } public final void onResume() { EsService.registerListener(mListener); super.onResume(); if(mRefreshNeeded) fetchData(); } protected final void onResumeContentFetched(View view) { super.onResumeContentFetched(view); mRefreshNeeded = false; } public final void onSaveInstanceState(Bundle bundle) { bundle.putBoolean("events_refresh", mRefreshNeeded); bundle.putBoolean("events_initialload", mInitialLoadDone); bundle.putInt("events_currentmode", mCurrentMode); bundle.putBoolean("events_datapresent", mDataPresent); super.onSaveInstanceState(bundle); } public final void onSpanClick(URLSpan urlspan) { } public final void onUserImageClick(String s, String s1) { startActivity(Intents.getProfileActivityByGaiaIdIntent(getActivity(), mAccount, s, null)); } @Override public final void refresh() { super.refresh(); setCreationVisibility(8); fetchData(); } protected final void showContent(View view) { super.showContent(view); mGridView.setVisibility(0); } protected final void showEmptyView(View view, String s) { super.showEmptyView(view, s); mGridView.setVisibility(8); } static final class EventsLoader extends EsCursorLoader { private final EsAccount mAccount; private int mMode; public EventsLoader(Context context, EsAccount esaccount, int mode) { super(context, EsProvider.EVENTS_ALL_URI); mMode = mode; mAccount = esaccount; } public final Cursor esLoadInBackground() { boolean flag = true; Cursor cursor = null; if(0 == mMode) { cursor = EsEventData.getMyCurrentEvents(getContext(), mAccount, System.currentTimeMillis(), Query.PROJECTION); if(!flag || cursor != null && cursor.getCount() > 0) { mMode = 2; } } else if(1 == mMode) { cursor = EsEventData.getMyPastEvents(getContext(), mAccount, System.currentTimeMillis(), Query.PROJECTION); if(cursor != null && cursor.getCount() > 0) mMode = 1; } else if(2 == mMode) { flag = false; cursor = EsEventData.getMyCurrentEvents(getContext(), mAccount, System.currentTimeMillis(), Query.PROJECTION); if(!flag || cursor != null && cursor.getCount() > 0) { mMode = 2; } } return cursor; } public final int getCurrentMode() { return mMode; } } public static interface Query { public static final String PROJECTION[] = { "_id", "event_data" }; } }