diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java index 21109a9110a..e1b477b4030 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java @@ -118,6 +118,7 @@ public class AdvancedSearchFilter extends ItemFilter Forge.openScreen(editScreen); } + @SuppressWarnings("unchecked") private void updateLabel() { StringBuilder builder = new StringBuilder(); builder.append("Filter: "); @@ -125,8 +126,29 @@ public class AdvancedSearchFilter extends ItemFilter builder.append("(none)"); } else { + int prevFilterEndIdx = -1; + AdvancedSearch.Filter filter, prevFilter = null; for (Object piece : expression) { - builder.append(piece); + if (piece instanceof AdvancedSearch.Filter) { + filter = (AdvancedSearch.Filter)piece; + if (filter.canMergeCaptionWith(prevFilter)) { + //convert boolean operators between filters to lowercase + builder.replace(prevFilterEndIdx, builder.length(), builder.substring(prevFilterEndIdx).toLowerCase()); + //append only values for filter + builder.append(filter.extractValuesFromCaption()); + } + else { + builder.append(filter); + } + prevFilter = filter; + prevFilterEndIdx = builder.length(); + } + else { + if (piece.equals(Operator.OPEN_PAREN) || piece.equals(Operator.CLOSE_PAREN)) { + prevFilter = null; //prevent merging filters with parentheses in between + } + builder.append(piece); + } } } label.setText(builder.toString()); diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 126c0d754a6..a0ea3209874 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -808,6 +808,17 @@ public class AdvancedSearch { predicate = predicate0; } + public boolean canMergeCaptionWith(Filter filter) { + return filter != null && option == filter.option && operator == filter.operator; + } + + public String extractValuesFromCaption() { + //build empty caption to determine index where values would begin + String emptyCaption = operator.formatStr.replace("%1$s", option.name); + emptyCaption = emptyCaption.replaceAll("'?%\\d\\$[sd]'?", ""); //strip other arguments + return caption.substring(emptyCaption.length()); + } + public Predicate getPredicate() { return predicate; }