Loading services/companion/java/com/android/server/companion/datatransfer/continuity/TaskContinuityManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ public final class TaskContinuityManagerService extends SystemService { mTaskContinuityMessageReceiver = new TaskContinuityMessageReceiver(context); mRemoteTaskStore = new RemoteTaskStore(mConnectedAssociationStore); mOutboundHandoffRequestController = new OutboundHandoffRequestController(context); mOutboundHandoffRequestController = new OutboundHandoffRequestController( context, mConnectedAssociationStore); mInboundHandoffRequestController = new InboundHandoffRequestController(context); } Loading services/companion/java/com/android/server/companion/datatransfer/continuity/handoff/OutboundHandoffRequestController.java +21 −1 Original line number Diff line number Diff line Loading @@ -17,9 +17,11 @@ package com.android.server.companion.datatransfer.continuity.handoff; import static android.companion.CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY; import static android.companion.datatransfer.continuity.TaskContinuityManager.HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND; import static android.companion.datatransfer.continuity.TaskContinuityManager.HANDOFF_REQUEST_RESULT_FAILURE_NO_DATA_PROVIDED_BY_TASK; import static android.companion.datatransfer.continuity.TaskContinuityManager.HANDOFF_REQUEST_RESULT_SUCCESS; import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestMessage; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestResultMessage; import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage; Loading Loading @@ -51,15 +53,33 @@ public class OutboundHandoffRequestController { private final Context mContext; private final CompanionDeviceManager mCompanionDeviceManager; private final ConnectedAssociationStore mConnectedAssociationStore; private final Map<Integer, Map<Integer, List<IHandoffRequestCallback>>> mPendingCallbacks = new HashMap<>(); public OutboundHandoffRequestController(Context context) { public OutboundHandoffRequestController( Context context, ConnectedAssociationStore connectedAssociationStore) { mContext = context; mCompanionDeviceManager = context.getSystemService(CompanionDeviceManager.class); mConnectedAssociationStore = connectedAssociationStore; } public void requestHandoff(int associationId, int taskId, IHandoffRequestCallback callback) { if (mConnectedAssociationStore.getConnectedAssociationById(associationId) == null) { Slog.w(TAG, "Association " + associationId + " is not connected."); try { callback.onHandoffRequestFinished( associationId, taskId, HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND); } catch (RemoteException e) { Slog.e(TAG, "Failed to notify callback of handoff request result", e); } return; } synchronized (mPendingCallbacks) { if (!mPendingCallbacks.containsKey(associationId)) { mPendingCallbacks.put(associationId, new HashMap<>()); Loading services/tests/servicestests/src/com/android/server/companion/datatransfer/continuity/handoff/OutboundHandoffRequestControllerTest.java +44 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.companion.datatransfer.continuity.handoff; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createAssociationInfo; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createMockContext; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createMockCompanionDeviceManager; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.verifyMessageSent; Loading @@ -25,9 +26,12 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.never; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.doNothing; import static org.mockito.ArgumentMatchers.any; import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestMessage; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestResultMessage; import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage; Loading @@ -37,6 +41,7 @@ import android.app.HandoffActivityData; import android.content.Context; import android.content.ComponentName; import android.content.Intent; import android.companion.AssociationInfo; import android.companion.CompanionDeviceManager; import android.companion.ICompanionDeviceManager; import android.companion.datatransfer.continuity.IHandoffRequestCallback; Loading @@ -47,6 +52,8 @@ import android.os.RemoteException; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.List; Loading @@ -56,14 +63,19 @@ public class OutboundHandoffRequestControllerTest { private Context mContext; private ICompanionDeviceManager mMockCompanionDeviceManagerService; @Mock private ConnectedAssociationStore mMockConnectedAssociationStore; private OutboundHandoffRequestController mOutboundHandoffRequestController; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = createMockContext(); mMockCompanionDeviceManagerService = createMockCompanionDeviceManager(mContext); mOutboundHandoffRequestController = new OutboundHandoffRequestController(mContext); mOutboundHandoffRequestController = new OutboundHandoffRequestController( mContext, mMockConnectedAssociationStore); } @Test Loading @@ -71,6 +83,9 @@ public class OutboundHandoffRequestControllerTest { int associationId = 1; int taskId = 1; HandoffRequestCallbackHolder callbackHolder = new HandoffRequestCallbackHolder(); AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); // Request a handoff to a device. mOutboundHandoffRequestController.requestHandoff( Loading Loading @@ -125,10 +140,32 @@ public class OutboundHandoffRequestControllerTest { TaskContinuityManager.HANDOFF_REQUEST_RESULT_SUCCESS); } @Test public void testRequestHandoff_associationNotConnected_returnsFailure() { int associationId = 1; int taskId = 1; HandoffRequestCallbackHolder callbackHolder = new HandoffRequestCallbackHolder(); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(null); mOutboundHandoffRequestController.requestHandoff( associationId, taskId, callbackHolder.callback); // Verify the callback was invoked. callbackHolder.verifyInvoked( associationId, taskId, TaskContinuityManager.HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND); } @Test public void testRequestHandoff_multipleTimes_onlySendsOneMessage() throws Exception { int associationId = 1; int taskId = 1; AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); // Request handoff multiple times. HandoffRequestCallbackHolder firstCallback = new HandoffRequestCallbackHolder(); Loading @@ -155,6 +192,9 @@ public class OutboundHandoffRequestControllerTest { // Request a handoff int associationId = 1; int taskId = 1; AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); HandoffRequestCallbackHolder callback = new HandoffRequestCallbackHolder(); mOutboundHandoffRequestController.requestHandoff( associationId, Loading Loading @@ -183,6 +223,9 @@ public class OutboundHandoffRequestControllerTest { // Request a handoff int associationId = 1; int taskId = 1; AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); HandoffRequestCallbackHolder callback = new HandoffRequestCallbackHolder(); mOutboundHandoffRequestController.requestHandoff( associationId, Loading Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/TaskContinuityManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ public final class TaskContinuityManagerService extends SystemService { mTaskContinuityMessageReceiver = new TaskContinuityMessageReceiver(context); mRemoteTaskStore = new RemoteTaskStore(mConnectedAssociationStore); mOutboundHandoffRequestController = new OutboundHandoffRequestController(context); mOutboundHandoffRequestController = new OutboundHandoffRequestController( context, mConnectedAssociationStore); mInboundHandoffRequestController = new InboundHandoffRequestController(context); } Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/handoff/OutboundHandoffRequestController.java +21 −1 Original line number Diff line number Diff line Loading @@ -17,9 +17,11 @@ package com.android.server.companion.datatransfer.continuity.handoff; import static android.companion.CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY; import static android.companion.datatransfer.continuity.TaskContinuityManager.HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND; import static android.companion.datatransfer.continuity.TaskContinuityManager.HANDOFF_REQUEST_RESULT_FAILURE_NO_DATA_PROVIDED_BY_TASK; import static android.companion.datatransfer.continuity.TaskContinuityManager.HANDOFF_REQUEST_RESULT_SUCCESS; import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestMessage; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestResultMessage; import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage; Loading Loading @@ -51,15 +53,33 @@ public class OutboundHandoffRequestController { private final Context mContext; private final CompanionDeviceManager mCompanionDeviceManager; private final ConnectedAssociationStore mConnectedAssociationStore; private final Map<Integer, Map<Integer, List<IHandoffRequestCallback>>> mPendingCallbacks = new HashMap<>(); public OutboundHandoffRequestController(Context context) { public OutboundHandoffRequestController( Context context, ConnectedAssociationStore connectedAssociationStore) { mContext = context; mCompanionDeviceManager = context.getSystemService(CompanionDeviceManager.class); mConnectedAssociationStore = connectedAssociationStore; } public void requestHandoff(int associationId, int taskId, IHandoffRequestCallback callback) { if (mConnectedAssociationStore.getConnectedAssociationById(associationId) == null) { Slog.w(TAG, "Association " + associationId + " is not connected."); try { callback.onHandoffRequestFinished( associationId, taskId, HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND); } catch (RemoteException e) { Slog.e(TAG, "Failed to notify callback of handoff request result", e); } return; } synchronized (mPendingCallbacks) { if (!mPendingCallbacks.containsKey(associationId)) { mPendingCallbacks.put(associationId, new HashMap<>()); Loading
services/tests/servicestests/src/com/android/server/companion/datatransfer/continuity/handoff/OutboundHandoffRequestControllerTest.java +44 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.companion.datatransfer.continuity.handoff; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createAssociationInfo; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createMockContext; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createMockCompanionDeviceManager; import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.verifyMessageSent; Loading @@ -25,9 +26,12 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.never; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.doNothing; import static org.mockito.ArgumentMatchers.any; import com.android.server.companion.datatransfer.continuity.connectivity.ConnectedAssociationStore; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestMessage; import com.android.server.companion.datatransfer.continuity.messages.HandoffRequestResultMessage; import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage; Loading @@ -37,6 +41,7 @@ import android.app.HandoffActivityData; import android.content.Context; import android.content.ComponentName; import android.content.Intent; import android.companion.AssociationInfo; import android.companion.CompanionDeviceManager; import android.companion.ICompanionDeviceManager; import android.companion.datatransfer.continuity.IHandoffRequestCallback; Loading @@ -47,6 +52,8 @@ import android.os.RemoteException; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.List; Loading @@ -56,14 +63,19 @@ public class OutboundHandoffRequestControllerTest { private Context mContext; private ICompanionDeviceManager mMockCompanionDeviceManagerService; @Mock private ConnectedAssociationStore mMockConnectedAssociationStore; private OutboundHandoffRequestController mOutboundHandoffRequestController; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = createMockContext(); mMockCompanionDeviceManagerService = createMockCompanionDeviceManager(mContext); mOutboundHandoffRequestController = new OutboundHandoffRequestController(mContext); mOutboundHandoffRequestController = new OutboundHandoffRequestController( mContext, mMockConnectedAssociationStore); } @Test Loading @@ -71,6 +83,9 @@ public class OutboundHandoffRequestControllerTest { int associationId = 1; int taskId = 1; HandoffRequestCallbackHolder callbackHolder = new HandoffRequestCallbackHolder(); AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); // Request a handoff to a device. mOutboundHandoffRequestController.requestHandoff( Loading Loading @@ -125,10 +140,32 @@ public class OutboundHandoffRequestControllerTest { TaskContinuityManager.HANDOFF_REQUEST_RESULT_SUCCESS); } @Test public void testRequestHandoff_associationNotConnected_returnsFailure() { int associationId = 1; int taskId = 1; HandoffRequestCallbackHolder callbackHolder = new HandoffRequestCallbackHolder(); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(null); mOutboundHandoffRequestController.requestHandoff( associationId, taskId, callbackHolder.callback); // Verify the callback was invoked. callbackHolder.verifyInvoked( associationId, taskId, TaskContinuityManager.HANDOFF_REQUEST_RESULT_FAILURE_DEVICE_NOT_FOUND); } @Test public void testRequestHandoff_multipleTimes_onlySendsOneMessage() throws Exception { int associationId = 1; int taskId = 1; AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); // Request handoff multiple times. HandoffRequestCallbackHolder firstCallback = new HandoffRequestCallbackHolder(); Loading @@ -155,6 +192,9 @@ public class OutboundHandoffRequestControllerTest { // Request a handoff int associationId = 1; int taskId = 1; AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); HandoffRequestCallbackHolder callback = new HandoffRequestCallbackHolder(); mOutboundHandoffRequestController.requestHandoff( associationId, Loading Loading @@ -183,6 +223,9 @@ public class OutboundHandoffRequestControllerTest { // Request a handoff int associationId = 1; int taskId = 1; AssociationInfo mockAssociationInfo = createAssociationInfo(associationId, "device"); when(mMockConnectedAssociationStore.getConnectedAssociationById(associationId)) .thenReturn(mockAssociationInfo); HandoffRequestCallbackHolder callback = new HandoffRequestCallbackHolder(); mOutboundHandoffRequestController.requestHandoff( associationId, Loading