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

Commit 87d2fb7a authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I836d1abf,I5f2c2bd7

* changes:
  Rename CustomizedMetaEntity to CustomizedMetadataEntity
  Fix NPE when get metadata without set any
parents 77c93c5d 2c49acf1
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.bluetooth.btservice.storage;
import androidx.room.Entity;

@Entity
class CustomizedMetaEntity {
class CustomizedMetadataEntity {
    public String manufacturer_name;
    public String model_name;
    public String software_version;
@@ -37,7 +37,4 @@ class CustomizedMetaEntity {
    public String unthethered_right_charging;
    public String unthethered_case_charging;
    public String enhanced_settings_ui_uri;

    CustomizedMetaEntity() {
    }
}
+54 −53
Original line number Diff line number Diff line
@@ -40,7 +40,8 @@ class Metadata {
    public ProfilePrioritiesEntity profilePriorites;

    @Embedded
    public CustomizedMetaEntity publicMeta;
    @NonNull
    public CustomizedMetadataEntity publicMetadata;

    public int a2dpSupportsOptionalCodecs;
    public int a2dpOptionalCodecsEnabled;
@@ -49,7 +50,7 @@ class Metadata {
        this.address = address;
        migrated = false;
        profilePriorites = new ProfilePrioritiesEntity();
        publicMeta = new CustomizedMetaEntity();
        publicMetadata = new CustomizedMetadataEntity();
        a2dpSupportsOptionalCodecs = BluetoothA2dp.OPTIONAL_CODECS_NOT_SUPPORTED;
        a2dpOptionalCodecsEnabled = BluetoothA2dp.OPTIONAL_CODECS_PREF_DISABLED;
    }
@@ -129,55 +130,55 @@ class Metadata {
    void setCustomizedMeta(int key, String value) {
        switch (key) {
            case BluetoothDevice.METADATA_MANUFACTURER_NAME:
                publicMeta.manufacturer_name = value;
                publicMetadata.manufacturer_name = value;
                break;
            case BluetoothDevice.METADATA_MODEL_NAME:
                publicMeta.model_name = value;
                publicMetadata.model_name = value;
                break;
            case BluetoothDevice.METADATA_SOFTWARE_VERSION:
                publicMeta.software_version = value;
                publicMetadata.software_version = value;
                break;
            case BluetoothDevice.METADATA_HARDWARE_VERSION:
                publicMeta.hardware_version = value;
                publicMetadata.hardware_version = value;
                break;
            case BluetoothDevice.METADATA_COMPANION_APP:
                publicMeta.companion_app = value;
                publicMetadata.companion_app = value;
                break;
            case BluetoothDevice.METADATA_MAIN_ICON:
                publicMeta.main_icon = value;
                publicMetadata.main_icon = value;
                break;
            case BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET:
                publicMeta.is_unthethered_headset = value;
                publicMetadata.is_unthethered_headset = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_LEFT_ICON:
                publicMeta.unthethered_left_icon = value;
                publicMetadata.unthethered_left_icon = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_RIGHT_ICON:
                publicMeta.unthethered_right_icon = value;
                publicMetadata.unthethered_right_icon = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_CASE_ICON:
                publicMeta.unthethered_case_icon = value;
                publicMetadata.unthethered_case_icon = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_LEFT_BATTERY:
                publicMeta.unthethered_left_battery = value;
                publicMetadata.unthethered_left_battery = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_RIGHT_BATTERY:
                publicMeta.unthethered_right_battery = value;
                publicMetadata.unthethered_right_battery = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_CASE_BATTERY:
                publicMeta.unthethered_case_battery = value;
                publicMetadata.unthethered_case_battery = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_LEFT_CHARGING:
                publicMeta.unthethered_left_charging = value;
                publicMetadata.unthethered_left_charging = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_RIGHT_CHARGING:
                publicMeta.unthethered_right_charging = value;
                publicMetadata.unthethered_right_charging = value;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_CASE_CHARGING:
                publicMeta.unthethered_case_charging = value;
                publicMetadata.unthethered_case_charging = value;
                break;
            case BluetoothDevice.METADATA_ENHANCED_SETTINGS_UI_URI:
                publicMeta.enhanced_settings_ui_uri = value;
                publicMetadata.enhanced_settings_ui_uri = value;
                break;
        }
    }
@@ -186,55 +187,55 @@ class Metadata {
        String value = null;
        switch (key) {
            case BluetoothDevice.METADATA_MANUFACTURER_NAME:
                value = publicMeta.manufacturer_name;
                value = publicMetadata.manufacturer_name;
                break;
            case BluetoothDevice.METADATA_MODEL_NAME:
                value = publicMeta.model_name;
                value = publicMetadata.model_name;
                break;
            case BluetoothDevice.METADATA_SOFTWARE_VERSION:
                value = publicMeta.software_version;
                value = publicMetadata.software_version;
                break;
            case BluetoothDevice.METADATA_HARDWARE_VERSION:
                value = publicMeta.hardware_version;
                value = publicMetadata.hardware_version;
                break;
            case BluetoothDevice.METADATA_COMPANION_APP:
                value = publicMeta.companion_app;
                value = publicMetadata.companion_app;
                break;
            case BluetoothDevice.METADATA_MAIN_ICON:
                value = publicMeta.main_icon;
                value = publicMetadata.main_icon;
                break;
            case BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET:
                value = publicMeta.is_unthethered_headset;
                value = publicMetadata.is_unthethered_headset;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_LEFT_ICON:
                value = publicMeta.unthethered_left_icon;
                value = publicMetadata.unthethered_left_icon;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_RIGHT_ICON:
                value = publicMeta.unthethered_right_icon;
                value = publicMetadata.unthethered_right_icon;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_CASE_ICON:
                value = publicMeta.unthethered_case_icon;
                value = publicMetadata.unthethered_case_icon;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_LEFT_BATTERY:
                value = publicMeta.unthethered_left_battery;
                value = publicMetadata.unthethered_left_battery;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_RIGHT_BATTERY:
                value = publicMeta.unthethered_right_battery;
                value = publicMetadata.unthethered_right_battery;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_CASE_BATTERY:
                value = publicMeta.unthethered_case_battery;
                value = publicMetadata.unthethered_case_battery;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_LEFT_CHARGING:
                value = publicMeta.unthethered_left_charging;
                value = publicMetadata.unthethered_left_charging;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_RIGHT_CHARGING:
                value = publicMeta.unthethered_right_charging;
                value = publicMetadata.unthethered_right_charging;
                break;
            case BluetoothDevice.METADATA_UNTHETHERED_CASE_CHARGING:
                value = publicMeta.unthethered_case_charging;
                value = publicMetadata.unthethered_case_charging;
                break;
            case BluetoothDevice.METADATA_ENHANCED_SETTINGS_UI_URI:
                value = publicMeta.enhanced_settings_ui_uri;
                value = publicMetadata.enhanced_settings_ui_uri;
                break;
        }
        return value;
@@ -242,55 +243,55 @@ class Metadata {

    List<Integer> getChangedCustomizedMeta() {
        List<Integer> list = new ArrayList<>();
        if (publicMeta.manufacturer_name != null) {
        if (publicMetadata.manufacturer_name != null) {
            list.add(BluetoothDevice.METADATA_MANUFACTURER_NAME);
        }
        if (publicMeta.model_name != null) {
        if (publicMetadata.model_name != null) {
            list.add(BluetoothDevice.METADATA_MODEL_NAME);
        }
        if (publicMeta.software_version != null) {
        if (publicMetadata.software_version != null) {
            list.add(BluetoothDevice.METADATA_SOFTWARE_VERSION);
        }
        if (publicMeta.hardware_version != null) {
        if (publicMetadata.hardware_version != null) {
            list.add(BluetoothDevice.METADATA_HARDWARE_VERSION);
        }
        if (publicMeta.companion_app != null) {
        if (publicMetadata.companion_app != null) {
            list.add(BluetoothDevice.METADATA_COMPANION_APP);
        }
        if (publicMeta.main_icon != null) {
        if (publicMetadata.main_icon != null) {
            list.add(BluetoothDevice.METADATA_MAIN_ICON);
        }
        if (publicMeta.is_unthethered_headset != null) {
        if (publicMetadata.is_unthethered_headset != null) {
            list.add(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET);
        }
        if (publicMeta.unthethered_left_icon != null) {
        if (publicMetadata.unthethered_left_icon != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_LEFT_ICON);
        }
        if (publicMeta.unthethered_right_icon != null) {
        if (publicMetadata.unthethered_right_icon != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_RIGHT_ICON);
        }
        if (publicMeta.unthethered_case_icon != null) {
        if (publicMetadata.unthethered_case_icon != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_CASE_ICON);
        }
        if (publicMeta.unthethered_left_battery != null) {
        if (publicMetadata.unthethered_left_battery != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_LEFT_BATTERY);
        }
        if (publicMeta.unthethered_right_battery != null) {
        if (publicMetadata.unthethered_right_battery != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_RIGHT_BATTERY);
        }
        if (publicMeta.unthethered_case_battery != null) {
        if (publicMetadata.unthethered_case_battery != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_CASE_BATTERY);
        }
        if (publicMeta.unthethered_left_charging != null) {
        if (publicMetadata.unthethered_left_charging != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_LEFT_CHARGING);
        }
        if (publicMeta.unthethered_right_charging != null) {
        if (publicMetadata.unthethered_right_charging != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_RIGHT_CHARGING);
        }
        if (publicMeta.unthethered_case_charging != null) {
        if (publicMetadata.unthethered_case_charging != null) {
            list.add(BluetoothDevice.METADATA_UNTHETHERED_CASE_CHARGING);
        }
        if (publicMeta.enhanced_settings_ui_uri != null) {
        if (publicMetadata.enhanced_settings_ui_uri != null) {
            list.add(BluetoothDevice.METADATA_ENHANCED_SETTINGS_UI_URI);
        }
        return list;
+51 −22
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ public final class DatabaseManagerTest {
    private static final String OTHER_BT_ADDR = "11:11:11:11:11:11";
    private static final int A2DP_SUPPORT_OP_CODEC_TEST = 0;
    private static final int A2DP_ENALBED_OP_CODEC_TEST = 1;
    private static final int MAX_META_ID = 16;

    @Before
    public void setUp() throws Exception {
@@ -70,17 +71,11 @@ public final class DatabaseManagerTest {

        mDatabaseManager = new DatabaseManager(mAdapterService);

        BluetoothDevice[] bondedDevices = {};
        BluetoothDevice[] bondedDevices = {mTestDevice};
        doReturn(bondedDevices).when(mAdapterService).getBondedDevices();
        doNothing().when(mAdapterService).metadataChanged(anyString(), anyInt(), anyString());

        mDatabaseManager.start(mDatabase);
        // Wait for handler thread finish its task.
        TestUtils.waitForLooperToFinishScheduledTask(mDatabaseManager.getHandlerLooper());

        // Clear local storage
        mDatabaseManager.mMetadataCache.clear();
        mDatabase.delete(LOCAL_STORAGE);
        restartDatabaseManagerHelper();
    }

    @After
@@ -90,6 +85,28 @@ public final class DatabaseManagerTest {
        mDatabaseManager.cleanup();
    }

    @Test
    public void testMetadataDefault() {
        Metadata data = new Metadata(TEST_BT_ADDR);
        mDatabase.insert(data);
        restartDatabaseManagerHelper();

        for (int id = 0; id < BluetoothProfile.MAX_PROFILE_ID; id++) {
            Assert.assertEquals(BluetoothProfile.PRIORITY_UNDEFINED,
                    mDatabaseManager.getProfilePriority(mTestDevice, id));
        }

        Assert.assertEquals(BluetoothA2dp.OPTIONAL_CODECS_NOT_SUPPORTED,
                mDatabaseManager.getA2dpSupportsOptionalCodecs(mTestDevice));

        Assert.assertEquals(BluetoothA2dp.OPTIONAL_CODECS_PREF_DISABLED,
                    mDatabaseManager.getA2dpOptionalCodecsEnabled(mTestDevice));

        for (int id = 0; id < MAX_META_ID; id++) {
            Assert.assertNull(mDatabaseManager.getCustomMeta(mTestDevice, id));
        }
    }

    @Test
    public void testSetGetProfilePriority() {
        int badPriority = -100;
@@ -197,9 +214,6 @@ public final class DatabaseManagerTest {
        mDatabaseManager.mMetadataCache.put(TEST_BT_ADDR, data);
        mDatabase.insert(data);

        BluetoothDevice[] bondedDevices = {mTestDevice};
        doReturn(bondedDevices).when(mAdapterService).getBondedDevices();

        mDatabaseManager.removeUnusedMetadata();
        // Wait for database update
        TestUtils.waitForLooperToFinishScheduledTask(mDatabaseManager.getHandlerLooper());
@@ -301,6 +315,21 @@ public final class DatabaseManagerTest {
                value, true);
    }

    void restartDatabaseManagerHelper() {
        Metadata data = new Metadata(LOCAL_STORAGE);
        data.migrated = true;
        mDatabase.insert(data);

        mDatabaseManager.cleanup();
        mDatabaseManager.start(mDatabase);
        // Wait for handler thread finish its task.
        TestUtils.waitForLooperToFinishScheduledTask(mDatabaseManager.getHandlerLooper());

        // Remove local storage
        mDatabaseManager.mMetadataCache.remove(LOCAL_STORAGE);
        mDatabase.delete(LOCAL_STORAGE);
    }

    void testSetGetProfilePriorityCase(boolean stored, int priority, int expectedPriority,
            boolean expectedSetResult) {
        if (stored) {
@@ -331,9 +360,9 @@ public final class DatabaseManagerTest {
        Assert.assertEquals(1, list.size());

        // Check whether the device is in database
        Metadata data = list.get(0);
        Assert.assertEquals(TEST_BT_ADDR, data.getAddress());
        Assert.assertEquals(expectedPriority, data.getProfilePriority(BluetoothProfile.HEADSET));
        restartDatabaseManagerHelper();
        Assert.assertEquals(expectedPriority,
                mDatabaseManager.getProfilePriority(mTestDevice, BluetoothProfile.HEADSET));

        mDatabase.deleteAll();
        // Wait for clear database
@@ -370,12 +399,13 @@ public final class DatabaseManagerTest {
        Assert.assertEquals(1, list.size());

        // Check whether the device is in database
        Metadata data = list.get(0);
        Assert.assertEquals(TEST_BT_ADDR, data.getAddress());
        restartDatabaseManagerHelper();
        if (test == A2DP_SUPPORT_OP_CODEC_TEST) {
            Assert.assertEquals(expectedValue, data.a2dpSupportsOptionalCodecs);
            Assert.assertEquals(expectedValue,
                    mDatabaseManager.getA2dpSupportsOptionalCodecs(mTestDevice));
        } else {
            Assert.assertEquals(expectedValue, data.a2dpOptionalCodecsEnabled);
            Assert.assertEquals(expectedValue,
                    mDatabaseManager.getA2dpOptionalCodecsEnabled(mTestDevice));
        }

        mDatabase.deleteAll();
@@ -411,10 +441,9 @@ public final class DatabaseManagerTest {
        TestUtils.waitForLooperToFinishScheduledTask(mDatabaseManager.getHandlerLooper());

        // Check whether the value is saved in database
        List<Metadata> list = mDatabase.load();
        Metadata data = list.get(0);
        Assert.assertEquals(TEST_BT_ADDR, data.getAddress());
        Assert.assertEquals(value, data.getCustomizedMeta(key));
        restartDatabaseManagerHelper();
        Assert.assertEquals(value,
                mDatabaseManager.getCustomMeta(mTestDevice, key));

        mDatabase.deleteAll();
        // Wait for clear database