Merge "Remove local copy of the flag file" into main

This commit is contained in:
Zhi Dou
2024-08-23 14:23:31 +00:00
committed by Gerrit Code Review
5 changed files with 26 additions and 35 deletions

View File

@@ -48,6 +48,10 @@ public class ByteBufferReader {
return new String(bytes, StandardCharsets.UTF_8); return new String(bytes, StandardCharsets.UTF_8);
} }
public int readByte(int i) {
return Byte.toUnsignedInt(mByteBuffer.get(i));
}
public void position(int newPosition) { public void position(int newPosition) {
mByteBuffer.position(newPosition); mByteBuffer.position(newPosition);
} }

View File

@@ -17,33 +17,21 @@
package android.aconfig.storage; package android.aconfig.storage;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
public class FlagValueList { public class FlagValueList {
private Header mHeader; private Header mHeader;
private List<Boolean> mList; private ByteBufferReader mReader;
private int mSize;
public static FlagValueList fromBytes(ByteBuffer bytes) { public static FlagValueList fromBytes(ByteBuffer bytes) {
FlagValueList flagValueList = new FlagValueList(); FlagValueList flagValueList = new FlagValueList();
ByteBufferReader reader = new ByteBufferReader(bytes); flagValueList.mReader = new ByteBufferReader(bytes);
Header header = Header.fromBytes(reader); flagValueList.mHeader = Header.fromBytes(flagValueList.mReader);
flagValueList.mHeader = header;
flagValueList.mList = new ArrayList(header.mNumFlags);
reader.position(header.mBooleanValueOffset);
for (int i = 0; i < header.mNumFlags; i++) {
boolean val = reader.readByte() == 1;
flagValueList.mList.add(val);
}
flagValueList.mSize = flagValueList.mList.size();
return flagValueList; return flagValueList;
} }
public boolean get(int index) { public boolean getBoolean(int index) {
return mList.get(index); return mReader.readByte(mHeader.mBooleanValueOffset + index) == 1;
} }
public Header getHeader() { public Header getHeader() {
@@ -51,7 +39,7 @@ public class FlagValueList {
} }
public int size() { public int size() {
return mSize; return mHeader.mNumFlags;
} }
public static class Header { public static class Header {

View File

@@ -17,31 +17,30 @@
package android.aconfig.storage; package android.aconfig.storage;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
public class PackageTable { public class PackageTable {
private Header mHeader; private Header mHeader;
private Map<String, Node> mNodeMap; private ByteBufferReader mReader;
public static PackageTable fromBytes(ByteBuffer bytes) { public static PackageTable fromBytes(ByteBuffer bytes) {
PackageTable packageTable = new PackageTable(); PackageTable packageTable = new PackageTable();
ByteBufferReader reader = new ByteBufferReader(bytes); packageTable.mReader = new ByteBufferReader(bytes);
Header header = Header.fromBytes(reader); packageTable.mHeader = Header.fromBytes(packageTable.mReader);
packageTable.mHeader = header;
packageTable.mNodeMap = new HashMap(TableUtils.getTableSize(header.mNumPackages));
reader.position(header.mNodeOffset);
for (int i = 0; i < header.mNumPackages; i++) {
Node node = Node.fromBytes(reader);
packageTable.mNodeMap.put(node.mPackageName, node);
}
return packageTable; return packageTable;
} }
public Node get(String packageName) { public Node get(String packageName) {
return mNodeMap.get(packageName); mReader.position(mHeader.mNodeOffset);
for (int i = 0; i < mHeader.mNumPackages; i++) {
Node node = Node.fromBytes(mReader);
if (Objects.equals(node.mPackageName, packageName)) {
return node;
}
}
throw new AconfigStorageException("get cannot find package: " + packageName);
} }
public Header getHeader() { public Header getHeader() {

View File

@@ -53,7 +53,7 @@ public class FlagValueListTest {
assertEquals(expected.length, flagValueList.size()); assertEquals(expected.length, flagValueList.size());
for (int i = 0; i < flagValueList.size(); i++) { for (int i = 0; i < flagValueList.size(); i++) {
assertEquals(expected[i], flagValueList.get(i)); assertEquals(expected[i], flagValueList.getBoolean(i));
} }
} }
@@ -68,10 +68,10 @@ public class FlagValueListTest {
PackageTable.Node pNode = packageTable.get("com.android.aconfig.storage.test_1"); PackageTable.Node pNode = packageTable.get("com.android.aconfig.storage.test_1");
FlagTable.Node fNode = flagTable.get(pNode.getPackageId(), "enabled_rw"); FlagTable.Node fNode = flagTable.get(pNode.getPackageId(), "enabled_rw");
assertTrue(flagValueList.get(pNode.getBooleanStartIndex() + fNode.getFlagIndex())); assertTrue(flagValueList.getBoolean(pNode.getBooleanStartIndex() + fNode.getFlagIndex()));
pNode = packageTable.get("com.android.aconfig.storage.test_4"); pNode = packageTable.get("com.android.aconfig.storage.test_4");
fNode = flagTable.get(pNode.getPackageId(), "enabled_fixed_ro"); fNode = flagTable.get(pNode.getPackageId(), "enabled_fixed_ro");
assertTrue(flagValueList.get(pNode.getBooleanStartIndex() + fNode.getFlagIndex())); assertTrue(flagValueList.getBoolean(pNode.getBooleanStartIndex() + fNode.getFlagIndex()));
} }
} }

View File

@@ -56,7 +56,7 @@ public class StorageInternalReader {
if (index >= mFlagValueList.size()) { if (index >= mFlagValueList.size()) {
throw new AconfigStorageException("Fail to get boolean flag value"); throw new AconfigStorageException("Fail to get boolean flag value");
} }
return mFlagValueList.get(index); return mFlagValueList.getBoolean(index);
} }
private int getPackageBooleanStartOffset(String packageName) { private int getPackageBooleanStartOffset(String packageName) {