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

Commit aa496d04 authored by Tony Mak's avatar Tony Mak
Browse files

Doing sublisting after deduplication

For message like "a@anrdoid.com b@android.com", we wanna show no
suggestion on them because it will be ambiguous (Two chips with
label "Send Email"). And this is achieve by deduplication.

Previously, we did sublisting before duplication, and thus
we failed to remove some duplications. Let's do it the another way round.

BUG: 130344529

Test: atest
Change-Id: Idb4ea439daca710ce6247611f97c657e6a1c1a1b
parent 9214de57
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -451,10 +451,6 @@ public final class TextClassifierImpl implements TextClassifier {
        Collection<String> expectedTypes = resolveActionTypesFromRequest(request);
        List<ConversationAction> conversationActions = new ArrayList<>();
        for (ActionsSuggestionsModel.ActionSuggestion nativeSuggestion : nativeSuggestions) {
            if (request.getMaxSuggestions() >= 0
                    && conversationActions.size() == request.getMaxSuggestions()) {
                break;
            }
            String actionType = nativeSuggestion.getActionType();
            if (!expectedTypes.contains(actionType)) {
                continue;
@@ -484,6 +480,10 @@ public final class TextClassifierImpl implements TextClassifier {
        }
        conversationActions =
                ActionsSuggestionsHelper.removeActionsWithDuplicates(conversationActions);
        if (request.getMaxSuggestions() >= 0
                && conversationActions.size() > request.getMaxSuggestions()) {
            conversationActions = conversationActions.subList(0, request.getMaxSuggestions());
        }
        String resultId = ActionsSuggestionsHelper.createResultId(
                mContext,
                request.getConversation(),
+24 −7
Original line number Diff line number Diff line
@@ -380,7 +380,7 @@ public class TextClassifierTest {
    }

    @Test
    public void testSuggestConversationActions_textReplyOnly_maxThree() {
    public void testSuggestConversationActions_textReplyOnly_maxOne() {
        if (isTextClassifierDisabled()) return;
        ConversationActions.Message message =
                new ConversationActions.Message.Builder(
@@ -399,12 +399,11 @@ public class TextClassifierTest {
                        .build();

        ConversationActions conversationActions = mClassifier.suggestConversationActions(request);
        assertTrue(conversationActions.getConversationActions().size() > 0);
        for (ConversationAction conversationAction :
                conversationActions.getConversationActions()) {
            assertThat(conversationAction,
                    isConversationAction(ConversationAction.TYPE_TEXT_REPLY));
        }
        Truth.assertThat(conversationActions.getConversationActions()).hasSize(1);
        ConversationAction conversationAction = conversationActions.getConversationActions().get(0);
        Truth.assertThat(conversationAction.getType()).isEqualTo(
                ConversationAction.TYPE_TEXT_REPLY);
        Truth.assertThat(conversationAction.getTextReply()).isNotNull();
    }

    @Test
@@ -493,6 +492,24 @@ public class TextClassifierTest {
                ExtrasUtils.getSerializedEntityData(conversationAction.getExtras())).isNotEmpty();
    }

    @Test
    public void testSuggetsConversationActions_deduplicate() {
        if (isTextClassifierDisabled()) return;
        ConversationActions.Message message =
                new ConversationActions.Message.Builder(
                        ConversationActions.Message.PERSON_USER_OTHERS)
                        .setText("a@android.com b@android.com")
                        .build();
        ConversationActions.Request request =
                new ConversationActions.Request.Builder(Collections.singletonList(message))
                        .setMaxSuggestions(3)
                        .build();

        ConversationActions conversationActions = mClassifier.suggestConversationActions(request);

        Truth.assertThat(conversationActions.getConversationActions()).isEmpty();
    }

    private boolean isTextClassifierDisabled() {
        return mClassifier == null || mClassifier == TextClassifier.NO_OP;
    }