package de.blau.android.propertyeditor;
import java.util.ArrayList;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.support.v7.view.ActionMode.Callback;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import de.blau.android.HelpViewer;
import de.blau.android.R;
import de.blau.android.easyedit.EasyEditManager;
import de.blau.android.util.ThemeUtils;
import de.blau.android.util.Util;
class SelectedRowsActionModeCallback implements Callback {
public interface Row {
void delete();
void deselect();
boolean isSelected();
}
static final int MENU_ITEM_DELETE = 1;
static final int MENU_ITEM_HELP = 15;
ActionMode currentAction;
LinearLayout rows = null;
Fragment caller = null;
public SelectedRowsActionModeCallback(Fragment caller, LinearLayout rows) {
this.rows = rows;
this.caller = caller;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
currentAction = mode;
((PropertyEditor)caller.getActivity()).disablePaging();
((PropertyEditor)caller.getActivity()).disablePresets();
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.clear();
Context context = caller.getActivity();
menu.add(Menu.NONE, MENU_ITEM_DELETE, Menu.NONE, R.string.delete)
.setIcon(ThemeUtils.getResIdFromAttribute(context, R.attr.menu_delete));
menu.add(EasyEditManager.GROUP_BASE, MENU_ITEM_HELP, Menu.CATEGORY_SYSTEM, R.string.menu_help)
.setAlphabeticShortcut(Util.getShortCut(context, R.string.shortcut_help))
.setIcon(ThemeUtils.getResIdFromAttribute(context, R.attr.menu_help));
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_DELETE:
final int size = rows.getChildCount();
ArrayList<Row> toDelete = new ArrayList<Row>();
for (int i = 0; i < size; ++i) {
View view = rows.getChildAt(i);
Row row = (Row)view;
if (row.isSelected()) {
toDelete.add(row);
}
}
if (toDelete.size() > 0) {
for (Row r : toDelete) {
r.deselect();
r.delete();
}
}
if (currentAction != null) {
currentAction.finish();
}
break;
case MENU_ITEM_HELP:
HelpViewer.start(caller.getActivity(), R.string.help_propertyeditor);
return true;
default: return false;
}
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
final int size = rows.getChildCount();
for (int i = 0; i < size; ++i) {
View view = rows.getChildAt(i);
Row row = (Row)view;
row.deselect();
}
((PropertyEditor)caller.getActivity()).enablePaging();
((PropertyEditor)caller.getActivity()).enablePresets();
PropertyRows rowContainer = (PropertyRows)caller;
rowContainer.deselectHeaderCheckBox();
rowContainer.deselectRow();
currentAction = null;
((AppCompatActivity)caller.getActivity()).supportInvalidateOptionsMenu();
}
public boolean rowsDeselected(boolean skipHeaderRow) {
final int size = rows.getChildCount();
int initialRowIndex = skipHeaderRow ? 1 : 0;
for (int i = initialRowIndex; i < size; ++i) {
View view = rows.getChildAt(i);
Row row = (Row)view;
if (row.isSelected()) {
// something is still selected
return false;
}
}
// nothing selected -> finish
if (currentAction != null) {
currentAction.finish();
}
return true;
}
public void invalidate() {
if (currentAction != null) {
currentAction.invalidate();
}
}
}