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

Commit f701a256 authored by Joe Antonetti's avatar Joe Antonetti
Browse files

Send RemoteTaskUpdatedMessage when Task Moves to Front

Flag: android.companion.enable_task_continuity
Test: Added unit tests
Bug: 400970610
Change-Id: I810cbf29ab96cbbb9f18c1800caaf69ba1c807ba
parent f7d85cbc
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.companion.datatransfer.continuity;
import static android.companion.CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityTaskManager;
import android.app.TaskStackListener;
import android.companion.AssociationInfo;
@@ -32,6 +33,7 @@ import com.android.server.companion.datatransfer.continuity.connectivity.Connect
import com.android.server.companion.datatransfer.continuity.messages.ContinuityDeviceConnected;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskAddedMessage;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskRemovedMessage;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskUpdatedMessage;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData;
@@ -142,6 +144,15 @@ class TaskBroadcaster
        sendMessageToAllConnectedAssociations(taskRemovedMessage);
    }

    @Override
    public void onTaskMovedToFront(RunningTaskInfo taskInfo) throws RemoteException {
        Slog.v(TAG, "onTaskMovedToFront: taskId=" + taskInfo.taskId);

        RemoteTaskInfo remoteTaskInfo = new RemoteTaskInfo(taskInfo);
        RemoteTaskUpdatedMessage taskUpdatedMessage = new RemoteTaskUpdatedMessage(remoteTaskInfo);
        sendMessageToAllConnectedAssociations(taskUpdatedMessage);
    }

    private void sendDeviceConnectedMessage(int associationId) {
        Slog.v(
            TAG,
+36 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static com.android.server.companion.datatransfer.continuity.TaskContinuit
import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createRunningTaskInfo;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.content.Context;
@@ -37,6 +38,7 @@ import android.companion.IOnTransportsChangedListener;
import android.companion.CompanionDeviceManager;
import android.companion.ICompanionDeviceManager;
import android.companion.AssociationInfo;
import android.companion.datatransfer.continuity.RemoteTask;
import android.platform.test.annotations.Presubmit;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -47,7 +49,9 @@ import com.android.server.companion.datatransfer.continuity.connectivity.Connect
import com.android.server.companion.datatransfer.continuity.messages.ContinuityDeviceConnected;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskAddedMessage;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskRemovedMessage;
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskUpdatedMessage;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData;

import org.junit.Before;
@@ -240,4 +244,36 @@ public class TaskBroadcasterTest {
                (RemoteTaskRemovedMessage) taskContinuityMessage.getData();
        assertThat(remoteTaskRemovedMessage.taskId()).isEqualTo(taskId);
    }

    @Test
    public void testOnTaskMovedToFront_sendsMessageToAllAssociations() throws Exception {
        // Setup
        int associationId = 1;
        String associationName = "name1";
        when(mMockConnectedAssociationStore.getConnectedAssociations())
            .thenReturn(List.of(createAssociationInfo(associationId, associationName)));
        mTaskBroadcaster.startBroadcasting();

        // Simulate a task being moved to front.
        int taskId = 1;
        String taskLabel = "newTask";
        ActivityManager.RunningTaskInfo taskInfo = createRunningTaskInfo(taskId, taskLabel, 0);
        mTaskBroadcaster.onTaskMovedToFront(taskInfo);

        // Verify sendMessage is called for each association.
        ArgumentCaptor<byte[]> messageCaptor = ArgumentCaptor.forClass(byte[].class);
        verify(mMockCompanionDeviceManagerService, times(1)).sendMessage(
            eq(CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY),
            messageCaptor.capture(),
            eq(new int[] {1}));
        TaskContinuityMessage actualMessage = new TaskContinuityMessage(messageCaptor.getValue());
        assertThat(actualMessage.getData()).isInstanceOf(RemoteTaskUpdatedMessage.class);
        RemoteTaskUpdatedMessage remoteTaskUpdated
            = (RemoteTaskUpdatedMessage) actualMessage.getData();

        RemoteTask expectedTask = new RemoteTaskInfo(taskInfo)
            .toRemoteTask(associationId, associationName);
        assertThat(remoteTaskUpdated.getTask().getId()).isEqualTo(expectedTask.getId());
    }

}
 No newline at end of file