mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 22:34:24 +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;
|
package com.reandroid.arsc.header;
|
||||||
|
|
||||||
import com.reandroid.arsc.chunk.ChunkType;
|
import com.reandroid.arsc.chunk.ChunkType;
|
||||||
|
import com.reandroid.arsc.item.ByteItem;
|
||||||
import com.reandroid.arsc.item.IntegerItem;
|
import com.reandroid.arsc.item.IntegerItem;
|
||||||
import com.reandroid.arsc.item.ShortItem;
|
import com.reandroid.arsc.item.ShortItem;
|
||||||
|
|
||||||
|
|
||||||
public class StringPoolHeader extends HeaderBlock{
|
public class StringPoolHeader extends HeaderBlock{
|
||||||
private final IntegerItem countStrings;
|
private final IntegerItem countStrings;
|
||||||
private final IntegerItem countStyles;
|
private final IntegerItem countStyles;
|
||||||
private final ShortItem flagUtf8;
|
private final ByteItem flagSorted;
|
||||||
private final ShortItem flagSorted;
|
private final ByteItem flagUtf8;
|
||||||
|
private final ShortItem flagExtra;
|
||||||
private final IntegerItem startStrings;
|
private final IntegerItem startStrings;
|
||||||
private final IntegerItem startStyles;
|
private final IntegerItem startStyles;
|
||||||
public StringPoolHeader() {
|
public StringPoolHeader() {
|
||||||
super(ChunkType.STRING.ID);
|
super(ChunkType.STRING.ID);
|
||||||
this.countStrings = new IntegerItem();
|
this.countStrings = new IntegerItem();
|
||||||
this.countStyles = new IntegerItem();
|
this.countStyles = new IntegerItem();
|
||||||
this.flagUtf8 = new ShortItem();
|
this.flagSorted = new ByteItem();
|
||||||
this.flagSorted = new ShortItem();
|
this.flagUtf8 = new ByteItem();
|
||||||
|
this.flagExtra = new ShortItem();
|
||||||
this.startStrings = new IntegerItem();
|
this.startStrings = new IntegerItem();
|
||||||
this.startStyles = new IntegerItem();
|
this.startStyles = new IntegerItem();
|
||||||
|
|
||||||
addChild(countStrings);
|
addChild(countStrings);
|
||||||
addChild(countStyles);
|
addChild(countStyles);
|
||||||
addChild(flagUtf8);
|
|
||||||
addChild(flagSorted);
|
addChild(flagSorted);
|
||||||
|
addChild(flagUtf8);
|
||||||
|
addChild(flagExtra);
|
||||||
addChild(startStrings);
|
addChild(startStrings);
|
||||||
addChild(startStyles);
|
addChild(startStyles);
|
||||||
}
|
}
|
||||||
@ -48,18 +53,35 @@ public class StringPoolHeader extends HeaderBlock{
|
|||||||
public IntegerItem getCountStyles() {
|
public IntegerItem getCountStyles() {
|
||||||
return countStyles;
|
return countStyles;
|
||||||
}
|
}
|
||||||
public ShortItem getFlagUtf8() {
|
public ByteItem getFlagUtf8() {
|
||||||
return flagUtf8;
|
return flagUtf8;
|
||||||
}
|
}
|
||||||
public ShortItem getFlagSorted() {
|
public ByteItem getFlagSorted() {
|
||||||
return flagSorted;
|
return flagSorted;
|
||||||
}
|
}
|
||||||
|
public ShortItem getFlagExtra(){
|
||||||
|
return flagExtra;
|
||||||
|
}
|
||||||
public IntegerItem getStartStrings() {
|
public IntegerItem getStartStrings() {
|
||||||
return startStrings;
|
return startStrings;
|
||||||
}
|
}
|
||||||
public IntegerItem getStartStyles() {
|
public IntegerItem getStartStyles() {
|
||||||
return startStyles;
|
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
|
@Override
|
||||||
public String toString(){
|
public String toString(){
|
||||||
if(getChunkType()!=ChunkType.STRING){
|
if(getChunkType()!=ChunkType.STRING){
|
||||||
@ -68,8 +90,9 @@ public class StringPoolHeader extends HeaderBlock{
|
|||||||
return getClass().getSimpleName()
|
return getClass().getSimpleName()
|
||||||
+" {strings="+getCountStrings()
|
+" {strings="+getCountStrings()
|
||||||
+", styles="+getCountStyles()
|
+", styles="+getCountStyles()
|
||||||
+", utf8="+getFlagUtf8().toHex()
|
+", utf8="+isUtf8()
|
||||||
+", sorted="+getFlagSorted().toHex()
|
+", sorted="+isSorted()
|
||||||
|
+", flagExtra="+getFlagExtra().toHex()
|
||||||
+", offset-strings="+getStartStrings().get()
|
+", offset-strings="+getStartStrings().get()
|
||||||
+", offset-styles="+getStartStyles().get() + '}';
|
+", offset-styles="+getStartStyles().get() + '}';
|
||||||
}
|
}
|
||||||
|
@ -244,30 +244,26 @@ package com.reandroid.arsc.pool;
|
|||||||
public void setUtf8(boolean is_utf8){
|
public void setUtf8(boolean is_utf8){
|
||||||
setUtf8(is_utf8, true);
|
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){
|
private void setUtf8(boolean is_utf8, boolean updateAll){
|
||||||
ShortItem flagUtf8 = getHeaderBlock().getFlagUtf8();
|
StringPoolHeader header = getHeaderBlock();
|
||||||
boolean old = isUtf8Flag();
|
if(is_utf8 == header.isUtf8()){
|
||||||
if(is_utf8){
|
return;
|
||||||
flagUtf8.set(UTF8_FLAG_VALUE);
|
|
||||||
}else {
|
|
||||||
flagUtf8.set((short) 0);
|
|
||||||
}
|
}
|
||||||
if(!updateAll || old == isUtf8Flag()){
|
ByteItem flagUtf8 = header.getFlagUtf8();
|
||||||
|
if(is_utf8){
|
||||||
|
flagUtf8.set((byte) 0x01);
|
||||||
|
}else {
|
||||||
|
flagUtf8.set((byte) 0x00);
|
||||||
|
}
|
||||||
|
if(!updateAll){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mArrayStrings.setUtf8(is_utf8);
|
mArrayStrings.setUtf8(is_utf8);
|
||||||
}
|
}
|
||||||
private boolean isUtf8Flag(){
|
public void setFlagSorted(boolean sorted){
|
||||||
return (getHeaderBlock().getFlagUtf8().get() & FLAG_UTF8) !=0;
|
getHeaderBlock().setSorted(sorted);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract StringArray<T> newInstance(IntegerArray offsets, IntegerItem itemCount, IntegerItem itemStart, boolean is_utf8);
|
abstract StringArray<T> newInstance(IntegerArray offsets, IntegerItem itemCount, IntegerItem itemStart, boolean is_utf8);
|
||||||
@Override
|
@Override
|
||||||
protected void onChunkRefreshed() {
|
protected void onChunkRefreshed() {
|
||||||
@ -287,8 +283,9 @@ package com.reandroid.arsc.pool;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBlockLoaded(BlockReader reader, Block sender) throws IOException {
|
public void onBlockLoaded(BlockReader reader, Block sender) throws IOException {
|
||||||
if(sender == getHeaderBlock().getFlagUtf8()){
|
StringPoolHeader header = getHeaderBlock();
|
||||||
mArrayStrings.setUtf8(isUtf8Flag());
|
if(sender == header.getFlagUtf8()){
|
||||||
|
mArrayStrings.setUtf8(header.isUtf8());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -310,8 +307,4 @@ package com.reandroid.arsc.pool;
|
|||||||
return s1.compareTo(s2);
|
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