Updated unittests for refactored classes.

Bug: 176208267
Bug: 177371091
Test: atest CtsTranslationTestCases
Change-Id: I21b34713b3dd4aacabb56e83ee1e68797b9cba09
diff --git a/tests/translation/src/android/translation/cts/CtsTranslationService.java b/tests/translation/src/android/translation/cts/CtsTranslationService.java
index 03e7cc1..5e4ce5c 100644
--- a/tests/translation/src/android/translation/cts/CtsTranslationService.java
+++ b/tests/translation/src/android/translation/cts/CtsTranslationService.java
@@ -20,10 +20,10 @@
 import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.HandlerThread;
-import android.os.Looper;
-import android.service.translation.TranslationRequest;
 import android.service.translation.TranslationService;
 import android.util.Log;
+import android.view.translation.TranslationRequest;
+import android.view.translation.TranslationRequestValue;
 import android.view.translation.TranslationResponse;
 import android.view.translation.TranslationSpec;
 
@@ -112,8 +112,6 @@
             @NonNull CancellationSignal cancellationSignal,
             @NonNull OnTranslationResultCallback callback) {
         Log.v(TAG, "onTranslationRequest(" + request + ")");
-        final android.view.translation.TranslationRequest viewRequest =
-                request.getTranslationRequests().get(0);
 
         mHandler.post(() -> sTranslationReplier.handleOnTranslationRequest(getApplicationContext(),
                 request, sessionId, cancellationSignal, callback));
diff --git a/tests/translation/src/android/translation/cts/TranslationManagerTest.java b/tests/translation/src/android/translation/cts/TranslationManagerTest.java
index 9b54938..2ed4ee7 100644
--- a/tests/translation/src/android/translation/cts/TranslationManagerTest.java
+++ b/tests/translation/src/android/translation/cts/TranslationManagerTest.java
@@ -25,7 +25,9 @@
 import android.util.Log;
 import android.view.translation.TranslationManager;
 import android.view.translation.TranslationRequest;
+import android.view.translation.TranslationRequestValue;
 import android.view.translation.TranslationResponse;
+import android.view.translation.TranslationResponseValue;
 import android.view.translation.TranslationSpec;
 import android.view.translation.Translator;
 
@@ -100,8 +102,9 @@
 
         sTranslationReplier.addResponse(
                 new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                        .addTranslations(new TranslationRequest.Builder()
-                                .setTranslationText("success")
+                        .setTranslationResponseValue(0, new TranslationResponseValue
+                                .Builder(TranslationResponseValue.STATUS_SUCCESS)
+                                .setText("success")
                                 .build())
                         .build());
 
@@ -122,7 +125,10 @@
             assertThat(translator.isDestroyed()).isFalse();
 
             final TranslationResponse response = translator.translate(
-                    new TranslationRequest("hello world"));
+                    new TranslationRequest.Builder()
+                            .addTranslationRequestValue(
+                                    TranslationRequestValue.forText("hello world"))
+                            .build());
 
             sTranslationReplier.getNextTranslationRequest();
 
@@ -148,11 +154,14 @@
         assertThat(response).isNotNull();
         assertThat(response.getTranslationStatus())
                 .isEqualTo(TranslationResponse.TRANSLATION_STATUS_SUCCESS);
-        assertThat(response.getTranslations().size()).isEqualTo(1);
+        assertThat(response.getTranslationResponseValues().size()).isEqualTo(1);
+        assertThat(response.getViewTranslationResponses().size()).isEqualTo(0);
 
-        final TranslationRequest request = response.getTranslations().get(0);
-        assertThat(request.getAutofillId()).isEqualTo(null);
-        assertThat(request.getTranslationText()).isEqualTo("success");
+        final TranslationResponseValue value = response.getTranslationResponseValues().get(0);
+        assertThat(value.getStatusCode()).isEqualTo(TranslationResponseValue.STATUS_SUCCESS);
+        assertThat(value.getText()).isEqualTo("success");
+        assertThat(value.getTransliteration()).isNull();
+        assertThat(value.getDictionaryDescription()).isNull();
     }
 
     @Test
diff --git a/tests/translation/src/android/translation/cts/unittests/InternalTranslationRequestTest.java b/tests/translation/src/android/translation/cts/unittests/InternalTranslationRequestTest.java
deleted file mode 100644
index 1255647..0000000
--- a/tests/translation/src/android/translation/cts/unittests/InternalTranslationRequestTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.translation.cts.unittests;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.testng.Assert.assertThrows;
-
-import android.os.Parcel;
-import android.service.translation.TranslationRequest;
-import android.view.autofill.AutofillId;
-import android.view.translation.TranslationSpec;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-
-@RunWith(AndroidJUnit4.class)
-public class InternalTranslationRequestTest {
-
-    private final TranslationSpec mSourceSpec =
-            new TranslationSpec("en", TranslationSpec.DATA_FORMAT_TEXT);
-    private final TranslationSpec mDestSpec =
-            new TranslationSpec("zh", TranslationSpec.DATA_FORMAT_TEXT);
-    private final android.view.translation.TranslationRequest mRequest =
-            new android.view.translation.TranslationRequest.Builder()
-            .setAutofillId(new AutofillId(17))
-            .setTranslationText("sample text")
-            .build();
-
-    @Test
-    public void testBuilder_nullSpecs() {
-        final ArrayList<android.view.translation.TranslationRequest> requests = new ArrayList<>();
-        assertThrows(NullPointerException.class, () -> {
-            final TranslationRequest request =
-                    new TranslationRequest.Builder(0, null, mDestSpec, requests).build();
-        });
-        assertThrows(NullPointerException.class, () -> {
-            final TranslationRequest request =
-                    new TranslationRequest.Builder(0, mSourceSpec, null, requests).build();
-        });
-    }
-
-    @Test
-    public void testBuilder_nullRequests() {
-        assertThrows(NullPointerException.class, () -> {
-            final TranslationRequest request =
-                    new TranslationRequest.Builder(0, mSourceSpec, mDestSpec, null).build();
-        });
-    }
-
-    @Test
-    public void testBuilder_validRequests() {
-        final ArrayList<android.view.translation.TranslationRequest> requests = new ArrayList<>();
-        requests.add(mRequest);
-        final TranslationRequest request =
-                new TranslationRequest.Builder(0, mSourceSpec, mDestSpec, requests).build();
-
-        assertThat(request.getRequestId()).isEqualTo(0);
-        assertThat(request.getSourceSpec()).isEqualTo(mSourceSpec);
-        assertThat(request.getDestSpec()).isEqualTo(mDestSpec);
-        assertThat(request.getTranslationRequests().size()).isEqualTo(1);
-
-        final android.view.translation.TranslationRequest request1 =
-                request.getTranslationRequests().get(0);
-        assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request1.getTranslationText()).isEqualTo("sample text");
-    }
-
-    @Test
-    public void testBuilder_validAddRequests() {
-        final ArrayList<android.view.translation.TranslationRequest> requests = new ArrayList<>();
-        final TranslationRequest request =
-                new TranslationRequest.Builder(0, mSourceSpec, mDestSpec, requests)
-                .addTranslationRequests(mRequest)
-                .build();
-
-        assertThat(request.getRequestId()).isEqualTo(0);
-        assertThat(request.getSourceSpec()).isEqualTo(mSourceSpec);
-        assertThat(request.getDestSpec()).isEqualTo(mDestSpec);
-        assertThat(request.getTranslationRequests().size()).isEqualTo(1);
-
-        final android.view.translation.TranslationRequest request1 =
-                request.getTranslationRequests().get(0);
-        assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request1.getTranslationText()).isEqualTo("sample text");
-    }
-
-    @Test
-    public void testParceledRequest() {
-        final ArrayList<android.view.translation.TranslationRequest> requests = new ArrayList<>();
-        requests.add(mRequest);
-        final TranslationRequest request =
-                new TranslationRequest.Builder(0, mSourceSpec, mDestSpec, requests).build();
-
-        final Parcel parcel = Parcel.obtain();
-        request.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        final TranslationRequest parceledRequest =
-                TranslationRequest.CREATOR.createFromParcel(parcel);
-
-        assertThat(request.getRequestId()).isEqualTo(0);
-        assertThat(request.getSourceSpec()).isEqualTo(mSourceSpec);
-        assertThat(request.getDestSpec()).isEqualTo(mDestSpec);
-        assertThat(request.getTranslationRequests().size()).isEqualTo(1);
-
-        final android.view.translation.TranslationRequest request1 =
-                parceledRequest.getTranslationRequests().get(0);
-        assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request1.getTranslationText()).isEqualTo("sample text");
-    }
-}
\ No newline at end of file
diff --git a/tests/translation/src/android/translation/cts/unittests/TranslationRequestTest.java b/tests/translation/src/android/translation/cts/unittests/TranslationRequestTest.java
index eb3b772..a62f331 100644
--- a/tests/translation/src/android/translation/cts/unittests/TranslationRequestTest.java
+++ b/tests/translation/src/android/translation/cts/unittests/TranslationRequestTest.java
@@ -21,6 +21,8 @@
 import android.os.Parcel;
 import android.view.autofill.AutofillId;
 import android.view.translation.TranslationRequest;
+import android.view.translation.TranslationRequestValue;
+import android.view.translation.ViewTranslationRequest;
 
 import androidx.test.runner.AndroidJUnit4;
 
@@ -30,25 +32,49 @@
 @RunWith(AndroidJUnit4.class)
 public class TranslationRequestTest {
 
-    private final AutofillId mAutofillId = new AutofillId(17);
-    private final String mTranslationText = "sample text";
+    private final TranslationRequestValue mValue = TranslationRequestValue.forText("hello");
+
+    private final ViewTranslationRequest mRequest = new ViewTranslationRequest
+            .Builder(new AutofillId(17))
+            .setValue("sample id", TranslationRequestValue.forText("sample text"))
+            .build();
 
     @Test
-    public void testBuilder_validRequest() {
+    public void testBuilder_validViewTranslationRequest() {
         final TranslationRequest request = new TranslationRequest.Builder()
-                .setAutofillId(mAutofillId)
-                .setTranslationText(mTranslationText)
+                .addViewTranslationRequest(mRequest)
                 .build();
 
-        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request.getTranslationText()).isEqualTo("sample text");
+        assertThat(request.getTranslationRequestValues().size()).isEqualTo(0);
+        assertThat(request.getViewTranslationRequests().size()).isEqualTo(1);
+
+        final ViewTranslationRequest viewRequest =
+                request.getViewTranslationRequests().get(0);
+        assertThat(viewRequest.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(viewRequest.getKeys().size()).isEqualTo(1);
+        assertThat(viewRequest.getKeys()).containsExactly("sample id");
+        assertThat(viewRequest.getValue("sample id").getText()).isEqualTo("sample text");
     }
 
     @Test
-    public void testParceledRequest() {
+    public void testBuilder_validTranslationRequestValue() {
         final TranslationRequest request = new TranslationRequest.Builder()
-                .setAutofillId(mAutofillId)
-                .setTranslationText(mTranslationText)
+                .addTranslationRequestValue(mValue)
+                .build();
+
+        assertThat(request.getTranslationRequestValues().size()).isEqualTo(1);
+        assertThat(request.getViewTranslationRequests().size()).isEqualTo(0);
+
+        final TranslationRequestValue value =
+                request.getTranslationRequestValues().get(0);
+        assertThat(value.getText()).isEqualTo("hello");
+    }
+
+    @Test
+    public void testParceledRequest_validTranslationRequestValues() {
+        final TranslationRequest request = new TranslationRequest.Builder()
+                .addTranslationRequestValue(mValue)
+                .addTranslationRequestValue(TranslationRequestValue.forText("world"))
                 .build();
 
         final Parcel parcel = Parcel.obtain();
@@ -57,7 +83,98 @@
         final TranslationRequest parceledRequest =
                 TranslationRequest.CREATOR.createFromParcel(parcel);
 
-        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request.getTranslationText()).isEqualTo("sample text");
+        assertThat(parceledRequest.getTranslationRequestValues().size()).isEqualTo(2);
+        assertThat(parceledRequest.getViewTranslationRequests().size()).isEqualTo(0);
+
+        final TranslationRequestValue value1 =
+                parceledRequest.getTranslationRequestValues().get(0);
+        assertThat(value1.getText()).isEqualTo("hello");
+
+        final TranslationRequestValue value2 =
+                parceledRequest.getTranslationRequestValues().get(1);
+        assertThat(value2.getText()).isEqualTo("world");
+    }
+
+    @Test
+    public void testBuilder_sameAutofillIdViewTranslationRequests() {
+        final TranslationRequest request = new TranslationRequest.Builder()
+                .addViewTranslationRequest(mRequest)
+                .addViewTranslationRequest(
+                        new ViewTranslationRequest.Builder(new AutofillId(17))
+                                .setValue("id2", TranslationRequestValue.forText("text2"))
+                                .build())
+                .build();
+
+        assertThat(request.getTranslationRequestValues().size()).isEqualTo(0);
+        assertThat(request.getViewTranslationRequests().size()).isEqualTo(2);
+
+        final ViewTranslationRequest viewRequest =
+                request.getViewTranslationRequests().get(0);
+        assertThat(viewRequest.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(viewRequest.getKeys().size()).isEqualTo(1);
+        assertThat(viewRequest.getKeys()).containsExactly("sample id");
+        assertThat(viewRequest.getValue("sample id").getText()).isEqualTo("sample text");
+
+        final ViewTranslationRequest viewRequest2 =
+                request.getViewTranslationRequests().get(1);
+        assertThat(viewRequest2.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(viewRequest2.getKeys().size()).isEqualTo(1);
+        assertThat(viewRequest2.getKeys()).containsExactly("id2");
+        assertThat(viewRequest2.getValue("id2").getText()).isEqualTo("text2");
+    }
+
+    @Test
+    public void testBuilder_mixingAdders() {
+        final TranslationRequest request = new TranslationRequest.Builder()
+                .addViewTranslationRequest(mRequest)
+                .addTranslationRequestValue(mValue)
+                .build();
+
+        assertThat(request.getTranslationRequestValues().size()).isEqualTo(1);
+        assertThat(request.getViewTranslationRequests().size()).isEqualTo(1);
+
+        final ViewTranslationRequest viewRequest =
+                request.getViewTranslationRequests().get(0);
+        assertThat(viewRequest.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(viewRequest.getKeys().size()).isEqualTo(1);
+        assertThat(viewRequest.getKeys()).containsExactly("sample id");
+        assertThat(viewRequest.getValue("sample id").getText()).isEqualTo("sample text");
+
+        final TranslationRequestValue value =
+                request.getTranslationRequestValues().get(0);
+        assertThat(value.getText()).isEqualTo("hello");
+    }
+
+    @Test
+    public void testParceledRequest_validViewTranslationRequests() {
+        final TranslationRequest request = new TranslationRequest.Builder()
+                .addViewTranslationRequest(mRequest)
+                .addViewTranslationRequest(new ViewTranslationRequest.Builder(new AutofillId(42))
+                        .setValue("id2", TranslationRequestValue.forText("test"))
+                        .build())
+                .build();
+
+        final Parcel parcel = Parcel.obtain();
+        request.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        final TranslationRequest parceledRequest =
+                TranslationRequest.CREATOR.createFromParcel(parcel);
+
+        assertThat(parceledRequest.getTranslationRequestValues().size()).isEqualTo(0);
+        assertThat(parceledRequest.getViewTranslationRequests().size()).isEqualTo(2);
+
+        final ViewTranslationRequest request1 =
+                parceledRequest.getViewTranslationRequests().get(0);
+        assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request1.getKeys().size()).isEqualTo(1);
+        assertThat(request1.getKeys()).containsExactly("sample id");
+        assertThat(request1.getValue("sample id").getText()).isEqualTo("sample text");
+
+        final ViewTranslationRequest request2 =
+                parceledRequest.getViewTranslationRequests().get(1);
+        assertThat(request2.getAutofillId()).isEqualTo(new AutofillId(42));
+        assertThat(request2.getKeys().size()).isEqualTo(1);
+        assertThat(request2.getKeys()).containsExactly("id2");
+        assertThat(request2.getValue("id2").getText()).isEqualTo("test");
     }
 }
\ No newline at end of file
diff --git a/tests/translation/src/android/translation/cts/unittests/TranslationResponseTest.java b/tests/translation/src/android/translation/cts/unittests/TranslationResponseTest.java
index 85548e1..d7f0054 100644
--- a/tests/translation/src/android/translation/cts/unittests/TranslationResponseTest.java
+++ b/tests/translation/src/android/translation/cts/unittests/TranslationResponseTest.java
@@ -16,131 +16,178 @@
 
 package android.translation.cts.unittests;
 
+import static android.view.translation.TranslationResponseValue.STATUS_SUCCESS;
+
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.testng.Assert.assertThrows;
+
 import android.os.Parcel;
 import android.view.autofill.AutofillId;
-import android.view.translation.TranslationRequest;
 import android.view.translation.TranslationResponse;
+import android.view.translation.TranslationResponseValue;
+import android.view.translation.ViewTranslationResponse;
 
 import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.ArrayList;
-
 @RunWith(AndroidJUnit4.class)
 public class TranslationResponseTest {
 
-    private final TranslationRequest mRequest = new TranslationRequest.Builder()
-            .setAutofillId(new AutofillId(17))
-            .setTranslationText("text1")
-            .build();
-    private final TranslationRequest mRequest2 = new TranslationRequest.Builder()
-            .setAutofillId(new AutofillId(42))
-            .setTranslationText("text2")
+    private final TranslationResponseValue mValue =
+            new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                    .setText("hello")
+                    .build();
+
+    private final ViewTranslationResponse mResponse = new ViewTranslationResponse
+            .Builder(new AutofillId(17))
+            .setValue("sample id",
+                    new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                            .setText("sample text")
+                            .build())
             .build();
 
     @Test
-    public void testBuilder_nullTranslation() {
-        final TranslationResponse response =
+    public void testBuilder_validViewTranslationResponse() {
+        final TranslationResponse request =
                 new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                .addTranslations(null)
-                .build();
+                        .setViewTranslationResponse(0, mResponse)
+                        .build();
 
-        assertThat(response.getTranslationStatus())
-                .isEqualTo(TranslationResponse.TRANSLATION_STATUS_SUCCESS);
-        assertThat(response.getTranslations().size()).isEqualTo(1);
-        assertThat(response.getTranslations().get(0)).isNull();
+        assertThat(request.getTranslationResponseValues().size()).isEqualTo(0);
+        assertThat(request.getViewTranslationResponses().size()).isEqualTo(1);
+
+        final ViewTranslationResponse viewRequest =
+                request.getViewTranslationResponses().get(0);
+        assertThat(viewRequest.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(viewRequest.getKeys().size()).isEqualTo(1);
+        assertThat(viewRequest.getValue("sample id").getText()).isEqualTo("sample text");
     }
 
     @Test
-    public void testBuilder_emptyTranslations() {
-        final TranslationResponse response =
+    public void testBuilder_errorViewTranslationResponse() {
+        final TranslationResponse request =
                 new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                .build();
+                        .setViewTranslationResponse(0, new ViewTranslationResponse
+                                .Builder(new AutofillId(42))
+                                .setValue("id2",
+                                        TranslationResponseValue.forError())
+                                .build())
+                        .build();
 
-        assertThat(response.getTranslationStatus())
-                .isEqualTo(TranslationResponse.TRANSLATION_STATUS_SUCCESS);
-        assertThat(response.getTranslations().size()).isEqualTo(0);
+        assertThat(request.getTranslationResponseValues().size()).isEqualTo(0);
+        assertThat(request.getViewTranslationResponses().size()).isEqualTo(1);
+
+        final ViewTranslationResponse viewRequest =
+                request.getViewTranslationResponses().get(0);
+        assertThat(viewRequest.getAutofillId()).isEqualTo(new AutofillId(42));
+        assertThat(viewRequest.getKeys().size()).isEqualTo(1);
+        assertThat(viewRequest.getValue("id2").getStatusCode())
+                .isEqualTo(TranslationResponseValue.STATUS_ERROR);
     }
 
     @Test
-    public void testBuilder_changeTranslationStatus() {
-        final TranslationResponse response =
+    public void testBuilder_validTranslationResponseValue() {
+        final TranslationResponse request =
                 new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                .setTranslationStatus(TranslationResponse.TRANSLATION_STATUS_UNKNOWN_ERROR)
-                .build();
+                        .setTranslationResponseValue(0, mValue)
+                        .build();
 
-        assertThat(response.getTranslationStatus())
-                .isEqualTo(TranslationResponse.TRANSLATION_STATUS_UNKNOWN_ERROR);
+        assertThat(request.getTranslationResponseValues().size()).isEqualTo(1);
+        assertThat(request.getViewTranslationResponses().size()).isEqualTo(0);
+
+        final TranslationResponseValue value =
+                request.getTranslationResponseValues().get(0);
+        assertThat(value.getText()).isEqualTo("hello");
     }
 
     @Test
-    public void testBuilder_validAddRequests() {
-        final TranslationResponse response =
+    public void testParceledRequest_validTranslationResponseValues() {
+        final TranslationResponse request =
                 new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                .addTranslations(mRequest)
-                .addTranslations(mRequest2)
-                .build();
-
-        assertThat(response.getTranslationStatus())
-                .isEqualTo(TranslationResponse.TRANSLATION_STATUS_SUCCESS);
-        assertThat(response.getTranslations().size()).isEqualTo(2);
-
-        final TranslationRequest request1 = response.getTranslations().get(0);
-        assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request1.getTranslationText()).isEqualTo("text1");
-
-        final TranslationRequest request2 = response.getTranslations().get(1);
-        assertThat(request2.getAutofillId()).isEqualTo(new AutofillId(42));
-        assertThat(request2.getTranslationText()).isEqualTo("text2");
-    }
-
-    @Test
-    public void testBuilder_validSetRequests() {
-        final ArrayList<TranslationRequest> requests = new ArrayList<>();
-        requests.add(mRequest);
-        requests.add(mRequest2);
-        final TranslationResponse response =
-                new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                .setTranslations(requests)
-                .build();
-
-        assertThat(response.getTranslationStatus())
-                .isEqualTo(TranslationResponse.TRANSLATION_STATUS_SUCCESS);
-        assertThat(response.getTranslations().size()).isEqualTo(2);
-
-        final TranslationRequest request1 = response.getTranslations().get(0);
-        assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request1.getTranslationText()).isEqualTo("text1");
-
-        final TranslationRequest request2 = response.getTranslations().get(1);
-        assertThat(request2.getAutofillId()).isEqualTo(new AutofillId(42));
-        assertThat(request2.getTranslationText()).isEqualTo("text2");
-    }
-
-    @Test
-    public void testParceledResponse() {
-        final TranslationResponse response =
-                new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
-                .addTranslations(mRequest)
-                .build();
+                        .setTranslationResponseValue(0, mValue)
+                        .setTranslationResponseValue(2,
+                                new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                                        .setText("world")
+                                        .build())
+                        .build();
 
         final Parcel parcel = Parcel.obtain();
-        response.writeToParcel(parcel, 0);
+        request.writeToParcel(parcel, 0);
         parcel.setDataPosition(0);
-        final TranslationResponse parceledResponse =
+        final TranslationResponse parceledRequest =
                 TranslationResponse.CREATOR.createFromParcel(parcel);
 
-        assertThat(response.getTranslationStatus())
-                .isEqualTo(TranslationResponse.TRANSLATION_STATUS_SUCCESS);
-        assertThat(response.getTranslations().size()).isEqualTo(1);
+        assertThat(parceledRequest.getTranslationResponseValues().size()).isEqualTo(2);
+        assertThat(parceledRequest.getViewTranslationResponses().size()).isEqualTo(0);
 
-        final TranslationRequest request1 = response.getTranslations().get(0);
+        final TranslationResponseValue value1 =
+                parceledRequest.getTranslationResponseValues().get(0);
+        assertThat(value1.getText()).isEqualTo("hello");
+
+        final TranslationResponseValue value2 =
+                parceledRequest.getTranslationResponseValues().get(2);
+        assertThat(value2.getText()).isEqualTo("world");
+    }
+
+    @Test
+    public void testBuilder_mixingAdders() {
+        final TranslationResponse response =
+                new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
+                        .setViewTranslationResponse(0, mResponse)
+                        .setTranslationResponseValue(0, mValue)
+                        .build();
+
+        assertThat(response.getTranslationResponseValues().size()).isEqualTo(1);
+        assertThat(response.getViewTranslationResponses().size()).isEqualTo(1);
+
+        final ViewTranslationResponse viewResponse =
+                response.getViewTranslationResponses().get(0);
+        assertThat(viewResponse.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(viewResponse.getKeys().size()).isEqualTo(1);
+        assertThat(viewResponse.getValue("sample id").getText()).isEqualTo("sample text");
+
+        final TranslationResponseValue value =
+                response.getTranslationResponseValues().get(0);
+        assertThat(value.getText()).isEqualTo("hello");
+    }
+
+    @Test
+    public void testParceledRequest_validViewTranslationResponses() {
+        final TranslationResponse request =
+                new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
+                        .setViewTranslationResponse(0, mResponse)
+                        .setViewTranslationResponse(2, new ViewTranslationResponse
+                                .Builder(new AutofillId(42))
+                                .setValue("id2",
+                                        new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                                                .setText("test")
+                                                .build())
+                                .build())
+                        .build();
+
+        final Parcel parcel = Parcel.obtain();
+        request.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        final TranslationResponse parceledRequest =
+                TranslationResponse.CREATOR.createFromParcel(parcel);
+
+        assertThat(parceledRequest.getTranslationResponseValues().size()).isEqualTo(0);
+        assertThat(parceledRequest.getViewTranslationResponses().size()).isEqualTo(2);
+
+        final ViewTranslationResponse request1 =
+                parceledRequest.getViewTranslationResponses().get(0);
         assertThat(request1.getAutofillId()).isEqualTo(new AutofillId(17));
-        assertThat(request1.getTranslationText()).isEqualTo("text1");
+        assertThat(request1.getKeys().size()).isEqualTo(1);
+        assertThat(request1.getValue("sample id").getText()).isEqualTo("sample text");
+
+        final ViewTranslationResponse request2 =
+                parceledRequest.getViewTranslationResponses().get(2);
+        assertThat(request2.getAutofillId()).isEqualTo(new AutofillId(42));
+        assertThat(request2.getKeys().size()).isEqualTo(1);
+        assertThat(request2.getValue("id2").getText()).isEqualTo("test");
     }
 
 }
\ No newline at end of file
diff --git a/tests/translation/src/android/translation/cts/unittests/TranslationValueTest.java b/tests/translation/src/android/translation/cts/unittests/TranslationValueTest.java
new file mode 100644
index 0000000..0144224
--- /dev/null
+++ b/tests/translation/src/android/translation/cts/unittests/TranslationValueTest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.translation.cts.unittests;
+
+import static android.view.translation.TranslationResponseValue.STATUS_SUCCESS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.testng.Assert.assertThrows;
+
+import android.view.translation.TranslationRequestValue;
+import android.view.translation.TranslationResponseValue;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class TranslationValueTest {
+
+    @Test
+    public void testTranslationRequestValue_forText() {
+        final TranslationRequestValue value = TranslationRequestValue.forText("sample text");
+
+        assertThat(value.getText()).isEqualTo("sample text");
+    }
+
+    @Test
+    public void testTranslationResponseValue_validBuilder() {
+        final TranslationResponseValue value = new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                .setText("sample text")
+                .build();
+
+        assertThat(value.getStatusCode()).isEqualTo(STATUS_SUCCESS);
+        assertThat(value.getText()).isEqualTo("sample text");
+    }
+
+    @Test
+    public void testTranslationResponseValue_forError() {
+        final TranslationResponseValue value = TranslationResponseValue.forError();
+
+        assertThat(value.getStatusCode()).isEqualTo(TranslationResponseValue.STATUS_ERROR);
+        assertThat(value.getText()).isNull();
+    }
+}
diff --git a/tests/translation/src/android/translation/cts/unittests/ViewTranslationRequestTest.java b/tests/translation/src/android/translation/cts/unittests/ViewTranslationRequestTest.java
new file mode 100644
index 0000000..5a6d46b
--- /dev/null
+++ b/tests/translation/src/android/translation/cts/unittests/ViewTranslationRequestTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.translation.cts.unittests;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.testng.Assert.assertThrows;
+
+import android.view.autofill.AutofillId;
+import android.view.translation.TranslationRequestValue;
+import android.view.translation.ViewTranslationRequest;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class ViewTranslationRequestTest {
+
+    private final AutofillId mAutofillId = new AutofillId(17);
+
+    @Test
+    public void testBuilder_nullAutofillId() {
+        assertThrows(NullPointerException.class, () -> new ViewTranslationRequest.Builder(null));
+    }
+
+    @Test
+    public void testBuilder_validSetText() {
+        final ViewTranslationRequest request = new ViewTranslationRequest.Builder(mAutofillId)
+                .setValue("sample id",
+                        TranslationRequestValue.forText("sample text"))
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(1);
+        assertThat(request.getKeys()).containsExactly("sample id");
+        assertThat(request.getValue("sample id").getText()).isEqualTo("sample text");
+    }
+
+    @Test
+    public void testBuilder_setTextTwice() {
+        final ViewTranslationRequest request = new ViewTranslationRequest.Builder(mAutofillId)
+                .setValue("sample id",
+                        TranslationRequestValue.forText("sample text"))
+                .setValue("sample id",
+                        TranslationRequestValue.forText("text2"))
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(1);
+        assertThat(request.getKeys()).containsExactly("sample id");
+        assertThat(request.getValue("sample id").getText()).isEqualTo("text2");
+    }
+
+    @Test
+    public void testGetValue_invalidId() {
+        final ViewTranslationRequest request = new ViewTranslationRequest.Builder(mAutofillId)
+                .setValue("sample id",
+                        TranslationRequestValue.forText("sample text"))
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(1);
+        assertThat(request.getKeys()).containsExactly("sample id");
+        assertThat(request.getValue("sample id").getText()).isEqualTo("sample text");
+
+        assertThrows(IllegalArgumentException.class, () -> request.getValue("something"));
+        assertThrows(NullPointerException.class, () -> request.getValue(null));
+    }
+
+    @Test
+    public void testBuilder_multipleTexts() {
+        final ViewTranslationRequest request = new ViewTranslationRequest.Builder(mAutofillId)
+                .setValue("sample id",
+                        TranslationRequestValue.forText("sample text"))
+                .setValue("id2",
+                        TranslationRequestValue.forText("text2"))
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(2);
+        assertThat(request.getKeys()).containsExactly("sample id", "id2");
+        assertThat(request.getValue("sample id").getText()).isEqualTo("sample text");
+        assertThat(request.getValue("id2").getText()).isEqualTo("text2");
+    }
+}
diff --git a/tests/translation/src/android/translation/cts/unittests/ViewTranslationResponseTest.java b/tests/translation/src/android/translation/cts/unittests/ViewTranslationResponseTest.java
new file mode 100644
index 0000000..c3a9516
--- /dev/null
+++ b/tests/translation/src/android/translation/cts/unittests/ViewTranslationResponseTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.translation.cts.unittests;
+
+import static android.view.translation.TranslationResponseValue.STATUS_SUCCESS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.testng.Assert.assertThrows;
+
+import android.view.autofill.AutofillId;
+import android.view.translation.TranslationResponseValue;
+import android.view.translation.ViewTranslationResponse;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class ViewTranslationResponseTest {
+
+    private final AutofillId mAutofillId = new AutofillId(17);
+
+    @Test
+    public void testBuilder_nullAutofillId() {
+        assertThrows(NullPointerException.class, () -> new ViewTranslationResponse.Builder(null));
+    }
+
+    @Test
+    public void testBuilder_validAddText() {
+        final ViewTranslationResponse request = new ViewTranslationResponse.Builder(mAutofillId)
+                .setValue("sample id",
+                        new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                                .setText("sample text")
+                                .build())
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(1);
+        assertThat(request.getValue("sample id").getText()).isEqualTo("sample text");
+    }
+
+    @Test
+    public void testBuilder_validAddError() {
+        final ViewTranslationResponse request = new ViewTranslationResponse.Builder(mAutofillId)
+                .setValue("sample id", TranslationResponseValue.forError())
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(1);
+        assertThat(request.getValue("sample id").getStatusCode())
+                .isEqualTo(TranslationResponseValue.STATUS_ERROR);
+    }
+
+    @Test
+    public void testGetValue_invalidId() {
+        final ViewTranslationResponse request = new ViewTranslationResponse.Builder(mAutofillId)
+                .setValue("sample id",
+                        new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                                .setText("sample text")
+                                .build())
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(1);
+        assertThat(request.getValue("sample id").getText()).isEqualTo("sample text");
+
+        assertThrows(IllegalArgumentException.class, () -> request.getValue("something"));
+        assertThrows(NullPointerException.class, () -> request.getValue(null));
+    }
+
+    @Test
+    public void testBuilder_multipleResults() {
+        final ViewTranslationResponse request = new ViewTranslationResponse.Builder(mAutofillId)
+                .setValue("sample id",
+                        new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                                .setText("sample text")
+                                .build())
+                .setValue("id2",
+                        new TranslationResponseValue.Builder(STATUS_SUCCESS)
+                                .setText("text2")
+                                .build())
+                .setValue("id3", TranslationResponseValue.forError())
+                .build();
+
+        assertThat(request.getAutofillId()).isEqualTo(new AutofillId(17));
+        assertThat(request.getKeys().size()).isEqualTo(3);
+        assertThat(request.getValue("sample id").getText()).isEqualTo("sample text");
+        assertThat(request.getValue("id2").getText()).isEqualTo("text2");
+        assertThat(request.getValue("id3").getStatusCode())
+                .isEqualTo(TranslationResponseValue.STATUS_ERROR);
+    }
+}