Loading core/proto/android/companion/task_continuity_message.proto +7 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ message TaskContinuityMessage { RemoteTaskRemovedMessage remote_task_removed = 3; HandoffRequestMessage handoff_request = 4; RemoteTaskUpdatedMessage remote_task_updated = 5; HandoffRequestResultMessage handoff_request_result = 6; } } Loading Loading @@ -59,6 +60,12 @@ message RemoteTaskRemovedMessage { int32 taskId = 1; } message HandoffRequestResultMessage { int32 statusCode = 1; int32 taskId = 2; repeated HandoffActivityData activities = 3; } message HandoffActivityData { string componentName = 1; string fallbackUri = 2; Loading services/companion/java/com/android/server/companion/datatransfer/continuity/TaskBroadcaster.java +9 −4 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskI import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage; import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; Loading Loading @@ -190,10 +191,14 @@ class TaskBroadcaster .setData(data) .build(); try { mCompanionDeviceManager.sendMessage( CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY, message.toBytes(), new int[] {associationId}); } catch (IOException e) { Slog.e(TAG, "Failed to send message to device " + associationId, e); } } private void sendMessageToAllConnectedAssociations( Loading services/companion/java/com/android/server/companion/datatransfer/continuity/messages/ContinuityDeviceConnected.java +1 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ public class ContinuityDeviceConnected implements TaskContinuityMessageData { * Writes this object to a proto output stream. */ @Override public void writeToProto(ProtoOutputStream pos) { public void writeToProto(ProtoOutputStream pos) throws IOException { pos.writeInt32( android.companion.ContinuityDeviceConnected.CURRENT_FOREGROUND_TASK_ID, mCurrentForegroundTaskId); Loading services/companion/java/com/android/server/companion/datatransfer/continuity/messages/HandoffRequestResultMessage.java 0 → 100644 +83 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.companion.datatransfer.continuity.messages; import android.app.HandoffActivityData; import android.util.proto.ProtoInputStream; import android.util.proto.ProtoOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Deserialized version of the HandoffRequestResultMessage proto. * Contains a status code and a list of activities for handoff. */ public record HandoffRequestResultMessage( int taskId, int statusCode, List<HandoffActivityData> activities) implements TaskContinuityMessageData { public static HandoffRequestResultMessage readFromProto( ProtoInputStream pis) throws IOException { int statusCode = 0; int taskId = 0; List<HandoffActivityData> activities = new ArrayList<>(); while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { switch (pis.getFieldNumber()) { case (int) android.companion.HandoffRequestResultMessage.STATUS_CODE: statusCode = pis.readInt( android.companion.HandoffRequestResultMessage.STATUS_CODE); break; case (int) android.companion.HandoffRequestResultMessage.TASK_ID: taskId = pis.readInt(android.companion.HandoffRequestResultMessage.TASK_ID); break; case (int) android.companion.HandoffRequestResultMessage.ACTIVITIES: long token = pis.start( android.companion.HandoffRequestResultMessage.ACTIVITIES); HandoffActivityData activityData = HandoffActivityDataSerializer.readFromProto(pis); activities.add(activityData); pis.end(token); break; } } return new HandoffRequestResultMessage(taskId, statusCode, activities); } @Override public long getFieldNumber() { return android.companion.TaskContinuityMessage.HANDOFF_REQUEST_RESULT; } @Override public void writeToProto(ProtoOutputStream pos) throws IOException { pos.write(android.companion.HandoffRequestResultMessage.STATUS_CODE, statusCode); pos.write(android.companion.HandoffRequestResultMessage.TASK_ID, taskId); for (android.app.HandoffActivityData activity : activities) { long token = pos.start(android.companion.HandoffRequestResultMessage.ACTIVITIES); HandoffActivityDataSerializer.writeToProto(activity, pos); pos.end(token); } } } No newline at end of file services/companion/java/com/android/server/companion/datatransfer/continuity/messages/RemoteTaskAddedMessage.java +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ public class RemoteTaskAddedMessage implements TaskContinuityMessageData { } @Override public void writeToProto(ProtoOutputStream pos) { public void writeToProto(ProtoOutputStream pos) throws IOException { long taskToken = pos.start( android.companion.RemoteTaskAddedMessage.TASK); Loading Loading
core/proto/android/companion/task_continuity_message.proto +7 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ message TaskContinuityMessage { RemoteTaskRemovedMessage remote_task_removed = 3; HandoffRequestMessage handoff_request = 4; RemoteTaskUpdatedMessage remote_task_updated = 5; HandoffRequestResultMessage handoff_request_result = 6; } } Loading Loading @@ -59,6 +60,12 @@ message RemoteTaskRemovedMessage { int32 taskId = 1; } message HandoffRequestResultMessage { int32 statusCode = 1; int32 taskId = 2; repeated HandoffActivityData activities = 3; } message HandoffActivityData { string componentName = 1; string fallbackUri = 2; Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/TaskBroadcaster.java +9 −4 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskI import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessage; import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; Loading Loading @@ -190,10 +191,14 @@ class TaskBroadcaster .setData(data) .build(); try { mCompanionDeviceManager.sendMessage( CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY, message.toBytes(), new int[] {associationId}); } catch (IOException e) { Slog.e(TAG, "Failed to send message to device " + associationId, e); } } private void sendMessageToAllConnectedAssociations( Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/messages/ContinuityDeviceConnected.java +1 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ public class ContinuityDeviceConnected implements TaskContinuityMessageData { * Writes this object to a proto output stream. */ @Override public void writeToProto(ProtoOutputStream pos) { public void writeToProto(ProtoOutputStream pos) throws IOException { pos.writeInt32( android.companion.ContinuityDeviceConnected.CURRENT_FOREGROUND_TASK_ID, mCurrentForegroundTaskId); Loading
services/companion/java/com/android/server/companion/datatransfer/continuity/messages/HandoffRequestResultMessage.java 0 → 100644 +83 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.companion.datatransfer.continuity.messages; import android.app.HandoffActivityData; import android.util.proto.ProtoInputStream; import android.util.proto.ProtoOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Deserialized version of the HandoffRequestResultMessage proto. * Contains a status code and a list of activities for handoff. */ public record HandoffRequestResultMessage( int taskId, int statusCode, List<HandoffActivityData> activities) implements TaskContinuityMessageData { public static HandoffRequestResultMessage readFromProto( ProtoInputStream pis) throws IOException { int statusCode = 0; int taskId = 0; List<HandoffActivityData> activities = new ArrayList<>(); while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { switch (pis.getFieldNumber()) { case (int) android.companion.HandoffRequestResultMessage.STATUS_CODE: statusCode = pis.readInt( android.companion.HandoffRequestResultMessage.STATUS_CODE); break; case (int) android.companion.HandoffRequestResultMessage.TASK_ID: taskId = pis.readInt(android.companion.HandoffRequestResultMessage.TASK_ID); break; case (int) android.companion.HandoffRequestResultMessage.ACTIVITIES: long token = pis.start( android.companion.HandoffRequestResultMessage.ACTIVITIES); HandoffActivityData activityData = HandoffActivityDataSerializer.readFromProto(pis); activities.add(activityData); pis.end(token); break; } } return new HandoffRequestResultMessage(taskId, statusCode, activities); } @Override public long getFieldNumber() { return android.companion.TaskContinuityMessage.HANDOFF_REQUEST_RESULT; } @Override public void writeToProto(ProtoOutputStream pos) throws IOException { pos.write(android.companion.HandoffRequestResultMessage.STATUS_CODE, statusCode); pos.write(android.companion.HandoffRequestResultMessage.TASK_ID, taskId); for (android.app.HandoffActivityData activity : activities) { long token = pos.start(android.companion.HandoffRequestResultMessage.ACTIVITIES); HandoffActivityDataSerializer.writeToProto(activity, pos); pos.end(token); } } } No newline at end of file
services/companion/java/com/android/server/companion/datatransfer/continuity/messages/RemoteTaskAddedMessage.java +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ public class RemoteTaskAddedMessage implements TaskContinuityMessageData { } @Override public void writeToProto(ProtoOutputStream pos) { public void writeToProto(ProtoOutputStream pos) throws IOException { long taskToken = pos.start( android.companion.RemoteTaskAddedMessage.TASK); Loading