Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ private void initializeMainPackageId(XMLDocument xmlDocument) {
logMessage("WARN: failed to resolve: " + ref);
return;
}
int packageId = (resourceId >> 24 ) & 0xff;
int packageId = resourceId >>> 24;
this.mMainPackageId = packageId;
logMessage("Main package id initialized: id = "
+ HexUtil.toHex2((byte)packageId) + ", from: " + ref );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ public String toString(){
}

static boolean isZip64Value(long value){
return value == 0xffffffffL || (value & 0xffffffff00000000L) != 0;
return value == 0xffffffffL || (value >>> 32) != 0;
}
static boolean isZip64Value(int value){
return value == 0xffffffff;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reandroid/archive/block/ZipHeader.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public void setSignature(ZipSignature signature){
}

public static boolean isZip64Length(long length){
return (length == 0xffffffff || (length & 0xffffffff00000000L) != 0);
return (length == 0xffffffffL || (length >>> 32) != 0);
}
private static final int OFFSET_signature = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ private void updateCountToHeader() {
public AttributeDataFormat[] getFormats(){
ResValueMap formatsMap = getByType(AttributeType.FORMATS);
if(formatsMap != null){
return AttributeDataFormat.decodeValueTypes(
formatsMap.getData() & 0xff);
return AttributeDataFormat.decodeValueTypes((byte) formatsMap.getData());
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public int getOffset(int i){
if(value == NO_ENTRY){
return value;
}
value = (value >>> 16) & 0xffff;
value = value >>> 16;
return value * 4;
}
@Override
Expand All @@ -77,9 +77,8 @@ public void setOffset(int index, int offset){
}else {
int idx = get(index);
idx = idx & 0xffff;
offset = offset & 0xffff;
offset = offset / 4;
offset = offset << 16;
//use unsigned shifting to combine unsigning and division by 4
offset = (offset >>> 2) << 16;
value = offset | idx;
}
super.put(index, value);
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/reandroid/arsc/base/Block.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ public static void putInteger(byte[] bytes, int offset, int val){
if((offset + 4) > bytes.length){
return;
}
bytes[offset + 3]= (byte) (val >>> 24 & 0xff);
bytes[offset + 3]= (byte) (val >>> 24);
bytes[offset + 2]= (byte) (val >>> 16 & 0xff);
bytes[offset + 1]= (byte) (val >>> 8 & 0xff);
bytes[offset]= (byte) (val & 0xff);
Expand Down Expand Up @@ -240,7 +240,7 @@ public static void putBigEndianInteger(byte[] bytes, int offset, int value) {
if((offset + 4) > bytes.length) {
return;
}
bytes[offset]= (byte) (value >>> 24 & 0xff);
bytes[offset]= (byte) (value >>> 24);
bytes[offset + 1]= (byte) (value >>> 16 & 0xff);
bytes[offset + 2]= (byte) (value >>> 8 & 0xff);
bytes[offset + 3]= (byte) (value & 0xff);
Expand Down
25 changes: 9 additions & 16 deletions src/main/java/com/reandroid/arsc/chunk/PackageBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public Iterator<ResourceType> getTypes() {
return ComputeIterator.of(getSpecTypePairs(), ResourceType::new);
}
public ResourceEntry getResource(int resourceId){
int packageId = (resourceId >> 24 ) & 0xff;
int packageId = resourceId >>> 24;
if(packageId == 0){
return null;
}
Expand All @@ -141,7 +141,7 @@ public ResourceEntry getResource(int resourceId){
if(alias == 0 || alias == resourceId){
return null;
}
packageId = (alias >> 24 ) & 0xff;
packageId = alias >>> 24;
if(packageId != getId()){
return null;
}
Expand Down Expand Up @@ -325,7 +325,7 @@ public Iterator<Entry> getEntries(int resourceId){
return getEntries(resourceId, true);
}
public Iterator<Entry> getEntries(int resourceId, boolean skipNull){
int packageId = (resourceId >> 24) & 0xff;
int packageId = resourceId >>> 24;
if(packageId != getId()){
return EmptyIterator.of();
}
Expand Down Expand Up @@ -557,7 +557,7 @@ public Entry getOrCreateEntry(byte typeId, short entryId, ResConfig resConfig){
}

public Entry getAnyEntry(int resourceId){
int packageId = (resourceId >> 24) & 0xff;
int packageId = resourceId >>> 24;
if(packageId != getId()){
return null;
}
Expand Down Expand Up @@ -811,17 +811,10 @@ public String toString(){
return builder.toString();
}
public static boolean isPackageId(int packageId){
if(packageId == 0){
return false;
}
return packageId > 0 && packageId <= 0xff;
}
public static boolean isResourceId(int resourceId){
if(resourceId == 0){
return false;
}
return (resourceId & 0x00ff0000) != 0
&& (resourceId & 0xff000000) != 0;
return ((resourceId >> 24) & (byte) (resourceId >> 16)) != 0;
}

public static void changePackageId(ValueItem valueItem, int packageIdOld, int packageIdNew){
Expand All @@ -835,7 +828,7 @@ private static void changePackageIdName(int packageIdOld, int packageIdNew, Attr
if(!isResourceId(resourceId)){
return;
}
int id = (resourceId >> 24) & 0xff;
int id = resourceId >>> 24;
if(id != packageIdOld){
return;
}
Expand All @@ -853,7 +846,7 @@ private static void changePackageIdValue(int packageIdOld, int packageIdNew, Val
if(!isResourceId(resourceId)){
return;
}
int id = (resourceId >> 24) & 0xff;
int id = resourceId >>> 24;
if(id != packageIdOld){
return;
}
Expand All @@ -867,7 +860,7 @@ public static int replacePackageId(int resourceId, int packageIdOld, int package
if(!isResourceId(resourceId)){
return resourceId;
}
int id = (resourceId >> 24) & 0xff;
int id = resourceId >>> 24;
if(id != packageIdOld){
return resourceId;
}
Expand Down Expand Up @@ -925,7 +918,7 @@ private void parsePublicTag(XMLElement element) throws XmlEncodeException {
throw new XmlEncodeException("Invalid id value: " + element.getDebugText());
}
int resourceId = encodeResult.value;
int packageId = (resourceId >> 24) & 0xff;
int packageId = resourceId >>> 24;
int i = packageBlock.getId();
if(i == 0){
packageBlock.setId(packageId);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reandroid/arsc/chunk/TableBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ public Iterator<Entry> getEntries(int resourceId){
}
public Iterator<Entry> getEntries(int resourceId, boolean skipNull){

final int packageId = (resourceId >> 24) & 0xff;
final int packageId = resourceId >>> 24;
final int typeId = (resourceId >> 16) & 0xff;
final int entryId = resourceId & 0xffff;
return new IterableIterator<PackageBlock, Entry>(getAllPackages(packageId)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ public boolean clearFusedModuleNames() {
// TODO: find a better way
public int guessCurrentPackageId() {
if (mGuessedPackageId == 0) {
mGuessedPackageId = ((getIconResourceId()>>24) & 0xff);
mGuessedPackageId = getIconResourceId() >>> 24;
}
return mGuessedPackageId;
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reandroid/arsc/item/ByteArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public final void putInteger(int offset, int val){
if((offset+4)>bts.length){
return;
}
bts[offset+3]= (byte) (val >>> 24 & 0xff);
bts[offset+3]= (byte) (val >>> 24);
bts[offset+2]= (byte) (val >>> 16 & 0xff);
bts[offset+1]= (byte) (val >>> 8 & 0xff);
bts[offset]= (byte) (val & 0xff);
Expand Down
15 changes: 5 additions & 10 deletions src/main/java/com/reandroid/arsc/item/ByteItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,13 @@ public boolean getBit(int index){
return ((getByte()>>index) & 0x1) == 1;
}
public void putBit(int index, boolean bit){
int val= getByte();
int left=val>>index;
int b = getByte();
int one = 1 << index;
b &= ~one;
if(bit){
left=left|0x1;
}else {
left=left & 0xFE;
b |= one;
}
left=left<<index;
index=8-index;
int right=(0xFF>>index) & val;
val=left|right;
set((byte) val);
set((byte) b);
}
public void set(byte value) {
getBytesInternal()[0] = value;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reandroid/arsc/item/SpecFlag.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public void setFlagByte(byte flag){
getBlockItem().getBytesInternal()[getOffset() + OFFSET_FLAG] = flag;
}
public void addFlagByte(byte flag){
flag = (byte) ((getFlagByte() & 0xff) | (flag & 0xff));
flag = (byte) ((getFlagByte() | flag) & 0xff);
setFlagByte(flag);
}
public void addFlag(SpecBlock.Flag flag){
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reandroid/arsc/item/StringItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,7 @@ private static byte[] encodeUtf16ToBytes(String str) {
lenBytes[3] = (byte) (high >> 8);
lenBytes[2] = (byte) low;
low = rem & 0xff;
high = (rem & 0xff00) >> 8;
high = rem >>> 8;
lenBytes[1] = (byte) (high | 0x80);
lenBytes[0] = (byte) low;
} else {
Expand Down
22 changes: 8 additions & 14 deletions src/main/java/com/reandroid/arsc/list/StyleItemListEnd.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.reandroid.utils.HexUtil;

import java.io.IOException;
import java.util.Arrays;

public class StyleItemListEnd extends BlockItem implements BlockRefresh {

Expand All @@ -33,22 +34,15 @@ public StyleItemListEnd(IntegerReference stylesCount) {
}

private boolean updateSize() {
int size;
if (stylesCount.get() != 0) {
size = 8;
} else {
size = 0;
if(stylesCount.get() == 0){
setBytesLength(0, false);
return false;
}

final int size = 8;
setBytesLength(size, false);
if (size != 0) {
byte b = (byte) 0xff;
byte[] bytes = getBytesInternal();
for (int i = 0; i < size; i++) {
bytes[i] = b;
}
return true;
}
return false;
Arrays.fill(getBytesInternal(), 0, size, (byte) 0xff);
return true;
}
@Override
public void refresh() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,10 @@ public static int sum(AttributeDataFormat[] typeValues){
}
return result;
}

/** Decodes value types ignoring {@link #ANY} */
public static AttributeDataFormat[] decodeValueTypes(byte data) {
return decodeValueTypes((int) data);
}
public static AttributeDataFormat[] decodeValueTypes(int data) {
if ((data & 0xffff) == 0xffff) {
return new AttributeDataFormat[]{ANY};
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/reandroid/arsc/value/AttributeType.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ public int getId() {
}

public boolean isPlural(){
int i = id & 0xffff;
return i>=4 && i<=9;
//a hack to detect plurals (they have id with 0xc bit set)
return (id & 0xc) != 0;
}

public String getName(){
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/reandroid/arsc/value/ResValueMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public void setArrayIndex(int index){
}
public int getArrayIndex(){
int name = getNameId();
int high = name & 0xffff0000;
if(high != 0x01000000 && high != 0x02000000){
int high = name >>> 16;
if(high != 0x0100 && high != 0x0200){
return -1;
}
return name & 0xffff;
Expand Down
17 changes: 7 additions & 10 deletions src/main/java/com/reandroid/arsc/value/ValueType.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,17 @@ public String getTypeName() {
return typeName;
}
public boolean isColor(){
return this == COLOR_ARGB8
|| this == COLOR_RGB8
|| this == COLOR_ARGB4
|| this == COLOR_RGB4;
//a hack for color types check
return this.mByte >> 3 == 0b11;
}
public boolean isInteger(){
return this == DEC
|| this == HEX;
//a hack for integer types check
return (this.mByte ^ 0x10) <= 1;
}
public boolean isReference(){
return this == REFERENCE
|| this == ATTRIBUTE
|| this == DYNAMIC_REFERENCE
|| this == DYNAMIC_ATTRIBUTE;
//using bitset lookup to check reference types
final int bitmask = 0b110000110;
return (bitmask >> this.mByte & 1) == 1;
}

public static ValueType valueOf(byte b){
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reandroid/arsc/value/array/ArrayBag.java
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public static boolean isArray(Entry entry) {
while (iterator.hasNext()) {
ResValueMap resValueMap = iterator.next();
int name = resValueMap.getNameId();
int high = (name >> 16) & 0xffff;
int high = name >>> 16;
if(high != 0x0100){
return false;
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/reandroid/common/Namespace.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ static boolean isValidNamespace(String uri, String prefix) {
return isValidUri(uri) && isValidPrefix(prefix);
}
static boolean isValidUri(String uri, int resourceId) {
int packageId = (resourceId >> 24 ) & 0xff;
int packageId = resourceId >>> 24;
if(packageId == 0) {
if(StringsUtil.isEmpty(uri)) {
return true;
Expand Down Expand Up @@ -98,7 +98,7 @@ static String prefixForResourceId(int resourceId) {
if(resourceId == 0) {
return null;
}
int packageId = (resourceId >> 24) & 0xff;
int packageId = resourceId >>> 24;
if(packageId == 0x1) {
return PREFIX_ANDROID;
}else if(packageId != 0){
Expand All @@ -111,7 +111,7 @@ static String uriForResourceId(int resourceId) {
if(resourceId == 0) {
return null;
}
int packageId = (resourceId >> 24) & 0xff;
int packageId = resourceId >>> 24;
if(packageId == 0x1) {
return URI_ANDROID;
}else if(packageId != 0){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ private void parseEntry(XmlPullParser parser) throws XmlPullParserException {
}

int resourceId = (int) Long.decode(resourceIdStr).longValue();
int packageId = (resourceId >> 24) & 0xff;
int packageId = resourceId >>> 24;
int typeId = (resourceId >> 16) & 0xff;
int entryId = resourceId & 0xffff;

Expand Down
Loading