package org.tvbrowser.filter; import org.tvbrowser.content.TvBrowserContentProvider; import org.tvbrowser.tvbrowser.WhereClause; import org.tvbrowser.utils.UiUtils; import android.content.Context; import android.view.ViewGroup; /** * A class with values of a category filter. * <p> * @author René Mach */ public class FilterValuesCategories extends FilterValues implements CategoryFilter { private int[] mColumnIndicies; private String mOperation; public FilterValuesCategories() { this("",new int[0],"AND"); } public FilterValuesCategories(String name, int[] columnIndicies, String operation) { super(name); mColumnIndicies = columnIndicies; mOperation = operation; } protected FilterValuesCategories(String name, String values) { super(name); String[] parts = values.split(";"); mOperation = parts[0].toUpperCase(); mColumnIndicies = new int[parts.length-1]; for(int i = 1; i < parts.length; i++) { mColumnIndicies[i-1] = Integer.parseInt(parts[i]); } } public WhereClause getWhereClause(Context context) { StringBuilder whereClause = new StringBuilder(); if(mColumnIndicies.length > 0) { whereClause.append(" AND ( "); String[] columnNames = TvBrowserContentProvider.INFO_CATEGORIES_COLUMNS_ARRAY; for(int i = 0; i < mColumnIndicies.length-1; i++) { whereClause.append(columnNames[mColumnIndicies[i]]).append(" ").append(mOperation).append(" "); } whereClause.append(columnNames[mColumnIndicies[mColumnIndicies.length-1]]).append(" ) "); } return new WhereClause(whereClause.toString(),null); } @Override protected String getSaveString() { StringBuilder save = new StringBuilder(); save.append(mOperation).append(";"); for(int i = 0; i < mColumnIndicies.length-1; i++) { save.append(mColumnIndicies[i]).append(";"); } if(mColumnIndicies.length > 0) { save.append(mColumnIndicies[mColumnIndicies.length-1]); } return save.toString(); } private Runnable mCallback; @Override public void edit(Context context, Runnable callback, ViewGroup parent) { mCallback = callback; UiUtils.showCategorySelection(context, this, parent, null); } @Override public int[] getCategoriyIndicies() { return mColumnIndicies; } @Override public String getOperation() { return mOperation; } @Override public void setFilterValues(String name, String operation, int[] categoryIndicies) { if(name != null && categoryIndicies != null && operation != null) { mName = name; mOperation = operation; mColumnIndicies = categoryIndicies; if(mCallback != null) { mCallback.run(); } mCallback = null; } } }