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

Commit 768a383e authored by Joe Antonetti's avatar Joe Antonetti
Browse files

[Handoff][1/N] Convert Remaining Messages to Records

This change converts remaining messages to records, allowing us to simplify equality checks. I've updated the corresponding unit tests for clarity.

As part of this change, I've removed the now-unused "currentForegroundTaskId" field. Handoff pivoted to manually comparing last used timestamps, which is more reliable

Test: Updated unit tests
Bug: 400970610
Flag: android.companion.enable_task_continuity
Change-Id: I423e0c10962e9d20de4e2e1f72f7abb32e960566
parent 41f9bdb1
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -33,8 +33,7 @@ message TaskContinuityMessage {
}

message ContinuityDeviceConnected {
    int32 currentForegroundTaskId = 1;
    repeated RemoteTaskInfo remoteTasks = 2;
    repeated RemoteTaskInfo remoteTasks = 1;
}

message RemoteTaskAddedMessage {
+2 −7
Original line number Diff line number Diff line
@@ -179,11 +179,6 @@ class TaskBroadcaster

        List<ActivityManager.RunningTaskInfo> runningTasks = getRunningTasks();

        int currentForegroundTaskId = -1;
        if (runningTasks.size() > 0) {
            currentForegroundTaskId = runningTasks.get(0).taskId;
        }

        List<RemoteTaskInfo> remoteTasks = new ArrayList<>();
        for (ActivityManager.RunningTaskInfo taskInfo : runningTasks) {
            RemoteTaskInfo remoteTaskInfo = createRemoteTaskInfo(taskInfo);
@@ -194,8 +189,8 @@ class TaskBroadcaster
            }
        }

        ContinuityDeviceConnected deviceConnectedMessage =
            new ContinuityDeviceConnected(currentForegroundTaskId, remoteTasks);
        ContinuityDeviceConnected deviceConnectedMessage
            = new ContinuityDeviceConnected(remoteTasks);

        sendMessage(associationId, deviceConnectedMessage);
    }
+3 −3
Original line number Diff line number Diff line
@@ -128,12 +128,12 @@ public final class TaskContinuityManagerService extends SystemService {
            case ContinuityDeviceConnected continuityDeviceConnected:
                mRemoteTaskStore.setTasks(
                    associationId,
                    continuityDeviceConnected.getRemoteTasks());
                    continuityDeviceConnected.remoteTasks());
                break;
            case RemoteTaskAddedMessage remoteTaskAddedMessage:
                mRemoteTaskStore.addTask(
                    associationId,
                    remoteTaskAddedMessage.getTask());
                    remoteTaskAddedMessage.task());
                break;
            case RemoteTaskRemovedMessage remoteTaskRemovedMessage:
                mRemoteTaskStore.removeTask(
@@ -143,7 +143,7 @@ public final class TaskContinuityManagerService extends SystemService {
            case RemoteTaskUpdatedMessage remoteTaskUpdatedMessage:
                mRemoteTaskStore.updateTask(
                    associationId,
                    remoteTaskUpdatedMessage.getTask());
                    remoteTaskUpdatedMessage.task());
                break;
            case HandoffRequestResultMessage handoffRequestResultMessage:
                mOutboundHandoffRequestController.onHandoffRequestResultMessageReceived(
+5 −41
Original line number Diff line number Diff line
@@ -26,32 +26,14 @@ import java.util.List;
/**
 * Deserialized version of the {@link ContinuityDeviceConnected} proto.
 */
public class ContinuityDeviceConnected implements TaskContinuityMessageData {
public record ContinuityDeviceConnected(
    List<RemoteTaskInfo> remoteTasks) implements TaskContinuityMessageData {

    private int mCurrentForegroundTaskId = 0;
    private List<RemoteTaskInfo> mRemoteTasks;
    public static ContinuityDeviceConnected readFromProto(ProtoInputStream pis) throws IOException {

    public ContinuityDeviceConnected(
        int currentForegroundTaskId,
        List<RemoteTaskInfo> remoteTasks) {

        mCurrentForegroundTaskId = currentForegroundTaskId;
        mRemoteTasks = remoteTasks;
    }

    static ContinuityDeviceConnected readFromProto(ProtoInputStream pis) throws IOException {

        int currentForegroundTaskId = 0;
        List<RemoteTaskInfo> remoteTasks = new ArrayList<>();
        while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
            switch (pis.getFieldNumber()) {
                case (int) android.companion.ContinuityDeviceConnected.CURRENT_FOREGROUND_TASK_ID:
                    currentForegroundTaskId = pis.readInt(
                        android.companion.ContinuityDeviceConnected.CURRENT_FOREGROUND_TASK_ID
                    );

                    break;

                case (int) android.companion.ContinuityDeviceConnected.REMOTE_TASKS:
                    final long remoteTasksToken = pis.start(
                        android.companion.ContinuityDeviceConnected.REMOTE_TASKS);
@@ -61,21 +43,7 @@ public class ContinuityDeviceConnected implements TaskContinuityMessageData {
            }
        }

        return new ContinuityDeviceConnected(currentForegroundTaskId, remoteTasks);
    }

    /**
     * Returns the current foreground task ID.
     */
    public int getCurrentForegroundTaskId() {
        return mCurrentForegroundTaskId;
    }

    /**
     * Gets which remote tasks are running on the device.
     */
    public List<RemoteTaskInfo> getRemoteTasks() {
        return mRemoteTasks;
        return new ContinuityDeviceConnected(remoteTasks);
    }

    /**
@@ -91,11 +59,7 @@ public class ContinuityDeviceConnected implements TaskContinuityMessageData {
     */
    @Override
    public void writeToProto(ProtoOutputStream pos) throws IOException {
        pos.writeInt32(
            android.companion.ContinuityDeviceConnected.CURRENT_FOREGROUND_TASK_ID,
            mCurrentForegroundTaskId);

        for (RemoteTaskInfo remoteTaskInfo : mRemoteTasks) {
        for (RemoteTaskInfo remoteTaskInfo : remoteTasks()) {
            long remoteTasksToken = pos.start(
                android.companion.ContinuityDeviceConnected.REMOTE_TASKS);
            remoteTaskInfo.writeToProto(pos);
+6 −12
Original line number Diff line number Diff line
@@ -26,13 +26,7 @@ import java.io.IOException;
/**
 * Deserialized version of the {@link RemoteTaskAdded} proto.
 */
public class RemoteTaskAddedMessage implements TaskContinuityMessageData {

    private RemoteTaskInfo mTask;

    public RemoteTaskAddedMessage(RemoteTaskInfo task) {
        mTask = task;
    }
public record RemoteTaskAddedMessage(RemoteTaskInfo task) implements TaskContinuityMessageData {

    static RemoteTaskAddedMessage readFromProto(ProtoInputStream pis) throws IOException {
        RemoteTaskInfo task = null;
@@ -47,6 +41,10 @@ public class RemoteTaskAddedMessage implements TaskContinuityMessageData {
            }
        }

        if (task == null) {
            throw new IOException("RemoteTaskAddedMessage is missing task field");
        }

        return new RemoteTaskAddedMessage(task);
    }

@@ -60,11 +58,7 @@ public class RemoteTaskAddedMessage implements TaskContinuityMessageData {
        long taskToken = pos.start(
            android.companion.RemoteTaskAddedMessage.TASK);

        mTask.writeToProto(pos);
        task().writeToProto(pos);
        pos.end(taskToken);
    }

    public RemoteTaskInfo getTask() {
        return mTask;
    }
}
 No newline at end of file
Loading