package com.hdweiss.morgand.gui.outline; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.hdweiss.morgand.Application; import com.hdweiss.morgand.R; import com.hdweiss.morgand.data.dao.OrgNode; import com.hdweiss.morgand.data.dao.OrgNodeRepository; import com.hdweiss.morgand.events.DataUpdatedEvent; import com.hdweiss.morgand.gui.edit.BaseEditFragment; import com.j256.ormlite.android.apptools.OpenHelperManager; import com.squareup.otto.Subscribe; public class OutlineFragment extends Fragment { protected OutlineListView listView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Application.getBus().register(this); setHasOptionsMenu(true); } @Override public void onDestroy() { Application.getBus().unregister(this); super.onDestroy(); OpenHelperManager.releaseHelper(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_outline, container, false); listView = (OutlineListView) rootView.findViewById(R.id.list); listView.setEmptyView(rootView.findViewById(R.id.outline_list_empty)); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); listView.setActivity(getActivity()); refreshView(); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); if (savedInstanceState == null) return; if (listView != null) listView.loadState(savedInstanceState); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (listView != null) listView.saveState(outState); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.outline, menu); } @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); if (listView == null || listView.getAdapter().isEmpty()) { menu.findItem(R.id.delete).setEnabled(false); menu.findItem(R.id.add_child).setEnabled(false); } else { menu.findItem(R.id.delete).setEnabled(true); menu.findItem(R.id.add_child).setEnabled(true); } } @Override public boolean onOptionsItemSelected(MenuItem item) { int position = listView.getCheckedItemPosition(); switch(item.getItemId()) { case android.R.id.home: if (listView != null) listView.collapseCurrent(); break; case R.id.add_child: showAddDialog(position); break; case R.id.delete: showDeleteDialog(position); break; default: return super.onOptionsItemSelected(item); } return true; } private void showDeleteDialog(int position) { if (position < 0) return; OrgNode node = (OrgNode) listView.getAdapter().getItem(position); OrgNodeRepository.delete(node); Application.getBus().post(new DataUpdatedEvent()); } private void showAddDialog(int position) { if (position < 0) return; OrgNode node = (OrgNode) listView.getAdapter().getItem(position); BaseEditFragment fragment = BaseEditFragment.getAddFragment(node); fragment.show(getActivity()); } @Subscribe public void refreshView(DataUpdatedEvent event) { refreshView(); } protected void refreshView() { listView.refresh(); } }