Merge "Add tests for BluetoothMapAccountItemTest and BluetoothMapAppParamsTest" into tm-qpr-dev
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java
index 3cf5e60..9b2e2ec 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAccountItemTest.java
@@ -42,10 +42,12 @@
         BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
                 TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
                 TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        assertThat(accountItem.getId()).isEqualTo(TEST_ID);
         assertThat(accountItem.getAccountId()).isEqualTo(Long.parseLong(TEST_ID));
         assertThat(accountItem.getName()).isEqualTo(TEST_NAME);
         assertThat(accountItem.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
         assertThat(accountItem.getProviderAuthority()).isEqualTo(TEST_PROVIDER_AUTHORITY);
+        assertThat(accountItem.getIcon()).isEqualTo(TEST_DRAWABLE);
         assertThat(accountItem.getType()).isEqualTo(TEST_TYPE);
         assertThat(accountItem.getUci()).isEqualTo(TEST_UCI);
         assertThat(accountItem.getUciPrefix()).isEqualTo(TEST_UCI_PREFIX);
@@ -55,10 +57,12 @@
     public void create_withoutIdAndUciData() {
         BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(/*id=*/null, TEST_NAME,
                 TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE, TEST_TYPE);
+        assertThat(accountItem.getId()).isNull();
         assertThat(accountItem.getAccountId()).isEqualTo(-1);
         assertThat(accountItem.getName()).isEqualTo(TEST_NAME);
         assertThat(accountItem.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
         assertThat(accountItem.getProviderAuthority()).isEqualTo(TEST_PROVIDER_AUTHORITY);
+        assertThat(accountItem.getIcon()).isEqualTo(TEST_DRAWABLE);
         assertThat(accountItem.getType()).isEqualTo(TEST_TYPE);
         assertThat(accountItem.getUci()).isNull();
         assertThat(accountItem.getUciPrefix()).isNull();
@@ -109,4 +113,166 @@
         assertThat(accountItem.equals(accountItemWithoutUciData)).isTrue();
         assertThat(accountItem.compareTo(accountItemWithoutUciData)).isEqualTo(0);
     }
+
+    @Test
+    public void equals_withSameInstance() {
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItem.equals(accountItem)).isTrue();
+    }
+    @Test
+    public void equals_withNull() {
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItem).isNotEqualTo(null);
+    }
+
+    @SuppressWarnings("EqualsIncompatibleType")
+    @Test
+    public void equals_withDifferentClass() {
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        String accountItemString = "accountItem_string";
+
+        assertThat(accountItem.equals(accountItemString)).isFalse();
+    }
+
+    @Test
+    public void equals_withNullId() {
+        BluetoothMapAccountItem accountItemWithNullId = BluetoothMapAccountItem.create(/*id=*/null,
+                TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE, TEST_TYPE,
+                TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithNonNullId = BluetoothMapAccountItem.create(TEST_ID,
+                TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE, TEST_TYPE,
+                TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItemWithNullId).isNotEqualTo(accountItemWithNonNullId);
+    }
+
+    @Test
+    public void equals_withDifferentId() {
+        String TEST_ID_DIFFERENT = "2222";
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithDifferentId = BluetoothMapAccountItem.create(
+                TEST_ID_DIFFERENT, TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY,
+                TEST_DRAWABLE, TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItem).isNotEqualTo(accountItemWithDifferentId);
+    }
+
+    @Test
+    public void equals_withNullName() {
+        BluetoothMapAccountItem accountItemWithNullName = BluetoothMapAccountItem.create(
+                TEST_ID, /*name=*/null, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithNonNullName = BluetoothMapAccountItem.create(TEST_ID,
+                TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE, TEST_TYPE,
+                TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItemWithNullName).isNotEqualTo(accountItemWithNonNullName);
+    }
+
+    @Test
+    public void equals_withDifferentName() {
+        String TEST_NAME_DIFFERENT = "test_name_different";
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithDifferentName = BluetoothMapAccountItem.create(
+                TEST_ID, TEST_NAME_DIFFERENT, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY,
+                TEST_DRAWABLE, TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItem).isNotEqualTo(accountItemWithDifferentName);
+    }
+
+    @Test
+    public void equals_withNullPackageName() {
+        BluetoothMapAccountItem accountItemWithNullPackageName = BluetoothMapAccountItem.create(
+                TEST_ID, TEST_NAME, /*package_name=*/null, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithNonNullPackageName = BluetoothMapAccountItem.create(
+                TEST_ID, TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItemWithNullPackageName).isNotEqualTo(accountItemWithNonNullPackageName);
+    }
+
+    @Test
+    public void equals_withDifferentPackageName() {
+        String TEST_PACKAGE_NAME_DIFFERENT = "test.different.package.name";
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithDifferentPackageName =
+                BluetoothMapAccountItem.create(TEST_ID, TEST_NAME, TEST_PACKAGE_NAME_DIFFERENT,
+                        TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE, TEST_TYPE, TEST_UCI,
+                        TEST_UCI_PREFIX);
+
+        assertThat(accountItem).isNotEqualTo(accountItemWithDifferentPackageName);
+    }
+
+    @Test
+    public void equals_withNullAuthority() {
+        BluetoothMapAccountItem accountItemWithNullAuthority = BluetoothMapAccountItem.create(
+                TEST_ID, TEST_NAME, TEST_PACKAGE_NAME, /*provider_authority=*/null, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithNonNullAuthority = BluetoothMapAccountItem.create(
+                TEST_ID, TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItemWithNullAuthority).isNotEqualTo(accountItemWithNonNullAuthority);
+    }
+
+    @Test
+    public void equals_withDifferentAuthority() {
+        String TEST_PROVIDER_AUTHORITY_DIFFERENT = "test.project.different.provider";
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithDifferentAuthority =
+                BluetoothMapAccountItem.create(TEST_ID, TEST_NAME, TEST_PACKAGE_NAME,
+                        TEST_PROVIDER_AUTHORITY_DIFFERENT, TEST_DRAWABLE, TEST_TYPE, TEST_UCI,
+                        TEST_UCI_PREFIX);
+
+        assertThat(accountItem).isNotEqualTo(accountItemWithDifferentAuthority);
+    }
+
+    @Test
+    public void equals_withNullType() {
+        BluetoothMapAccountItem accountItemWithNullType = BluetoothMapAccountItem.create(
+                TEST_ID, TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                /*type=*/null, TEST_UCI, TEST_UCI_PREFIX);
+        BluetoothMapAccountItem accountItemWithNonNullType = BluetoothMapAccountItem.create(TEST_ID,
+                TEST_NAME, TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE, TEST_TYPE,
+                TEST_UCI, TEST_UCI_PREFIX);
+
+        assertThat(accountItemWithNullType).isNotEqualTo(accountItemWithNonNullType);
+    }
+
+    @Test
+    public void hashCode_withOnlyIdNotNull() {
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, null,
+                null, null, null, null);
+
+        int expected = (31 + TEST_ID.hashCode()) * 31 * 31 * 31;
+        assertThat(accountItem.hashCode()).isEqualTo(expected);
+    }
+
+    @Test
+    public void toString_returnsNameAndUriInfo() {
+        BluetoothMapAccountItem accountItem = BluetoothMapAccountItem.create(TEST_ID, TEST_NAME,
+                TEST_PACKAGE_NAME, TEST_PROVIDER_AUTHORITY, TEST_DRAWABLE,
+                TEST_TYPE, TEST_UCI, TEST_UCI_PREFIX);
+
+        String expected =
+                TEST_NAME + " (" + "content://" + TEST_PROVIDER_AUTHORITY + "/" + TEST_ID + ")";
+        assertThat(accountItem.toString()).isEqualTo(expected);
+    }
 }
\ No newline at end of file
diff --git a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java
index f3d9361..900835a 100644
--- a/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java
+++ b/android/app/tests/unit/src/com/android/bluetooth/map/BluetoothMapAppParamsTest.java
@@ -77,6 +77,82 @@
     public static final int TEST_TRANSPARENT = 1;
 
     @Test
+    public void encodeToBuffer_thenDecode() throws Exception {
+        ByteBuffer ret = ByteBuffer.allocate(16);
+        ret.putLong(TEST_COUNT_HIGH);
+        ret.putLong(TEST_COUNT_LOW);
+
+        BluetoothMapAppParams appParams = new BluetoothMapAppParams();
+        appParams.setMaxListCount(TEST_MAX_LIST_COUNT);
+        appParams.setStartOffset(TEST_START_OFFSET);
+        appParams.setFilterMessageType(TEST_FILTER_MESSAGE_TYPE);
+        appParams.setFilterPeriodBegin(TEST_FILTER_PERIOD_BEGIN);
+        appParams.setFilterPeriodEnd(TEST_FILTER_PERIOD_END);
+        appParams.setFilterReadStatus(TEST_FILTER_READ_STATUS);
+        appParams.setFilterRecipient(TEST_FILTER_RECIPIENT);
+        appParams.setFilterOriginator(TEST_FILTER_ORIGINATOR);
+        appParams.setFilterPriority(TEST_FILTER_PRIORITY);
+        appParams.setAttachment(TEST_ATTACHMENT);
+        appParams.setTransparent(TEST_TRANSPARENT);
+        appParams.setRetry(TEST_RETRY);
+        appParams.setNewMessage(TEST_NEW_MESSAGE);
+        appParams.setNotificationFilter(TEST_NOTIFICATION_FILTER);
+        appParams.setMasInstanceId(TEST_MAS_INSTANCE_ID);
+        appParams.setParameterMask(TEST_PARAMETER_MASK);
+        appParams.setFolderListingSize(TEST_FOLDER_LISTING_SIZE);
+        appParams.setMessageListingSize(TEST_MESSAGE_LISTING_SIZE);
+        appParams.setSubjectLength(TEST_SUBJECT_LENGTH);
+        appParams.setCharset(TEST_CHARSET);
+        appParams.setFractionRequest(TEST_FRACTION_REQUEST);
+        appParams.setFractionDeliver(TEST_FRACTION_DELIVER);
+        appParams.setStatusIndicator(TEST_STATUS_INDICATOR);
+        appParams.setStatusValue(TEST_STATUS_VALUE);
+        appParams.setMseTime(TEST_MSE_TIME);
+        appParams.setDatabaseIdentifier(TEST_ID_HIGH, TEST_ID_LOW);
+        appParams.setConvoListingVerCounter(TEST_COUNT_LOW, TEST_COUNT_HIGH);
+        appParams.setPresenceStatus(TEST_PRESENCE_STATUS);
+        appParams.setLastActivity(TEST_LAST_ACTIVITY);
+        appParams.setConvoListingSize(TEST_CONVO_LISTING_SIZE);
+        appParams.setChatStateConvoId(TEST_ID_HIGH, TEST_ID_LOW);
+        appParams.setFolderVerCounter(TEST_COUNT_LOW, TEST_COUNT_HIGH);
+
+        byte[] encodedParams = appParams.encodeParams();
+        BluetoothMapAppParams appParamsDecoded = new BluetoothMapAppParams(encodedParams);
+
+        assertThat(appParamsDecoded.getMaxListCount()).isEqualTo(TEST_MAX_LIST_COUNT);
+        assertThat(appParamsDecoded.getStartOffset()).isEqualTo(TEST_START_OFFSET);
+        assertThat(appParamsDecoded.getFilterMessageType()).isEqualTo(TEST_FILTER_MESSAGE_TYPE);
+        assertThat(appParamsDecoded.getFilterPeriodBegin()).isEqualTo(TEST_FILTER_PERIOD_BEGIN);
+        assertThat(appParamsDecoded.getFilterPeriodEnd()).isEqualTo(TEST_FILTER_PERIOD_END);
+        assertThat(appParamsDecoded.getFilterReadStatus()).isEqualTo(TEST_FILTER_READ_STATUS);
+        assertThat(appParamsDecoded.getFilterRecipient()).isEqualTo(TEST_FILTER_RECIPIENT);
+        assertThat(appParamsDecoded.getFilterOriginator()).isEqualTo(TEST_FILTER_ORIGINATOR);
+        assertThat(appParamsDecoded.getFilterPriority()).isEqualTo(TEST_FILTER_PRIORITY);
+        assertThat(appParamsDecoded.getAttachment()).isEqualTo(TEST_ATTACHMENT);
+        assertThat(appParamsDecoded.getTransparent()).isEqualTo(TEST_TRANSPARENT);
+        assertThat(appParamsDecoded.getRetry()).isEqualTo(TEST_RETRY);
+        assertThat(appParamsDecoded.getNewMessage()).isEqualTo(TEST_NEW_MESSAGE);
+        assertThat(appParamsDecoded.getNotificationFilter()).isEqualTo(TEST_NOTIFICATION_FILTER);
+        assertThat(appParamsDecoded.getMasInstanceId()).isEqualTo(TEST_MAS_INSTANCE_ID);
+        assertThat(appParamsDecoded.getParameterMask()).isEqualTo(TEST_PARAMETER_MASK);
+        assertThat(appParamsDecoded.getFolderListingSize()).isEqualTo(TEST_FOLDER_LISTING_SIZE);
+        assertThat(appParamsDecoded.getMessageListingSize()).isEqualTo(TEST_MESSAGE_LISTING_SIZE);
+        assertThat(appParamsDecoded.getSubjectLength()).isEqualTo(TEST_SUBJECT_LENGTH);
+        assertThat(appParamsDecoded.getCharset()).isEqualTo(TEST_CHARSET);
+        assertThat(appParamsDecoded.getFractionRequest()).isEqualTo(TEST_FRACTION_REQUEST);
+        assertThat(appParamsDecoded.getFractionDeliver()).isEqualTo(TEST_FRACTION_DELIVER);
+        assertThat(appParamsDecoded.getStatusIndicator()).isEqualTo(TEST_STATUS_INDICATOR);
+        assertThat(appParamsDecoded.getStatusValue()).isEqualTo(TEST_STATUS_VALUE);
+        assertThat(appParamsDecoded.getMseTime()).isEqualTo(TEST_MSE_TIME);
+        assertThat(appParamsDecoded.getDatabaseIdentifier()).isEqualTo(ret.array());
+        assertThat(appParamsDecoded.getConvoListingVerCounter()).isEqualTo(ret.array());
+        assertThat(appParamsDecoded.getPresenceStatus()).isEqualTo(TEST_PRESENCE_STATUS);
+        assertThat(appParamsDecoded.getLastActivity()).isEqualTo(TEST_LAST_ACTIVITY);
+        assertThat(appParamsDecoded.getConvoListingSize()).isEqualTo(TEST_CONVO_LISTING_SIZE);
+        assertThat(appParamsDecoded.getChatStateConvoId()).isEqualTo(new SignedLongLong(
+                TEST_ID_HIGH, TEST_ID_LOW));
+    }
+    @Test
     public void settersAndGetters() throws Exception {
         ByteBuffer ret = ByteBuffer.allocate(16);
         ret.putLong(TEST_COUNT_HIGH);
@@ -133,8 +209,7 @@
         assertThat(appParams.getChatStateConvoIdByteArray()).isEqualTo(ret.array());
         assertThat(appParams.getChatStateConvoIdString()).isEqualTo(new String(ret.array()));
         assertThat(appParams.getConvoListingSize()).isEqualTo(TEST_CONVO_LISTING_SIZE);
-        assertThat(appParams.getConvoListingVerCounter()).isEqualTo(
-                ret.array());
+        assertThat(appParams.getConvoListingVerCounter()).isEqualTo(ret.array());
         assertThat(appParams.getConvoParameterMask()).isEqualTo(TEST_CONVO_PARAMETER_MASK);
         assertThat(appParams.getDatabaseIdentifier()).isEqualTo(ret.array());
         assertThat(appParams.getFilterConvoId()).isEqualTo(
@@ -181,7 +256,7 @@
 
         assertThat(appParams.getFilterLastActivityBegin()).isEqualTo(
                 TEST_FILTER_LAST_ACTIVITY_BEGIN);
-        assertThat(appParams.getFilterLastActivityBegin()).isEqualTo(TEST_FILTER_LAST_ACTIVITY_END);
+        assertThat(appParams.getFilterLastActivityEnd()).isEqualTo(TEST_FILTER_LAST_ACTIVITY_END);
     }
 
     @Test