package com.ashokgelal.tagsnap; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ListView; import com.actionbarsherlock.app.SherlockListFragment; import com.ashokgelal.tagsnap.listeners.LocationItemLongClickListener; import com.ashokgelal.tagsnap.listeners.TagInfoAsyncTaskCursorListener; import com.ashokgelal.tagsnap.listeners.TagInfoAsyncTaskListener; import com.ashokgelal.tagsnap.model.TagInfo; import com.ashokgelal.tagsnap.model.TagInfoAdapter; import com.ashokgelal.tagsnap.model.TagInfoAsyncTaskType; import com.ashokgelal.tagsnap.services.DatabaseHelper; public class LocationsFragment extends SherlockListFragment implements TagInfoAsyncTaskCursorListener, TagInfoAsyncTaskListener { private static final int EDIT_DETAILS_REQUEST = 1; private TagInfoAdapter mAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.sticky_header_list, container, false); } @Override public void onResume() { super.onResume(); DatabaseHelper db = DatabaseHelper.getInstance(getActivity()); db.loadCursorAsync(this); } @Override public void onCursorAvailable(Cursor cursor) { if (mAdapter == null) { mAdapter = new TagInfoAdapter(getActivity(), cursor, false); setListAdapter(mAdapter); getListView().setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); getListView().setOnItemLongClickListener(new LocationItemLongClickListener(this)); } else mAdapter.changeCursor(cursor); } @Override public void onListItemClick(ListView l, View v, int position, long id) { Cursor cursor = (Cursor) getListAdapter().getItem(position); long tagId = cursor.getLong(cursor.getColumnIndex(DatabaseHelper.ID)); DatabaseHelper.getInstance(getActivity()).getTagInfoAsync(tagId, this); } @Override public void onAsyncTaskCompleted(TagInfo taginfo, TagInfoAsyncTaskType type) { switch (type) { case RETRIEVE: Intent intent = new Intent(getActivity(), DetailsActivity.class); intent.putExtra("taginfo", taginfo); startActivityForResult(intent, EDIT_DETAILS_REQUEST); break; } } @Override public void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == EDIT_DETAILS_REQUEST) { TagInfo tagInfo = data.getParcelableExtra("taginfo"); final DatabaseHelper db = DatabaseHelper.getInstance(getActivity()); db.updateTagInfoAsync(tagInfo, this); } } } public void handleDelete() { Cursor cursor = (Cursor) getListAdapter().getItem(getListView().getCheckedItemPosition()); long tagId = cursor.getInt(cursor.getColumnIndex(DatabaseHelper.ID)); DatabaseHelper.getInstance(getActivity()).deleteTagInfoAsync(tagId, this); } }