/**
* Copyright (C) 2013 Romain Guefveneu.
*
* This file is part of naonedbus.
*
* Naonedbus is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Naonedbus is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.naonedbus.fragment.impl;
import net.naonedbus.R;
import net.naonedbus.activity.impl.ArretsActivity;
import net.naonedbus.activity.impl.CommentaireActivity;
import net.naonedbus.activity.impl.PlanActivity;
import net.naonedbus.bean.Ligne;
import net.naonedbus.fragment.CustomCursorFragment;
import net.naonedbus.helper.StateHelper;
import net.naonedbus.intent.ParamIntent;
import net.naonedbus.manager.impl.FavoriManager;
import net.naonedbus.manager.impl.FavoriManager.OnFavoriActionListener;
import net.naonedbus.manager.impl.LigneManager;
import net.naonedbus.provider.impl.LigneProvider;
import net.naonedbus.provider.table.LigneTable;
import net.naonedbus.widget.adapter.impl.LigneCursorAdapter;
import net.naonedbus.widget.indexer.impl.LigneCursorIndexer;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.CursorWrapper;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.util.SparseIntArray;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
public class LignesFragment extends CustomCursorFragment {
private final static int FILTER_ALL = 0;;
private final static int FILTER_FAVORIS = 1;
private final static SparseIntArray MENU_MAPPING = new SparseIntArray();
static {
MENU_MAPPING.append(FILTER_ALL, R.id.menu_filter_all);
MENU_MAPPING.append(FILTER_FAVORIS, R.id.menu_filter_favoris);
}
private FavoriManager mFavoriManager;
private StateHelper mStateHelper;
private LigneCursorAdapter mAdapter;
private LigneManager mLigneManager;
private int mCurrentFilter = FILTER_ALL;
/**
* Action sur les favoris.
*/
private final OnFavoriActionListener mOnFavoriActionListener = new OnFavoriActionListener() {
@Override
public void onUpdate() {
if (mCurrentFilter == FILTER_FAVORIS) {
refreshContent();
}
};
};
public LignesFragment() {
super(R.layout.fragment_listview_section);
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
// Gestion du tri par défaut
mStateHelper = new StateHelper(getActivity());
mCurrentFilter = mStateHelper.getFilterType(this, FILTER_ALL);
mFavoriManager = FavoriManager.getInstance();
mFavoriManager.addActionListener(mOnFavoriActionListener);
mLigneManager = LigneManager.getInstance();
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
registerForContextMenu(getListView());
}
@Override
public void onPause() {
mStateHelper.setFilterType(this, mCurrentFilter);
super.onPause();
}
@Override
public void onDestroy() {
mFavoriManager.removeActionListener(mOnFavoriActionListener);
super.onDestroy();
}
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_lignes, menu);
menu.findItem(MENU_MAPPING.get(mCurrentFilter)).setChecked(true);
}
@Override
public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
final AdapterView.AdapterContextMenuInfo cmi = (AdapterView.AdapterContextMenuInfo) menuInfo;
final CursorWrapper ligne = (CursorWrapper) getListAdapter().getItem(cmi.position);
final String lettreLigne = ligne.getString(ligne.getColumnIndex(LigneTable.LETTRE));
final android.view.MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.fragment_lignes_contextual, menu);
menu.setHeaderTitle(getString(R.string.dialog_title_menu_lignes, lettreLigne));
}
@Override
public boolean onContextItemSelected(final android.view.MenuItem item) {
final AdapterView.AdapterContextMenuInfo cmi = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
final CursorWrapper cursor = (CursorWrapper) getListAdapter().getItem(cmi.position);
final Ligne ligne = mLigneManager.getSingleFromCursor(cursor);
switch (item.getItemId()) {
case R.id.menu_show_plan:
menuShowPlan(ligne);
break;
case R.id.menu_comment:
menuComment(ligne);
break;
default:
break;
}
return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_filter_all:
item.setChecked(true);
mCurrentFilter = FILTER_ALL;
refreshContent();
break;
case R.id.menu_filter_favoris:
item.setChecked(true);
mCurrentFilter = FILTER_FAVORIS;
refreshContent();
break;
default:
return false;
}
return true;
}
@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id) {
super.onListItemClick(l, v, position, id);
final CursorWrapper cursorWrapper = (CursorWrapper) getListAdapter().getItem(position);
final LigneManager ligneManager = LigneManager.getInstance();
final Ligne ligne = ligneManager.getSingleFromCursor(cursorWrapper);
final ParamIntent intent = new ParamIntent(getActivity(), ArretsActivity.class);
intent.putExtra(ArretsActivity.PARAM_LIGNE, ligne);
getActivity().startActivity(intent);
}
private void menuShowPlan(final Ligne ligne) {
final Intent intent = new Intent(getActivity(), PlanActivity.class);
intent.putExtra(PlanActivity.PARAM_CODE_LIGNE, ligne.getCode());
startActivity(intent);
}
private void menuComment(final Ligne ligne) {
final Intent intent = new Intent(getActivity(), CommentaireActivity.class);
intent.putExtra(CommentaireActivity.PARAM_LIGNE, ligne);
startActivity(intent);
}
@Override
public Loader<Cursor> onCreateLoader(final int loaderId, final Bundle bundle) {
Uri uri = LigneProvider.CONTENT_URI;
if (mCurrentFilter == FILTER_FAVORIS) {
uri = uri.buildUpon().path(LigneProvider.LIGNE_FAVORIS_URI_PATH_QUERY).build();
}
return new CursorLoader(getActivity(), uri, null, null, null, null);
}
@Override
protected CursorAdapter getCursorAdapter(final Context context) {
final String[] types = context.getResources().getStringArray(R.array.types_lignes);
mAdapter = new LigneCursorAdapter(getActivity(), null);
mAdapter.setIndexer(new LigneCursorIndexer(null, types, LigneTable.TYPE));
return mAdapter;
}
}