package com.android.smap.fragments; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.view.ActionMode; 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 android.widget.AbsListView; import android.widget.LinearLayout; import android.widget.ListView; import com.android.smap.GatewayApp; import com.android.smap.R; import com.android.smap.adapters.ContactSelectionAdapter; import com.android.smap.api.models.Contact; import com.android.smap.api.models.Distribution; import com.android.smap.api.models.Survey; import com.android.smap.di.DataManager; import com.android.smap.ui.ViewQuery; import com.google.inject.Inject; import com.mjw.android.swipe.MultiChoiceSwipeListener; import com.mjw.android.swipe.SwipeListView; public class ContactSelectFragment extends BaseFragment { public static final String EXTRA_DISTRIBUTION_ID = ContactSelectFragment.class .getCanonicalName() + "id"; @Inject private DataManager mDataManager; private List<Contact> mModel; private Distribution mDistribution; private ContactSelectionAdapter mAdapter; private SwipeListView mSwipeListView; private int mDistributionId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle b = getArguments(); if (b != null) { mDistributionId = b.getInt(EXTRA_DISTRIBUTION_ID); } } @Override public View onCreateContentView(LayoutInflater inflater, Bundle savedInstanceState) { LinearLayout view = (LinearLayout) inflater.inflate( R.layout.fragment_select_contacts, null); ViewQuery query = new ViewQuery(view); mSwipeListView = (SwipeListView) query.find(R.id.list_contacts).get(); // get all necessary local data mDataManager = GatewayApp.getDependencyContainer().getDataManager(); mModel = mDataManager.getContacts(); mDistribution = mDataManager.getDistribution(mDistributionId); setupList(); // query.find(R.id.txt_completed_progress).text(completedProgress); return view; } private void setupList() { mAdapter = new ContactSelectionAdapter(getActivity(), mModel, mSwipeListView); mSwipeListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); mSwipeListView .setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { mode.setTitle(String.format("Add (%d) Contacts", mSwipeListView.getCountSelected())); } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.action_add: addContactsToSurvey(); mode.finish(); getActivity().onBackPressed(); return true; default: return false; } } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.menu_add, menu); return true; } @Override public void onDestroyActionMode(ActionMode mode) { mSwipeListView.unselectedChoiceStates(); } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } }); mSwipeListView.setSwipeListViewListener(new MultiChoiceSwipeListener( mAdapter)); mSwipeListView.setAdapter(mAdapter); } private void addContactsToSurvey() { List<Integer> selected = mSwipeListView.getPositionsSelected(); List<Contact> contacts = new ArrayList<Contact>(); for (Integer i : selected) { contacts.add(mModel.get(i)); } mDataManager.addContactsToDistribution(contacts, mDistribution); } @Override public boolean onOptionsItemSelected(MenuItem item) { boolean handled = false; switch (item.getItemId()) { case android.R.id.home: getActivity().onBackPressed(); break; } return handled; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(EXTRA_DISTRIBUTION_ID, mDistributionId); } }