Loading services/companion/java/com/android/server/companion/datatransfer/continuity/TaskContinuityManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ public final class TaskContinuityManagerService extends SystemService { private final class TaskContinuityManagerServiceImpl extends ITaskContinuityManager.Stub { @Override public List<RemoteTask> getRemoteTasks() { return new ArrayList<>(); return mRemoteTaskStore.getMostRecentTasks(); } @Override Loading services/companion/java/com/android/server/companion/datatransfer/continuity/messages/RemoteTaskInfo.java +9 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.companion.datatransfer.continuity.messages; import android.app.TaskInfo; import android.companion.datatransfer.continuity.RemoteTask; import android.util.proto.ProtoInputStream; import android.util.proto.ProtoOutputStream; Loading Loading @@ -95,4 +96,12 @@ public class RemoteTaskInfo { protoOutputStream .writeBytes(android.companion.RemoteTaskInfo.TASK_ICON, mTaskIcon); } public RemoteTask toRemoteTask(int id, String deviceName) { return new RemoteTask.Builder(id) .setLabel(mLabel) .setLastUsedTimestampMillis((int) mLastUsedTimeMillis) .setSourceDeviceName(deviceName) .build(); } } No newline at end of file services/companion/java/com/android/server/companion/datatransfer/continuity/tasks/RemoteDeviceTaskList.java +5 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.companion.datatransfer.continuity.tasks; import android.companion.datatransfer.continuity.RemoteTask; import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo; import java.util.ArrayList; Loading Loading @@ -71,7 +73,7 @@ class RemoteDeviceTaskList { * Gets the most recently used task on this device, or null if there are no * tasks. */ RemoteTaskInfo getMostRecentTask() { RemoteTask getMostRecentTask() { if (mTasks.isEmpty()) { return null; } Loading @@ -85,6 +87,7 @@ class RemoteDeviceTaskList { mostRecentTask = task; } } return mostRecentTask; return mostRecentTask.toRemoteTask(mAssociationId, mDeviceName); } } No newline at end of file services/companion/java/com/android/server/companion/datatransfer/continuity/tasks/RemoteTaskStore.java +5 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.util.Slog; import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore; import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo; import android.companion.datatransfer.continuity.RemoteTask; import java.util.ArrayList; import java.util.HashMap; import java.util.List; Loading Loading @@ -70,11 +72,11 @@ public class RemoteTaskStore implements ConnectedAssociationStore.Observer { * @return A list of the most recent tasks from all devices in the task * store. */ public List<RemoteTaskInfo> getMostRecentTasks() { public List<RemoteTask> getMostRecentTasks() { synchronized (mRemoteDeviceTaskLists) { List<RemoteTaskInfo> mostRecentTasks = new ArrayList<>(); List<RemoteTask> mostRecentTasks = new ArrayList<>(); for (RemoteDeviceTaskList taskList : mRemoteDeviceTaskLists.values()) { RemoteTaskInfo mostRecentTask = taskList.getMostRecentTask(); RemoteTask mostRecentTask = taskList.getMostRecentTask(); if (mostRecentTask != null) { mostRecentTasks.add(mostRecentTask); } Loading services/tests/servicestests/src/com/android/server/companion/datatransfer/continuity/tasks/RemoteDeviceTaskListTest.java +29 −35 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.testing.AndroidTestingRunner; import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo; import org.junit.Test; import org.junit.Before; import org.junit.runner.RunWith; import java.util.Arrays; Loading @@ -36,86 +37,79 @@ import java.util.List; @RunWith(AndroidTestingRunner.class) public class RemoteDeviceTaskListTest { private static final int ASSOCIATION_ID = 123; private static final String DEVICE_NAME = "device1"; private RemoteDeviceTaskList taskList; @Before public void setUp() { taskList = new RemoteDeviceTaskList(ASSOCIATION_ID, DEVICE_NAME); } @Test public void testConstructor_initializesCorrectly() { int associationId = 123; String deviceName = "device1"; RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( associationId, deviceName); assertThat(taskList.getMostRecentTask()).isNull(); assertThat(taskList.getAssociationId()).isEqualTo(associationId); assertThat(taskList.getDeviceName()).isEqualTo(deviceName); assertThat(taskList.getAssociationId()).isEqualTo(ASSOCIATION_ID); assertThat(taskList.getDeviceName()).isEqualTo(DEVICE_NAME); } @Test public void testAddTask_updatesMostRecentTask() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( 0, "device name"); RemoteTaskInfo firstAddedTask = createNewRemoteTaskInfo(2, "task2", 200); taskList.addTask(firstAddedTask); assertThat(taskList.getMostRecentTask()).isEqualTo(firstAddedTask); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstAddedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Add another task with an older timestamp, verify it doesn't update // the most recent task. RemoteTaskInfo secondAddedTask = createNewRemoteTaskInfo(1, "task1", 100); taskList.addTask(secondAddedTask); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(firstAddedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstAddedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Add another task with a newer timestamp, verifying it changes the // most recently used task. RemoteTaskInfo thirdAddedTask = createNewRemoteTaskInfo(3, "task3", 300); taskList.addTask(thirdAddedTask); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(thirdAddedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(thirdAddedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } @Test public void testGetMostRecentTask_noTasks_returnsNull() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( 0, "device name"); assertThat(taskList.getMostRecentTask()).isNull(); } @Test public void testGetMostRecentTask_multipleTasks_returnsMostRecent() { RemoteTaskInfo expectedTask = createNewRemoteTaskInfo(2, "task2", 200); int associationId = 123; List<RemoteTaskInfo> initialTasks = Arrays.asList( createNewRemoteTaskInfo(1, "task1", 100), expectedTask, createNewRemoteTaskInfo(3, "task3", 150)); RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( associationId, "device name"); taskList.setTasks(initialTasks); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(expectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(expectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } @Test public void testSetTasks_updatesMostRecentTask() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList(0, "device name"); // Set tasks initially, verify the most recent task is the first one. RemoteTaskInfo firstExpectedTask = createNewRemoteTaskInfo(1, "task2", 200); int associationId = 123; List<RemoteTaskInfo> initialTasks = Arrays.asList( createNewRemoteTaskInfo(2, "task1", 100), firstExpectedTask, createNewRemoteTaskInfo(3, "task3", 150)); taskList.setTasks(initialTasks); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(firstExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Set the tasks to a different list, verify the most recent task is the // first one. Loading @@ -126,18 +120,17 @@ public class RemoteDeviceTaskListTest { createNewRemoteTaskInfo(5, "task5", 200), createNewRemoteTaskInfo(6, "task6", 100)); taskList.setTasks(secondExpectedTasks); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(secondExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(secondExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } @Test public void testSetTasks_overwritesExistingTasks() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList(0, "device name"); // Set the initial state of the list. RemoteTaskInfo firstExpectedTask = createNewRemoteTaskInfo(1, "task1", 100); taskList.setTasks(Arrays.asList(firstExpectedTask)); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(firstExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Replace the tasks with a different list. The only task in this was used before the // previous task. Loading @@ -145,7 +138,8 @@ public class RemoteDeviceTaskListTest { taskList.setTasks(Arrays.asList(secondExpectedTask)); // Because the task list is overwritten, the most recent task should be the second task. assertThat(taskList.getMostRecentTask().getId()).isEqualTo(secondExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(secondExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } private RemoteTaskInfo createNewRemoteTaskInfo( Loading Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/TaskContinuityManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ public final class TaskContinuityManagerService extends SystemService { private final class TaskContinuityManagerServiceImpl extends ITaskContinuityManager.Stub { @Override public List<RemoteTask> getRemoteTasks() { return new ArrayList<>(); return mRemoteTaskStore.getMostRecentTasks(); } @Override Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/messages/RemoteTaskInfo.java +9 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.companion.datatransfer.continuity.messages; import android.app.TaskInfo; import android.companion.datatransfer.continuity.RemoteTask; import android.util.proto.ProtoInputStream; import android.util.proto.ProtoOutputStream; Loading Loading @@ -95,4 +96,12 @@ public class RemoteTaskInfo { protoOutputStream .writeBytes(android.companion.RemoteTaskInfo.TASK_ICON, mTaskIcon); } public RemoteTask toRemoteTask(int id, String deviceName) { return new RemoteTask.Builder(id) .setLabel(mLabel) .setLastUsedTimestampMillis((int) mLastUsedTimeMillis) .setSourceDeviceName(deviceName) .build(); } } No newline at end of file
services/companion/java/com/android/server/companion/datatransfer/continuity/tasks/RemoteDeviceTaskList.java +5 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.companion.datatransfer.continuity.tasks; import android.companion.datatransfer.continuity.RemoteTask; import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo; import java.util.ArrayList; Loading Loading @@ -71,7 +73,7 @@ class RemoteDeviceTaskList { * Gets the most recently used task on this device, or null if there are no * tasks. */ RemoteTaskInfo getMostRecentTask() { RemoteTask getMostRecentTask() { if (mTasks.isEmpty()) { return null; } Loading @@ -85,6 +87,7 @@ class RemoteDeviceTaskList { mostRecentTask = task; } } return mostRecentTask; return mostRecentTask.toRemoteTask(mAssociationId, mDeviceName); } } No newline at end of file
services/companion/java/com/android/server/companion/datatransfer/continuity/tasks/RemoteTaskStore.java +5 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.util.Slog; import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore; import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo; import android.companion.datatransfer.continuity.RemoteTask; import java.util.ArrayList; import java.util.HashMap; import java.util.List; Loading Loading @@ -70,11 +72,11 @@ public class RemoteTaskStore implements ConnectedAssociationStore.Observer { * @return A list of the most recent tasks from all devices in the task * store. */ public List<RemoteTaskInfo> getMostRecentTasks() { public List<RemoteTask> getMostRecentTasks() { synchronized (mRemoteDeviceTaskLists) { List<RemoteTaskInfo> mostRecentTasks = new ArrayList<>(); List<RemoteTask> mostRecentTasks = new ArrayList<>(); for (RemoteDeviceTaskList taskList : mRemoteDeviceTaskLists.values()) { RemoteTaskInfo mostRecentTask = taskList.getMostRecentTask(); RemoteTask mostRecentTask = taskList.getMostRecentTask(); if (mostRecentTask != null) { mostRecentTasks.add(mostRecentTask); } Loading
services/tests/servicestests/src/com/android/server/companion/datatransfer/continuity/tasks/RemoteDeviceTaskListTest.java +29 −35 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.testing.AndroidTestingRunner; import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskInfo; import org.junit.Test; import org.junit.Before; import org.junit.runner.RunWith; import java.util.Arrays; Loading @@ -36,86 +37,79 @@ import java.util.List; @RunWith(AndroidTestingRunner.class) public class RemoteDeviceTaskListTest { private static final int ASSOCIATION_ID = 123; private static final String DEVICE_NAME = "device1"; private RemoteDeviceTaskList taskList; @Before public void setUp() { taskList = new RemoteDeviceTaskList(ASSOCIATION_ID, DEVICE_NAME); } @Test public void testConstructor_initializesCorrectly() { int associationId = 123; String deviceName = "device1"; RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( associationId, deviceName); assertThat(taskList.getMostRecentTask()).isNull(); assertThat(taskList.getAssociationId()).isEqualTo(associationId); assertThat(taskList.getDeviceName()).isEqualTo(deviceName); assertThat(taskList.getAssociationId()).isEqualTo(ASSOCIATION_ID); assertThat(taskList.getDeviceName()).isEqualTo(DEVICE_NAME); } @Test public void testAddTask_updatesMostRecentTask() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( 0, "device name"); RemoteTaskInfo firstAddedTask = createNewRemoteTaskInfo(2, "task2", 200); taskList.addTask(firstAddedTask); assertThat(taskList.getMostRecentTask()).isEqualTo(firstAddedTask); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstAddedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Add another task with an older timestamp, verify it doesn't update // the most recent task. RemoteTaskInfo secondAddedTask = createNewRemoteTaskInfo(1, "task1", 100); taskList.addTask(secondAddedTask); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(firstAddedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstAddedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Add another task with a newer timestamp, verifying it changes the // most recently used task. RemoteTaskInfo thirdAddedTask = createNewRemoteTaskInfo(3, "task3", 300); taskList.addTask(thirdAddedTask); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(thirdAddedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(thirdAddedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } @Test public void testGetMostRecentTask_noTasks_returnsNull() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( 0, "device name"); assertThat(taskList.getMostRecentTask()).isNull(); } @Test public void testGetMostRecentTask_multipleTasks_returnsMostRecent() { RemoteTaskInfo expectedTask = createNewRemoteTaskInfo(2, "task2", 200); int associationId = 123; List<RemoteTaskInfo> initialTasks = Arrays.asList( createNewRemoteTaskInfo(1, "task1", 100), expectedTask, createNewRemoteTaskInfo(3, "task3", 150)); RemoteDeviceTaskList taskList = new RemoteDeviceTaskList( associationId, "device name"); taskList.setTasks(initialTasks); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(expectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(expectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } @Test public void testSetTasks_updatesMostRecentTask() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList(0, "device name"); // Set tasks initially, verify the most recent task is the first one. RemoteTaskInfo firstExpectedTask = createNewRemoteTaskInfo(1, "task2", 200); int associationId = 123; List<RemoteTaskInfo> initialTasks = Arrays.asList( createNewRemoteTaskInfo(2, "task1", 100), firstExpectedTask, createNewRemoteTaskInfo(3, "task3", 150)); taskList.setTasks(initialTasks); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(firstExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Set the tasks to a different list, verify the most recent task is the // first one. Loading @@ -126,18 +120,17 @@ public class RemoteDeviceTaskListTest { createNewRemoteTaskInfo(5, "task5", 200), createNewRemoteTaskInfo(6, "task6", 100)); taskList.setTasks(secondExpectedTasks); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(secondExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(secondExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } @Test public void testSetTasks_overwritesExistingTasks() { RemoteDeviceTaskList taskList = new RemoteDeviceTaskList(0, "device name"); // Set the initial state of the list. RemoteTaskInfo firstExpectedTask = createNewRemoteTaskInfo(1, "task1", 100); taskList.setTasks(Arrays.asList(firstExpectedTask)); assertThat(taskList.getMostRecentTask().getId()).isEqualTo(firstExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(firstExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); // Replace the tasks with a different list. The only task in this was used before the // previous task. Loading @@ -145,7 +138,8 @@ public class RemoteDeviceTaskListTest { taskList.setTasks(Arrays.asList(secondExpectedTask)); // Because the task list is overwritten, the most recent task should be the second task. assertThat(taskList.getMostRecentTask().getId()).isEqualTo(secondExpectedTask.getId()); assertThat(taskList.getMostRecentTask()) .isEqualTo(secondExpectedTask.toRemoteTask(ASSOCIATION_ID, DEVICE_NAME)); } private RemoteTaskInfo createNewRemoteTaskInfo( Loading