Snap for 12583712 from 50efe29e9aaa00707007e3b6ae0609db500c7f1a to mainline-wifi-release Change-Id: If92ae50530cca2f9a1fd8f52239b937ee3f4f4fd
diff --git a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java index 72c2db0..d2d13f0 100644 --- a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java +++ b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java
@@ -61,6 +61,7 @@ import java.lang.reflect.Method; import java.time.Duration; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -99,6 +100,10 @@ sSatelliteTransmissionUpdateCallbackWrapperMap = new ConcurrentHashMap<>(); private static final ConcurrentHashMap< + SatelliteTransmissionUpdateCallbackWrapper2, SatelliteTransmissionUpdateCallback> + sSatelliteTransmissionUpdateCallbackWrapperMap2 = new ConcurrentHashMap<>(); + + private static final ConcurrentHashMap< NtnSignalStrengthCallbackWrapper, NtnSignalStrengthCallback> sNtnSignalStrengthCallbackWrapperMap = new ConcurrentHashMap<>(); @@ -170,6 +175,12 @@ * Datagram type indicating that the message to be sent or received is of type SMS. */ public static final int DATAGRAM_TYPE_SMS = 6; + /** + * Datagram type indicating that the message to be sent is an SMS checking + * for pending incoming SMS. + * @hide + */ + public static final int DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS = 7; /** @hide */ @IntDef( @@ -181,7 +192,8 @@ DATAGRAM_TYPE_KEEP_ALIVE, DATAGRAM_TYPE_LAST_SOS_MESSAGE_STILL_NEED_HELP, DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED, - DATAGRAM_TYPE_SMS + DATAGRAM_TYPE_SMS, + DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS }) @Retention(RetentionPolicy.SOURCE) public @interface DatagramType {} @@ -706,6 +718,66 @@ } /** + * Start receiving satellite transmission updates. This can be called by the pointing UI when the + * user starts pointing to the satellite. Modem should continue to report the pointing input as + * the device or satellite moves. Satellite transmission updates are started only on {@link + * #SATELLITE_RESULT_SUCCESS}. All other results indicate that this operation failed. + * Once satellite transmission updates begin, position and datagram transfer state updates + * will be sent through {@link SatelliteTransmissionUpdateCallback}. + */ + public void startTransmissionUpdates2( + @NonNull @CallbackExecutor Executor executor, + @SatelliteResult @NonNull Consumer<Integer> resultListener, + @NonNull SatelliteTransmissionUpdateCallbackWrapper2 callback) { + + SatelliteTransmissionUpdateCallback internalCallback = + new SatelliteTransmissionUpdateCallback() { + + @Override + public void onSendDatagramStateChanged( + @SatelliteDatagramTransferState int state, + int sendPendingCount, + @SatelliteResult int errorCode) { + callback.onSendDatagramStateChanged(state, sendPendingCount, errorCode); + } + + @Override + public void onSendDatagramStateChanged( + @SatelliteManager.DatagramType int datagramType, + @SatelliteDatagramTransferState int state, + int sendPendingCount, + @SatelliteResult int errorCode) { + callback.onSendDatagramStateChanged( + datagramType, state, sendPendingCount, errorCode); + } + + @Override + public void onReceiveDatagramStateChanged( + @SatelliteDatagramTransferState int state, + int receivePendingCount, + @SatelliteResult int errorCode) { + callback.onReceiveDatagramStateChanged(state, receivePendingCount, errorCode); + } + + @Override + public void onSatellitePositionChanged(@NonNull PointingInfo pointingInfo) { + callback.onSatellitePositionChanged( + new PointingInfoWrapper( + pointingInfo.getSatelliteAzimuthDegrees(), + pointingInfo.getSatelliteElevationDegrees())); + } + + @Override + public void onSendDatagramRequested(@SatelliteManager.DatagramType int datagramType) { + callback.onSendDatagramRequested(datagramType); + } + }; + sSatelliteTransmissionUpdateCallbackWrapperMap2.put(callback, internalCallback); + + mSatelliteManager.startTransmissionUpdates(executor, resultListener, internalCallback); + } + + /** * Stop receiving satellite transmission updates. This can be called by the pointing UI when the * user stops pointing to the satellite. Satellite transmission updates are stopped and the * callback is unregistered only on {@link #SATELLITE_RESULT_SUCCESS}. All other results that this @@ -716,7 +788,7 @@ @NonNull @CallbackExecutor Executor executor, @SatelliteResult @NonNull Consumer<Integer> resultListener) { SatelliteTransmissionUpdateCallback internalCallback = - sSatelliteTransmissionUpdateCallbackWrapperMap.get(callback); + sSatelliteTransmissionUpdateCallbackWrapperMap.remove(callback); if (internalCallback != null) { mSatelliteManager.stopTransmissionUpdates( internalCallback, executor, resultListener); @@ -724,6 +796,24 @@ } /** + * Stop receiving satellite transmission updates. This can be called by the pointing UI when the + * user stops pointing to the satellite. Satellite transmission updates are stopped and the + * callback is unregistered only on {@link #SATELLITE_RESULT_SUCCESS}. All other results that this + * operation failed. + */ + public void stopTransmissionUpdates2( + @NonNull SatelliteTransmissionUpdateCallbackWrapper2 callback, + @NonNull @CallbackExecutor Executor executor, + @SatelliteResult @NonNull Consumer<Integer> resultListener) { + SatelliteTransmissionUpdateCallback internalCallback = + sSatelliteTransmissionUpdateCallbackWrapperMap2.remove(callback); + if (internalCallback != null) { + mSatelliteManager.stopTransmissionUpdates( + internalCallback, executor, resultListener); + } + } + + /** * Provision the device with a satellite provider. This is needed if the provider allows dynamic * registration. */ @@ -782,7 +872,7 @@ public void unregisterForProvisionStateChanged( @NonNull SatelliteProvisionStateCallbackWrapper callback) { SatelliteProvisionStateCallback internalCallback = - sSatelliteProvisionStateCallbackWrapperMap.get(callback); + sSatelliteProvisionStateCallbackWrapperMap.remove(callback); if (internalCallback != null) { mSatelliteManager.unregisterForProvisionStateChanged(internalCallback); } @@ -839,6 +929,14 @@ public void onEmergencyModeChanged(boolean isEmergency) { callback.onEmergencyModeChanged(isEmergency); } + + public void onRegistrationFailure(int causeCode) { + callback.onRegistrationFailure(causeCode); + } + + public void onTerrestrialNetworkAvailableChanged(boolean isAvailable) { + callback.onTerrestrialNetworkAvailableChanged(isAvailable); + } }; sSatelliteModemStateCallbackWrapperMap2.put(callback, internalCallback); @@ -853,7 +951,7 @@ */ public void unregisterForModemStateChanged( @NonNull SatelliteModemStateCallbackWrapper callback) { - SatelliteModemStateCallback internalCallback = sSatelliteModemStateCallbackWrapperMap.get( + SatelliteModemStateCallback internalCallback = sSatelliteModemStateCallbackWrapperMap.remove( callback); if (internalCallback != null) { mSatelliteManager.unregisterForModemStateChanged(internalCallback); @@ -866,7 +964,7 @@ */ public void unregisterForModemStateChanged( @NonNull SatelliteModemStateCallbackWrapper2 callback) { - SatelliteModemStateCallback internalCallback = sSatelliteModemStateCallbackWrapperMap2.get( + SatelliteModemStateCallback internalCallback = sSatelliteModemStateCallbackWrapperMap2.remove( callback); if (internalCallback != null) { mSatelliteManager.unregisterForModemStateChanged(internalCallback); @@ -903,7 +1001,8 @@ * before, the request will be ignored. */ public void unregisterForIncomingDatagram(@NonNull SatelliteDatagramCallbackWrapper callback) { - SatelliteDatagramCallback internalCallback = sSatelliteDatagramCallbackWrapperMap.get(callback); + SatelliteDatagramCallback internalCallback = + sSatelliteDatagramCallbackWrapperMap.remove(callback); if (internalCallback != null) { mSatelliteManager.unregisterForIncomingDatagram(internalCallback); } @@ -942,6 +1041,13 @@ mListenerWrapper2.onCarrierRoamingNtnEligibleStateChanged(eligible); } } + + @Override + public void onCarrierRoamingNtnAvailableServicesChanged( + @NetworkRegistrationInfo.ServiceType List<Integer> availableServices) { + logd("onCarrierRoamingNtnAvailableServicesChanged: availableServices=" + + availableServices.stream().map(String::valueOf).collect(Collectors.joining(", "))); + } } /** Register for carrier roaming non-terrestrial network mode changes. */ @@ -972,7 +1078,7 @@ @NonNull CarrierRoamingNtnModeListenerWrapper listener) { logd("unregisterForCarrierRoamingNtnModeChanged: subId=" + subId); CarrierRoamingNtnModeListener internalListener = - sCarrierRoamingNtnModeListenerWrapperMap.get(listener); + sCarrierRoamingNtnModeListenerWrapperMap.remove(listener); if (internalListener != null) { TelephonyManager tm = mTelephonyManager.createForSubscriptionId(subId); tm.unregisterTelephonyCallback(internalListener); @@ -984,7 +1090,7 @@ @NonNull CarrierRoamingNtnModeListenerWrapper2 listener) { logd("unregisterForCarrierRoamingNtnModeChanged: subId=" + subId); CarrierRoamingNtnModeListener internalListener = - sCarrierRoamingNtnModeListenerWrapperMap.get(listener); + sCarrierRoamingNtnModeListenerWrapperMap.remove(listener); if (internalListener != null) { TelephonyManager tm = mTelephonyManager.createForSubscriptionId(subId); tm.unregisterTelephonyCallback(internalListener); @@ -1129,7 +1235,8 @@ @FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG) public void unregisterForNtnSignalStrengthChanged( @NonNull NtnSignalStrengthCallbackWrapper callback) { - NtnSignalStrengthCallback internalCallback = sNtnSignalStrengthCallbackWrapperMap.get(callback); + NtnSignalStrengthCallback internalCallback = + sNtnSignalStrengthCallbackWrapperMap.remove(callback); if (internalCallback != null) { try { mSatelliteManager.unregisterForNtnSignalStrengthChanged(internalCallback); @@ -1194,7 +1301,7 @@ public void unregisterForCapabilitiesChanged( @NonNull SatelliteCapabilitiesCallbackWrapper callback) { SatelliteCapabilitiesCallback internalCallback = - sSatelliteCapabilitiesCallbackWrapperMap.get(callback); + sSatelliteCapabilitiesCallbackWrapperMap.remove(callback); if (internalCallback != null) { mSatelliteManager.unregisterForCapabilitiesChanged(internalCallback); } @@ -1471,7 +1578,7 @@ public void unregisterForSupportedStateChanged( @NonNull SatelliteSupportedStateCallbackWrapper callback) { SatelliteSupportedStateCallback internalCallback = - sSatelliteSupportedStateCallbackWrapperMap.get(callback); + sSatelliteSupportedStateCallbackWrapperMap.remove(callback); if (internalCallback != null) { mSatelliteManager.unregisterForSupportedStateChanged(internalCallback); } @@ -1502,7 +1609,7 @@ public void unregisterForCommunicationAllowedStateChanged( @NonNull SatelliteCommunicationAllowedStateCallbackWrapper callback) { SatelliteCommunicationAllowedStateCallback internalCallback = - sSatelliteCommunicationAllowedStateCallbackWrapperMap.get(callback); + sSatelliteCommunicationAllowedStateCallbackWrapperMap.remove(callback); if (internalCallback != null) { mSatelliteManager.unregisterForCommunicationAllowedStateChanged(internalCallback); } @@ -1629,6 +1736,38 @@ } } + /** + * Deliver the list of deprovisioned satellite subscriber ids. + * + * @param list List of deprovisioned SatelliteSubscriberInfo. + * @param executor The executor on which the callback will be called. + * @param callback The callback object to which the result will be delivered. + */ + @FlaggedApi(Flags.FLAG_CARRIER_ROAMING_NB_IOT_NTN) + public void deprovisionSatellite(@NonNull List<SatelliteSubscriberInfoWrapper> list, + @NonNull @CallbackExecutor Executor executor, + @NonNull OutcomeReceiver<Boolean, SatelliteExceptionWrapper> callback) { + OutcomeReceiver internalCallback = + new OutcomeReceiver<Boolean, SatelliteException>() { + @Override + public void onResult(Boolean result) { + callback.onResult(result); + } + + @Override + public void onError(SatelliteException exception) { + callback.onError(new SatelliteExceptionWrapper(exception.getErrorCode())); + } + }; + mSatelliteManager.deprovisionSatellite(list.stream() + .map(info -> new SatelliteSubscriberInfo.Builder() + .setSubscriberId(info.getSubscriberId()) + .setCarrierId(info.getCarrierId()).setNiddApn(info.getNiddApn()) + .setSubId(info.getSubId()).setSubscriberIdType(info.getSubscriberIdType()) + .build()) + .collect(Collectors.toList()), executor, internalCallback); + } + @Nullable private ServiceState getServiceStateForSubscriptionId(int subId) { if (!mSubscriptionManager.isValidSubscriptionId(subId)) {
diff --git a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteModemStateCallbackWrapper2.java b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteModemStateCallbackWrapper2.java index b23d3ec..ea01f8b 100644 --- a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteModemStateCallbackWrapper2.java +++ b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteModemStateCallbackWrapper2.java
@@ -32,4 +32,19 @@ * @param isEmergency {@code true} enabled for emergency mode, {@code false} otherwise. */ default void onEmergencyModeChanged(boolean isEmergency) {}; + + /** + * Indicates that the satellite registration failed with following failure code + * + * @param causeCode the primary failure cause code of the procedure. + * For LTE (EMM), cause codes are TS 24.301 Sec 9.9.3.9 + */ + default void onRegistrationFailure(int causeCode) {}; + + /** + * Indicates that the background search for terrestrial network is finished with result + * + * @param isAvailable True means there's terrestrial network and false means there's not. + */ + default void onTerrestrialNetworkAvailableChanged(boolean isAvailable) {}; }
diff --git a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteTransmissionUpdateCallbackWrapper2.java b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteTransmissionUpdateCallbackWrapper2.java new file mode 100644 index 0000000..a02edcb --- /dev/null +++ b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteTransmissionUpdateCallbackWrapper2.java
@@ -0,0 +1,77 @@ +/* + * Copyright (C) 2024 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 android.telephony.satellite.wrapper; + +import android.annotation.NonNull; + +/** + * A callback class for monitoring satellite position update and datagram transfer state change + * events. + */ +public interface SatelliteTransmissionUpdateCallbackWrapper2 { + /** + * Called when the satellite position changed. + * + * @param pointingInfo The pointing info containing the satellite location. + */ + default void onSatellitePositionChanged(@NonNull PointingInfoWrapper pointingInfo) {} + + /** + * Called when satellite datagram send state changed. + * + * @param state The new send datagram transfer state. + * @param sendPendingCount The number of datagrams that are currently being sent. + * @param errorCode If datagram transfer failed, the reason for failure. + */ + default void onSendDatagramStateChanged( + @SatelliteManagerWrapper.SatelliteDatagramTransferState int state, + int sendPendingCount, + @SatelliteManagerWrapper.SatelliteResult int errorCode) {} + + /** + * Called when satellite datagram send state changed. + * + * @param datagramType The datagram type of currently being sent. + * @param state The new send datagram transfer state. + * @param sendPendingCount The number of datagrams that are currently being sent. + * @param errorCode If datagram transfer failed, the reason for failure. + * + * @hide + */ + default void onSendDatagramStateChanged(@SatelliteManagerWrapper.DatagramType int datagramType, + @SatelliteManagerWrapper.SatelliteDatagramTransferState int state, int sendPendingCount, + @SatelliteManagerWrapper.SatelliteResult int errorCode) {} + + /** + * Called when satellite datagram receive state changed. + * + * @param state The new receive datagram transfer state. + * @param receivePendingCount The number of datagrams that are currently pending to be received. + * @param errorCode If datagram transfer failed, the reason for failure. + */ + default void onReceiveDatagramStateChanged( + @SatelliteManagerWrapper.SatelliteDatagramTransferState int state, + int receivePendingCount, + @SatelliteManagerWrapper.SatelliteResult int errorCode) {} + + /** + * Called when framework receives a request to send a datagram. + * + * @param datagramType The type of the requested datagram. + */ + default void onSendDatagramRequested(@SatelliteManagerWrapper.DatagramType int datagramType) {} +}