diff --git a/src/main/java/com/reandroid/common/ReferenceResolver.java b/src/main/java/com/reandroid/common/ReferenceResolver.java index 40c3716..a82a32b 100644 --- a/src/main/java/com/reandroid/common/ReferenceResolver.java +++ b/src/main/java/com/reandroid/common/ReferenceResolver.java @@ -24,7 +24,7 @@ import com.reandroid.arsc.value.ValueType; import java.util.*; import java.util.function.Predicate; -public class ReferenceResolver { +public class ReferenceResolver{ private final EntryStore entryStore; private final List results; private final Set resolvedIds; @@ -49,7 +49,10 @@ public class ReferenceResolver { } public List resolveWithConfig(int referenceId, ResConfig resConfig){ - return resolveAll(referenceId, new ConfigFilter(resConfig)); + ConfigFilter configFilter = new ConfigFilter(resConfig); + List results = resolveAll(referenceId, configFilter); + results.sort(configFilter); + return results; } public List resolveAll(int referenceId){ return resolveAll(referenceId, (Predicate)null); @@ -112,7 +115,7 @@ public class ReferenceResolver { return results; } - public static class ConfigFilter implements Predicate{ + public static class ConfigFilter implements Predicate, Comparator{ private final ResConfig config; public ConfigFilter(ResConfig config){ this.config = config; @@ -125,5 +128,17 @@ public class ReferenceResolver { } return resConfig.isEqualOrMoreSpecificThan(this.config); } + @Override + public int compare(Entry entry1, Entry entry2) { + ResConfig config1 = entry1.getResConfig(); + ResConfig config2 = entry1.getResConfig(); + if (config.equals(config1)){ + return -1; + } + if(config.equals(config2)){ + return 1; + } + return 0; + } } }