package com.orgzly.android.ui; import android.os.Bundle; import android.view.View; import com.orgzly.R; import java.util.TreeSet; public class Selection { private static final String SAVED_BUNDLE_KEY = "list_of_selected_ids"; /** IDs of selected notes. */ private TreeSet<Long> mSelectedIds = new TreeSet<>(); public void updateView(View view, long noteId) { if (mSelectedIds.contains(noteId)) { view.setBackgroundResource(R.color.item_head_selected_bg); } else { view.setBackgroundResource(0); } } public int getCount() { return mSelectedIds.size(); } public TreeSet<Long> getIds() { return mSelectedIds; } public boolean contains(long noteId) { return mSelectedIds.contains(noteId); } public void select(long noteId) { mSelectedIds.add(noteId); } public void deselect(long noteId) { mSelectedIds.remove(noteId); } public void toggle(View view, long noteId) { if (contains(noteId)) { deselect(noteId); } else { select(noteId); } if (view != null) { updateView(view, noteId); } } public void clearSelection() { mSelectedIds.clear(); } /** * Save selected items. * Restored with {@link Selection#restoreIds(android.os.Bundle)}. */ public void saveIds(Bundle bundle) { if (getCount() > 0) { long[] idsArray = new long[mSelectedIds.size()]; int i = 0; for (long id: mSelectedIds) { idsArray[i++] = id; } bundle.putLongArray(SAVED_BUNDLE_KEY, idsArray); } else { bundle.remove(SAVED_BUNDLE_KEY); } } /** * Restore selected items. * Saved with {@link Selection#saveIds(android.os.Bundle)}. */ public void restoreIds(Bundle bundle) { mSelectedIds.clear(); if (bundle != null && bundle.containsKey(SAVED_BUNDLE_KEY)) { long[] ids = bundle.getLongArray(SAVED_BUNDLE_KEY); if (ids != null) { for (long id : ids) { mSelectedIds.add(id); } } } } }