Update satellite APIs from feedback

Test: atest SatelliteManagerTest
Bug: 261053569
Change-Id: Id1eb6580ea365fbba188c44237e06e6e7ca7ba9d
Merged-In: Id1eb6580ea365fbba188c44237e06e6e7ca7ba9d
This commit is contained in:
Sarah Chin
2023-03-09 22:56:54 -08:00
parent 1bee42eb08
commit bdfcbbb3b0
17 changed files with 351 additions and 758 deletions

View File

@@ -21,13 +21,6 @@ package android.telephony.satellite;
* @hide
*/
oneway interface ISatelliteStateCallback {
/**
* Indicates that the satellite has pending datagrams for the device to be pulled.
*
* @param count Number of pending datagrams.
*/
void onPendingDatagramCount(in int count);
/**
* Indicates that the satellite modem state has changed.
*

View File

@@ -22,7 +22,7 @@ import android.telephony.satellite.PointingInfo;
* Interface for position update and datagram transfer state change callback.
* @hide
*/
oneway interface ISatellitePositionUpdateCallback {
oneway interface ISatelliteTransmissionUpdateCallback {
/**
* Called when satellite datagram transfer state changed.
*

View File

@@ -30,31 +30,12 @@ public final class PointingInfo implements Parcelable {
/** Satellite elevation in degrees */
private float mSatelliteElevationDegrees;
/** Antenna azimuth in degrees */
private float mAntennaAzimuthDegrees;
/**
* Angle of rotation about the x axis. This value represents the angle between a plane
* parallel to the device's screen and a plane parallel to the ground.
*/
private float mAntennaPitchDegrees;
/**
* Angle of rotation about the y axis. This value represents the angle between a plane
* perpendicular to the device's screen and a plane parallel to the ground.
*/
private float mAntennaRollDegrees;
/**
* @hide
*/
public PointingInfo(float satelliteAzimuthDegrees, float satelliteElevationDegrees,
float antennaAzimuthDegrees, float antennaPitchDegrees, float antennaRollDegrees) {
public PointingInfo(float satelliteAzimuthDegrees, float satelliteElevationDegrees) {
mSatelliteAzimuthDegrees = satelliteAzimuthDegrees;
mSatelliteElevationDegrees = satelliteElevationDegrees;
mAntennaAzimuthDegrees = antennaAzimuthDegrees;
mAntennaPitchDegrees = antennaPitchDegrees;
mAntennaRollDegrees = antennaRollDegrees;
}
private PointingInfo(Parcel in) {
@@ -70,9 +51,6 @@ public final class PointingInfo implements Parcelable {
public void writeToParcel(@NonNull Parcel out, int flags) {
out.writeFloat(mSatelliteAzimuthDegrees);
out.writeFloat(mSatelliteElevationDegrees);
out.writeFloat(mAntennaAzimuthDegrees);
out.writeFloat(mAntennaPitchDegrees);
out.writeFloat(mAntennaRollDegrees);
}
public static final @android.annotation.NonNull Creator<PointingInfo> CREATOR =
@@ -99,18 +77,6 @@ public final class PointingInfo implements Parcelable {
sb.append("SatelliteElevationDegrees:");
sb.append(mSatelliteElevationDegrees);
sb.append(",");
sb.append("AntennaAzimuthDegrees:");
sb.append(mAntennaAzimuthDegrees);
sb.append(",");
sb.append("AntennaPitchDegrees:");
sb.append(mAntennaPitchDegrees);
sb.append(",");
sb.append("AntennaRollDegrees:");
sb.append(mAntennaRollDegrees);
return sb.toString();
}
@@ -122,23 +88,8 @@ public final class PointingInfo implements Parcelable {
return mSatelliteElevationDegrees;
}
public float getAntennaAzimuthDegrees() {
return mAntennaAzimuthDegrees;
}
public float getAntennaPitchDegrees() {
return mAntennaPitchDegrees;
}
public float getAntennaRollDegrees() {
return mAntennaRollDegrees;
}
private void readFromParcel(Parcel in) {
mSatelliteAzimuthDegrees = in.readFloat();
mSatelliteElevationDegrees = in.readFloat();
mAntennaAzimuthDegrees = in.readFloat();
mAntennaPitchDegrees = in.readFloat();
mAntennaRollDegrees = in.readFloat();
}
}

View File

@@ -32,32 +32,25 @@ public final class SatelliteCapabilities implements Parcelable {
*/
@NonNull @SatelliteManager.NTRadioTechnology private Set<Integer> mSupportedRadioTechnologies;
/**
* Whether satellite modem is always on.
* This indicates the power impact of keeping it on is very minimal.
*/
private boolean mIsAlwaysOn;
/**
* Whether UE needs to point to a satellite to send and receive data.
*/
private boolean mNeedsPointingToSatellite;
private boolean mIsPointingRequired;
/**
* Whether UE needs a separate SIM profile to communicate with the satellite network.
* The maximum number of bytes per datagram that can be sent over satellite.
*/
private boolean mNeedsSeparateSimProfile;
private int mMaxBytesPerOutgoingDatagram;
/**
* @hide
*/
public SatelliteCapabilities(Set<Integer> supportedRadioTechnologies, boolean isAlwaysOn,
boolean needsPointingToSatellite, boolean needsSeparateSimProfile) {
public SatelliteCapabilities(Set<Integer> supportedRadioTechnologies,
boolean isPointingRequired, int maxBytesPerOutgoingDatagram) {
mSupportedRadioTechnologies = supportedRadioTechnologies == null
? new HashSet<>() : supportedRadioTechnologies;
mIsAlwaysOn = isAlwaysOn;
mNeedsPointingToSatellite = needsPointingToSatellite;
mNeedsSeparateSimProfile = needsSeparateSimProfile;
mIsPointingRequired = isPointingRequired;
mMaxBytesPerOutgoingDatagram = maxBytesPerOutgoingDatagram;
}
private SatelliteCapabilities(Parcel in) {
@@ -80,9 +73,8 @@ public final class SatelliteCapabilities implements Parcelable {
out.writeInt(0);
}
out.writeBoolean(mIsAlwaysOn);
out.writeBoolean(mNeedsPointingToSatellite);
out.writeBoolean(mNeedsSeparateSimProfile);
out.writeBoolean(mIsPointingRequired);
out.writeInt(mMaxBytesPerOutgoingDatagram);
}
@NonNull public static final Creator<SatelliteCapabilities> CREATOR = new Creator<>() {
@@ -111,16 +103,12 @@ public final class SatelliteCapabilities implements Parcelable {
sb.append("none,");
}
sb.append("isAlwaysOn:");
sb.append(mIsAlwaysOn);
sb.append("isPointingRequired:");
sb.append(mIsPointingRequired);
sb.append(",");
sb.append("needsPointingToSatellite:");
sb.append(mNeedsPointingToSatellite);
sb.append(",");
sb.append("needsSeparateSimProfile:");
sb.append(mNeedsSeparateSimProfile);
sb.append("maxBytesPerOutgoingDatagram");
sb.append(mMaxBytesPerOutgoingDatagram);
return sb.toString();
}
@@ -132,34 +120,23 @@ public final class SatelliteCapabilities implements Parcelable {
return mSupportedRadioTechnologies;
}
/**
* Get whether the satellite modem is always on.
* This indicates the power impact of keeping it on is very minimal.
*
* @return {@code true} if the satellite modem is always on and {@code false} otherwise.
*/
public boolean isAlwaysOn() {
return mIsAlwaysOn;
}
/**
* Get whether UE needs to point to a satellite to send and receive data.
*
* @return {@code true} if UE needs to pointing to a satellite to send and receive data and
* @return {@code true} if UE needs to point to a satellite to send and receive data and
* {@code false} otherwise.
*/
public boolean needsPointingToSatellite() {
return mNeedsPointingToSatellite;
public boolean isPointingRequired() {
return mIsPointingRequired;
}
/**
* Get whether UE needs a separate SIM profile to communicate with the satellite network.
* The maximum number of bytes per datagram that can be sent over satellite.
*
* @return {@code true} if UE needs a separate SIM profile to comunicate with the satellite
* network and {@code false} otherwise.
* @return The maximum number of bytes per datagram that can be sent over satellite.
*/
public boolean needsSeparateSimProfile() {
return mNeedsSeparateSimProfile;
public int getMaxBytesPerOutgoingDatagram() {
return mMaxBytesPerOutgoingDatagram;
}
private void readFromParcel(Parcel in) {
@@ -171,8 +148,7 @@ public final class SatelliteCapabilities implements Parcelable {
}
}
mIsAlwaysOn = in.readBoolean();
mNeedsPointingToSatellite = in.readBoolean();
mNeedsSeparateSimProfile = in.readBoolean();
mIsPointingRequired = in.readBoolean();
mMaxBytesPerOutgoingDatagram = in.readInt();
}
}

View File

@@ -17,7 +17,6 @@
package android.telephony.satellite;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
@@ -28,7 +27,7 @@ public final class SatelliteDatagram implements Parcelable {
/**
* Datagram to be sent or received over satellite.
*/
private byte[] mData;
@NonNull private byte[] mData;
/**
* @hide
@@ -51,8 +50,8 @@ public final class SatelliteDatagram implements Parcelable {
out.writeByteArray(mData);
}
public static final @android.annotation.NonNull Creator<SatelliteDatagram> CREATOR =
new Creator<SatelliteDatagram>() {
@NonNull public static final Creator<SatelliteDatagram> CREATOR =
new Creator<>() {
@Override
public SatelliteDatagram createFromParcel(Parcel in) {
return new SatelliteDatagram(in);
@@ -64,8 +63,7 @@ public final class SatelliteDatagram implements Parcelable {
}
};
@Nullable
public byte[] getSatelliteDatagram() {
@NonNull public byte[] getSatelliteDatagram() {
return mData;
}

View File

@@ -17,48 +17,18 @@
package android.telephony.satellite;
import android.annotation.NonNull;
import android.os.Binder;
import com.android.internal.telephony.ILongConsumer;
import java.util.concurrent.Executor;
/**
* A callback class for listening to satellite datagrams.
*
* @hide
*/
public class SatelliteDatagramCallback {
private final CallbackBinder mBinder = new CallbackBinder(this);
private static class CallbackBinder extends ISatelliteDatagramCallback.Stub {
private final SatelliteDatagramCallback mLocalCallback;
private Executor mExecutor;
private CallbackBinder(SatelliteDatagramCallback localCallback) {
mLocalCallback = localCallback;
}
@Override
public void onSatelliteDatagramReceived(long datagramId,
@NonNull SatelliteDatagram datagram, int pendingCount,
@NonNull ILongConsumer callback) {
final long callingIdentity = Binder.clearCallingIdentity();
try {
mExecutor.execute(() -> mLocalCallback.onSatelliteDatagramReceived(datagramId,
datagram, pendingCount, callback));
} finally {
restoreCallingIdentity(callingIdentity);
}
}
private void setExecutor(Executor executor) {
mExecutor = executor;
}
}
public interface SatelliteDatagramCallback {
/**
* Called when there is an incoming datagram to be received.
*
* @param datagramId An id that uniquely identifies incoming datagram.
* @param datagram Datagram to be received over satellite.
* @param pendingCount Number of datagrams yet to be received by the app.
@@ -66,19 +36,6 @@ public class SatelliteDatagramCallback {
* datagramId to Telephony. If the callback is not received within five minutes,
* Telephony will resend the datagram.
*/
public void onSatelliteDatagramReceived(long datagramId, @NonNull SatelliteDatagram datagram,
int pendingCount, @NonNull ILongConsumer callback) {
// Base Implementation
}
/** @hide */
@NonNull
final ISatelliteDatagramCallback getBinder() {
return mBinder;
}
/** @hide */
public void setExecutor(@NonNull Executor executor) {
mBinder.setExecutor(executor);
}
void onSatelliteDatagramReceived(long datagramId, @NonNull SatelliteDatagram datagram,
int pendingCount, @NonNull ILongConsumer callback);
}

View File

@@ -36,12 +36,15 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyFrameworkInitializer;
import com.android.internal.telephony.IIntegerConsumer;
import com.android.internal.telephony.ILongConsumer;
import com.android.internal.telephony.ITelephony;
import com.android.telephony.Rlog;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.time.Duration;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
@@ -55,6 +58,17 @@ import java.util.function.Consumer;
public class SatelliteManager {
private static final String TAG = "SatelliteManager";
private static final ConcurrentHashMap<SatelliteDatagramCallback, ISatelliteDatagramCallback>
sSatelliteDatagramCallbackMap = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<SatelliteProvisionStateCallback,
ISatelliteProvisionStateCallback> sSatelliteProvisionStateCallbackMap =
new ConcurrentHashMap<>();
private static final ConcurrentHashMap<SatelliteStateCallback, ISatelliteStateCallback>
sSatelliteStateCallbackMap = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<SatelliteTransmissionUpdateCallback,
ISatelliteTransmissionUpdateCallback> sSatelliteTransmissionUpdateCallbackMap =
new ConcurrentHashMap<>();
private final int mSubId;
/**
@@ -66,6 +80,7 @@ public class SatelliteManager {
* Create an instance of the SatelliteManager.
*
* @param context The context the SatelliteManager belongs to.
* @hide
*/
public SatelliteManager(@Nullable Context context) {
this(context, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
@@ -116,7 +131,7 @@ public class SatelliteManager {
/**
* Bundle key to get the response from
* {@link #requestIsSatelliteDemoModeEnabled(Executor, OutcomeReceiver)}.
* {@link #requestIsDemoModeEnabled(Executor, OutcomeReceiver)}.
* @hide
*/
public static final String KEY_DEMO_MODE_ENABLED = "demo_mode_enabled";
@@ -135,14 +150,6 @@ public class SatelliteManager {
*/
public static final String KEY_SATELLITE_CAPABILITIES = "satellite_capabilities";
/**
* Bundle key to get the response from
* {@link #requestMaxSizePerSendingDatagram(Executor, OutcomeReceiver)} .
* @hide
*/
public static final String KEY_MAX_CHARACTERS_PER_SATELLITE_TEXT =
"max_characters_per_satellite_text";
/**
* Bundle key to get the response from
* {@link #requestIsSatelliteProvisioned(Executor, OutcomeReceiver)}.
@@ -319,23 +326,25 @@ public class SatelliteManager {
public @interface NTRadioTechnology {}
/**
* Request to enable or disable the satellite modem. If the satellite modem is enabled, this
* will also disable the cellular modem, and if the satellite modem is disabled, this will also
* re-enable the cellular modem.
* 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.
*
* @param enable {@code true} to enable the satellite modem and {@code false} to disable.
* @param enableSatellite {@code true} to enable the satellite modem and
* {@code false} to disable.
* @param enableDemoMode {@code true} to enable demo mode and {@code false} to disable.
* @param executor The executor on which the error code listener will be called.
* @param errorCodeListener Listener for the {@link SatelliteError} result of the operation.
* @param resultListener Listener for the {@link SatelliteError} result of the operation.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void requestSatelliteEnabled(
boolean enable, @NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<Integer> errorCodeListener) {
public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
@NonNull @CallbackExecutor Executor executor,
@SatelliteError @NonNull Consumer<Integer> resultListener) {
Objects.requireNonNull(executor);
Objects.requireNonNull(errorCodeListener);
Objects.requireNonNull(resultListener);
try {
ITelephony telephony = getITelephony();
@@ -344,10 +353,11 @@ public class SatelliteManager {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> errorCodeListener.accept(result)));
() -> resultListener.accept(result)));
}
};
telephony.requestSatelliteEnabled(mSubId, enable, errorCallback);
telephony.requestSatelliteEnabled(mSubId, enableSatellite, enableDemoMode,
errorCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -411,51 +421,14 @@ public class SatelliteManager {
}
}
/**
* Request to enable or disable the satellite service demo mode.
*
* @param enable {@code true} to enable the satellite demo mode and {@code false} to disable.
* @param executor The executor on which the error code listener will be called.
* @param errorCodeListener Listener for the {@link SatelliteError} result of the operation.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void requestSatelliteDemoModeEnabled(boolean enable,
@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<Integer> errorCodeListener) {
Objects.requireNonNull(executor);
Objects.requireNonNull(errorCodeListener);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
IIntegerConsumer errorCallback = new IIntegerConsumer.Stub() {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> errorCodeListener.accept(result)));
}
};
telephony.requestSatelliteDemoModeEnabled(mSubId, enable, errorCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
Rlog.e(TAG, "requestSatelliteDemoModeEnabled() RemoteException: ", ex);
ex.rethrowFromSystemServer();
}
}
/**
* Request to get whether the satellite service demo mode is enabled.
*
* @param executor The executor on which the callback will be called.
* @param callback The callback object to which the result will be delivered.
* If the request is successful, {@link OutcomeReceiver#onResult(Object)}
* will return a {@code boolean} with value {@code true} if the satellite
* demo mode is enabled and {@code false} otherwise.
* will return a {@code boolean} with value {@code true} if demo mode is enabled
* and {@code false} otherwise.
* If the request is not successful, {@link OutcomeReceiver#onError(Throwable)}
* will return a {@link SatelliteException} with the {@link SatelliteError}.
*
@@ -463,7 +436,7 @@ public class SatelliteManager {
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void requestIsSatelliteDemoModeEnabled(@NonNull @CallbackExecutor Executor executor,
public void requestIsDemoModeEnabled(@NonNull @CallbackExecutor Executor executor,
@NonNull OutcomeReceiver<Boolean, SatelliteException> callback) {
Objects.requireNonNull(executor);
Objects.requireNonNull(callback);
@@ -492,12 +465,12 @@ public class SatelliteManager {
}
}
};
telephony.requestIsSatelliteDemoModeEnabled(mSubId, receiver);
telephony.requestIsDemoModeEnabled(mSubId, receiver);
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
loge("requestIsSatelliteDemoModeEnabled() RemoteException: " + ex);
loge("requestIsDemoModeEnabled() RemoteException: " + ex);
ex.rethrowFromSystemServer();
}
}
@@ -742,145 +715,117 @@ public class SatelliteManager {
public @interface DatagramType {}
/**
* Start receiving satellite position updates.
* 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 position updates are started only on {@link #SATELLITE_ERROR_NONE}.
* Satellite transmission updates are started only on {@link #SATELLITE_ERROR_NONE}.
* All other results indicate that this operation failed.
* Once satellite position updates begin, datagram transfer state updates will be sent
* through {@link SatellitePositionUpdateCallback}.
* Once satellite transmission updates begin, position and datagram transfer state updates
* will be sent through {@link SatelliteTransmissionUpdateCallback}.
*
* @param executor The executor on which the callback and error code listener will be called.
* @param errorCodeListener Listener for the {@link SatelliteError} result of the operation.
* @param callback The callback to notify of changes in satellite position.
* @param resultListener Listener for the {@link SatelliteError} result of the operation.
* @param callback The callback to notify of satellite transmission updates.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void startSatellitePositionUpdates(@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<Integer> errorCodeListener,
@NonNull SatellitePositionUpdateCallback callback) {
public void startSatelliteTransmissionUpdates(@NonNull @CallbackExecutor Executor executor,
@SatelliteError @NonNull Consumer<Integer> resultListener,
@NonNull SatelliteTransmissionUpdateCallback callback) {
Objects.requireNonNull(executor);
Objects.requireNonNull(errorCodeListener);
Objects.requireNonNull(resultListener);
Objects.requireNonNull(callback);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
callback.setExecutor(executor);
IIntegerConsumer errorCallback = new IIntegerConsumer.Stub() {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> errorCodeListener.accept(result)));
() -> resultListener.accept(result)));
}
};
telephony.startSatellitePositionUpdates(
mSubId, errorCallback, callback.getBinder());
ISatelliteTransmissionUpdateCallback internalCallback =
new ISatelliteTransmissionUpdateCallback.Stub() {
@Override
public void onDatagramTransferStateChanged(int state,
int sendPendingCount, int receivePendingCount, int errorCode) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> callback.onDatagramTransferStateChanged(
state, sendPendingCount, receivePendingCount,
errorCode)));
}
@Override
public void onSatellitePositionChanged(PointingInfo pointingInfo) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> callback.onSatellitePositionChanged(pointingInfo)));
}
};
sSatelliteTransmissionUpdateCallbackMap.put(callback, internalCallback);
telephony.startSatelliteTransmissionUpdates(mSubId, errorCallback,
internalCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
loge("startSatellitePositionUpdates() RemoteException: " + ex);
loge("startSatelliteTransmissionUpdates() RemoteException: " + ex);
ex.rethrowFromSystemServer();
}
}
/**
* Stop receiving satellite position updates.
* Stop receiving satellite transmission updates.
* This can be called by the pointing UI when the user stops pointing to the satellite.
* Satellite position updates are stopped and the callback is unregistered only on
* Satellite transmission updates are stopped and the callback is unregistered only on
* {@link #SATELLITE_ERROR_NONE}. All other results that this operation failed.
*
* @param callback The callback that was passed to
* {@link #startSatellitePositionUpdates(Executor, Consumer, SatellitePositionUpdateCallback)}.
* @param callback The callback that was passed to {@link
* #startSatelliteTransmissionUpdates(Executor, Consumer, SatelliteTransmissionUpdateCallback)}.
* @param executor The executor on which the error code listener will be called.
* @param errorCodeListener Listener for the {@link SatelliteError} result of the operation.
* @param resultListener Listener for the {@link SatelliteError} result of the operation.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void stopSatellitePositionUpdates(@NonNull SatellitePositionUpdateCallback callback,
public void stopSatelliteTransmissionUpdates(
@NonNull SatelliteTransmissionUpdateCallback callback,
@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<Integer> errorCodeListener) {
@SatelliteError @NonNull Consumer<Integer> resultListener) {
Objects.requireNonNull(callback);
Objects.requireNonNull(executor);
Objects.requireNonNull(errorCodeListener);
Objects.requireNonNull(resultListener);
ISatelliteTransmissionUpdateCallback internalCallback =
sSatelliteTransmissionUpdateCallbackMap.remove(callback);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
IIntegerConsumer errorCallback = new IIntegerConsumer.Stub() {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> errorCodeListener.accept(result)));
}
};
telephony.stopSatellitePositionUpdates(mSubId, errorCallback,
callback.getBinder());
// TODO: Notify SmsHandler that pointing UI stopped
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
loge("stopSatellitePositionUpdates() RemoteException: " + ex);
ex.rethrowFromSystemServer();
}
}
/**
* Request to get the maximum number of bytes per datagram that can be sent to satellite.
*
* @param executor The executor on which the callback will be called.
* @param callback The callback object to which the result will be delivered.
* If the request is successful, {@link OutcomeReceiver#onResult(Object)}
* will return the maximum number of bytes per datagram that can be sent to
* satellite.
* If the request is not successful, {@link OutcomeReceiver#onError(Throwable)}
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void requestMaxSizePerSendingDatagram(
@NonNull @CallbackExecutor Executor executor,
@NonNull OutcomeReceiver<Integer, SatelliteException> callback) {
Objects.requireNonNull(executor);
Objects.requireNonNull(callback);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
ResultReceiver receiver = new ResultReceiver(null) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (resultCode == SATELLITE_ERROR_NONE) {
if (resultData.containsKey(KEY_MAX_CHARACTERS_PER_SATELLITE_TEXT)) {
int maxCharacters =
resultData.getInt(KEY_MAX_CHARACTERS_PER_SATELLITE_TEXT);
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onResult(maxCharacters)));
} else {
loge("KEY_MAX_CHARACTERS_PER_SATELLITE_TEXT does not exist.");
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onError(
new SatelliteException(SATELLITE_REQUEST_FAILED))));
}
} else {
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onError(new SatelliteException(resultCode))));
if (internalCallback != null) {
IIntegerConsumer errorCallback = new IIntegerConsumer.Stub() {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> resultListener.accept(result)));
}
}
};
telephony.requestMaxSizePerSendingDatagram(mSubId, receiver);
};
telephony.stopSatelliteTransmissionUpdates(mSubId, errorCallback,
internalCallback);
// TODO: Notify SmsHandler that pointing UI stopped
} else {
loge("stopSatelliteTransmissionUpdates: No internal callback.");
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> resultListener.accept(SATELLITE_INVALID_ARGUMENTS)));
}
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
loge("requestMaxCharactersPerSatelliteTextMessage() RemoteException: " + ex);
loge("stopSatelliteTransmissionUpdates() RemoteException: " + ex);
ex.rethrowFromSystemServer();
}
}
@@ -891,23 +836,24 @@ public class SatelliteManager {
*
* @param token The token to be used as a unique identifier for provisioning with satellite
* gateway.
* @param regionId The region ID for the device's current location.
* @param cancellationSignal The optional signal used by the caller to cancel the provision
* request. Even when the cancellation is signaled, Telephony will
* still trigger the callback to return the result of this request.
* @param executor The executor on which the error code listener will be called.
* @param errorCodeListener Listener for the {@link SatelliteError} result of the operation.
* @param resultListener Listener for the {@link SatelliteError} result of the operation.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void provisionSatelliteService(@NonNull String token,
public void provisionSatelliteService(@NonNull String token, @NonNull String regionId,
@Nullable CancellationSignal cancellationSignal,
@NonNull @CallbackExecutor Executor executor,
@SatelliteError @NonNull Consumer<Integer> errorCodeListener) {
@SatelliteError @NonNull Consumer<Integer> resultListener) {
Objects.requireNonNull(token);
Objects.requireNonNull(executor);
Objects.requireNonNull(errorCodeListener);
Objects.requireNonNull(resultListener);
ICancellationSignal cancelRemote = null;
try {
@@ -917,10 +863,11 @@ public class SatelliteManager {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> errorCodeListener.accept(result)));
() -> resultListener.accept(result)));
}
};
cancelRemote = telephony.provisionSatelliteService(mSubId, token, errorCallback);
cancelRemote = telephony.provisionSatelliteService(mSubId, token, regionId,
errorCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -942,7 +889,7 @@ public class SatelliteManager {
* {@link #provisionSatelliteService(String, CancellationSignal, Executor, Consumer)}.
*
* @param token The token of the device/subscription to be deprovisioned.
* @param errorCodeListener Listener for the {@link SatelliteError} result of the operation.
* @param resultListener Listener for the {@link SatelliteError} result of the operation.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
@@ -950,10 +897,10 @@ public class SatelliteManager {
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void deprovisionSatelliteService(@NonNull String token,
@NonNull @CallbackExecutor Executor executor,
@SatelliteError @NonNull Consumer<Integer> errorCodeListener) {
@SatelliteError @NonNull Consumer<Integer> resultListener) {
Objects.requireNonNull(token);
Objects.requireNonNull(executor);
Objects.requireNonNull(errorCodeListener);
Objects.requireNonNull(resultListener);
try {
ITelephony telephony = getITelephony();
@@ -962,7 +909,7 @@ public class SatelliteManager {
@Override
public void accept(int result) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> errorCodeListener.accept(result)));
() -> resultListener.accept(result)));
}
};
telephony.deprovisionSatelliteService(mSubId, token, errorCallback);
@@ -996,9 +943,18 @@ public class SatelliteManager {
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
callback.setExecutor(executor);
ISatelliteProvisionStateCallback internalCallback =
new ISatelliteProvisionStateCallback.Stub() {
@Override
public void onSatelliteProvisionStateChanged(boolean provisioned) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> callback.onSatelliteProvisionStateChanged(
provisioned)));
}
};
sSatelliteProvisionStateCallbackMap.put(callback, internalCallback);
return telephony.registerForSatelliteProvisionStateChanged(
mSubId, callback.getBinder());
mSubId, internalCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -1023,11 +979,17 @@ public class SatelliteManager {
public void unregisterForSatelliteProvisionStateChanged(
@NonNull SatelliteProvisionStateCallback callback) {
Objects.requireNonNull(callback);
ISatelliteProvisionStateCallback internalCallback =
sSatelliteProvisionStateCallbackMap.remove(callback);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
telephony.unregisterForSatelliteProvisionStateChanged(mSubId, callback.getBinder());
if (internalCallback != null) {
telephony.unregisterForSatelliteProvisionStateChanged(mSubId, internalCallback);
} else {
loge("unregisterForSatelliteProvisionStateChanged: No internal callback.");
}
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -1112,9 +1074,15 @@ public class SatelliteManager {
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
callback.setExecutor(executor);
return telephony.registerForSatelliteModemStateChanged(mSubId,
callback.getBinder());
ISatelliteStateCallback internalCallback = new ISatelliteStateCallback.Stub() {
@Override
public void onSatelliteModemStateChanged(int state) {
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onSatelliteModemStateChanged(state)));
}
};
sSatelliteStateCallbackMap.put(callback, internalCallback);
return telephony.registerForSatelliteModemStateChanged(mSubId, internalCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -1138,11 +1106,16 @@ public class SatelliteManager {
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void unregisterForSatelliteModemStateChanged(@NonNull SatelliteStateCallback callback) {
Objects.requireNonNull(callback);
ISatelliteStateCallback internalCallback = sSatelliteStateCallbackMap.remove(callback);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
telephony.unregisterForSatelliteModemStateChanged(mSubId, callback.getBinder());
if (internalCallback != null) {
telephony.unregisterForSatelliteModemStateChanged(mSubId, internalCallback);
} else {
loge("unregisterForSatelliteModemStateChanged: No internal callback.");
}
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -1155,8 +1128,6 @@ public class SatelliteManager {
/**
* Register to receive incoming datagrams over satellite.
*
* @param datagramType datagram type indicating whether the datagram is of type
* SOS_SMS or LOCATION_SHARING.
* @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.
@@ -1167,7 +1138,7 @@ public class SatelliteManager {
* @throws IllegalStateException if the Telephony process is not currently available.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
@SatelliteError public int registerForSatelliteDatagram(@DatagramType int datagramType,
@SatelliteError public int registerForSatelliteDatagram(
@NonNull @CallbackExecutor Executor executor,
@NonNull SatelliteDatagramCallback callback) {
Objects.requireNonNull(executor);
@@ -1176,9 +1147,19 @@ public class SatelliteManager {
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
callback.setExecutor(executor);
return telephony.registerForSatelliteDatagram(mSubId, datagramType,
callback.getBinder());
ISatelliteDatagramCallback internalCallback =
new ISatelliteDatagramCallback.Stub() {
@Override
public void onSatelliteDatagramReceived(long datagramId,
@NonNull SatelliteDatagram datagram, int pendingCount,
@NonNull ILongConsumer ack) {
executor.execute(() -> Binder.withCleanCallingIdentity(
() -> callback.onSatelliteDatagramReceived(
datagramId, datagram, pendingCount, ack)));
}
};
sSatelliteDatagramCallbackMap.put(callback, internalCallback);
return telephony.registerForSatelliteDatagram(mSubId, internalCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -1194,7 +1175,7 @@ public class SatelliteManager {
* If callback was not registered before, the request will be ignored.
*
* @param callback The callback that was passed to
* {@link #registerForSatelliteDatagram(int, Executor, SatelliteDatagramCallback)}.
* {@link #registerForSatelliteDatagram(Executor, SatelliteDatagramCallback)}.
*
* @throws SecurityException if the caller doesn't have required permission.
* @throws IllegalStateException if the Telephony process is not currently available.
@@ -1202,11 +1183,17 @@ public class SatelliteManager {
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void unregisterForSatelliteDatagram(@NonNull SatelliteDatagramCallback callback) {
Objects.requireNonNull(callback);
ISatelliteDatagramCallback internalCallback =
sSatelliteDatagramCallbackMap.remove(callback);
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
telephony.unregisterForSatelliteDatagram(mSubId, callback.getBinder());
if (internalCallback != null) {
telephony.unregisterForSatelliteDatagram(mSubId, internalCallback);
} else {
loge("unregisterForSatelliteDatagram: No internal callback.");
}
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -1222,7 +1209,7 @@ public class SatelliteManager {
* 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,
* ISatelliteDatagramReceiverAck)}
* ILongConsumer)}
*
* @param executor The executor on which the result listener will be called.
* @param resultListener Listener for the {@link SatelliteError} result of the operation.
@@ -1371,9 +1358,8 @@ public class SatelliteManager {
}
/**
* Request to get the time after which the satellite will be visible. This is an
* {@code int} representing the duration in seconds after which the satellite will be visible.
* This will return {@code 0} if the satellite is currently visible.
* Request to get the duration in seconds after which the satellite will be visible.
* This will be {@link Duration#ZERO} if the satellite is currently visible.
*
* @param executor The executor on which the callback will be called.
* @param callback The callback object to which the result will be delivered.
@@ -1387,7 +1373,7 @@ public class SatelliteManager {
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
public void requestTimeForNextSatelliteVisibility(@NonNull @CallbackExecutor Executor executor,
@NonNull OutcomeReceiver<Integer, SatelliteException> callback) {
@NonNull OutcomeReceiver<Duration, SatelliteException> callback) {
Objects.requireNonNull(executor);
Objects.requireNonNull(callback);
@@ -1402,7 +1388,8 @@ public class SatelliteManager {
int nextVisibilityDuration =
resultData.getInt(KEY_SATELLITE_NEXT_VISIBILITY);
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onResult(nextVisibilityDuration)));
callback.onResult(
Duration.ofSeconds(nextVisibilityDuration))));
} else {
loge("KEY_SATELLITE_NEXT_VISIBILITY does not exist.");
executor.execute(() -> Binder.withCleanCallingIdentity(() ->

View File

@@ -1,104 +0,0 @@
/*
* Copyright (C) 2023 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;
import android.annotation.NonNull;
import android.os.Binder;
import java.util.concurrent.Executor;
/**
* A callback class for monitoring satellite position update and datagram transfer state change
* events.
*
* @hide
*/
public class SatellitePositionUpdateCallback {
private final CallbackBinder mBinder = new CallbackBinder(this);
private static class CallbackBinder extends ISatellitePositionUpdateCallback.Stub {
private final SatellitePositionUpdateCallback mLocalCallback;
private Executor mExecutor;
private CallbackBinder(SatellitePositionUpdateCallback localCallback) {
mLocalCallback = localCallback;
}
@Override
public void onSatellitePositionChanged(@NonNull PointingInfo pointingInfo) {
final long callingIdentity = Binder.clearCallingIdentity();
try {
mExecutor.execute(() ->
mLocalCallback.onSatellitePositionChanged(pointingInfo));
} finally {
restoreCallingIdentity(callingIdentity);
}
}
@Override
public void onDatagramTransferStateChanged(
@SatelliteManager.SatelliteDatagramTransferState int state, int sendPendingCount,
int receivePendingCount, @SatelliteManager.SatelliteError int errorCode) {
final long callingIdentity = Binder.clearCallingIdentity();
try {
mExecutor.execute(() ->
mLocalCallback.onDatagramTransferStateChanged(
state, sendPendingCount, receivePendingCount, errorCode));
} finally {
restoreCallingIdentity(callingIdentity);
}
}
private void setExecutor(Executor executor) {
mExecutor = executor;
}
}
/**
* Called when the satellite position changed.
*
* @param pointingInfo The pointing info containing the satellite location.
*/
public void onSatellitePositionChanged(@NonNull PointingInfo pointingInfo) {
// Base Implementation
}
/**
* Called when satellite datagram transfer state changed.
*
* @param state The new datagram transfer state.
* @param sendPendingCount The number of datagrams that are currently being sent.
* @param receivePendingCount The number of datagrams that are currently being received.
* @param errorCode If datagram transfer failed, the reason for failure.
*/
public void onDatagramTransferStateChanged(
@SatelliteManager.SatelliteDatagramTransferState int state, int sendPendingCount,
int receivePendingCount, @SatelliteManager.SatelliteError int errorCode) {
// Base Implementation
}
/**@hide*/
@NonNull
final ISatellitePositionUpdateCallback getBinder() {
return mBinder;
}
/**@hide*/
public void setExecutor(@NonNull Executor executor) {
mBinder.setExecutor(executor);
}
}

View File

@@ -16,61 +16,17 @@
package android.telephony.satellite;
import android.annotation.NonNull;
import android.os.Binder;
import java.util.concurrent.Executor;
/**
* A callback class for monitoring satellite provision state change events.
*
* @hide
*/
public class SatelliteProvisionStateCallback {
private final CallbackBinder mBinder = new CallbackBinder(this);
private static class CallbackBinder extends ISatelliteProvisionStateCallback.Stub {
private final SatelliteProvisionStateCallback mLocalCallback;
private Executor mExecutor;
private CallbackBinder(SatelliteProvisionStateCallback localCallback) {
mLocalCallback = localCallback;
}
@Override
public void onSatelliteProvisionStateChanged(boolean provisioned) {
final long callingIdentity = Binder.clearCallingIdentity();
try {
mExecutor.execute(() ->
mLocalCallback.onSatelliteProvisionStateChanged(provisioned));
} finally {
restoreCallingIdentity(callingIdentity);
}
}
private void setExecutor(Executor executor) {
mExecutor = executor;
}
}
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.
*/
public void onSatelliteProvisionStateChanged(boolean provisioned) {
// Base Implementation
}
/**@hide*/
@NonNull
final ISatelliteProvisionStateCallback getBinder() {
return mBinder;
}
/**@hide*/
public void setExecutor(@NonNull Executor executor) {
mBinder.setExecutor(executor);
}
void onSatelliteProvisionStateChanged(boolean provisioned);
}

View File

@@ -16,80 +16,15 @@
package android.telephony.satellite;
import android.annotation.NonNull;
import android.os.Binder;
import java.util.concurrent.Executor;
/**
* A callback class for monitoring satellite modem state change events.
*
* @hide
*/
public class SatelliteStateCallback {
private final CallbackBinder mBinder = new CallbackBinder(this);
private static class CallbackBinder extends ISatelliteStateCallback.Stub {
private final SatelliteStateCallback mLocalCallback;
private Executor mExecutor;
private CallbackBinder(SatelliteStateCallback localCallback) {
mLocalCallback = localCallback;
}
@Override
public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) {
final long callingIdentity = Binder.clearCallingIdentity();
try {
mExecutor.execute(() ->
mLocalCallback.onSatelliteModemStateChanged(state));
} finally {
restoreCallingIdentity(callingIdentity);
}
}
@Override
public void onPendingDatagramCount(int count) {
final long callingIdentity = Binder.clearCallingIdentity();
try {
mExecutor.execute(() ->
mLocalCallback.onPendingDatagramCount(count));
} finally {
restoreCallingIdentity(callingIdentity);
}
}
private void setExecutor(Executor executor) {
mExecutor = executor;
}
}
public interface SatelliteStateCallback {
/**
* Called when satellite modem state changes.
* @param state The new satellite modem state.
*/
public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) {
// Base Implementation
}
/**
* Called when there are pending datagrams to be received from satellite.
* @param count Pending datagram count.
*/
public void onPendingDatagramCount(int count) {
// Base Implementation
}
//TODO: Add an API for datagram transfer state update here.
/**@hide*/
@NonNull
final ISatelliteStateCallback getBinder() {
return mBinder;
}
/**@hide*/
public void setExecutor(@NonNull Executor executor) {
mBinder.setExecutor(executor);
}
void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state);
}

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2023 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;
import android.annotation.NonNull;
/**
* A callback class for monitoring satellite position update and datagram transfer state change
* events.
*
* @hide
*/
public interface SatelliteTransmissionUpdateCallback {
/**
* Called when the satellite position changed.
*
* @param pointingInfo The pointing info containing the satellite location.
*/
void onSatellitePositionChanged(@NonNull PointingInfo pointingInfo);
/**
* Called when satellite datagram transfer state changed.
*
* @param state The new datagram transfer state.
* @param sendPendingCount The number of datagrams that are currently being sent.
* @param receivePendingCount The number of datagrams that are currently being received.
* @param errorCode If datagram transfer failed, the reason for failure.
*/
void onDatagramTransferStateChanged(@SatelliteManager.SatelliteDatagramTransferState int state,
int sendPendingCount, int receivePendingCount,
@SatelliteManager.SatelliteError int errorCode);
}

View File

@@ -49,10 +49,9 @@ oneway interface ISatellite {
* Listening mode allows the satellite service to listen for incoming pages.
*
* @param enable True to enable satellite listening mode and false to disable.
* @param isDemoMode Whether demo mode is enabled.
* @param timeout How long the satellite modem should wait for the next incoming page before
* disabling listening mode.
* @param errorCallback The callback to receive the error code result of the operation.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -64,16 +63,17 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestSatelliteListeningEnabled(in boolean enable, in boolean isDemoMode, in int timeout,
in IIntegerConsumer errorCallback);
void requestSatelliteListeningEnabled(in boolean enable, in int timeout,
in IIntegerConsumer resultCallback);
/**
* Request to enable or disable the satellite modem. If the satellite modem is enabled,
* this will also disable the cellular modem, and if the satellite modem is disabled,
* this will also re-enable the cellular modem.
* 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.
*
* @param enable True to enable the satellite modem and false to disable.
* @param errorCallback The callback to receive the error code result of the operation.
* @param enableSatellite True to enable the satellite modem and false to disable.
* @param enableDemoMode True to enable demo mode and false to disable.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -85,13 +85,14 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestSatelliteEnabled(in boolean enabled, in IIntegerConsumer errorCallback);
void requestSatelliteEnabled(in boolean enableSatellite, in boolean enableDemoMode,
in IIntegerConsumer resultCallback);
/**
* Request to get whether the satellite modem is enabled.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* whether the satellite modem is enabled.
*
@@ -105,13 +106,13 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestIsSatelliteEnabled(in IIntegerConsumer errorCallback, in IBooleanConsumer callback);
void requestIsSatelliteEnabled(in IIntegerConsumer resultCallback, in IBooleanConsumer callback);
/**
* Request to get whether the satellite service is supported on the device.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* whether the satellite service is supported on the device.
*
@@ -125,14 +126,14 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestIsSatelliteSupported(in IIntegerConsumer errorCallback,
void requestIsSatelliteSupported(in IIntegerConsumer resultCallback,
in IBooleanConsumer callback);
/**
* Request to get the SatelliteCapabilities of the satellite service.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* the SatelliteCapabilities of the satellite service.
*
@@ -146,7 +147,7 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestSatelliteCapabilities(in IIntegerConsumer errorCallback,
void requestSatelliteCapabilities(in IIntegerConsumer resultCallback,
in ISatelliteCapabilitiesConsumer callback);
/**
@@ -154,7 +155,7 @@ oneway interface ISatellite {
* The satellite service should report the satellite pointing info via
* ISatelliteListener#onSatellitePositionChanged as the user device/satellite moves.
*
* @param errorCallback The callback to receive the error code result of the operation.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -166,13 +167,13 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void startSendingSatellitePointingInfo(in IIntegerConsumer errorCallback);
void startSendingSatellitePointingInfo(in IIntegerConsumer resultCallback);
/**
* User stopped pointing to the satellite.
* The satellite service should stop reporting satellite pointing info to the framework.
*
* @param errorCallback The callback to receive the error code result of the operation.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -184,28 +185,7 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void stopSendingSatellitePointingInfo(in IIntegerConsumer errorCallback);
/**
* Request to get the maximum number of characters per MO text message on satellite.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* the maximum number of characters per MO text message on satellite.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
* SatelliteError:SERVICE_ERROR
* SatelliteError:MODEM_ERROR
* SatelliteError:INVALID_MODEM_STATE
* SatelliteError:INVALID_ARGUMENTS
* SatelliteError:RADIO_NOT_AVAILABLE
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestMaxCharactersPerMOTextMessage(in IIntegerConsumer errorCallback,
in IIntegerConsumer callback);
void stopSendingSatellitePointingInfo(in IIntegerConsumer resultCallback);
/**
* Provision the device with a satellite provider.
@@ -214,7 +194,8 @@ oneway interface ISatellite {
*
* @param token The token to be used as a unique identifier for provisioning with satellite
* gateway.
* @param errorCallback The callback to receive the error code result of the operation.
* @param regionId The region ID for the device's current location.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -229,7 +210,8 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_ABORTED
* SatelliteError:NETWORK_TIMEOUT
*/
void provisionSatelliteService(in String token, in IIntegerConsumer errorCallback);
void provisionSatelliteService(in String token, in String regionId,
in IIntegerConsumer resultCallback);
/**
* Deprovision the device with the satellite provider.
@@ -237,7 +219,7 @@ oneway interface ISatellite {
* Once deprovisioned, ISatelliteListener#onSatelliteProvisionStateChanged should report false.
*
* @param token The token of the device/subscription to be deprovisioned.
* @param errorCallback The callback to receive the error code result of the operation.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -252,13 +234,13 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_ABORTED
* SatelliteError:NETWORK_TIMEOUT
*/
void deprovisionSatelliteService(in String token, in IIntegerConsumer errorCallback);
void deprovisionSatelliteService(in String token, in IIntegerConsumer resultCallback);
/**
* Request to get whether this device is provisioned with a satellite provider.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* whether this device is provisioned with a satellite provider.
*
@@ -272,7 +254,7 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestIsSatelliteProvisioned(in IIntegerConsumer errorCallback,
void requestIsSatelliteProvisioned(in IIntegerConsumer resultCallback,
in IBooleanConsumer callback);
/**
@@ -280,7 +262,7 @@ oneway interface ISatellite {
* The satellite service should check if there are any pending datagrams to be received over
* satellite and report them via ISatelliteListener#onSatelliteDatagramsReceived.
*
* @param errorCallback The callback to receive the error code result of the operation.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -297,15 +279,14 @@ oneway interface ISatellite {
* SatelliteError:SATELLITE_NOT_REACHABLE
* SatelliteError:NOT_AUTHORIZED
*/
void pollPendingSatelliteDatagrams(in IIntegerConsumer errorCallback);
void pollPendingSatelliteDatagrams(in IIntegerConsumer resultCallback);
/**
* Send datagram over satellite.
*
* @param datagram Datagram to send in byte format.
* @param isDemoMode Whether demo mode is enabled.
* @param isEmergency Whether this is an emergency datagram.
* @param errorCallback The callback to receive the error code result of the operation.
* @param resultCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
@@ -323,16 +304,16 @@ oneway interface ISatellite {
* SatelliteError:SATELLITE_NOT_REACHABLE
* SatelliteError:NOT_AUTHORIZED
*/
void sendSatelliteDatagram(in SatelliteDatagram datagram, in boolean isDemoMode,
in boolean isEmergency, in IIntegerConsumer errorCallback);
void sendSatelliteDatagram(in SatelliteDatagram datagram, in boolean isEmergency,
in IIntegerConsumer resultCallback);
/**
* Request the current satellite modem state.
* The satellite service should report the current satellite modem state via
* ISatelliteListener#onSatelliteModemStateChanged.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* the current satellite modem state.
*
@@ -346,14 +327,14 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestSatelliteModemState(in IIntegerConsumer errorCallback,
void requestSatelliteModemState(in IIntegerConsumer resultCallback,
in IIntegerConsumer callback);
/**
* Request to get whether satellite communication is allowed for the current location.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* whether satellite communication is allowed for the current location.
*
@@ -368,15 +349,15 @@ oneway interface ISatellite {
* SatelliteError:NO_RESOURCES
*/
void requestIsSatelliteCommunicationAllowedForCurrentLocation(
in IIntegerConsumer errorCallback, in IBooleanConsumer callback);
in IIntegerConsumer resultCallback, in IBooleanConsumer callback);
/**
* Request to get the time after which the satellite will be visible. This is an int
* representing the duration in seconds after which the satellite will be visible.
* This will return 0 if the satellite is currently visible.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param resultCallback The callback to receive the error code result of the operation.
* This must only be sent when the error is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* the time after which the satellite will be visible.
*
@@ -390,6 +371,6 @@ oneway interface ISatellite {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
void requestTimeForNextSatelliteVisibility(in IIntegerConsumer errorCallback,
void requestTimeForNextSatelliteVisibility(in IIntegerConsumer resultCallback,
in IIntegerConsumer callback);
}

View File

@@ -43,10 +43,8 @@ oneway interface ISatelliteListener {
/**
* Indicates that the satellite has pending datagrams for the device to be pulled.
*
* @param count Number of pending datagrams.
*/
void onPendingDatagramCount(in int count);
void onPendingDatagrams();
/**
* Indicates that the satellite pointing input has changed.
@@ -61,11 +59,4 @@ oneway interface ISatelliteListener {
* @param state The current satellite modem state.
*/
void onSatelliteModemStateChanged(in SatelliteModemState state);
/**
* Indicates that the satellite radio technology has changed.
*
* @param technology The current satellite radio technology.
*/
void onSatelliteRadioTechnologyChanged(in NTRadioTechnology technology);
}

View File

@@ -29,21 +29,4 @@ parcelable PointingInfo {
* Satellite elevation in degrees.
*/
float satelliteElevation;
/**
* Antenna azimuth in degrees.
*/
float antennaAzimuth;
/**
* Angle of rotation about the x axis. This value represents the angle between a plane
* parallel to the device's screen and a plane parallel to the ground.
*/
float antennaPitch;
/**
* Angle of rotation about the y axis. This value represents the angle between a plane
* perpendicular to the device's screen and a plane parallel to the ground.
*/
float antennaRoll;
}

View File

@@ -27,19 +27,13 @@ parcelable SatelliteCapabilities {
*/
NTRadioTechnology[] supportedRadioTechnologies;
/**
* Whether satellite modem is always on.
* This indicates the power impact of keeping it on is very minimal.
*/
boolean isAlwaysOn;
/**
* Whether UE needs to point to a satellite to send and receive data.
*/
boolean needsPointingToSatellite;
boolean isPointingRequired;
/**
* Whether UE needs a separate SIM profile to communicate with the satellite network.
* The maximum number of bytes per datagram that can be sent over satellite.
*/
boolean needsSeparateSimProfile;
int maxBytesPerOutgoingDatagram;
}

View File

@@ -70,20 +70,21 @@ public class SatelliteImplBase extends SatelliteService {
}
@Override
public void requestSatelliteListeningEnabled(boolean enable, boolean isDemoMode,
int timeout, IIntegerConsumer errorCallback) throws RemoteException {
public void requestSatelliteListeningEnabled(boolean enable, int timeout,
IIntegerConsumer errorCallback) throws RemoteException {
executeMethodAsync(
() -> SatelliteImplBase.this
.requestSatelliteListeningEnabled(
enable, isDemoMode, timeout, errorCallback),
.requestSatelliteListeningEnabled(enable, timeout, errorCallback),
"requestSatelliteListeningEnabled");
}
@Override
public void requestSatelliteEnabled(boolean enable, IIntegerConsumer errorCallback)
throws RemoteException {
public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
IIntegerConsumer errorCallback) throws RemoteException {
executeMethodAsync(
() -> SatelliteImplBase.this.requestSatelliteEnabled(enable, errorCallback),
() -> SatelliteImplBase.this
.requestSatelliteEnabled(
enableSatellite, enableDemoMode, errorCallback),
"requestSatelliteEnabled");
}
@@ -131,19 +132,11 @@ public class SatelliteImplBase extends SatelliteService {
}
@Override
public void requestMaxCharactersPerMOTextMessage(IIntegerConsumer errorCallback,
IIntegerConsumer callback) throws RemoteException {
public void provisionSatelliteService(String token, String regionId,
IIntegerConsumer errorCallback) throws RemoteException {
executeMethodAsync(
() -> SatelliteImplBase.this
.requestMaxCharactersPerMOTextMessage(errorCallback, callback),
"requestMaxCharactersPerMOTextMessage");
}
@Override
public void provisionSatelliteService(String token, IIntegerConsumer errorCallback)
throws RemoteException {
executeMethodAsync(
() -> SatelliteImplBase.this.provisionSatelliteService(token, errorCallback),
.provisionSatelliteService(token, regionId, errorCallback),
"provisionSatelliteService");
}
@@ -173,12 +166,11 @@ public class SatelliteImplBase extends SatelliteService {
}
@Override
public void sendSatelliteDatagram(SatelliteDatagram datagram, boolean isDemoMode,
boolean isEmergency, IIntegerConsumer errorCallback) throws RemoteException {
public void sendSatelliteDatagram(SatelliteDatagram datagram, boolean isEmergency,
IIntegerConsumer errorCallback) throws RemoteException {
executeMethodAsync(
() -> SatelliteImplBase.this
.sendSatelliteDatagram(
datagram, isDemoMode, isEmergency, errorCallback),
.sendSatelliteDatagram(datagram, isEmergency, errorCallback),
"sendSatelliteDatagram");
}
@@ -249,7 +241,6 @@ public class SatelliteImplBase extends SatelliteService {
* Listening mode allows the satellite service to listen for incoming pages.
*
* @param enable True to enable satellite listening mode and false to disable.
* @param isDemoMode Whether demo mode is enabled.
* @param timeout How long the satellite modem should wait for the next incoming page before
* disabling listening mode.
* @param errorCallback The callback to receive the error code result of the operation.
@@ -264,17 +255,18 @@ public class SatelliteImplBase extends SatelliteService {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
public void requestSatelliteListeningEnabled(boolean enable, boolean isDemoMode, int timeout,
public void requestSatelliteListeningEnabled(boolean enable, int timeout,
@NonNull IIntegerConsumer errorCallback) {
// stub implementation
}
/**
* Request to enable or disable the satellite modem. If the satellite modem is enabled,
* this will also disable the cellular modem, and if the satellite modem is disabled,
* this will also re-enable the cellular modem.
* 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.
*
* @param enable True to enable the satellite modem and false to disable.
* @param enableSatellite True to enable the satellite modem and false to disable.
* @param enableDemoMode True to enable demo mode and false to disable.
* @param errorCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
@@ -287,7 +279,8 @@ public class SatelliteImplBase extends SatelliteService {
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
public void requestSatelliteEnabled(boolean enable, @NonNull IIntegerConsumer errorCallback) {
public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
@NonNull IIntegerConsumer errorCallback) {
// stub implementation
}
@@ -401,29 +394,6 @@ public class SatelliteImplBase extends SatelliteService {
// stub implementation
}
/**
* Request to get the maximum number of characters per MO text message on satellite.
*
* @param errorCallback The callback to receive the error code result of the operation.
* This must only be sent when the result is not SatelliteError#ERROR_NONE.
* @param callback If the result is SatelliteError#ERROR_NONE, the callback to receive
* the maximum number of characters per MO text message on satellite.
*
* Valid error codes returned:
* SatelliteError:ERROR_NONE
* SatelliteError:SERVICE_ERROR
* SatelliteError:MODEM_ERROR
* SatelliteError:INVALID_MODEM_STATE
* SatelliteError:INVALID_ARGUMENTS
* SatelliteError:RADIO_NOT_AVAILABLE
* SatelliteError:REQUEST_NOT_SUPPORTED
* SatelliteError:NO_RESOURCES
*/
public void requestMaxCharactersPerMOTextMessage(@NonNull IIntegerConsumer errorCallback,
@NonNull IIntegerConsumer callback) {
// stub implementation
}
/**
* Provision the device with a satellite provider.
* This is needed if the provider allows dynamic registration.
@@ -431,6 +401,7 @@ public class SatelliteImplBase extends SatelliteService {
*
* @param token The token to be used as a unique identifier for provisioning with satellite
* gateway.
* @param regionId The region ID for the device's current location.
* @param errorCallback The callback to receive the error code result of the operation.
*
* Valid error codes returned:
@@ -446,7 +417,7 @@ public class SatelliteImplBase extends SatelliteService {
* SatelliteError:REQUEST_ABORTED
* SatelliteError:NETWORK_TIMEOUT
*/
public void provisionSatelliteService(@NonNull String token,
public void provisionSatelliteService(@NonNull String token, @NonNull String regionId,
@NonNull IIntegerConsumer errorCallback) {
// stub implementation
}
@@ -530,7 +501,6 @@ public class SatelliteImplBase extends SatelliteService {
* Send datagram over satellite.
*
* @param datagram Datagram to send in byte format.
* @param isDemoMode Whether demo mode is enabled.
* @param isEmergency Whether this is an emergency datagram.
* @param errorCallback The callback to receive the error code result of the operation.
*
@@ -550,8 +520,8 @@ public class SatelliteImplBase extends SatelliteService {
* SatelliteError:SATELLITE_NOT_REACHABLE
* SatelliteError:NOT_AUTHORIZED
*/
public void sendSatelliteDatagram(@NonNull SatelliteDatagram datagram, boolean isDemoMode,
boolean isEmergency, @NonNull IIntegerConsumer errorCallback) {
public void sendSatelliteDatagram(@NonNull SatelliteDatagram datagram, boolean isEmergency,
@NonNull IIntegerConsumer errorCallback) {
// stub implementation
}

View File

@@ -68,7 +68,7 @@ import android.telephony.ims.aidl.IImsRegistration;
import android.telephony.ims.aidl.IImsRegistrationCallback;
import android.telephony.ims.aidl.IRcsConfigCallback;
import android.telephony.satellite.ISatelliteDatagramCallback;
import android.telephony.satellite.ISatellitePositionUpdateCallback;
import android.telephony.satellite.ISatelliteTransmissionUpdateCallback;
import android.telephony.satellite.ISatelliteProvisionStateCallback;
import android.telephony.satellite.ISatelliteStateCallback;
import android.telephony.satellite.SatelliteCapabilities;
@@ -2726,11 +2726,13 @@ interface ITelephony {
*
* @param subId The subId of the subscription to enable or disable the satellite modem for.
* @param enable True to enable the satellite modem and false to disable.
* @param callback The callback to get the error code of the request.
* @param isDemoModeEnabled True if demo mode is enabled and false otherwise.
* @param callback The callback to get the result of the request.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestSatelliteEnabled(int subId, boolean enable, in IIntegerConsumer callback);
void requestSatelliteEnabled(int subId, boolean enable, boolean isDemoModeEnabled,
in IIntegerConsumer callback);
/**
* Request to get whether the satellite modem is enabled.
@@ -2743,17 +2745,6 @@ interface ITelephony {
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestIsSatelliteEnabled(int subId, in ResultReceiver receiver);
/**
* Request to enable or disable the satellite service demo mode.
*
* @param subId The subId of the subscription to enable or disable the satellite demo mode for.
* @param enable True to enable the satellite demo mode and false to disable.
* @param callback The callback to get the error code of the request.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestSatelliteDemoModeEnabled(int subId, boolean enable, in IIntegerConsumer callback);
/**
* Request to get whether the satellite service demo mode is enabled.
*
@@ -2764,7 +2755,7 @@ interface ITelephony {
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestIsSatelliteDemoModeEnabled(int subId, in ResultReceiver receiver);
void requestIsDemoModeEnabled(int subId, in ResultReceiver receiver);
/**
* Request to get whether the satellite service is supported on the device.
@@ -2787,39 +2778,28 @@ interface ITelephony {
void requestSatelliteCapabilities(int subId, in ResultReceiver receiver);
/**
* Start receiving satellite pointing updates.
* Start receiving satellite transmission updates.
*
* @param subId The subId of the subscription to stop satellite position updates for.
* @param errorCallback The callback to get the error code of the request.
* @param callback The callback to handle position updates.
* @param subId The subId of the subscription to stop satellite transmission updates for.
* @param resultCallback The callback to get the result of the request.
* @param callback The callback to handle transmission updates.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void startSatellitePositionUpdates(int subId, in IIntegerConsumer errorCallback,
in ISatellitePositionUpdateCallback callback);
void startSatelliteTransmissionUpdates(int subId, in IIntegerConsumer resultCallback,
in ISatelliteTransmissionUpdateCallback callback);
/**
* Stop receiving satellite pointing updates.
* Stop receiving satellite transmission updates.
*
* @param subId The subId of the subscritpion to stop satellite position updates for.
* @param errorCallback The callback to get the error code of the request.
* @param callback The callback that was passed to startSatellitePositionUpdates.
* @param subId The subId of the subscritpion to stop satellite transmission updates for.
* @param resultCallback The callback to get the result of the request.
* @param callback The callback that was passed to startSatelliteTransmissionUpdates.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void stopSatellitePositionUpdates(int subId, in IIntegerConsumer errorCallback,
in ISatellitePositionUpdateCallback callback);
/**
* Request to get the maximum number of bytes per datagram that can be sent to satellite.
*
* @param subId The subId of the subscription to get the maximum number of characters for.
* @param receiver Result receiver to get the error code of the request and the requested
* maximum number of bytes per datagram that can be sent to satellite.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestMaxSizePerSendingDatagram(int subId, in ResultReceiver receiver);
void stopSatelliteTransmissionUpdates(int subId, in IIntegerConsumer resultCallback,
in ISatelliteTransmissionUpdateCallback callback);
/**
* Register the subscription with a satellite provider.
@@ -2828,13 +2808,14 @@ interface ITelephony {
* @param subId The subId of the subscription to be provisioned.
* @param token The token to be used as a unique identifier for provisioning with satellite
* gateway.
* @param callback The callback to get the error code of the request.
* @param regionId The region ID for the device's current location.
* @param callback The callback to get the result of the request.
*
* @return The signal transport used by callers to cancel the provision request.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
ICancellationSignal provisionSatelliteService(int subId, in String token,
ICancellationSignal provisionSatelliteService(int subId, in String token, in String regionId,
in IIntegerConsumer callback);
/**
@@ -2846,7 +2827,7 @@ interface ITelephony {
*
* @param subId The subId of the subscription to be deprovisioned.
* @param token The token of the device/subscription to be deprovisioned.
* @param callback The callback to get the error code of the request.
* @param callback The callback to get the result of the request.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
@@ -2916,15 +2897,13 @@ interface ITelephony {
* Register to receive incoming datagrams over satellite.
*
* @param subId The subId of the subscription to register for incoming satellite datagrams.
* @param datagramType Type of datagram.
* @param callback The callback to handle the incoming datagrams.
*
* @return The {@link SatelliteError} result of the operation.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
int registerForSatelliteDatagram(
int subId, int datagramType, ISatelliteDatagramCallback callback);
int registerForSatelliteDatagram(int subId, ISatelliteDatagramCallback callback);
/**
* Unregister to stop receiving incoming datagrams over satellite.
@@ -2941,7 +2920,7 @@ interface ITelephony {
* Poll pending satellite datagrams over satellite.
*
* @param subId The subId of the subscription used for receiving datagrams.
* @param callback The callback to get the error code of the request.
* @param callback The callback to get the result of the request.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
@@ -2955,7 +2934,7 @@ interface ITelephony {
* @param datagram Datagram to send over satellite.
* @param needFullScreenPointingUI this is used to indicate pointingUI app to open in
* full screen mode.
* @param callback The callback to get the error code of the request.
* @param callback The callback to get the result of the request.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")