You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
AssetManager: fix loading without merge
use cookie values to find correct StringPool
This commit is contained in:
@@ -277,7 +277,7 @@ public final class AssetManager {
|
|||||||
* @param id Resource id of the string array
|
* @param id Resource id of the string array
|
||||||
*/
|
*/
|
||||||
/*package*/ final CharSequence[] getResourceTextArray(final int id) {
|
/*package*/ final CharSequence[] getResourceTextArray(final int id) {
|
||||||
ResValueMap children[] = tableBlock.search(id).pickOne().getResValueMapArray().getChildes();
|
ResValueMap children[] = tableBlockSearch(id).pickOne().getResValueMapArray().getChildes();
|
||||||
CharSequence values[] = new CharSequence[children.length];
|
CharSequence values[] = new CharSequence[children.length];
|
||||||
for (int i = 0; i < children.length; i++) {
|
for (int i = 0; i < children.length; i++) {
|
||||||
StringItem stringItem = children[i].getDataAsPoolString();
|
StringItem stringItem = children[i].getDataAsPoolString();
|
||||||
@@ -288,7 +288,7 @@ public final class AssetManager {
|
|||||||
|
|
||||||
public Map<Integer,ValueItem> loadStyle(int resId) {
|
public Map<Integer,ValueItem> loadStyle(int resId) {
|
||||||
Map<Integer,ValueItem> map = new HashMap<>();
|
Map<Integer,ValueItem> map = new HashMap<>();
|
||||||
EntryGroup entryGroup = tableBlock.search(resId);
|
EntryGroup entryGroup = tableBlockSearch(resId);
|
||||||
while (entryGroup != null) {
|
while (entryGroup != null) {
|
||||||
Entry entry = entryGroup.pickOne();
|
Entry entry = entryGroup.pickOne();
|
||||||
ResValueMapArray array = entry.getResValueMapArray();
|
ResValueMapArray array = entry.getResValueMapArray();
|
||||||
@@ -296,7 +296,7 @@ public final class AssetManager {
|
|||||||
map.putIfAbsent(array.get(i).getName(), array.get(i));
|
map.putIfAbsent(array.get(i).getName(), array.get(i));
|
||||||
}
|
}
|
||||||
int parent_id = ((EntryHeaderMap)entry.getHeader()).getParentId();
|
int parent_id = ((EntryHeaderMap)entry.getHeader()).getParentId();
|
||||||
entryGroup = tableBlock.search(parent_id);
|
entryGroup = tableBlockSearch(parent_id);
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
@@ -304,7 +304,7 @@ public final class AssetManager {
|
|||||||
/*package*/ final boolean getThemeValue(int theme, int ident,
|
/*package*/ final boolean getThemeValue(int theme, int ident,
|
||||||
TypedValue outValue, boolean resolveRefs) {
|
TypedValue outValue, boolean resolveRefs) {
|
||||||
Map<Integer,ValueItem> style = loadStyle(theme);
|
Map<Integer,ValueItem> style = loadStyle(theme);
|
||||||
EntryGroup entryGroup = tableBlock.search(ident);
|
EntryGroup entryGroup = tableBlockSearch(ident);
|
||||||
if (entryGroup == null)
|
if (entryGroup == null)
|
||||||
return false;
|
return false;
|
||||||
Entry entry = entryGroup.pickOne();
|
Entry entry = entryGroup.pickOne();
|
||||||
@@ -315,7 +315,7 @@ public final class AssetManager {
|
|||||||
valueItem = style.get(ident);
|
valueItem = style.get(ident);
|
||||||
if (valueItem != null && valueItem.getValueType() == ValueType.ATTRIBUTE) {
|
if (valueItem != null && valueItem.getValueType() == ValueType.ATTRIBUTE) {
|
||||||
ident = valueItem.getData();
|
ident = valueItem.getData();
|
||||||
entryGroup = tableBlock.search(ident);
|
entryGroup = tableBlockSearch(ident);
|
||||||
if (entryGroup == null) {
|
if (entryGroup == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,8 @@ public final class AssetManager {
|
|||||||
// System.out.println("Get pooled: block=" + block
|
// System.out.println("Get pooled: block=" + block
|
||||||
// + ", id=#" + Integer.toHexString(id)
|
// + ", id=#" + Integer.toHexString(id)
|
||||||
// + ", blocks=" + mStringBlocks);
|
// + ", blocks=" + mStringBlocks);
|
||||||
return tableBlock.getStringPool().get(id).get();
|
TableString string = tableBlocks.get(block).getStringPool().get(id);
|
||||||
|
return string != null ? string.get() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -819,11 +820,11 @@ public final class AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*package*/ /*native*/ final String getResourceName(int resid) {
|
/*package*/ /*native*/ final String getResourceName(int resid) {
|
||||||
return tableBlock.search(resid).pickOne().getName();
|
return tableBlockSearch(resid).pickOne().getName();
|
||||||
}
|
}
|
||||||
/*package*/ native final String getResourcePackageName(int resid);
|
/*package*/ native final String getResourcePackageName(int resid);
|
||||||
/*package*/ /*native*/ final String getResourceTypeName(int resid) {
|
/*package*/ /*native*/ final String getResourceTypeName(int resid) {
|
||||||
return tableBlock.search(resid).pickOne().getTypeName();
|
return tableBlockSearch(resid).pickOne().getTypeName();
|
||||||
}
|
}
|
||||||
/*package*/ native final String getResourceEntryName(int resid);
|
/*package*/ native final String getResourceEntryName(int resid);
|
||||||
|
|
||||||
@@ -848,6 +849,14 @@ public final class AssetManager {
|
|||||||
*/
|
*/
|
||||||
private native final int loadResourceValue(int ident, short density, TypedValue outValue,
|
private native final int loadResourceValue(int ident, short density, TypedValue outValue,
|
||||||
boolean resolve);
|
boolean resolve);
|
||||||
|
|
||||||
|
private int getCookie(ValueItem valueItem) {
|
||||||
|
for (int i=0; i<tableBlocks.size(); i++) {
|
||||||
|
if (valueItem.getStringPool() == tableBlocks.get(i).getStringPool())
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Returns true if the resource was found, filling in mRetStringBlock and
|
* Returns true if the resource was found, filling in mRetStringBlock and
|
||||||
* mRetData.
|
* mRetData.
|
||||||
@@ -878,7 +887,7 @@ public final class AssetManager {
|
|||||||
outValues[d+AssetManager.STYLE_DATA] = 0;
|
outValues[d+AssetManager.STYLE_DATA] = 0;
|
||||||
outValues[d+AssetManager.STYLE_ASSET_COOKIE] = 0;
|
outValues[d+AssetManager.STYLE_ASSET_COOKIE] = 0;
|
||||||
int resId = inAttrs[i];
|
int resId = inAttrs[i];
|
||||||
EntryGroup entryGroup = tableBlock.search(resId);
|
EntryGroup entryGroup = tableBlockSearch(resId);
|
||||||
if (entryGroup == null)
|
if (entryGroup == null)
|
||||||
continue;
|
continue;
|
||||||
Entry entry = entryGroup.pickOne();
|
Entry entry = entryGroup.pickOne();
|
||||||
@@ -902,7 +911,7 @@ public final class AssetManager {
|
|||||||
valueItem = theme.get(resId);
|
valueItem = theme.get(resId);
|
||||||
if (valueItem != null && valueItem.getValueType() == ValueType.ATTRIBUTE) {
|
if (valueItem != null && valueItem.getValueType() == ValueType.ATTRIBUTE) {
|
||||||
resId = valueItem.getData();
|
resId = valueItem.getData();
|
||||||
entryGroup = tableBlock.search(resId);
|
entryGroup = tableBlockSearch(resId);
|
||||||
if (entryGroup == null) {
|
if (entryGroup == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -917,22 +926,23 @@ public final class AssetManager {
|
|||||||
resId = valueItem.getData();
|
resId = valueItem.getData();
|
||||||
if (resId == 0)
|
if (resId == 0)
|
||||||
continue;
|
continue;
|
||||||
entry = tableBlock.search(resId).pickOne();
|
entry = tableBlockSearch(resId).pickOne();
|
||||||
|
|
||||||
outValues[d + AssetManager.STYLE_RESOURCE_ID] = resId;
|
outValues[d + AssetManager.STYLE_RESOURCE_ID] = resId;
|
||||||
ResValue resValue = entry.getResValue();
|
ResValue resValue = entry.getResValue();
|
||||||
if (resValue != null) {
|
if (resValue != null) {
|
||||||
outValues[d + AssetManager.STYLE_TYPE] = entry.getResValue().getType();
|
outValues[d + AssetManager.STYLE_TYPE] = entry.getResValue().getType();
|
||||||
outValues[d + AssetManager.STYLE_DATA] = entry.getResValue().getData();
|
outValues[d + AssetManager.STYLE_DATA] = entry.getResValue().getData();
|
||||||
|
outValues[d + AssetManager.STYLE_ASSET_COOKIE] = getCookie(valueItem);
|
||||||
} else {
|
} else {
|
||||||
outValues[d + AssetManager.STYLE_TYPE] = -1;
|
outValues[d + AssetManager.STYLE_TYPE] = -1;
|
||||||
|
outValues[d + AssetManager.STYLE_ASSET_COOKIE] = -1;
|
||||||
}
|
}
|
||||||
outValues[d + AssetManager.STYLE_ASSET_COOKIE] = -1;
|
|
||||||
} else {
|
} else {
|
||||||
outValues[d+AssetManager.STYLE_RESOURCE_ID] = 0;
|
outValues[d+AssetManager.STYLE_RESOURCE_ID] = 0;
|
||||||
outValues[d+AssetManager.STYLE_TYPE] = valueItem.getType();
|
outValues[d+AssetManager.STYLE_TYPE] = valueItem.getType();
|
||||||
outValues[d+AssetManager.STYLE_DATA] = valueItem.getData();
|
outValues[d+AssetManager.STYLE_DATA] = valueItem.getData();
|
||||||
outValues[d+AssetManager.STYLE_ASSET_COOKIE] = -1;
|
outValues[d+AssetManager.STYLE_ASSET_COOKIE] = getCookie(valueItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user