package com.lateensoft.pathfinder.toolkit.views;
import android.app.Activity;
import android.view.ActionMode;
import android.view.MenuItem;
import android.widget.ListView;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import java.util.List;
public abstract class MultiSelectActionModeController {
private ActionMode actionMode;
private ActionModeCallback actionModeCallback;
public boolean isActionModeStarted() {
return actionMode != null;
}
public void startActionModeWithInitialSelection(int position) {
startActionMode();
actionModeCallback.selectListItem(position, true);
}
public void startActionMode() {
Preconditions.checkState(actionMode == null);
actionModeCallback = new ActionModeCallback();
actionMode = getActivity().startActionMode(actionModeCallback);
}
public abstract Activity getActivity();
public void toggleListItemSelection(int position) {
Preconditions.checkState(actionModeCallback != null);
actionModeCallback.toggleListItemSelection(position);
}
public boolean isListItemSelected(int position) {
return actionModeCallback != null &&
actionModeCallback.isListItemSelected(position);
}
public <T> List<T> getSelectedItems(List<T> listItems) {
if (actionModeCallback != null) {
return actionModeCallback.getSelectedItems(listItems);
} else {
return Lists.newArrayList();
}
}
private class ActionModeCallback extends MultiSelectActionModeCallback {
public ActionModeCallback() {
super(getActionMenuResourceId());
}
@Override
public ListView getListView() {
return MultiSelectActionModeController.this.getListView();
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return MultiSelectActionModeController.this
.onActionItemClicked(MultiSelectActionModeController.this, item);
}
@Override
public void onDestroyActionMode(ActionMode mode) {
actionMode = null;
actionModeCallback = null;
super.onDestroyActionMode(mode);
}
}
public abstract int getActionMenuResourceId();
public void finishActionMode() {
Preconditions.checkState(actionMode != null);
actionMode.finish();
}
public abstract ListView getListView();
public abstract boolean onActionItemClicked(MultiSelectActionModeController controller,
MenuItem item);
}