package org.theotech.ceaselessandroid.fragment; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import com.makeramen.roundedimageview.RoundedImageView; import com.squareup.picasso.Picasso; import org.theotech.ceaselessandroid.R; import org.theotech.ceaselessandroid.person.PersonManager; import org.theotech.ceaselessandroid.person.PersonManagerImpl; import org.theotech.ceaselessandroid.realm.pojo.PersonPOJO; import org.theotech.ceaselessandroid.util.CommonUtils; import org.theotech.ceaselessandroid.util.Constants; import org.theotech.ceaselessandroid.util.FragmentUtils; import org.theotech.ceaselessandroid.util.Refreshable; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; public class PeopleRemovedSupportFragment extends Fragment implements Refreshable { private static final String TAG = PeopleRemovedSupportFragment.class.getSimpleName(); @Bind(R.id.people_removed) ListView peopleRemoved; private PersonManager personManager; private RemovedPeopleArrayAdapter adapter; private ActionMode actionMode; public PeopleRemovedSupportFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); personManager = PersonManagerImpl.getInstance(getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // set title getActivity().setTitle(getString(R.string.nav_people)); // create view and bind View view = inflater.inflate(R.layout.fragment_support_people_removed, container, false); ButterKnife.bind(this, view); // populate the list of removed people final List<PersonPOJO> removedPersons = personManager.getRemovedPeople(); adapter = new RemovedPeopleArrayAdapter(getActivity(), removedPersons); peopleRemoved.setAdapter(adapter); peopleRemoved.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Bundle bundle = new Bundle(); bundle.putString(Constants.PERSON_ID_BUNDLE_ARG, removedPersons.get(position).getId()); FragmentUtils.loadFragment(getActivity(), getActivity().getFragmentManager(), null, R.id.person_card, bundle, new FragmentState(getString(R.string.nav_people))); } }); peopleRemoved.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); peopleRemoved.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { final int checkedCount = peopleRemoved.getCheckedItemCount(); mode.setTitle(String.format(getString(R.string.bulk_selected), checkedCount)); } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { actionMode = mode; mode.getMenuInflater().inflate(R.menu.person_removed_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { int id = item.getItemId(); if (id == R.id.person_reactivate) { final List<PersonPOJO> persons = personManager.getRemovedPeople(); SparseBooleanArray array = peopleRemoved.getCheckedItemPositions(); for (int i = 0; i < array.size(); i++) { int position = array.keyAt(i); PersonPOJO person = persons.get(position); personManager.unignorePerson(person.getId()); adapter.remove(person.getId()); } mode.finish(); return true; } return false; } @Override public void onDestroyActionMode(ActionMode mode) { actionMode = null; } }); return view; } @Override public void refreshList() { adapter.refresh(); } @Override public void dismissActionMode() { if (actionMode != null) { actionMode.finish(); } } private class RemovedPeopleArrayAdapter extends ArrayAdapter<PersonPOJO> { private final Context context; private final List<PersonPOJO> persons; private final LayoutInflater inflater; public RemovedPeopleArrayAdapter(Context context, List<PersonPOJO> persons) { super(context, -1, persons); this.context = context; this.persons = persons; this.inflater = LayoutInflater.from(context); } @Override public View getView(int position, View view, ViewGroup parent) { final ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = inflater.inflate(R.layout.list_item_people_removed, parent, false); holder.personThumbnail = (RoundedImageView) view.findViewById(R.id.person_removed_thumbnail); holder.personListName = (TextView) view.findViewById(R.id.person_removed_list_name); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } final PersonPOJO person = personManager.getPerson(persons.get(position).getId()); // thumbnail picture Picasso.with(context).load(CommonUtils.getContactUri(person.getId())).placeholder(R.drawable.placeholder_user).fit().into(holder.personThumbnail); // person name holder.personListName.setText(person.getName()); return view; } public void refresh() { persons.clear(); persons.addAll(personManager.getRemovedPeople()); notifyDataSetChanged(); } public void remove(String personId) { int index = -1; for (int i = 0; i < persons.size(); i++) { if (persons.get(i).getId().equals(personId)) { index = i; } } if (index != -1) { persons.remove(index); notifyDataSetChanged(); } } private class ViewHolder { RoundedImageView personThumbnail; TextView personListName; } } }