fix: Build duplicate styled strings #13

This commit is contained in:
REAndroid 2023-02-10 11:13:35 -05:00
parent 0206c73908
commit 1b0660cdf3

View File

@ -15,6 +15,7 @@
*/ */
package com.reandroid.apk.xmlencoder; package com.reandroid.apk.xmlencoder;
import com.reandroid.arsc.array.StringArray;
import com.reandroid.arsc.array.StyleArray; import com.reandroid.arsc.array.StyleArray;
import com.reandroid.arsc.decoder.ValueDecoder; import com.reandroid.arsc.decoder.ValueDecoder;
import com.reandroid.arsc.item.StyleItem; import com.reandroid.arsc.item.StyleItem;
@ -49,9 +50,12 @@ import java.util.*;
if(spannableList.size()==0){ if(spannableList.size()==0){
return; return;
} }
StringArray<TableString> stringsArray = stringPool.getStringsArray();
StyleArray styleArray = stringPool.getStyleArray();
Map<String, TableString> stringsMap = stringPool int stylesCount = spannableList.size();
.insertStrings(XMLSpannable.toTextList(spannableList)); stringsArray.setChildesCount(stylesCount);
styleArray.setChildesCount(stylesCount);
List<String> tagList = List<String> tagList =
new ArrayList<>(XMLSpannable.tagList(spannableList)); new ArrayList<>(XMLSpannable.tagList(spannableList));
@ -59,16 +63,18 @@ import java.util.*;
Map<String, TableString> tagsMap = Map<String, TableString> tagsMap =
stringPool.insertStrings(tagList); stringPool.insertStrings(tagList);
StyleArray styleArray = stringPool.getStyleArray(); List<String> textList = XMLSpannable.toTextList(spannableList);
styleArray.setChildesCount(stringsMap.size());
for(XMLSpannable spannable:spannableList){ for(int i=0;i<stylesCount;i++){
XMLSpannable spannable = spannableList.get(i);
TableString tableString = stringsArray.get(i);
StyleItem styleItem = styleArray.get(i);
TableString tableString=stringsMap.get(spannable.getText()); tableString.set(textList.get(i));
StyleItem styleItem = styleArray.get(tableString.getIndex());
for(XMLSpanInfo spanInfo:spannable.getSpanInfoList()){ for(XMLSpanInfo spanInfo:spannable.getSpanInfoList()){
int tagRef=tagsMap.get(spanInfo.tag).getIndex(); TableString tag = tagsMap.get(spanInfo.tag);
int tagRef=tag.getIndex();
styleItem.addStylePiece(tagRef, spanInfo.start, spanInfo.end); styleItem.addStylePiece(tagRef, spanInfo.start, spanInfo.end);
} }
} }