package com.spacemangames.biomatcher; import java.util.ArrayList; import android.content.Context; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ListView; import com.actionbarsherlock.app.SherlockListFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.googlecode.androidannotations.annotations.EFragment; import com.spacemangames.biomatcher.controller.ProfileArrayAdapter; import com.spacemangames.biomatcher.controller.ProfileManager; import com.spacemangames.biomatcher.data.Profile; @EFragment public class ProfileManagerFragment extends SherlockListFragment { private ProfileArrayAdapter adapter; public void init(Context context) { ArrayList<Profile> profiles = new ArrayList<Profile>(ProfileManager.getProfiles(context)); adapter = new ProfileArrayAdapter(context, profiles); } @Override public void onListItemClick(ListView l, View v, int position, long id) { getListView().setSelection(position); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } public void resetAdapter() { setListAdapter(adapter); } @Override public void onStart() { super.onStart(); setHasOptionsMenu(true); setListAdapter(adapter); registerForContextMenu(getListView()); if (adapter.getCount() == 0) { WelcomeFragment welcomeFragment = WelcomeFragment.newInstance(this); welcomeFragment.show(getFragmentManager(), "dialog"); } } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); android.view.MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.profile_context_menu, menu); // you can't delete the last item, there must always be at least 1 // profile if (adapter.getCount() <= 1) { menu.removeItem(R.id.menu_delete_profile); } } @Override public boolean onContextItemSelected(android.view.MenuItem item) { AdapterContextMenuInfo info; Profile profile; switch (item.getItemId()) { case R.id.menu_edit_profile: info = (AdapterContextMenuInfo) item.getMenuInfo(); profile = adapter.getItem(info.position); ProfileEditFragment profileEditFragment = new ProfileEditFragment(); profileEditFragment.setProfile(profile, this); profileEditFragment.show(getActivity().getSupportFragmentManager(), "profileEditor"); return true; case R.id.menu_delete_profile: info = (AdapterContextMenuInfo) item.getMenuInfo(); profile = adapter.getItem(info.position); ProfileManager.removeProfile(getActivity(), profile); adapter.remove(profile); return true; } return super.onContextItemSelected(item); } @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { inflater.inflate(R.menu.profile_menu, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_add_profile: ProfileEditFragment profileEditFragment = new ProfileEditFragment(); profileEditFragment.setProfile(null, this); profileEditFragment.show(getActivity().getSupportFragmentManager(), "profileEditor"); return true; } return super.onOptionsItemSelected(item); } public void add(Profile profile) { adapter.add(profile); } public void edit(Profile profile) { adapter.remove(profile); adapter.add(profile); } }