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

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

Send Removal Events when Task is Removed

Send a RemoteTaskRemovedMessage whenever the local task is removed.

Test: Added unit tests
Bug: 400970610
Flag: android.companion.enable_task_continuity
Change-Id: I8202bc1e82b39e332be6f7628db0115a3daafe08
parent 55acb30c
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.util.Slog;
import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore;
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.RemoteTaskInfo;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData;
@@ -133,6 +134,14 @@ class TaskBroadcaster
        }
    }

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

        RemoteTaskRemovedMessage taskRemovedMessage = new RemoteTaskRemovedMessage(taskId);
        sendMessageToAllConnectedAssociations(taskRemovedMessage);
    }

    private void sendDeviceConnectedMessage(int associationId) {
        Slog.v(
            TAG,
+28 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ 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.RemoteTaskRemovedMessage;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData;

import org.junit.Before;
import org.junit.Test;
@@ -212,4 +214,30 @@ public class TaskBroadcasterTest {
                (RemoteTaskAddedMessage) taskContinuityMessage.getData();
        assertThat(remoteTaskAddedMessage.getTask().getId()).isEqualTo(taskId);
    }

        @Test
    public void testOnTaskRemoved_sendsMessageToAllAssociations() throws Exception {
        // Start broadcasting.
        int taskId = 123;
        mTaskBroadcaster.startBroadcasting();
        verify(mMockConnectedAssociationStore, times(1)).addObserver(mTaskBroadcaster);
        AssociationInfo associationInfo = createAssociationInfo(1, "name1");
        when(mMockConnectedAssociationStore.getConnectedAssociations())
            .thenReturn(Arrays.asList(associationInfo));

        mTaskBroadcaster.onTaskRemoved(taskId);

        // Verify sendMessage is called
        ArgumentCaptor<byte[]> messageCaptor = ArgumentCaptor.forClass(byte[].class);
        verify(mMockCompanionDeviceManagerService, times(1)).sendMessage(
                eq(CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY),
                messageCaptor.capture(),
                any(int[].class));
        byte[] capturedMessage = messageCaptor.getValue();
        TaskContinuityMessage taskContinuityMessage = new TaskContinuityMessage(capturedMessage);
        assertThat(taskContinuityMessage.getData()).isInstanceOf(RemoteTaskRemovedMessage.class);
        RemoteTaskRemovedMessage remoteTaskRemovedMessage =
                (RemoteTaskRemovedMessage) taskContinuityMessage.getData();
        assertThat(remoteTaskRemovedMessage.taskId()).isEqualTo(taskId);
    }
}
 No newline at end of file