diff --git a/core/api/system-current.txt b/core/api/system-current.txt index b22884f4dcb40..b18584becbb23 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -17178,6 +17178,154 @@ package android.telephony.mbms.vendor { } +package android.telephony.satellite { + + public final class AntennaDirection implements android.os.Parcelable { + method public int describeContents(); + method public float getX(); + method public float getY(); + method public float getZ(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + + public final class AntennaPosition implements android.os.Parcelable { + method public int describeContents(); + method @NonNull public android.telephony.satellite.AntennaDirection getAntennaDirection(); + method public int getSuggestedHoldPosition(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + + public final class PointingInfo implements android.os.Parcelable { + method public int describeContents(); + method public float getSatelliteAzimuthDegrees(); + method public float getSatelliteElevationDegrees(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + + public final class SatelliteCapabilities implements android.os.Parcelable { + method public int describeContents(); + method @NonNull public java.util.Map getAntennaPositionMap(); + method public int getMaxBytesPerOutgoingDatagram(); + method @NonNull public java.util.Set getSupportedRadioTechnologies(); + method public boolean isPointingRequired(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + + public final class SatelliteDatagram implements android.os.Parcelable { + method public int describeContents(); + method @NonNull public byte[] getSatelliteDatagram(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + + public interface SatelliteDatagramCallback { + method public void onSatelliteDatagramReceived(long, @NonNull android.telephony.satellite.SatelliteDatagram, int, @NonNull java.util.function.Consumer); + } + + public class SatelliteManager { + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void deprovisionSatelliteService(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void onDeviceAlignedWithSatellite(boolean); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void pollPendingSatelliteDatagrams(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void provisionSatelliteService(@NonNull String, @NonNull byte[], @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public int registerForSatelliteDatagram(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.satellite.SatelliteDatagramCallback); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public int registerForSatelliteModemStateChanged(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.satellite.SatelliteStateCallback); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public int registerForSatelliteProvisionStateChanged(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.satellite.SatelliteProvisionStateCallback); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsDemoModeEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsSatelliteCommunicationAllowedForCurrentLocation(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsSatelliteEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsSatelliteProvisioned(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method public void requestIsSatelliteSupported(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestSatelliteCapabilities(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestSatelliteEnabled(boolean, boolean, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestTimeForNextSatelliteVisibility(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void sendSatelliteDatagram(int, @NonNull android.telephony.satellite.SatelliteDatagram, boolean, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void startSatelliteTransmissionUpdates(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer, @NonNull android.telephony.satellite.SatelliteTransmissionUpdateCallback); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void stopSatelliteTransmissionUpdates(@NonNull android.telephony.satellite.SatelliteTransmissionUpdateCallback, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void unregisterForSatelliteDatagram(@NonNull android.telephony.satellite.SatelliteDatagramCallback); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void unregisterForSatelliteModemStateChanged(@NonNull android.telephony.satellite.SatelliteStateCallback); + method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void unregisterForSatelliteProvisionStateChanged(@NonNull android.telephony.satellite.SatelliteProvisionStateCallback); + field public static final int DATAGRAM_TYPE_LOCATION_SHARING = 2; // 0x2 + field public static final int DATAGRAM_TYPE_SOS_MESSAGE = 1; // 0x1 + field public static final int DATAGRAM_TYPE_UNKNOWN = 0; // 0x0 + field public static final int DEVICE_HOLD_POSITION_LANDSCAPE_LEFT = 2; // 0x2 + field public static final int DEVICE_HOLD_POSITION_LANDSCAPE_RIGHT = 3; // 0x3 + field public static final int DEVICE_HOLD_POSITION_PORTRAIT = 1; // 0x1 + field public static final int DEVICE_HOLD_POSITION_UNKNOWN = 0; // 0x0 + field public static final int DISPLAY_MODE_CLOSED = 3; // 0x3 + field public static final int DISPLAY_MODE_FIXED = 1; // 0x1 + field public static final int DISPLAY_MODE_OPENED = 2; // 0x2 + field public static final int DISPLAY_MODE_UNKNOWN = 0; // 0x0 + field public static final int NT_RADIO_TECHNOLOGY_EMTC_NTN = 3; // 0x3 + field public static final int NT_RADIO_TECHNOLOGY_NB_IOT_NTN = 1; // 0x1 + field public static final int NT_RADIO_TECHNOLOGY_NR_NTN = 2; // 0x2 + field public static final int NT_RADIO_TECHNOLOGY_PROPRIETARY = 4; // 0x4 + field public static final int NT_RADIO_TECHNOLOGY_UNKNOWN = 0; // 0x0 + field public static final int SATELLITE_ACCESS_BARRED = 16; // 0x10 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE = 0; // 0x0 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED = 7; // 0x7 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_NONE = 6; // 0x6 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_SUCCESS = 5; // 0x5 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING = 4; // 0x4 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING = 1; // 0x1 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED = 3; // 0x3 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS = 2; // 0x2 + field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_UNKNOWN = -1; // 0xffffffff + field public static final int SATELLITE_ERROR = 1; // 0x1 + field public static final int SATELLITE_ERROR_NONE = 0; // 0x0 + field public static final int SATELLITE_INVALID_ARGUMENTS = 8; // 0x8 + field public static final int SATELLITE_INVALID_MODEM_STATE = 7; // 0x7 + field public static final int SATELLITE_INVALID_TELEPHONY_STATE = 6; // 0x6 + field public static final int SATELLITE_MODEM_BUSY = 22; // 0x16 + field public static final int SATELLITE_MODEM_ERROR = 4; // 0x4 + field public static final int SATELLITE_MODEM_STATE_DATAGRAM_RETRYING = 3; // 0x3 + field public static final int SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING = 2; // 0x2 + field public static final int SATELLITE_MODEM_STATE_IDLE = 0; // 0x0 + field public static final int SATELLITE_MODEM_STATE_LISTENING = 1; // 0x1 + field public static final int SATELLITE_MODEM_STATE_OFF = 4; // 0x4 + field public static final int SATELLITE_MODEM_STATE_UNAVAILABLE = 5; // 0x5 + field public static final int SATELLITE_MODEM_STATE_UNKNOWN = -1; // 0xffffffff + field public static final int SATELLITE_NETWORK_ERROR = 5; // 0x5 + field public static final int SATELLITE_NETWORK_TIMEOUT = 17; // 0x11 + field public static final int SATELLITE_NOT_AUTHORIZED = 19; // 0x13 + field public static final int SATELLITE_NOT_REACHABLE = 18; // 0x12 + field public static final int SATELLITE_NOT_SUPPORTED = 20; // 0x14 + field public static final int SATELLITE_NO_RESOURCES = 12; // 0xc + field public static final int SATELLITE_RADIO_NOT_AVAILABLE = 10; // 0xa + field public static final int SATELLITE_REQUEST_ABORTED = 15; // 0xf + field public static final int SATELLITE_REQUEST_FAILED = 9; // 0x9 + field public static final int SATELLITE_REQUEST_IN_PROGRESS = 21; // 0x15 + field public static final int SATELLITE_REQUEST_NOT_SUPPORTED = 11; // 0xb + field public static final int SATELLITE_SERVER_ERROR = 2; // 0x2 + field public static final int SATELLITE_SERVICE_ERROR = 3; // 0x3 + field public static final int SATELLITE_SERVICE_NOT_PROVISIONED = 13; // 0xd + field public static final int SATELLITE_SERVICE_PROVISION_IN_PROGRESS = 14; // 0xe + } + + public static class SatelliteManager.SatelliteException extends java.lang.Exception { + ctor public SatelliteManager.SatelliteException(int); + method public int getErrorCode(); + } + + public interface SatelliteProvisionStateCallback { + method public void onSatelliteProvisionStateChanged(boolean); + } + + public interface SatelliteStateCallback { + method public void onSatelliteModemStateChanged(int); + } + + public interface SatelliteTransmissionUpdateCallback { + method public void onReceiveDatagramStateChanged(int, int, int); + method public void onSatellitePositionChanged(@NonNull android.telephony.satellite.PointingInfo); + method public void onSendDatagramStateChanged(int, int, int); + } + +} + package android.text { public final class FontConfig implements android.os.Parcelable { diff --git a/core/api/system-lint-baseline.txt b/core/api/system-lint-baseline.txt index 0100f0e762854..6c233270bad59 100644 --- a/core/api/system-lint-baseline.txt +++ b/core/api/system-lint-baseline.txt @@ -15,6 +15,12 @@ KotlinKeyword: android.app.Notification#when: Avoid field names that are Kotlin hard keywords ("when"); see https://android.github.io/kotlin-guides/interop.html#no-hard-keywords +ListenerLast: android.telephony.satellite.SatelliteManager#stopSatelliteTransmissionUpdates(android.telephony.satellite.SatelliteTransmissionUpdateCallback, java.util.concurrent.Executor, java.util.function.Consumer) parameter #1: + Listeners should always be at end of argument list (method `stopSatelliteTransmissionUpdates`) +ListenerLast: android.telephony.satellite.SatelliteManager#stopSatelliteTransmissionUpdates(android.telephony.satellite.SatelliteTransmissionUpdateCallback, java.util.concurrent.Executor, java.util.function.Consumer) parameter #2: + Listeners should always be at end of argument list (method `stopSatelliteTransmissionUpdates`) + + MissingGetterMatchingBuilder: android.telecom.CallScreeningService.CallResponse.Builder#setShouldScreenCallViaAudioProcessing(boolean): android.telecom.CallScreeningService.CallResponse does not declare a `shouldScreenCallViaAudioProcessing()` method matching method android.telecom.CallScreeningService.CallResponse.Builder.setShouldScreenCallViaAudioProcessing(boolean) MissingGetterMatchingBuilder: android.telephony.mbms.DownloadRequest.Builder#setServiceId(String): @@ -211,6 +217,8 @@ SamShouldBeLast: android.security.KeyChain#choosePrivateKeyAlias(android.app.Act SAM-compatible parameters (such as parameter 2, "response", in android.security.KeyChain.choosePrivateKeyAlias) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions SamShouldBeLast: android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, String[], java.security.Principal[], android.net.Uri, String): SAM-compatible parameters (such as parameter 2, "response", in android.security.KeyChain.choosePrivateKeyAlias) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions +SamShouldBeLast: android.telephony.satellite.SatelliteManager#startSatelliteTransmissionUpdates(java.util.concurrent.Executor, java.util.function.Consumer, android.telephony.satellite.SatelliteTransmissionUpdateCallback): + SAM-compatible parameters (such as parameter 2, "resultListener", in android.telephony.satellite.SatelliteManager.startSatelliteTransmissionUpdates) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions SamShouldBeLast: android.view.View#postDelayed(Runnable, long): SAM-compatible parameters (such as parameter 1, "action", in android.view.View.postDelayed) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions SamShouldBeLast: android.view.View#postOnAnimationDelayed(Runnable, long): diff --git a/telephony/java/android/telephony/satellite/AntennaDirection.java b/telephony/java/android/telephony/satellite/AntennaDirection.java index 02b0bc7364a2c..22412e6efadf1 100644 --- a/telephony/java/android/telephony/satellite/AntennaDirection.java +++ b/telephony/java/android/telephony/satellite/AntennaDirection.java @@ -17,7 +17,7 @@ package android.telephony.satellite; import android.annotation.NonNull; -import android.compat.annotation.UnsupportedAppUsage; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; @@ -37,6 +37,7 @@ import java.util.Objects; * positive X and pointing away from back of the phone for negative X. * @hide */ +@SystemApi public final class AntennaDirection implements Parcelable { /** Antenna x axis direction. */ private float mX; @@ -50,7 +51,6 @@ public final class AntennaDirection implements Parcelable { /** * @hide */ - @UnsupportedAppUsage public AntennaDirection(float x, float y, float z) { mX = x; mY = y; diff --git a/telephony/java/android/telephony/satellite/AntennaPosition.java b/telephony/java/android/telephony/satellite/AntennaPosition.java index eefc8b00f8e84..588be6cae7730 100644 --- a/telephony/java/android/telephony/satellite/AntennaPosition.java +++ b/telephony/java/android/telephony/satellite/AntennaPosition.java @@ -17,7 +17,7 @@ package android.telephony.satellite; import android.annotation.NonNull; -import android.compat.annotation.UnsupportedAppUsage; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; @@ -28,6 +28,7 @@ import java.util.Objects; * direction to be used with satellite communication and suggested device hold positions. * @hide */ +@SystemApi public final class AntennaPosition implements Parcelable { /** Antenna direction used for satellite communication. */ @NonNull AntennaDirection mAntennaDirection; @@ -38,7 +39,6 @@ public final class AntennaPosition implements Parcelable { /** * @hide */ - @UnsupportedAppUsage public AntennaPosition(@NonNull AntennaDirection antennaDirection, int suggestedHoldPosition) { mAntennaDirection = antennaDirection; mSuggestedHoldPosition = suggestedHoldPosition; diff --git a/telephony/java/android/telephony/satellite/PointingInfo.java b/telephony/java/android/telephony/satellite/PointingInfo.java index a559b32f00213..47dbdaff23bc6 100644 --- a/telephony/java/android/telephony/satellite/PointingInfo.java +++ b/telephony/java/android/telephony/satellite/PointingInfo.java @@ -17,12 +17,19 @@ package android.telephony.satellite; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import java.util.Objects; + /** + * PointingInfo is used to store the position of satellite received from satellite modem. + * The position of satellite is represented by azimuth and elevation angles + * with degrees as unit of measurement. * @hide */ +@SystemApi public final class PointingInfo implements Parcelable { /** Satellite azimuth in degrees */ private float mSatelliteAzimuthDegrees; @@ -33,7 +40,6 @@ public final class PointingInfo implements Parcelable { /** * @hide */ - public PointingInfo(float satelliteAzimuthDegrees, float satelliteElevationDegrees) { mSatelliteAzimuthDegrees = satelliteAzimuthDegrees; mSatelliteElevationDegrees = satelliteElevationDegrees; @@ -67,6 +73,20 @@ public final class PointingInfo implements Parcelable { } }; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PointingInfo that = (PointingInfo) o; + return mSatelliteAzimuthDegrees == that.mSatelliteAzimuthDegrees + && mSatelliteElevationDegrees == that.mSatelliteElevationDegrees; + } + + @Override + public int hashCode() { + return Objects.hash(mSatelliteAzimuthDegrees, mSatelliteElevationDegrees); + } + @NonNull @Override public String toString() { diff --git a/telephony/java/android/telephony/satellite/SatelliteCapabilities.java b/telephony/java/android/telephony/satellite/SatelliteCapabilities.java index 6856cc0c5df2a..bc45be110ace6 100644 --- a/telephony/java/android/telephony/satellite/SatelliteCapabilities.java +++ b/telephony/java/android/telephony/satellite/SatelliteCapabilities.java @@ -17,6 +17,8 @@ package android.telephony.satellite; import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; @@ -27,8 +29,11 @@ import java.util.Objects; import java.util.Set; /** + * SatelliteCapabilities is used to represent the capabilities of the satellite service + * received from satellite modem. * @hide */ +@SystemApi public final class SatelliteCapabilities implements Parcelable { /** * List of technologies supported by the satellite modem. @@ -56,7 +61,7 @@ public final class SatelliteCapabilities implements Parcelable { /** * @hide */ - public SatelliteCapabilities(Set supportedRadioTechnologies, + public SatelliteCapabilities(@Nullable Set supportedRadioTechnologies, boolean isPointingRequired, int maxBytesPerOutgoingDatagram, @NonNull Map antennaPositionMap) { mSupportedRadioTechnologies = supportedRadioTechnologies == null diff --git a/telephony/java/android/telephony/satellite/SatelliteDatagram.java b/telephony/java/android/telephony/satellite/SatelliteDatagram.java index d3cb8a07e4bac..9037f0c4078d4 100644 --- a/telephony/java/android/telephony/satellite/SatelliteDatagram.java +++ b/telephony/java/android/telephony/satellite/SatelliteDatagram.java @@ -17,12 +17,16 @@ package android.telephony.satellite; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; /** + * SatelliteDatagram is used to store data that is to be sent or received over satellite. + * Data is stored in byte array format. * @hide */ +@SystemApi public final class SatelliteDatagram implements Parcelable { /** * Datagram to be sent or received over satellite. @@ -63,6 +67,12 @@ public final class SatelliteDatagram implements Parcelable { } }; + /** + * Get satellite datagram. + * @return byte array. The format of the byte array is determined by the corresponding + * satellite provider. Client application should be aware of how to encode the datagram based + * upon the satellite provider. + */ @NonNull public byte[] getSatelliteDatagram() { return mData; } diff --git a/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java b/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java index b2dec71ecb32e..cb2920f9e6eef 100644 --- a/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java +++ b/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java @@ -17,6 +17,7 @@ package android.telephony.satellite; import android.annotation.NonNull; +import android.annotation.SystemApi; import java.util.function.Consumer; @@ -25,6 +26,7 @@ import java.util.function.Consumer; * * @hide */ +@SystemApi public interface SatelliteDatagramCallback { /** * Called when there is an incoming datagram to be received. diff --git a/telephony/java/android/telephony/satellite/SatelliteManager.java b/telephony/java/android/telephony/satellite/SatelliteManager.java index 2021ac7c4cd50..c498216cf75bf 100644 --- a/telephony/java/android/telephony/satellite/SatelliteManager.java +++ b/telephony/java/android/telephony/satellite/SatelliteManager.java @@ -23,6 +23,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresFeature; import android.annotation.RequiresPermission; +import android.annotation.SystemApi; import android.content.Context; import android.content.pm.PackageManager; import android.os.Binder; @@ -55,6 +56,7 @@ import java.util.function.Consumer; * @hide */ @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SATELLITE) +@SystemApi public class SatelliteManager { private static final String TAG = "SatelliteManager"; @@ -386,9 +388,16 @@ public class SatelliteManager { public @interface DisplayMode {} /** - * Request to enable or disable the satellite modem and demo mode. If the satellite modem is - * enabled, this may also disable the cellular modem, and if the satellite modem is disabled, - * this may also re-enable the cellular modem. + * Request to enable or disable the satellite modem and demo mode. + * If satellite modem and cellular modem cannot work concurrently, + * then this will disable the cellular modem if satellite modem is enabled, + * and will re-enable the cellular modem if satellite modem is disabled. + * + * Demo mode is created to simulate the experience of sending and receiving messages over + * satellite. If user enters demo mode, a request should be sent to framework to enable + * satellite with enableDemoMode set to {code true}. Once satellite is enabled and device is + * aligned with the satellite, user can send a message and also receive a reply in demo mode. + * If enableSatellite is {@code false}, enableDemoMode has no impact on the behavior. * * @param enableSatellite {@code true} to enable the satellite modem and * {@code false} to disable. @@ -911,8 +920,8 @@ public class SatelliteManager { * Provision the device with a satellite provider. * This is needed if the provider allows dynamic registration. * - * @param token The token to be used as a unique identifier for provisioning with satellite - * gateway. + * @param token The token is generated by the user which is used as a unique identifier for + * provisioning with satellite gateway. * @param provisionData Data from the provisioning app that can be used by provisioning server * @param cancellationSignal The optional signal used by the caller to cancel the provision * request. Even when the cancellation is signaled, Telephony will @@ -965,9 +974,12 @@ public class SatelliteManager { * {@link SatelliteProvisionStateCallback#onSatelliteProvisionStateChanged(boolean)} * should report as deprovisioned. * For provisioning satellite service, refer to - * {@link #provisionSatelliteService(String, String, CancellationSignal, Executor, Consumer)} + * {@link #provisionSatelliteService(String, byte[], CancellationSignal, Executor, Consumer)} * * @param token The token of the device/subscription to be deprovisioned. + * This should match with the token passed as input in + * {@link #provisionSatelliteService(String, byte[], CancellationSignal, Executor, + * Consumer)} * @param resultListener Listener for the {@link SatelliteError} result of the operation. * * @throws SecurityException if the caller doesn't have required permission. @@ -1213,6 +1225,9 @@ public class SatelliteManager { /** * Register to receive incoming datagrams over satellite. * + * To poll for pending satellite datagrams, refer to + * {@link #pollPendingSatelliteDatagrams(Executor, Consumer)} + * * @param executor The executor on which the callback will be called. * @param callback The callback to handle incoming datagrams over satellite. * This callback with be invoked when a new datagram is received from satellite. @@ -1305,6 +1320,7 @@ public class SatelliteManager { /** * Poll pending satellite datagrams over satellite. * + * This method should be called when user specifies to check incoming messages over satellite. * This method requests modem to check if there are any pending datagrams to be received over * satellite. If there are any incoming datagrams, they will be received via * {@link SatelliteDatagramCallback#onSatelliteDatagramReceived(long, SatelliteDatagram, int, @@ -1518,6 +1534,9 @@ public class SatelliteManager { /** * Inform whether the device is aligned with the satellite for demo mode. * + * Framework can send datagram to modem only when device is aligned with the satellite. + * This method helps framework to simulate the experience of sending datagram over satellite. + * * @param isAligned {@true} Device is aligned with the satellite for demo mode * {@false} Device is not aligned with the satellite for demo mode * diff --git a/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java b/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java index a62eb8b8a5fb2..71168762cca1a 100644 --- a/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java +++ b/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java @@ -16,17 +16,22 @@ package android.telephony.satellite; +import android.annotation.SystemApi; + /** * A callback class for monitoring satellite provision state change events. * * @hide */ +@SystemApi public interface SatelliteProvisionStateCallback { /** * Called when satellite provision state changes. * * @param provisioned The new provision state. {@code true} means satellite is provisioned * {@code false} means satellite is not provisioned. + * It is generally expected that the provisioning app retries if + * provisioning fails. */ void onSatelliteProvisionStateChanged(boolean provisioned); } diff --git a/telephony/java/android/telephony/satellite/SatelliteStateCallback.java b/telephony/java/android/telephony/satellite/SatelliteStateCallback.java index d9ecaa3467e33..812ff2decf5d6 100644 --- a/telephony/java/android/telephony/satellite/SatelliteStateCallback.java +++ b/telephony/java/android/telephony/satellite/SatelliteStateCallback.java @@ -16,11 +16,14 @@ package android.telephony.satellite; +import android.annotation.SystemApi; + /** * A callback class for monitoring satellite modem state change events. * * @hide */ +@SystemApi public interface SatelliteStateCallback { /** * Called when satellite modem state changes. diff --git a/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java b/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java index d4fe57a0be2ea..d7d892a7c30a8 100644 --- a/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java +++ b/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java @@ -17,6 +17,7 @@ package android.telephony.satellite; import android.annotation.NonNull; +import android.annotation.SystemApi; /** * A callback class for monitoring satellite position update and datagram transfer state change @@ -24,6 +25,7 @@ import android.annotation.NonNull; * * @hide */ +@SystemApi public interface SatelliteTransmissionUpdateCallback { /** * Called when the satellite position changed.