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

Commit b3e92d28 authored by Zhi Dou's avatar Zhi Dou
Browse files

Return null if key is not found in map

The major change of this commit is return null if the key if not found
in the flag maps. The key cannot be found because of the following
reasons

1. the package is not in the container
1. the flag is not in the container

These are valid query for a map to test whether a key exists in a map.

Test: atest aconfig_storage_read_api.test.java aconfig_storage_file.test.java
Bug: 368135182
Flag: NONE files for flag
Change-Id: Ibcf05c6113e5780db06e52e0dcd8ed3bcdd3384c
parent 9964b7ee
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
"/system/etc/aconfig_flags.pb",
"/system_ext/etc/aconfig_flags.pb",
"/product/etc/aconfig_flags.pb",
"/vendor/etc/aconfig_flags.pb",
+9 −2
Original line number Diff line number Diff line
@@ -37,9 +37,16 @@ public class FlagTable {
    public Node get(int packageId, String flagName) {
        int numBuckets = (mHeader.mNodeOffset - mHeader.mBucketOffset) / 4;
        int bucketIndex = TableUtils.getBucketIndex(makeKey(packageId, flagName), numBuckets);
        int newPosition = mHeader.mBucketOffset + bucketIndex * 4;
        if (newPosition >= mHeader.mNodeOffset) {
            return null;
        }

        mReader.position(mHeader.mBucketOffset + bucketIndex * 4);
        mReader.position(newPosition);
        int nodeIndex = mReader.readInt();
        if (nodeIndex < mHeader.mNodeOffset || nodeIndex >= mHeader.mFileSize) {
            return null;
        }

        while (nodeIndex != -1) {
            mReader.position(nodeIndex);
@@ -50,7 +57,7 @@ public class FlagTable {
            nodeIndex = node.mNextOffset;
        }

        throw new AconfigStorageException("get cannot find flag: " + flagName);
        return null;
    }

    public Header getHeader() {
+10 −4
Original line number Diff line number Diff line
@@ -35,13 +35,19 @@ public class PackageTable {
    }

    public Node get(String packageName) {

        int numBuckets = (mHeader.mNodeOffset - mHeader.mBucketOffset) / 4;
        int bucketIndex = TableUtils.getBucketIndex(packageName.getBytes(UTF_8), numBuckets);

        mReader.position(mHeader.mBucketOffset + bucketIndex * 4);
        int newPosition = mHeader.mBucketOffset + bucketIndex * 4;
        if (newPosition >= mHeader.mNodeOffset) {
            return null;
        }
        mReader.position(newPosition);
        int nodeIndex = mReader.readInt();

        if (nodeIndex < mHeader.mNodeOffset || nodeIndex >= mHeader.mFileSize) {
            return null;
        }

        while (nodeIndex != -1) {
            mReader.position(nodeIndex);
            Node node = Node.fromBytes(mReader);
@@ -51,7 +57,7 @@ public class PackageTable {
            nodeIndex = node.mNextOffset;
        }

        throw new AconfigStorageException("get cannot find package: " + packageName);
        return null;
    }

    public Header getHeader() {
+0 −3
Original line number Diff line number Diff line
@@ -53,9 +53,6 @@ public class StorageInternalReader {
    @UnsupportedAppUsage
    public boolean getBooleanFlagValue(int index) {
        index += mPackageBooleanStartOffset;
        if (index >= mFlagValueList.size()) {
            throw new AconfigStorageException("Fail to get boolean flag value");
        }
        return mFlagValueList.getBoolean(index);
    }

+1 −3
Original line number Diff line number Diff line
@@ -15,9 +15,7 @@
java_library {
    name: "fake_device_config",
    srcs: [
        "src/android/util/Log.java",
        "src/android/provider/DeviceConfig.java",
        "src/android/os/StrictMode.java",
        "src/**/*.java",
    ],
    sdk_version: "none",
    system_modules: "core-all-system-modules",
Loading