diff --git a/src/main/java/com/reandroid/archive2/block/ApkSignatureBlock.java b/src/main/java/com/reandroid/archive2/block/ApkSignatureBlock.java index 4220113..4c2c289 100644 --- a/src/main/java/com/reandroid/archive2/block/ApkSignatureBlock.java +++ b/src/main/java/com/reandroid/archive2/block/ApkSignatureBlock.java @@ -148,13 +148,7 @@ public class ApkSignatureBlock extends LengthPrefixedList } @Override public int compare(SignatureInfo info1, SignatureInfo info2) { - if(SignatureId.PADDING.equals(info1.getId())){ - return 0; - } - if(SignatureId.PADDING.equals(info2.getId())){ - return 1; - } - return 0; + return info1.getId().compareTo(info2.getId()); } public static final String FILE_EXT = ".sig"; diff --git a/src/main/java/com/reandroid/archive2/block/SignatureId.java b/src/main/java/com/reandroid/archive2/block/SignatureId.java index 501fc04..47a9918 100644 --- a/src/main/java/com/reandroid/archive2/block/SignatureId.java +++ b/src/main/java/com/reandroid/archive2/block/SignatureId.java @@ -19,13 +19,15 @@ import com.reandroid.arsc.decoder.ValueDecoder; import java.util.Objects; -public class SignatureId { +public class SignatureId implements Comparable{ private final String name; private final int id; + private final int sort; - private SignatureId(String name, int id) { + private SignatureId(String name, int id, int sort) { this.name = name; this.id = id; + this.sort = sort; } public String name() { return name; @@ -51,6 +53,10 @@ public class SignatureId { return id == that.id; } @Override + public int compareTo(SignatureId signatureId) { + return Integer.compare(sort, signatureId.sort); + } + @Override public int hashCode() { return Objects.hash(id); } @@ -76,7 +82,7 @@ public class SignatureId { } } if (ValueDecoder.isHex(name)) { - return new SignatureId(null, ValueDecoder.parseHex(name)); + return new SignatureId(null, ValueDecoder.parseHex(name), 99); } return null; } @@ -86,20 +92,20 @@ public class SignatureId { return signatureId; } } - return new SignatureId(null, id); + return new SignatureId(null, id, 99); } public static SignatureId[] values() { return VALUES.clone(); } - public static final SignatureId V2 = new SignatureId("V2", 0x7109871A); - public static final SignatureId V3 = new SignatureId("V3", 0xF05368C0); - public static final SignatureId V31 = new SignatureId("V31", 0x1B93AD61); - public static final SignatureId STAMP_V1 = new SignatureId("STAMP_V1", 0x2B09189E); - public static final SignatureId STAMP_V2 = new SignatureId("STAMP_V2", 0x6DFF800D); - public static final SignatureId PADDING = new SignatureId("PADDING", 0x42726577); - public static final SignatureId NULL = new SignatureId("NULL", 0x0); + public static final SignatureId V2 = new SignatureId("V2", 0x7109871A, 0); + public static final SignatureId V3 = new SignatureId("V3", 0xF05368C0, 1); + public static final SignatureId V31 = new SignatureId("V31", 0x1B93AD61, 2); + public static final SignatureId STAMP_V1 = new SignatureId("STAMP_V1", 0x2B09189E, 3); + public static final SignatureId STAMP_V2 = new SignatureId("STAMP_V2", 0x6DFF800D, 4); + public static final SignatureId PADDING = new SignatureId("PADDING", 0x42726577, 9999); + public static final SignatureId NULL = new SignatureId("NULL", 0x0, 999); private static final SignatureId[] VALUES = new SignatureId[]{ V2, V3, V31, STAMP_V1, STAMP_V2, PADDING, NULL