Skip to content
Snippets Groups Projects
Commit ff14b664 authored by Thomas Nguyen's avatar Thomas Nguyen
Browse files

Add API for checking emergency mode enabled

Bug: 323571903
Test: atest SatelliteManagerTestOnMockService
Manual test with SatelliteTestApp. SMS, MMS, call with live network.

Change-Id: I99553362b51c986a1bdbd87e3c675f354ff20fc2
parent 7cc37a34
No related branches found
No related tags found
No related merge requests found
......@@ -17384,6 +17384,19 @@ package android.telephony.satellite {
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @NonNull public static final android.os.Parcelable.Creator<android.telephony.satellite.AntennaPosition> CREATOR;
}
 
@FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public class EnableRequestAttributes {
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public boolean isDemoMode();
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public boolean isEmergencyMode();
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public boolean isEnabled();
}
@FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final class EnableRequestAttributes.Builder {
ctor @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public EnableRequestAttributes.Builder(boolean);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @NonNull public android.telephony.satellite.EnableRequestAttributes build();
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @NonNull public android.telephony.satellite.EnableRequestAttributes.Builder setDemoMode(boolean);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @NonNull public android.telephony.satellite.EnableRequestAttributes.Builder setEmergencyMode(boolean);
}
@FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public final class NtnSignalStrength implements android.os.Parcelable {
ctor @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public NtnSignalStrength(@Nullable android.telephony.satellite.NtnSignalStrength);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public int describeContents();
......@@ -17449,10 +17462,11 @@ package android.telephony.satellite {
method @FlaggedApi("com.android.internal.telephony.flags.carrier_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void removeAttachRestrictionForCarrier(int, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
method @FlaggedApi("com.android.internal.telephony.flags.carrier_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestAttachEnabledForCarrier(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestCapabilities(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.satellite.SatelliteCapabilities,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestEnabled(boolean, boolean, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestEnabled(@NonNull android.telephony.satellite.EnableRequestAttributes, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
method @FlaggedApi("com.android.internal.telephony.flags.carrier_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsAttachEnabledForCarrier(int, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsCommunicationAllowedForCurrentLocation(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsDemoModeEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsEmergencyModeEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsProvisioned(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
method @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public void requestIsSupported(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
......@@ -17514,6 +17528,7 @@ package android.telephony.satellite {
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_INVALID_TELEPHONY_STATE = 6; // 0x6
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_MODEM_BUSY = 22; // 0x16
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_MODEM_ERROR = 4; // 0x4
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_MODEM_TIMEOUT = 24; // 0x18
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_NETWORK_ERROR = 5; // 0x5
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_NETWORK_TIMEOUT = 17; // 0x11
field @FlaggedApi("com.android.internal.telephony.flags.oem_enabled_satellite_flag") public static final int SATELLITE_RESULT_NOT_AUTHORIZED = 19; // 0x13
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.telephony.satellite;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import com.android.internal.telephony.flags.Flags;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
/**
* EnableRequestAttributes is used to store the attributes of the request
* {@link SatelliteManager#requestEnabled(EnableRequestAttributes, Executor, Consumer)}
* @hide
*/
@SystemApi
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public class EnableRequestAttributes {
/** {@code true} to enable satellite and {@code false} to disable satellite */
private boolean mIsEnabled;
/**
* {@code true} to enable demo mode and {@code false} to disable. When disabling satellite,
* {@code mIsDemoMode} is always considered as {@code false} by Telephony.
*/
private boolean mIsDemoMode;
/**
* {@code true} means satellite is enabled for emergency mode, {@code false} otherwise. When
* disabling satellite, {@code isEmergencyMode} is always considered as {@code false} by
* Telephony.
*/
private boolean mIsEmergencyMode;
/**
* Constructor from builder.
*
* @param builder Builder of {@link EnableRequestAttributes}.
*/
private EnableRequestAttributes(@NonNull Builder builder) {
this.mIsEnabled = builder.mIsEnabled;
this.mIsDemoMode = builder.mIsDemoMode;
this.mIsEmergencyMode = builder.mIsEmergencyMode;
}
/**
* @return Whether satellite is to be enabled
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public boolean isEnabled() {
return mIsEnabled;
}
/**
* @return Whether demo mode is to be enabled
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public boolean isDemoMode() {
return mIsDemoMode;
}
/**
* @return Whether satellite is to be enabled for emergency mode
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public boolean isEmergencyMode() {
return mIsEmergencyMode;
}
/**
* The builder class of {@link EnableRequestAttributes}
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public static final class Builder {
private boolean mIsEnabled;
private boolean mIsDemoMode = false;
private boolean mIsEmergencyMode = false;
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public Builder(boolean isEnabled) {
mIsEnabled = isEnabled;
}
/**
* Set demo mode
*
* @param isDemoMode {@code true} to enable demo mode and {@code false} to disable. When
* disabling satellite, {@code isDemoMode} is always considered as
* {@code false} by Telephony.
* @return The builder object
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
@NonNull
public Builder setDemoMode(boolean isDemoMode) {
if (mIsEnabled) {
mIsDemoMode = isDemoMode;
}
return this;
}
/**
* Set emergency mode
*
* @param isEmergencyMode {@code true} means satellite is enabled for emergency mode,
* {@code false} otherwise. When disabling satellite,
* {@code isEmergencyMode} is always considered as {@code false} by
* Telephony.
* @return The builder object
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
@NonNull
public Builder setEmergencyMode(boolean isEmergencyMode) {
if (mIsEnabled) {
mIsEmergencyMode = isEmergencyMode;
}
return this;
}
/**
* Build the {@link EnableRequestAttributes}
*
* @return The {@link EnableRequestAttributes} instance.
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
@NonNull
public EnableRequestAttributes build() {
return new EnableRequestAttributes(this);
}
}
}
......@@ -160,6 +160,13 @@ public final class SatelliteManager {
public static final String KEY_DEMO_MODE_ENABLED = "demo_mode_enabled";
/**
* Bundle key to get the response from
* {@link #requestIsEmergencyModeEnabled(Executor, OutcomeReceiver)}.
* @hide
*/
public static final String KEY_EMERGENCY_MODE_ENABLED = "emergency_mode_enabled";
/**
* Bundle key to get the response from
* {@link #requestIsSupported(Executor, OutcomeReceiver)}.
......@@ -341,6 +348,13 @@ public final class SatelliteManager {
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public static final int SATELLITE_RESULT_ILLEGAL_STATE = 23;
/**
* Telephony framework timeout to receive ACK or response from the satellite modem after
* sending a request to the modem.
*/
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public static final int SATELLITE_RESULT_MODEM_TIMEOUT = 24;
/** @hide */
@IntDef(prefix = {"SATELLITE_RESULT_"}, value = {
SATELLITE_RESULT_SUCCESS,
......@@ -366,7 +380,8 @@ public final class SatelliteManager {
SATELLITE_RESULT_NOT_SUPPORTED,
SATELLITE_RESULT_REQUEST_IN_PROGRESS,
SATELLITE_RESULT_MODEM_BUSY,
SATELLITE_RESULT_ILLEGAL_STATE
SATELLITE_RESULT_ILLEGAL_STATE,
SATELLITE_RESULT_MODEM_TIMEOUT
})
@Retention(RetentionPolicy.SOURCE)
public @interface SatelliteResult {}
......@@ -482,9 +497,7 @@ public final class SatelliteManager {
* 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.
* @param enableDemoMode {@code true} to enable demo mode and {@code false} to disable.
* @param attributes The attributes of the enable request.
* @param executor The executor on which the error code listener will be called.
* @param resultListener Listener for the {@link SatelliteResult} result of the operation.
*
......@@ -493,9 +506,10 @@ public final class SatelliteManager {
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public void requestEnabled(boolean enableSatellite, boolean enableDemoMode,
public void requestEnabled(@NonNull EnableRequestAttributes attributes,
@NonNull @CallbackExecutor Executor executor,
@SatelliteResult @NonNull Consumer<Integer> resultListener) {
Objects.requireNonNull(attributes);
Objects.requireNonNull(executor);
Objects.requireNonNull(resultListener);
......@@ -509,8 +523,8 @@ public final class SatelliteManager {
() -> resultListener.accept(result)));
}
};
telephony.requestSatelliteEnabled(mSubId, enableSatellite, enableDemoMode,
errorCallback);
telephony.requestSatelliteEnabled(mSubId, attributes.isEnabled(),
attributes.isDemoMode(), attributes.isEmergencyMode(), errorCallback);
} else {
throw new IllegalStateException("telephony service is null.");
}
......@@ -630,6 +644,61 @@ public final class SatelliteManager {
}
}
/**
* Request to get whether the satellite service is enabled for emergency mode.
*
* @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 satellite is enabled
* for emergency mode and {@code false} otherwise.
* If the request is not successful, {@link OutcomeReceiver#onError(Throwable)}
* will return a {@link SatelliteException} with the {@link SatelliteResult}.
*
* @throws SecurityException if the caller doesn't have required permission.
*/
@RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public void requestIsEmergencyModeEnabled(@NonNull @CallbackExecutor Executor executor,
@NonNull OutcomeReceiver<Boolean, 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_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_EMERGENCY_MODE_ENABLED)) {
boolean isEmergencyModeEnabled =
resultData.getBoolean(KEY_EMERGENCY_MODE_ENABLED);
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onResult(isEmergencyModeEnabled)));
} else {
loge("KEY_EMERGENCY_MODE_ENABLED does not exist.");
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onError(new SatelliteException(
SATELLITE_RESULT_REQUEST_FAILED))));
}
} else {
executor.execute(() -> Binder.withCleanCallingIdentity(() ->
callback.onError(new SatelliteException(resultCode))));
}
}
};
telephony.requestIsEmergencyModeEnabled(mSubId, receiver);
} else {
executor.execute(() -> Binder.withCleanCallingIdentity(() -> callback.onError(
new SatelliteException(SATELLITE_RESULT_ILLEGAL_STATE))));
}
} catch (RemoteException ex) {
loge("requestIsEmergencyModeEnabled() RemoteException: " + ex);
ex.rethrowAsRuntimeException();
}
}
/**
* Request to get whether the satellite service is supported on the device.
*
......
......@@ -2742,14 +2742,19 @@ interface ITelephony {
* Request to enable or disable the satellite modem.
*
* @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 isDemoModeEnabled True if demo mode is enabled and false otherwise.
* @param enableSatellite True to enable the satellite modem and false to disable.
* @param enableDemoMode True if demo mode is enabled and false otherwise. When
* disabling satellite, {@code enableDemoMode} is always considered as
* {@code false} by Telephony.
* @param isEmergency {@code true} means satellite is enabled for emergency mode, {@code false}
* otherwise. When disabling satellite, {@code isEmergency} is always
* considered as {@code false} by Telephony.
* @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, boolean isDemoModeEnabled,
in IIntegerConsumer callback);
void requestSatelliteEnabled(int subId, boolean enableSatellite, boolean enableDemoMode,
boolean isEmergency, in IIntegerConsumer callback);
/**
* Request to get whether the satellite modem is enabled.
......@@ -2774,6 +2779,18 @@ interface ITelephony {
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestIsDemoModeEnabled(int subId, in ResultReceiver receiver);
/**
* Request to get whether the satellite service is enabled with emergency mode.
*
* @param subId The subId of the subscription to request whether the satellite demo mode is
* enabled for.
* @param receiver Result receiver to get the error code of the request and whether the
* satellite is enabled with emergency mode.
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission("
+ "android.Manifest.permission.SATELLITE_COMMUNICATION)")
void requestIsEmergencyModeEnabled(int subId, in ResultReceiver receiver);
/**
* Request to get whether the satellite service is supported on the device.
*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment