mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 14:24:25 +02:00
split StringPoolHeader flags to single byte
This commit is contained in:
parent
997ed231aa
commit
168ae6f6da
@ -16,29 +16,34 @@
|
||||
package com.reandroid.arsc.header;
|
||||
|
||||
import com.reandroid.arsc.chunk.ChunkType;
|
||||
import com.reandroid.arsc.item.ByteItem;
|
||||
import com.reandroid.arsc.item.IntegerItem;
|
||||
import com.reandroid.arsc.item.ShortItem;
|
||||
|
||||
|
||||
public class StringPoolHeader extends HeaderBlock{
|
||||
private final IntegerItem countStrings;
|
||||
private final IntegerItem countStyles;
|
||||
private final ShortItem flagUtf8;
|
||||
private final ShortItem flagSorted;
|
||||
private final ByteItem flagSorted;
|
||||
private final ByteItem flagUtf8;
|
||||
private final ShortItem flagExtra;
|
||||
private final IntegerItem startStrings;
|
||||
private final IntegerItem startStyles;
|
||||
public StringPoolHeader() {
|
||||
super(ChunkType.STRING.ID);
|
||||
this.countStrings = new IntegerItem();
|
||||
this.countStyles = new IntegerItem();
|
||||
this.flagUtf8 = new ShortItem();
|
||||
this.flagSorted = new ShortItem();
|
||||
this.flagSorted = new ByteItem();
|
||||
this.flagUtf8 = new ByteItem();
|
||||
this.flagExtra = new ShortItem();
|
||||
this.startStrings = new IntegerItem();
|
||||
this.startStyles = new IntegerItem();
|
||||
|
||||
addChild(countStrings);
|
||||
addChild(countStyles);
|
||||
addChild(flagUtf8);
|
||||
addChild(flagSorted);
|
||||
addChild(flagUtf8);
|
||||
addChild(flagExtra);
|
||||
addChild(startStrings);
|
||||
addChild(startStyles);
|
||||
}
|
||||
@ -48,18 +53,35 @@ public class StringPoolHeader extends HeaderBlock{
|
||||
public IntegerItem getCountStyles() {
|
||||
return countStyles;
|
||||
}
|
||||
public ShortItem getFlagUtf8() {
|
||||
public ByteItem getFlagUtf8() {
|
||||
return flagUtf8;
|
||||
}
|
||||
public ShortItem getFlagSorted() {
|
||||
public ByteItem getFlagSorted() {
|
||||
return flagSorted;
|
||||
}
|
||||
public ShortItem getFlagExtra(){
|
||||
return flagExtra;
|
||||
}
|
||||
public IntegerItem getStartStrings() {
|
||||
return startStrings;
|
||||
}
|
||||
public IntegerItem getStartStyles() {
|
||||
return startStyles;
|
||||
}
|
||||
|
||||
public boolean isUtf8(){
|
||||
return (getFlagUtf8().get() & 0x01) !=0;
|
||||
}
|
||||
public void setUtf8(boolean utf8){
|
||||
getFlagUtf8().set((byte) (utf8 ? 0x01 : 0x00));
|
||||
}
|
||||
public boolean isSorted(){
|
||||
return (getFlagSorted().get() & 0x01) !=0;
|
||||
}
|
||||
public void setSorted(boolean sorted){
|
||||
getFlagSorted().set((byte) (sorted ? 0x01 : 0x00));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
if(getChunkType()!=ChunkType.STRING){
|
||||
@ -68,8 +90,9 @@ public class StringPoolHeader extends HeaderBlock{
|
||||
return getClass().getSimpleName()
|
||||
+" {strings="+getCountStrings()
|
||||
+", styles="+getCountStyles()
|
||||
+", utf8="+getFlagUtf8().toHex()
|
||||
+", sorted="+getFlagSorted().toHex()
|
||||
+", utf8="+isUtf8()
|
||||
+", sorted="+isSorted()
|
||||
+", flagExtra="+getFlagExtra().toHex()
|
||||
+", offset-strings="+getStartStrings().get()
|
||||
+", offset-styles="+getStartStyles().get() + '}';
|
||||
}
|
||||
|
@ -244,30 +244,26 @@ package com.reandroid.arsc.pool;
|
||||
public void setUtf8(boolean is_utf8){
|
||||
setUtf8(is_utf8, true);
|
||||
}
|
||||
public final void setSorted(boolean sorted){
|
||||
ShortItem flagSorted = getHeaderBlock().getFlagSorted();
|
||||
if(sorted){
|
||||
flagSorted.set(FLAG_SORTED);
|
||||
}else {
|
||||
flagSorted.set((short)0);
|
||||
}
|
||||
}
|
||||
private void setUtf8(boolean is_utf8, boolean updateAll){
|
||||
ShortItem flagUtf8 = getHeaderBlock().getFlagUtf8();
|
||||
boolean old = isUtf8Flag();
|
||||
if(is_utf8){
|
||||
flagUtf8.set(UTF8_FLAG_VALUE);
|
||||
}else {
|
||||
flagUtf8.set((short) 0);
|
||||
StringPoolHeader header = getHeaderBlock();
|
||||
if(is_utf8 == header.isUtf8()){
|
||||
return;
|
||||
}
|
||||
if(!updateAll || old == isUtf8Flag()){
|
||||
ByteItem flagUtf8 = header.getFlagUtf8();
|
||||
if(is_utf8){
|
||||
flagUtf8.set((byte) 0x01);
|
||||
}else {
|
||||
flagUtf8.set((byte) 0x00);
|
||||
}
|
||||
if(!updateAll){
|
||||
return;
|
||||
}
|
||||
mArrayStrings.setUtf8(is_utf8);
|
||||
}
|
||||
private boolean isUtf8Flag(){
|
||||
return (getHeaderBlock().getFlagUtf8().get() & FLAG_UTF8) !=0;
|
||||
public void setFlagSorted(boolean sorted){
|
||||
getHeaderBlock().setSorted(sorted);
|
||||
}
|
||||
|
||||
abstract StringArray<T> newInstance(IntegerArray offsets, IntegerItem itemCount, IntegerItem itemStart, boolean is_utf8);
|
||||
@Override
|
||||
protected void onChunkRefreshed() {
|
||||
@ -287,8 +283,9 @@ package com.reandroid.arsc.pool;
|
||||
|
||||
@Override
|
||||
public void onBlockLoaded(BlockReader reader, Block sender) throws IOException {
|
||||
if(sender == getHeaderBlock().getFlagUtf8()){
|
||||
mArrayStrings.setUtf8(isUtf8Flag());
|
||||
StringPoolHeader header = getHeaderBlock();
|
||||
if(sender == header.getFlagUtf8()){
|
||||
mArrayStrings.setUtf8(header.isUtf8());
|
||||
}
|
||||
}
|
||||
@Override
|
||||
@ -310,8 +307,4 @@ package com.reandroid.arsc.pool;
|
||||
return s1.compareTo(s2);
|
||||
}
|
||||
|
||||
private static final short UTF8_FLAG_VALUE=0x0100;
|
||||
|
||||
private static final short FLAG_UTF8 = 0x0100;
|
||||
private static final short FLAG_SORTED = 0x0100;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user