Merge "Remove local copy of the flag file" into main
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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() {
|
||||||
|
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user