Added send satellite datagram.
Bug: 260896985
Test: atest SatelliteManagerTest
Change-Id: I6bba46e78b73c7b0e2e38ab719e9d4fe6895dd59
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 26eb8c2..d54fff0 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -405,6 +405,8 @@
private static final int EVENT_GET_SATELLITE_CAPABILITIES_DONE = 136;
private static final int CMD_POLL_PENDING_SATELLITE_DATAGRAMS = 137;
private static final int EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE = 138;
+ private static final int CMD_SEND_SATELLITE_DATAGRAM = 139;
+ private static final int EVENT_SEND_SATELLITE_DATAGRAM_DONE = 140;
// Parameters of select command.
private static final int SELECT_COMMAND = 0xA4;
@@ -575,6 +577,19 @@
}
}
+ private static final class SendSatelliteDatagramArgument {
+ public @SatelliteManager.DatagramType int datagramType;
+ public @NonNull SatelliteDatagram datagram;
+ public @NonNull Consumer<Integer> callback;
+
+ SendSatelliteDatagramArgument(@SatelliteManager.DatagramType int datagramType,
+ SatelliteDatagram datagram, Consumer<Integer> callback) {
+ this.datagramType = datagramType;
+ this.datagram = datagram;
+ this.callback = callback;
+ }
+ }
+
private static final class SatellitePositionUpdateHandler extends Handler {
public static final int EVENT_POSITION_UPDATE = 1;
public static final int EVENT_MESSAGE_TRANSFER_STATE_UPDATE = 2;
@@ -2818,6 +2833,34 @@
break;
}
+ case CMD_SEND_SATELLITE_DATAGRAM: {
+ request = (MainThreadRequest) msg.obj;
+ onCompleted =
+ obtainMessage(EVENT_SEND_SATELLITE_DATAGRAM_DONE, request);
+ Phone phone = getPhoneFromRequest(request);
+ SendSatelliteDatagramArgument argument =
+ (SendSatelliteDatagramArgument) request.argument;
+ if (phone != null) {
+ phone.sendSatelliteDatagram(onCompleted, argument.datagram);
+ } else {
+ loge("sendSatelliteDatagram: No phone object");
+ argument.callback
+ .accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
+ }
+ break;
+ }
+
+ case EVENT_SEND_SATELLITE_DATAGRAM_DONE: {
+ ar = (AsyncResult) msg.obj;
+ request = (MainThreadRequest) ar.userObj;
+ int error = getSatelliteError(ar, "sendSatelliteDatagram",
+ false);
+ SendSatelliteDatagramArgument argument =
+ (SendSatelliteDatagramArgument) request.argument;
+ argument.callback.accept(error);
+ break;
+ }
+
default:
Log.w(LOG_TAG, "MainThreadHandler: unexpected message code: " + msg.what);
break;
@@ -13228,6 +13271,39 @@
return result;
}
+ /**
+ * Send datagram over satellite.
+ * @param subId - The subId of the subscription used to send datagram
+ * @param datagramType - type of datagram
+ * @param datagram - datagram to send over satellite
+ * @param callback - The callback that will be used to send result of the operation.
+ * @throws SecurityException if the caller doesn't have the required permission.
+ */
+ @Override
+ public void sendSatelliteDatagram(int subId, @SatelliteManager.DatagramType int datagramType,
+ SatelliteDatagram datagram, IIntegerConsumer callback) {
+ enforceSatelliteCommunicationPermission("sendSatelliteDatagram");
+ Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
+
+ final int validSubId = getValidSatelliteSubId(subId);
+ if (!isSatelliteProvisioned(validSubId)) {
+ result.accept(SatelliteManager.SATELLITE_SERVICE_NOT_PROVISIONED);
+ return;
+ }
+
+ Phone phone = getPhoneOrDefault(validSubId, "sendSatelliteDatagram");
+ if (phone == null) {
+ result.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
+ return;
+ }
+
+ // check if we need to start PointingUI.
+
+ sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM,
+ new SendSatelliteDatagramArgument(datagramType, datagram, result),
+ phone, null);
+ }
+
private void handleCmdProvisionSatelliteService(@NonNull ProvisionSatelliteServiceArgument arg,
@NonNull Phone phone, Message onCompleted) {
if (!mSatelliteProvisionCallbacks.containsKey(arg.subId)) {