Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4fe36838 authored by Zhi Dou's avatar Zhi Dou Committed by Gerrit Code Review
Browse files

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

parents 2f0d0b86 99023d61
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -48,6 +48,10 @@ public class ByteBufferReader {
        return new String(bytes, StandardCharsets.UTF_8);
    }

    public int readByte(int i) {
        return Byte.toUnsignedInt(mByteBuffer.get(i));
    }

    public void position(int newPosition) {
        mByteBuffer.position(newPosition);
    }
+6 −18
Original line number Diff line number Diff line
@@ -17,33 +17,21 @@
package android.aconfig.storage;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;

public class FlagValueList {

    private Header mHeader;
    private List<Boolean> mList;

    private int mSize;
    private ByteBufferReader mReader;

    public static FlagValueList fromBytes(ByteBuffer bytes) {
        FlagValueList flagValueList = new FlagValueList();
        ByteBufferReader reader = new ByteBufferReader(bytes);
        Header header = Header.fromBytes(reader);
        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();
        flagValueList.mReader = new ByteBufferReader(bytes);
        flagValueList.mHeader = Header.fromBytes(flagValueList.mReader);
        return flagValueList;
    }

    public boolean get(int index) {
        return mList.get(index);
    public boolean getBoolean(int index) {
        return mReader.readByte(mHeader.mBooleanValueOffset + index) == 1;
    }

    public Header getHeader() {
@@ -51,7 +39,7 @@ public class FlagValueList {
    }

    public int size() {
        return mSize;
        return mHeader.mNumFlags;
    }

    public static class Header {
+12 −13
Original line number Diff line number Diff line
@@ -17,31 +17,30 @@
package android.aconfig.storage;

import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class PackageTable {

    private Header mHeader;
    private Map<String, Node> mNodeMap;
    private ByteBufferReader mReader;

    public static PackageTable fromBytes(ByteBuffer bytes) {
        PackageTable packageTable = new PackageTable();
        ByteBufferReader reader = new ByteBufferReader(bytes);
        Header header = Header.fromBytes(reader);
        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);
        }
        packageTable.mReader = new ByteBufferReader(bytes);
        packageTable.mHeader = Header.fromBytes(packageTable.mReader);

        return packageTable;
    }

    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() {
+3 −3
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ public class FlagValueListTest {
        assertEquals(expected.length, flagValueList.size());

        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");
        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");
        fNode = flagTable.get(pNode.getPackageId(), "enabled_fixed_ro");
        assertTrue(flagValueList.get(pNode.getBooleanStartIndex() + fNode.getFlagIndex()));
        assertTrue(flagValueList.getBoolean(pNode.getBooleanStartIndex() + fNode.getFlagIndex()));
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ public class StorageInternalReader {
        if (index >= mFlagValueList.size()) {
            throw new AconfigStorageException("Fail to get boolean flag value");
        }
        return mFlagValueList.get(index);
        return mFlagValueList.getBoolean(index);
    }

    private int getPackageBooleanStartOffset(String packageName) {