mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 22:34:24 +02:00
implement json conversion on StagedAlias
This commit is contained in:
parent
33817b36d8
commit
e841b12f03
@ -21,10 +21,13 @@
|
||||
import com.reandroid.lib.arsc.io.BlockReader;
|
||||
import com.reandroid.lib.arsc.item.IntegerItem;
|
||||
import com.reandroid.lib.arsc.value.StagedAliasEntry;
|
||||
import com.reandroid.lib.json.JSONArray;
|
||||
import com.reandroid.lib.json.JSONConvert;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class StagedAliasEntryArray extends BlockArray<StagedAliasEntry> implements BlockLoad {
|
||||
public class StagedAliasEntryArray extends BlockArray<StagedAliasEntry>
|
||||
implements BlockLoad, JSONConvert<JSONArray> {
|
||||
private final IntegerItem count;
|
||||
public StagedAliasEntryArray(IntegerItem count){
|
||||
super();
|
||||
@ -57,4 +60,29 @@
|
||||
private void updateCount(){
|
||||
this.count.set(childesCount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray toJson() {
|
||||
StagedAliasEntry[] childes=getChildes();
|
||||
if(childes==null||childes.length==0){
|
||||
return null;
|
||||
}
|
||||
JSONArray jsonArray=new JSONArray();
|
||||
for(int i=0;i<childes.length;i++){
|
||||
jsonArray.put(i, childes[i].toJson());
|
||||
}
|
||||
return jsonArray;
|
||||
}
|
||||
@Override
|
||||
public void fromJson(JSONArray json) {
|
||||
clearChildes();
|
||||
if(json==null){
|
||||
return;
|
||||
}
|
||||
int length = json.length();
|
||||
setChildesCount(length);
|
||||
for(int i=0;i<length;i++){
|
||||
get(i).fromJson(json.getJSONObject(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ package com.reandroid.lib.arsc.chunk;
|
||||
import com.reandroid.lib.arsc.pool.TypeStringPool;
|
||||
import com.reandroid.lib.arsc.value.EntryBlock;
|
||||
import com.reandroid.lib.arsc.value.LibraryInfo;
|
||||
import com.reandroid.lib.json.JSONArray;
|
||||
import com.reandroid.lib.json.JSONConvert;
|
||||
import com.reandroid.lib.json.JSONObject;
|
||||
|
||||
@ -289,11 +290,11 @@ package com.reandroid.lib.arsc.chunk;
|
||||
mSpecStringPoolCount.set(mSpecStringPool.countStrings());
|
||||
}
|
||||
private void refreshTypeIdOffset(){
|
||||
int smallestId=getSpecTypePairArray().getSmallestTypeId();
|
||||
if(smallestId>0){
|
||||
smallestId=smallestId-1;
|
||||
}
|
||||
mTypeIdOffset.set(smallestId);
|
||||
// TODO: find solution
|
||||
//int largest=getSpecTypePairArray().getHighestTypeId();
|
||||
//int count=getTypeStringPool().countStrings();
|
||||
//mTypeIdOffset.set(count-largest);
|
||||
mTypeIdOffset.set(0);
|
||||
}
|
||||
public void onEntryAdded(EntryBlock entryBlock){
|
||||
updateEntry(entryBlock);
|
||||
@ -321,6 +322,12 @@ package com.reandroid.lib.arsc.chunk;
|
||||
if(libraryInfoArray.childesCount()>0){
|
||||
jsonObject.put(NAME_libraries,libraryInfoArray.toJson());
|
||||
}
|
||||
StagedAlias stagedAlias =
|
||||
StagedAlias.mergeAll(getStagedAliasList().getChildes());
|
||||
if(stagedAlias!=null){
|
||||
jsonObject.put(NAME_staged_aliases,
|
||||
stagedAlias.getStagedAliasEntryArray().toJson());
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
@Override
|
||||
@ -330,6 +337,12 @@ package com.reandroid.lib.arsc.chunk;
|
||||
getSpecTypePairArray().fromJson(json.getJSONArray(NAME_specs));
|
||||
LibraryInfoArray libraryInfoArray = mLibraryBlock.getLibraryInfoArray();
|
||||
libraryInfoArray.fromJson(json.optJSONArray(NAME_libraries));
|
||||
if(json.has(NAME_staged_aliases)){
|
||||
StagedAlias stagedAlias=new StagedAlias();
|
||||
stagedAlias.getStagedAliasEntryArray()
|
||||
.fromJson(json.getJSONArray(NAME_staged_aliases));
|
||||
mStagedAliasList.add(stagedAlias);
|
||||
}
|
||||
}
|
||||
public void merge(PackageBlock packageBlock){
|
||||
if(packageBlock==null||packageBlock==this){
|
||||
@ -376,4 +389,5 @@ package com.reandroid.lib.arsc.chunk;
|
||||
public static final String JSON_FILE_NAME = "package.json";
|
||||
private static final String NAME_specs="specs";
|
||||
private static final String NAME_libraries="libraries";
|
||||
private static final String NAME_staged_aliases="staged_aliases";
|
||||
}
|
||||
|
@ -30,7 +30,7 @@
|
||||
stagedAliasEntryArray = new StagedAliasEntryArray(count);
|
||||
addChild(stagedAliasEntryArray);
|
||||
}
|
||||
public void addStagedAliasEntries(StagedAlias stagedAlias){
|
||||
public void merge(StagedAlias stagedAlias){
|
||||
if(stagedAlias==null||stagedAlias==this){
|
||||
return;
|
||||
}
|
||||
@ -58,4 +58,21 @@
|
||||
return getClass().getSimpleName()+
|
||||
": count="+getStagedAliasEntryCount();
|
||||
}
|
||||
public static StagedAlias mergeAll(Collection<StagedAlias> stagedAliasList){
|
||||
if(stagedAliasList.size()==0){
|
||||
return null;
|
||||
}
|
||||
StagedAlias result=new StagedAlias();
|
||||
for(StagedAlias stagedAlias:stagedAliasList){
|
||||
if(stagedAlias.isNull()){
|
||||
continue;
|
||||
}
|
||||
result.merge(stagedAlias);
|
||||
}
|
||||
if(!result.isNull()){
|
||||
result.refresh();
|
||||
return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
package com.reandroid.lib.arsc.value;
|
||||
|
||||
import com.reandroid.lib.arsc.item.ByteArray;
|
||||
import com.reandroid.lib.json.JSONConvert;
|
||||
import com.reandroid.lib.json.JSONObject;
|
||||
|
||||
public class StagedAliasEntry extends ByteArray {
|
||||
public class StagedAliasEntry extends ByteArray implements JSONConvert<JSONObject> {
|
||||
public StagedAliasEntry(){
|
||||
super(8);
|
||||
}
|
||||
@ -23,4 +25,18 @@ public class StagedAliasEntry extends ByteArray {
|
||||
return "stagedResId="+String.format("0x%08x",getStagedResId())
|
||||
+", finalizedResId="+String.format("0x%08x",getFinalizedResId());
|
||||
}
|
||||
@Override
|
||||
public JSONObject toJson() {
|
||||
JSONObject jsonObject=new JSONObject();
|
||||
jsonObject.put(NAME_staged_resource_id, getStagedResId());
|
||||
jsonObject.put(NAME_finalized_resource_id, getFinalizedResId());
|
||||
return jsonObject;
|
||||
}
|
||||
@Override
|
||||
public void fromJson(JSONObject json) {
|
||||
setStagedResId(json.getInt(NAME_staged_resource_id));
|
||||
setFinalizedResId(json.getInt(NAME_finalized_resource_id));
|
||||
}
|
||||
public static final String NAME_staged_resource_id = "staged_resource_id";
|
||||
public static final String NAME_finalized_resource_id = "finalized_resource_id";
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user